CTF 总结01:文件上传绕过

问题描述

(⌐■_■)在做图片马上传的题目,发现自己折腾很久,终于成功达到了抽刀断水、南辕北辙的效果~距离正确的WP仅有一部西游记那么长——

没关系,菜鸟做题就是这样屡败屡战~失败是成功的山顶洞人,也只能这么安慰自己辽~

但是,在解题过程中发现了其他的上传绕过思路,在这里梳理一下,说不定以后能用得到~本次是第二版啦,还会根据做题经验增补的~

祭出图片:白龙马镇文~保佑我的CTF图片马题目可以顺利通过,阿弥陀佛~

CTF 总结01:文件上传绕过_第1张图片

(●'◡'●)施法结束,正文开始~


思路分析:

文件上传解题思路就很传统:举起菜刀、蚁剑、冰蝎、哥斯拉往页面的脸上砸过去就行了~

本篇想测试的内容仅有两条:

1.穿新马甲的一句话木马连接蚁剑;

2.骑图片马的一句话木马连接蚁剑。


解决方案:

工具:蚁剑、Burpsuite

靶场:DVWA在线 Vulnerability: File Upload  或者 用虚拟机+phpstudy当作靶场~

————————————————————————

0 前言

参考1:ctf.show_墨子轩、的博客-CSDN博客_蚁剑返回数据为空

参考2:蚁剑连接不上远程shell的解决办法_大河下。的博客-CSDN博客

测试过程中,蚁剑连接补上的可能原因如下~

①如果返回一长串红色框报错,那就是连接地址写错了

②如果返回地址为空的黄色框报错,那就是写错文件或者包在上传过程中被WAF改掉或是拦截了;

可以试试BurpSuite抓包分析一下上传前后的内容是否有变化~如果上传内容没有被改掉、防火墙也没有问题,那就再仔细检查一下代码的内容吧~

————————————————————————

1 朴实无华的一句话木马

这个在没有防火墙盯着的情况下必然成功,但是...哪个不正经的网站会没有防火墙呢,做贼还是要讲一点技术含量的~

2 穿上马甲的一句话木马

查阅资料,以下是一些市面上常见的马甲款式——

————————————————————————————————

WEBSHELL免杀绕过WAF思路&方法(一) - 知乎 (zhihu.com)

php一句话木马变形技巧_bylfsj的博客-CSDN博客_一句话木马phpinfo

↑这两篇博文主要是替换与拼接函数绕过,均有代码段~其中第一篇对于原理的介绍多一些~

————————————————————————————————

一句话木马绕过检测的常见思路_si1ence_whitehat的博客-CSDN博客_一句话木马绕过

↑这一篇博文里有编码绕过的代码段,最后用主流的杀毒软件测试了一下效果~

————————————————————————————————

(1)php短标签,绕过的过滤

php中最常见的标签为,不过在题目上传时这种可能会被过滤掉。根据查询结果,还有三种php的标签,分别是:

需要配置short_open_tag,适合执行php语句; 或许不需要配置,或许可以不闭合(就是只写),适合输出变量;

②<% %> 需要配置asp_tags,涉及到IIS6.0的解析漏洞;

 php7及之后就已经不支持的写法~

参考博文:php中的短标签 太坑人了 - dongguol - 博客园 (cnblogs.com)
————————————————

我们下面分别测试一下这三种情况~

连接成功~成功~连接成功~成功~各版本均支持~





②<% %>连接失败~可能是因为我在用默认配置,没有配置asp_tags;

<% @eval($_POST['a']);%>

   <% %>涉及到IIS6.0解析漏洞的部分,可参考:墨者学院06 内部文件上传系统漏洞分析溯源 

③尝试连接以前一定要注意版本:从PHP7开始,这种写法就已经不支持了哦~Php怎么不支持〈script language=“php”〉?_百度知道 (baidu.com)

网站版本正好是php7,因此失败了;于是我在虚拟机上调为php5的版本尝试连接,发现也是失败的...

 (2)更换函数,企图寻找一种没被写进黑名单的函数

这个我使用蚁剑连接失败了...切换php5版本、php7版本都是失败的...

php官方手册中关于assert的用法:如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行~PHP: assert - Manual,注意参数assertion一栏的注解——

CTF 总结01:文件上传绕过_第2张图片

——————


如果替换的函数使用create_function,此函数在内部执行 eval(),这个是成功的!但也要注意版本,8.0.0以后就不会成功了(7.2.0~8.0.0中间的版本可以执行)~PHP: create_function - Manual

CTF 总结01:文件上传绕过_第3张图片


emm...call_user_func是调用回调函数,每当我看到他的说明就会很绕...简而言之这个与assert(@$_POST['a']);效果是相近的 ,实际连接也是失败的~顺便一提,把assert改成eval以后,也没有成功~


//:$a['internal'][841]表示的是assert

 至于这个异曲同工,连接也是失败的~


 这个是用数组的方式为每个元素回调函数,效果与call_user_func也是类似的~连接是失败的~改成eval以后也是失败的~

——————


preg_replace是执行一个正则表达式的搜索和替换,在参数$replacement中存在eval执行作用。这个在php5中执行成功了~但是在php7中提示为空、在php8中提示错误~


 但是类似的写法,这样子连接是失败的,因为用到了变量作为执行函数~

 ——————

parse_str — 将字符串解析成多个变量,以下是官方手册,看来在php8以后也不太好用了~不过在php5、php7中我这里也没有连接成功~PHP: parse_str - Manual

CTF 总结01:文件上传绕过_第4张图片

 (3)字符组合+变量函数,绕过执行函数的简单过滤; 


 以变量作为函数,这个连接失败了~看来用可变变量绕过的方法现在不太香了...


“.”在php种属于并置运算,可以连接两个字符串,“{}”也可以实现相同的功能,详PHP: 字符串运算符 - Manual~

我可以理解这个代码的逻辑,但是连接失败了~无论$c前是否有@,都失败了~


 这个是用数组的方式组合,我这边同样也连接失败了~

 (4)字符编码与混淆绕过试一试...


 这个代码里因为用到了可变变量替换方式,所以同样失败了~

这个代码里因为用到了数组回调的替换方式,所以同样失败了~ 

 

这个鬼画符一样的ascii转码版本成功了,连接的密码是1,在php5、php7版本中可用,在php8的版本中会报错~

———————————————————————————————————————————

3 骑图片马的一句话木马

嗯...讲真这么测一圈能活到php8的绕过代码,好像就寥寥无几了~

我...的一位朋友,表面在为代码安全的进步高兴,内心实际已经开始感到焦虑了(?)

但值得开心的是有几个幸存者可以基于php5和php7运行的,所以我们再测试一下这些代码结合图片上传效果是怎么样的~

 (1)前端代码仅检查文件扩展名

有时ctrl+u查看源码,可以看到前端使用Javascript写成的小小WAF,拦截.php格式文件的上传~

这种情况下,把一句话木马的文件名扩展从.php变为.jpg .png等格式上传~ 

CTF 总结01:文件上传绕过_第5张图片

开启burp suite手动将包的后缀改为.php后放行,再用蚁剑链接即可~

CTF 总结01:文件上传绕过_第6张图片

 (2)cmd命令拼接图片马

制作php图片马的方法可以参考这两篇(iInk大佬的博客封面好看,实名羡慕~):做一个图片马的四种方法(详细步骤) - 1ink - 博客园 (cnblogs.com)

免杀图片马制作详细教程 - 知乎 (zhihu.com)

我们用主流的cmd方法制作就好啦,这里我把原图片命名为0.jpg,一句话木马命名为0.php,合成命名为easyupload0.jpg,在当前文件夹的地址栏中直接输入cmd~

CTF 总结01:文件上传绕过_第7张图片

 然后把这句话直接粘在后面~

copy 0.jpg/b + 0.php/a easyupload0.jpg // /b表示二进制,/a表示ascii码

生成一个崭新的jpg文件,因为懒得开启bp,就直接把后缀改成php连接了,发现....连接失败了...

CTF 总结01:文件上传绕过_第8张图片

用text打开以后发现最末端的一句话木马时没有尖括号的...

我又从网上下载了一匹崭新的卡通马图片,发现结果是一样一样的...而且即使把最后一句话粘贴成执行语句,也是连接不上的...

 (3)文件增加图片头,Burpsuite改包,配合.user.ini上传,成功~

这个可以参考攻防世界easyuopload题目解题流程,有配图与步骤说明~

工具:Burpsuite、蚁剑;

解题基本流程:

1).user.ini文件→增加图片头→上传.user.ini,burpsuite抓包修改文件类型

2)php短标签木马→增加图片头→修改文件后缀→上传图片→回显图片上传地址

3)蚁剑→连接上传地址同目录的php文件(不可以直接连接非.php后缀的图片) 

攻防世界WEB练习-easyupload_不知名白帽的博客-CSDN博客

Web安全攻防世界06 easyupload_梅头脑_的博客-CSDN博客_easyupload

 ——————————————————————————————————————————

目前这篇文章第二版哦,以后会根据解题经验再总结的~

最后再总结一下我本人连接成功的一句话木马吧~

↑全版本可用~





↑全版本可用~ 


↑php8不可用~


↑php7、8不可用~

 

↑php8不可用,连接密码为1~

也许是因为我比较菜,所以成功得极少...总感觉有些代码其实稍微改改是很有潜力的...等我有一天变厉害了再回来想想办法~

博文写得模糊或者有误之处,欢迎留言讨论与批评~

码字不易,若有所帮助,可以点赞支持一下博主嘛?感谢~(●'◡'●)

你可能感兴趣的:(#,CTF总结,php,web安全)