二次编码注入原理

为什么要进行编码,有点应为原始的格式并不适合传输
比如

1
+  =  &  ;

要是上面的这个符号在http传输中会和原始的有冲突

原理
在这里插入图片描述
urlencode()函数就是URL编码的

1
2
3
4
<?php
$str = "%25";
echo 'urlencode($str);
?>

结果等于

1
%

上面的%25url解码后就是%
在这里插入图片描述

%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注入漏洞的
在这里插入图片描述

进行数据读取

  1. 判断有几列
    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 --+
    报错
    在这里插入图片描述
    等等等等等等等等等等等等等等就不演示了