发新话题
打印

菜鸟找漏洞———渗透网站的“反思”

菜鸟找漏洞———渗透网站的“反思”

作者:樱花浪子[I.S.T]
  来源:http://www.1steam.cn
  申明:转载请注名版权,此文版权归1st和樱花浪子所有. !本文已发表黑客手册,转载请注明!

  事情起因是QQ上的一位朋友发过来一网站,说好象有漏洞,因为这位朋友是刚刚接触网络安全方面的,我接过来网址一看,真所谓漏洞百出呀,当然这样的网站是不会被小黑错过的,首页明显的被人挂了马。那就做做好事把这个马去掉吧!从入侵到得WEBSHELL不到三分钟。当然不是我的水平有多高,而是太多太多的……得到WEBSEHLL一看发现装有Srv-u,上传这个ASP版的提权工具还能提权。汗之。下面我们开始看看到底有什么漏洞。

  一、无处不在的注入

  在newsshow1.asp中的157行代码如下:

<
%
sql="select * from news where id="&Request("id") &#39;直接用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")  &#39;取得客户端提交的名字
   InsertCursor("content") =Request("content")&#39;取得客户端提交的内容
   InsertCursor.Update
&#39;   response.write InsertCursor("id")
&#39;   response.End
&#39;   InsertCursor.movelast
%>
<script language=Javascript>
<!--
alert("添加成功!");
window.location="newsAdd.asp"
-->
  上面是我自己标上去的,还是用Request直接取得用户提交的名字和内容。什么也没过虑,就会告诉添加成功了。见图三。

  三、经典的&#39;or&#39;=&#39;or&#39;

  我这个人一般发现注入漏洞就是先找后台,这次也不例外。没想到找到后台后,直接&#39;or&#39;=&#39;or&#39;具然进去了。在admin/login.asp(管理员登录页面)的第2行到13行代码如下:

<%
if Request("userID")<>"" then     &#39;如果管理员名不为空就执行SQL语句
sql="select * from users where userID=&#39;" & trim(request("userID"))               &#39;去除空格后取userID的值
& "&#39; and Password=&#39;" & replace(trim(request("password")),"&#39;","&#39;&#39;") & "&#39;"                 &#39;用replace函数过虑密码处的单引号
&#39;response.write sql
&#39;response.End
set rs = conn.Execute(sql)
if not (rs.eof or err) then
  代码略……
else
%>
  userID代表管理员用户名,Password是管理员密码。userID去空格直接取值,Password用了replace函数将单引号变成双引号。这样我们在管理员用户名的地方提交:&#39;or&#39;=&#39;or&#39;就变成:sql="select * from users where userID=&#39;or&#39;=&#39;or&#39; & "&#39; and Password=&#39;" & replace(trim(request("password")),"&#39;","&#39;&#39;") & "&#39;"
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     &#39;如果 FileSize > 0 说明有文件数据
fileName=file.FileName  &#39;获得文件名的值
file.SaveAs Server.mappath(formPath&filename)  &#39;保存文件         
end if

set file=nothing   
%>
<script language=Javascript>
<!--
alert("文件上传成功!");
window.location="addFile.asp"
-->
  如果FileSize > 0说明就会直接保存文件了,(当然我们不会传空文件了。)而且连文件名字都没有变动。见图五。

  最后总结一下,我找了半天也没找到这是什么程序,去GOOGLE搜索中文网站:“inurl:admin/default.asp”找到了几个类似的网站。留给比我还菜的朋友们自己研究吧。这是我接触网络安全方面第一次遇见的漏洞这么多的网站,希望能给菜菜朋友们带来帮助。欢迎朋友们去非安全的论坛和我交流技术。我的ID是樱花浪子。

TOP

发新话题