(Linux Kernel)sandbox中的prctl-seccomp机制(orw)
(Linux Kernel)sandbox中的prctl-seccomp机制(orw)prctl-seccomp简介seccomp是secure computing的缩写,是一个Linux内核的安全功能,用于限制进程所能进行的系统调用操作。它通过过滤系统调用,仅允许进程进行特定的,事先定义好的操作,从而减少被利用的攻击面和提高系统的安全性。
也可以认为它是一种简洁的sandbox(沙箱、沙盒)机制,可以当作沙箱使用。在编写C语言程序过程中,可以通过引入prctl函数来实现内核级的安全机制;程序编译运行后,相当于进程进入到一种“安全”运行模式。
引入seccomp机制的原因正常情况下在linux系统里,大量的系统调用(system call)会直接暴露给用户态程序,也就是说程序可以使用所有的syscall,此时如果劫持程序流程通过execve或system来调用syscall就会获得用户态的shelll权限。可以看到并不是所有的系统调用都被需要,不安全的代码滥用系统调用会对系统造成安全威胁。为了防范这种攻击方式,这时的seccomp就派上了用场,在严格模式下的进程只能调用4种系统调用,即 ...
py逆向工具使用
py逆向工具使用一、前言py逆向,找个题目举例子说明一下[NISACTF 2022]ezpython。
二、题目工具: 1.pyinstxtractor.py 下载地址:https://sourceforge.net/projects/pyinstallerextractor/ 2.HEX编辑器,我这里使用winHEX 下载地址:https://www.jb51.net/softs/16546.html#download 3. uncompyle 库 可在命令框中输入:pip install uncompyle6 进行安装
需要用到这两个工具
把给出的exe文件放到跟pyinstxtractor.py的同一目录下,然后
1python pyinstxtractor.py 附件.exe
会生成一个和附件名相同的文件夹
进入到文件夹找到这两个文件
struct.pyc这个文件一般都是的这个名字,src.pyc这个文件跟附件相关,名字有时不一样。
然后把这两个文件放到010Editor(编辑器都行)中
把struct.pyc的第一行添加到src.pyc中,因为struct保存着版本 ...
pwn中直接调用(plt)system函数和调用call system函数区别
pwn中直接调用(plt)system函数和调用call system函数区别溢出大概有两种形式
直接调用system函数,就是plt表的system函数
1payload = padding + p64(system_addr)+p64(1)+p64(binsh_addr)
调用call system
1payload = padding + p64(call_system_addr)+p64(binsh_addr)
可以看出上述两种情况只差了一个p64(1)。
其实这个p64(1)的作用是相当于一个返回地址。
为什么?先回顾一下函数调用过程,比如说我们要调用system(‘/bin/sh’)。
首先程序在编译这一步,实际上执行的是:
123lea eax, [address_binsh_str]push eaxcall system
call指令其实还有两步:
12push ip ;执行system_addr之后的返回地址jmp system_addr
因此,直接调用system函数时,在system地址后面要接上一个返回地址,再接上syst ...
fastbin_attack中的House of Spirit(例题)
fastbin_attack中的House of Spirit(例题)
题目:LCTF 2016 pwn200
参考资料:PWN入门(3-10-2)-fastbin_attack中的House of Spirit(例题) (yuque.com)
lctf2016_pwn200 - 简书 (jianshu.com)
附件下载:
链接:https://pan.baidu.com/s/19XhTlMm0rA2cy0IuhujWtQ提取码:sw0o–来自百度网盘超级会员V3的分享
实验环境
Ubuntu16.04,libc版本是2.23
检查文件保护机制
未开启任何保护。
IDA静态分析main函数
sub_40079D函数
设置程序的缓冲区。
sub_400A8E()函数
根据函数是否有返回值来确定函数的类型是否改为void
由于循环次数为48次,而定义变量v2时分配了48字节。那么当我们输入48字节的内容时,根据printf的特性,在打印的时候会泄露出栈ebp的地址。
printf打印字符串直到\x00为止
可以看见v2是和栈底ebp相连的,所以泄露时会打印出ebp的地址。
s ...
fastbin_attack中的House of Spirit(基础)
fastbin_attack中的House of Spirit(基础)简介House of Spirit是一个组合型漏洞的利用,具体来说就是变量覆盖和堆管理机制的组合利用。
原理House of Spirit的利用关键在于能够覆盖一个堆指针变量(也就是调用malloc之后堆块中malloc_data返回的地址),让其指向可以控制的区域。
利用思路1、伪造堆块
2、覆盖堆指针指向上一步伪造的堆块
3、释放堆块,将伪造的堆块放入fastbin单链表中(需要绕过检测)
4、申请堆块,将刚才释放的堆块申请出来,最终可以使得向目标区域中写入数据,以达控制内存的目的。
在free时需要绕过的检测
libc-2.23.so的malloc.c源码glibc2.23/malloc/malloc.c at master · balexios/glibc2.23 (github.com)
检测一
fake chunk的ISMMAP位不能为1,因为free时,如果是mmap的chunk,会单独处理。
123456789101112131415if (chunk_is_mmap ...
Tcache Attack中的house of spirit(基础)
Tcache Attack中的house of spirit(基础)
附件下载:
链接:https://pan.baidu.com/s/1Obl1tx62mb6jnsuZ9D3mBg提取码:udtl–来自百度网盘超级会员V3的分享
前言
tcache中的house of spirit和fastbi中的house of spirit相似。
回顾一下fastbin_attack中的house of spirit:
House of Spirit的利用关键在于能够覆盖一个堆指针变量(指向malloc_data),让其指向可以控制的区域。
来看一下它的利用思路:
首先需要伪造一个堆块,伪造堆块时需要注意绕过之后的五个检测。
覆盖堆指针指向上一步伪造的堆块
释放堆块,将伪造的堆块放入fastbin的单链表里面(需要绕过检测)
申请堆块,将刚才释放的堆块申请出来,最终可以使得向目标区域中写入数据,以达到控制内存的目的。
下面是五个检测,需要绕过:
fake chunk的ISMMAP位不能为1,因为free时,如果是mmap的chunk,会单独处理。
fake chunk地址需要对齐,MA ...
Tcache Attack中的tcache_perthread_struct(基础、例子)
Tcache Attack中的tcache_perthread_struct(基础、例子)
参考资料:
PWN入门(3-18-1)-Tcache Attack中的tcache_perthread_struct(基础、例题)(附:向__malloc_hook中写入one_gadget无法getshell的问题及解决方案) (yuque.com)
Tcache Attack学习记录 - Theffth - 博客园 (cnblogs.com)
附件下载:
链接:https://pan.baidu.com/s/1c5QvS0ZVFkzwMTd3_a4LCg提取码:sdmp–来自百度网盘超级会员V3的分享
前言在堆题中,我们常见的一种泄露地址的方法是泄露unsortedbin 中chunk的 fd和bk,而在严格限制chunk大小的堆题中,如果有tcache机制的影响,我们必须需要先将tcache Bin填满,才能把chunk放入unsortedbin中,再进行地址泄露。于是,有些堆题会对 malloc和free操作的次数设定限制,这时我们可以考虑伪造 tcache机制的主体tcache_pe ...
Tcache Attack中的Tcache Poisoning和Tcache dup(例子)
Tcache Attack中的Tcache Poisoning和Tcache dup(例子)
参考资料:PWN入门(3-16-3)-Tcache Attack中的Tcache Poisoning和Tcache dup(例子) (yuque.com)Cyberangel佬写的tql
附件下载:
链接:https://pan.baidu.com/s/1GfP5a_Dtbv0sKLAo35A9Ow提取码:yczj–来自百度网盘超级会员V3的分享
Linux环境
本次实验,我采用的是通过patchelf修改libc文件后再进行实验,因为我使用的Ubuntu16.04的libc版本为2.23,没有tcache机制。
具体patchelf使用方法,详见https://zhuyuan1213.top/2023/08/12/glibc%E7%89%88%E6%9C%AC%E7%9A%84%E6%9B%B4%E6%8D%A2/
IDA静态分析
menu函数
菜单界面。
1、add-添加函数
通过add函数申请一块固定大小的堆块。并且堆块指针保存在memo全局变量中。
2、show函数
查看mal ...
Tcache Attack中的Tcache Poisoning(基础)
Tcache Attack中的Tcache Poisoning(基础)
附件下载:
链接:https://pan.baidu.com/s/1cCflSuwhgQoiiGzjcoZuBA提取码:2g1k–来自百度网盘超级会员V3的分享
原理tcache poisoning的基本原理是覆盖tcache chunk的next域(tcachebin的链表指针是指向下一个chunk的fd字段,fastbin的链表指针式指向下一个chunk的pre_size字段)为目标地址,通过maloc来控制任意地址。这种攻击手法不需要伪造任何的chunk块。
Demo源码test.c:
123456789101112131415161718192021222324252627282930313233343536//gcc -g -fno-stack-protector -z execstack -no-pie -z norelro test.c -o test#include <stdio.h>#include <stdlib.h>#include <stdint.h>i ...
Tcache Attack中的Tcache dup(基础)
Tcache Attack中的Tcache dup(基础)
参考资料:PWN入门(3-16-2)-Tcache Attack中的Tcache dup(基础) (yuque.com)
代码来源:Tcache Attack (yuque.com)
附件下载:
链接:https://pan.baidu.com/s/1XtWyhA7_RKL3hTbsLLXpIw提取码:tywy–来自百度网盘超级会员V3的分享
漏洞原理
使用libc-2.27.so的源码进行分析
Tcache dup利用的是tcache_put()函数的不严谨:
123456789static __always_inline voidtcache_put (mchunkptr chunk, size_t tc_idx){ tcache_entry *e = (tcache_entry *) chunk2mem (chunk); assert (tc_idx < TCACHE_MAX_BINS); e->next = tcache->entries[tc_idx]; tcache-> ...