web学习笔记

基础知识篇

域名信息介绍
  • 域名:是由一串用点分隔的名字组成的Internet上某一台计算机或者计算机组的名称,用于在数据传输时标志计算机的电子方位
  • whois信息:简单理解就是域名的具体信息
    • 不同域名后缀的whois信息需要到不同的whois数据库查询
    • 每个域名或IP的whois信息有对应的管理机构保存
  • ICP备案查询
子域名信息收集
  • 顶级域名: .com .net .org .cn
  • 子域名:顶级域名加前缀的都是该顶级域名的子域名
  • 在主域防护措施严密的情况下可以先攻下子域名,再靠近主域
  • 子域名挖掘
    • 挖掘工具:Maltego CE wydomin (多种工具组合使用)
    • 搜索引擎挖掘(?)
    • 第三方网站查询:站长之家
    • 查看证书公开日志:https://crt.sh http://censys.io/ https://www.yunsee.cn/
    • 其他途径:https://phpinfo.me/domain (子域名爆破网站)
WEB站点信息收集
  • CMS:内容管理系统

  • 常见CMS:dedecms Discuz Phpcms

  • CMS识别工具

    • 在线工具:http://whatweb.bugscaner.com/
    • 本地工具:whatweb 御剑WEB指纹识别工程序 大禹CMS识别程序
  • 针对CMS漏洞查询

  • 敏感目录信息探测

Git信息泄露
  • Git是一个开源的分布式版本控制系统,可以有效,高度地处理从很小到非常大的项目版本管理,官网:https://git-scm.com/

  • Git信息泄露原理:

    • 通过泄露的.git文件夹下的文件,还原重建工程源代码
    • 解析.git/index文件,找到工程中所有的(文件名,文件sha1)
    • .git/objects文件夹下下载对应的文件
    • zlib解压文件,按原始的目录结构写入源代码
      (危害:渗透测试人员、攻击者,可以进一步代码审计,挖掘:文件上传,sql注入等安全漏洞)
    • 参考文章
  • Git实验环境搭建

    • 参考文章
  • Git信息泄露利用

    • GitHack是一个.git泄露利用脚本,通过泄露的.git文件夹下的文件,还原重建工程源代码
    • 脚本工作原理及https://www.cnblogs.com/clown-b/p/13206293.html

SQL注入篇

sql注入原理
  • 参考文章

  • 语言分类:解释型语言和编译型语言

  • 原理:SQL注入是通过将恶意的SQL查询或添加语句插入到应用的输入参数中,再在后台SQL服务器上解析执行进行的攻击

  • Sqlmap的基本使用

    • 常用操作命令参考
Mysql注入有关知识点
  • 为了方便管理,在Mysql5.0以上的版本中,默认了information_schema数据库,用来存储数据库元信息,其中具有schemata(数据库名)、table(表名)、columns(列名或字段名)等表

    • 此图帮助理解

    web学习笔记_第1张图片

    • 在schemata表中,schema_name用来存储数据库名,在table表中table_schem和table_name分别用来存储数据库名和表名,在columns表中,table_schema表示数据库名、table_name表示表名、column_name表示字段名
  • navicat for mysql是一款数据库可视化工具,可以用该工具查看上述内容

    • 查看information_schema数据库

      web学习笔记_第2张图片

    • 查看表,找到schemata表,可以看到schema_name用来存储数据库名,还可以找到table表、columns表

      web学习笔记_第3张图片

  • 可以看书《sql必知必会》了解sql语句,最少学会使用sql语句进行增删改查,学会之后可以在navicat for mysql中打开mysql命令行对数据库进行操作

    • web学习笔记_第4张图片
  • mysql中常用聚合函数:

    • user() 查看mysql登入用户名
    • database() 查看当前使用mysql数据库名
    • version() 查看当前mysql版本
  • mysql当中的一些常用注释符表达式:#注释内容 --空格注释内容 (避免空格被浏览器过滤,可以用%20代替) /*注释内容*/ ,其中内联注释 /* ! 注释内容 */,只有mysql数据库可以识别,常用来绕过WAF,例如: select * from articles where id=id,使用内联注释注入 select * from articles where id=-1/* ! union */ /* ! select */ 1,2,3,4,其中 后面的内容会被执行

  • sqli-labs安装

    • phpStudy:一个php调试环境的程序集成包
    • 安装在www目录
    • 打开sql-connections/db-creds.inc 修改默认数据库连接密码
    • 原版sqli-labs只兼容php5版本,github上已经有人放改进代码了
  • sqlmap安装(kali自带)

    • 要Python2的环境
    • 安装教程
sqli-labs通关
  • sql注入分类:(参考文章)

    • 根据注入位置数据类型不同可分为:数字型 字符型
    • 根据提交方式不同可分为:GET注入 POST注入 COOKIE注入 HTTP注入
    • 根据获取方式不同可分为:
      • (1)基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
      • (2)基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
      • (3)基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
  • GET基于报错的sql注入利用

    • sqli/less1- 4
      • 使用 order by 判断字段数
      • 使用基于报错的 union select 联合查询获取表名
      • 使用基于报错的 union select 联合查询获取字段名
      • 使用基于报错的 union select 联合查询获取字段值
    • 使用sqlmap进行探测
  • 盲注

    • 盲注是诸如攻击的一种,向数据库发送true或false这样的问题,并根据应用程序返回的信息判断结果
    • 基于时间的盲注sqli/less9 -10
    • 基于布尔的盲注sqli/less8
  • mysql注入(未解决)

    • mysql注入读文件

      • 前提

        • 用户权限够高

        • secure_file_priv不为NULL

          打开MaSQL目录下的my.ini文件,注意将secure_file_priv放在引擎之下

          web学习笔记_第5张图片

          重启MySQL,使用show VARIABLES like '%secure%';查看是否设置成功

          web学习笔记_第6张图片

  • POST基于错误的sql注入

    • GET注入点和POST注入点区别:注入点位置发生改变,GET注入可以在浏览器中直接进行查看与修改,POST需要借助相应插件或者工具

    • 基于错误的的单引号注入sqli/less11

      web学习笔记_第7张图片

      • 打开bp抓包,可以看到提交的数据

        web学习笔记_第8张图片

        使用repeat模块重复测试,输入admin,可以看到报错信息如图所示

        web学习笔记_第9张图片

      • 据此可以推断SQL语句应该为 select username passwd from users where username='xxx\ ' and passwd='xxx';,加了斜杠单引号被转义成字符串的一部分,前面的单引号只能与后面passwd的单引号配对,故会发生报错;那么可以先闭合passwd的单引号,注释掉后面的内容以及单引号,(万能密码)可以看到登录成功

        web学习笔记_第10张图片

    • 基于错误的的双引号注入sqli/less12

      • 查看源码,可以看到用户名和密码都由双引号闭合,还使用了括号

        image-20210831122006674

      • 可以使用与上一题类似的方法构造对应的万能密码进行登录

        web学习笔记_第11张图片

    • sqlmap测试

你可能感兴趣的:(web安全)