新手指南:Bwapp之XSS–stored

XSS 全称:跨站脚本( Cross Site Scripting ),为了不和层叠样式表( Cascading Style Sheets )的缩写 CSS 混合,所以改名为 XSS;攻击者会向 web 页面( input 表单、 URL 、留言版等位置)插入恶意 JavaScript 代码,导致 管理员/用户 访问时触发,从而达到攻击者的目的。XSS 的危害:窃取管理员/用户的 cookie 非法登录,导致网站被挂马、服务器沦陷被控制等等……XSS 类型:反射型、存储型、 DOM 型0x01 代码审计1.安全等级-low(未对字符做任何处理)服务器端核心代码,数据提取及表单显示数据部分代码:

PHP - low 级别显示代码为:

关键的语句:Return mysqli_real_escape_string(

data);下列字符受影响:\x00 ,\n ,\r ,\ ,' ," ,\x1a如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。2.安全等级- medium服务器端代码:

关键语句:return addslashes($data);stringaddslashes ( string $str )本函数可在 PHP4 和 PHP5 下使用。返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NULL(NULL 字符)。默认情况下,PHP 指令为 on ,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行。不要对已经被转义过的字符串使用,因为这样会导致双层转义。遇到这种情况时可以使用函数进行检测。一个使用的例子是当你要往数据库中输入数据时。例如,将名字插入到数据库中,这就需要对其进行转义。大多数据库使用 \(反斜杠)作为转义符:,这样可以将数据放入数据库中,而不会插入额外的 \。当 PHP 指令被设置成时,意味着插入\' 时将使用 ' 进行转义。3.安全等级:high

关键语句:return htmlspecialchars($data, ENT_QUOTES,$encoding);选项为过滤单引号函数 htmlspecialchars 转换特殊字符成为 html 实体:&(和号)成为 &“ (双引号)成为 "‘ (单引号)成为 '< (小于号)成为 <>(大于号)成为 >具体细节请看:http://www.w3school.com.cn/php/func_string_htmlspecialchars.asp0x02实战解析1.low安全级别让我们来留个言:

数据库中插入的数据:

点击一下safs:

成功跳转到百度:

2.medium 安全级别:

让我们再来留个言:

数据库中插入的数据:

刷新一下,看看效果图:

3.high 安全级别:

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

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

数据接收的 getkeylog.php :

盗取数据的 victim.html 网页:

访问:

生成了一个文件:

打开:

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

5.盗取 cookie:

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

留言一下:">

刷新一下;

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

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

获取对方的地理位置:

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

Recv.php :

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

插入留言:

存入数据库:

点击 location 的效果图:

打开 geo.txt:

来看看定位结果:

0x03防御手段

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

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

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

3、其它的通用的补充性防御手段:在输出 html 时,加上的 Http Header(作用:可以防止页面被 XSS 攻击时,嵌入第三方的脚本文件等)(缺陷:IE 或低版本的浏览器可能不支持)在设置 Cookie 时,加上 HttpOnly 参数(作用:可以防止页面被 XSS 攻击时,Cookie 信息被盗取,可兼容至IE6)(缺陷:网站本身的 JS 代码也无法操作 Cookie ,而且作用有限,只能保证 Cookie 的安全)在开发 API 时,检验请求的 Referer 参数(作用:可以在一定程度上防止 CSRF 攻击)(缺陷:IE或低版本的浏览器中,Referer 参数可以被伪造0x04总结XSS 的攻击已经相当成熟,丰富的攻击技巧更是令人眼花缭乱。相比之下,针对XSS的检测和防范方法显得捉襟见肘。幸运的是,尽管很难对 XSS 攻击做出有效检测,但是如果能依照一定的方法对XSS进行防范,XSS攻击便很难造成实质性的危害(一)、Anti_XSSAnti_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 防御才是我们努力要去做的。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180114G0FIAN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券