SQL注入漏洞产生根本条件:可控变量 特定函数
脚本代码在实现代码与数据库进行数据通讯时(从数据库取出相关数据进行页面显示),将定义的SQL语句进行执行查询数据时。其中用户能通过参数传递自定义值来实现控制SQL语句,从而执行恶意的SQL语句,可以实现查询其他数据(数据库中的敏感数据,如管理员帐号密码)。这一个过程就可以叫做SQL注入漏洞。
SQL注入攻击流程:
1、猜测数据库类型
2、根据类型选择思路
ASP+Access-简易注入-字典猜解
1.ACCESS的数据库是独立存在的:以文件形式,连接数据库,就是指定一个数据库文件
2.ACCESS数据库特性:
没数据库用户,没数据库权限,没数据库查询函数,没有高权限注入说法
3.Access无高权限注入点-只能猜解,而且还是暴力猜解
4.数据库数据阶级:
数据库名——表名—— 列名—— 数据
5.由于Access数据库特性导致这个SQL注入是需要借助字典去猜解表名和列名的,那么就会出现表名或列名猜解不到,可以自定义社工字典或采用偏移注入!
本地搭建网站:iis中间件+asp脚本+access数据库
网站演示:
猜测列数
猜解表名和测试页面显示的列
将页面显示的列替换为想要查询的列名
成功查询
ASP+Access-偏移注入-报错显示
偏移注入就是解决表名已知,列名未知的情况!
网站演示:
判断出显错位和列数
浏览器搜索pyload
使用pyload查询表数据
查看页面代码,成功得到数据
PHP+MYSQL-简易注入-存储特性
MYSQL的数据库是统一管理:多个数据库在一起,连接时需要指定数据库和用户名密码
数据库A=网站A=数据库用户A
数据库B=网站B=数据库用户B
数据库C=网站C=数据库用户C
还存在一个最高数据库用户---root用户:所有数据库皆可查看
数据库数据阶级:
数据库名——表名—— 列名—— 数据
为了网站和数据库的安全性,MYSQL内置有ROOT最高用户,划分等级,每个用户对应管理一个数据库,这样保证无不关联,从而不会影响到其他数据库的运行。
MYSQL两种思路:
1、 非ROOT的注入攻击:常规类的猜解
2、 ROOT用户的注入攻击:文件读写操作,跨库查询注入等
黑盒测试中可以采用user()获取当前用户权限,白盒中看连接用户即可!
MYSQL5.0以上版本:自带的数据库:information_schema
information_schema:存储数据库下的数据库名及表名和列名信息的数据库
information_schema.tables:记录表名信息的表
information_schema.columns:记录列名信息表
网站演示:
1.判断列数和显错位
2.查询数据库---为后期猜解指定数据库下的表,列做准备
3.查询当前用户权限---看是否符合ROOT型注入攻击
使用ROOT类型攻击猜解数据
1.获取fcms数据库下面的全部表名信息:
?id=1 union select table_name,2 from information_schema.tables where table_schema='fcms'
2.获取表名fn_adminuser的列名信息:
UNIONSELECT column_name,2 from information_schema.columns where table_name='fn_adminuser' and table_schema='fcms'
3.获取指定列数据:
UNIONSELECT username,passwordfrom fn_adminuser
跨库注入:实现当前网站跨库查询其他数据库对应网站的数据
获取数据库名之后按照常规思路猜解即可,只是获取列内容时,查询条件需要指定数据库和表(如:from 数据库名.表名),因为默认查询当前网站的数据库。
获取当前mysql下的所有数据库名
真实案例:
发现网站传递的参数进行了编码
注入时,如果有加密,要把注入语句先加密再进行注入
猜解列数和爆出显错位
查询基本信息
数据库版本4.1,没有information_schema数据库,只能暴力猜解
sqlmap扫描成功爆出数据库
加入进群
想要加入
原文始发于微信公众号(小黑子安全):SQL注入-简易+偏移+跨库+sqlmap
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论