先来看一下header是什么
Header是指HTTP的头,包括
User-Agent:使得服务器能够识别客户使用的操作系统,游览器版本等.(很多数据量大的网站中会记录客户使用的操作系统或浏览器版本等存入数据库中)
Cookie:网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密).
X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,(通常一些网站的防注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实现伪造IP]).
Clien-IP:是代理服务器发送的HTTP头,取得用户的IP。
Rerferer:浏览器向 WEB 服务器表明自己是从哪个页面链接过来的.
Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号
这里回到了SQL注入的本质了,
【web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。】
正是因为http头信息会被服务器收集存入数据库,给了“测试人员”可乘之机。
因此,不仅仅是可以改UA,也可以改其它的,可以一个个试过去。
因为header注入的特点,它基本只会是用户登录成功的那一下记录http头,所以我们要通过burpsuit去爆破出用户名和密码。
使用集束炸弹来爆破用户名和密码,
爆破出用户名admin和密码123456
emm,还是因为header注入的特性,他不会有回显,这里就需要通过让数据库报错的方式来得到我们想要的数据。
这里就要介绍两个函数了,
一个是
updatexml() 更新xml文档的函数
语法:updatexml(目标xml内容,xml文档路径,更新的内容)
updatexml()与extractvalue()类似,一样的功能,这里就不多赘述了。
另一个是
concat(str1,str2,…)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
【concat()有一个升级版contcat_ws(),这里也不多赘述了。】
emm,看题。
我们已经爆破出用户名和密码了,那么接下去就是在http头哪里改语句,我们普遍是改的UA。
语句
1’and updatexml(1,concat(0x7e,database()),1),1)— domren
单引号是为了闭合,0x7e是波浪号的十六进制表示,一是为了报错,二是防过滤。
第一个1是给UA的值,第二个1和第三个1都是updatexml()这个函数的,随便写。第四个1是UA里面的username,也是随便写。
至于第四个1后面的”)”,这个我倒还真不知道是为什么,不过我试着去掉它,发现显示不出数据库名了,想来还是闭合用,与$uagent前面的“(”闭合吧。
得到数据库名head_error
接下去要查表名,需要用到子查询,就是在一个正常的查询里面,还有一个查询,
语句
1’ and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1),1)— domren
这里用到了POST注入里学到的一个函数group_concat(),这样就不用limit来一个个去看了。
这里直接爆出了几个表名,不过明显,flag_head才是我们想要的
接下去查字段名
语句
1’ and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=’flag_head’ )),1),1)— domren
这里得到两个字段:Id,flag_h1
emm,接下去查flag_h1字段的数据
语句
1’ and updatexml(1,concat(0x7e,(select group_concat(flag_h1) from flag_head )),1),1)— domren
这就将所有的flag爆出来了。不得不说,group_concat()函数功能真强大。
第二题
看源代码
emm,将UA改成referer就,就好了吧。
语句
1’and updatexml(1,concat(0x7e,database()),1),1)— domren
emm,得到了数据库名。其他做法同第一题(毕竟flag第一题就爆出来了,哈哈)。
看第三题
还是看源代码
这题看来是要改IP的了
语句
1’and updatexml(1,concat(0x7e,database()),1),1)— domren
emm,这一题我看其他人都是用的插件,老师上课教的时候用的也是插件,emm,我懒,就还是在burpsuit上做了。但我一看傻了,那里有关于IP的头啊,找也找不到。然后,我就在重发器那里的头那里加了一个X-Forwarded-For,哈,我原本也不知道成不成的,没想到真成了。
emm,这里同样报错数据库名了,其他做法同第一题,这里不做过多赘述了。