本文是Web安全入门系列的第1篇文章
01
什么是SQL?
SQL是结构化查询语言(Structured Query Language)的简称,是用于访问和处理数据库的标准计算机语言。
什么是注入?
注入是把输入的恶意数据当做代码,并解析和执行的过程。
什么是SQL注入?
SQL注入是将恶意的SQL代码插入到输入参数,并被数据库解析和执行的攻击手段。
这是一条正常的MySQL查询语句:
SELECT first_name,user FROM users WHERE user_id=1
这是一条加上恶意SQL代码之后的语句,通过加入恶意代码,我们拿到了当前数据库的版本号:
SELECT first_name,user FROM users WHERE user_id=1 UNION SELECT 1,version();
02
定位注入点
Web注入点可能存在的位置包括且不限于:网页输入框、HTTP请求参数、HTTP头等,构造注入语句后,通过服务端返回的结果判断是否存在注入点。
信息收集
如果存在SQL注入,可进一步构造特定语句来判断当前站点所连接的数据库类型、数据库版本、数据库登录用户以及用户权限等。
数据获取
确认数据库基本信息后,可根据不同类型数据库的特征,构造相应语句查询数据库表信息、表的列信息、指定表的数据,进而读取数据库配置、网站配置、获取敏感数据,实施破坏、拖库等。
提权
远程连接数据库、上传WebShell、读取操作系统配置文件、执行操作系统命令、挂马、植入后门、搜集内网信息等。
03
正在想入非非的同学,网络安全法了解一下
作为一位遵纪守法爱学习的同学,我们不能随意攻击互联网上的网站,但是光说不练没法进步,所以我们需要一个靶场。DVWA(Damn Vulnerable Web Application),是一个用PHP编写的,作为Web安全测试练习的合法环境,也就是俗称的靶场。DVWA提供了多种练习场景,包括SQL注入,XSS,暴力破解,命令行注入,CSRF等,对刚开始学习的同学来说完全够用。
靶场搭建
1.安装PHP集成环境:常用的有WampServer和PHPStudy
2.GitHub上下载DVWA:https://github.com/ethicalhack3r/DVWA,本地解压后放到WampServer或者PHPStudy安装目录的www目录下
3.修改MySQL数据库的root密码
4.打开DVWA/confing文件夹,将config.inc.php.dist重命名为config.inc.php,编辑config.inc.php,修改db_password为上一步设置的MySQL密码
5.访问:http://localhost/DVWA,初始化数据库,数据库创建成功后会自动跳转到登录页面,默认登录用户名:admin,密码:password
04
进入靶场首页将安全等级设置为low
进入SQL Injection页面
第一步,定位注入点。我们观察一下上面的Web页面,只有一个输入框和一个提交按钮,尝试输入数字2,页面返回了一些信息,同时URL后面多了"?id=2&Submit=Submit#"
从刚才的执行结果得到如下信息:点提交按钮发了一个HTTP GET请求,传入参数名称为id,参数值为数字。猜测返回结果是数据库用户表里用户id为2的那条数据的其中两个字段,猜测最终执行的SQL语句大致如下:
SELECT Firstname,Surname FROM 用户表 WHERE id=2
不过参数是从前端传进去的,那么有可能在拼接参数的过程中还会带有引号,因此输入2',然后进入了报错页面:
小知识
程序在处理内部错误或异常时,应遵循最小化反馈信息原则,避免给予不可靠用户过多信息。不能将详细的数据库错误信息显示在客户端,应将错误信息隐藏起来,如“抱歉,发生内部错误”。
从报错得到如下信息:后台使用的数据库类型是MySQL,传入id的值时使用了单引号(可以再试试输入双引号,不会报错),猜测前端拼接的SQL语句大致如下:
SELECT Firstname,Surname FROM 用户表 WHERE id='2'
然后输入:2' or '1'='1,对应SQL语句如下:
SELECT Firstname,Surname FROM 用户表 WHERE id='2' or '1'='1'
执行成功,通过加入恶意SQL代码,一次查询出了整张表的数据:
至此,我们成功的定位了注入点,本期内容就到这里了,期待下期再见~
(部分图片源自网络,侵删)
原文始发于微信公众号(陆吾安全攻防实验室):初识SQL注入
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论