初识SQL注入

admin 2023年7月31日09:39:04评论25 views字数 1897阅读6分19秒阅读模式

本文是Web安全入门系列的第1篇文章


01

什么是SQL注入?

什么是SQL?

SQL是结构化查询语言(Structured Query Language)的简称,是用于访问和处理数据库的标准计算机语言。

什么是注入?

注入是把输入的恶意数据当做代码,并解析和执行的过程。

什么是SQL注入?

SQL注入是将恶意的SQL代码插入到输入参数,并被数据库解析和执行的攻击手段。

初识SQL注入

这是一条正常的MySQL查询语句:

SELECT first_name,user FROM users WHERE user_id=1

初识SQL注入

这是一条加上恶意SQL代码之后的语句,通过加入恶意代码,我们拿到了当前数据库的版本号:

SELECT first_name,user FROM users WHERE user_id=1 UNION SELECT 1,version();

初识SQL注入



02

SQL注入流程

定位注入点

Web注入点可能存在的位置包括且不限于:网页输入框、HTTP请求参数、HTTP头等,构造注入语句后,通过服务端返回的结果判断是否存在注入点。

信息收集

如果存在SQL注入,可进一步构造特定语句来判断当前站点所连接的数据库类型、数据库版本、数据库登录用户以及用户权限等。

数据获取

确认数据库基本信息后,可根据不同类型数据库的特征,构造相应语句查询数据库表信息、表的列信息、指定表的数据,进而读取数据库配置、网站配置、获取敏感数据,实施破坏、拖库等。

提权

远程连接数据库、上传WebShell、读取操作系统配置文件、执行操作系统命令、挂马、植入后门、搜集内网信息等。


03

实战演练

初识SQL注入

正在想入非非的同学,网络安全法了解一下

初识SQL注入

作为一位遵纪守法爱学习的同学,我们不能随意攻击互联网上的网站,但是光说不练没法进步,所以我们需要一个靶场。DVWADamn 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注入

进入SQL Injection页面

初识SQL注入

第一步,定位注入点。我们观察一下上面的Web页面,只有一个输入框和一个提交按钮,尝试输入数字2,页面返回了一些信息,同时URL后面多了"?id=2&Submit=Submit#"

初识SQL注入

从刚才的执行结果得到如下信息:点提交按钮发了一个HTTP GET请求,传入参数名称为id,参数值为数字。猜测返回结果是数据库用户表里用户id2的那条数据的其中两个字段,猜测最终执行的SQL语句大致如下:

SELECT Firstname,Surname FROM 用户表 WHERE id=2

不过参数是从前端传进去的,那么有可能在拼接参数的过程中还会带有引号,因此输入2',然后进入了报错页面:

初识SQL注入

初识SQL注入

小知识



程序在处理内部错误或异常时,应遵循最小化反馈信息原则,避免给予不可靠用户过多信息。不能将详细的数据库错误信息显示在客户端,应将错误信息隐藏起来,如“抱歉,发生内部错误”。

从报错得到如下信息:后台使用的数据库类型是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注入

至此,我们成功的定位了注入点,本期内容就到这里了,期待下期再见~

(部分图片源自网络,侵删)

原文始发于微信公众号(陆吾安全攻防实验室):初识SQL注入

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月31日09:39:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   初识SQL注入http://cn-sec.com/archives/1067666.html

发表评论

匿名网友 填写信息