Roarctf 部分Writeup

白帽子论坛 5月前 463

 

pwn

easypwn

程序有后门规则,直接利用该规则就行利用即可。


脚本:


easyrop

明显的栈溢出,通过程序读取文件夹属性的功能来判断靶机环境。然后注意溢出的index即可。程序禁用了execve系统调用,可以直接ROP读取flag或者shellcode读取。


easyheap

程序并没有开启pie,利用后门函数构造 double free 控制 .bss 段来泄露地址并劫持 hook。


realloc_magic

存在 double free , 观察 realloc 源码可知当传入的chunk不为空,且size为0的情况下,会free掉原chunk并且返回0。


利用上面的技巧并配合漏洞劫持 tcache ,然后劫持 stdout, 最后劫持 hook, 由于其中需要爆破两次,所以概率是 1/256 。


ez_op

模拟虚拟机,没有任何防护,直接改 free 的hook 为 system 函数即可,最后留下字符串 sh 为参数就能起shell。


checkin

用gmp库实现的RSA算法,参数 e 可控,所以可以控制其在内存中的内容。

利用解密函数泄露出heap地址和libc地址,再根据 realloc 函数的特性劫持 hook 即可。


 

web

easy_calc

这道题刚打开看到是一个计算器功能,一开始以为是ssti。并且发现有个calc.php


发现过滤了一些字符,和国赛的math题有点像,但是奇怪的是这里num输入字符无法解析。也就是说有waf让num参数只能是数字。怎么绕过去呢?

前几天读到一个php的一个字符串解析特性绕过bypass。

https://www.freebuf.com/articles/web/213359.html

就是在num前面加个空格等一些字符就能绕过了。

剩下的就很简单了,利用chr()函数绕过特殊字符的限制来进行代码执行读flag。


image

easy_java

这道题个人感觉就是考了一些java web的一些基础知识。突破点就是弱口令,和一个脑洞filename。

这里的弱口令是admin/admin888,进入后可以看到一个图片images/img1.jpg

image

但是通过get怎么都无法dowload下这个图片,后来对友说这是个post。

image

这下就可以了。然后就去读文件了:

image

image

base64解密后就是flag

image

online_proxy

根据“可能会收集信息”的提示,在 X-Forwarded-For 处fuzz出来注入点。

然后就是注入的套路,二分法,时间盲注。然后就是在库里面找flag。。。找了很久才找到。

BTW,ssrf完全没用的。

附上完整注入脚本:


然后拿到假flag:flag{G1zj1n_W4nt5_4_91r1_Fr1end}

第二行记录才是真flag:RoarCTF{wm-fb3a5c2a0093f22a}

simple_upload

thinkphp 的上传demo,allowExts 没啥用,其它格式的文件也能上传。

不过限制了.php,仔细看才发现,只有 $_FILES['file'] 做了限制,所以上传多个文件就能绕过了。

然后文件名默认根据 uniqid 生成,同时上传文件,挺相近的,可以爆破一下。

附上上传和爆破文件名的脚本:


直接能拿到flag。

dist

前端源码提供了 sourceMapping,在 webpack:///./src/config.js 里找到源码包。


后端用 go 写的,审计了一下,在 route/auth.go 里找到一段。


登录时用户名拼接,存在注入,但是过滤了关键词,而且还有waf(waf/main.go)。


此处waf可绕过。它以 rnrn 分割包,取后面的进行waf过滤,所以建立tcp socket,分包发,就能绕过过滤。

然后可以注入得到 secret表secret字段 的内容,用来构造 cookie,这样就能登录 admin 账号了。

然后审了很久都没审出来如何利用。后来放了提示 Go slice feature,网上找到相同的利用点。

Teaser CONFidence CTF 2019 “The Lottery” Writeup

同样的利用方法。

伪造cookie登录admin,start启动casino。然后注册一个普通账号,beg 3次,join 进去 pending list。回到管理员,addplayer将这个普通账号添加到formal player。回到普通账号,再beg一次。等5分钟后这一轮casino结束,普通账号查看个人info,就能看到flag。

 

Misc

黄金六年

首先将文件解压出来得到一个 mp4 的压缩包,常规思路使用 binwalk 分析一下,没有发现什么

strings 分析字符串,发现有一段 base64 编码的字符

尝试进行 base64 解码,会发现是 rar 的压缩包文件

提取到本地,尝试进行解压发现需要密码

在视频中尝试寻找密码,使用 imovie 打开视频文件,在寻找关键帧的时候会发现二维码

总共可以发现四个二维码,扫码之后拼接 key 得到:iwantplayctf

最后解压就得到 flag

flag:roarctf{CTF-from-RuMen-to-RuYuan}

TankGame

下载以后发现是一个unity 3D的游戏,直接去找Assembly-CSharp.dll文件,用ILspy反编译一下C#的代码,各个函数如下图所示:

image

在MapManager可以看到地图和flag的生成条件为Destroynum==4或者Destroynum==5时:

image

地图和游戏的地图是一一对应的,空是8,基地是0,水是4,草地是5,砖块是1

image

在bullect这个类里可知,砖头和基地可被破坏,破坏后基地会变为9,砖块会变为空也就是8,子弹只有击中砖块或者基地时DestroyNum才会增长,所以直接编写代码爆破DestroyNum为4或者为5时的所有情况。

image


结果为:


编写脚本并使用程序内置的MD5函数得到结果如下图所示:

image

forensic

发现是内存取证,使用Volatility内存取证神器。

首先收集一下信息,在使用mftparser插件时发现了flag.zip 和 flag.rar

volatility -f mem.raw --profile=Win7SP1x86 mftparser > mft.txt

内容很多,随查找了一下flag关键字。

继续查找flag关键字,找到了flag.zip 和 flag.rar 的十六进制 dump 下来

在压缩包里发现了flag.txt,接下来思路是找到 压缩包的密码

首先简单看了下图片。

volatility -f mem.raw --profile=Win7SP1x86 filescan | grep "png|jpg|jpeg"

filesacn发现在我的文档,图片,文件夹里,有张图片 ,dumpfiles 下来就是flag.zip 的密码,成功拿到flag

在剪贴板中还发现了百度云链接,https://pan.baidu.com/s/12hQlubfkvdQhASi0dWs_5Q

后续很多步骤 最后并没有和flag.zip 串起来,就不细说了

 

Crypto

CoinFlip

给了一个ropsten测试链的地址

https://ropsten.etherscan.io/address/0xF60ADeF7812214eBC746309ccb590A5dBd70fc21

查看智能合约代码,

只要循环调用Ap()和Transfer()500次就能getflag.

但是有gas限制,分成5次提交.


领取测试币,编译后deploy到测试区块.

transact5次,我这里交易了不止五次..

1571028272823

再compile ,deploy 题目的智能合约.看下余额,大于500就可以拿flag了.

1571029808203

提交base64编码的email地址,

1571029667876

babyRSA

使用wilson定理得到余数,之后把n分解为三个素数解密文


image

RSA

n可以直接分解,脚本如下:


image

 

RE

polyre

使用 ida 载入后发现是控制流平坦化

2019-10-14-17-46-17.png

参考
https://paper.seebug.org/192/

使用 angr 进行化简,得到关键算法。
2019-10-14-17-48-35.png
程序两个循环,外层循环六次,每次拿 8 个字节,内层循环 64 次,进行加密。

加密伪代码:


exp:



本文转载自安全客。


上一篇:没了下一篇:Truegaze:一款针对AndroidiOS应用源码的静态分析工具
最新回复 (0)
返回
发帖
免责声明:本站部分资源来源于网络,如有侵权请发邮件(bmz@baimaozi.cn)告知我们,我们将会在24小时内处理。