CFM类型的站点,上传漏洞,和SQL注入都是比较经典的方式。
非常好。但是比较BT的CFM整站程序,会把上传目录都弄成不可执行。
CFM漏洞的网站代码,可以参考我以前公布的漏洞整站程序。

------------------                               
tombook
2008-07-15

-------------------------------------------------------------
发件人:baicker
发送日期:2008-07-15 10:15:22
收件人:ph4nt0m
抄送:
主题:[Ph4nt0m] Re: [zz] Attacking ColdFusion.

cfm的很少,以前搞过,还特意翻文档写了个webshell,都忘了,只记得webshell是system的比较爽

2008/7/14 大风 <[EMAIL PROTECTED]>:

>
>
> *Abstract*
>
> ColdFusion is an application server and software development framework used
> for the development of web-based applications[1]. ColdFusion is a similar
> product to Microsoft ASP.NET, JavaServer Pages or PHP. It's syntax is
> tag-based, and almost resembles HTML or XML like-structure which is very
> easy to learn and can be quickly adopted by web designers, to create
> database driven applications without much knowledge of programming. Since
> ColdFusion isn't very well known by many, as an end result, there are very
> few published hacks for them. This article goes deeper into ColdFusion and
> it's limitations and vulnerabilities that attackers can exploit. I mainly
> focus on the inner workings of ColdFusion, SQL Injection and information
> gathering. I can't really give an explanation why ColdFusion isn't very well
> researched by the security industry, but my hunch is that many believe that
> few websites use it. I worked with ColdFusion a few times back in 2002, and
> their user base has explosively grown since then. According to a Google
> query[2][3] learns that at least 500 million pages run ColdFusion on either
> standalone, IIS, Apache, or on Solaris. Since ColdFusion has a huge user
> base by now, It is inevitable that it will become an interesting landscape
> for attack and caution.
>
> *CFM Extensions.*
>
> The ColdFusion extension mappings we can use to locate CFM servers or
> appliances are:
>
> .cfm, .cfml, .cfc, .cfswf, .cfr, .jsp, and .jws
>
>
> *Used ports.*
>
> By default, the web server runs on port 8500, and on old versions of CF it
> can run on 1433. However if port 8500 is in use ColdFusion will use another
> port, depending on what service uses port 8500, like ColdFusion MX,
> ColdFusion MX 6.1, or ColdFusion MX. It can be located between port 8500 to
> 8600. With this knowledge you can determine whether ColdFusion is the only
> service installed, or that more ColdFusion services are installed. But this
> only works when ColdFusion itself is the default server, if IIS or Apache in
> running, the default port will be 8500. Administrators can change the port
> being used by ColdFusion. To change the port number, they must edit
> jrun.xml, located in:
>
> Windows: cf_root\runtime\servers\coldfusion\SERVER-INF
>
> UNIX: cf_root/runtime/servers/coldfusion/SERVER-INF
>
>
> If JRun is present on a multi-server installation it will be located on
> port 8300. If in use, it will be using a port between 8300 and 8400, usually
> incrementing with one, so 8300 and 8301 are often fair guesses to determine
> a multi-server installation.
>
> *Administration.*
>
> What is curious about ColdFusion regarding administration access, is that
> you only have to enter a password if you need to login. This has been the
> case since ColdFusion came to be, and still remains their way of securing
> access. The password submitted gets encrypted before submitting the form. A
> hex_hmac_sha1 is used to cipher a hidden field salt with the entered
> password. The hidden salt is somewhat silly designed, because it's actually
> a UNIX time stamp: 1215849484281 with a number appended to it on the end. In
> old CF versions there is no password set and you can login by leaving the
> password field empty. But in most cases the password is the password entered
> by the administrator upon installation. -which should be forbidden by law
> IMHO-
>
> The default location for the ColdFusion Administrator login pages are:
>
> http://servername[:8500]/CFIDE/administrator/index.cfm
>
>
>
> In multi-server mode the location can be:
>
>
>
> http://servername[:8300]/CFIDE/administrator/index.cfm
>
>
> *ColdFusion Markup Language (CFML)*
>
> Request variable
>
> <cfset Request.field_name1 = "value">
>
> <cfoutput>#Request.field_name1#</cfoutput>
>
>
> Client variables to tamper with.
>
> Request.somename
>
> Form.somename
>
> HTTP_REFERER
>
> HTTP_USER_AGENT
>
> Cookies
>
>
> CF queries are using the so-called param tags that can receive user
> supplied data through a query string or a form.
>
> <cfquery
>
>     name = "query name"
>
>     dataSource = "data source name"
>
>     ...other attributes...
>
>     SQL STATEMENT column_name =
>
>     <cfqueryparam value = "parameter value"
>
>         CFSQLType = "parameter type"
>
>         list = "yes|no"
>
>         maxLength = "maximum parameter length"
>
>         null = "yes|no"
>
>         scale = "number of decimal places"
>
>         separator = "separator character">
>
>     AND/OR ...additional criteria of the WHERE clause...>
>
> </cfquery>
>
>
> The cfqueryparam is generally secure because it utilizes a prepared
> statement, that is always binded as a string, which in term is nearly not
> exploitable. But, many ColdFusion applications do not use the cfqueryparam
> mainly because developers do not know about this, and also because this
> feature came only in to being, with later versions of ColdFusion. Let's go
> into what many CF developers generally are using instead, and how we can
> exploit it.
>
> *CF Database Query and CF SQL Injection.*
>
> The first thing we could try to successfully utilize SQL injection in
> ColdFusion, is to try to inject integer queries. This is important, because
> it allows us to inject a vector that doesn't need single quotes. However,
> even single quote escaping in ColdFusion is also flawed as I explain later.
> When we inject a vector into an expected integer we can easily bypass
> security. For example:
>
> <cfquery>
>
> SELECT * FROM USERS WHERE user_id = #Request.user_id#
>
> </cfquery>
>
>
> When we inject the user_id param, the query becomes like this:
>
> <cfquery>
>
> SELECT * FROM USERS WHERE user_id = 1 UNION SELECT password AS USERNAME FROM 
> USERS
>
> </cfquery>
>
>
> One big mistake in the ColdFusion architecture, is how Adobe forgot how
> MySQL escapes characters. ColdFusion escapes all single quotes by default
> with another single quote. You can call this a 'magic quote' behavior
> similar found in PHP. But, This method of injecting ColdFusion on MySQL is
> based upon the idea that in MySQL we can use a backslash to escape a single
> quote. Problem with ColdFusion is, that it adds another single quote while
> MySQL sees the already escaped single quote, and thereby successfully
> executes our injected query. For example:
>
> <cfset str = " \' OR 1=1-- "/>
>
> <cfquery>SELECT * FROM USERS WHERE name = '#str#'</cfquery>
>
>
> *This becomes:*
>
> SELECT * FROM USERS WHERE name =  '\'' OR 1 = 1 --'
>
>
> Which is a valid CF SQL injection through MySQL.
>
> One of the most dangerous functions is the preserveSingleQuotes() function.
> When this function is used, single quotes are no longer escaped. Leaving the
> application totally unprotected on every platform. For example:
>
> <cfset str = "INSERT INTO CMS (uid, txt, date_dubmitted) Values (#form.id#, 
> '#form.txt#','#form.date_submitted#')">
>
> <cfquery>
>
> #PreserveSingleQuotes(str)#
>
> </cfquery>
>
>
> *Another example:*
>
> <cfset str= "SELECT * FROM USERS WHERE username = '#form.username#'"/>
>
> <cfquery>
>
> #preserveSingleQuotes(str)#
>
> </cfquery>
>
>
> Also it can be used in a database output:
>
> <cfquery sql = "SELECT * FROM USERS WHERE NAME IN 
> (#preserveSingleQuotes(list_id)#)">
>
>
> If you want to protect your CF applications, here is a way to write a safe
> database query that makes use of the correct CFQUERYPARAM with the right
> data-type flags.
>
> Login Form:
>
> <cflogin>
>
>     <cfif NOT IsDefined("cflogin")>
>
>         <cfinclude template="loginform.cfm">
>
>         <cfabort>
>
>     <cfelse>
>
>         <cfif cflogin.name eq "admin">
>
>             <cfset roles = "user,admin">
>
>         <cfelse>
>
>             <cfset roles = "user">
>
>         </cfif>
>
>         <cfloginuser name = "#cflogin.name#" password = "#cflogin.password#"
>
>             roles = "#roles#"/>
>
>     </cfif>
>
> </cflogin>
>
>
> Process:
>
> <cfquery name="qSecurity"
>
>     datasource="UserRolesDb">
>
>     SELECT Roles FROM SecurityRoles
>
>     WHERE username=<cfqueryparam value='#cflogin.name#' 
> CFSQLTYPE="CF_SQL_VARCHAR"
>
>     AND password=<cfqueryparam value='#cflogin.password#' 
> CFSQLTYPE='CF_SQL_VARCHAR'
>
> </cfquery>
>
>
>
> <cfif qSecurity.recordcount gt 0>
>
> <cfloginuser name = "#cflogin.name#"
>
>     password = "#cflogin.password#"
>
>     roles = "#trim(qSecurity.Roles)#" >
>
> </cfif>
>
>
> *Information disclosure.*
>
> As we know, error messages are important. Especially error messages
> generated by database software we want to inject. This, is useful for
> obtaining information about table structures that can be a real time-saver
> for attackers. If the right information is available, attackers do not have
> to guess database tables and fields anymore, nor having to brute force them.
> Here is a snapshot of an actual error message generated by ColdFusion. I
> have never seen so much information regarding the site's structure, used
> database, table names, drivers, server setup and other information useful
> for attackers that those of ColdFusion.
>
> It almost says: Please Hack Me!
>
> Error Executing Database Query.
>
> [Macromedia][SQLServer JDBC Driver][SQLServer]Line 8: Incorrect syntax near 
> ''.
>
>
>
> The error occurred in 
> D:\JRun4\servers\Cfusion_Medium\cfusion-ear\cfusion-war\CFdata\xxxx.cfm: line 
> 11
>
>
>
> 9 :     LEFT JOIN VAKGEBIED ON ORGANISATIES.VAKGEBCD=VAKGEBIED.VAKGEBCD
>
> 10 :    LEFT JOIN LAND ON ORGANISATIES.O1LNDCD=LAND.LNDCD
>
> 11 : WHERE organisatie.orgid=#orgid#;
>
> 12 : </CFQUERY>
>
> 13 :
>
>
>
> SQL        SELECT * FROM ORGANISATIES RIGHT JOIN organisatie on 
> ORGANISATIES.ORGID=organisatie.orgid LEFT JOIN SOORT_ORGANISATIE ON
>
>
>
> ORGANISATIES.SOORTORGCD=SOORT_ORGANISATIE.SOORTORGCD LEFT JOIN ACRONIEM ON 
> ORGANISATIES.ACRCD=ACRONIEM.ACRCD LEFT JOIN VAKGEBIED ON
>
>
>
> ORGANISATIES.VAKGEBCD=VAKGEBIED.VAKGEBCD LEFT JOIN LAND ON 
> ORGANISATIES.O1LNDCD=LAND.LNDCD WHERE organisatie.orgid=3'';
>
> DATASOURCE       datastorexxx
>
> VENDORERRORCODE          170
>
> SQLSTATE         HY000
>
> Resources:
>
>
>
>     * Check the ColdFusion documentation to verify that you are using the 
> correct syntax.
>
>     * Search the Knowledge Base to find a solution to your problem.
>
>
>
> Browser        Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9) 
> Gecko/2006052906 Firefox/1.0
>
> Remote Address         xxx.xxx.xxx.xxx
>
> Referrer
>
> Date/Time      07-jul-08 00:33 PM
>
> Stack Trace
>
> at 
> xxxx.runPage(D:\JRun4\servers\Cfusion_Medium\cfusion-ear\cfusion-war\CFdata\xxxx.cfm:11)
>  at
>
>
>
> xxxx.runPage(D:\JRun4\servers\Cfusion_Medium\cfusion-ear\cfusion-war\CFdata\xxxx.cfm:11)
>
>
>
> java.sql.SQLException: [Macromedia][SQLServer JDBC Driver][SQLServer]Line 8: 
> Incorrect syntax near ''.
>
>         at macromedia.jdbc.base.BaseExceptions.createException(Unknown Source)
>
>         at macromedia.jdbc.base.BaseExceptions.getException(Unknown Source)
>
>         at macromedia.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown 
> Source)
>
>         at macromedia.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown 
> Source)
>
>         at macromedia.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown 
> Source)
>
>         at 
> macromedia.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown 
> Source)
>
>         at macromedia.jdbc.base.BaseStatement.commonTransitionToState(Unknown 
> Source)
>
>         at macromedia.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
>
>         at macromedia.jdbc.base.BaseStatement.commonExecute(Unknown Source)
>
>         at macromedia.jdbc.base.BaseStatement.executeInternal(Unknown Source)
>
>         at macromedia.jdbc.base.BaseStatement.execute(Unknown Source)
>
>         at 
> coldfusion.server.j2ee.sql.JRunStatement.execute(JRunStatement.java:212)
>
>         at coldfusion.sql.Executive.executeQuery(Executive.java:753)
>
>         at coldfusion.sql.Executive.executeQuery(Executive.java:675)
>
>         at coldfusion.sql.Executive.executeQuery(Executive.java:636)
>
>         at coldfusion.sql.SqlImpl.execute(SqlImpl.java:236)
>
>         at coldfusion.tagext.sql.QueryTag.doEndTag(QueryTag.java:500)
>
>         at 
> xxxx.runPage(D:\JRun4\servers\Cfusion_Medium\cfusion-ear\cfusion-war\CFdata\xxxx.cfm:11)
>
>         at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:152)
>
>         at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:349)
>
>         at coldfusion.filter.CfincludeFilter.invoke(CfincludeFilter.java:65)
>
>         at 
> coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:225)
>
>         at 
> coldfusion.filter.RequestMonitorFilter.invoke(RequestMonitorFilter.java:51)
>
>         at coldfusion.filter.PathFilter.invoke(PathFilter.java:86)
>
>         at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:69)
>
>         at 
> coldfusion.filter.BrowserDebugFilter.invoke(BrowserDebugFilter.java:52)
>
>         at 
> coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
>
>         at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
>
>         at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
>
>         at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
>
>         at 
> coldfusion.filter.RequestThrottleFilter.invoke(RequestThrottleFilter.java:115)
>
>         at coldfusion.CfmServlet.service(CfmServlet.java:107)
>
>         at 
> coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:78)
>
>         at jrun.servlet.ServletInvoker.invoke(ServletInvoker.java:91)
>
>         at jrun.servlet.JRunInvokerChain.invokeNext(JRunInvokerChain.java:42)
>
>         at 
> jrun.servlet.JRunRequestDispatcher.invoke(JRunRequestDispatcher.java:257)
>
>         at 
> jrun.servlet.ServletEngineService.dispatch(ServletEngineService.java:541)
>
>         at 
> jrun.servlet.jrpp.JRunProxyService.invokeRunnable(JRunProxyService.java:204)
>
>         at 
> jrunx.scheduler.ThreadPool$ThreadThrottle.invokeRunnable(ThreadPool.java:426)
>
>         at jrunx.scheduler.WorkerThread.run(WorkerThread.java:66)
>
>
>
> Many files in ColdFusion are password protected, but sometimes you can get
> lucky and locate files you are not supposed to see:
>
> /CFIDE/componentutils/cfcexplorer.cfc?method=getcfcinhtml&name=cfcname&path=/path/to/cfc/cfcname.cfc
>
> /cfcname.cfc?wsdl
>
> /config.xml
>
>
>
> *Aditional ColdFusion information.*
>
> Directory structure.
>
> \CF_ROOT\ or /CF_ROOT/
>
>
>
> wwwroot
>
>
>
> This is the default web root directory for the built-in web server.
>
> When running on other web servers, this directory contains only the WEB-INF 
> directory.
>
> This also can be useful to fingerprint if ColdFusion is it's default server 
> instead of IIS or Apache.
>
>
>
> bin
>
> cache
>
> cfx
>
> charting
>
> CustomTags
>
> db
>
> gateway
>
> jintegra
>
> jnbridge
>
> lib
>
> logs
>
> Mail
>
> META-INF
>
> registry
>
> runtime
>
> runtime/jre
>
> uninstall
>
> verity
>
>
>
> Client variables.
>
>
>
> Client.CFID
>
> Client.CFToken
>
> Client.HitCount
>
> Client.LastVisit
>
> Client.TimeCreated
>
> Client.URLToken
>
>
>
> Server variables.
>
>
>
> Server.ColdFusion.ProductName
>
> Server.ColdFusion.ProductVersion
>
> Server.ColdFusion.ProductLevel
>
> Server.ColdFusion.SerialNumber
>
> Server.ColdFusion.SupportedLocales
>
> Server.ColdFusion.AppServer
>
> Server.ColdFusion.Expiration
>
> Server.ColdFusion.RootDir
>
> Server.OS.Name
>
> Server.OS.AdditionalInformation
>
> Server.OS.Version
>
> Server.OS.BuildNumber
>
>
>
> Loops.
>
>
>
> <cfloop index = "LoopCount" from = "1" to = "5">
>
>     The loop index is <cfoutput>#LoopCount#</cfoutput>.<br>
>
> </cfloop>
>
>
>
> <cfloop file="c:\temp\file.txt" index="line">
>
>     <cfoutput>#line#</cfoutput><br>
>
> </cfloop>
>
>
>
> Arrays.
>
>
>
> <cfset x = ["mars","earth", "venus", "jupiter"]>
>
> <cfloop array=#x# index="name">
>
>     <cfoutput>#name#</cfoutput>
>
> </cfloop>
>
>
> *Conclusion.*
>
> ColdFusion is a very interesting platform for attackers. Since ColdFusion
> can run on many platforms, it's easy to imagine it weaknesses that come with
> a platform it runs on. IIS can be very dangerous in the case of SQL
> injection because of the so-called query stacking, where it is also possible
> to launch CMD shells, or create other havoc. Again, the problems of SQL
> injection are not solved by programmers which is still the fundamental
> problem.
>
> [1] http://www.adobe.com/products/coldfusion/
> [2] http://www.google.com/search?q=filetype:cfm
> [3] http://www.google.com/search?q=inurl:cfm?
>
>
>
> *[Ph4nt0m] <http://www.ph4nt0m.org/> *
>
> *[Ph4nt0m Security Team]*
>
>                *   [EMAIL PROTECTED] <http://blog.ph4nt0m.org/>*
>
> *          Email:  [EMAIL PROTECTED]
>
> *          PingMe:
> <http://cn.pingme.messenger.yahoo.com/webchat/ajax_webchat.php?yid=hanqin_wuhq&sig=9ae1bbb1ae99009d8859e88e899ab2d1c2a17724>
> *
>
> *          **=== V3ry G00d, V3ry Str0ng ===***
>
> *          === Ultim4te H4cking ===*
>
> *          === XPLOITZ ! ===*
>
> *          === #_# ===*
>
> *#If you brave,there is nothing you cannot achieve.#*
>
>
>
>
>
> >
>


-- 
BLOG: http://www.blogjava.net/baicker



--~--~---------~--~----~------------~-------~--~----~
 要向邮件组发送邮件,请发到 [email protected]
 要退订此邮件,请发邮件至 [EMAIL PROTECTED]
-~----------~----~----~----~------~----~------~--~---

回复