参考:https://blog.csdn.net/weixin_44426869/article/details/104236854
检测方法:
1.前端检测:一般用js。绕过方法:1.禁用js。2.直接改数据包
2.type检测:检测的是数据包中Content-Type
的部分,是前端根据文件类型生成数据包时加的部分,并不会影响程序所以没什么用。绕过:在发包之前改成需要的就行。
3.文件后缀检测:获取文件名之后,通过字符串截取的方法来获取后缀来判断。
截取一般包含以下几部分:
1 | $file_name = trim($_FILES['upload_file']['name']); //收尾去空和部分不合法字符 //(1) |
可以根据缺少哪一部分来判断怎么改:
(1)在后面添空格
(2)在文件名后面加点,在服务端再次生成文件的时候会自动删去
(3)大小写绕过,随便改后缀的大小写
(大小写绕过原理:Windows系统下,对于文件名中的大小写不敏感。例如:test.php和TeSt.PHP是一样的。Linux系统下,对于文件名中的大小写敏感。例如:test.php和 TesT.php就是不一样的。)(还是那句话,前提是要开启这个功能,反正phpstudy没开)
(4)方法1:```::$DATA```绕过:直接在文件名后面加```::$DATA```(注意:连接木马的时候不要把```::$DATA```复制到网址)
方法2:所有```str_ireplace()```函数都可以“双鞋绕过”,比如检查的是```::$DATA```,那就可以```::$D::$DATAATA```,如果检查的是```php```,那就可以```phphpp```
(5)意义不明,不知道怎么绕
(6)补充:原文件的后缀不是目的,让文件在服务器上的文件后缀可识别才是目的。比如Pass-10中,文件名是去除末尾的点之后的状态,所以可以用两点绕过:```hack.php. .```
一般用于对照的文件后缀有以下这些:
1 | ".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".user.ini" |
可以根据缺少的过滤后缀来确定绕过方法
(1) ".php"=".php5"=".php4"=".php3"=".php2"(前提:开)
(2) .htaccess:
创建```1.htaccess```,并将其上传:
1
2
3
<FilesMatch "上传的图片马的文件名">
SetHandler application/x-httpd-php
</FilesMatch>
再上传图片马即可。(前提:开)
补充:htaccess文件介绍:htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
其中.htaccess文件内容:
SetHandler application/x-httpd-php
设置当前目录所有文件都使用PHP解析,那么无论上传任何文件,只要文件内容符合PHP语言代码规范,就会被当作PHP执行。不符合则报错。
(3) .user.ini:
这个题目的前提是,上传目录内本来就有一个php文件,假设文件名为:```readme.php```
先上传一个以auto_prepend_file=1.gif为内容的.user.ini文件,然后再上传一个内容为php的一句话的脚本,命名为1.gif,.user.ini文件里面的意思是:所有的php文件都自动包含1.gif文件。.user.ini相当于一个用户自定义的php.ini。
然后访问```readme.php```就可以了
(另:首先很多的php不一定支持自己写ini,其次有些老版的服务器不一定支持实时检测.user.ini所以实际操作不是很现实)
刷到:Pass-12