后使用快捷导航没有帐号?
三谈关于%5c暴库
摘要: 作者:zhouzhen 来自:
今天在黑基又看到了关于%5c暴库的文章。呵呵,这招真的很管用,大概10个网站里会有一个会暴库吧。。
作者:zhouzhen 来自:
今天在黑基又看到了关于%5c暴库的文章。呵呵,这招真的很管用,大概10个网站里会有一个会暴库吧。。
关于这个漏洞。绿盟有相关的资料。
Microsoft IIS CGI文件名错误解码漏洞
发布日期:
CVE CAN ID:CVE-
受影响的软件及系统:====================- Microsoft IIS 4.0 - Microsoft IIS 5.0
未受影响的软件及系统:======================- Windows IIS 4.0 (sp6/sp6a 没有***其他新的hotfix)
综述:======NSFOCUS安全小组发现微软IIS 4.0/5.0在处理CGI程序文件名时存在一个安全漏洞,由于错误地对文件名进行了两次解码,攻击者可能利用这个漏洞执行任意系统命令。
分析:======IIS在加载可执行CGI程序时,会进行两次解码。第一次解码是对CGI文件名进行http解码,然后判断此文件名是否为可执行文件,例如检查后缀名是否为".exe"或".com"等等。在文件名检查通过之后,IIS会再进行第二次解码。正常情况下,应该只对该CGI的参数进行解码,然而,IIS错误地将已经解码过的CGI文件名和CGI参数一起进行解码。这样,CGI文件名就被错误地解码了两次。
通过精心构造CGI文件名,攻击者可以绕过IIS对文件名所作的安全检查,例如对"../"或"./"的检查,在某些条件下,攻击者可以执行任意系统命令。
例如,对于'\'这个字符,正常编码后是%5c。这三个字符对应的编码为: '%' = %25 '5' = %35 'c' = %63
如果要对这三个字符再做一次编码,就可以有多种形式,例如: %255c %%35c %%35%63 %25%35%63 ...
因此,"..\"就可以表示成"..%255c"或"..%%35c"等等形式。
在经过第一次解码之后,变成"..%5c"。IIS会认为这是一个正常的字符串,不会违反安全规则检查。而在第二次被解码之后,就会变成"..\"。因此攻击者就可以使用"..\"来进行目录遍历,执行web目录之外的任意程序。
测试方法:==========例如,如果TARGET存在一个虚拟可执行目录(scripts),并且它与windows系统在同一驱动器上。那么提交类似下列请求:
http://target/scripts/..%5c..%5cwinnt/system32/cmd.exe?/c+dir+c:\
就会列出C:\的根目录。
当然,对于'/'或者'.'做变换同样可以达到上面的效果。 例如:"..%252f", ".%252e/"...
注意:攻击者只能以IUSER_machinename用户的权限执行命令。
解决方法:==========1、如果不需要可执行的CGI,可以删除可执行虚拟目录,例如 /scripts等等。 2、如果确实需要可执行的虚拟目录,建议将可执行虚拟目录单独放在一个分区 3、将所有可被攻击者利用的命令行工具移到另外一个目录中并禁止GUEST组访问。
厂商状态:==========& 我们将这个问题通报给了微软公司。 & 微软告知重现了这个问题 & 微软提供了补丁程序供测试,测试发现此问题已被解决 & 微软请求我们延迟2个星期发布公告以等待更完善的测试 & 微软告知我们还须再推迟一个星期发布 & 微软已就此发布了一个安全公告(MS01-026)以及相应补丁
您可以在下列地址看到微软安全公告的详细内容:
/technet/security/bulletin/ms01-026.asp
补丁程序可以在下列地址下载:
. Microsoft IIS 4.0: /Downloads/Release.asp?ReleaseID=29787
. Microsoft IIS 5.0: /Downloads/Release.asp?ReleaseID=29764
呵呵。虽然这个我们这个漏洞呵暴库关系不是很大, 但是明眼人还是看的出相关的地方,IIS 二次解码。大家知道在 url中 "\" 和 "/"是一样的,也就是说 /abc/123.asp?id=5 和 /abc\123.asp?id=5 是一样的。
而 /abc%5c123.asp?id=5 经过一次解码后变成 /abc\123.asp?id=5 这里是不会出错的。而 经过 IIS 二次解码后就变成 /abc%5c123.asp?id=5, 如果数据库连接文件用的相对路径的话。HOO, 找不到数据库文件,当然就出错了。还很老实呢,连物理路径都出来了。大家看。
Microsoft JET Database Engine 错误 ''
'D:\wwwroot\hell\wwwroot\data\abc.asp'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。
/blog/conn.asp,行29
这个是我暴 Oblog 暴出来的,这个月的黑防大家都有看吧。。(晕倒,早知道我也去投稿了。我发现的比他早多了,郁闷。)
很多人都在分析成功的条件,就象itbbs里的人讨论的一样。(itbbs最近我怎么上不去啊,知道告诉偶.)
sykkk 认为:
1,是数据库连接中没有加入容错代码 所以导致错误不能跳过而活生生的把数据文件连接暴出来
2, 对方的IIS没有关闭错误提示 只要关了错误提示就算你怎么暴也没有用
3,不一定要2级目录 但是肯定的是一级目录是绝对不成功的 要是你成功了欢迎拿出来给大家分享 他文章说的自己够造个noexists/..%C的2级目录 个人认为应该是错误的 至少我没有成功过 有成功的欢迎留下网站测试
4,还有就是 要成功一定要调用到数据库 不一定是5c1.asp?id=1 这种类别的 只要是提交或者检测数据的基本都可以 非常多的六合采网站都是采用/XXX/CHECK.ASP来认证 找到认证位置 直接/XXX%5CCHECK。ASP同样可以达到 暴库的目的
其实我们 XST的老大ToToDoDo说的必要条件他忘了,数据库要相对路径,绝对路径是暴不出来的。还有我补充一点 应该是 IIS 4.0 或者 IIS 5.0 ,IIS 6 应该是不行了。
关于二级目录,我同意sykkk的看法,有的人说一定是二级目录,呵呵,我可以告诉大家那是错误的。应该是最靠近的asp文件的那个 "/"改成"%5c", 只有有调用数据库都有可能暴库。哈哈,还有当然对方要没有屏蔽错误信息,要不然你是肯定看不到di
总结:%5c暴库成功条件
1. 对方服务器用的是 IIS 4.0 或 IIS 5.0, 并且没有屏蔽错误信息。
2. 是数据库连接中没有加入容错代码 所以导致错误不能跳过而活生生的把数据文件连接暴出来 (On Error Resume Next)
3.应该是Microsoft JET Database Engine 方式
4. 数据库文件调用用的是相对路径!!
不一定要求是二级目录。三级也是可以的(我有成功过), 二级目录反倒没成功,呵呵。还有构造二级目录,我是没成功过,嘿嘿,应该是错误的。:)
随便也告诉大家,aspx %5c 也有文章的,运用也很巧妙,想知道就知道google吧。^_^
个人见解,欢迎大家批评指正。
特别推荐:欲深入学习电脑维护、网络编程与安全攻防,请点击这里
,免费学VIP公开课、论坛与QQ群技术交流,黑基14年技术经验,让您少走弯路、事半功倍!
声明:本文搜集整理自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,请我们一起为维护良好的互联网秩序而努力,谢谢!联系方式见网站首页右下角。您所在的位置: &
利用%5c绕过验证
利用%5c绕过验证
blog.csdn.net
说到%5c,你是不是想起了当前流行的那个%5c暴库漏洞,呵呵,本文就是对%5c利用的探索(呵呵,当然有我提出的新东东,或许对你有帮助哦^_^)。
说到%5c,你是不是想起了当前流行的那个%5c暴库漏洞,呵呵,本文就是对%5c利用的探索(呵呵,当然有我提出的新东东,或许对你有帮助哦^_^)。
好,我们先追根溯源,找到那个漏洞的老底。看看绿盟2001年的漏洞公告:_bug&do=view&bug_id=1429"&http://www.nsfocus.net/index.php?act=sec_bug&do=view&bug_id=1429N年以前利用这个漏洞可以实现目录遍历,虽然微软出了补丁,不过好像补丁是用来限制iis只能访问虚拟目录的,所以漏洞还是存在,只不过利用方式变了。对iis来说,提交一个含有%5c的url能够找到文件,但是该文件里以相对路径引用的其他文件却找不到了(%5c是\的url编码,iis跳转到上一级目录去找,当然找不到;头晕了吧,哈哈,我也头晕啊)。
后来这个漏洞就被牛人挖掘出来了,也就是传说中的%5c暴库:由于连接数据库的文件引用的相对路径,提交%5c找不到文件,所以导致出错,iis就会老老实实的说出数据库的路径(不明白?找google)。
一个偶然的机会我发现还可以利用%5c绕过asp的验证;当我们暴库失败的时候不妨试试。
废话少说,看下面的代码:
&!--#INCLUDE file="conn.asp" --&&%guest_user=trim(request("guest_user"))guest_password=trim(request("guest_password"))Set rs= Server.createObject("ADODB.Recordset")sql="select * from admin where id=1" rs.open sql,conn,3,2readuser=rs("guest_user")readpassword=rs("guest_password")if readuser&&guest_user or readpassword&&guest_password thenresponse.write "请输入正确地管理员密码!"response.endelsesession("admin")=1 '登陆后写入seesion中保存response.write("登陆成功,请返回信息页")end if%&
看到没有,要想通过验证必须让数据库里的用户名密码与提交的一致;想到什么?让我们再看看数据库连接文件代码:
&%on error resume nextset conn=server.createobject("adodb.connection")DBPath = Server.MapPath("guestbook.asp")conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath%&
啊,有容错语句不能暴库!等等,如果提交%5c数据库找不到,由于容错,所以程序会继续执行,那么说来从数据库得到的用户名密码皆为空(想想有时暴库失败是不是看到空空的框架,因为数据都是空嘛),哈哈,这样我们就绕过验证了!
知道怎么做了吧,把登陆页面保存到本地,修改提交的url,把最后一个/改成%5c,用户名密码用空格(有的程序会检查用户名密码是否为空,空格会被程序过滤),提交,就ok了。
诶,各位不要以为我自己没事写段代码来捣鼓,实际上这个是我们学校一个高手做的留言板程序,就挂在学校的主页,呵呵。
既然弄懂了原理,当然要找实际漏洞啦,自然是拿大名鼎鼎的"洞"网论坛开刀。不过失败了,因为它的数据库连接文件里有这么一段:
If Err Thenerr.ClearSet Conn = NothingResponse.Write "数据库连接出错,请检查连接字串。"Response.EndEnd If
数据库找不到程序就结束了,呵呵,空欢喜一场。
接着又去down了bbsxp论坛,打开数据库连接文件,晕,根本没有容错语句;呵呵,不过可以暴库哦。
我又不是BT,所以不去找事了,写篇文章,算是给各位高手提供资料吧。
总结一下这个攻击方法成功的条件:1、数据库连接用的相对路径且仅有简单的容错语句;2、服务器iis版本为4或5;3、程序里不检查空字符或者检查时不过滤空格而比较时过滤空格;4、程序不能位于一级目录
至于防范,呵呵,既然攻击条件知道了,防范措施自然也出来了^_^
关于的更多文章
Kubernetes是由谷歌开源的Docker容器集群管理系统,为容器化的应
随着云计算、物联网、大数据、移动互联网的大发展,你应该知道这些。
讲师: 129人学习过讲师: 1926人学习过讲师: 1767人学习过
本专题中,51CTO安全频道集合了2014年至今的关于互联
从14年到现在短短一年的时间,小米、携程、网易、1230
什么样的防火墙才可以真正称为下一代防火墙(NGFW)?面
SQL(结构化查询语言)是数据库系统的通用语言,利用它可以用几乎同样的语句在不同的数据库系统上执行同样的操作,在数据库系统的
51CTO旗下网站