如何解析 web 应用程序

  • A+
所属分类:安全文章

每日学习打卡计划是信安之路知识星球开启的每天读书一小时,挑战打卡一百天的活动,能够坚持学习打卡 100 天的同学可以获得信安之路提供的百分成就徽章和证书,学习书籍可以自选,主要目的是养成每日读书学习的好习惯,并将自己的学习心得分享出来供大家学习,下图为最新打卡内容以及上周星球主题集赞榜单 TOP5,目前每周集赞第一名可获得腾讯视频 VIP 月卡一张,以滋鼓励:

如何解析 web 应用程序

打卡一 P109-136

这部分内容主要解决的问题是,我们如何获取 web 应用的站点地图,也就是网站的所有页面和功能,我们可以对其测试的攻击面,主要分几种:主动式爬虫、被动式抓取、隐藏页面获取、页面参数扩展。

主动式爬虫:这个很好理解,就是爬虫,通过页面之间的超链接关联来一层一层获取页面内容,然后从内容中匹配页面链接,逐步将网站的所有链接完整爬取,对于从来没有在其他网页设置超链接的页面是无法通过这种方式获取到的,工具的话,可以用自实现的爬虫工具,用 python 写的居多,如今的网站好多架构前端都是 nodejs 框架,数据的获取通过普通的爬虫已经无法实现,可以借助无头浏览器来对页面进行解析,从而获取数据。

被动式抓取:这个原理就是开启一个网页代理,然后在浏览器设置通过代理访问,这样我们在使用浏览器访问网站,点击网站的各个按钮时,流量通过代理,代理就会将所有请求链接和数据都保留下来,这种方式的好处就是可以将动态的页面和数据保留下来,弥补主动爬虫获取数据难度大的问题。

隐藏页面获取:对于隐藏的页面,通过前两种方式都无法获取,那么就需要我们进行一些暴力枚举,设置一些目录和文件的字典,通过不断尝试访问,根据返回结果,比如 404 表示页面不存在,200 表示页面存在,然后获取因此的目录和页面,网站为了限制搜索引擎的数据爬取,会使用 robots.txt 来制定规则,这也是我们获取因此目录和页面的方式,还有就是搜索引擎的历史归档记录,由于网站的变化,旧的页面也许未进行删除,但是已不再使用,通过爬虫和暴力枚举都无法获取的情况下,可以借助搜索引擎,查询历史归档,这里涉及一些搜索引擎的语法,需要自行查阅。

页面参数获取:有了功能页面之后,我们需要跟网站进行交互,那么就需要知道不同的页面有哪些参数可以利用,我们在前期的信息收集时会抓到很多不同类型的参数提交方式和默认参数信息,有一些隐藏参数是我们在正常操作时无法获取的,那么也需要用到我们经常用的暴力枚举的方式,猜测其有哪些参数存在但是已不再使用的情况,说不定有意想不到的收获。

最后关于暴力枚举,这个在不同的场景下成功率取决于字典的质量,每个场景都有一些默认的字典,我们还可以根据已经收集到的情报,比如目录和文件的命名方式,公司的常用关键词等组合一些自定义字典,这个在实际的渗透中有很大的帮助。

打卡二 P137-140

有了攻击面之后,我们就需要对 web 的页面进行测试,因为应用的安全问题来自于用户的输入,所以所有可以输入的地方都是我们要重点关注的,这部分内容主要讲的是如何识别用户输入点。

用户可以输入和利用的地方主要包括:URL 中带的参数,也就是 GET 方式提交参数;POST 请求主体中的参数;cookie 中的字段;header 中的 referer、x-forword-for、user-agent、Host 等。

关于 URL 的类型,主要取决于开发者,已经经常说的伪静态,看上去是静态页面,其实页面的名字就是个变量,这种设置主要用 .htaccess 。

referer 的问题在于,有些应用程序通过 referer 来判断用户来源,针对不同的来源释放不同的内容,比如对于来自搜索引擎的跳转,来自合作广告商的推广等等,这是我们可以利用的点。

user-agent 的问题在于,不同 UA 可以判断用户使用的设备,为了提升用户体验,根据 UA 为用户提供不同的展示页面,如果展示页面属于不同的开发者,不同的页面,虽然 PC 端展示页不存在安全问题,那么移动端展示页就可能存在问题。

x-forword-for 对于有负载均衡的网站,通常会记录用户的外网 IP,对于来源 IP 如果设置了特权,那我们就有利用的可能,比如反爬虫会对搜索引擎的 IP 加白,我们可以设置这个参数为搜索引擎的 IP,那么就实现了绕过反爬的可能

最后一个带外通道,理解起来比较费劲,说的应该是应用程序会获取一些数据,然后攻击者控制着这些数据,这些数据在被应用程序获取并处理时触发安全问题,可以利用的应用程序包括:web 邮箱、自动化爬虫并展示的应用、获取网络流量并展示的系统。

打卡三 P140-145

这部分内容主要讲如何识别 web 服务器的类型和版本,主要包括:服务器消息头、URL 的文件扩展名、服务器报错信息、目录指纹、会话令牌、第三方组件,识别服务器的版本能够让我们在未来的测试中更有针对性,缩小测试范围,提升测试效率,也存在以前比较老版本的服务器组件存在一些 Nday,如果遇到对应版本有漏洞的可以直接进行利用尝试。

不同的服务器在请求的响应包中有所提示,但是有些服务器管理员为了迷惑攻击者可以将默认的响应信息进行自定义或者伪造,所以在服务器类型识别中要结合多种方式来进行确认,不能依靠单一方式。

通过 URL 中的文件扩展也能很好的判断,比如 php 后缀的,通常是 php + apache 或者 PHP + nginx,aspx 后缀的通常是 iis + asp.net 等。

通过各种尝试使服务器报错之后的错误页面能够看到详细的服务器版本信息,比如访问不存在的目录或文件报错,参数中输入单引号报错等。

有些服务器会默认带一些文件或者目录,通过目录测试也可以识别部分 web 服务器的信息。

开发者在开发的时候经常会使用第三方组件来提升开发效率,结合第三方组件的指纹来对网站进行探测能够很好的识别网站使用的框架和 web 服务器的类型。

不同的服务器在 cookie 中默认使用的 session ID 的名称有所不同,比如:PHP--PHPSESSID、IIS--ASPSESSIONID、Java--JSESSIONID 等。

关于这块的技术,存在大量自动化工具,一般 web 自动化扫描器都会存在这个功能,见的多了之后,基本上很快就可以识别出来,一眼看出使用什么样的服务器,网站架构是什么样子。

打卡四 P146-156

这是第四章最后的内容,其中包括如何识别 url ,查看数据包中哪些是我们可以利用的参数,根据经验大概推测背后的功能逻辑,做那些操作等等。

这部分内容对后续的章节关于漏洞的类型做了个总结,本书涉及的安全漏洞包括:

客户端操作确认——服务器对客户端携带数据没有做安全检查

数据库交互——可能存在 SQL 注入漏洞

文件上传与下载——路径遍历漏洞、存储型跨站漏洞

对用户输入的数据进行展示——跨站漏洞

页面动态重定向——重定向漏洞与消息头注入攻击

社交网络功能——用户名枚举、存储型跨站漏洞

登录——用户名枚举、弱口令、撞库、暴力破解

多阶段登录——登录逻辑漏洞

会话状态——预测令牌、令牌泄漏

访问控制——水平越权、垂直越权、未授权访问

用户管理——权限提升

明文传输——会话劫持、网络嗅探

站外链接——Referer 消息头中查询字符串参数泄漏

错误提示——信息泄漏

电子邮件交互——邮件替换

执行本地代码——缓冲区溢出、命令注入

使用第三方应用程序组件——已知漏洞 Nday

Web 服务器软件——服务器 Nday、配置错误

以上内容会在后续的书籍内容中呈现,前面所需的基础还需踏实沉淀。

如何解析 web 应用程序

本文始发于微信公众号(信安之路):如何解析 web 应用程序

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: