代碼審計方面小東還不算很深入,所以去站長之家找了一個低版本號的XYCMS留言板程序來審計一下喊递,往往這種低版本的適合入門(適合我)
0x00 XYCMS留言板簡介
程序下載地址:
http://down.chinaz.com/soft/37797.htm
簡介:
XYCMS留言板是以php+MySQL進行開發(fā)的php留言板源碼滑绒,軟件為普通的留言板可廣泛應(yīng)用于企業(yè)網(wǎng)站等需要留言板的網(wǎng)站中進行使用。
環(huán)境要求:
方便驗證碼顯示疑故,開啟GD庫,在php.ini中找到extension=php_gd2.dll弯菊,把前面分號去掉纵势,然后重啟apache就好了
XYCMS留言板定位:
普通留言板,也有人可能會吐槽管钳,功能太簡單了钦铁,但作為留言板,這個功能已經(jīng)足夠用了蹋嵌,市場上很多留言板帶用戶自行管理刪除育瓜,頭上傳像或者其他什么功能的,我只能說那程序定位就不是留言板了栽烂,是BBS了躏仇,但是又不是BBS,為了追求腺办,大可安裝論壇程序焰手,但是與留言板區(qū)別就大了。
更新:
新增加參數(shù)過濾規(guī)則怀喉,防SQL注入
0x01 開始安裝
訪問域名按照引導(dǎo)就能正常安裝完成书妻。
0x02 開始代碼審計
簡單瀏覽安裝完成后的界面后,本身程序是留言板功能躬拢,大致估計會有XSS和sql注入躲履,從這兩個大頭入手。接下來就直接以漏洞類型來分類講述聊闯。
0x03 XSS
由于程序?qū)τ谟脩裘茸侄屋敵鰶]有做過濾工猜,那么存在存儲性XSS是必然的。
位于 index.php
B. 管理員審核
會執(zhí)行三次alert()
;
說明在后臺也是沒有過濾輸出的
此外程序中的在add_book.php
中注意到用戶的IP參數(shù)是直接輸出的菱蔬,同時找到程序中Lib/Function/fun.php
獲取ip的代碼段
發(fā)現(xiàn)程序也是直接獲取并沒有做過濾篷帅,那么這個ip也可以偽造XFF史侣,形成XSS
如果ip有寫入數(shù)據(jù)庫,那么還有SQL注入
的風(fēng)險魏身,簡單看看惊橱。
0x04 信息泄漏
程序不存在重裝漏洞,但是在/install/
目錄下存在如下預(yù)制文件箭昵,且沒有提醒用戶刪除税朴,文件中包含了部分預(yù)先數(shù)據(jù),以及數(shù)據(jù)表字段等信息
0x05 SQL注入
簡單看了有關(guān)數(shù)據(jù)寫入的代碼家制,發(fā)現(xiàn)基本沒有過濾...
那么存在SQL注入掉房,就找找可以在游客權(quán)限下可利用的
首先看看管理員后臺登陸的驗證文件
/system/loginpass.php
<?php
//loginpass.php
session_start();
require 'include/globle.inc.php';
//登錄驗證
if(strtolower($_POST["checkcode"])==strtolower($_SESSION["randval"])){
unset($_SESSION["randval"]);//釋放session中的變量
}else{
unset($_SESSION["randval"]);
ok_info('index.php','驗證碼輸入有誤');
exit();
}
if(isset($_POST["admin"]) && isset($_POST["password"]) && isset($_POST["checkcode"])){
$m_name=xy_rep(trim($_POST["admin"]));
$m_pwd=md5(md5($_POST["password"]));
$login_ip=getIp();
$sql="select * from admin_user where u_name='".$m_name."' and u_pwd='".$m_pwd."'";
$result=$db->query($sql);
if(!mysql_num_rows($result)==0){
$_SESSION["m_name"] = $m_name;
$db->query("UPDATE admin_user SET login_nums=login_nums+1 where u_name='".$m_name."'");
$login_info=array(
'u_name'=>$m_name,
'login_date'=>strtotime(date('Y-m-d')),
'login_ip'=>$login_ip
);
$db->insert("admin_login_log",$login_info);
$db->close();
ok_info('xycms.php','恭喜您,登陸成功!');
}else{
ok_info('index.php','帳號或者密碼有誤');
exit();
}
}
?>
好家伙慰丛,可以看到對驗證碼及時做了銷毀,所以不存在暴力破解漏洞
可以看到密碼u_pwd
是做了MD5()
加密瘾杭,所以此字段無法注入(提示:當(dāng)md5(,true)
時诅病,可以有ffifdyop
),trim()
函數(shù)用于去掉參數(shù)兩邊的空格粥烁,可不考慮贤笆,$m_name
有一個xy_rep()
函數(shù),去看看
//位于/Libs/Function/fun.php
function xy_rep($str){
return str_replace(array('#', '@', '\'','or'),'', $str);
}
其只是做了簡單的替換讨阻,這樣我們嘗試繞過芥永,替換單引號之后根本無法注入,cnm
下面雖然可以通過IP的方式注入钝吮,但是需要管理員賬號密碼正確...暫時先不考慮吧
再看看session.php
<?php header("Content-type:text/html;charset=utf-8"); ?>
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
session_start();
if($_SESSION['m_name']=="")
{
echo "<script language='javascript'>";
echo "alert('操作延時或者無權(quán)限操作埋涧,請先登陸后繼續(xù)操作!');";
echo "location='index.php';";
echo "</script>";
exit;
}
?>
必須要登陸才行奇瘦,因此有這個文件引入的都先不考慮
小東翻看了一下啊棘催,狗日的都做了權(quán)限控制,所以如果你是管理員的話耳标,那么就可以注入了醇坝,比如上面的IP就沒做過濾,可直接注入次坡,沒有錯誤回顯呼猪,可在登陸記錄中可查看IP地址,二次注入就可以了砸琅。
0x06 文件上傳
程序中有一個編輯器宋距,kindeditor
,不存在文件上傳漏洞,反而存在一個post數(shù)據(jù)型的反射性XSS明棍,漏洞頁面:
http://www.test.com/system/xyeditor/php/demo.php
寫一個
form.html
,這樣我們就可以上傳任意圖片等文件,用于做我們的遠程云盤沸版!form.html
代碼如下
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上傳</title>
</head>
<body>
<form method="POST" action="http://www.test.com/system/xyeditor/php/upload_json.php" enctype="multipart/form-data">
<input type="file" name="imgFile" id="file">
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
即可上傳圖片嘁傀,壓縮包等文件
0x07 目錄遍歷
由于程序如上自帶的編輯器
漏洞存在頁面
http://www.test.com/system/xyeditor/php/file_manager_json.php?path=Server/
直接訪問會爆出網(wǎng)站絕對路徑,有如下的文件目錄遍歷漏洞可利用
0x08 總結(jié)
這個程序的漏洞挺多的视粮,適合初學(xué)者學(xué)習(xí)细办!有任何問題,請聯(lián)系我QQ:1099718640