ptrace沙箱逃逸
前言前两天想研究一下seccomptools原理,然后就偶然看到了这篇文章.在看完完整思路后,我觉得这题还是很有意思的,出得比较新颖,于是我尝试本地复现一下,这就是这篇博客的记录(虽然没有完整附件,不过好在还是可以复现)
题目解析源码分析以下是大致源码.可以看到程序无条件执行了我们的shellcode,而且甚至有0x1000的长度可控执行
12345678910111213141516171819202122232425262728293031323334353637#include <fcntl.h>#include <unistd.h>#include <stdio.h>#include <seccomp.h>#include <sys/mman.h>void init(){ setbuf(stdout, 0LL); setbuf(stdin, 0LL); setbuf(stderr, 0LL);}void setup_seccomp(){ scmp_filter_ct ...
hexdump小工具
前言前两天看火箭写了个小工具,刚好我也需要用,于是自己写了个试试,顺便熟悉一下如何编译lib库,并且在其他程序使用
实际需求虽然gdb这样的工具很方便,能够看到内存布局,但是对于测试中频繁更改的程序,如果每次更改都用gdb调试,还是会有些浪费时间所以这个工具就定位为在别的程序中使用的一个函数,输出任意地址的内存(并且尽可能好看,颜值就是生产力!)
代码考虑到输入的ptr可能不是整数,我用一个包装函数初步处理了一下
把输出ptr原本的值并用一个新的值保存ptr末位取0的结果其次是把size向上取8,防止输出不完全
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283#include <stdbool.h>#include <string.h>#include <stdio.h>#includ ...
m50
前言最近接到一个项目,需求是利用获取针对一台路由器的一键获取shell的脚本。指导老师给我的建议是利用现有的cve复现即可,因为甲方没有要求挖出新的cve。
这就是现有的cve,在这个仓库记录了三四种获取shell的办法,不过这些方法的前提是能访问到路由器内部的漏洞域名,从而访问到漏洞函数。
https://github.com/zp9080/Tenda/blob/main/Tenda-G3v3.0%20V15.11.0.20-formSetDebugCfg/overview.md至于如何获得内部域名的访问权限,则是需要利用另一个公开漏洞,访问/cgi-bin/DownloadCfg/RouterCfm.cfg域名以下载到RouterCfm.cfg文件,其中保护了路由器的配置文件信息,最关键的是包含了网页管理员密码的base64加密。
利用链获取网页管理员密码这里用从甲方那边拿的测试机子进行测试。先使用burpsuite进行测试,这样结果更加直观一些(pwner也是玩上burpsuite了)在直接访问时会被重定向到login.asp界面。很明显,为了安全考虑,开发厂商不可能让你随便 ...
难绷24网鼎
前言网鼎杯也是无敌了,首先就是幽默咸鱼老哥,甚至还有出题人疑似自出自卖一些不算简单的题目随随便便就是上百解。。。其次是我的pwn2被打回了,不是哥们,纯签到而已,还需要wp写多详细。最后是re2500多解,全部被打回wp,甚至没有原因??主办方是觉得这题水平很高需要好好写wp吗。最离谱的是re2的一血也被打回wp了,搞不懂,这下真搞不懂了。
pwn04题解题目附件及我的exp这题考点太过分散了,每个考点难度都差不多,一道题硬是拆成三瓣,有点无语。
考点1-爆破第一个考点是分别爆破用户名和密码,程序会先根据读取的长度来逐位比对输入和真正的用户名或密码,如果比对成功,则判断是否长度一致。所以可以每次输入时都故意不输入完整长度,每次只比确认正确的用户名或密码多一位,如果返回的是长度不对,就说明对于内容的检查通过,也就是多的这一位是正确的。
输入正确用户密码后就能进入到主逻辑菜单功能。
考点2-加密这个题的加密解密在每次进行Add,Edit,Delete,Show的时候都会进行一次,在功能结束的时候还会进行一次,导致在show泄露地址的时候得到的地址是被加密过的,需要手动解密。在Add,Edi ...
qemu-system-aarch64完整环境搭建
前言本来这篇文章是会不存在的,因为每次我搭建完一个新的环境都头昏脑涨的,根本想不起来搭建的具体步骤,以及问题是如何得到解决的。但是由于我前两天不小心把我的wsl镜像给覆盖了,导致丢失Linux所有环境,必须从头再来,于是就有了这一篇搭建arm-system的文章。
qemu-system模式介绍qemu分为两种模式,usermode是相对简易的模式,其将每条arm指令翻译成你的平台使用的架构,然后交给平台去执行,这么做的好处就是不需要一个完整的异构环境,实现和使用相对简单。这么做的坏处就是没有一个完整的异构环境,一些东西不够全乎,就拿gdb举例,我在使用gdb调试由qemu-arm,也就是usermode的qemu启动的程序时,vmmap和procmaps都看不到完整的内存段,居然只能看到ld段。而且更搞的是,procmaps和vmmap看到的地址固定存在0x10000的偏移?而且procmaps还看不到可执行段?也许是qemu-arm的特殊处理?无论怎么讲,目前最好的办法肯定是想办法搞到一个完整的aarch64环境,要不通过qemu-system,要不直接买一个开发板用来研究。我决定 ...
das*cbctf出题笔记
前言dasctf这次我出了两道题,一道usersys,一道sixbyte。我还是比较满意的,我的想做的就是拿一些一些平常不经常见到的漏洞,所以一道考点在条件竞争,一道在测信道。并且由于我不喜欢太过复杂的利用,也不喜欢在题目限制各种条条框框。所以这两道题的利用层面还是相对简单的。另一道pwn是火箭师傅出的,可以去看看他的ChromeLogger博客
usersys题目源码这个题目的考点是文件相关的条件竞争,算是比较冷门的考点?但是漏洞本身还是很清晰的,下面代码中,在通过检查后,还有一个GetGuestData从文件中读取数据。也许是cpp逆向花了一些时间,导致没有那么快的看出漏洞。不过cpp的逆向还不算是很离谱,认真看看还是能接受的(又不是go(doge))
123456789101112131415161718192021222324252627282930313233343536373839404142class Guest : public User{public: char guest_book[5][8]; short int login_cou ...
pwn-college的一道arm rop题
题目附件
前言最近是在Rocket安利下去看了pwncollege这个网站,然后感觉还不错,armdojo已经快刷完了,就差一题!!!但是最后一题好难啊,看了好几个小时没思路。
arm中rop所需要了解的知识首先arm的rop和x86中差了非常多,所以这里介绍一下差别,顺便带一下道场中别的知识包括汇编指令和在栈溢出学习中发现的不同。
aarch64汇编指令
aarch64是arm的64位的叫法,就像x86-64和x86一样。
arm中的寄存器有整整30个!其中函数传参时前八个参数使用X0-X7,后续参数放在栈上。而syscall时前八个参数依然是X0-X7以及很重要的X30寄存器也就是LR寄存器,其作为函数返回地址保存的寄存器,函数返回将会无条件跳转至X30。
arm架构下,所有的指令是4个字节定长的!!其带来了很多神奇的与x86不同的特性,按我的话说,成也定长,败也定长。
细说一下,比如”mov rax, 0x2024202520262027”这个指令可以直接在x86中一步完成,但是在arm中,收到指令定长为4的限制,无论如何不可能出现超过两个字节的立即数。arm的解决办法如下123 ...
sctf-vmcode的逆向过程
题目附件
前言比赛那两天偷懒了,两天都只打了半天,到晚上就不想看了。然后vm_code这题要是有时间的话看一下应该是能做的。赛后自己研究了一下发现还行。这题主要是想记录一下vm题的逆向过程。
逆向过程
0x122f图片中是main函数的后半段,清除rdi,rsi之后直接call +5,就跳转到了123A的lea rax,code
然后从code+rsi的地址取出一个字节放进rax,rsi增加一,rax-0x21之后跳转到1257
先说下这段是什么意思,很明显,rsi是起到rip的作用,code+rsi就是运行代码的位置。rax则是起到暂存当前执行代码的功能。
还有就是如果rax<0x21,那么跳转不成立,就会执行ud2指令,导致程序卡死利用失败。
0x1257如果成功跳转到1257后,将rax的值暂存到rcx,然后程序取offset段地址放进rax,然后以[rax+rcx*2]的值为rax的值,加上一个基地址,最后跳转。
在offset段看到,有很多似乎不明意义的数字,不过仔细观察可以发现规律,每个有数据的byte中间都隔了一个\x00,也就是和刚刚看到的[rax+rcx*2]对 ...
记录搭建arm调试环境
前言这两天老摸鱼,不知道干啥,比赛也没啥比赛,出题也出差不多了。于是天天怪物猎人文明六,昨晚还在玩冰汽时代。干脆把最近arm环境搭建记录一下。
搭建apt需要安装的东西基本网上都挺全乎的。我安装的时候都是一股脑全装上去,这点东西能有多大。(不过导致我现在不知道哪些包对应有哪些用处)
还有就是arm分挺多种类的,有点烦。由gpt得到一个简单分类
12345678910111213ARM(32位架构):ARMel:使用软浮点,浮点运算通过软件实现,性能较armhf低。ARMhf:使用硬浮点,浮点运算通过cpu实现,性能较armel高。AArch64(64位架构):AArch64:ARMv8的64位执行状态ARMv7和ARMv8:ARMv7:32位架构,支持armel和armhfARMv8:支持AArch32和AArch64指令集。
运行arm程序123apt install qemu qemu-user qemu-user-staticapt search qemu | grep armapt install qemu-system-arm
安装完qemu的组件就可以直接运行静态arm ...
2024羊城杯hardsandbox
前言这次羊城杯我和火箭发挥的异常的好,pwn5题出了4题,很可惜hardsandbox这题没出。主要是没见过RET_TRACE的沙箱,没有积累过此类板子。
题目题目附件沙箱如上图所示,不仅仅限制了execve,连常规的orw也被限制了open和openat。过这次的沙箱全部都是返回TRACE,要是比赛时机灵点可以在man上查找man-seccomp
SECCOMP_RET_KILL_PROCESS (since Linux 4.14)
This value results in immediate termination of the
process, with a core dump. The system call is not
executed. By contrast with SECCOMP_RET_KILL_THREAD below,
all threads in the thread group are terminated. (For a
discussion ...