渗透自学(三)SQL注入(一)

第十一天(web漏洞基础)

         常见:SQL注入文件上传、XSS跨站、文件包含反序列化代码执行逻辑安全未授权访问

    其他:CSRF、SSRF、目录遍历、文件读取、文件下载、命令执行、XXE安全等…

    高危(危害权限):SQL注入文件上传文件包含代码执行未授权访问命令执行

    中危:反序列化、逻辑安全

    低危(低敏感信息泄露):

    CTF重点:SQL注入反序列化(常)代码执行

    SRC重点:全部涉及,但更多围绕 逻辑安全

    红蓝对抗重点:SQL注入文件上传文件包含代码执行未授权访问命令执行

SQL注入

        union 注入恶意SQL语句

目录遍历

        目录遍历(路径遍历)是由于web服务器或者web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器的安全限制,访问任意的文件(可以使web根目录以外的文件),甚至执行系统命令。

        \..可回到上一个文件夹,例如当前路径为a\b\c  我要获取a\b\d 则可a\b\c\..\d

        可通过目录扫描工具得知目录结构(包含源码结构、数据库配置文件位置等)

    文件读取

        只能读取文件,不能读取目录,目录遍历可以读取目录

    文件上传

        上传后门文件

    文件下载

        通过其提供的下载功能,配合了解其目录结构后,可以获取网站的源码

  1. 初级:
    1. 数据库类型、
      1. Access
      2. Mysql
      3. Mssql
      4. Oracle
      5. Postsql
      6. SQLite
      7. Mongodb
      8. ……
    2. 提交方法、
      1. GET
      2. POST
      3. COOKIE
      4. REQUEST
      5. HTTP头
      6. ……
    3. 数据类型、
      1. 数字型
      2. 字符型
      3. 搜索型
    4. 查询方式
      1. Select
      2. Insert
      3. Delete
      4. Update
      5. Order by
  2. 高级:
    1. 回显/盲注、
      1. 回显注入
      2. 无回显注入
      3. 延时盲注
      4. 布尔盲注
    2. 注入拓展、
      1. 加解密注入
      2. JSON注入
      3. LADP注入
      4. DNSlog注入
      5. 二次注入
      6. 堆叠查询
      7. ……
    3. WAF绕过、
      1. 更改提交方法
      2. 大小写混合
      3. 解密编码类
      4. 注释符混用
      5. 等价函数替换
      6. 特殊符号混用
      7. 借助数据库特性
      8. HTTP参数污染
      9. 垃圾数据溢出
      10. ……
    4. 防御方案
      1. 代码加载过滤
      2. WAF产品部署
      3. ……

       MYSQL注入

  1. 信息收集(为渗透思路铺垫)
    1. 操作系统(确定注入时的大小写问题)
    2. 数据库名
    3. 数据库用户
    4. 数据库版本
    5. 其他(网站路径等)
  2. 数据注入
    1. 低版本(5.0以下)—暴力查询或结合读取查询
    2. 高版本(5.0以上含5.0)—information_schema有据查询
  3. 高权限注入(与数据库用户权限有关)
    1. 常规查询 和 跨库查询(利用注入进行跨数据库查询)
    2. 文件读写和 跨库查询(利用注入进行文件读写/getshell)
      1. 存在魔术引导(编码或宽字节绕过)
      2. 不存在魔术引导
  4. 相关防注入(根据实际情况进行绕过研究)
    1. 自带防御:魔术引号
    2. 内置函数:int等
    3. 自定义敏感关键字:select、union等
    4. WAF防护软件:安全狗、宝塔等

第十二天(MYSQL简要注入)

       1可控变量并2带入数据库查询,3变量不存在合理或适当过滤

       www.xxx.com /?q=xx 其中是默认页面可能是index.php之类的

       若x有注入点,则注入点x后面加1 = 1 等恶意语句

       Sqlmap在url后进行测试,未必知道注入点,可能需要手工告知

      

MYSQL 知识点:

       Linux严格区分大小写,windows不区分

Information_schema会存储所有数据库名、表名、列名

数据库中“.”代表下一级,例如a数据库中b表 a.b

       Information_schema.tables            所有表

       Information_schema.columns        所有列

       Table_schema                                 数据库名

       Table_name                                   表名

       Columns_name                              列名

       group_concat作用:聚合在一起,一并返回,不会变成一条条记录返回

       注释符 --+(减减加)#

       limit 用法下标从0开始

              limit 0,1 表示选取从第0行(即第一行)开始的1条数据

       substr的下标从1开始

注入点判断:

              传统方法:

                     And 1 = 1 页面正常

                     And 1 = 2 页面错误

                     则可能存在注入点

              新方法:

                      判断是否能带入数据库中查询,即任意对可变变量添加内容,若返回错误页面,则说明可带入数据库中查询,存在注入;若返回正常页面或者返回404又或者跳转其他页面,则可能存在过滤

低版本注入过程(猜):

       字典爆破

高版本注入过程:

  1. 猜解列名数量(字段个数)order by 【数字】 当数字为n+1返回错误时说明有n个字段数
    1. ?x=1 order by n+1
  2. 报错猜解:设注入点x
    1. X=1 Union Select 1,2..n     正常
    2. X=-1 Union Select 1,2..n    不正常
    3. 则存在注入
  3. 信息收集
    1. 数据库版本:version()
    2. 数据库名字:database()
    3. 数据库用户:user()
    4. 操作系统:@@version_compile_os

                     X=-1 Union Select 1,version(),database(),user(),@@version_compile_os..n  #前提是能写的下,不然就一个一个替换

  1. 查询所有数据库名(获取数据库名,跨库)(需要root用户才可以查

Union Select 1,group_concat(schema_name),3 from information_schema.schemata

  1. 查询目标数据库下的表名信息(获取表名)

Union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=’【数据库名】’

  1. 查询目标数据库的目标表下的列名信息(获取列名)

Uniont select 1,group_concat(column_name),3 from information_schema.columns where table_name=’【表名】’ where table_schema=’【数据库名】’

  1. 获取列数据

Union Select * from 【数据库名】.【表名】

当显示的内容有限时,设有xy两个列,select x,y from 【数据库名】.【表名】

  1. 猜解多个数据

Limit x,1 变动猜解  限制显示条目数量

第十三天(MYSQL注入)

       文件读写操作

              文件读取:可读取敏感配置信息,例如数据库配置文件

              文件写入:可直接写入一句话木马直接getshell

路径是斜杠‘、’,反斜杠可能会遇到\n识别为换行,否则反斜杠要转义双写‘\\’

Load_file():读取函数

                     Select load_file(‘c:/xxx/xxx.txt’)

              Into outfile 或into dumpfile:导出函数

                     Select ‘x’into outfile ‘c:/xxx/xxx/txt’

       路径获取常见方法:

  1. 报错显示
  2. 遗留文件
    1. phpinfo.php—script_name
  3. 漏洞报错
    1. xxx爆漏洞
  4. 平台配置文件
  5. 爆破
  6. ……

魔术引号magic_quotes_gpc=On/Off

       该属性存在于php.ini文件中

当为On时,输入数据中含单引号(’)、双引号(”)、反斜杠(\)和NULL字符时,都会被加上反斜杠,所以前面的文件读取操作将会失效,读写路径受影响,路径被添加了非常多的反斜杠

       可以通过将路径‘d:\\xx\\xx\\x.txt’ 转换成hex16进制,并替换,即可正常运行

防注入

       内置函数

              例如php中的is_int()

              或者自己写一个过滤函数(select、union)

                     关键字过滤、关键字大小写过滤

你可能感兴趣的:(sql,数据库,安全)