手动web应用程序渗透测试-模糊测试中的后缀与前缀

简介: 后缀语法- 字母字符+特殊字符(Suffix Syntax – AlphabeticsSpecialcharacters)指字母字符后加特殊字符。因其以特殊字符结尾,故而称之为后缀。

介绍

本文重点讲述采用模糊测试的方法测试目标Web应用程序时,可利用的前缀和后缀语法。


句法

后缀语法- 字母字符+特殊字符(Suffix Syntax – AlphabeticsSpecialcharacters)指字母字符后加特殊字符。因其以特殊字符结尾,故而称之为后缀。

例如:jonnybravo' (此处jonnybravo是一个字符串,而'是一个特殊字符。)

前缀语法-特殊字符+ 字母字符(Prefix Syntax – SpecialcharactersAlphabetics)指特殊字符后跟字母字符。因其把特殊字符放在开始,故而称之为前缀。

例如:‘jonnybravo (此处‘是一个特殊字符,而jonnybravo是一个字符串)


分析

此处以一个后缀的例子做演示,验证并观察其结果。下图显示了在用户名处输入后缀语法的字符串jonnybravo'的结果。

输入字符串jonnybravo’

GET /chintan/index.php?page=user-info.php&username=jonnybravo%27&password=&user-info-php-submit-button=View+Account+Details HTTP/1.1

Host: localhostUser-Agent: Mozilla/5.0 (Windows NT 5.1; rv:27.0) Gecko/20100101 Firefox/27.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateReferer: http://localhost/chintan/index.php?page=user-info.phpCookie: showhints=0; PHPSESSID=39hb01vtdib9sov8rmmfok7kn2Connection: keep-alive

URL中特殊字符的编码

输入该字符串后,截取该请求,可知浏览器将此输入作为URL的特定格式进行编码解析。所以特殊字符“'”转义为“%27”,然后通过浏览器发送到服务器。

以下列出了URL中特殊符号及对应的十六进制编码(编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值):

-21

@-40

-23

$-24

^-5E

-26

*-2A

-28

-29

{-7B

}-7D

-2D

+-2B

[-5B

-5D

;-3B

-3A

-5C

|-7C

-2C

<-3C

-2E

>-3E

/-2F

-3F

转发以上的GET请求,得到一个错误页面,提示用户名是不合法的,如下图所示:

image.png

首先从上面的错误页面可以看出在消息框中的jonnybravo'是我们输入的字符串。然后分析显示在消息框中的SQL查询语句。该查询如下所示:

Query: SELECT username FROM accountsWHERE username=’jonnybravo”;

通过查看这个SQL查询语句,会立刻知道需要一个后缀和前缀以完成查询语句本身。通过以下这个格式的查询语句来说明这个问题:

Query: SELECTusername FROM accounts WHERE username=’jonnybravo”;

这里后缀'结尾该SQL语句,故而一旦输入jonnybravo',那么该语法中的后缀'和jonnybravo之前的 ‘组合起来已经完成了查询语法。可以清楚地看到在开始和结束的特殊字符'是由服务器查询语法提供的,但此处输入字符中增加的一个'完成了该语句查询,在执行查询时剩余的一个‘导致产出错误。因为有一个未用的'字符,这不符合SQL查询语法的规则。简而言之,输入字符中jonnybravo的后缀和服务器提供的前缀配对完成了查询语句,而服务器提供的后缀未被采用故而导致了SQL语法错误。

“如果不能正常关闭,那么无论什么输入,它永远不会正常完成,你会得到一个错误页面。”

这是唯一的用户名查询页面,所以可能会尝试通过后台运行去提交该查询。继续到认证页面进行测试,可能会看到查询语句中的“用户名”和“密码”字段。此处将jonnybravo’作为用户名并以momma作为密码,在用户名输入字符串后添加了后缀’,并以简单字符作为密码。有时需要将两者同时提交作为查询语句。查询语法如下所示。

Query: SELECT * FROM accounts WHERE username=’jonnybravo”AND password=’momma’

假设我们想要忽略执行上面查询语句中的AND password=’momma’。那么需要如何才能做到呢? 这里将使用'作为前缀并以(空格)-作为后缀。之所以用(空格)-是因为假设这是一个MYSQL服务器,所以当输入(空格) -时,它被解读为一个注释符号。在这种情况下无论这之后是什么内容都将被视为注释语句,注释部分在服务器执行查询语句时会被忽略。

注入 – ' -

然后,在输入字段中添加诸如 or 1 = 1' 这样的载荷,如此一来,最终注入语句类似如下所示:

注入 – ' or 1 = 1' -

一旦将此语句注入到用户名字段,会产生如下图所示的错误。

image.png

分析上述的注入语句,由提交字符串中的'来完成“username”用户名字段,用户名字段包括了来自服务器的‘ ‘字符,但因为其中加入了注入语句,使其成为‘ ‘ or 1=1′ — ‘。进一步分析查询语句:

Username=’ ‘ or1=1′ — ‘ ANDpassword=’ ‘.

之前已经提到,已假定这是MySQL服务器,所以(空格)–后的任何语句都将作为注释语句来解读。 那么重新分析这个查询语句,可以看出,这个查询语句中唯一执行了的部分只剩下了1=1′。 因此,这是如何使用一个后缀和后缀进行SQL注入的方法 。 由于在1=1后添加一个'可以产出一个在页面上产出一个错误,那么如果删除了多余的',那么这个注入将正常完成,服务器不会拒绝1 = 1这种正确的逻辑,所以服务器将执行该查询。 故而最终的注入语句变成了 'or 1 = 1 -,把这串字符提交给用户名字段,将会看到如下图所示的查询结果:

image.png

由显示结果可知,服务器成功被注入,页面上显示出了数据库整个表中存储的所有结果,包括用户名、密码及其他字段的信息详情。


结论

在这篇文章中,简单介绍了后缀和前缀,以及如何使用它们进行web程序的模糊测试,文中以MySQL服务器为例,但这种方法和思路同样适用于其他服务器。


附注:

同作者曾发表了一系列关于手动web应用程序渗透测试的文章,其中与模糊测试方法相关的文章列表如下,如有兴趣可点击以下链接进行阅读:

  1. 手动web应用程序渗透测试:模糊测试
    http://resources.infosecinstitute.com/manually-web-application-penetration-testing-fuzzing/
  2. 手动web应用程序渗透测试:使用Burp工具时的模糊测试参数
    http://resources.infosecinstitute.com/web-services-penetration-testing-part-6-fuzzing-parameters-burp/
  3. 手动web应用程序渗透测试:更多与Burp工具相关的模糊测试
    http://resources.infosecinstitute.com/web-services-penetration-testing-part-7-fuzzing-burp/
相关文章
|
25天前
|
安全 测试技术 Linux
Acunetix v25.4 发布 - Web 应用程序安全测试
Acunetix v25.4 (Linux, Windows) - Web 应用程序安全测试
58 3
Acunetix v25.4 发布 - Web 应用程序安全测试
|
3月前
|
安全 JavaScript Java
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
53 12
AppSpider Pro 7.5.015 for Windows - Web 应用程序安全测试
|
7月前
|
安全 测试技术 数据库
维护的Web应用程序
【10月更文挑战第4天】维护的Web应用程序
88 4
|
2月前
|
自然语言处理 安全 测试技术
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
110 0
HCL AppScan Standard 10.8.0 (Windows) - Web 应用程序安全测试
|
6月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
233 62
|
5月前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
218 13
|
6月前
|
监控 前端开发 JavaScript
使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践
使用 MERN 堆栈构建可扩展 Web 应用程序的最佳实践
125 6
|
6月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
138 1
|
6月前
|
数据可视化 数据库 开发者
使用Dash构建交互式Web应用程序
【10月更文挑战第16天】本文介绍了使用Python的Dash框架构建交互式Web应用程序的方法。Dash结合了Flask、React和Plotly等技术,让开发者能够快速创建功能丰富的数据可视化应用。文章从安装Dash开始,逐步介绍了创建简单应用程序、添加交互元素、部署应用程序以及集成更多功能的步骤,并提供了代码示例。通过本文,读者可以掌握使用Dash构建交互式Web应用程序的基本技巧和高级功能。
249 3
|
7月前
|
JavaScript 前端开发
如何使用Vue.js构建响应式Web应用程序
【10月更文挑战第9天】如何使用Vue.js构建响应式Web应用程序