请遵守国家相关法令法规,在做安全测试前先进行申请,不要做有害公共利益的行为。
HTTP请求头我们可以通过chrome的F12开发者工具看到,一般的请求头内容如下:
HTTP请求头我们主要关注四个部分:分别是referer、user-agent、cookie、X-Forwarded-For
referer:
该部分表示为请求来源页面,如对该部分进行设置可限制来源页面不能对网站资源进行访问。通常该部分的内容不会带入数据库。
user-agent:
该部分表名请求来源的设备相关信息,标明来源是电脑、移动端设备。该部分内容同样不会在数据库进行验证。
cookie:
该部分为人员信息标识部分,在老旧的网站中存在可注入的点,老旧网站中会显示"cookie: user=test",该部分数据会直接带入到数据库中进行查询确认,数据库执行的语句类似“select * from user where user =cookie[‘user’] and XXX”
即将获取到的信息进行替换后为 “select * from user where user=‘test’ and XXX”。此时我们可以对cookie部分进行构造,将test变更为test’完成条件的闭合,并用-- l或者是#进行后续语句的注释,并在#之前加入我们希望执行的操作或使用sqlmap进行注入。
此类型的注入可以通过加入session的方式来解决,目前大多数网站采用的方式是将cookie存储在服务器端,服务器端下发session信息给客户端,客户端通过去随机生成的内容去服务器端校对信息,不会直接带入数据库进行操作。
X-Forwarded-For
XFF是用来标识请求来源的IP信息,如:
192.168.1.133 10.12.77.123 23.46.77.235
局域网IP 外网IP 代理IP
为了限制部分人员恶意刷帖,网站可能会针对IP进行限制。
后台的验证逻辑可能是
insert into XXX(d1,d2,ip,d3) values(1,2,‘ip’,3) where XXX
或是进行针对IP的更新
update XXX where XXX
还有根据IP的查询
select(同上)
通常我们的XFF字段的内容格式如下:
X-Forwarded-For :8.8.8.8
我们通过构造XFF的值信息为8.8.8.8’
此时我们的insert语句替换为:
insert into XXX(d1,d2,ip,d3) values(1,2,‘8.8.8.8’ #’,3)
这时候发现语句没有进行闭合,不是一个完整的sql,我们可以通过补位来构造完整的SQL语句。
insert into XXX(d1,d2,ip,d3) values(1,2,‘8.8.8.8’,1) #’,3)
语句闭合后可以在#前进行注入操作。
update类型的如果后面注释掉条件的话会进行全表的操作,为了避免这种情况,我们可以在update语句闭合后加入条件为假让更新不执行,如and 0,此时也可以尝试sleep(3)来进行时间的盲注。
很多时候没有XFF内容,我们可以通过工具将该部分内容加入请求头中。