TP-Link SR20命令执行漏洞复现
这个漏洞的成因是因为他的TDDP本身协议有任意命令执行的漏洞
TDDP协议
基于UDP协议,端口为1040端口
以上为TDDP协议的报头,第一个字节为version,即版本。tddp协议有两个版本:version1和version2。其中version1不支持身份验证和对数据包载荷的加密,而version2要求身份验证和加密。也正是因为version1不要求身份的认证即可对设备进行调试,导致出现漏洞。
漏洞复现是arm32小端,已经qemu过很多固件了,就不再多赘述,也不会很复杂
启动脚本如下
123456789#!/bin/bashsudo qemu-system-arm \ -M vexpress-a9 \ -kernel vmlinuz-3.2.0-4-vexpress \ -initrd initrd.img-3.2.0-4-vexpress \ -drive if=sd,file=debian_wheezy_armhf_standard.qcow2 \ -append "root=/dev/mmcblk0p2 console=ttyAM ...
CVE-2018-7034复现
漏洞信息
通过使用 AUTHORIZED_GROUP=1 值,攻击者可以绕过认证,如通过请求 getcfg.php 进行信息泄露
这个cve的成因,主要是因为解析%xx和判断环境变量的不严谨导致的,以下分析
php文件的分析
可以看到如果Authorized_group>=0即代表用户授权,可以加载一个file,而这个file是"/htdocs/webinc/getcfg/".$GETCFG_SVC.".xml.php"的格式,那么我们看到在该目录下的以.xml.php为后缀的文件,DEVICE.ACCOUNT.xml.php 该文件可以泄露用户名和密码等信息
123456789101112foreach("/device/account/entry"){ if ($InDeX > $cnt) break; echo "\t\t\t<entry>\n"; echo "\t\t\t\t<uid>". get("x" ...
题录1.2
刷题记录3[GDOUCTF 2023]Random
显然ORW
1234567891011121314151617181920212223242526272829303132333435int __cdecl main(int argc, const char **argv, const char **envp){ unsigned int v3; // eax int v5; // [rsp+0h] [rbp-10h] BYREF int v6; // [rsp+4h] [rbp-Ch] int v7; // [rsp+8h] [rbp-8h] int i; // [rsp+Ch] [rbp-4h] setbuf(stdin, 0LL); setbuf(stdout, 0LL); setbuf(stderr, 0LL); v7 = 100; sandbox(); v3 = time(0LL); srand(v3); for ( i = 0; i < v7; ++i ) { v6 = rand() % 50; puts ...
路由器的文件系统与提取
大致分为以下3种
可以直接通过linux的binwalk提取的
由于linux对文件类型判断错误,对存储文件系统压缩包使用了错误的工具
固件被加密,导致需要通过一些手法来绕过或者解密固件,进行文件系统的提取的
以下会通过一些典型的例子进行讲解
CVE-2023-34644复现
CVE-2023-34644luci框架和lua文件/etc/config/luci通常是luci框架的配置文件,/usr/lib/lua/luci 通常是 LuCI 框架的核心文件所在的目录
Luci采用的是MVC的Web框架,即Model、View、Controller。
123/usr/lib/lua/luci/controller/ --控制层 /usr/lib/lua/luci/view/ --视图层/usr/lib/lua/luci/model/cbi/ --模型层
未授权的漏洞,那么首先就要找到无鉴权的API接口,定位到/usr/lib/lua/luci/controller/eweb/api.lua文件。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657-- API集合module("luci.controller.eweb.api", package.seeall)functio ...
Fuzz初探
看网上的评价fuzz好像是挖漏洞的首选工具,就先浅浅学习一下,或许可以找找ctf的应用场景,先从AFL++开始
安装在安装之前AFL++要求要有llvm和clang,ldd,gcc等编译器
12345sudo apt install wgetwget https://apt.llvm.org/llvm.shchmod +x llvm.shsudo ./llvm.sh 13sudo apt install clang-13 lld-13 llvm-13
之后更新环境变量
123export PATH=/usr/lib/llvm-13/bin:$PATHecho 'export PATH=/usr/lib/llvm-13/bin:$PATH' >> ~/.bashrcsource ~/.bashrc
记住export只对本shell生效,bashrc只对之后起的shell生效
1gcc --version
假设输出显示您的GCC版本是9.xx.xx
1sudo apt install gcc-9-plugin-dev
之后便可以下载依赖然后下载AF ...
DIR-815漏洞复现
DIR-815仔细研读了winmt师傅和ZIKH26师傅的复现,现在自己来复现一遍
漏洞详情
静态分析该部分可以看ZIKH26师傅的blog,原本是想在师傅的分析上补充的,但是事情太多了,最后看的脑子疼,只能暂且搁置了
动态调试确认libc_base由于该gdb是链接在qemu模式下的,因此不能直接通过vmmap得到libc基址,而直接libc又因为权限不足无法使用,又因为这个路由设备的真机就是没有开地址随机化的,因此我们只需要**通过找一个libc函数地址减去偏移来得到libc_base**,而因为“延迟绑定的特性”,要找两个使用libc函数的地址
可以得到memset的地址在0x7f76ca20
可以得到libc_base=0x7f76ca20-0x034A20=0x7F738000
确认溢出大小首先,cyclic 2000 > payload,将生成的2000个字符存放到payload文件中,再用以下shell脚本:
1234567#!/bin/bash INPUT="winmt=pwner"LEN=$(echo -n & ...
题录1.1
刷题记录2[LitCTF 2023]ezlogin首先是符号表的恢复,将随便一个libc.so的i64文件,拖到bindiff里,然后import即可恢复大部分的函数
静态分析12345678910111213int __cdecl main(int argc, const char **argv, const char **envp){ const char **v3; // rdx __int64 v5; // [rsp+0h] [rbp-108h] BYREF setbuffer(off_6B97A8, 0LL); setbuffer(off_6B97A0, 0LL); setbuffer(off_6B9798, 0LL); while ( !vlun(&v5, 0LL, v3) ) ; puts("GoodTime."); return 0;}
1234567891011int __cdecl vlun(int v5, const char **argv, const char **envp){ ...
题录1.0
刷题记录1因为国赛将近,开始每天几道题,难度不等,之后会有patch的使用(算是预告和DIR-815的复现(早就复现一直没时间详细写
babyfengshui_33c3_2016
是一道风水题,可以拿来找回感觉
静态分析123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657void __cdecl __noreturn main(){ char v0; // [esp+3h] [ebp-15h] BYREF int v1; // [esp+4h] [ebp-14h] BYREF size_t v2[4]; // [esp+8h] [ebp-10h] BYREF v2[1] = __readgsdword(0x14u); setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); alarm(0x14u); while ( 1 ) { puts(&q ...
C + +那年那些事
前言本篇blog是读者所总结(cv大法均有包含出处,笔者水平有限,如果错误请指出(主要期末考总结了一下方便考前再次复习
理论基础在protected保护继承中,对于垂直访问等同于公有继承,对于水平访问等同于私有继承。
动态绑定是在运行时选定调用的成员函数的。
对于从基类继承的虚函数,派生类也可以不进行重定义。
类A是类B的友元,说明类A是友元类
友元不能传递也不能继承:破坏封装性
123456789101112131415161718192021class ClassB;class ClassA {public: void display(const ClassB& b);};class ClassB { friend class ClassA; // 声明ClassA为友元类private: int privateData = 10;protected: int protectedData = 20;};void ClassA::display(const ClassB& b) { ...