<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,會導致拒絕服務攻擊。大家能從公告上,看到這樣一段代碼,挺長的。意思是只有開發人員寫出這樣的代碼,才會對服務器造成影響。 人人

    我們肯定會首先考慮,這么長的代碼,究竟有多少開發會傻乎乎的寫出來?而我們究竟打不打補丁呢?其實作者知道,目前還有很多公司沒有打補丁,不過沒關系,等會兒你就要打了。

    先看看官方給出的代碼。


    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);
    }
    }

    以上代碼,其實舉了兩個例子,首先簡化一下代碼:


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

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

    這段代碼會在運行時掛掉:
    double d = Double.parseDouble(“2.2250738585072012e-308″);

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

    這段代碼會在運行時掛掉:
    double d = Double.parseDouble(request.getParameter(“double”));

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

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

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

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

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    人人游戲網 軟件開發網 貨運專家
    主站蜘蛛池模板: 青青草原亚洲视频| 亚洲国产成人久久笫一页| 亚洲人色婷婷成人网站在线观看| 亚洲精品无码日韩国产不卡av| 每天更新的免费av片在线观看| 亚洲人成依人成综合网| 99热在线观看免费| 久久久久亚洲AV无码专区首JN| 一区二区在线免费观看| 亚洲AV无码不卡无码| 久久成人a毛片免费观看网站| 中文字幕亚洲日本岛国片| 国产精品免费久久久久影院| 亚洲色无码专区在线观看| 亚洲精品视频免费观看| 亚洲综合伊人久久大杳蕉| 免费看一区二区三区四区| 久久久久久久久亚洲| 在线免费中文字幕| 亚洲精品456人成在线| 日韩免费毛片视频| 猫咪免费人成网站在线观看入口 | 黄色三级三级免费看| 亚洲精品成人区在线观看| 黄色网站软件app在线观看免费| 亚洲国产另类久久久精品| 最近免费mv在线电影| 久久精品国产亚洲αv忘忧草| 免费观看a级毛片| 一级人做人爰a全过程免费视频| 亚洲无线观看国产精品| 十九岁在线观看免费完整版电影| 久久精品国产亚洲αv忘忧草| 国产成人精品123区免费视频| 香蕉国产在线观看免费| 亚洲AV第一页国产精品| 大地资源二在线观看免费高清| 国产精品亚洲精品日韩电影| 亚洲国产精品成人精品无码区 | 国内精品免费视频精选在线观看| 亚洲精品国产专区91在线|