我希望用一个具体的例子来说明利用缓冲区溢出的强大程度。
为实现这一目标,我准备了这个简单的C程序,名为" bo":
#include <stdio.h>
#include <string.h>
void function(char* input) {
char buffer[128];
strcpy(buffer, input);
printf("Your input is: %s\n", buffer);
}
void main(int argc, char **argv) {
function(argv[1]);
}
我用选项编译:-fno-stack-protector和execstack。
一切正常,我能够使用我的shellcode打开一个新的bash。
在我的系统(Ubuntu MATE 15.10 32bit)中我有2个用户:&#34;用户&#34; (组:用户)和&#34; admin&#34; (group:admin),都有sudo权限。
我想要做的是启用&#34;用户&#34;执行&#34; bo&#34;拥有&#34; admin&#34;的特权这样当缓冲区溢出发生并且shellcode被执行时,我有一个用&#34; admin&#34;运行的shell。特权(从这个shell,如果我运行命令&#34; id&#34;或&#34; whoami&#34;我想表明现在我们是&#34; admin&#34;)。
我已经看到我需要将SUID / SGID权限chmod到&#34; bo&#34;。我试过很多方面,但是当shellcode运行的时候,我总是从&#34;用户&#34;中推出一个shell。
答案 0 :(得分:2)
sudo
为调用用户提供root用户权限,并以root身份运行任何进程。 su
进程用于switch user
确保进程与admin用户privs一起运行。 bo二进制文件需要为chown admin:admin
和chmod u+s
作为管理员。
例如如果您的二进制文件目前看起来像这样:
ls -l bo
drwxrwxr-x user user <size> bo
如果你成为root用户,那么成为管理员然后更改你应该获得的权限:
sudo -i # become root
chown admin: bo # change ownership
su - admin # become admin
chmod u+s bo # set sticky bit
然后<ctrl-d>
两次回到user
,您应该看到:
ls -l bo
drwSrwxr-x admin admin bo
当然,您可以通过首先将代码编译为admin
用户来取消所有sudo和su废话,然后chmod&#39;(仍然作为{{1 }} user)在成为admin
用户之前。
答案 1 :(得分:0)
最后我发现我不仅有权限问题,而且我的shellcode没有产生root shell。
顺便说一句,感谢Cwissy的建议,为了充分利用这个漏洞,我必须在我的bo文件上设置一些权限:
sudo -i
chown 0:0 bo
chmod 4755 bo
exit
然后使用正确的shellcode(现在我使用https://www.exploit-db.com/docs/21013.pdf中的那个),我能够生成根shell。
与我最初的想法略有不同(以“admin”权限生成一个shell),但这也是一个很好的例子。