Pwn-高质量比赛题目复现7-2025湾区杯初赛
2025湾区杯digtal_bomb题解参考自大佬:微信公众平台
ida打开,main函数如下:
main函数里首先就是输入最小数和最大数,然后系统随机生成一个在这区间的数,自己再输入一个进行比对,如果一样就爆炸(boom)退出,否则继续,同时区间靠近,当左右区间边界一致时进入主逻辑(菜单函数),经测试,最小值输0,最大值输1,之后猜测1即可。
主逻辑:
四个函数都有,edit只能使用一次。
edit、show和free常规,不存在漏洞。
add存在off by null漏洞:
思路分析通过off by null我们可以使用house of einherjar来构造堆块合并进而实现uaf的功能。
但是难点在于题目是2.35的libc版本,单纯通过堆块合并无法实现io的利用,所以这里参考师傅的思路,打libc里的strlen_got表。
这里做一个解释,为什么可以修改libc的got表来攻击。
虽然题目程序Full RELRO保护全开,但是libc为Partial RELRO
函数调用流程当我们程序中调用strlen函数时。
1、首先会调用plt表
1call strlen@plt
...
Pwn-高质量比赛题目复现6-2025CISCN天津半决赛
2025 CISCN & 长城杯 PWNtypo参考自 2025ciscn&长城杯 半决-pwn 部分解析-先知社区
当时天津半决赛比完后没来得及复现,最近的招商铸盾车联网CTF又出了原题,决定复现一下。
libc版本 2.31。
菜单有add、delete和edit函数,功能如下:
漏洞分析add中正常申请堆块,并且在堆块fd的位置写入了size。
delete中没有uaf漏洞。
漏洞在edit函数的snprinf函数中,看似对size作了大小校验,如果new_size > old_size的话,还是使用old_size来进行后续的read。这里漏洞就在于snprinf的参数有问题。
首先看一下snprintf的参数原型:
1int snprintf(char *str, size_t size, const char *format, ...);
str: 目标缓冲区,用于存放格式化后的字符串。
size: 目标缓冲区的大小。这是 snprintf 安全性的关键,它确保最多只写入 size-1 字节,最后加一个空字符(\0),防止缓冲区溢出。
for ...
Android-r0抓包通杀
r0抓包通杀主要是依据r0ysue大佬的脚本r0tracer.js和r0capture.py。
这里引一下大佬的项目地址:r0ysue/r0capture: 安卓应用层抓包通杀脚本
本节分http和https来分别实现。
首先,http和https都属于应用层协议,应用层与传出层(TCP/UDP)一般是通过socket来传输数据的。
所以hook思路是hook socket相关函数来获取数据。
Demo首先编写一个http发包的demo:
MainActivity1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586package com.example.httpsocket;import androidx.appcompat.app.AppCompatActivity;import android ...
Android-猿人学爬虫练习
猿人学爬虫练习闲着没事找了个2022年的猿人学的安卓逆向对抗比赛apk。
参考自:猿人学安卓逆向对抗比赛(1-5题) - 吾爱破解 - 52pojie.cn
时间冲突因为是2025年复现的,但比赛当时的服务器环境可能是2022年的,而app运行起来首先会比较时间是否在20s偏差以内,若时间不对会直接退出。
我在修改了本地时间为北京时间后,仍然提示,所以根据提示字符串搜索到校验代码:
12345678910111213public void onSuccess(OooOO0O oooOO0O) throws Throwable { if (oooOO0O == null || Math.abs(oooOO0O.OooO00o().longValue() - (System.currentTimeMillis() / 1000)) <= 20) { return; } OooO OooO0o02 = OooO.OooO0o0(); final C ...
Android-几个简单app的登录逆向
几个简单app的登录逆向以下app都是来自小肩膀2022安卓逆向课程的案例。
一、今日镇江1、升级弹窗去除打开弹出升级框,不想升级所以直接给他干掉。
两种方法:
1、找到获取版本的地方,hook改变返回值使得本地app版本和远程服务器app版本一致,经过比对后就不会弹出该提示框。
2、直接找到弹框部分,给该部分直接用hook给nop掉。
这里直接使用第二种方法。
这个app没有字符串加密,所有首先jadx搜索字符串”升级提示”,定位到strings.xml中的
1<string name="update_info">升级提示</string>
之后继续搜索update_info找到弹框的部分定位到如下函数,直接frida替换整个函数并且使用spwan模式启动时注入。
1234567Java.perform(function(){ var ActivityUtils = Java.use("com.cmstop.cloud.base.ActivityUtils"); ActivityUtils.c ...
Android-frida_root检测
frida_root检测在hook的时候,要想使用frida进行hook注入,就需要启动frida-server(server注入方式),而该server需要adb具有root权限,所以一些app会防止被hook而做一些frida检测或root检测。
常规的frida检测方法参考自:安卓逆向之过frida检测总结版_android frida-CSDN博客和Frida检测 - huolong blog
1、检测文件和进程名
默认的frida-server会在/data/local/tmp目录下,因此app可以检测该目录下有没有frida的特征文件,对于这种检测可以给frida-server文件重命名,或者hook一些**fopen()和strstr()**函数来绕过他比对文件名的代码即可。
较老版本的frida会在运行后会在/data/local/tmp/目录释放一个名为re.frida.server/frida-agent-64.so的文件,不过新版本已经改进了这一问题。
2、检测端口frida-server启动后默认会在27042端口监听,可以通过检查该端口是否被占用的方式来 ...
Android-H5app逆向总结
H5app逆向总结H5app是在app里使用webview组件,相当于在app里植入web页面,通过js代码进行操作。
对于这类app,一般需要使用android sdk中自带的工具:android_sdk\tools\bin\uiautomatorviewer.bat可以分析当前app页面的组件,一般最外层的就是webview组件。
H5app一般分为几种:
纯js的,就是加密和发包都是在js代码里的。
js和java混合的,就是js中加密java发包或者java加密js发包的,一般需要js和java的相互调用。
纯java的,就是加密和发包都是在java代码里的,也需要js和java的相互调用。
分析方法1、纯js可以在chrome://inspect(需挂vpn)来远程调试app,不过app一般默认是不允许webview_debug的,所以chrome默认无法调试,需要先使用frida hook掉相关函数设置debug模式为true再进行抓包调试。
hook代码一般为:(当然有的时候还是需要jadx分析他限制调试的地方,不一定完全是这个)
android.webkit ...
Android-密码学数字签名
数字签名数字签名介绍数字签名是非对称密钥加密技术与数字摘要技术的应用,可以用来保证数据不可伪造并且确认数据是由谁发送的。
简单来说就是数字摘要(md5、sha系列。。)和RSA的结合,即对明文数据进行数字摘要后,再使用RSA的私钥对数字摘要hash值进行加密,最后通过RSA的公钥解密验证。
这么做的原因是通过数字摘要的靠伪造性可以保证数据不可伪造。
如果修改了消息,接收方可以对消息进行哈希后和数字摘要验证是否一致得知消息是否被伪造。
但是为了防止攻击者如果同时篡改了消息和数字摘要(在数字摘要算法泄露的情况下,如使用常规的公开的md5),需要使用RSA再进行一次加密,通过私钥加密公钥解密验证的方式,可以保证数据不可伪造并且根据公钥的对应信息可以得知
由于攻击者无法得知加密者的私钥,因而无法伪造RSA加密。
这俩个缺一不可,缺少了RSA安全性降低,缺少了数字摘要,则效率降低,因为RSA处理大数据的效率十分缓慢,对于几G的文件信息几乎难以使用RSA,因此需要先进行数字摘要获取较短的消息(如md5的128bit)后使用RSA处理。
JAVA中实现但是在java中,发现数字签名算法并不是简单 ...
Pwn-高质量比赛题目复现5-2024强网杯S8线上初赛
2024强网杯S8线上初赛babyheap参考自大佬:2024 强网杯S8Pwn方向部分题解 - 先知社区
这里复现一下,这个算是这次强网杯最简单的一道pwn题了,这题有两种解法。
首先分析题目,libc2.35,保护全开,常规菜单题。
add申请0x500~0x5FF大小的chunk,且最多能add6次,最多能show和edit1次。
free存在uaf漏洞。
同时提供了一个Env菜单和一个magic菜单,这俩在方法二才会用到。
方法一:利用思路常规IO利用,2.35存在svcudp_reply+26的gadget,因此直接打apple2即可。
利用过程1、题目开启了沙箱,查看沙箱如下
可以看到禁用了open和openat。这里也是刚刚学到的,这俩被禁用了还可以使用openat2替代。
shellcode如下:
12shellcode = asm(shellcraft.openat2(-100,flag_addr,flag_addr+0x1000,0x18)+shellcraft.read(3,heap_base+0x10000,0x50)+shellcraft.write(1,he ...