第一次打A&D线下赛的pwn题,感觉自己的基础还是不够牢固,还有许多不足的需要多加学习,第一次打patch,还是姿势不够多,不够快,相信以后会更有经验。
个人赛game
虽然没有参加个人赛,但是还是让队友保存了一下题目看了一下,猜测两个钟之内做的题目难度应该也不会很大,ida反编译之后看了一下,果然是一个栈溢出的漏洞。
read函数中存在栈溢出,0x32字节大于buf的0x10大小的size
查看一下防御机制,只开启了NX,但是没有提供libc文件(不知道提供了没有,反正队友是没有发给我),猜测是利用pwntools的DynELF模块来leak地址,或者是ROP的方式。
calc
线下赛的第一题,一个计算机,第一天晚上只发现了两个洞,一个是整数溢出,这个好像没有人利用,另一个是格式化字符串。
当时发现这个洞之后就立刻打好patch了,这里顺便介绍一下格式化字符串打patch的方法吧。格式化字符串打patch的方法一般是将print函数改为puts函数。
new address = target address (address of put@.plt) - 当前修改指令地址的下一指令地址,若是计算的结果为负数,那么补码。
修改:edit->patch Program->change byte,其中的E8为操作码,后面四位为偏移,注意一点的是高字节在后面。
保存:edit->patch Program->apply patches to input file
第二个洞是在第二天比赛的时候,发现打了patch之后,后来还是被打了,所以赶紧回去看了一下,最后直接改了malloc的size之后才没有被打,才知道这里存在一个堆溢出的洞
csgo
这题完全是被打爆了……找到了洞在哪但是不知道怎么patch,试了好几次最后都是异常,所以很痛苦,比赛之后问了一下大师傅,听说这题是有两个洞的,一个是堆溢出,一个就是system函数的这个后门,后门这个函数可以先补丁打掉或者是直接把整个函数废掉。因为它里面会判断你输入的字符,是那个波浪号,在那个判断那个波浪符号之后调用的那个函数,所以那个函数可以直接废掉。好像还有一个栈溢出的函数,但是那个函数没有相关的调用,但是还是打了patch 了。
fileparser
这题在前一天的时候没有找到洞,是在比赛的时候被打了之后才找到的,一个文件解析器,我们直接将那个打开flag.txt的路径函数给nop掉之后就没有被打了。
还是大胆打patch,发现异常再改回去。
最近期末考试,具体的复现就在期末考试之后。