Web漏洞综合

本文最后更新于:2 年前

前段时间学业繁忙,没有时间整理笔记。正好中秋放假,我就在这里把上周所学的知识归纳总结一下。由于笔记中提到的几种攻击方法如今在红队实战中很少用到,所以对于以下方法只需了解即可,但是安服岗的面试中时常会问到这些。

XSS

XSS,即“跨站脚本攻击”(Cross Site Scripting),为了不和“层叠样式表”(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击。

XSS分为以下三种类型:存储型,反射型和DOM型。

存储型XSS:存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie 反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型XSS大多数是用来盗取用户的Cookie信息。 DOM型XSS:不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Object Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。

命令执行(RCE)

命令执行漏洞是指服务器没有对执行的命令进行过滤,用户可以随意执行系统命令,命令执行漏洞属于高危漏洞之一。

如PHP的命令执行漏洞主要是基于一些函数的参数过滤不足导致,可以执行命令的函数有system( )exec( )shell_exec( )passthru( )pcntl_execl( )popen( )proc_open( )等。当攻击者可以控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击。PHP执行命令是继承WebServer用户的权限,这个用户一般都有权限向Web目录写文件,可见该漏洞的危害性相当大。

例如案例中的webug靶场,就是当PHP版本为5.2.17或5.4.45时存在命令执行漏洞。我们只需要在登录页面抓包,在http请求头中加入Accept-Encoding:gzip,deflateAccept-Charset:c3lzdGVtKCdscycpOw== //这里c3lzdGVtKCdscycpOw==是system('ls');的base64编码,即可在响应包中看到相应的结果。或者当网站框架是thinkPHP时,可以利用exp实施攻击。

逻辑漏洞

权限类有以下三种:

1.水平越权:普通用户/管理员能访问其他普通用户/管理员才能够访问的系统信息或者系统功能。

2.垂直越权:普通用户能够访问管理员甚至超级管理员才能够访问的系统信息或者系统功能。

3.未授权访问:游客能够访问普通用户甚至超级管理员才能访问的系统信息或者系统功能。

其它的有支付金额修改、整数溢出、密码找回、验证码爆破等,这里就不再细说了。

CSRF

CSRF(Cross Site Request Forgery, 跨站请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

由于实战中条件较为苛刻(cookie未失效且知道相应参数),故现在很少使用。具体实施方法是:在本地编写一个伪造的页面,页面后端传递的参数和目标站点的相同,通过社工的方法引诱管理员点击相应按钮提交已经赋值的参数来新建一个管理员用户,再结合提权等手段拿到webshell。

SSRF

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。

很多Web应用都提供了从其他服务器上获取数据的功能。使用用户指定的URL,Web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理攻击远程和本地服务器。

服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。大部分的web服务器架构中,web服务器自身都可以访问互联网和服务器所在的内网。

那SSRF可以做什么呢?

  • 可以对外网服务器所在的内网、本地进行端口扫描,获取一些服务的banner信息 。
  • 攻击运行在内网或者本地的应用程序。
  • 对内网web应用进行指纹识别,通过访问默认文件实现 。
    攻击内外网的web应用。sql注入、strut2、redis等。
    利用file协议读取本地文件等。

反序列化

序列化和反序列化存在于Java和PHP中,一般使用exp进行攻击,或者构造恶意的类。很多中间件都存在反序列化漏洞,例如fastjson、strut2、shiro、weblogic等。关于其中的原理,我将在以后的Java安全部分仔细探究。

常问面试题

1.SSRF过滤了127.0.0.1,怎么绕过?

localhost

十六进制编码

@(例如http://example.com@127.0.0.1

短链接

句号代替点

DNS解析

各种协议(gopher、sftp、gopher等等)

2.PHP 代码执行的危险函数和PHP 命令执行函数有哪些?

PHP 代码执行的危险函数:

1
2
3
4
5
call_user_func()、 

call_user_func_array()、create_function()、

array_map()

PHP 命令执行函数:

1
2
3
system()、shell_exec()、 

passthru()、exec()、popen()、proc_open()、putenv()

3.fastjson漏洞原理

在请求包里面中发送恶意的json格式payload,漏洞在处理json对象的时候,没有对@type字段进行过滤,从而导致攻击者可以传入恶意的TemplatesImpl类,而这个类有一个字段就是_bytecodes,有部分函数会根据这个_bytecodes生成java实例,这就达到fastjson通过字段传入一个类,再通过这个类被生成时执行构造函数。

4.shiro反序列化漏洞原理?怎么发现?

shiro反序列化主要是Apache shiro提供了一个remember的一个功能,用户登录成功后会生成经过加密并编码的cookie,保存在浏览器中方便用户的日常使用,而服务器对cookie的处理流程就是先获取浏览器上保存的cookie,然后将其bs64解码,再进行AES解密,再将其反序列化进行校验,而漏洞就是出现在这里,我们都知道AES它是一个硬编码,他是有默认密钥的,如果程序员没有去修改或者过于简单,那我们就可以进行cookie重构,先构造我们的恶意代码,然后将恶意代码进行序列化,然后AES加密(密钥我们已经爆破出来了),再进行bs64编码,形成我们新的cookie,而服务器在处理时就会按照刚才的处理流程,就会在服务端触发我们构造的恶意代码。

登陆失败时候会返回rememberMe=deleteMe字段或者使用shiroScan被动扫描去发现。

5.shiro不出网怎么利用?

1.定位Web目录写入文件

2.构造回显

3.内存马

4.时间延迟获取Web路径写入webshell

6.XSS,CSRF,SSRF三种漏洞的区别

XSS:XSS是服务器对用户输入的数据没有进行足够的过滤,导致客户端浏览器在渲染服务器返回的html页面时,出现了预期值之外的 脚本语句被执行。

CSRF: CSRF是服务器端没有对用户提交的数据进行随机值校验,且对http请求包内的refer字段校验不严,导致攻击者可以 利用用户的Cookie信息伪造用户请求发送至服务器。

SSRF:SSRF是服务器对 用户提供的可控URL过于信任,没有对攻击者提供的URL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或其他服务器

总结

Web安全top10漏洞的学习就告一段落了,下周将进行提权部分的学习,敬请期待!


Web漏洞综合
https://rookieterry.github.io/2021/10/13/Web漏洞综合/
作者
HackerTerry
发布于
星期三, 十月 13日 2021, 5:59 下午
许可协议