HGAME2023 week2 pwn YukkuriSay题解
迁移过来的水文
检查保护:拿到文件先checksec一下:
64位程序,开启canary和nx保护,没有开启PIE(可以使用绝对地址了)
继续往下看,先不着急打开ida,我们先运行一下看看程序大概:输入字符串“aaaa-%p”让Yukkri输出,得到原字符串,此处没有格式化字符串,接下来问要不要继续,要则继续循环,不要则有“gift”,输入得知此处就有格式化字符串,也可以得到偏移是8,但程序也随着结束,大概清楚流程后就可以打开ida了
程序分析:vuln()函数:
跟刚才运行看到的差不多,循环里输出的只是照样输出,输入不为‘N’或‘n’退出循环格式化字符串
看看buf能不能溢出:
长度不够我们溢出
看看str:
在bss段,可以确定是非栈上格式化字符串了
print_str()函数:
现在最开始我们运行一下的优势就体现出来了,当然还是得看一下,万一我们有什么没看到的漏洞。
整体看下来之后其实就是打印Yukkri和我们输入的内容(此处是在栈上的)
思路分析:1、由于循环中我们输入的内容是在栈上的,而且栈内容没有清空,我们可以考虑输入足够长的字符串进行地址泄露得到libc基地址以及s ...
2023hws夏令营选拔赛部分wp
写在前头:只做出两道签到题,大佬们太多了,这次进不了夏令营了,???什么鬼,做出来题就能去,但跟其他事情冲突了,应该还是去不了了呜呜呜,总结起来就是知识面还是不够广,ezhttp死活做不出,还得继续努力学习,写做出来的两道简单题水一下(bushi),记录一下。
pwn:fmt:栈上格式化字符串,保护全开(最开始忘了,跑去修改got表,浪费一堆时间)
第一次格式化字符串泄露地址,第二次修改返回地址为main以便后面进行布栈和修改
gdb手动调试可以发现结束时满足其中一个one_gadget的条件,got表不可修改,那么可以修改返回地址:
可以发现如果修改main+33得修改6个字节,而如果我们修改__ libc_start_main+243只需要修改3个字节,所以选择后者,后面就是在栈上布置 __ libc__start_main+243的地址,但需要注意的是我们无法一次修改太多字节,所以要修改的三个字节得分别写入,脚本如下(当时写得有点乱):
12345678910111213141516171819202122232425262728293031323334353637383940 ...