Exploit 编写系列教程第一篇:基于栈的溢出
①用armitage生成shellcode:
sudo /etc/init.d/postgresql start
sudo msfdb init
sudo msfconsole #启动后用db_status查看一下数据库连接状态
再打开armitage,生成shellcode:
②P18页最终想要Exploit弹出系统自带计算器,这里有个细节:
为什么是25个,不是4个?原因是除了要考虑ret 4
后esp会弹掉4个字节,还要考虑shellcode的执行。程序执行是需要指令对齐的。
Exploit 编写系列教程第三篇_基于SEH的Exploit
①要想进行SEH攻击,首先要确保程序有异常处理机制。有异常处理机制的程序会安装异常处理机制,如图:
可知特征码为64 A1
。在程序中查找特征码即可知有无实施SEH攻击可能性。
②windbg用于确定程序崩溃、异常、非法访问是否可利用的插件要用这个版本的MSECExtensions_1_0_6.zip,否则在xp下无法正常加载
③为什么使用pop pop ret
?
因为异常处理函数_except_handler的原型如下:
所以刚进入异常处理函数后的堆栈如图:
这时只要执行pop pop ret
,就可以让eip
指向当前SEH链的首地址。
所以,典型的exploit结构如图:
④为什么P20这里还要加这么多nop
?
如果不加,程序不会产生溢出异常- -||
⑤练习题中,如何采用覆盖eip
的方式写exploit?
分析过程如下:
接下来,
- 先找出覆盖
edx
的字符偏移量,为4127 - 将偏移4127处的4个字节覆盖为某个地址,对这个地址有几点要求:
要保证该地址减8的结果位于进程内合法的内存空间,且该内存空间此处存放的dword值须小于等于0;
要保证这个用于覆盖的地址不能含有