二次注入
一、概念
二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。
二、原理
防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。
在第一次进行数据库插入数据的时候,仅仅只是对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,比如单引号数据,虽然直接注入失效了,但是数据写入到了数据库,数据库中存的这个数据本身还是脏数据。在将数据存入到了数据库中之后,很多开发者都会认为数据是可信的。在下一次进行需要进行查询的时候,直接从数据库中取出了脏数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。比如在第一次插入数据的时候,数据中带有单引号,直接插入到了数据库中;然后在下一次使用中在拼接的过程中,就形成了二次注入。
三、步骤
二次注入,可以概括为以下两步:(第一次注入,第二次触发,并不是注入了两次)
第一步:插入恶意数据
进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。
第二步:引用恶意数据
开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。
四、实战演练
点击注册
注册成功
发现后台数据库中存在刚刚注册的用户
再次登录上,并更改密码为666
再次在数据库中查询,发现原有用户的密码改变
中转注入
原理
通过在客户端和服务器之间设置一个中间代理(如Burpsuite),对注入的payload进行统一的加工和处理,从而绕过一些网站的安全防护。
伪静态注入
一、概念
看似为静态页面,实则为动态页面,就称之为伪静态页面,而伪静态页面的注入就叫做伪静态注入。
通过url区分静态、动态、伪静态
动态:(有数据交互)
http://192.168,0,26/pikachu/vu1/sg1i/sgli_str.php?name=vince&submit=%E6%9F%A5%E8%AF%A2https://search,id.com/search?Keyword=%E6%89%8B%E6%9C%BA&WG=%E6%89%8B%E6%9C%BA&eV=5 122671%5E
静态:(没有数据交互(不能搜索、评论))
http://127.0.0.1:8000/jaden/index.htm1
http://127.0.0.1:8000/jaden/person.htm1伪静态:
http://127.0.0.1:8000/jaden/1/wei_news .htm1
http://127.0.0.1:8000/jaden/news/1.htm1
二、原理
将动态网站伪装成静态网站,以降低被攻击的风险。