此次主要徒手体会了一下编写shellcode 的不容易。当真不容易,看着作者的代码,都感觉自己无处可以下手了。 需要的底层原理知识也还挺多需要补充上去的。
打算后期再逐渐补充。目前阶段将jmp esp弄懂了。后面动态获取api在主机上出错了。问题和搜索jmp esp代码时候貌似一样,产生访问越权的问题。后期再继续解决吧。
目前整理一下整个的思路。
1、shellcode、expoit的概念;
2、为了更好的注入shellcode,里程碑式的方法。使用jmp esp。
3、后续:动态获取api、编码shellcode、压缩shellcode。
后续内容用在之后再学习。
1、shellcode、exploit概念
shellcode:通称缓冲区溢出攻击中植入进程的代码。
exploit: 代码植入的过程成为漏洞利用,即exploit。
2、里程碑式的注入方法:jmp esp
之前我们的一个思路,是将shellcode注入到缓冲区里面。通过溢出修改返回地址,指向缓冲区的起始位置从而执行shellcode。
但是这样会有一个弊端。目前溢出修改的返回地址是固定的,如果系统一重新启动,或者重新运行程序,分配的地址就会改变,原来的shellcode就不行了,需要再次od看地址,修改地址。这样很不方便。这个问题再困扰了人们很久以后,在1998年,黑客组织“cult of the dead cow”的Dildog首次提出了使用jmp esp的动态定位,成为shellcode里程碑式的进步。
98年,我还是小屁孩的。外面的世界就早已经风起云涌了= =
使用jmp esp有这样的原理。在每次当前函数返回之后,esp都会指向紧紧挨着的下一个栈帧的栈顶。那么通过将shellcode放在返回地址后面,就可以动态的执行了。
(其实我考虑能不能在shellcode中直接获取当前缓冲区的起始地址,然后动态的放到返回地址中,但发现难度大,而且麻烦,代码量也会增加很多。革命式的进步真是很伟大!)
目前的问题就是通过代码搜索内存的jmp esp指令的。使用OD插件可以成功,但是自己设计程序却始终无法找到。
uer32.dll找0x1000个字节就说越权了,不明白是为什么,难度目前windows对这个进行了控制?
OD的插件最后放出来。
自己写的代码(书上的