好坑,我已经写了好久的文章,浏览器刚刚突然崩溃了,再恢复就没有了。。。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呢,通常有下面几个过程:
-
使用c语言描述shellcode要完成的逻辑功能
-
将C语言翻译成汇编语言
-
编译和测试
-
测试通过后提取机器码
我们在编写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