首先checksec,之后放入IDA中

攻防世界cgpwn2
点进hello
攻防世界cgpwn2发现gets()函数可能会存在栈溢出,然后我们点进name
攻防世界cgpwn2发现 name 地址是固定的,那我们可以它写入 bin/sh ,接着看能不能找到system
攻防世界cgpwn2找到啦!所以这个题目的思路是:通过栈溢出漏洞,调用system函数,同时在name中写入"/bin/sh",把参数地址设置为name的首地址,就可以getshell了!
攻防世界cgpwn2

gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,gets()无法检测到这个问题,就会发生内存越界。
先反编译,找到栈溢出漏洞的位置,在plt表中发现system()函数,但是没有‘/bin/sh’的影子,我们可以将/bin/sh传入name中,然后将其当作参数传入。实质是构造一个伪栈帧(必要的东西:函数地址,返回地址(随便写),参数地址)。要注意的是padding填充的时候,要根据程序是多少位的,来加上e(r)bp寄存器的栈中所占的字节数

攻防世界cgpwn2

相关文章:

  • 2021-08-07
  • 2021-10-29
  • 2021-11-27
  • 2021-06-23
  • 2021-05-28
  • 2021-06-04
  • 2022-01-07
  • 2021-08-07
猜你喜欢
  • 2021-07-07
  • 2021-08-27
  • 2022-12-23
  • 2021-09-22
  • 2021-09-11
  • 2021-12-27
  • 2021-06-25
相关资源
相似解决方案