<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 241,  comments - 116,  trackbacks - 0

    JAVA出了漏洞,CVE-2010-4476,會(huì)導(dǎo)致拒絕服務(wù)攻擊。大家能從公告上,看到這樣一段代碼,挺長(zhǎng)的。意思是只有開發(fā)人員寫出這樣的代碼,才會(huì)對(duì)服務(wù)器造成影響。 人人

    我們肯定會(huì)首先考慮,這么長(zhǎng)的代碼,究竟有多少開發(fā)會(huì)傻乎乎的寫出來(lái)?而我們究竟打不打補(bǔ)丁呢?其實(shí)作者知道,目前還有很多公司沒有打補(bǔ)丁,不過(guò)沒關(guān)系,等會(huì)兒你就要打了。

    先看看官方給出的代碼。


    Send a Java Program Into An Infinite Loop
    Compile this program and run it; the program will hang (at least it does on a 32-bit system with the latest JRE/JDK):
    class runhang {
    public static void main(String[] args) {
    System.out.println(“Test:”);
    double d = Double.parseDouble(“2.2250738585072012e-308″);
    System.out.println(“Value: ” + d);
    }
    }
    —————————————————————————————————————-
    Send the Java Compiler Into An Infinite Loop
    Try to compile this program; the compiler will hang:
    class compilehang {
    public static void main(String[] args) {
    double d = 2.2250738585072012e-308;
    System.out.println(“Value: ” + d);
    }
    }

    以上代碼,其實(shí)舉了兩個(gè)例子,首先簡(jiǎn)化一下代碼:


    這段代碼會(huì)在編譯時(shí)掛掉:
    double d = 2.2250738585072012e-308;
    這段代碼會(huì)在運(yùn)行時(shí)掛掉:
    double d = Double.parseDouble(“2.2250738585072012e-308″);

    作者很奇怪后面的System.out是啥意思,按照實(shí)際測(cè)試以及官方原理,這句壓根不會(huì)執(zhí)行,樓上都已經(jīng)“無(wú)限循環(huán)”了,怎么可能走下來(lái)呢?不過(guò)這個(gè)不重要。債務(wù)追討
    下文所說(shuō)的漏洞,是指假設(shè)我們的開發(fā)人員寫了“XXX”的代碼,攻擊者就可能攻擊我們服務(wù)器。
    我們來(lái)逆推攻擊過(guò)程,從漏洞的角度上說(shuō),只有程序傳入的值,由用戶控制,才會(huì)導(dǎo)致漏洞觸發(fā),畢竟開發(fā)不會(huì)直接寫這個(gè)值。而編譯中掛掉,幾乎不可能存在,很難有正常的業(yè)務(wù)需要用戶提交代碼,讓服務(wù)器編譯執(zhí)行。所以,漏洞的產(chǎn)生只會(huì)出在這一句上:

    這段代碼會(huì)在運(yùn)行時(shí)掛掉:
    double d = Double.parseDouble(“2.2250738585072012e-308″);

    那么再次逆推,要求這個(gè)值有用戶控制,如果環(huán)境是java web application,開發(fā)想寫出有漏洞的代碼,必須這樣搞:

    這段代碼會(huì)在運(yùn)行時(shí)掛掉:
    double d = Double.parseDouble(request.getParameter(“double”));

    于是,程序就”hang!”(其實(shí)我不知道這個(gè)詞的意思),掛了,從表面上看不出來(lái),但是實(shí)際上你的CPU會(huì)立刻100%,當(dāng)前線程走不下去,頁(yè)面 卡死,不給你任何響應(yīng)。當(dāng)然,其他頁(yè)面也許會(huì)好,因?yàn)閣eb容器是多線程的,可惜已經(jīng)有人100%CPU了,頁(yè)面速度可想而知。
    很多人,就考慮到了這段,除非開發(fā)人員真的寫了這樣的代碼,否則很難出現(xiàn)漏洞,所以沒有打補(bǔ)丁。
    Java web在很多年前,都已經(jīng)開始走框架路線了,我們熟知的spring mvc、struts2、webwork等等,甚至還有一些公司自己實(shí)現(xiàn)框架,比如阿里巴巴公司的開源框架webx(宣傳一下 http://code.taobao.org/project/view/401/)。在這樣的框架中,開發(fā)人員更不可能自己去做轉(zhuǎn)義,這都是框架自己 負(fù)責(zé)的。是不是意味著,漏洞不可能存在呢?
    這恰恰是最可怕的地方,這些框架沒有讓開發(fā)人員參與類型轉(zhuǎn)義,用戶本來(lái)提交的是一個(gè)String的2.2250738585072012e-308,框架會(huì)自動(dòng)轉(zhuǎn)義類型為Double,經(jīng)測(cè)試,所有的框架都有自動(dòng)類型轉(zhuǎn)義(否則框架意義何在啊)。
    開發(fā)什么都不需要做,只要在action中有一個(gè)對(duì)象,對(duì)象中有一個(gè)字段類型為double,或許他都不需要定義對(duì)象,其他開發(fā)早定義好了,他只需要寫一個(gè)action。比如:

    //訂單處理action
    public class OrderAction extends ActionSupport{
    //訂單對(duì)象
    public Order order;
    public String execute(){
    return SUCCESS;
    }
    }
    //Order對(duì)象的內(nèi)容
    Public class Order{
    //前面還有其他字段,這里只說(shuō)Double類型的。
    Double money;
    }

    這就“hang”了。我們可以寫個(gè)掃描器,那么會(huì)有哪些字段通常被定義為double呢?掃描器自己去抓頁(yè)面,抓回來(lái)的input,如果為user.name,我們就猜測(cè) user對(duì)象中可能存在money,可能存在score、point等,然后讓它們等于那個(gè)值,自動(dòng)提交。這等于掛字典,猜測(cè)對(duì)象中可能存在的 double類型字段。

    有沒有線上的例子呢?
    posted on 2011-04-26 09:35 墻頭草 閱讀(288) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    人人游戲網(wǎng) 軟件開發(fā)網(wǎng) 貨運(yùn)專家
    主站蜘蛛池模板: 免费网站看v片在线香蕉| 亚洲精品国产日韩无码AV永久免费网| 91青青青国产在观免费影视| 国产乱辈通伦影片在线播放亚洲 | 美女视频黄的全免费视频| 日韩在线天堂免费观看| 亚洲永久精品ww47| 国产精品免费一区二区三区 | 亚洲AV乱码久久精品蜜桃 | 久久精品国产亚洲AV电影| 国产亚洲视频在线| 亚洲AV蜜桃永久无码精品| 一级黄色片免费观看| 成人黄动漫画免费网站视频 | 污视频网站免费观看| jlzzjlzz亚洲乱熟在线播放| 羞羞视频免费网站在线看| 亚洲va久久久噜噜噜久久狠狠| 一级成人a毛片免费播放| 丁香亚洲综合五月天婷婷| 一级毛片成人免费看a| 亚洲AV无码久久| 成年大片免费视频| 成人免费观看男女羞羞视频| 国产精品久久香蕉免费播放| 国产精品高清免费网站| 777亚洲精品乱码久久久久久| 两个人看的www高清免费视频| 亚洲最新视频在线观看| 最新69国产成人精品免费视频动漫 | 日韩亚洲翔田千里在线| 无码免费午夜福利片在线| 久久亚洲精品无码AV红樱桃| 大地资源二在线观看免费高清| 黄色一级视频免费| 亚洲一区二区三区首页| 国产精品麻豆免费版| 久久伊人免费视频| 国产成人综合亚洲| 亚洲美女一区二区三区| 亚洲日本一区二区一本一道|