sqli-lab注入靶场全部通关教程(1-65关)👻
1|0sqli-lab注入靶场全部通关教程(1-65关)
2|0基础挑战
2|1Less-1(四个注入:联合,报错,时间,布尔)
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 联合,报错,时间,布尔 | id='$id' |
源码分析
联合查询注入
1. 注入点发现
2. 猜测字段数
3. 判断会显点为(2,3)
4. 爆出数据库和用户名
5. 爆出所有数据库名
6. 爆出 security
数据库的所有表
7. 查看 users
表的所有列名
8. 查看 username
和 password
列的内容
报错注入
1. floor报错注入
2. extractvalue报错注入
3. updatexml报错注入
时间盲注
数据库的第一个字母为115,即s
if(a,b,c):如果a为真,则这个式子值为b,否则为c
布尔盲注
数据库的第一个字母为115,即s
2|2Less-2
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 联合,布尔,时间,报错 | id=$id |
源码分析
具体利用方法和第一关一样,只是闭合方式不一样,这里就不做叙述。
示例:
?id=1 and 1=1-- -
2|3Less-3
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 联合,报错,时间,布尔 | id=('$id') |
源码分析
具体利用方法和第一关一样,只是闭合方式不一样,这里就不做叙述。
示例:
?id=1') and '1'='1'-- -
2|4Less-4
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 联合,报错,时间,布尔 | id=("$id") |
源码分析
具体利用方法和第一关一样,只是闭合方式不一样,这里就不做叙述。
示例:
?id=1") and 1=1-- -
2|5Less-5
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,时间,布尔 | id='$id' |
源码分析
因为页面不输出查询结果,因此不可以使用联合查询,但是不影响报错,布尔和时间注入。
具体利用方法和第一关一样,只是闭合方式不一样,这里就不做叙述。
示例:
?id=1' and 1=1-- -
2|6Less-6
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,时间,布尔 | id="$id" |
源码分析
因为页面不输出查询结果,因此不可以使用联合查询,但是不影响报错,布尔和时间注入。
具体利用方法和第一关一样,只是闭合方式不一样,这里就不做叙述。
示例:
?id=1" and 1=1-- -
2|7Less-7
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 时间,布尔 | id=(('$id')) |
源码分析
因为把print_r(mysql_error())
给注释掉了,并且页面不显示查询结果,所以只能使用布尔注入和时间注入
具体利用方法和第一关一样,只是闭合方式不一样,这里就不做叙述。
示例:
?id=1')) and 1=1-- -
2|8Less-8
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 时间,布尔 | id='$id' |
源码分析
具体方式跟第7关一样,就不再啰嗦了,只是闭合方式不一样。利用方法同第一关一样。
示例:
?id=1' and 1=1-- -
2|9Less-9
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 时间 | id='$id' |
源码分析
因为这里不管是真
还是假
的输出结果都一样,所以这里就不能用布尔注入了,只能使用时间注入。
具体方式跟第8关一样,就不再啰嗦了。利用方法同第一关一样。
2|10Less-10
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 时间 | id="$id" |
源码分析
因为这里不管是真
还是假
的输出结果都一样,所以只能使用时间注入。并且print_r(mysql_error())
给注释掉了,不能用报错。具体方式跟第9关一样,就不再啰嗦了,只是闭合方式不一样。利用方法同第一关一样。
2|11Less-11
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间 | username='$uname' and password='$passwd' |
因为这里是POST型注入,其实利用方式还是和第一关一样,但是这是一个POST型的,后面我估计应该都是POST型注入,所以还是写一写。
源码分析
联合查询注入
1. 注入点发现
2. 猜测字段数为2
3. 判断会显点为(1,2)
4. 爆出数据库和用户名
5. 爆出所有数据库名
6. 爆出 security
数据库的所有表
7. 查看 users
表的所有列名
8. 查看 username
和 password
列的内容
报错注入
1. floor报错注入
2. extractvalue报错注入
3. updatexml报错注入
时间盲注
数据库的第一个字母为115,即s
if(a,b,c):如果a为真,则这个式子值为b,否则为c
布尔盲注
数据库的第一个字母为115,即s
2|12Less-12
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间 | username=("$uname") and password=("$passwd") |
源码分析
这里同第11关的注入方式一样,只是闭合方式不同,这里就不再示范了。
2|13Less-13
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 报错,布尔,时间 | username=('$uname') and password=('$passwd') |
源码分析
这里因为页面不管成功与否没有了回显,所以联合查询就用不了,其他的不影响,布尔查询可以通过成功或者失败的图片不一样判别。
这里同第11关的注入方式一样,只是闭合方式不同,这里就不再示范了。
2|14Less-14
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 报错,布尔,时间 | username="$uname" and password="$passwd" |
源码分析
第14关跟第13关除了闭合方式不一样,其他的完全一样的。利用方式也跟第11关一样,除了不能联合查询之外。
2|15Less-15
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 布尔,时间 | username='$uname' and password='$passwd' |
源码分析
我们可以看到print_r(mysql_error())
被注释了,所以这里我们不能用报错注入了,因为页面依然没有回显,联合注入也不能用。这关只能用布尔注入和时间注入。跟第14关的区别就是闭合方式不一样,然后报错注入不能用了。
具体利用方法同第11关有异曲同工之妙,灵活变通一下即可。
2|16Less-16
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 布尔,时间 | username=("$uname") and password=("$passwd") |
源码分析
同第15关一样,只是闭合方式不一样。利用方法参考第11关,灵活变通一下即可。
2|17Less-17
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 报错,时间 | password = '$passwd' |
源码分析
报错注入示例:
其实还是同第11关的方法灵活变通一下即可!
2|18Less-18
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 报错,时间 | VALUES ('$uagent') |
源码分析
这一关的注入点在Insert语句上,没有对U-agent和IP做过滤,而且输出了mysql的报错信息,所以本关支持报错注入。
PHP 获取客户端IP的变量有:
- $_SERVER['REMOTE_ADDR']:基本上不能被伪造,因为是直接从 TCP 连接信息中获取的
- $_SERVER['HTTP_CLIENT_IP']:很少使用了,可以伪造
- $_SERVER['HTTP_X_FORWARDED_FOR']:可以伪造
所以这里的IP是无法被伪造的,就只能通过uagent来进行注入,我们构造闭合利用报错注入来测试
2|19Less-19
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 报错,时间 | VALUES ('$uagent') |
源码分析
这一关跟第18关的区别就是,现在注入点变成了Referer
字段,注入方式是一模一样。同样没有对Referer
和IP
做过滤。
2|20Less-20
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,布尔,报错,时间 | username='$cookee' |
源码分析
这一关主要注入点是在cookie,未对cookie参数做过滤。并且在页面存在输出回显,而且运用了mysql的报错函数mysql_error()
,所以这关存在联合查询,报错,布尔和时间盲注。鉴于cookie注入是第一次出现,还是啰嗦一下给个实例吧。
联合查询
报错注入
布尔注入和时间注入就不示范了,基本跟上面的一样,稍微修改修改即可,自己动手写个小脚本跑跑也可以的👻
3|0高级注入
3|1Less-21
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,布尔,报错,时间 | username=('$cookee') |
源码分析
我们可以看到这一关跟20关基本一模一样,唯一的区别就是cookie base64加密之后在解密代入数据库中查询,所以这里我们只需要把payload经过base64加密就行了👻
联合注入
报错注入
时间注入跟布尔注入需要自行写脚本爆破,这里就不啰嗦了,跟前面的大致一样!
3|2Less-22
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,布尔,报错,时间 | username="$cookee" |
源码分析
我们可以看到这一关跟21关基本一模一样,唯一的区别就是闭合方式不同,这里是双引号闭合,而21关是单引号+括号闭合。所以我们构造payload经过base64加密传入,这里示范下报错注入:
报错注入
3|3Less-23
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,布尔,报错,时间 | id='$id' |
源码分析
我们发现这里对我们输入的 id
做了过滤,将#
和--
替换成了空,我们没法用注释符了,我们可以构造闭合绕过。
联合查询
报错查询
3|4Less-24
这是一个经典的二次注入的题目,下面我们来分析一下源码,有好几个页面。
源码分析
- index.php
就是一个表单页面,没什么敏感代码,验证账号和密码,验证成功即可登录,否则登陆失败。页面如下:
-
忘记密码:左下角是忘记密码
-
新建用户:右下角是新建用户
-
fail.php
就是如果你登陆认证失败就将你跳转到index.php
。
- forgot_password.php
啥也不是,就一张图片,没什么用!👻
- logged-in.php
登录之后的信息显示,显示你的用户名和修改密码的表单
- new_user.php
创建新用户的前端代码,就是一些表单什么的
- login_create.php
创建新用户的后端代码:
- login.php
- pass_change.php
我们进行一串分析发现好像都进行了转义,咋一看没啥注入点,实际上的确不能使用常规的思路来进行注入,因为这题是二次注入,然后再登录即可。假设不知道 admin 用户的情况下,想要修改掉 admin 用户的密码的话,这里就使用的是二次注入的姿势了。
二次注入 :简单概括就是黑客精心构造 SQL 语句插入到数据库中,数据库报错的信息被其他类型的 SQL 语句调用的时候触发攻击行为。因为第一次黑客插入到数据库的时候并没有触发危害性,而是再其他语句调用的时候才会触发攻击行为,这个就是二次注入。
先看新建用户的地方:$username= mysql_escape_string($_POST['username']) ;
username 被 mysql_escape_string 函数过滤了,该函数的作用如下:
危险字符 | 转义后 |
---|---|
' | \' |
" | \" |
\ | \ |
再看刚刚那个更新语句:
ok,注入点就在这一句更新sql语句中,因为在pass_change.php
中username
是直接获取的,并没有进行安全转义。虽然在一开始我们注册新用户的时候username
被安全转义了,但是这个只是暂时的,最后存入数据库之后还是不变的。所以我们可以构造这样一条更新语句从而修改管理员admin
的密码:
UPDATE users SET PASSWORD='$pass' where username='admin'# and password='$curr_pass
我们在通过注册一个用户:admin'#123
,然后登录这个用户去修改密码就可以成功修改admin
的密码。
然后我们修改密码,就会成功修改admin
用户的密码,然后就可以用新密码登录admin
用户了。
3|5Less-25
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,布尔,报错,时间 | id='$id' |
源码分析
这里id
输入过滤了or
和and
,然后是单引号拼接。还是存在很多绕过的。
符号替换
双写嵌套绕过
比如or
写成oorr
,password
写成passwoorrd
等
联合查询
报错注入
3|6Less-26
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,布尔,报错,时间 | id='$id' |
源码分析
我们发现这一关跟25关没多大区别,就是黑名单数量增多了而已,过滤的东西更多了。下面我们具体分析一下:
- 过滤了 or 和 and 可以采用 双写或者 && || 绕过
- 过滤注释 可以使用闭合绕过
- 过滤了空格 可以使用如下的符号来替代:
符号 | 说明 |
---|---|
%09 | TAB 键(水平) |
%0a | 新建一行 |
%0c | 新建一页 |
%0d | return功能 |
%0b | TAB 键(垂直) |
%0a | 空格 |
报错注入
3|7Less-27
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,布尔,报错,时间 | id='$id' |
源码分析
我们可以看到27跟26关的区别就是过滤函数更多了,对就这一个区别,我们看看怎么样绕过。
union 和 select 没有忽略大小写 导致写了很多冗杂的规则,但还是可以轻易绕过。
联合注入
3|8Less-28
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,布尔,时间 | id=('$id') |
源码分析
这一关就是闭合方式有一点变化,然后union select的大小写都过滤了(两个合起来过滤,比如union9select就不会过滤),但是我们还是可以通过双写绕过。
联合查询
3|9Less-29
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间 | id='$id' |
源码分析
这样我们可以构造两个id,第一个id经过java_implimentation
,然后这个id就会经过whitelist
检测,第二个id就逃脱检测了。
例如:
- Apache PHP 会解析最后一个参数
- Tomcat JSP 会解析第一个参数
报错注入
3|10Less-30
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间 | id="$id" |
第30关跟29关没什么区别,就是拼接方式不一样
联合注入
3|11Less-31
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间 | id=("$id") |
这一关跟第30关没什么区别,就是闭合方式不一样,就不啰嗦了。
报错注入
3|12Less-32
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间 | id='$id' |
源码分析
宽字节注入原理
MySQL 在使用 GBK 编码的时候,会认为两个字符为一个汉字,例如 %aa%5c 就是一个 汉字。因为过滤方法主要就是在敏感字符前面添加 反斜杠 \,所以这里想办法干掉反斜杠即可。
%df
吃点\
具体的原因是 urlencode(') =%5c%27
,我们在%5c%27
前面添加%df
,形 成%df%5c%27
,MySQL 在 GBK 编码方式的时候会将两个字节当做一个汉字,这个时候就把%df%5c
当做是一个汉字,%27
则作为一个单独的符号在外面,同时也就达到了我们的目的。- 将
\'
的\
过滤掉
例如可以构造%5c%5c%27
的情况,后面的%5c
会被前面的%5c
给注释掉。这也是 bypass 的一种方法。
本关卡采用第一种%df
宽字节注入来吃掉反斜杠,下面直接丢 payload 吧:
3|13Less-33
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间 | id='$id' |
源码分析
这一关跟32关没什么变化,拼接方式也一样,就是过滤方法不一样
addslashes()
函数返回在预定义的字符前添加反斜杠
预定义字符 | 转义后 |
---|---|
' | ' |
" | " |
\ | \ |
该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串,和 Less-32 的函数功能是差不的,依旧可以使用宽字节进行注入。
注意:使用 addslashes(),我们需要将 mysql_query 设置为 binary 的方式,才能防御此漏洞
3|14Less-34
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间 | username='$uname' |
这一关跟33关没什么区别,只不过是GET变成了POST数据,下面是payload:
3|15Less-35
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间 | id=$id |
源码分析
这题属实有点搞笑,addslashes
这个是用来转义单引号等预定义字符的,但是进行SQL查询却没用到符号,直接查询的。下面直接打payload试试:
3|16Less-36
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间 | id='$id' |
源码分析
mysql_real_escape_string()
会检测并转义如下字符:
危险字符 | 转义后 |
---|---|
' | ' |
" | " |
\ | \ |
有没有发现这一关跟第34关的防护相同,是的,用34关的payload就行了。
联合注入
3|17Less-37
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间 | username='$uname' |
源码分析
这一关跟36关差不多,也是用的 mysql_real_escape_string
进行防护,只不过用的POST方式,直接上payload:
4|0堆叠注入
4|1原理介绍
MySQL 的命令行中,每一条语句以;结尾,这代表语句的结束,如果在注入过程中在;后面添加要执行的 SQL 语句的话,这种注入方式就叫做堆叠注入 (stacked injection) 。下面就是简单的示例:
4|2Less-38
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间,堆叠 | id='$id' |
源码分析
- 区别就是原来的SQL查询是:
- 而现在的SQL查询是:
payload:
4|3Less-39
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间,堆叠 | id=$id |
这一关跟38关差不多,就是闭合方式不一样,直接上payload:
4|4Less-40
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间,堆叠 | id=('$id') |
这一关跟39关差不多,就是闭合方式不一样,直接上payload:
4|5Less-41
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,布尔,时间,堆叠 | id=$id |
跟39关差不多,就是少了报错输出!不能报错注入了,就不再啰嗦了。👻
4|6Less-42
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间,堆叠 | username='$username' |
这个题漏洞比较多,下面一个一个来分析:
-
index.php
就是一些前端代码,表单什么的,没什么敏感信息 -
login.php
payload:
这一题漏洞比较多,首先 login.php 中 password 没有过滤,可以进行常规的报错注入以及盲注,同时本身又支持堆叠查询,所以也支持堆叠注入。 pass_change.php update 语句存在漏洞,典型的二次注入,类似于 Less-24。
4|7Less-43
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,报错,布尔,时间,堆叠 | username=('$username') |
这一关跟42关的利用方式一样,只不过拼接方式不一样罢了,这里就不啰嗦了。
4|8Less-44
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,布尔,时间,堆叠 | username='$username' |
这一关跟42关的利用方式一样,因为没有了报错输出,所以这里没有了报错注入,这里就不啰嗦了。
4|9Less-45
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
POST | 联合,布尔,时间,堆叠 | username=('$username') |
这一关跟43关的闭合方式一样,只不过没有了报错输出,少了报错注入罢了。
4|10Less-46
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,布尔,时间 | ORDER BY $id |
源码分析
order by 不同于 where 后的注入点,不能使用 union 等进行注入。注入方式十分灵活,下面在本关来详细讲解一下。
验证方式
升序和降序验证
rand()验证
rand(ture) 和 rand(false) 的结果是不一样的
所以利用这个可以轻易构造出一个布尔和延时类型盲注的测试 payload
此外 rand() 结果是一直都是随机的
延时验证
这种方式均可以延时,延时的时间为 (行数*1) 秒
报错注入
布尔注入
时间注入
into outfile
如果导入不成功的话,很可能是因为 Web 目前 MySQL 没有读写权限造成的。
利用导出文件 getshell
3c3f70687020706870696e666f28293b3f3e 是 <php phpinfo();> 的十六进制编码
4|11Less-47
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,布尔,时间 | ORDER BY '$id' |
这一关跟第46关利用方法一样,只不过是闭合方式不一样。
4|12Less-48
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 布尔,时间 | ORDER BY $id |
这一关跟46关一样,但是没有了报错信息输出,所以少了报错注入,但是布尔和时间盲注还是可以的。
4|13Less-49
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 布尔,时间 | ORDER BY '$id' |
这一关跟47关一样,但是没有了报错信息输出,所以少了报错注入,但是布尔和时间盲注还是可以的。
4|14Less-50
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,布尔,时间,堆叠 | ORDER BY $id |
这一关跟46关的区别就是查询方式由mysql_query
变成了mysqli_multi_query
,因此支持堆叠注入,其他注入方式跟46关一样,这里演示一下堆叠注入:
4|15Less-51
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,布尔,时间,堆叠 | ORDER BY '$id' |
这一关跟50关利用方法是一样的,除了闭合方式不一样。利用的时候修改一下闭合方式即可。
4|16Less-52
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 布尔,时间,堆叠 | ORDER BY $id |
这一关跟50关的利用方法一样,只是少了报错注入而已,因为没有了mysql的报错函数,没有报错信息输出。
4|17Less-53
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 布尔,时间,堆叠 | ORDER BY '$id' |
这一关跟51关的利用方法一样,只是少了报错注入而已,因为没有了mysql的报错函数,没有报错信息输出。
5|0进阶挑战
5|1Less-54
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,联合,布尔,时间 | id='$id' |
源码分析
这个题目意思是要我们十步之内拿到key数据吧,相当于应用了,下面我们试试联合注入:
- 判断字段数
- 查看回显点
- 爆出表名
表名:1LCT0WXIQ7(这个每次都会刷新,每次都不一样!)
- 爆出列名
列名:id,sessid,secret_FC8G,tryy
- 爆出
secret_FC8G
列的内容,猜测这个列里面应该就是key
key:EqnpxZUw2nTbAyIzP4JTc26G
总共只需要6步,所以说十步之内拿到key还是可以的。
5|2Less-55
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,联合,布尔,时间 | id=($id) |
这一关跟54关利用方法一样,就是闭合方式不一样,同时这一关给了14次机会。
5|3Less-56
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,联合,布尔,时间 | id=('$id') |
这一关跟54关利用方法一样,就是闭合方式不一样,同时这一关也给了14次机会。
5|4Less-57
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,联合,布尔,时间 | id="$id" |
这一关跟54关利用方法一样,就是闭合方式不一样,同时这一关也给了14次机会。
5|5Less-58
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,布尔,时间 | id='$id' |
这一关跟前面的主要区别代码如下:
就是说页面并不会显示数据库查询到的东西,而是只输出uname数组固定的值,就没办法联合查询了,但是有print_r(mysql_error());
这个呀,所以我们可以进行报错注入,具体payload如下:
我查询的表名:MRUXXAF5WK 列名:secret_HJ71 key:vNYO4sz333BXSOloI5Hrjwtt
5|6Less-59
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,布尔,时间 | id=$id |
这一关跟58关的利用方法一样,只是拼接方式不一样。
5|7Less-60
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,布尔,时间 | id="$id" |
这一关跟58关的利用方法一样,只是拼接方式不一样。
5|8Less-61
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 报错,布尔,时间 | id=(('$id')) |
这一关跟58关的利用方法一样,只是拼接方式不一样。
5|9Less-62
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 布尔,时间 | id=('$id') |
呕吼,这一关报错注入没有了,print_r(mysql_error())
这个函数被注释了,那么这一关就只能布尔注入或者时间注入了,一般实战中要么通过sqlmap这样的神器跑出来,如果sqlmap没有跑出来,就自己写个小脚本跑出来(脚本就不写了,大家自己尝试写吧)。手工注入的话怕不是得注到死(不推荐哈!有头铁的可以去试试,拿ascii码表一个一个去爆😂)
这个还不太好爆呀!次数就140次,超过了就重置了,白爆了😭
5|10Less-63
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 布尔,时间 | id='$id' |
这个跟62关利用方法一样啊,但是次数更少了,只有130次,超过次数就会重置表名跟列名还要key值,然后拼接方式不一样。
5|11Less-64
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 布尔,时间 | id=(($id)) |
这个跟63关利用方法一样啊,次数也是130次,超过次数就会重置表名跟列名还要key值,然后拼接方式不一样。
5|12Less-65
请求方式 | 注入类型 | 拼接方式 |
---|---|---|
GET | 布尔,时间 | id=("$id") |
这个跟63关利用方法一样啊,次数也是130次,超过次数就会重置表名跟列名还要key值,然后拼接方式不一样。
6|0总结
之前呢一直依赖于sqlmap这样的注入神器,但是手工注入也是很重要的。就想着来刷一下sql靶场练习练习自己的手工注入,发现还是感觉提升不少了。至少联合和报错注入已经敲的滚瓜烂熟了。哈哈哈!sqlmap用来跑盲注还是效果显著的,但是联合和报错注入其实手工跟sqlmap速度差不多的。就最后那几关sqlmap也是跑不出来,哎,比较次数限制在那,sqlmap拿大量payload去测试,还没测完就换了。建议大家还是自己写一下小脚本,还是挺实用的。
__EOF__

本文链接:https://www.cnblogs.com/tzf1/p/15766828.html
关于博主:既然选择了远方,那就冲冲冲!🎉
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构