文件上传漏洞实战靶场笔记
记录下自己写的文件上传漏洞靶场的write up,包括了大部分的文件上传实战场景,做个笔记。
0x01 客户端js验证绕过上传
只是客户端验证 关闭js或者抓包上传即可。
0x02 MIME类型验证绕过上传
验证了Content-Type 改成图片的MIME类型即可
0x03 黑名单后缀名(php3、phtml)绕过上传
这关检测了文件后缀名,禁止了常见动态脚本后缀
不过php3 和pthml没有禁止,在apache配置文件中当php解析
注意php的版本 非线程安全版本的php是解析不了的
0x04 .htaccess配置文件绕过上传
这关把所有动态后缀都禁用了,包括php3、phtml,但是目录下没有.htaccess配置文件
我们可以通过上传这个配置文件达到以php解析的目的
0x05 黑名单后缀名(大小写)绕过上传
这关已经有.htaccess配置文件,不过可以通过文件后缀大小写来绕过。例如PHp,测试尝试即可。
0x06
黑名单后缀名(空格)绕过上传
黑名单后缀名(点)绕过上传
黑名单后缀名(::$DATA)绕过上传
这三关都是通过在文件后缀后面加相应的字符,绕过服务端对于文件后缀的检测,执行的时候又以php执行,达到上传木马的目的。
这里利用的都是windows系统的特性,文件后缀有空格、点、::$DATA、<
,·>
,>>>
,0x81-0xff
等但不限于这些字符时,windows会自动去除这些字符。
例如1.php::$DATA 保存的时候就是1.php
0x07 黑名单后缀名(后缀点+空格+点)绕过上传
这关单纯去除了末尾的点和空格,所以 点+空格+点 第一次过滤后剩 点,又达到我们前面几关类似的情况,造成上传。
0x08 黑名单后缀名(双写后缀)绕过上传
这关是个逻辑代码问题,使用str_replace函数对文件中动态脚本名替换为空,我们可以双写后缀
例如1.phphpp 去除了中间的php变成1.php,同样达到我们的目的。
0x09 get类型%00截断绕过上传
这关报错的路径在get参数里 可以直接%00绕过 ,00截断版本只限于5.3之前哦~
0x0A POST类型%00截断绕过上传
这关报错的路径在post参数里 可以直接00截断绕过 ,唯一不同的是post中内容不会给你直接url编码,所以我们需要改一下hex,00截断版本只限于5.3之前哦~
在后面加上hack.php+空格 然后切换hex选项卡,找到hack.php后面这个空格的hex,对应是20,我们改成00
即可上传
0x0B 图片内容伪造绕过上传
这关检测了内容 我们使用cmd合成图片马或者加上图片文件头(列如GIF89A)进行欺骗即可
0x0C 竞争条件绕过上传
这关利用的是竞争条件,服务器先允许你上传文件,然后检测是否合法,不合法再删除,我们要利用的就是在服务器删除前,访问到我们上传的php。
例如这里我准备一个tj.php,内容为
<?php $myfile = fopen("qing.php", "w"); $txt = "<?php phpinfo();?>"; fwrite($myfile, $txt); fclose($myfile); ?>
条件竞争中burp需要线程设置偏大
这里我上传我的tj.php,然后不停的访问tj.php上传后的地址,即http://www.hack_upload.com/upload/tj.php
这里使用两个发包器,一个包是上传我们tj.php的包,一个是访问我们上传tj.php后的地址
利用条件竞争,访问tj.php成功,所以新建了一个qing.php
0x0D CVE-2015-2348绕过上传
这关利用的是CVE-2015-2348 move_uploaded_file() 00截断,这里需要提交一个文件名作为保存文件的名称
看源码发现move_uploaded_file()函数中的img_path是由post参数save_name控制的,因此可以在save_name利用00截断绕过:
------------------------------------------------------------------------------------