搜档网
当前位置:搜档网 › webshell脚本asp攻防知识总结(最新)

webshell脚本asp攻防知识总结(最新)

ASP脚本攻防手册

一、技术背景简介

Webshell交流群:231183790

随着互联网络的飞速发展,各种各样的大小网站不断地涌现,在这些大小网站中,动态的网站以其实用性、多样性占据了绝对的优势。

在动态网站中,站长多是以ASP、PHP和JSP脚本为系统架设的。从目前国内的情况看,ASP系统因其易用性,兼容性(也不排除微软垄断的原因),再加上网上ASP源码的丰富,深受各个站长青睐,这一点通过搜索可以很清楚地显示出来。(如图1、2)是分别用google和百度搜索ASP系统的常见关键字.asp?id=1的结果。

正是由于ASP系统在互联网上广泛的应用,针对ASP系统的脚本攻击最近闹得是红红火火。在这些攻击中,攻击者多是利用注入、暴库、旁注、cookies欺骗等手段获取管理员的权限,然后通过后台取得webshell控制整个站点,继而通过webshell提升权限获取服务器管理权限。

小知识:

什么是webshell?webshell就是一个相应脚本语言编写成的,具有在线编辑、删除、新增文件、执行程序及SQL语句等功能的脚本文件,如著名的海洋顶端就是这样一个文件。(如图3所示)

脚本攻击之所以会闹得红红火火,正是因为这门技术掌握简单,又加之许多傻瓜化的工具的出现,深受广大菜鸟的喜爱,同时也是各牛人们在服务器系统漏洞越来越少的今天入侵的另一妙法。本书通过攻防两方面的详细讲解及一些防范工具的安全问题,加上本人学习中的一些心得体会,力求让广大菜鸟们对脚本攻击技术有一个全面的了解,希望广大菜鸟们能喜欢。因芒果我技术有限,其中有什么错误还望牛人们指正。

二、攻击篇

俗话说得好,知已知彼,百战不殆。有攻才有防,现在我就带领大家走进脚本攻击之旅,相信大家看完这部份后也能使众多的ASP站点在你面前哄然倒塌哦!

好了!先来看我们攻击的总目的,那就是获取webshell,然后提权!

废话少说,下面我们正式开始我们的脚本攻击之旅!

(一)暴库

一般而言,我们要获取一个站点的shell,必须先获得对方的后台管理权限,要获得对方的管理权限当然先要得到对方的管理员用户各种密码了!得到对方管理员用户各种密码的方法有很多,最方便的当数暴库了。

常见的暴库方法有conn.asp法和%5C大法,不知道是什么东东啊?没关系,往下看你就知道了。

我们先从conn.asp说起,conn.asp是一个很古老的暴库方法,

它是通过直接访问数据库连接文件conn.asp使服务器产生错误,通过服务器返回的错误信息提示暴出数据库地址的。(如图4、5)所示就是用conn.asp分别暴出动力系统用户和管理员数据库的例子。

小知识:什么是数据库连接文件conn.asp。数据库连接文件是对数据库调用的一个文件,里面包含有被调用数据库的路径及数据库名等,如调用的是SQL数据库,则还会含有SQL连接用户名和密码等内容。另外,数据库连接文件并不都是conn.asp的,有的系统可能会用其它名字,但大多数是用conn.asp的,这里我们只是用conn.asp代替类似文件。

直接访问conn.asp为什么能暴出数据库地址呢?那是因为conn.asp与调用文件相对路径出错了。

小知识:什么是相对路径,绝对路径?

相对路径就是相对于服务管理web根目录的路径,如服务器的web根目录为D:\wwwroot\,这个目录有一个inc目录,那么我们在访问inc目录时只须在浏览器中输入www.×××.com/inc而不用输入www.×××.com/www.root/inc,这个inc就是相对于wwwroot为根目录的一级目录,而在这里这个inc的绝对路径为D:\wwwroot\inc,为二级目录。

这样读可能大家会不太明白。我们还是再来看前面的动力系统,动力的conn.asp是放在根目录下的inc目录运行的,而许多调用conn.asp的文件都是在根目录下运行的,因此,考虑到执行目

录的不同,conn.asp中数据库的相对地址是写成―数据库所在目录/数据库名‖的,我们来看动力默认的conn.asp代码,其中一句表示的就是数据库的路径。当conn.asp被根目录下的其它文件调用时,其连接的是根目录中data目录下的*.mdb文件,而当我们直接访问inc目录下的conn.asp时,根据conn中的内容,服务器会去请求连接inc目录下没有data目录,相对路径就变成了inc/data/ 。因为inc目录下没有data目录和文件,服务器当然会报错了,图5中的错误提示内容。

很明显,它说的是inc下的data\*.mdb不是有效路径,而inc 是我们当前所在的目录,所以我们只须把inc后的路径换成相对路径贴到web根目录就是数据库的路径了,这里我们得到的数据库路径为www.×××.com/dada/*.mdb,直接访问这个地址,看是不是可以直接下载了啊(如图6所示)。

下面我们再来看%5C大法。

对一些网站,我们只需要把站点url的最后一个―/‖改为%5C 就能暴出站点数据库(如图7)所示就是用这种方法暴出的数据库。

为什么%5C大法能暴出数据库地址呢?开始我也不是很明白,但后来参考了一下相关的文章,自己弄了一下IIS设置,大致地明白了%5C暴库的原理。

要明白为什么%5C大法能暴库首先要明的%5C代表的是什么东东。其实,%5C就是16进制代码中的―\‖,但如果我们直接在

浏览器中提交―\‖,IE会自动把―\‖转换为―/‖,而提交―%5C‖是不会被转换的,最后%5C已经编译仍是表示―\‖的意思。为什么遇到―\‖就能暴出数据库呢?还记得我说conn.asp暴库时最初是怎么说的吗?conn.asp暴库是相对路径出错,IIS报错信息就暴出了站点数据库。而%5C就是绝对路径出错而引起暴库的。

一般地,在conn.asp中都会有这么一个语句:

dbpath=server.mappath(―data/data.mdb‖),其中server.mappath的作用就是把相对路径转换为绝对路径,只有经过转换,服务器才能正确读写数据据。

server.mappath读取的绝对路径的方法是这样的,假设IIS根目录为D:\wwwroot,在这个目录下有一个bbs文件夹,一套ASP 论坛系统就放在这个文件夹中,该论坛系统的数据库路径为data/data.mdb,那么server.mappath读取的路径就为IIS根目录+相对路径,即D:\wwwroot\bbs\data\data.mdb.

而IIS还有一个特殊的功能,就是虚拟目录。还是上面的例子,不过这次bbs目录还在D:\wwwroot下,而是在E:\bbs,但通过IIS的虚拟目录设置,我们仍能把bbs视为是在wwwroot下的。不过这时的目录指向的是一个物理路径,IIS为了解决虚拟目录也能正常访问的问题,优先查询了每个目录是否指向了一个物理路径,而这种查询是以―\‖做为标志的。

现在我们可以知道%5C暴库的原理了。当IIS遇到了%5C,即是―\‖时,IIS就会以为遇到了一个虚拟目录,便停止向上解析

了。如果网站的数据库是在D:\wwwroot\bbs\data\data.mdb,而遇到―\‖后就会被解析为D:\wwwroot\data\data.mdb,因为wwwroot下没有data文件夹和data\data.mdb文件,所以IIS就会报错,我们的目的就达到了。

下面是暴库过程中的一些常见问题及解决方法。

1、暴库时并不显示×××错误,而是Http500错误。

这个问题吗……其实很简单,那是你自己没有对IE进行设置所致。打开IE,到工具→internet选项→高级处把显示友好的http 错误信息前的―√‖去掉,应用后刷新页面看看,数据库地址出来了吧?(如图8)

2、暴出的数据库是以.asp结尾的,下载不了。

呵呵,其实.asp的数据库也是可以下的,我们只须将数据库地址复制下来,用网际快车等工具就可以下载了。不过,有的数据库中专门建了一个防下载的表,里面写了一条错误的ASP的语句,一般是<% nodownload%>,这时如果把数据库改为asp后缀的就下不了了。(如图9、10)

3、爆出的数据库中含有―#‖号,下载不了。

这个吗,也是可以解决的。还记得说%5C暴库原理时说过%5C其实是―\‖的16进制代码吗?同样的,我们也可以用―#‖的16进制代码%23代替―#‖,这样数据库不就可以下载了吗?(如图11)。

4、ASP的数据库下载回来后无法打开或下载回来的数据库

打开要密码。

ASP的数据库当然无法打开了,你只须把它的后缀改为mdb 就可以了啊!如果打开数据库要密码可以找一些ACCESS密码破解的工具,ACCESS的密码是很好破的。

5、我在网吧上网,没ACCESS怎么打开数据库?

可以用辅臣数据浏览器打开。

6、我遇到了一个超BT的网站,数据库中管理员密码全是16/32位无规律的密码,而且我一个个输入后都说我的密码不对,怎么回事啊?

晕绝,那16/32位的密码是经md5加密的,我们可以用一个md5破解工具把密码还原(如图12),不过md5可不是那么好破的东东哦。

7、数据库明明是.mdb的我却下载不了。

这个问题在非安全第5期提过,这时你可以用工具下载试试,如果还不行那就是可能是数据库是位于虚拟目录中的,那就没办法了。

8、我用%5C暴库显示―处理url错误,请与系统管理员联系‖,用conn.asp暴又一片空白。

用conn暴库一片空白是因为conn中加了容易错语句,而显示―处理url错误,请与系统管理员联系‖则是服务器屏敝了错误信息显示,这时暴库就没有用了。

(二)注入

在众多针对脚本系统的攻击中,注入可谓是闹得最红火的攻击手段了。那么什么是注入攻击呢?来自官方的说法是:―当应用程序使用输入内容来构造动态SQL语句以访问数据库时,会发生SQL注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生SQL注入攻击。SQL注入可能导致攻击者能够使用应用程序登录在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。‖

目前引起SQL注入的原因主要是程序员在编写帐脚本程序时对特殊字符过滤的不完全引起的,因为一个脚本系统中文件众多系统开发人员不可能每一个文件都考虑得十分周全,这样使我们有机可趁了。加上注入攻击的易学易用性,使得最近的注入攻击成风。

说了这么多还没玩过注入攻击的朋友们是不是跃跃欲试了呢?好,下面我就带领大家开始我们的注入之旅。

(1)工具篇

由于注入攻击的兴起,越来越多的注入攻击工具也随之出现了,而且这些工具也越来越傻瓜化,深受我们菜鸟的喜爱。下面我们就先讲讲怎么利用工具来实现注入攻击吧。

注入攻击的工具有很多种,这里我推荐大家用小竹的NBSi2,教主的HDSi和阿D的注入工具以及小榕的wedtwis图形版,这几种工具的界面分别如图13-16所示,下面我将主要以

N BS i2进行讲解,其它几个工具的使用也是类似的,大家会用NBSi2就可以了。

下载NBSi2后我们需要把NBSi2文件夹中system32内的文件复制到系统文件夹的system32内,win9X的可以放到system内,运行NBSi2登录后,我们就可以看到图13所示界面。这个界面是注入分析界面,如果我们知道一个注入点就可以在注入地址处填入注入点的url。现在我们不知道哪个地址可以注入,我们就可以来到注入扫描界面(如图17),在扫描地址那里我们填上欲扫描网站的url选全面扫描,然后点开始扫描,不一会下面就会列出可能存在的注入地址和注入的可能性高低如(图18)。

小技巧:如果用NBSi2扫描时扫www×××.com扫不到或扫到的全是可能性低的注入点,那么我们可以试着扫www×××.com/××.asp?id=××,这时你可能会得到一个注入可能性高的注入点。

我们选择一个注入可能性高的注入点,这个注入点的url会出现在下方的方框中(如图19),点方根旁的―注入分析‖,我们就会来到注入分析界面。开始分析后不久我们就可以得到这是一个数字型+ACCESS的注入点(如图20)我们在表名的大方框下点击开始猜解,这时会单出一个提示(图21)不管它,确定,不一会就会猜出表名,选择要猜解的表名,一般是admin,然后用类似的方法猜出列名,同时选中要猜解的列,用类似的方法就可以猜出列中的数据了。(如图22)就是我猜的管理员用户和密码。

当然得到的密码也可能是经MD5加密过的,这时我们就要破解之后才能用了。只得到用户名和密码如果不知道后台地址也是没用的。那么我们就对该站的后台进行扫描吧。NBSiZ虽说也带有扫描功能,但因为它的字典不够强大,这里就以HDSI为例了(如图23)所示,打开HDSI后选择―后台地址扫描‖,在扫描地址处填上站点url http://www.×××.com,然后点开始扫描,不一会就会在中间的框中迅速闪过被扫描的地址,地址后面有一个用中括号括起来的数字,404表示页面存在,403表示禁止访问,500表示页面错误,200表示页面存在,302表示页面有转向,如果我们直接用浏览器访问上进几种情况的页面会出现图24-28所示的页面。

扫描结束后,HDSi会把可能存在的后台地址列到下方的框中(如图29),如果没有扫描后台则会列出你所填的扫描地址(如图30)。

好了,找到后台我们就可以用得到的用户和密码登录后台管理了,至于进了后台除了删文章发发公告和来吓吓管理员还有什么用,我们后面再说。

上面说的是针对ASP+ACCESS的注入,其实注入攻击最好玩的还是SQL注入,跟ASP+ACCESS的注入一样,ASP+MSSQL的注入在经过NBSi2的扫描→检测后也可以直接去读数据库的信息,但对SQL的注入而言,这么做显然是不见诱惑的,因为SQL 的注入我们可以做更多的事。

在检测到一个网站有SQL的注入点时,NBSi2通常出现(如图31)所示的界面,我们注意看这个界面ACCESS注入时的不同,它在上面多了一个小框,上面写出了当前的数据库名,连接帐号及权限等信息。在这里我遇到我是Sa权限,比系统管理员权限还大!现在我们不去扫用户数据去干什么呢?当然有得玩了!我们先用NBSi2的SQL弱口令扫描功能看看(如图32),这次我很幸运,遇到了台sa连接且口令为空的扒器,马上搬出SQL连接器吧,(如图33)所示,我们填上连接IP,用户名Sa,密码为空,好了,连上去了,赶快执行命令把自己升为系统管理员吧!

然后再开个3389或telnet,呵呵,恭喜你,又抓到一员小鸡了。

如果没有SQL弱口令怎么办呢?没问题我们还可以用NBSi2的另一个功能执行我们的命令。

虽然现在遇到的服务器SQL没有弱口令,但用NBSi2扫得的结果中我们知道当前用户是具有Sa权限的,这时我们可以用NBcommander命令执行器执行命令。选择―扫描及工具‖→―Nbcoommandaer命令执行器‖,如图33所示,然后来到了(图34)所示的NBcommander命令执行器界面,在―注入地址‖中输入注入点链接,并选择注入类型,然后句选―尝试回显结果‖及―执行Dos 命令‖项,并在―命令‖中输入执行的系统命令,这里我要服务器开启了什么系统服务,就输入了―netstal-an‖点―执行‖后,即可看到服务器上,此时打开的服务了(图35)。

怎么样,现在可以执行任意命令了吧?什么,用惯widws记不得这么多Dos命令?晕!不用急,NBSiZ很照顾小菜的。我们在―NB commander命令执行器‖中句选―执行Dos命令―后,NBSiZ会自动弹出常用的DOS命令,句选执行SQL命令也同样会弹出常用的SQL命令(如图36、37所示)。怎么样,这回直接选就行了吧,不用记那么多命令了。

上面说的都是基于Sa权限的命令执行,如果遇到一个没有Sa 权限的机器呢?没关系,其实只要有Pablic以上的权限,我们就能遍历服务器的文件了。这时,我们要请出NBSi2另一个实用的工具―MBTreelist‖了,还是从―扫描的工具‖中打开―NBTreelist‖,我们来看(图38)所示页面。勾选右边―文件‖和―文件夹‖项,然后在―输入路径‖中输入要查看的磁盘路径。点列目录……,慢慢,不要急,先去泡碗面吃了回来先。吃饱了,回来也就看到了列出的目录信息了(如图39)。通过这个工具,我们就可以了解服务器上装了什么软件,数据库在哪等信息了,是不是行实用呢?

(2)手动篇

毛主席说得好:―自己动手,丰衣足食‖(哪来的鸡蛋?不要浪费国家粮食啊!)只用工具是永远得不到提高的。所以我们还要学会手动注入。

说起手动注入,就不得不说一个很高笑又很经典的漏洞。虽然这个漏洞现在已经很罕见了(其实也很常见的,前段时间我还在某知名大学计算机系的网站发现该漏洞,更搞笑的是这个大学

还开有信息安全专业,汗),但却十分实用。我们找到一个站的管理入口后,要以尝试在用户名和密码处都输入'or''='(如图40),怎么样,直接进入后台了吧?类似的漏洞还有在用户名处输入管理员的用户名,如admin,密码处输入一个SQL语句,同样可以通过验证,常见的这类语句有a'or'1=1-- 'or1=1-- "or1=1-- or1=1-- 'or 'a '='a "or"="a'='a ' ) or (' a ' =' a 等。

好了,还是说说常规的生动注入吧。我们打开一个类似www.×××.com/×××asp?id=××的url后,先在这个url后加个单引号,变成www.×××.com/×××.asp?id=××',如果出现错误提示(图41),则说明可能存在注入漏洞。然后分别提交www.×××.com/×××.asp?id=××and 1=1和www.×××.com/×××.asp?id=××and 1=2,两次返回的页面不同,则说明有注入漏洞,我们就能开展下一步的行动了。(如图42、43)下面先以ACCESS的数据库为例说说怎么手动猜数据库内容:

我们先来猜数据库的表名,猜表名的语句为在注入点后加上―and exists (select count from 表名)‖还是以www.×××-com/×××.asp?id=××为例,如果我猜这个站的数据库中有个名为123的表,那就提交www. ×××.com/×××.asp?id=××and exists (select count from 123),结果返回错误页面(图44),说明数据库中没有123这个表,那我再猜有没有admin这个表,于

是提交如下语句,www.×××.com/××.com/××.asp?id=××and exists (select count from cdmin),返回正常页面图45),说明存在admin表,我们可以继续猜列名。

小提示:

常见的表名有:admin

a_admin

x_admin

m_admin

adminuser

admin_user

article_admin

administrator

manage

manager

member

memberlist

user

users

userinfo

user_info

admin_userinfo

userlist

user_list

login

用户

密码

会员

登录

movie

movies

news

password

clubconfig

config

company

book

art

bbs

dv_admin等。

好,猜出存在admin表后,我们就可以猜到列名了,猜列名的语句是―and (select count(列名)from表名)>0。同样的,如果返回错误,则说明此列不存在,如果返回正常,则存在此列。我这里提交的是www×××.com/×××.asp?id=××and (select count (username)from admin)>0,返回正常,继续猜,可知admin

表中还有Password和id这两个列。

小提示:

常见的列名有:id

admin

adminid

admin_id

adminuser

admin_user

adminuserid

admin_userid

adminusername

admin_username

adminname

admin_name

adminpwd

admin_pwd

adminpass admin_pass

adminpassword admin_password

administrator administrators

usr

usr_n

usrname

usr_name

usrpass

usr_pass

usrnam

nc

uid

user

userid

user_id

name username

user_name

pass userpass

user_pass

password userpassword user_password

pwd

userpwd

user_pwd useradmin

user_admin

pword

p_word

passwd

pass_wd

yonghu

用户

用户名

mima

密码

dw

oklook等。

好了,猜完表名和列名,我们就该猜列长度了,猜解语句为:and (selct top l len(列名)from表名>×。其中×是数字,我们需要变换这个×事猜列长度,如这里我提交www.×××com./××.asp?id=××and (selct top l len (username) from admin>1、>2、>3、>4都返回正常,猜到>5时出现错误提示,说明正经列长度为5,另外,变换top后的数字就可以猜此列的第

N行长度了。

激动人心的时候到了,我们要猜用户名和密码了。猜用户名和密码需要用ASC和Mid函数。用Mid(列名,N,1)截取第N 位字符,再用ASC mid(列名,N,1))得到ASCLL码。这里变换N可得到用户名或密码的第N位的ASCLL码,猜用户名/密码的语句为:and (selelt top l asc(mid(列名N,1))from表名)>×,×为ASCLL码,top后数字为该列第N行。这里我提交www. ×××.com/×××.asp?id=××and ( select top l asc(mid (username, N,1)) from admin)>10,返回正常,继续提交>50,正常>100,显示错误,提交>90,正常……一直到>96正常,>97显示错误,得到用户名第一位ASCLL码为97,然后打开ASCLL码转换器(如图46),得知第一位是a,变换N值可猜出用户名为admin,变换列名可得密码。我们可用NBSi2试试,猜解的结果是一样的(图47)。

我们可以看到,对ASP+ACCESS的注入主要是靠猜测和运气,如果遇到一个常见的系统我们就可以下载源码看数据库中的表名和列名,从而直接猜用户名和密码,费时又费力。但对ASP+MSSQL的注入就不同了,它不但可以直接爆出表名和库名,还能直接执行一些命令,修改数据库等。怎样,心动了吧?下面就跟我来一起玩SQL的注入吧。

还是以www.×××com./×××.asp?id=××为例,如果用单引号,and 1=1和and 1=2检测到这个网站有漏洞,并以加单引

相关主题