适合入门代码审计之熊海cms
一、前言
簡單了解了一下,審計入門,熊海比較適合,因為是簡單的cms,適合入門。
二、審計環境
使用小皮面板,新建網站
三、審計過程
先了解文件目錄
admin --管理后臺文件夾 css --存放css的文件夾 files --存放頁面的文件夾 images --存放圖片的文件夾 inc --存放網站配置文件的文件夾 install --網站進行安裝的文件夾 seacmseditor --編輯器文件夾 template --模板文件夾 upload --上傳功能文件夾 index.php --網站首頁先把網站源碼放到seay里面,自動審計一下。
可以看到,可疑漏洞挺多的,然后對比著代碼進行一一核實
文件包含漏洞
**index.php**
<?php //單一入口模式 error_reporting(0); //關閉錯誤顯示 $file=addslashes($_GET['r']); //接收文件名 $action=$file==''?'index':$file; //判斷為空或者等于index include('files/'.$action.'.php'); //載入相應文件 ?>GET傳值r,用函數addslashes轉義我們傳入的值,防止命令執行,但是這顯然是不夠的,這里對文件包含漏洞是沒有用任何限制的。
這里可以直接包含到files文件夾下的文件,但是也可以通過目錄穿越,包含到根目錄。
我們在files文件夾下新建一個phpinfo.php
第二處 /admin/index.php也是同理 同樣的代碼,同樣的包含。
【所有資源,點擊查看】
1、網絡安全學習路線
2、電子書籍(白帽子)
3、安全大廠內部視頻
4、100份src文檔
5、常見安全面試題
6、ctf大賽經典題目解析
7、全套工具包
8、應急響應筆記
SQL注入漏洞
SQL注入一般存在于登錄框這里,我們直接看后臺登陸框的源碼**admin/files/login.php**
后臺注入
大致看了看代碼:
user和password接受我們POST傳值,沒有任何過濾,直接插入到查詢語句中。先在數據庫中查詢user是否存在,如果不存在就報錯,而且mysql_error()是開著的,可以報錯注入,如果user存在的話就對我們的傳入的password進行md5散列和數據庫中的password進行比較,如果相等,則登陸成功。
經過一番分析,存在報錯注入,萬能密碼無法登錄,因為對password進行md5散列,與數據庫中進行對比。
漏洞復現:
正常的報錯注入
1' or updatexml(1,concat((select concat(0x7e,password) from manage)),0) #
1' or updatexml(1,concat((select concat(password,0x7e) from manage)),0) #
確實存在
將兩段得到的MD5的值拼起來進行MD5
爆破即可得出password明文,之后查詢user
1' or updatexml(1,concat((select concat(0x7e,user) from manage)),0) #
即可進行登錄。
然后我們查看別處
**/admin/files/softlist**
依舊是開了mysql_error()且無過濾,注入同上
**/admin/files/editlink.php**
類型同上,不再贅述。
發現,好像這個cms涉及sql的均未過濾且可進行報錯注入。這可能就是這個cms適合審計小白的原因了吧
以為這個cms的SQL注入到此結束了,后來看了大佬的資料,發現還有兩處特別之處,值得一提(對于審計小白)。
**/files/software.php**
前臺注入
這里面引用了函數addslashes進行過濾
關于addslashes
函數addslashes()作用是返回在預定義字符之前添加反斜杠的字符串。預定義字符是單引號(’)雙引號(")反斜杠(\)NULL。
在官網中有這樣的注釋
默認情況下,PHP 指令 magic_quotes_gpc 為 on,對所有的 GET、POST 和 COOKIE 數據自動運行 addslashes()。不要對已經被 magic_quotes_gpc 轉義過的字符串使用 addslashes(),因為這樣會導致雙層轉義。遇到這種情況時可以使用函數 get_magic_quotes_gpc() 進行檢測。
因為這里被GET傳值就已經默認運行addslashes(),所以再次使用addslashes()就不起作用了,所以依舊還是可以進行報錯注入。
payload:
?r=content&cid=1%20or(updatexml(1,concat(0x7e,(select%20version()),0x7e),1))
** /install/index.php **
安裝流程存在SQL注入 ,代碼如下
沒有過濾,mysql_error()開著,依舊可以考慮報錯注入。
參閱大佬的文章
首先要對InstallLock.txt文件鎖進行刪除
重新安裝的時候在user處報錯注入
payload;
1' extractvalue(1,concat(0x7e,(select @@version),0x7e))#
這個cms的SQL注入就到此結束了
XSS漏洞
反射型XSS
**/files/contact.php**
$page=addslashes($_GET['page']); //59行 <?php echo $page?> //139行payload:
<img src=1 onerror=alert(/xss/)>
當然還有許多的反射型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']))//判斷接收數據是否為空 {$tmp = new FileUpload_Single;$upload="../upload/touxiang";//圖片上傳的目錄,這里是當前目錄下的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."設置已成功更新!');location.href='?r=manageinfo'</script>"; exit; } ?>POST傳參,但是無任何過濾,直接根數據庫進行交互,存在存儲型XSS
payload:
<img src=1 onerror=alert(/xss/)>
?
垂直越權
**inc/checklogin.php**中
<?php $user=$_COOKIE['user']; if ($user==""){ header("Location: ?r=login"); exit; } ?>如果COOKIE中user為空,跳轉到登陸窗。這種就是最簡單的垂直越權。
我們訪問http://www.xionghai.com/admin/index.php抓包查看,這種情況,COOKIE中無user參數
當我們修改COOKIE值后
越權就成功了,我們就可以訪問管理頁面了。
CSRF漏洞
舉例
/admin/files/wzlist.php
可以看見是沒有任何驗證的
然后我們進行一下delete操作
然后抓包看一下
其payload
www.xionghai.com/admin/?r=wzlist&delete=18
然后我們換個瀏覽器,來訪問這個payload,并且抓包,在Cookie處,添加user的值為admin
可以發現CSRF攻擊成功
**admin/files/softlist.php**
依舊存在CSRF,做法同上。
四、總結
到此,這個cms的審計就差不多結束了。總的來看,因為這個cms是個人開發的,并且很長時間沒有更新過,審計過程中,基本上所有的漏洞都沒有過濾。這也許就是它適合我這種小白的原因吧。
總結
以上是生活随笔為你收集整理的适合入门代码审计之熊海cms的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过蜜罐技术获取攻击者手机号、微信号【网
- 下一篇: 服务器被入侵了?反手溯源出入侵者画像【网