shopxp网上购物系统v7.4 SQL注入漏洞

date 2009年11月05日 | category 学习笔记| 坏人咖啡

问题文件:xpCatalog_xpDesc.asp,xpCatalog_xpsmall_Desc.asp
问题代码:

并没有对shopxpbe_id进行整形判断。下面在说说他的防注入系统。好像是网上的枫叶防注入。看代码吧:

这个防注入系统在网上貌似很火,但是他防的是有问题的。关键是这句,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值为空,于是就绕过了检测。
等等,为什么既然name不解码可以绕过检查而value就不能绕过呢?因为value的值取自Request(Fy_Cs(Fy_x)),这个服务器就会解码的。
程序怎么改进呢?只要能够得到客户端提交的数据是解码后的就可以了,把得到name的语句改为For Each SubmitName In Request.QueryString就可以了。”

下面说下利用:

构造如下地址:

交给工具 手动添加表名:shopxp_admin 和shop_admin(商业版的)
默认后台是 admin_shopxp 或者admin

所属分类: 学习笔记
Tags: , , ,


没有评论

暂无评论

RSS feed for comments on this post.

对不起,该文章的评论被关闭了!