网络安全实训Day17and18

写在前面

第17和18天都讲的sql注入,故合并

​​​​​​

网络空间安全实训-渗透测试

Web渗透

  • 定义

    • 针对Web站点的渗透攻击,以获取网站控制权限为目的
  • Web渗透的特点

    • Web技术学习门槛低,更容易实现

    • Web的普及性决定了Web渗透更容易找到目标

    • 网站程序开发者的技术参差不齐,更容易找到存在漏洞的网站

    • HTTP协议天然的安全缺陷,导致容易受到攻击

    • Web的身份识别技术存在天然的安全缺陷

    • 通过入侵网站可以获得丰富的经济利益

复制代码
#### OWASP TOP 10

* SQL注入攻击

* XSS攻击

* CSRF攻击

* Web暴力破解

* 文件包含攻击

* 命令注入攻击

* Webshell文件上传攻击

SQL注入攻击

复制代码
### 数据库基础

* 定义

  * 数据库

    * 存储数据的仓库,包含了若干张数据表

  * 数据表

    * 存储和记录数据的容器单位

  * 行

    * 描述一条数据

  * 列

    * 数据的某一个属性,又称字段

*

  #### 常见的数据库管理软件

  * MySQL

    * 搭配PHP网站使用

  * Oracle

    * 搭配Java应用使用

  * SQL Server

    * .NET开发的应用程序搭配使用

  * MariaDB

* SQL

  * 结构化查询语言,用于操纵数据库的语言
复制代码
### SQL注入定义

* 用户将自行构造的SQL查询代码插入或提交到系统执行的查询语言中,从而干扰和或影响到正常查询效果的攻击手段
复制代码
### SQL注入类型

* 普通SQL注入

  *

    #### 手工注入

    * 1.寻找存在SQL注入漏洞的页面

      * 可以向系统后台提交信息的页面

      * 寻找URL中以?的方式向服务器传递信息的页面

    * 2.测试该页面是否存在SQL注入漏洞

      * 在URL传递的参数后加上单引号

        * 返回页面报错,则说明存在SQL注入漏洞

        * 不报错,则说明网站有防御措施

    * 3.验证漏洞是数字型还是字符型

      * 在URL后分别加上1 and 1=1 和 1 and 1 =2

        * 1 and 1=1 有结果返回,1 and 1 =2 无结果返回,则说明漏洞是数字型

      * 在URL后分别加上1' and 1=1# 和 1' and 1=2#

        * 1'and 1=1# 有结果返回, 1' and 1=2#无结果返回则说明漏洞是字符型

    * 4.验证该页面查询的内容共有几个字段

      * 在URL后加上order by 5

        * 有结果返回则说明该页面查询出的字段不小于5个,继续增加猜测的数字,直到页面报错为止.报错数字的上一个数字就是字段总数

    * 5.当前页面中显示了哪几个字段

      * 在URL后加上 and 1=2 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

        * 当前页面中显示的数字就说明哪几个字段是被输出的

    * 6.查询当前网站数据库的名称

      * 在上一步的URL中,把有出场的数字替换成database()

    * 7.查询当前数据库中所有的表名

      * 在上一步的URL中,把有出场的数字替换成group_concat(table_name) ,在URL的最后加上 from information_schema.tables where table_schema = '当前数据库名'

    * 8.查询表中字段名

      * 在上一步的URL中,把有出场的数字替换成group_concat(column_name) ,在URL的最后加上 from information_schema.columns where table_name = '表名'

    * 9.查询表中相应字段

      * 子主题 1

        * 在上一步的URL中,把有出场的数字替换成要查询的字段名 ,在URL的最后加上 from 表名

    * 10.查询出的内容有md5加密,使用md5密文查询工具进行查询

  *

    #### SQLmap

    * 1. sqlmap -u '存在漏洞的页面URL' --dbs

      * 查询所有数据库名

    * 2. sqlmap -u '存在漏洞的页面URL' -D 数据库名 --tables

      * 查询某个数据库下的所有表名

    * 3. sqlmap -u '存在漏洞的页面URL' -D 数据库名 -T表名 --columns

      * 查询表中的所有列名

    * 4. sqlmap -u '存在漏洞的页面URL' -D 数据库名 -T表名 -C字段名 --dump

      * 查询表中对应字段的内容

*

  ### 盲注

  *

    #### 手工盲注

    * 1.寻找存在SQL注入漏洞的页面

      * 可以向系统后台提交信息的页面

      * 寻找URL中以?的方式向服务器传递信息的页面

    * 2.测试该页面是否存在SQL注入漏洞

      * 在URL传递的参数后加上单引号

        * 返回页面报错,则说明存在SQL注入漏洞

        * 不报错,则说明网站有防御措施

    * 3.猜解数据库名的长度

      * 在URL后加上'and length(database())=1',如果返回结果为假,说明数据库名的长度不止一位;继续增加猜解的数字,知道返回结果为真为止,此时的数字就是数据库名的长度

    * 4.猜借数据库名的第一个字符

      * 在URL后分别加上'and ascii(substr(database(),1,1))\>97#,和 'and ascii(substr(database(),1,1))\<122#,如果返回结果都为真,则说明第一个字符是小写字母

      * 继续增加数字,直到返回结果为假,说明猜借的数字asccii码对应的字母就是数据库名的第一个字符

    * 5.按照上一步的方法继续猜解数据库名的剩余字符

    * 6.猜解数据库中包含的数据表的数量

      * 在URL后加上'and (select count (table_name) from information_schema.tables where table where table_schema='dvwa' ) =1#

      * 若返回结果为假,则继续增大数字;若为真,则猜解正确

    * 7.在URL后加上'and length((select table_name form information_schema.tables where table_schema=database() limit0,1))=1# 若返回结果为missing,则继续增大数字直到返回exist,此时就是该表名的长度

    * 8.按照猜借数据库名同样的方法猜解表名的每个字符内容

    * 9.按照上述方法猜解表中字段名

    * 10.按照上述方法猜解数据表中的数据内容

*

  ### 常见的SQL注入防范方法

  * 1.对用户输入和提交的内容进行安全检查和过滤

    * 单引号\\双引号

    * 括号

    * and、or、union、order by

  * 2.在PHP中使用PDO技术
相关推荐
孤寂大仙v2 小时前
【Linux笔记】——进程信号的产生
linux·服务器·笔记
愚戏师2 小时前
Linux复习笔记(三) 网络服务配置(web)
linux·运维·笔记
scdifsn3 小时前
动手学深度学习12.4.硬件-笔记&练习(PyTorch)
pytorch·笔记·深度学习·缓存·内存·硬盘·深度学习硬件
北温凉3 小时前
【学习笔记】机器学习(Machine Learning) | 第六章(2)| 过拟合问题
笔记·机器学习
zm4 小时前
网络编程epoll和udp
服务器·网络·数据库
张一不吃豆芽4 小时前
TCPIP详解 卷1协议 八 ICMPv4和ICMPv6 Internet控制报文协议
网络·网络协议·tcp/ip
lwewan4 小时前
26考研——中央处理器_异常和中断机制(5)
笔记·考研
是垚不是土4 小时前
探秘高可用负载均衡集群:企业网络架构的稳固基石
运维·服务器·网络·云原生·容器·架构·负载均衡
第十六年盛夏.4 小时前
【网络安全】SQL注入
sql·web安全·网络安全
向哆哆5 小时前
Netty在Java网络编程中的应用:实现高性能的异步通信
java·网络·php