小白的程式碼審計之路(一)
一般框架中可訪問的方法都要求屬性為public並且方法名要符合命名規範才能被瀏覽器訪問到,在ThinkPHP中預設的規則要求就是隻要方法名為public就可以被訪問。(如SlightPHP中不僅需要方法為public,還需要方法名字首為page.具體可以參考各框架說明)。這樣我們就可以完美的定位檔案和方法了。(框架小白的我真是開心O(∩_∩)O~~)
六、框架傳參規則
在我們的日常測試中可能會遇到如下三種url請求型別:
http://127.0.0.1/?c=bb&a=Citystation&id=1
http://127.0.0.1/bb-Citystation-id-1
http://127.0.0.1/bb/Citystation/id/1
我們可以簡單的理解為它們使用了不同的分隔符而已,第一二個引數都是告訴框架此次請求的是哪個檔案中的哪個方法,而後面的引數就是我們的get傳參了一個變數一個值.如本例中我們請求的是bb.page.php中的Citystation方法,get傳遞了一個id為1的值。
七、總結
1、當拿到一個框架開發的專案後,首先找入口檔案,然後檢視他的相應配置檔案,看看它都載入了哪些東西,配置了哪些引數,是否有做全域性安全過濾。
2、所有可以訪問url頁面邏輯,都會放在Controller目錄裡,除非遇到了搞怪的程式猿們。
3、如果找不到對應的檔案,那一定是框架路由在作怪,那就去看看配置檔案中的路由規則,一個應用目錄下只有一個配置檔案,每個應用目錄下的模組也有一個配置檔案。
mvc框架中的這些概念都是萬變不離其宗的,變的只是不同的名字,不同的呼叫方式。瞭解了這些基本概念後,我們就可以愉快的找到對應的程式碼進行審計了。但這樣還不能做到像大牛一樣,從頭到尾的全看程式碼來審計漏洞,因此在日常工作中,我們可以結合黑盒測試,每次發現有問題的點,就去看看有問題的程式碼都長什麼樣。當有了一些靈感,能準確的看出程式碼哪裡寫的有問題後,在日常的測試中,就可以對每個地址,針對某一個功能抓一個包,看看請求的哪個檔案,傳遞了哪些引數,然後就可以直接審計程式碼是否有問題了。當你完全瞭解了業務邏輯和框架之後,就可以從頭到尾只讀程式碼來審計漏洞了。