在开始学习之前先简单记录一下自己现在的思路吧。。现在接触的基本都是无防护的漏洞也就是最简单的一些漏洞。我的想法就是以代审思路为主,之前一直在打CTF,白盒的思维我觉得和CTF这种黑盒有很大区别。自己的思考方式应该在某处转变。
在实际中,真正的业务也是基于这种最简单的功能,无非是给他穿了很多层衣服,而我们在审计时要做的就是去掉他的保护,脱掉他的衣服。
0x00 任意文件读取
通过提交专门设计的输入,攻击者就可以在被访问的文件系统中读取或写入任意内容,往往能够使攻击者从服务器上获取敏感信息文件,正常读取的文件没有经过校验或者不合格,用户可以控制这个变量读取任意文件。
思路可以参考前面的文件包含,目录穿越等文件操作,区别就是我们使用的函数不同,要学会举一反三嘛。
0x01 文件读取-漏洞危害
任意文件读取漏洞,是Web安全里高位的漏洞,它可以泄露源码,数据库配置文件等等,导致网站处于极度不安全的状态。
漏洞验证:
Index.php?f=../../../../../../../../etc/passwd Index.php?f=../index.php
Index.php?f=file:///etc/passwd
参数f的参数值为PHP文件时:
1.文件被解析,则是文件包含漏洞
2.显示源代码,则是文件查看漏洞
3.提示下载,则是文件下载漏洞
0x02 文件读取挖掘经验
fopen()
file_get_contents()
fread
fgets
fgetss
file
fpassthru
parse_ini_file
readfile
allow_url_fopen选项激活了URL形式的fopen封装协议使得可以访问URL对象例如文件。默认的封装协议提供用ftp和http协议来访问远程文件,一些扩展库例如zlib可能会注册更多的封装协议。
0x03 文件读取代码
<?php
$filename = $_GET['file'];
if(isset($filename)){
readfile($filename);
}
?>
<?php
$filename=”test.txt”;
Echo fiile_get_contents($filename);
?>
漏洞之所以会发生是因为攻击者可以将路径遍历序列放入文件夹内,从当前位置向上回溯,从而浏览整个浏览器的任何文件。
0x04 任意文件删除
攻击者从寻找删除的功能,正常删除功能的文件没有经过校验或者不严格,攻击者控制这个可操作的变量配合目录遍历进行删除其他文件。
0x05 代码
unlink()函数
<?php
header(string "Content-type:text/html;charset=utf-8");
$filename = $_GET['file'];
if(file_exists($filename)){
unlink($filename);
echo "<script>alert("删除成功")</script>";
}else{
echo "<script>alert("删除失败")</script>";
}
?>
上述没有任何防护,我们可以删除任意敏感文件
例如:
./config/admin.php
0x06 修复方案
过滤 . 点,使用户在url中不能回溯上级目录
正则严格判断用户输入的参数
php.ini配置open_basedir限定文件访问范围