SQL注入漏洞攻击研究与实践

2020-06-15 16:06鲁先志
卫星电视与宽带多媒体 2020年8期
关键词:漏洞

鲁先志

【摘要】sql注入漏洞是web系统中常见的一种漏洞,本文利用一个实验案例分析了sql注入漏洞的原理,并给出了防范sql注入漏洞方法。

【关键词】漏洞;web系统;结构化查询语句

结构化查询语句(Structured Query Language,缩写:SQL),是一种特殊的编程语言,用于数据库中的标准数据查询语言。SQL注入(SQL Injection)是一种常见的Web安全漏洞,攻击者利用这个问题,可以访问或者修改数据,或者利用潜在的数据库漏洞进行攻击。

SQL注入攻击是Web安全史上的一个重要里程碑,它从1999年首次进入人们的视线,至今已经有十几年的历史了,虽然我们现在已经有了很全面的防范对策,但是它的威力仍然不容小觑,SQL注入攻击至今仍然是Web安全领域中的一个重要组成部分。

1. sql注入漏洞原理

SQL注入是将SQL代码插入到网站应用的参数之中,通过执行sql查询语句将插入的参数传入到系统后台数据库服务器解析执行的攻击。SQL注入的主要方式是直接将SQL代码插入到参数中,这些参数会被置入到SQL命令中加以执行,攻击者能修改SQL语句时,该进程将与执行命令的组件(数据库服务器、web服务器)拥有相同权限如果开发人员直接使用SQL语句对提交的查询进行执行,或者过滤不严即会产生SQL注入漏洞。

1.1 造成sql漏洞的原因

①程序开发人员在处理程序和数据库交互的时候,使用字符拼接的方法构造SQL语句

②程序开发人员未对用户可控参数进行足够的过滤便将参数内容拼接进入到SQL语句中

1.2 sql注入漏洞的危害

恶意攻击者利用SQL注入漏洞,可以获取数据库中的用户敏感信息(例如:管理员后台密码),为下一步的系统渗透提供帮助。在某些特定情况下,还可以利用sql注入漏洞修改数据库内容,如果数据库权限分配存在问题,或者数据库本身存在缺陷,那么攻击者可以通过SQL注入漏洞直接获取应用系统的管理员权限或者服务器系统权限。

2. sql漏洞利用实践

本文搭建了一个具有sql漏洞的web应用系统,通过构造带有恶意参数的sql查询语句来实现对web应用系统的渗透。渗透环境是安装了harkbar工具的chrom瀏览器。首先进入具体sql漏洞的web系统的网页。

将地址栏中的url复制到hackbar的文本框中点击hackbar中的“Execute”按钮。访问目标URL,正常显示。

在URL后添加单引号,网页报错,系统开发者没有正确处理用户输入的参数,存在sql注入漏洞的可能。

利用sql语法中的order by语句猜测当前sql语句查询数据库表中的列的数量。先猜测该表有10列,发现系统报错。

进一步缩小猜测范围,通过二分法,当字段为3时order by刚好显示正常内容

通过sql语法中的“UNION”语句获取该页面可显示查询内容能显示的的位置(输入一个错误的id),图中“2,3”的位置即可插入常用函数。

将“2”的位置插入函数@@datadir获取网站的数据库所在的路径。

将“3”的位置插入函数version()获取系统的版本号。

进一步猜测,将“2”的位置换成user(),“3”的位置换成database(),系统显示当前数据库用户为sql1,当前数据库lab。

对sql语句进行拼接,猜测数据库表名“-1union all select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database(),”可知lab数据库下有两个表,分别为“flag_normal”和“news”。

对sql语句进行拼接,猜测数据库表“flag_normal”中的列名。“http://www.aaa.com:1234/pentest/sql/1.php?id=-1 union  all select 1,2,group_concat(column_name) from information_schema.columns  where table_name='flag_normal'”

进一步对sql语句进行拼接,猜测数据库表“flag_normal”中,“type”和“vale”列中的具体内容:

“http://www.aaa.com:1234/pentest/sql/1.php?id=-1 union all select 1,type,value from flag_normal”得到系统的用户名和密码。需要说明的是存储在数据库中的密码绝大部分都是经过MD5加密过的,需要对MD5进一步揭秘才能获取明文。

从上文可以看出,通过构造攻击参数来执行程序的sql查询语句获得了web系统的用户名和密码,恶意渗透者可以利用获得的关键信息登录web系统,对系统的敏感数据进行修改或窃取。

3. sql注入漏洞的安全防范、

sql漏洞是web系统中最为普遍的一类漏洞,广泛存在于早期开发的web系统中。防范sql漏洞最有效和最直接的方法是在程序开发阶段杜绝可能存在sql利用攻击的程序代码,比如尽量利用参数化的查询语句。已经存在sql漏洞的web系统,如果不能修补源代码的方式来防范,也可以采用web防火墙的方式来防止常规的sql注入漏洞攻击。

参考文献:

[1]王德高等.SQL注入攻击与防范实验的设计与实现[J].电子世界,2017.54-55

[2]李文锋,林天峰.SQL注入攻击[J].计算机与网络,2004.(24)54-55

[3]刘建臣.追根溯源防范SQL注入攻击[J].信息安全,2019.(08)135-137

作者简介:鲁先志(1976-),男,河南濮阳人,硕士,副教授,研究方向:职业教育和网络安全。

猜你喜欢
漏洞
小心“漏洞”
漏洞在哪里
漏洞在哪儿?
侦探推理游戏(二)
QQ浏览器成黑客攻击帮手
漏洞在哪儿
从Windows 95就开始的超级漏洞
Windows系统WebDAV提权漏洞
漏洞一响,黄金万两
视频、Office漏洞相继爆发