1. 程式人生 > >對自助提卡系統EDLM的一次代碼審計

對自助提卡系統EDLM的一次代碼審計

個數 tables 搭建 blank alt 密碼 table 本地 缺少

前言

並非有意願要審計該站,前面的走的黑盒沒有過於精彩部分就不在貼上了,對於此系統站你們懂的,多說無益,這套程序是開源的,像這種自助提卡系統相信大家已經不在陌生了,很多違法網站通過這種平臺方式提卡密的相當於購買邀請碼,源碼是小夥伴提供的,采用的是php+mysql進行開發的24小時自動售卡平臺,廢話就不多說了。

相關環境

源碼信息:你猜啊

漏洞類型:Forwarded-For註入

搭建成功之後如下 :

看到如下頁面是不是有似曾相識的感受:

技術分享圖片

上圖是安裝過後的首頁,就是一個提卡網,繼續吧!

技術分享圖片

這是首頁文件,進去首先判斷了install目錄下的lock文件是否不存在並且判斷是否有index.php文件,如果滿足以上條件就跳轉到install目錄下的index.php,我們跟進install/index.php文件:

技術分享圖片

技術分享圖片

這裏我們只看判斷是否安裝過程序,判斷是否存在lock文件並且step不等於5的情況下就執行判斷語句中的代碼,當然這裏如果header函數後沒有exit就會存在重裝漏洞。

我們接著看index.php,光是index.php文件就用413行代碼,代碼都不規範,所以我們先看看其它文件,看看api.php文件:

技術分享圖片

這裏很明顯我們看到了SQL註入,首先判斷是否設置了$_POST[“dh”]再判斷$_POST[“dh”]不為空則將該參數拼接到SQL語句中,看到這裏就可以判斷出該程序存在聯合查詢註入,可是$config哪來的,這個文件也沒包含其它的文件啊!!!怎麽辦呢?那麽我們就來找找index文件中是否包含了api.php,search一下

技術分享圖片

可以看到在294行這裏包含了api.php文件,我們構造下放入sqlmap中玩一玩。

Python sqlmap.py -u “http://localhost:8081/index.php” --batch --dbms=”mysql” --data=”dh=a”

技術分享圖片

這裏可以看到註入類型確實是聯合查詢,我們接著嘗試下這個提卡網是否存在SQL註入。

Python sqlmap.py -u "http://lxxxxx.pw/index.php" --batch --dbms="mysql" --data="dh=a"

技術分享圖片

我們嘗試本地站點的時候毫無問題,為什麽這個提卡網就沒有存在這個問題了呢?很明顯這個網站可能是升級或者二開發過的,我們接著看看其它點,進入./pay/pay.php文件:

技術分享圖片技術分享圖片技術分享圖片技術分享圖片技術分享圖片

代碼過多就不一一貼圖出來了,主要構成漏洞的代碼就在這其中,我們從38行開始看著走。

這裏判斷$_GET[“type”]等於delete的時候則執行40-49行的代碼,41將獲取到的ip拼接到sql語句中,我們看看ip函數:

技術分享圖片技術分享圖片

這裏可以看到程序獲取ip可以從客戶端的頭參數中獲取,分別為HTTP_X_FORWARDED_FOR,HTTP_CLIENT_IP,這個函數真的僅僅是獲取外部傳遞的參數的,一點也沒有過濾,我們看到了這裏就可以嘿嘿了,基本上這個網站拿下了,我們接著看看,回到41行,再看下邊的,我們不宜在這裏進行SQL註入,因為接著會將查詢到的值又進行下一個SQL語句的拼接,這樣返回值就不準確,用工具的過程就很難判斷了,我們跳出這裏的判斷,看看51-54行分別判斷了$_GET[‘type‘],$_GET[‘money‘],$_GET[‘title‘],$_GET[‘pwd‘]這幾個參數存不存在,所以我們這裏可以這樣構造get參數:

type=a&money=1&title=adssad&pwd=123

我們接著看下邊的,第58-65行,首先是判斷了type是否等於zfb,若不等於則退出當前程序並打印Tip:Type error!,所以我們還得接著改改get參數:

type=zfb&money=1&title=adssad&pwd=123

接下來,可以看到67行中再次將獲取到的ip拼接到了SQL語句中,我們這樣來,在67行的下邊打印出當前執行的SQL語句

技術分享圖片

好了,現在我們打開burp進行抓包,然後偽造ip進行一系列的嘿嘿了,因為./pay/index.php中包含了pay.php,所以我們對index.php進行註入就好

復現

訪問http://localhost:8081/pay/index.php?type=zfb&money=1&title=adssad&pwd=123,付款碼頁面:

技術分享圖片可以看到這是一個很正常的頁面了,並且打印出了SQL語句,我們抓包:

技術分享圖片技術分享圖片正常頁面:

技術分享圖片錯誤頁面:技術分享圖片

好的,現在看到了吧!我們放到SQLmap中跑一下看看,我們將這個數據包保存到文本中,並且標註註入位置:X-Forwarded-For這個註入還自帶繞過waf功能,因為很多waf不會檢測hander參數。

技術分享圖片

Python sqlmap.py -r test.txt --batch --dbms="mysql" 

技術分享圖片

我們對那個網站測試一番,訪問:http://lxxxx.pw/pay/index.php?type=zfb&money=1&title=adssad&pwd=123

技術分享圖片

可以看到缺少 “spid” 參數我們加上繼續訪問,頁面是支付寶掃碼支付 – -RL吧論壇邀請碼:

http://llxxxxx.pw/pay/index.php?type=zfb&money=1&title=adssad&pwd=123&spid=1

技術分享圖片

把該數據放到文本中,接著進行測試:

技術分享圖片

Python sqlmap.py -r test.txt --batch --dbms="mysql" 

技術分享圖片成功挖掘到了該網站的漏洞,繼續。

技術分享圖片

Python sqlmap.py -r test.txt --batch -D yulinxscom --tables 

技術分享圖片

Python sqlmap.py -r test.txt --batch -D yulinxscom -T admin --dump 

技術分享圖片

拿到了管理賬號及密碼。接著訪問。

默認後臺:http://lxxxx.pw/admin.php

技術分享圖片

由於之前進去過一次,讓他虧損了點錢,現在後臺的名字也改了 。

寫在結尾

跟此網站的搭建人聊了會,從去年11月份搭建平臺以來已獲利普通人一年的薪資。為了養家糊口,冒此風險也是不容易,切勿為了蠅頭小利以身試法,就這樣做個記錄,到此為止吧。

對自助提卡系統EDLM的一次代碼審計