2023年春秋杯网络安全联赛春季赛PWN(AK)
每天花一个小时左右的时间做了一下
p2048
这题都没昨看就莫名其妙的出来了,调试的时候写了如下的exp,然后wasd+enter
乱按就拿到shell了。如果一次不成功,可以再来一次(XD
1 | from pwn import * |
babyaul
第一步需要修一下bins的头,修成如下样子就可以正常运行babyaul了
1 | ➜ babyaul xxd bins |
利用unluac.jar反编译出lua源码
1 | java -jar unluac/bin/unluac.jar bins > aul.lua |
lua源码如下
1 | passstr = "" |
可以看到要过pass,逆一下pass的处理代码
1 | __int64 __fastcall sub_615F(__int64 a1) |
4个随机的数据,经过sha256加密输出,需要爆破出4个随机数据的具体数值,这里笔者直接在网站上爆破的,爆破完之后输入进去即可
漏洞是2.31下的off-by-null,直接套板子,打出overlapping之后任意地址写hook为magic_gadget,然后一套orw即可
1 | from pwn import * |
easy_LzhiFTP_CHELL
这里就是多了一次touch,导致可以覆盖下面chunk地址
1 | if ( !strncmp(opcode, "touch", 5uLL) && file_flags <= 16 && strlen(opcode) > 6 ) |
然后利用这一次touch,打chunk的地址到puts_got,然后edit打got到system_plt即可
1 | from pwn import * |
babygame
漏洞点在sub_401511这函数里
1 | __int64 __fastcall sub_401511(char *a1) |
可以控制v2 v3 v4
,并且有一块具有rwx的地址,可以覆盖到这个函数的返回地址
所以可以把那一个rwx地址写到v5里,然后利用C,把rwx的地址直接写到这个函数的返回地址
在进行漏洞之前还需要expansion backpack
一下backpack_size
,这样子我们就可以借助Purchase props
来写很多的数据到rwx那里,shellcode直接用的可见字符
这里比较烦的是md5这一部分,这里笔者借助了一个api,https://md5decrypt.net/Api/api.php?hash=' + hash + '&hash_type=md5&email=xxxx@qq.com&code=xxxxx'
,去注册一下,邮箱里会得到code,填上去即可使用
1 | from pwn import * |
sigin_shellcode
这里可以直接运行shellcode
1 | void battle() |
但是需要满足条件,attack - 2751 < 0
,并且shellcode需要被check,这里的check很好绕过,li $a1, 0
,前面是\x00,直接绕过了strlen
attack在shop那里,需要满足coin_sum >= 2751
,dump出了coin每次rand之后的数,这样coin_sum在100次以内就会大于等于2751
1 | from pwn import * |
three-body
1 | __int64 sub_1A22() |
uaf,但是show和edit只可以用一次,add有随机概率,不用管,因为申请的堆块不是太多,add直接当正常的来使用,然后一套house of apple2即可
笔者一分钟试一次,试了三次就出来了
1 | from pwn import * |