OGeek线上CTF挑战赛杂项题详细Write Up(完结篇)

百家 作者:OPPO安全应急响应中心 2019-11-07 09:25:46


MISC-2019


使用LSBSteg来获得隐写的字符串:



在线Decode这个base64字符串,得到Ascii85编码的字符串,再进行Decode,得到flag。


Misc-PyBox


设置默认shell 为bash

sudo dpkg-reconfigure dash   选NO__import__.__getattribute__('__clo'+'sure__')[0].cell_contents('o'+'s').__getattribute__('sy'+'stem')("[ `cut -b 1 flag` == 'a' ] || sleep 5")socket readflag fork

 题目是一个黑盒PySandbox ,由于代码是 socket 写的,不对输出进行转发,因此是个纯黑盒的PySandbox.


题目环境保留了sleep功能,通过一些常用的payload + sleep 可以进行判断是否成功执行命令。


最后可以用 cut + sleep 进行盲注读flag
payload 如下:

import__.__getattribute__('__clo'+'sure__')[0].cell_contents('o'+'s').__getattribute__('sy'+'stem')("[ `cut -b 1 /home/flag` == 'a' ] || sleep 5")


misc-upgrade


通过查看s.py与逆向upg可以发现在通过pow上传文件后,将会验证固件格式与签名,通过后进行解压并执行do_upgrade.sh。其中固件分为四部分:固件头、tar.gz压缩包、压缩包文件签名、压缩包中do_upgrade.sh文件签名。


根据逆向upg与观察firmware.upg文件可以分析出大致结构


头四字节为magic number,随后八个字节是包含的文件个数。然后是三个文件header,每个header的头两字节为其余部分的xor key,同时这两字节是文件hash的末尾两字节。文件header中包含type指定压缩包/签名文件,长度与文件中偏移。


在签名验证代码中可以发现将压缩包中所有文件的文件名与固定字符串和内容拼接后sha256并与其他进行异或,最终结果与type为2的签名文件进行对比,同时如果遇到do_upgrade.sh文件则sha256后与type为3的签名文件进行对比。


构造特殊的tar文件,使两个文件名称和内容完全相同,并且能够覆盖do_upgrade.sh,如e/../do_upgrade.sh,在解压时会忽略../导致覆盖do_upgrade.sh,在e/../do_upgrade.sh中写入反弹shell,打包压缩后使用从示例末尾提取的两个签名文件按照固件格式打包好,上传,得到shell。


pack.c为打包代码,x.tar.gz为构造压缩包,out.upg为打包结果。


关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接