您好,登錄后才能下訂單哦!
本篇文章為大家展示了CVE-2017-12149 JBOSS反序列化漏洞實例分析,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
按照其他大佬說的這個漏洞出現的原因是因為/invoker/readonly的過濾器沒有寫好,文件路徑是:server\all\deploy\httpha-invoker.sar\invoker.war\WEB-INF\classes\org\jboss\invocation\http\servlet,在這個路徑下的ReadOnlyAccessFilter.class中。
把這個class扔到IDEA中查看源碼,發現這個過濾器在做過濾的時候沒有做任何的校驗,導致惡意用戶在直接訪問這個接口去POST數據的時候(看63行之前的代碼)服務器得到輸入流,對輸入流進行對象化,執行數據流中的對象,這不就是序列化的概念嗎。
那么如何構造這個漏洞的POC呢,JBoss5.1版本中使用了commons collections的3.1版本。
使用commons collections可以進行反射鏈的構造。先復現一下,看看人家的POC是怎么寫的:
使用ysoserial.jar這個工具生成各種反序列化的poc或者exp,里面包含了各種各樣的反射鏈所使用到的庫。
java -jar ysoserial.jar CommonsCollections6 "calc.exe" > poc.ser curl http://192.168.154.129:8080/invoker/readonly --data-binary @poc.ser
成功之后看看人家是怎么玩的。大佬們的POC是這么寫的:
在學習了Java反射鏈的構造之后,還差一步就是如何在反序列化的過程中觸發反射鏈。
于是寫POC/EXP的大佬們找到了sun.reflect.annotation.AnnotationInvocationHandler的readObject方法
再看獲取構造方法getDeclaredConstructor()獲取有參的構造方法
getDeclaredConstructor(Class<?>... parameterTypes)
這個方法會返回制定參數類型的所有構造器,包括public的和非public的,當然也包括private的。
再來看getConstructor(Class<?>... parameterTypes)
這個方法返回的是上面那個方法返回結果的子集,只返回制定參數類型訪問權限是public的構造器。
獲取構造器對象并將其實例化:
通過類對象的getConstructor()(獲取public屬性的構造方法)或getDeclaredConstructor()(可獲取所有類型的構造方法)方法獲得構造器(Constructor)對象并調用其newInstance()方法創建對象,適用于無參和有參構造方法。
不多說,看下AnnotationInvocationHandler構造方法的源碼
第一行代碼:獲取Target.class這個類所實現的所有的接口
接著if判斷這個類是不是一個注解類型,而且它只實現了一個接口,判斷它的所實現的接口是不是一個注解類,滿足的話分別賦值。
現在看它的readObject方法,在這里將會觸發整個反射鏈
首先傳入對象輸入流,去讀取這個對象輸入流,然后是var2去解析這個注解類,獲得到值之后,獲取成員類型的值:
獲取到了什么值呢?
var3引用memberTypes,即var3與傳入的Map類型相同,var4為傳入Map的集 合轉化,接著判斷var4中有無元素,如果有元素對其var5獲得var4的集 合轉化,接著var6獲取var5的key值,var7獲得var3的類對象,如果var7是存在的,那么var8從var5處getValue,最后如果var8不可以被轉化為var7,那么對var5進行setValue操作,如果var5進行setValue操作的話,那么它將進行下面的操作:
看下checksetValue的源碼:
進行了transform操作,如果知道反射鏈的大佬們此時已經知道反射鏈的觸發就在此處。
var1-var7的值如下:
使用自己學習人家的POC去打一遍看看。
將生成的bin.ser拷貝到kali中,將其使用curl發送到JBOSS服務器上。
curl http://192.168.154.129:8080/invoker/readonly --data-binary @bin.ser
成功彈出計算器:
上述內容就是CVE-2017-12149 JBOSS反序列化漏洞實例分析,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。