随风而飞 2007-3-31 10:16
菜鸟找漏洞———渗透网站的“反思”
作者:樱花浪子[I.S.T]
来源:[url]http://www.1steam.cn[/url]
申明:转载请注名版权,此文版权归1st和樱花浪子所有. !本文已发表黑客手册,转载请注明!
事情起因是QQ上的一位朋友发过来一网站,说好象有漏洞,因为这位朋友是刚刚接触网络安全方面的,我接过来网址一看,真所谓漏洞百出呀,当然这样的网站是不会被小黑错过的,首页明显的被人挂了马。那就做做好事把这个马去掉吧!从入侵到得WEBSHELL不到三分钟。当然不是我的水平有多高,而是太多太多的……得到WEBSEHLL一看发现装有Srv-u,上传这个ASP版的提权工具还能提权。汗之。下面我们开始看看到底有什么漏洞。
一、无处不在的注入
在newsshow1.asp中的157行代码如下:
<
%
sql="select * from news where id="&Request("id") '直接用Request取得ID值
set rs=conn.execute (sql)
if not rs.eof or err then
%>
直接用Request取得ID值,什么也没过虑,就执行SQL语句了,这样就能执行我们的“恶意”的SQL语句了。相信菜菜朋友们也能看懂吧!见图一。
二、比较流行的跨站
在首页有个给访问量发布信息的,文件为newsadd.asp。打开后发现处理文件为saveNewsAdd.asp。图二。直接来到这个文件看一下第3行到23行的代码:
<%
dim sql
Set cmdTemp = Server.CreateObject("ADODB.Command")
Set InsertCursor = Server.CreateObject("ADODB.Recordset")
cmdTemp.CommandText = "SELECT top 1 * FROM news order by id desc"
cmdTemp.CommandType = 1
Set cmdTemp.ActiveConnection = conn
InsertCursor.Open cmdTemp, , 1, 3
InsertCursor.addnew
InsertCursor("title") =Request("title") '取得客户端提交的名字
InsertCursor("content") =Request("content")'取得客户端提交的内容
InsertCursor.Update
' response.write InsertCursor("id")
' response.End
' InsertCursor.movelast
%>
<script language=Javascript>
<!--
alert("添加成功!");
window.location="newsAdd.asp"
-->
上面是我自己标上去的,还是用Request直接取得用户提交的名字和内容。什么也没过虑,就会告诉添加成功了。见图三。
三、经典的'or'='or'
我这个人一般发现注入漏洞就是先找后台,这次也不例外。没想到找到后台后,直接'or'='or'具然进去了。在admin/login.asp(管理员登录页面)的第2行到13行代码如下:
<%
if Request("userID")<>"" then '如果管理员名不为空就执行SQL语句
sql="select * from users where userID='" & trim(request("userID")) '去除空格后取userID的值
& "' and Password='" & replace(trim(request("password")),"'","''") & "'" '用replace函数过虑密码处的单引号
'response.write sql
'response.End
set rs = conn.Execute(sql)
if not (rs.eof or err) then
代码略……
else
%>
userID代表管理员用户名,Password是管理员密码。userID去空格直接取值,Password用了replace函数将单引号变成双引号。这样我们在管理员用户名的地方提交:'or'='or'就变成:sql="select * from users where userID='or'='or' & "' and Password='" & replace(trim(request("password")),"'","''") & "'"
OR在逻辑运算中有一个为真则为真。这样就不会执行后面的AND了。当然他后面用replace过虑单引号是什么作用也没有的。因为他判断管理员用户名是否为空,密码的地方没什么判断,我们密码处什么也不用填。见图四。
四、后台上传漏洞
如果只是进后台的话也不至于我三分钟就得到WEBSEHLL,因为我直接在上传的地主传一个ASP马儿,就直接告诉我成功了。下面看下savefile.asp(处理上传的文件),3行到19行代码如下:
<%
set upload=new upload_5xSoft
formPath=formPath
set file=upload.file("file1")
formPath="../file/"
if file.FileSize>0 then '如果 FileSize > 0 说明有文件数据
fileName=file.FileName '获得文件名的值
file.SaveAs Server.mappath(formPath&filename) '保存文件
end if
set file=nothing
%>
<script language=Javascript>
<!--
alert("文件上传成功!");
window.location="addFile.asp"
-->
如果FileSize > 0说明就会直接保存文件了,(当然我们不会传空文件了。)而且连文件名字都没有变动。见图五。
最后总结一下,我找了半天也没找到这是什么程序,去GOOGLE搜索中文网站:“inurl:admin/default.asp”找到了几个类似的网站。留给比我还菜的朋友们自己研究吧。这是我接触网络安全方面第一次遇见的漏洞这么多的网站,希望能给菜菜朋友们带来帮助。欢迎朋友们去非安全的论坛和我交流技术。我的ID是樱花浪子。