实验目的

这次的实验的前提的我们不知道system和bin/sh的函数,然后通过泄露某个函数在libc表中的地址,再加上这几个函数的偏移量来计算system和bin/sh的地址,最后将这个地址覆盖到ret上,以便能跳至我们想要的函数,最终获得shellcode
我们还是以pwn举例

实验文件

链接:https://pan.baidu.com/s/1vgQo4W3P2xEMfdnfwMiaSg
提取码:jgq5

实验步骤

1、先对pwn进行静态分析,找出可以泄露的函数点在哪?
PWN入门之libc表
在这里,我认为有两个函数可以泄露:puts和setvbuf。在这里,我选择puts函数进行泄露。
2、动态调试
PWN入门之libc表
main的值是通过ida中的静态分析得出的
PWN入门之libc表
这里主要讲一下payload是怎么得出来的?
‘a’*112中的112是通过计算得出的需要覆盖ret而需要填充的字符数(这个在上个实验已经介绍过如何得到),‘a’是需要填充的字符(a也可以换成其他的字母)。
后面的是需要泄露的puts函数在libc表中的地址,而这个地址是函数在plt表和got表的地址同时组成。plt表是内部函数表,got表为全局函数表,这两个表相互对应。
PWN入门之libc表

PWN入门之libc表
pwnlib.gdb.attach函数是连接VScode和gdb动态调试的。
通过sendline函数将payload发送出去。
PWN入门之libc表
将泄露出的puts的地址接收并打印出来,并通过puts得到libc的基址。
PWN入门之libc表

通过偏移量计算出system和bin/sh的地址,并将其泄露出来。
PWN入门之libc表
PWN入门之libc表
程序第二次执行main函数,需要重新计算payload,该计算方法与上一个一样。

PWN入门之libc表
最后getshell
PWN入门之libc表
随便输入个指令看看是否getshell
PWN入门之libc表

相关文章:

  • 2021-10-01
  • 2021-10-09
  • 2021-06-08
  • 2021-05-13
  • 2021-11-06
  • 2021-07-02
  • 2022-12-23
  • 2021-04-15
猜你喜欢
  • 2021-06-26
  • 2021-11-16
  • 2022-12-23
  • 2022-02-09
  • 2022-12-23
  • 2021-09-18
  • 2021-08-09
相关资源
相似解决方案