PWN-格式化字符串漏洞-攻防世界CGfsb
格式化漏洞主要利用以下几种形式:总结:栈上存有123数据,%d,%u,%x,%p就是打印栈上的内容,也就是123,而%s就是打印栈内容上123对应的地址,其对应的地址上所保留的数据例如(32位程序):0x111 -> a 0xa->2330x112 -> b 0x???->???0x113 -> c 0x???->???
前四个就是打印栈上内容a,b,c %s就是打印233
格式化字符串漏洞关键:找到字符串偏移量调用printf函数的过程:mov eax,数组首地址push eaxcall printf栈情况:
题目分析:看保护知道栈溢出是八行的啦
反汇编后很明显是格式化字符串漏洞,printf(&s)这种写法非常致命的,此题需要让全局变量pwnme变成8才可以
首先找偏移量:AAAA对应0x41414141,偏移量为10因为没有开启PIE保护,全局变量的地址是不变的,查看是0x804A068
EXP:当时困惑为什么payload要加上全局变量地址,后面理解了上图原理后,原来printf函数调用的时候会把数组的首地址压栈,因 ...
x86ASM编写主引导扇区
编写主引导扇区程序test.asm
12345678mov ax, 0x30mov dx, 0xC0add ax, dxtimes 502 db 0db 0x55db 0xAA
一个扇区有512个字节,前面一共是8个字节,后面有2个字节,中间就只需要填充502个字节了
对源程序进行编译:nasm -f bin test.asm -o test.bin
test.bin的二进制如下:一个有效的主引导扇区程序,其最后的两个字节数据必须是0x55, 0xAA(规定的)
创建虚拟硬盘并向虚拟硬盘中写入主引导扇区程序创建虚拟硬盘
查看刚刚创建的虚拟硬盘
把之前编译的bin文件写入到虚拟硬盘中
打开bochs,调好参数
调试主引导扇区程序start后,左边是虚拟机调试窗口,右边是虚拟机的显示器
Next at t=0[0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b ; ea5be000f0t表示当前的内部时钟是0,下一条指令在此基础上执行然后依次是物理地址、逻辑地址、汇编指令、机器码仔细看会发 ...
Upx脱壳
#Upx脱壳
脚本脱壳:放入Exeinfo PE中检测,发现是UPX壳,而且提示可以用upx.exe -d进行脱壳处理
upx.exe -d 程序.exe
手动脱壳
法一:根据跨段指令寻找OEP绝大多数加壳程序会在被加密的程序中加上一个或多个段,在最后跳转至OEP时一般都是通过一个跨段跳转指令,所以一句跨段的转移指令(远JMP等)就可找到真正的入口点,在改跳转指令前一般会有POPAD/POPFD指令出现(用于回复入口现场)可以用作定位参考首先是pushad,将全部的通用寄存器入栈,那么我们往下面翻,找到远跳转指令
主要是找远跳转指令的机器码(E9),普通的jmp是E8,找到E9后,对其下断点,运行到此处
按F8步入后就是OEP了
法二:根据堆栈平衡原理寻找OEP该方法即为”ESP定律”法,对绝大部分压缩壳都很有效,原理便是基于栈平衡,壳段代码在保存现场后,我们队ESP指向的内存单元下硬件访问断点,那么在壳段代码恢复现场时定会访问到这个单元,此时我们EIP所处的位置处于壳段代码末端,距离跳转至OEP也就不远了
先单步执行pushad指令,然后对此时的ESP下断点(就是此时的栈顶 ...
ROP-32位-ret2libc-攻防世界level3
题目
此题属于ROP中的ret2libc类型
漏洞分析首先查看保护
level3开启了NX保护
12345678┌──(root💀06aa46c0844f)-[/home/level3]└─# checksec level3[*] '/home/level3/level3' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000)
而libc_32.so.6开启了Canary、NX、PIE保护
12345678┌──(root💀06aa46c0844f)-[/home/level3]└─# checksec libc_32.so.6 [*] '/home/level3/libc_32.so.6' Arch: i386-32-little RELRO: Partial RELRO Stack: ...