鐵人下載CMS代碼審計

簡介

初學(xué)java代碼審計粱挡,跟著大佬的審計方案,走一遍審計流程俄精,這個系統(tǒng)沒有使用java框架询筏,作為入門不錯。主要作為熟悉代碼審計流程竖慧,尋找漏洞思路嫌套,學(xué)習(xí)記錄逆屡。

環(huán)境準備

環(huán)境搭建使用了本地搭建環(huán)境,查看代碼使用IDEA踱讨,配合tomcat8.0魏蔗,因為IDEA會自動反編譯,比較方便痹筛。我使用的是安裝必看中的第二種方法莺治,手動安裝,修改數(shù)據(jù)庫連接帚稠,然后手動將sql文件導(dǎo)入數(shù)據(jù)庫谣旁,接著打開后臺管理地址,安裝完成翁锡。使用默認的管理員賬號密碼蔓挖。

發(fā)現(xiàn)漏洞

非框架的代碼審計夕土,按照前臺--后臺馆衔,緊急--低危,非交互--交互怨绣,跟隨代碼流程盡量發(fā)現(xiàn)高危和易利用的漏洞類型為主角溃。

重安裝漏洞

因為我使用手動安裝的方法進行安裝,sql文件也是手工導(dǎo)入篮撑,直接導(dǎo)入sql文件减细,然后后臺打開安裝發(fā)現(xiàn)無法安裝,需要將db_an設(shè)置為no赢笨,才能安裝成功未蝌。使用系統(tǒng)自帶的安裝功能安裝完成后,db_an會被設(shè)為no茧妒,雖然/install目錄的重新安裝頁面沒刪除萧吠,但確實使用系統(tǒng)自帶的安裝功能不存在重新安裝的漏洞。
跟隨/install/index.html頁面桐筏,找到了install.jsp文件纸型,再根據(jù)form action,找到install_setup.jsp頁面

安裝頁面

然后再根據(jù)install_setup.jsp上的import語句
import="liuxing.util.Install,java.util.*"
找到安裝的主要邏輯代碼梅忌,在WEB-INF/class/liuxing/util/Install.class中狰腌,安裝時會判斷db_an的值,yes可以安裝牧氮,no不安裝琼腔;安裝完成后會把值設(shè)置為no,雖然install頁面沒有被刪除踱葛,但是已經(jīng)不能再次安裝了展姐。
image.png

? ?所以當(dāng)使用系統(tǒng)自帶的install方法安裝時不存在重安裝漏洞躁垛;如果使用手動導(dǎo)入sql文件,并且沒有將db_an設(shè)置未no的話圾笨,且沒刪除install目錄教馆,就會存在重安裝漏洞。

SQL注入

先嘗試下搜索功能擂达,隨便輸入關(guān)鍵字土铺,點擊搜索,跳轉(zhuǎn)到so.jsp.查看so.jap

image.png

發(fā)現(xiàn)將搜索的值傳入了Ruanjianguanli的so方法中板鬓,找到Ruanjianguanli的so方法
image.png

是調(diào)用了ruanjianDao.so()函數(shù)悲敷,我們接著來看看
image.png

同一個構(gòu)造函數(shù)中可以發(fā)現(xiàn)ruanjianDao其實RuanjianMySQL的一個實例,接著再往下跟俭令。打開WEB-INF/class/liuxing/dao/RuanjianMySQL.class文件 搜索so方法后德,最終使用預(yù)編譯的方法來執(zhí)行sql,所以這個地方不存在sql注入抄腔。
image.png

有一處使用了預(yù)編譯方式瓢湃,說明很多地方采用預(yù)編譯的方式來執(zhí)行sql語句,基本沒有sql注入漏洞赫蛇。所以換個思路绵患,通過全局搜索createStatement關(guān)鍵字,看看有沒有用拼接的SQL語句的悟耘。
image.png

如上圖所示也有很多可以注入的地方落蝙,但是需要后臺登陸,在delete語句中存在時間盲注暂幼,比如
delete from user where id in('222') or if(ascii(substr(database(),1,1))>107,0,sleep(3));
image.png

利用:

GET /admin/left6/Delete.jsp?pageNo=1&id=000')+or+if(ascii(substr(database(),1,1))>108,0,sleep(3))--+ HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:66.0) Gecko/20100101 Firefox/66.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://localhost:8080/admin/left6/guanliyouhu.jsp
Connection: close
Cookie: Phpstorm-da0128c6=8686f169-5769-401c-a557-13b58accd387; JSESSIONID=29976F22C3B4A37F8BFEDEA123CB35C7
Upgrade-Insecure-Requests: 1

但是后臺都已經(jīng)登陸了筏勒,也沒必要去糾結(jié)這種sql了,應(yīng)該有更容易利用的漏洞旺嬉,我們繼續(xù)往下找管行。

存儲型XSS

系統(tǒng)比較簡單,所以前臺能產(chǎn)生XSS的地方比較少鹰服。會員注冊后修改個人資料病瞳,郵箱處
可以使用payload
""><script>alert(0)</script>

image.png

成功處罰XSS漏洞。我們來看denlu1.jsp代碼
image.png

我們來找到Userguanli的Xiugaiyonghu2的方法悲酷。最終定位到WEB-INF/classliuxing/dao/UserDaoMySQL.class文件中的Xiugaiyonghu2方法中套菜,直接將前端傳過來的 youxiang值寫入數(shù)據(jù)庫中,導(dǎo)致存儲型XSS设易。
image.png

后臺任意文件上傳漏洞

? ?在"其它管理"—"添加友情鏈接"處逗柴、"軟件管理"—"軟件發(fā)布"頁面,都可以上傳文件顿肺,在web.xml中或者順著jsp頁面調(diào)用尋找戏溺,都能夠找到具體的邏輯代碼渣蜗。
內(nèi)部代碼看起來都是一樣的,以WEB-INF/class/liuxing/util/shangchuan2.class文件為例旷祸,關(guān)鍵代碼如下:

            List e = upload.parseRequest(req);
            Iterator iter = e.iterator();
            String regExp = ".+\\\\(.+)$";
            String[] errorType = new String[]{".exe", ".com", ".cgi", ".asp"};
            Pattern p = Pattern.compile(regExp);

            while(true) {
                FileItem item;
                String name;
                long size;
                do {
                    do {
                        if(!iter.hasNext()) {
                            return;
                        }

                        item = (FileItem)iter.next();
                        if(item.isFormField() && item.getFieldName().equals("date")) {
                            date = item.getString();
                        }
                    } while(item.isFormField());

                    name = item.getName();
                    size = item.getSize();
                } while((name == null || name.equals("")) && size == 0L);

                Matcher m = p.matcher(name);
                boolean result = m.find();
                if(!result) {
                    throw new IOException("無法上傳");
                }

                for(int e1 = 0; e1 < errorType.length; ++e1) {
                    if(m.group(1).endsWith(errorType[e1])) {
                        throw new IOException(name + ": wrong type");
                    }
                }

                try {
                    String var24 = m.group(1);
                    String men = this.getExt(var24);
                    item.write(new File(this.getServletContext().getRealPath("/") + "wen/" + date + men));
                    res.sendRedirect("../admin/left3/chenggong2.jsp?" + date + men);
                } catch (Exception var21) {
                    out.println(var21);
                }
            }
        } catch (IOException var22) {
            out.println(var22);
        } catch (FileUploadException var23) {
            out.println(var23);
            out.println("文件大小超出限制");
        }

    }

其中會判斷上傳的文件名耕拷,要符合正則表達式 ".+\(.+)$",才能夠正常上傳托享。即形似xxx\xx的文件名骚烧,估計是為了 匹配Windows路徑中的\,比如C:\a.jpg闰围。定義了內(nèi)部禁止的后綴名".exe", ".com", ".cgi", ".asp"赃绊,這就是唯一的過濾方式了。
繼續(xù)往下看羡榴,寫文件時碧查,關(guān)鍵的一句代碼:

item.write(new File((new StringBuilder(String.valueOf(getServletContext().getRealPath("/")))).append("wen/").append(date) .append(men).toString()));

即將文件存放在/wen目錄下,保存為date+men形式的文件名校仑,兩者都是可以控制的忠售,直接修改寫shell了。


image.png
image.png

image.png

其他漏洞

未完待續(xù)

參考文章

源碼下載
鐵人下載系統(tǒng)代碼審計
JAVA代碼審計的一些Tips

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肤视,一起剝皮案震驚了整個濱河市档痪,隨后出現(xiàn)的幾起案子涉枫,更是在濱河造成了極大的恐慌邢滑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愿汰,死亡現(xiàn)場離奇詭異困后,居然都是意外死亡,警方通過查閱死者的電腦和手機衬廷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門摇予,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吗跋,你說我怎么就攤上這事侧戴。” “怎么了跌宛?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵酗宋,是天一觀的道長。 經(jīng)常有香客問我疆拘,道長蜕猫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任哎迄,我火速辦了婚禮回右,結(jié)果婚禮上隆圆,老公的妹妹穿的比我還像新娘。我一直安慰自己翔烁,他們只是感情好渺氧,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蹬屹,像睡著了一般阶女。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哩治,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天秃踩,我揣著相機與錄音,去河邊找鬼业筏。 笑死憔杨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蒜胖。 我是一名探鬼主播消别,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼台谢!你這毒婦竟也來了寻狂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤朋沮,失蹤者是張志新(化名)和其女友劉穎蛇券,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體樊拓,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡纠亚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了筋夏。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒂胞。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖条篷,靈堂內(nèi)的尸體忽然破棺而出骗随,到底是詐尸還是另有隱情,我是刑警寧澤赴叹,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布鸿染,位于F島的核電站,受9級特大地震影響稚瘾,放射性物質(zhì)發(fā)生泄漏牡昆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丢烘。 院中可真熱鬧柱宦,春花似錦、人聲如沸播瞳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赢乓。三九已至忧侧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牌芋,已是汗流浹背蚓炬。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留躺屁,地道東北人肯夏。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像犀暑,于是被迫代替她去往敵國和親驯击。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355