我想了解更多关于(道德)黑客攻击的事情,因为我是一名网络开发者,有时候我担心我的应用程序的安全性。
有人告诉我,一旦最好的学习方法是尝试自己破解真正的应用程序,所以我在我的localhost上玩一个例子。这是我前段时间构建的一个非常简单的应用程序,它有一个名为api.php的文件,如下所示:
<?php
header('Content-type: application/json;charset=UTF-8');
if (isset($_GET["api"]) and $_GET["api"] !== "") {
if ($_GET["api"] === "posts") {
$url = "https://api.third-party.com/posts?q=". rawurlencode($_GET["post_id"]);
} else if ($_GET["api"] === "users") {
$url = "https://api.third-party.com/users?q=". $_GET["user_id"];
} else if ($_GET["api"] === "tags") {
$url = "https://api.third-party.com/tags?q=". $_GET["tag_id"];
}
$json = exec("curl -X GET ".$url);
echo $json;
}
?>
我试图使用URI参数注入一些PHP代码。像这样:
http://localhost:8888/test-app/api.php?api=users&user_id=5;print_r("success");}if(0){die();
我的想法是,当我的应用程序使用 user_id 参数读取PHP代码时,它会执行以下操作:
<?php
header('Content-type: application/json;charset=UTF-8');
if (isset($_GET["api"]) and $_GET["api"] !== "") {
if ($_GET["api"] === "posts") {
$url = "https://api.third-party.com/posts?q=". rawurlencode($_GET["post_id"]);
} else if ($_GET["api"] === "users") {
$url = "https://api.third-party.com/user?q=". 5;
print_r("success");
}
if(0){
die();
} else if ($_GET["api"] === "tags") {
$url = "https://api.third-party.com/tags?q=". $_GET["tag_id"];
}
$json = exec("curl -X GET ".$url);
echo $json;
}
?>
但它实际上不起作用。我得到的只是一个空白屏幕,可能是一个空的 $ json 变量的结果。
这可能吗?我也有一个通过ajax调用此脚本的表单,也可以尝试使用它。
答案 0 :(得分:2)
exec("curl -X GET ".$url);
正在执行命令,而不是运行PHP。你的shell很可能没有print_r
命令。你可以这样做:
http://localhost:8888/test-app/api.php?api=tags&tags=echo%20%22%3C?php%20print_r(\%22success\%22);%20?%3E%22%20|%20php
可以让你跑
echo "<?php print_r(\"success\"); ?>" | php