危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2289 浏览18982472

简单脚本漏洞查找和常用技术回顾

小漏洞里学大知识——简单脚本漏洞查找和常用技术回顾

今天一个好朋友发来电邮,随便和他寒暄了几句后,听说他想给他们的工作单位找个简单实用的web程序,功能不用太多,看上去大方明了就行了,初步确定选用精才公司的程序,想叫我看看这个程序实不实用。

一、解析代码

是朋友的事,当然也就是我的事啦,义不容辞,来到官方网站看了下。

符合他的要求,下了套源代码,打开news_type.asp。首先有几个概念大家要理解一下,对与大家查找漏洞有关的。Request,这个是ASP程序中的一个内建对象,就是用来获取客户端信息的,有五种方法,而大家只要知道其中的三种就好:

1.Request.QueryString:取得客户端提交的信息。当Form以Get方法提交信息,或是直接在URL中提交变量值时,在服务器端接收数据时采用的就是这种方法。

2.Request.Form:同样也是取得客户端提交的信息,但它接收的是Form以Post方法提交的信息。

3.Request.Cookies:取得客户端浏览器的Cookies信息。Cookies大家一概都有所耳闻吧?指的是一些私人信息,如用户名、密码之类的信息。

但是有些程序员为了减少错误,对于前两种信息的获取,会采用Request来取得客户端提交的信息,这种方法,虽然可以包括Request.QueryString和Request.Form的提交信息,但如果过滤的不好,就会为我们服务。   

好了,如果对上面的几个基本概念了解了以后。

大家明白,产生注入的主要因素就是从容户端提交上去的变量没有经过replace()或instr()等函数的过滤,直接就执行了SQL操作。大家可以举一反三,在查找其他程序的漏洞用的差不多都是这些方法。

二、动手操作

下面要说的就是漏洞利用了,用工具?no no no,我不提倡这种方法,许多人说只要会用工具就好了,编写工具就是高手的事情了,我觉得这话说的不对,工具应该是给高手们用的,因为他们知其然,还知其所以然。大家们就不一样了,就算我们不会编程序,我们也应该知道工具的运行原理,下面就和我一起来吧,顺便写下来,以备后查,就拿他的官方发布网站做测试吧。

1、构造地址

判断是否有admin这个表(select count(*) from [admin]>0//原理就是判断admin这个表中的记录数量是否大于1,如果有一条以上返回真,反之为假,就会报错。返回正常,说明存在这个表。

2、猜测字段

继续构造语句,判断admin表中是否存在“user”字段,返回为真,从而确定存在“user”这个字段,返回正常,就是继续猜解admin表中存在的字段,返回错误,说明没有“password”这个字段,返回。

我们换成别的,返回为真,从而确定admin表中存在一个pw字段,判断管理员的帐户信息的长度,返回正常。

直到当猜到11位时返回错误,那么说明管理员帐号的长度是11位。下面继续猜解管理员帐号的具体信息。

判断管理员账号第一位的ascii码的范围,页面返回正常,为真,说明第一位是大于100的。

同理,正常,说明账号的第一位的ascii的范围是在100到150之间的。

我们再猜解管理员账户信息的第二位,大家注意格式,和猜解第一位时候的不一样!

大家可以用这个中折半法继续猜解下去,直到猜出管理员的账号为信息为止。方法以此类推,我就不写出来了。我猜解出来的账号是:sunrisecorp。

3、刺探密码

接下来的不用说就是对密码的刺探,原理和对账号信息的猜解原理大概是一致的,我只把不同的地方写出来。

接下来进行构造语句,猜解出来的密码的长度最后猜解出来的长度是8位。

继续构造语句,同理,继续用折半法猜解管理员密码的详细信息。最后我猜解出来的密码是25175877。

大家这个时候可以用工具来跑一下看看,我们猜解的是否正确,哈哈,是否有一种成就感呢?

我们登陆后台,输入得到的账号和密码,顺利进入,直接找上传的地方,如果没上传的地方就不好玩了,我们的目的是要拿到shell,我们来看,点发布产品,就有上传的地方,直接上传. sp的后门就可以了。刚开始我还传的是改成.jpg的shell,然后还找不到数据库备份的地方,最后我才发现,后台根本没有对文件类型的判断,郁闷!

成功拿到了权限。

三、漏涸修补

我们不能光会利用,再来说说对漏洞的修补。针对我上面说的,有这一句id='”&request("id")&"',加入一个replace()函数对单引号进行过滤,修改后的语句为:id=”’&replace(request("id"),"","")&"',当再出现非法提交是,通过函数就能进行相应的过滤,我们可以根据自己的需要,来增加需要过滤的关键字符;还另一个方法就是在引入sql前判断id长度,如果不符合要求,就不执行下面的操作,方法很多,我就不一一写出来了。

下面当然就是把程序修改好发给朋友了。

这样从一套程序的漏洞锻炼了自己,复习了知识。希望大家以后在遇到这样的情况时候能和危险漫步一样,多动手,多动脑,那你的shell也就多多。 

相关推荐