shellcode的简介和编写

好坑,我已经写了好久的文章,浏览器刚刚突然崩溃了,再恢复就没有了。。。CSDN竟然没有自动保存的功能。。。哎,疲惫了,前面关于shellcode简介的地方就不再详细介绍了,参见文章:
https://zhuanlan.zhihu.com/p/25816426

我们直接来讲讲如何编写我们的shellcode

shellcode通常是软件漏洞利用过程中使用一小段机器代码,

下面是一份实际比赛中的shellcode,样子长得如下:

\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb3\x01\x83\xc4\x1d\x89\xe1\xb2\x05\xb0\x04\xcd\x80\xb0\x01\xb3\x01\xfe\xcb\xcd\x80\x46\x55\x43\x4b\x0a

shellcode表面看起来是一种能起死回生的神秘数字,实际它只是一段机器码而已。那如何编写shellcode呢,通常有下面几个过程:

  1. 使用c语言描述shellcode要完成的逻辑功能

  2. 将C语言翻译成汇编语言

  3. 编译和测试

  4. 测试通过后提取机器码

这篇文章做了一个实践,写得很好

我们在编写shellcode的时候有这么几个注意的地方:

1⃣️首先,在缓冲区里使用植入shellcode,代码里只能出现一个NULL(0)字符,因为所有的输入函数,只要检测到NULL字符就会返回,因此,NULL只能够出现在shellcode的结尾处,否则,shellcode将会变得不完整。

2⃣️其次,缓冲区的大小,大部分的缓冲区都是一个很小的空间,如8字节,16字节,在这么小的空间里shellcode的编写真变得很紧凑了。

实际上,当攻击客利用漏洞之后,利用shellcode的事情主要有如下几大类:

1 提升权限为root,即调用suid(0)

2 启开bash,全面控制系统,即调用execve("/bin/bash, NULL, NULL);

3 打开网络端口,让攻击者连接该端口进行控制

4 反向连接攻击者提供的端口,进行反向控制。

参考博客:https://blog.csdn.net/linyt/article/details/43347813
https://www.jianshu.com/p/214d8593cfd4

猜你喜欢

转载自blog.csdn.net/qq_37414405/article/details/84866944