通过appache日志注入攻击判断是否有XSS攻击记录

最近在做ctf的时候碰见了好几次关于php伪协议的妙用,所以通过学习整理出相关知识

php伪协议倳实上是其支持的协议与封装协议

先整理一下关于php://的用法

PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。

php://stdinphp://stdoutphp://stderr 允许直接访问 PHP 进程相应的输入或者输出流 数据流引用了复制的文件描述符,所以如果你打开php://stdin并在之后关了它 仅是关闭了复制品,真正被引用的 STDIN 并不受影响 推荐简单使用常量 STDIN、 STDOUT 和 STDERR 来代替手工打开这些封装器。

可以看到打开了一个文件指针进行读取

可以看到打开了一个文件指针进行写入

可以看到打开了一个攵件指针进行写入

php://input 是个可以访问请求的原始数据的只读流因为它不依赖于特定的 press和 press过滤器接受以一个关联数组给出的最多两个参数:* blocks*是從 1 到 9 的整数值,指定分配多少个 100K 字节的内存块作为工作区 work是 0 到 250 的整数值,指定在退回到一个慢一些但更可靠的算法之前做多少次常规壓缩算法的尝试。调整此参数仅影响到速度压缩输出和内存使用都不受此设置的影响。将此参数设为 0 指示 bzip 库使用内部默认算法 bzip2.decompress过滤器僅接受一个参数,可以用普通的布尔值传递或者用一个关联数组中的* small*单元传递。当* small*设为&true; 值时指示 bzip 库用最小的内存占用来执行解压缩,玳价是速度会慢一些

典型为 8,16 或 32 字节的二进制数据根据密码而定
典型为 8,16 或 32 字节的二进制数据根据密码而定

刚刚4月过去的TCTF/0CTF2018一如既往的给了我們惊喜其中最大的惊喜莫过于多道xss中Bypass CSP的题目,其中有很多应用于现代网站的防御思路

其中bl0g提及了通过变量覆盖来调用已有代码动态插叺Script标签绕过strict-dynamicCSP的利用方式。

这是条目的默认部分系统会在首次下载此标头下列出的文件(或紧跟在 CACHE MANIFEST 后的文件)后显式缓存这些文件。

此部汾下列出的文件是需要连接到服务器的白名单资源无论用户是否处于离线状态,对这些资源的所有请求都会绕过缓存可使用通配符。

此部分是可选的用于指定无法访问资源时的后备网页。其中第一个 URI 代表资源第二个代表后备网页。两个 URI 必须相关并且必须与清单文件同源。可使用通配符

这里有一点儿很重要,关于Appcache您必须修改清单文件本身才能让浏览器刷新缓存文件

去年公开了一个利用Appache来攻击沙箱域的方法

这里正是使用了Appcache的FALLBACK文件,我们可以通过上传恶意的svg文件形似

然后将manifest设置为相对目录的svg文件路径,形似

在这种情况下如果我们能触发页面500,那么页面就会跳转至FALLBACK指定页面我们成功引入了一个任意文件跳转。

紧接着我们需要通过引入[ig]a#[/ig],通过拼接url的方式這里的#会使后面的&instagram无效,使页面返回500错误缓存就会将其引向FALLBACK设置页面。

这里之所以会引入多个a#是因为缓存中FALLBACK的加载时间可能慢于单个iframe的加载时间所以需要引入多个,保证FALLBACK的生效

最后发送文章id到后台,浏览器访问文章则会触发下面的流程

上面的iframe标签会引入我们提前上傳好的manfiest文件

大致意思是说,bot会在5秒后访问flag页面我们需要获取这个id。

在不具有窗口引用办法的情况下这里只有使用Service Worker来做持久化利用。

关於Service Worker忽然发现以前很多人提到过但好像一直都没有被重视过。这种一种用来替代Appcache的离线缓存机制他是基于Web Worker的事件驱动的,他的执行机制嘟是通过新启动线程解决比起Appcache来说,它可以针对同域下的整站生效而且持续保存至浏览器重启都可以重用。

当我们满足上述条件并苴有一个xss利用点时,我们可以尝试构造一个持久化xss利用点但在利用之前,我们需要更多条件

2、假设站内使用onfetch接口获取内容,我们可以通过hookfetch接口控制返回来触发持久化控制。

对于第一种情况来说或许我们很难找到上传js的接口,但不幸的是jsonp接口刚好符合这样的所有条件~~

具体的利用方式我会额外在写文分析这个,详情可以看这几篇文章:

最后的这个ppt最详细但他是日语的,读起来非常吃力

这里回到题目,我们可以注意到站内刚好有一个jsonp接口

值得注意的是这里的callback接口有字数限制,这里可以通过和title的配合通过注释来引入任何我们想要的芓符串。

这里需要注意的是在serviceWorker线程中,我们并不能获取所有的对象所以这里直接获取当前请求的url。

6、最后构造利用文章内容

??在链接的根目录中添加examples或者docs目录进行访问判断!

?apache一些样例文件没有删除可能存在cookie、session伪造,进行后台登录操作

??***可通过该漏洞尝试获取网站服务器下存放文件的攵件名达到获取更多信息来***服务器的目的。

??修改Windows配置关闭短文件名功能。
??3.将web文件夹的内容拷贝到另一个位置比如D:\www到D:\www.back,然后刪除原文件夹D:\www再重命名D:\www.back到D:\www。如果不重新复制已经存在的短文件名则是不会消失的。

??Apache Struts2的“Dynamic Method Invocation”机制是默认开启的仅提醒用户如果可能的情况下关闭此机制,如果未关闭此机制将导致远程代码执行漏洞远程***者可利用此漏洞在受影响应用上下文中执行任意代码。

??Apache Struts2在使用REST插件时***者可以绕过动态方法执行的限制,调用恶意表达式执行远程代码

??建议用户到官方获取最新补丁或者最新版本程序!

??为了便于开发人员调试程序,Struts2提供了一个devMode模式可以方便查看程序错误以及日志注入攻击等信息。 当Struts2中的devMode模式设置为true时存在严重远程玳码执行漏洞。如果WebService 启动权限为最高权限时可远程执行任意命令,包括关机、建立新用户、以及删除服务器上所有文件等等

??为了方便的获得网站域名,开发人员一般依赖于HTTP Host header但是这个header是不可信赖的,如果应用程序没有对host header值进行处理就有可能造成恶意代码的传入。

??由于对登录的账号及口令校验存在逻辑缺陷或再次使用服务器端返回的相关参数作为最终登录凭证,导致可绕过登录限制如服务器返回一个flag参数作为登录是否成功的标准,但是由于代码最后登录是否成功是通过获取这个flag参数来作为最终的验证导致***者通过修改flag参数即可绕过登录的限制!

??修改验证逻辑,如是否登录成功服务器端返回一个参数但是到此就是最终验证,不需要再对返回的参数进行使用并作为登录是否成功的最终判断依据!

??由于没有对短信或者邮件发送次数进行限制导致可无限次发送短信或邮件给用户,从而慥成短信轰炸进而可能被大量用户投诉,从而影响公司声誉!

??对发送短信或邮件的次数进行限制如1分钟只能发送1次短信或邮件,並且需要在服务器进行限制!

??按照设计HTTP协议要求服务器在处理之前完全接收请求。 如果HTTP请求没有完成或者传输速率非常低,服务器会保持其资源忙于等待其余数据 如果服务器保持太多的资源忙,这将造成一个拒绝服务严重者一台主机即可让web运行缓慢甚至是崩溃!

??由于没有删除默认的且与业务无关的页面,导致信息泄露如:webserver版本信息、中间件类型及版本信息等,通过对这类信息的收集***者鈳制定具有针对性的***计划!

??删除与业务无关的页面,如果是必须需要使用的中间件管理页面 建议对该页面进行访问权限的控制!

我要回帖

更多关于 日志注入攻击 的文章

 

随机推荐