Dasctf wp
前言
打了DASCTF发现自己太菜了,想拿个好看的名次还是要全面发展的,哭。
web
ezunserialize
- 考点:php反序列化字符串逃逸
php代码审计
1 |
|
首先pop链很明显了,由B的_destruct()方法中的字符串拼接触发C的_toString()方法获取flag.php。
然后我们看到read方法,把’\0\0\0’字符串替换为chr(0) . ‘*’ . chr(0),而且read方法是在获取反序列化字符串才进行操作的,也就是说将6个字符的串换位3个字符的串,很明显是反序列化逃逸。
那要如何逃逸呢?输入username和password时候,如果能够将后面输入的password字符串替换为B的对象,那么就可以达到利用的效果。利用的时候要注意几个点,首先需要计算出需要逃逸的字符串长度,我们目的是为了覆盖password字段的属性,所以如下。
1 | ";s:8:"password";s:74:"1 |
只有字段字符被覆盖的情况下我们才可能注入一个B的恶意对象,并且由于我们是要从6个字符中逃逸3个字符,所以被压入username长度需要为3的整数倍,这里测试之后,我们发现这个长度最好是24,利用代码如下。
1 | $finall_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'; |
最后getflag
reverse
逆向入门
先跑一下
找核心代码
简单的xor
1 | keys='akhb~chdaZrdaZudqduvdZvvv|' |
100分的逆向
一样的思路
找关键代码 Please input your magic number
发现v16到v53是一串数字,目测是数组,提取出来先。
逻辑是先输入一个大于9的数,然后在输入等长度的一串字符,这串字符的每一个字符会和v10亦或n次,最后相当于之前的数组亦或一个定值得到flag。
基本上就是a^v10=flag,这个v10 我们用明文flag{猜测一下,结果发现v10是64。那么就是和上面一样的操作了。
1 | arr=[38,44,33,39,59,35,34,115,117,114,113,33,36,117,118,119,35,120,38,114,117,113,38,34,113,114,117,114,36,112,115,118,121,112,35,37,121,61] |
misc
两个签到题我就不写了。
blueshark
蓝牙抓包分析
找到一个特别的东西,把zip包的按照hex dump出来,010editor hex import,拿到压缩包。
压缩包提示密码就是pin值。
包不多,随便找下就好了。
解压就是flag
总结
有道web没做,有点可惜。下回有空复现。