论文部分内容阅读
【摘要】 本文就工作中发现的一起SQL注入网络安全漏洞,从事件经过、验证过程、防护建议几个方面,对该漏洞进行了介绍。使读者能够对SQL注入漏洞有一个比较清晰的认识,防止攻击者利用该漏洞对网站数据库进行拖库、撞库、洗库、社工库等操作,进而导致数据泄露、修改网站内容、控制网站等安全事件的发生。
【关键词】 网络安全漏洞 SQL注入 数据库
随着互联网技术的迅猛发展,黑客攻击网站的手段也不断提高。借助某种技术手段,非法获取机密数据或非法获取高于系统给定权限的系列行为都属于黑客攻击[1]。如今犯罪分子利用网络安全漏洞进行犯罪的行为已不鲜见,SQL(结构化查询语言,Structured Query Language)注入漏洞就是最常见的一种网络安全漏洞。
网络安全漏洞不容小觑。SQL注入属于高危风险网络安全漏洞,攻击者通过SQL注入可以获取到网站服务器的数据库名、表名、字段名,进而得到整个网站服务器的数据,对网站用户的数据造成极大的安全威胁。除此以外,攻击者在获取到的数据库信息中,可能得到很多用户的信息,甚至是后台系统管理员的帐号信息,利用管理员的权限对网页进行恶意篡改。这样不仅造成网站数据库信息泄露,对整个网站系统也造成严重破坏。
一、事件经过
笔者一直从事对网站的网络安全漏洞扫描工作,于2021年3月发现一起比较典型的SQL注入漏洞,供读者参考。漏洞详细情况如下:漏洞名稱为SQL注入漏洞;漏洞数量1个;漏洞等级为高危;漏洞URL地址为 https://www.---.com/ehall/index.asp(“---”代表网站部分URL地址)。
漏洞描述为,SQL注入漏洞,就是通过执行用户输入的SQL命令,获取网站数据库信息,简单来说就是欺骗网站服务器从而执行用户输入的恶意SQL命令。具体来说,SQL注入攻击就是利用网站应用程序存在的安全漏洞,向SQL语句中插入了异常代码,改变原有的SQL命令语义,从而获取到想要的数据,达到攻击目的。SQL注入的方法非常灵活多变,根据特定的情况设计特定的SQL命令,在实际工作中也会遇到很多不同的情况。黑客目的是如何构造出巧妙的SQL命令,从而获取想要的数据库信息。而我们的目的,是如何防止黑客攻击,保障网站的健康运行。
二、验证过程
我们通过Web安全漏洞扫描工具,发现该网站下面的一个URL地址,存在SQL注入安全漏洞:https://www.---.com/ehall/index.asp?hall=1。下面我们开始对这个URL地址,进行漏洞验证。
1.我们首先访问主页https://www.---.com/,并查看源代码,发现存在https://www.---.com/ehall/页面连接,如图1所示,访问该连接后继续查看源代码,又发现了https://www.---.com/ehall/index.asp?hall=1链接。
2.我们对发现的网页连接进行数据请求,并对数据包进行抓取。我们采用GET请求方式,返回值为“200”,响应正常,如图2所示。
3.修改请求参数为“-1%20OR%203*2*1=6”,即“hall=-1%20OR%203*2*1=6”,我们看到无响应包,证明服务器正在解析该请求。由此判断该网页连接可能存在SQL注入漏洞,如图3所示。
4.使用sqlmap工具进行注入判断。需要对请求方法进行变更,因为在使用sqlmap进行请求测试时,需要对POST中的参数进行测试,如果是GET请求不会对参数进行检测,如图4所示。
将该请求数据保存到文本文件中,文件名修改为2.txt,放到sqlmap根目录下。sqlmap为开源项目,下载地址为http://sqlmap.org/,并且需要在python2的环境中运行。安装好之后,就可以执行命令进行测试了。
5.验证漏洞。使用命令进行验证:python2 sqlmap.py -r 2.txt --random-agent。其中“--random-agent”表示使用random-agent作为HTTP User-Agent头值,不再使用sqlmap默认的HTTP User-Agent头值,因为默认的HTTP User-Agent头值带有sqlmap字样,容易被检测设备发现,添加random-agent之后会从sqlmap/data/txt/user-agents.txt文件中调用HTTP User-Agent头值。命令执行后,结果如图5所示,我们可以看到一些关于服务器的敏感信息。
6.执行命令,列出当前网站的数据库:python2 sqlmap.py -r 2.txt --random-agent --current-db。命令执行后如图6所示,我们可以看到,这个网站的数据库名为“birtvdata”,这比第5步中看到服务器敏感信息又更加深入了一步。
7.执行命令,列出网站数据库中的表:python2 sqlmap.py -r 2.txt --random-agent -D birtvdata –tables。执行后如图7所示,可以看到数据库“birtvdata”中的表信息。由于数据库表比较多,所以在图7中我们只列出了部分表信息。这一步是在第6步的基础之上进行的,即发现了数据库名,然后再查看数据库中的表信息。
通过以上的验证步骤,我们已经可以看到该网站服务器的一些敏感信息,并且查看到网站数据库中的表信息,更深入的操作我们没有再进行。如果是不法分子,完全可以进行拖库,甚至是撞库、洗库、社工库等操作,将网站数据库进行导出,甚至是修改,可能会造成严重的后果。由此我们可以得出结论,这个网站存在SQL注入的网络安全漏洞。 三、防护建议
SQL注入网络安全漏洞,其本质就是欺骗服务器,进而执行恶意的SQL命令。SQL命令是以SQL语言为基础的,实现对数据库内数据的查询、增加、删除、修改等操作,可大大提高效率。如果被不法分子执行恶意的SQL命令,直接威胁到网站数据库的安全,可能带来严重的后果。造成SQL注入漏洞的原因主要有两个:第一是网站对输入的信息没有进行严格过滤,第二是没有对发送到数据库的信息进行转义。根据这两点原因,我们归纳出针对SQL注入漏洞的防护措施主要有以下几方面。
1.严格审查,对输入信息进行校验。检查用户输入是否合规,保证用户输入的信息合法,尤其是用户的输入不能直接被嵌入到SQL语句中,防止SQL注入漏洞。
2.完善机制手段,对用户输入SQL语句的语义进行完整性审查,确认SQL语句的功能目的没有发生改变。
3.注重对网站數据库的监控。定期查看数据库操作日志,尤其是检查是否存在网站管理员操作以外的SQL语句执行痕迹。
4.对于网站接入数据库服务器使用的用户,严禁其使用系统管理员权限。对于普通用户的角色,应遵循最小化权限原则,做到可管可控。比如网站上的普通用户,只需要读取数据库内容的权限,那么就禁止该类用户对数据库表的修改权限,如命令drop、insert、update、delete 等。
5.对用户数据进行加密。对用户名、登录密码等重要信息进行加密保存。防止用户信息被泄露,对网站进行攻击。
6.在不影响网站正常运行的前提下,使用参数化查询,避免使用拼接SQL语句对数据库查询修改。
7.防止网站敏感信息泄露。网站在设计过程中,要避免出现一些敏感或者是详细的报错信息泄露,以防止不法分子对这些信息进行搜集,了解网站及服务器的情况,造成SQL注入或者其它漏洞的利用。
8.对网站进行定期漏洞扫描。定期扫描是发现网络安全漏洞最好的方法,及时修复漏洞,防止网站及服务器遭到攻击破坏。
四、结束语
网络安全不容忽视,这是一个关系国家安全和主权、社会的稳定、民族文化的继承和发扬的重要问题,其重要性不言而喻。为了确保网站的安全,除了提升我们的专业技术水平外,还必须提高工作责任心,定期对网站进行漏洞扫描,发现问题及时处理,防患于未然。这次发现的SQL注入漏洞,我们通过几个验证步骤,就已经可以看到网站数据库中的数据表。如果漏洞被恶意攻击者利用,可能会造成严重的后果。
2018年4月20日至21日,全国网络安全和信息化工作会议在北京召开。中共中央总书记、国家主席、中央军委主席、中央网络安全和信息化委员会主任习近平同志指出,核心技术是国之重器。要下定决心、保持恒心、找准重心,加速推动信息领域核心技术突破。要抓产业体系建设,在技术、产业、政策上共同发力。要遵循技术发展规律,做好体系化技术布局,优中选优、重点突破 [2]。
参 考 文 献
[1]潘崇霞,仲伟俊,梅姝娥.不同攻击类型下风险厌恶型企业信息安全投资策略[J].系统工程学报,2019.34(4):497-510.
[2]新华社.习近平:自主创新推进网络强国建设. 2018-04-21. http://www.cac.gov.cn/2018-04/21/c_1122719824.htm.
【关键词】 网络安全漏洞 SQL注入 数据库
随着互联网技术的迅猛发展,黑客攻击网站的手段也不断提高。借助某种技术手段,非法获取机密数据或非法获取高于系统给定权限的系列行为都属于黑客攻击[1]。如今犯罪分子利用网络安全漏洞进行犯罪的行为已不鲜见,SQL(结构化查询语言,Structured Query Language)注入漏洞就是最常见的一种网络安全漏洞。
网络安全漏洞不容小觑。SQL注入属于高危风险网络安全漏洞,攻击者通过SQL注入可以获取到网站服务器的数据库名、表名、字段名,进而得到整个网站服务器的数据,对网站用户的数据造成极大的安全威胁。除此以外,攻击者在获取到的数据库信息中,可能得到很多用户的信息,甚至是后台系统管理员的帐号信息,利用管理员的权限对网页进行恶意篡改。这样不仅造成网站数据库信息泄露,对整个网站系统也造成严重破坏。
一、事件经过
笔者一直从事对网站的网络安全漏洞扫描工作,于2021年3月发现一起比较典型的SQL注入漏洞,供读者参考。漏洞详细情况如下:漏洞名稱为SQL注入漏洞;漏洞数量1个;漏洞等级为高危;漏洞URL地址为 https://www.---.com/ehall/index.asp(“---”代表网站部分URL地址)。
漏洞描述为,SQL注入漏洞,就是通过执行用户输入的SQL命令,获取网站数据库信息,简单来说就是欺骗网站服务器从而执行用户输入的恶意SQL命令。具体来说,SQL注入攻击就是利用网站应用程序存在的安全漏洞,向SQL语句中插入了异常代码,改变原有的SQL命令语义,从而获取到想要的数据,达到攻击目的。SQL注入的方法非常灵活多变,根据特定的情况设计特定的SQL命令,在实际工作中也会遇到很多不同的情况。黑客目的是如何构造出巧妙的SQL命令,从而获取想要的数据库信息。而我们的目的,是如何防止黑客攻击,保障网站的健康运行。
二、验证过程
我们通过Web安全漏洞扫描工具,发现该网站下面的一个URL地址,存在SQL注入安全漏洞:https://www.---.com/ehall/index.asp?hall=1。下面我们开始对这个URL地址,进行漏洞验证。
1.我们首先访问主页https://www.---.com/,并查看源代码,发现存在https://www.---.com/ehall/页面连接,如图1所示,访问该连接后继续查看源代码,又发现了https://www.---.com/ehall/index.asp?hall=1链接。
2.我们对发现的网页连接进行数据请求,并对数据包进行抓取。我们采用GET请求方式,返回值为“200”,响应正常,如图2所示。
3.修改请求参数为“-1%20OR%203*2*1=6”,即“hall=-1%20OR%203*2*1=6”,我们看到无响应包,证明服务器正在解析该请求。由此判断该网页连接可能存在SQL注入漏洞,如图3所示。
4.使用sqlmap工具进行注入判断。需要对请求方法进行变更,因为在使用sqlmap进行请求测试时,需要对POST中的参数进行测试,如果是GET请求不会对参数进行检测,如图4所示。
将该请求数据保存到文本文件中,文件名修改为2.txt,放到sqlmap根目录下。sqlmap为开源项目,下载地址为http://sqlmap.org/,并且需要在python2的环境中运行。安装好之后,就可以执行命令进行测试了。
5.验证漏洞。使用命令进行验证:python2 sqlmap.py -r 2.txt --random-agent。其中“--random-agent”表示使用random-agent作为HTTP User-Agent头值,不再使用sqlmap默认的HTTP User-Agent头值,因为默认的HTTP User-Agent头值带有sqlmap字样,容易被检测设备发现,添加random-agent之后会从sqlmap/data/txt/user-agents.txt文件中调用HTTP User-Agent头值。命令执行后,结果如图5所示,我们可以看到一些关于服务器的敏感信息。
6.执行命令,列出当前网站的数据库:python2 sqlmap.py -r 2.txt --random-agent --current-db。命令执行后如图6所示,我们可以看到,这个网站的数据库名为“birtvdata”,这比第5步中看到服务器敏感信息又更加深入了一步。
7.执行命令,列出网站数据库中的表:python2 sqlmap.py -r 2.txt --random-agent -D birtvdata –tables。执行后如图7所示,可以看到数据库“birtvdata”中的表信息。由于数据库表比较多,所以在图7中我们只列出了部分表信息。这一步是在第6步的基础之上进行的,即发现了数据库名,然后再查看数据库中的表信息。
通过以上的验证步骤,我们已经可以看到该网站服务器的一些敏感信息,并且查看到网站数据库中的表信息,更深入的操作我们没有再进行。如果是不法分子,完全可以进行拖库,甚至是撞库、洗库、社工库等操作,将网站数据库进行导出,甚至是修改,可能会造成严重的后果。由此我们可以得出结论,这个网站存在SQL注入的网络安全漏洞。 三、防护建议
SQL注入网络安全漏洞,其本质就是欺骗服务器,进而执行恶意的SQL命令。SQL命令是以SQL语言为基础的,实现对数据库内数据的查询、增加、删除、修改等操作,可大大提高效率。如果被不法分子执行恶意的SQL命令,直接威胁到网站数据库的安全,可能带来严重的后果。造成SQL注入漏洞的原因主要有两个:第一是网站对输入的信息没有进行严格过滤,第二是没有对发送到数据库的信息进行转义。根据这两点原因,我们归纳出针对SQL注入漏洞的防护措施主要有以下几方面。
1.严格审查,对输入信息进行校验。检查用户输入是否合规,保证用户输入的信息合法,尤其是用户的输入不能直接被嵌入到SQL语句中,防止SQL注入漏洞。
2.完善机制手段,对用户输入SQL语句的语义进行完整性审查,确认SQL语句的功能目的没有发生改变。
3.注重对网站數据库的监控。定期查看数据库操作日志,尤其是检查是否存在网站管理员操作以外的SQL语句执行痕迹。
4.对于网站接入数据库服务器使用的用户,严禁其使用系统管理员权限。对于普通用户的角色,应遵循最小化权限原则,做到可管可控。比如网站上的普通用户,只需要读取数据库内容的权限,那么就禁止该类用户对数据库表的修改权限,如命令drop、insert、update、delete 等。
5.对用户数据进行加密。对用户名、登录密码等重要信息进行加密保存。防止用户信息被泄露,对网站进行攻击。
6.在不影响网站正常运行的前提下,使用参数化查询,避免使用拼接SQL语句对数据库查询修改。
7.防止网站敏感信息泄露。网站在设计过程中,要避免出现一些敏感或者是详细的报错信息泄露,以防止不法分子对这些信息进行搜集,了解网站及服务器的情况,造成SQL注入或者其它漏洞的利用。
8.对网站进行定期漏洞扫描。定期扫描是发现网络安全漏洞最好的方法,及时修复漏洞,防止网站及服务器遭到攻击破坏。
四、结束语
网络安全不容忽视,这是一个关系国家安全和主权、社会的稳定、民族文化的继承和发扬的重要问题,其重要性不言而喻。为了确保网站的安全,除了提升我们的专业技术水平外,还必须提高工作责任心,定期对网站进行漏洞扫描,发现问题及时处理,防患于未然。这次发现的SQL注入漏洞,我们通过几个验证步骤,就已经可以看到网站数据库中的数据表。如果漏洞被恶意攻击者利用,可能会造成严重的后果。
2018年4月20日至21日,全国网络安全和信息化工作会议在北京召开。中共中央总书记、国家主席、中央军委主席、中央网络安全和信息化委员会主任习近平同志指出,核心技术是国之重器。要下定决心、保持恒心、找准重心,加速推动信息领域核心技术突破。要抓产业体系建设,在技术、产业、政策上共同发力。要遵循技术发展规律,做好体系化技术布局,优中选优、重点突破 [2]。
参 考 文 献
[1]潘崇霞,仲伟俊,梅姝娥.不同攻击类型下风险厌恶型企业信息安全投资策略[J].系统工程学报,2019.34(4):497-510.
[2]新华社.习近平:自主创新推进网络强国建设. 2018-04-21. http://www.cac.gov.cn/2018-04/21/c_1122719824.htm.