【网络安全】SQL注入详细分析

本文阅读 7 分钟
首页 安全分享,WEB安全 正文

SQL注入详细分析

官方定义:SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。 个人理解:我觉得,sql注入就是利用,数据库和后端交互的时候,没有严谨的思路产生的漏洞,可以利用这个漏洞找到数据库里面的数据(这是非常可怕的一件事情)

2.sql注入的原理

通过利用开发者没有过滤干净的交互过程,以sql语句来针对数据进行注入。(这是一个非常繁琐的过程,尤其是需要手工注入的时候,还有就是如果遇到盲注那么就更繁琐了,后期会讲到盲注)

3.sql注入的危害

1、攻击者未经授权可以访问数据库中的数据,盗取用户的隐私以及个人信息,造成用户的信息泄露。

2、通过操作数据库对某些网页进行篡改;

3、修改数据库一些字段的值,嵌入网马链接,进行挂马攻击;攻击者进而可以对网页进行篡改,发布一些违法信息等。

4、服务器被远程控制,被安装后门。可以对数据库的数据进行增加或删除操作,例如私自添加或删除管理员账号。

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

6、破坏硬盘数据,导致全系统瘫痪;

sql注入检测方式有两种,一种是手工检测,另一种是自动检测。 手工检测很好理解,需要在url中写一些语句,形成新的命令,按照渗透者的命令找到想要的数据,这个过程是一个非常麻烦的过程,有时候还需要burp抓包进行配合,而且还需要猜测数据库名称是什么,依赖经验,而且耗时耗力,于是很多渗透者就像能不能写一款工具进行自动注入,可以节省时间和精力呢? 于是就出现了自动注入,自动注入也就是利用工具进行注入,sqlmap算是一个非常好用,并且用的人数最多的软件。

这里给大家个网址学习sql语句 网址链接

2.常见的类型有哪些

2.1字符型检测

判断是否存在字符型注入

  1. 单引号判断 输入:http://url/?id=1' 如果页面回显错误进行注释符判断
    <li>注释符判断 输入:http://url/?id=1'# 这时如果页面回显正常进行</li>

<li>and 1=1判断 输入:http://url/?id=1' and 1=1# 这时如果回显正常那么尝试更改数值</li>
<li>and 1=2判断 输入:http://url/?id=1' and1=2# 如果页面回显错误进行,说明是存在字符型注入</li>

2.1.1实战演示
  1. '检测,点击查询 回显: 说明报错了,而且是因为有几个分号报错。
  2. 注释# 回显正确: 说明 大概率有一个字符型注入

2.2数字型检测

img 这里下拉框意思为id=

2.2.1实战演示
  1. 下拉框为1

img 2. 下拉框为2 img 回显不一样,说明大概率有一个数字型注入

2.3搜索型检测

img

2.3.1实战演示
  1. '检测 回显错误:
  2. 输入# 回显数据说明是输入框的注入

2.4.xx型检测

img

2.4.1实战演示
  1. 基础判断' 这里显示闭合方式需要一个)
  2. 输入')#

回显正确 img

回显错误

  1. ')or 1=1# img 检测到数据,说明这是一个xx注入

1.重要函数

2.重要的数据库

最常用的库是 information_schema 包含sql中所有数据库的信息

3.重要的表

1.什么是union注入

union注入为联合查询语句合并两个或者多个sql语句结合起来,得到联合查询的结果 union注入是需要order by来判断,order by是在sql语句后面进行排序的通常我们用order by来判断字段有几位。

2.union注入的方法

举例:

select*from users where id=2 order by 3;

意思为查询id等于2的3字段,这里有个前提就是,需要表里字段和order by 后面的数字需要一致,才可以回显成功,所以说一般我们都用order by来判断表中有多少个字段,再进行判断字段名称。

实战心得

  1. 在url后加上单引号' 判断是否存在注入
  2. 在url后加上'# 判断是否实现正常
  3. 在url后加上' and 1=1# 判断是否实现正常
  4. 在url后加上' and 1=2# 判断注入类型
  5. 在url后加上' and 1=1 order by 4# 判断字段有几个,如果报错说明小于4,依次递减判断,找到数据库字段数
  6. 在url后加上 ' union select 1,2,3# 判断联合查询语句是否正确
  7. 在url后加上 id=888888'union select1,2,3# 判断是否回显出显示位,如果可以显示,说明可以通过位数查找数据库数据
  8. 构造函数 id=888888'union select1,database(),user()# 查找数据库中当前数据库名和用户名

sql注入学的过程是很难得很痛苦的,学会之后就会很简单,所以希望各位技术友加油,咱们高处见。

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/weixin_50481708/article/details/123939259
-- 展开阅读全文 --
BUUCTF Web [极客大挑战 2019]Knife
« 上一篇 06-24
安全面试之XSS(跨站脚本攻击)
下一篇 » 07-24

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复