Android 刷机

刷机常识

1.数据备份
首先刷机会清除手机能所有的用户数据,因此做好数据备份十分重要。

  • 手机的云服务功能,像是小米、华为、苹果等等都有该功能,这种备份方式需要一个云账号,将手机数据存储在云端,这样只要登录账号就可以看到备份的数据。
  • 电脑备份,把手机的数据备份在电脑里,这样相对比较安全也比较具私密性。
  • U盘备份,OTG U盘是一种可以直接连接手机的U盘,可以直接把手机的数据拷贝到U盘里。
    2.Root权限
    Android系统内核是基于Linux内核的(内核中保存着编译时的各种配置信息,包括全局函数和数据符号),Root是Linux内核最大的权限所有者,如同window系统中的管理员用户administrator用户。Android系统越狱一般指的就是获取Root权限。
    3.ROM包
    ROM包就好比电脑装系统时所需的安装盘,即手机的系统包。刷机就是把ROM包“刷”入到手机中,达到更新手机系统的目的。ROM包一般都是ZIP、RAR等压缩包或其他后缀的样式,依品牌和机型的不同而有所区别。
    4.OEM锁
    OEM解锁就是启用开发者选项。启用了OEM解锁之后,就可以在将手机连接到电脑,然后来在电脑上对手机进行一些操作。其权限比“USB调试”高,更加底层,OEM锁的功能包括管住BL锁,OEM锁在开发者选项中可手动打开。OEM不是BL锁,一般的机型(比如小米、华为、oppo等)打开OEM锁才可以解锁BL锁。BL锁打开之后,OEM锁即可无视了。
    5.BL锁
    BL是BootLoader的简称,指的是开机引导程序,BL锁负责在开机时加载硬件的初始化程序,并启动系统进程。在解开BL锁之前,用户是无法自由进行刷机操作和ROOT操作的更无法刷第三方ROM跟降级系统的操作。
    不同版本可能要求的Bootloader版本不一样(一般是Android版本越高要求的Bootloader版本也越高)。比如1.6版本的Bootlaoder和2.1版本的Bootloadr版本不一样,也就不能随便刷到2.1,但是如果刷的是1.6的民间ROM,那么一般是没问题的。也就是说,如果是刷相同的Android版本(比如官方1.6刷民间1.6),那么是没问题的,但是如果是要升级高版本(比如官方1.6刷民间2.1),这时候就要考虑Bootloader了。
  1. 反射型XSS
      备份的方式有很多,
  2. 存储型XSS
      存储型XSS也叫做“持久型XSS”(Persistent XSS),存储型XSS会把用户输入的数据“存储在服务器端”。这种XSS具有很强的稳定性。
  3. DOM Based XSS
      通过修改页面的DOM节点形成的XSS,被叫做DOM Based XSS。从效果上来说也是反射型XSS。(DOM:文档对象模型Document Object Model ,是一种用于HTML和xml文档的编程接口,他给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。DOM把网页和脚本以及其他的编程语言联系起来)

XSS攻击阶段

初探XSS Payload

  XSS攻击成功后,攻击者能够对用户当前浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些用以完成各种具体功能的恶意脚本,被称为“XSS Payload”。XSS Payload实际上就是Javascript脚本(还可以是Flash或其他富客户端脚本),所以任何Javascript脚本能实现的功能,XSS Payload都能做到。

常见XSS Payload

  1. cookie劫持
    一个最常见的XSS Payload,就是通过读取浏览器的cookie对象,从而发起“cookie劫持”攻击。
    cookie中一般加密保存了当前用户的登陆凭证。cookie如果丢失,往往意味着用户的用户登录凭证丢失。换句话说,攻击者可以不通过用户密码,而直接登录进用户账户。
  2. 构建get与post请求
    一个网站的应用,只需要接受HTTP协议中的GET和POST请求即可完成所有操作。对于攻击者来说,仅通过JavaScript,就可以让浏览器发起这两种请求。
  • 攻击者可以通过插入一张图片来发起一个GET请求;
  • 攻击者可以构建一个form表单,然后自动提交这个表单;
  • 攻击者可以通过XMLHttpRequest发送一个POST请求;
  • 攻击者先获取到用户ID加密的值,然后构造完整的URL,并使用XMLHttpRequest发送一个GET/POST请求。
  1. 识别用户浏览器
    在很多时候,攻击者为了获取更大的利益,往往需要精准的收集目标个人信息,如:如果知道用户使用的浏览器、操作系统信息。攻击者就有可能实施一次精准的浏览器内存攻击,最终给用户电脑植入一个木马,XSS能够帮助攻击者快速达收集信息的目的。
  • 通过XSS读取浏览器的UserAgent对象,这个对象告诉我们很多客户端信息(OS版本、浏览器版本等),但是信息并不一定准确。
  • 攻击者可以根据不同浏览器的差别以及各自实现的一些独特的功能,同一浏览器不同版本之间的细微差别,编写JavaScript脚本分辨这些浏览器。
  • 巧妙地方法(参考书籍)
  1. 识别用户安装的软件
    知道了用户使用的浏览器、操作系统以后,进一步可以识别用户安装的软件。
  • 在IE中,可以通过判断ActiveX控件的classid是否存在,来推断用户是否安装了该软件。这种方法很早就被用于“挂马攻击”--黑客通过判断用户安装的软件,选择对应的浏览器漏洞,最终达到植入木马的目的;
  • 浏览器的扩展和插件也能够被XSS Payload扫描出来,以火狐为例:firebox的插件(plugins)列表存放在一个DOM对象中,通过查询DOM可以遍历所有插件,所以直接查询“navigator.plugins”对象,就能找到所有的插件了。火狐的扩展(通过检测扩展图标)
  1. CSS History Hack
    通过CSS,发现一个用户曾经访问过的网站。
  2. 获取用户的真实IP地址
  • 通过调用Java applet的接口获取客户端的IP地址。(在XSS攻击框架“Attack API”中有一个获取本地IP地址的api / 也可利用Java获取网络信息API,此方法需要写一个Java class,嵌入到当前页面中。 / metasploit)

XSS攻击平台

  安全研究者将不同功能的XSS Payload 封装起来,成为XSS攻击平台,这些攻击平台主要目的是为了演示XSS的危害。
  Attack API 是由安全研究者pdp所主导的一个项目,他总结了很多能够直接使用XSS Payload,并归纳为API的方式。
  BeEF 演示一个完整的XSS Payload攻击过程。
  XSS-Proxy 轻量级的XSS攻击平台,有助于理解XSS的原理和危害。

终极武器:XSS Worm

XSS 形成蠕虫,隐蔽性高且危害大

调试JavaScript

  想要写好XSS Payload 就要有很好的JavaScript功底。
Firebug :基于火狐浏览器的脚本调试工具。
IE8 Developer ToolS :主要用于调试IE。
Fiddler :是一个本地代理服务器,需将浏览器设置为本地代理服务器上网。他会监控所有的浏览器请求,并有能力在浏览器请求中插入数据。(支持脚本编程)
  HttpWatch :以插件的形式内嵌在浏览器中。在目标网站是https时会特别有用但是它不能调试JavaScript,仅仅是一个针对web的'sniffer'。
  **善于利用调试工具,在编写XSS Payload与分析浏览器安全时,会事半功倍。

XSS构造技巧

  • 利用字符编码,绕过安全检查。
  • 绕过长度限制,解决逻辑错误。
  • 使用<base>标签,伪造远程服务器地址。
  • 妙用window.name,对window.name赋值没有特殊字符限制,而且window对象是浏览器的窗体,而并非document对象,因此很多时候window对象不受同源策略的限制。

变废为宝:Mission Impossible

  往往一些被认为不可能实现攻击的漏洞,随着技术的发展,都可能会被利用到攻击中。

Flash XSS

  在flash中可以嵌入actionscript脚本,actionscript是一种非常强大和灵活的脚本,而且flash XSS往往被开发者忽视,注入flash变量的XSS,因为其问题出现在编译后的flash文件中,一般的扫描工具或者代码审计工具都难以检查。

JavaScript开发框架

  • Dojo
  • YUI
  • jQuery(目前最流行的JavaScript框架)
      除了需要关注框架本身安全问题外,开发者还要提高安全意识,理解并正确的使用开发框架。

XSS的防御

  流行的浏览器都内置了一些对抗XSS的措施,比如Firefox的CSP、Noscript扩展,IE8内置的XSS filter等等,而对于网站来说,也应该寻找优秀的解决方案,保护用户不被XSS攻击。

HttpOnly

  HttpOnly实现后,浏览器将禁止页面JavaScript访问带有HttpOnly属性的cookie。(主要解决cookie劫持问题)
一个cookie的使用过程如下:

  1. 浏览器向服务器发起请求(这时没有cookie)
  2. 服务器返回时发送Set-cookie头,向客户端浏览器写入cookie。
  3. 在该cookie到期前,浏览器访问该域下所有的页面,都将发送该cookie。
  4. HttpOnly是在Set-Cookie时标记的。
      现在IT业界给关键业务添加HttpOnly Cookie已经成为一种“标准”的做法。

输入检查

  输入检查的逻辑,必须放在服务器代码中实现。目前web开发的普遍做法,是同时在客户端JavaScript和服务器端代码中实现相同的输入检查,客户端的JavaScript输入检查,虽然很容易被攻击者绕过,但可阻挡大部分误操作的正常用户,从而节约服务器资源。
  在XSS防御上,输入检查一般是检查用户输入的数据中是否包含特殊字符,如<>、'、"等如果发现特殊字符,则将这些字符过滤或者编译。比较智能的输入检查,可能还会匹配XSS的特征,比如查找用户数据中是否包含了<script>javascript等,这种输入检查的方式,可以称为“XSS filter”。xss filter对语境的理解并不完整,不能过滤掉存在恶意脚本的URL,有时也会错误的过滤掉<、/等字符。

输出检查

  一般来说,除了富文本的输出外,在变量输出到HTML页面是时,可以使用编码或转义的方式来防御XSS攻击。

安全的编码函数

  • HtmlEncode :针对HTML代码的编码方式。
  • 在PHP中,有htmlentities()和htmlspecialchars()俩个函数可以满足安全要求。
  • JavaScriptEncode,需要使用转义字符\对特殊的字符进行转义,在对抗XSS时,还要求输出的变量必须在引号内。
    等。

auto-escape

  XSS攻击主要发生在MVC架构中的view层,大部分的XSS漏洞可以在模板系统中解决。但XSS的防御需区分情况对待。

正确的防御XSS

  XSS的本质还是一种“HTML注入”,用户的数据被当成了HTML代码一部分来执行,从而混淆了原来的语义,产生了新的语义。
  如果网站使用了MVC架构,那么XSS就发生在view层(在应用拼接变量到HTML页面时产生)。所以在用户提交数据处进行输入检查的方案,其实并不是在真正发生攻击的地方做防御。
根治XSS问题,列出所有XSS可能发生的场景,一一解决

  1. 在HTML标签中输出
     所有在标签中输入的变量,如果未做任何处理,都能导致直接产生XSS.
     防御方法是对变量使用HtmlEncode
  2. 在HTML属性中输出
     所有在属性中输入的变量,如果未做任何处理,都能导致直接产生XSS.
     防御方法是对变量使用HtmlEncode
  3. <script>标签中输出
     在<script>标签中输出时,首先应该确保输出的变量在引号中,这样攻击者需要先闭合引号才能实施XSS攻击。
     防御使用JavaScriptEncode
  4. 在事件中输出
     首先应该确保输出的变量在引号中,这样攻击者需要先闭合引号才能实施XSS攻击。
     防御使用JavaScriptEncode
  5. 在CSS中输出
      多样化,一般来说,尽可能禁止用户可控制的变量在“<style>标签”“HTML的标签的style属性”以及“CSS文件”中输出,如果一定要这样推荐使用OWASP ESAPI中的encodeForCSS()函数,其原理:除了字母、数字外的所有字符都被编译成16进制形式“\uHH”。
  6. 在地址中输出
      一般来说,在URL的path(路径)或者search(参数)中输出,使用URLEncode即可。URLEncode会将字符转换为“%HH”形式,比如空格就是“%20”,“<”符号是“%3c”。
      有一种情况,就是整个URL能够被用户完全控制,这时URL的protocal和host部分是不能够使用urlencode的,否则会改变URL的语义。
      一般来说如果变量是整个URL则应该检查变量是否已HTTP开头(如果不是则自动添加),以保证不会出现位协议类的XSS攻击。在此之后,在对变量进行urlencode,即可保证不会有此类的XSS发生了。

处理富文本

  时候网站需要允许用户提交一些自定义的HTML代码,称之为“富文本”,再过滤富文本时,事件应该严格禁止·标签采取白名单,避免黑名单,尽可能的禁止用户自定义CSS与style。

防御DOM Based XSS

  DOM Based XSS:将HTML代码写入了DOM节点,最后导致了XSS的发生。
  DOM Based XSS是从JavaScript中输出页面到HTML中,而之前研究的都是针对“从服务器应用直接输出到HTML页面”的XSS漏洞,因此在DOM Based XSS防御中应添加encode编码(两次:一次encode数据,一次encodeJavaScript)

总结

  往往一些知识远比你想象的复杂得多,所以纸上谈兵是不行的,要实际应用学习、尝试。
  XSS的本质还是一种“HTML注入”,用户的数据被当成了HTML代码一部分来执行,从而混淆了原来的语义,产生了新的语义。XSS攻击主要发生在MVC架构中的view层,大部分的XSS漏洞可以在模板系统中解决。但XSS的防御需区分情况对待。根治XSS问题,需列出XSS可能发生的场景,根据具体情况分析解决。

详情请参考书籍
摘自:《白帽子讲Web安全》 — 吴翰清

猜你喜欢

转载自www.cnblogs.com/conquer-vv/p/12881909.html