Tenda-F6从Uart到Flash的设备分析
固件分析uart串口连接由于路由器并未开启telnet与ssh等端口的原因,我们想要调试其中程序 就只能把固件提取出来本地qemu模拟运行环境,但由于板子上的flash芯片比较小众,通过asprogrammer与flashrom等工具无法直接读取flash,因此就只能退而求其次通过串口连接到系统中去进行远程调试。
所需工具:
万用表、电烙铁、焊锡、ttl转usb(支持刷机功能的编程器)、杜邦线
GND黑针指电源,红针指任意一焊点,万用表到蜂鸣档(有个🔊图标的就是蜂鸣档),发出蜂鸣声即为GND
VCC红针指向任意一引脚,有稳定在3.3v或5.5v左右电压的便是vcc
TXD红针指向剩余两个引脚中的任意一个,之后重新接上电源等待10秒左右中,其电压值发生巨大波动便为TXD
RXD”RXD 可以通过在整个过程中具有最低电压波动和最低总值的引脚来确定“
最后确定好每个引脚后,为方便后续的操作,在其孔上焊上排针连接杜邦线。
连接电脑确定相应的引脚后,开始连线到编程器上
其中vcc引脚可以不用连接,gnd对gnd,rxd与txd交叉连接
最后通过serial或minicom等工具连 ...
某路由器漏洞分析与多种栈溢出利用方法探究
漏洞分析问题出现在修改路由器ssid过程中由于对wlanssid 字段传入参数后的处理不严谨,导致溢出,外加/goform/set_wifi页面的未授权访问,从而可以通过远程缓冲区控制程序流程,获取shell发送大量数据进行测试
可以看到goahead提示segmentation fault,上传gdbserver 进行动态调试测试在mipsel中 通过./gdbserver 0.0.0.0:1234 /bin/goahead挂起程序,再在ubuntu中通过gdb-multiarch gohead启动goahead程序进行动态调试再次发送payload测试,可以看到已经成功控制pc寄存器为maab,即填充148个字符即可覆盖pc寄存器在正式利用之前,这里建议先关闭系统的aslr,以方便后续的调试sh -c "echo 0 > /proc/sys/kernel/randomize_va_space"
方式1:控制程序执行shellcode既然已经明确了我们所能控制的寄存器,就要确定我们的目标是什么,比如要实现某个功能,需要控制哪些寄存器,之后构造需要确定下一步 ...
Heap-再看Overlapping
概念简单的说就是扩展上一个堆块来影响下一个堆块的内容及大小,使多个堆快的空间形成重叠对应的关系。
常用的堆快重叠手法分为两种,分别为前向合并堆快及后向合并堆快,且其作用场景往往是在发现某个漏洞如offbyone、offbynull或是溢出之后为了进一步控制实现地址写及leaklibc而使用的。
前向合并1234567891011121314int main(void){ void *ptr1,*ptr2,*ptr3,*ptr4; ptr1=malloc(128);//smallbin1 ptr2=malloc(0x10);//fastbin1 ptr3=malloc(0x10);//fastbin2 ptr4=malloc(128);//smallbin2 malloc(0x10);//防止与top合并 free(ptr1); *(int *)((long long)ptr4-0x8)=0x90;//修改pre_inuse域 *(int *)((long long)ptr4-0x10)=0xd0;//修改pre_size域 ...
MIPS-华为HG530路由器命令执行漏洞分析
漏洞分析公开的poc如下:
123456789101112131415import requestsheaders = { "Authorization": "Digest username=dslf-config, realm=HuaweiHomeGateway, nonce=88645cefb1f9ede0e336e3569d75ee30, uri=/ctrlt/DeviceUpgrade_1, response=3612f843a42db38f48f59d2a3597e19c, algorithm=MD5, qop=auth, nc=00000001, cnonce=248d1a2560100669"}data = '''<?xml version="1.0" ?> <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle=&q ...
WinPwn-JmpESP定位shellcode
与使用静态地址定位shellcode不同的是
由jmp esp控制程序跳转执行shellcode
覆盖栈中的eip为jmp esp,当函数执行完返回时,由于ret指令相当于pop eip,在配合上我们覆盖的eip,则成功将jmp esp的地址弹出到了eip寄存器中。
之后执行jmp esp,由于此时的esp指向此处,所以程序继续向后执行。进而使程序可以执行在栈空间外,我们覆盖填充的数据 (因此可以简单的理解此处的jmp esp算是起着一个连接程序执行shellcode的作用)
最后 因为esp会自动向后执行使esp+1 的原因,所以程序继续向下执行执行后续的shellcode
寻找exit函数地址其次就是在上一次实验中还存在的一个问题,程序会崩溃退出,这次我们可以通过执行exit来使程序正常退出,不过这里采用ida的方式来查看函数加载的地址。
通过local windows debugger来查看程序运行时的加载库地址
搜索jmp esp 跳转指令metasploit中夹带的一个小工具msfpescan按理说应该很好用,用于搜索jmp esp 的gadgets
但这里不清楚为什么 ...
WinPwn-静态地址定位ShellCode
环境工具在windows pwn中可能会用到的一些工具
Windbghttps://download.microsoft.com/download/4/2/2/42245968-6A79-4DA7-A5FB-08C0AD0AE661/windowssdk/Installers/X86%20Debuggers%20And%20Tools-x86_en-us.msi
WinPwnhttps://github.com/byzero512/winpwn
Socat在本地通过socat起程序做远程环境,是因为其pwntools不支持本地加载进程
https://www.cybercircuits.co.nz/web/blog/socat-1-7-3-2-for-windows
启动命令:
socat tcp-listen:8888,fork EXEC:EasyWinHeap.exe,pipes &
Vmmap查看内存映射
https://docs.microsoft.com/zh-cn/sysinternals/downloads/vmmap
Process-explorer进程管理
...
Arm32-Vivotek_CC8160栈溢出利用
环境准备由于需要确定libc及运行时的栈地址原因,因此需要在qemu中模拟运行
Arm qemu环境https://people.debian.org/~aurel32/qemu/armel/
固件地址https://github.com/firmianay/IoT-vulhub/blob/master/VIVOTEK/remote_stack_overflow/firmware/CC8160-VVTK-0100d.flash.pkg
网卡配置12345brctl addbr virbr1ifconfig virbr1 192.168.111.1/24 uptunctl -t tap1ifconfig tap1 192.168.111.10/24 upbrctl addif virbr1 tap1
qemu启动命令:1qemu-system-arm -M versatilepb -kernel vmlinuz-3.2.0-4-versatile -initrd initrd.img-3.2.0-4-versatile -hda debian_wheezy_armel_standard ...
Arm32-Tenda_Ac15路由器栈溢出漏洞分析
https://down.tendacn.com/uploadfile/201401/AC15/US_AC15V1.0BR_V15.03.1.16_multi_TD01.rar
固件修复1. 修复运行 首先拿到固件解包后,可以尝试使用qemu-arm-static使固件中的web服务运行
发现程序到welcome to这里就会卡住,我们可以将其拖到ida中进行分析卡住原因
根据字符串查找可以看到后面跟着一个循环,当check_network小于0时,便会一直执行sleep函数卡住,我们只需要用ida中的patch功能将其稍微修改一下,将汇编语句mov r3,r0 修改为mov r3,1 让其通过后续的判断比较 即可继续执行后续的流程
2. 监听IP修复 之后就可以通过qemu-arm-static运行了,但是会发现服务的监听ip是一个广播地址,而这个问题则会导致我们访问不到运行起来的web服务
继续打开ida分析,使用字符串搜索,确定问题所在位置
指向了函数sub_1a36c,其中ip得值最终归宿到a1来确定
那么便利用交叉引用来查看调 ...
AArch64-Csu&Mprotect_Exploit
程序分析-Shanghai2018_baby_arm惯例checksec
首先看到的是一个64位arm的程序,在使用qemu用户态启动程序时其命令也稍有区别
1❯ qemu-aarch64 -L /usr/aarch64-linux-gnu/ -g 1234 pwn
运行起来看就是两次输出,接下来我们到ida中来分析
第一次的read是将数据写到了一个bss段中
而第二次read时便出现了很明显的栈溢出漏洞
对此第一个想法就是ret2shellcode 将shellcode写到第一次输入的点中,在第二次输入时控制pc跳转到该地址执行shellcode
但是不尽人意之处便是该地址并无可执行权限,也就是说即使跳转到该地址也无法执行我们的shellcode
此时返回ida继续分析,可以看到程序中还存在一个mprotect函数,这就是我们的转折点,可以利用该函数来讲bss段地址的权限改为可读可写可执行,那样就可以执行我们的shellcode了
漏洞利用Arch64中类似x86 csu_init的代码段首先由于程序中找不到可以直接控制x1、x2、x3寄存器的gadgets,因此便只 ...