没有很大的能耐,只能靠努力去改变这些现状,一位努力学安全的白帽子。
源码分析
分析代码
extract($_GET):函数extract()有通过数组进行赋值的功能:
file_get_contents($fn):file_get_contents功能是从文件名为“$fn”的文件中读取数据,但是当$fn的值为“php://input”,它会接受并返回post的值
trim(string,charlist) 函数移除字符串两侧的空白字符或其他预定义字符
php中===与= =区别:
===比较两个变量的值和类型;==比较两个变量的值,不比较数据类型。
例: $a = ‘123’;
$b = 123;
$a === $b为假;
$a == $b为真;
代码审计
得到flag需要满足以下条件:
1.ac不为空
2.fn是一个文件转化为字符串去掉空白符后与ac值相同
构造payload:?ac=1&fn=data://text/plain,1
PHP_data
data://协议必须双在on才能正常使用;
allow_url_fopen :on
allow_url_include:on
PHP_伪协议:
PHP支持的伪协议如下:
1.file:// — 访问本地文件系统
2.http:// — 访问 HTTP(s) 网址
3.ftp:// — 访问 FTP(s) URLs
4.php:// — 访问各个输入/输出流(I/O streams)
5.zlib:// — 压缩流
6.data:// — 数据(RFC 2397)
7.glob:// — 查找匹配的文件路径模式
8.phar:// — PHP 归档
9.ssh2:// — Secure Shell 2
10.rar:// — RAR
11.ogg:// — 音频流
12.expect:// — 处理交互式的流