由Three Hit聊聊二次注入

之前参与“强网杯”,学到了不少姿态,其间的web题three hit形象深入,考的是二次注入的问题,这儿对二次注入测验做一个小结。 0×01什么是二次注入? 所谓二次注入是指已存储(数据库、文件)的用...

之前参与“强网杯”,学到了不少姿态,其间的web题three hit形象深入,考的是二次注入的问题,这儿对二次注入测验做一个小结。
0×01什么是二次注入?
所谓二次注入是指已存储(数据库、文件)的用户输入被读取后再次进入到 SQL 查询句子中导致的注入。
二次注入是sql注入的一种,可是比一般sql注入运用愈加困难,运用门槛更高。一般注入数据直接进入到 SQL 查询中,而二次注入则是输入数据经处理后存储,取出后,再次进入到 SQL 查询。
0×02二次注入的原理
二次注入的原理,在第一次进行数据库刺进数据的时分,仅仅只是运用了 addslashes 或者是凭借 get_magic_quotes_gpc 对其间的特别字符进行了转义,在写入数据库的时分仍是保留了本来的数据,可是数据自身仍是脏数据。
在将数据存入到了数据库中之后,开发者就以为数据是可信的。鄙人一次进行需求进行查询的时分,直接从数据库中取出了脏数据,没有进行进一步的查验和处理,这样就会形成SQL的二次注入。比如在第一次刺进数据的时分,数据中带有单引号,直接刺进到了数据库中;然后鄙人一次运用中在凑集的过程中,就形成了二次注入。

0×03二次注入的实例——SQLIlab lesson-24
学习SQL注入,必定要刷SQLIlab,这儿以SQLIlab lesson-24为例,也是调查的二次注入的点。翻开标题

这题正常的流程是首要注册一个账号,然后登陆进去会让你修正新的暗码:

假如直接测验在登陆处测验SQL注入,payload: admin’# 发现失利:

看一下源代码:

登陆处的username和password都通过了mysql_real_escape_string函数的转义,直接履行SQL句子会转义’,所以该处无法形成SQL注入。
Ok,此刻咱们注册一个test’#的账号:

注册用户的时分用了mysql_escape_string过滤参数:

可是数据库中仍是刺进了问题数据test’#

也就是说通过mysql_escape_string转义的数据存入数据库后被复原,这儿做了一个测验:

回到标题,此刻,test用户的本来暗码为test,咱们以test’#用户登陆,再进行暗码修正

咱们无需填写current password即可修正test用户的暗码:

咱们再看一下test用户的暗码:

Ok,咱们看一下源代码:  

Username直接从数据库中取出,没有通过转义处理。在更新用户暗码的时分其实履行了下面的指令:
“UPDATEusers SET PASSWORD=’22′ where username=’test’#‘ and password=’$curr_pass’”;

[1] [2]  黑客接单网

  • 发表于 2021-04-08 11:52
  • 阅读 ( 222 )
  • 分类:互联网

0 条评论

请先 登录 后评论
王三
王三

695 篇文章

你可能感兴趣的文章

相关问题