BlBana's BlackHouse.

PHP反序列化漏洞复现

导语

之前做华山杯的一道题里,在读取一个文件内容的时候,由于无法直接读取,看writeup里采用改了php反序列化的方式去读取了对应的文件,当时看有点懵逼,就去补了补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
<html>
<head>
<meta charset="UTF-8">
<title>图片上传</title>
<script type = "text/javascript">
function checkFile(){
var flag = false; //是否可以上传的标志位
var str = document.getElementById("file").value; //获取文件名
str = str.substring(str.lastIndexOf('.') + 1); //获取扩展名
var arr = new Array('png','jpg','gif','bmp');
for(var i = 0; i < arr.length; i++){
if(str == arr[i]){
flag = true;
}
}
if (!flag) {
alert('文件不合法!!');
}
else{
alert('文件上传成功');
}
return flag;
}
</script>
</head>
<body>
<form action = "upload.php" method = "post" onsubmit="return checkFile()" enctype = "multipart/form-data"> <!--在onsubmit事件中验证表单后 必须加上return 否则表单会继续提交-->
<input type = "file" name = "file" id = "file" />

<input type = "submit" value = "提交" name = "submit" />
</form>
</body>
</html>

客户端验证代码如上所示,在测试的过程中,需要注意的问题是,在表单事件onsubmit中,需要写上return,此时当在JS代码中验证文件后缀名失败以后,可以阻止表单继续上传,否则无论JS代码如何验证,文件都会成功上传到服务器。