A2-5 Session Mgmt. - Administrative Portals
1. 总概
实验目标:通过获得admin权限了解会话管理中的漏洞
知识点:代码审计 php会话管理知识
三个不同难度的实验分别代表了三种会话管理的方法
2. 实验操作步骤
Low级别
Get传参验证 (不安全)
页面被锁住,说明当前用户没有权限查看内容
提示:请检查url
http://127.0.0.1:12003/smgmt_admin_portal.php?admin=0
url中我们可以看到有个admin参数,内容是0,我们改成1试一下
http://127.0.0.1:12003/smgmt_admin_portal.php?admin=1
成功解锁
代码审计
1 | case "0" : |
当case等于0也就是安全级别为low的时候
接收admin参数,弱admin参数等于1,则解锁页面,否则锁定页面
Medium 级别
Cookie单项验证 (不安全)
页面依然被锁住,提示查看cookies
我们在控制台输出cookie内容
1 | "order=id%20desc; serverType=apache; force=0; pnull=1; softType=0; depType=0; Hm_lvt_8d47cbee4e5b4661d33f3edc68a1c7f0=1583834260,1584437445,1584449503; PHPSESSID=abgvim5hfug5meddk2kl476kv0; security_level=1; admin=0" |
可以看到cookie中最后一项参数为admin=0;我们改成admin=1试一试
成功解锁
代码审计
1 | case "1" : |
在代码中可以看到只验证了cookie中admin的内容,很不安全
High级别
启用session验证(相对安全)
先来看代码
1 | case "2" : |
high级别是启用了session验证
session是存在服务器的,没法在本地被我们随意修改
这种验证方式还是比较安全的
3.总结
这个实验展示了获取管理权限的三种验证方法,GET传参验证是极不安全的,直接修改URL参数就可以获取权限。不过现实中基本不会有程序员这样写代码。Cookie单项验证也是不安全的,因为Cookie存储在客户端,容易在本地被篡改。而用Session来验证相对安全一些,因为Session存储在服务器端,没法在本地修改。
A2-6 Session Mgmt. - Cookies (HTTPOnly)
1.总概
实验目标:认识httponly
知识点:代码审计 php setcookie函数
什么是 HttpOnly?
如果Cookie中设置了httponly属性,那么通过js脚本将无法读取到Cookie信息,这样能有效的防止XSS攻击,窃取Cookie内容,这样就增加了Cookie的安全性,即便是这样,也不要将重要信息存入Cookie。
着重讲一下php setcookie( ) 参数httponly的用法:
1 | setcookie( string $name[, string $value = ""[, int $expire = 0[, string $path = ""[, string $domain = ""[, bool $secure = false[, bool $httponly = false]]]]]] ) : bool |
参数
httponly
设置成 TRUE,Cookie 仅可通过 HTTP 协议访问。这意思就是 Cookie 无法通过类似 JavaScript 这样的脚本语言访问。要有效减少 XSS 攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持)。
2.实验操作步骤
Low级别
点击cookies看到cookie中有三个参数
可以看到所有的cookie信息
代码审计
1 | case "0" : |
当级别为low的时候
后面两个false分别对应了setcookie函数里secure参数和httonly参数,说明
http下可以查看cookie
cookie可以通过js查看
Medium级别
使用js无法查看top_security
代码审计
1 | case "1" : |
显而易见,开启了httponly,无法用js查看设置的cookie内容。
High级别
使用js无法查看top_security
代码审计
1 | case "2" : |
减少了cookie存在时间,开启了httponly,使用js无法查看top_security
3.总结
本实验主要通过设置setcookie()函数中httponly参数,让大家理解这个参数的安全作用,如果设置为true,那么用js就无法查看cookie,但是可以通过抓包查看修改。设置这个参数为true有一定的防xss的安全作用。
A2-7 Session Mgmt. - Cookies (Secure)
1.总概
实验目标:知道secure参数对应的安全作用
知识点:代码审计 php setcookie函数
着重讲一下php setcookie( ) 参数secure的用法:
1 | setcookie( string $name[, string $value = ""[, int $expire = 0[, string $path = ""[, string $domain = ""[, bool $secure = false[, bool $httponly = false]]]]]] ) : bool |
参数
secure
设置这个Cookie 是否仅仅通过安全的 HTTPS 连接传给客户端。设置成 TRUE 时,只有安全连接存在时才会设置 Cookie。
2.实验操作步骤
Low级别
通过在控制台用js调出cookie 我们是看不到top_security的
但是通过抓包是可以看到的
代码审计
1 | case "0" : $message.= "<p>Browse to another page to see if the cookies are protected over a non-SSL channel.</p>"; // The cookie will be available within the entire domain // Sets the Http Only flag setcookie("top_security", "no", time()+3600, "/", "", false, true); break; |
可以看到当low级别时,只开启http_only 不开启secure
http协议下
js无法读cookie
抓包可以
Medium级别
1 | 当secure判断是https协议时才会设置cookie |
所以在medium级别下我们已经看不到了,因为是http协议,所以根本没有设置。
代码审计
1 | case "1" : $message = "<p>This page must be accessed over a SSL channel to fully function!<br />"; $message.= "Browse to another page to see if the cookies are protected over a non-SSL channel.</p>"; // The cookie will be available within the entire domain // Sets the Http Only flag and the Secure flag setcookie("top_security", "maybe", time()+3600, "/", "", true, true); break; |
同时开启了secure和httponly
由于是http协议
没有写入cookie
High级别
高级别下也没有设置cookie
代码审计
1 | case "2" : $message = "<p>This page must be accessed over a SSL channel to fully function!<br />"; $message.= "Browse to another page to see if the cookies are protected over a non-SSL channel.</p>"; // The cookie will be available within the entire domain // The cookie expires at end of the session // Sets the Http Only flag and the Secure flag setcookie("top_security", "yes", time()+300, "/", "", true, true); break; |
可以看到与medium不同的是减少了cookie的存在时间
3.总结
本实验主要通过设置setcookie()函数中secure参数,让大家理解这个参
数的安全作用,如果设置为true,那么http就无法收到cookie,除非改为https。