小迪安全笔记-24

第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:表名