jarvis oj pwn level1
题目链接:https://dn.jarvisoj.com/challengefiles/level1.80eacdcd51aca92af7749d96efad7fb5
nc pwn2.jarvisoj.com 9877
检查一下保护措施(输入命令):checksec 文件名
题目是32位的,没有任何保护措施
运行一下试试
很简单,提示输入,然后输出hello world,值得注意的地方是后面的类似地址的东西
拿到ida看看伪c代码
main函数,很简单,就是调用vulnerable_function()函数,然后输出hello world
再看看vulnerable_function()函数,%p就是输出buf的首地址,read输入,明显栈溢出,buf大小是0x88,而给可以输入0x100
通过搜索发现,题目里面并没有给出system(/bin/sh),这就需要我们自己写shellcode(shellcode就是一段代码,用于用户攻击远程服务器,可以获取权限拿到/bin/sh),pwntools提供了获取/bin/sh shellcode,就是shellcraft.sh(),不过,现在shellcode还是汇编代码,不是能用的机器码,所以还需要进行一次汇编,用asm(shellcraft.sh())即可这就完成了获取/bin/sh的shellcode,不过shellcode这个非常重要,一定要学会自己编写。
说下思路,首先肯定是利用buf的溢出来执行shellcode,上面已经说到,题目给我们buf的首地址,那么我们可以这样
将shellcode放到buf首地址,溢出后将返回地址改为buf首地址执行shellcode,有了思路接下来写exp
前面我们说到程序运行时会提示buf首地址,第7行代码意思是接收输出字符,然后截取出地址,所以payload就是shellcode加上栈中间大小的垃圾字符,因为里面要放shellcode,所以减去shellcode的长度,加上buf首地址
运行,cat flag,获取flag
后面在写一点吧,写博客真的比较重要,不仅仅是复习知识,更重要的是督促自己学习。