1. == 比较,只判断值是否相等,不判断类型是否相同。(可以在值后加字母这样绕过)
=== 不仅比较值相等还会要求类型比较
2.md5无法处理数组!所以构建数组就可以了(这样就会返回false)
根据MD5的特性,有两点漏洞
两个开头为0的md5值相同。
md5不能处理数组。
==用法,0 == 字符串是成立的,从而可以绕过MD5检查。
3.第二个是strcmp函数,strcmp = string compare(字符串比较)
其实是利用的是如果比较的是字符串都相同的话会返回0.(如果比较的不是字符串那也会错误返回0)需要v3和flag的值相同才返回flag的值.
10.26
extract() 函数从数组中将变量导入到当前的符号表。此函数会将数组键名当作变量名,值作为变量的值。
trim()去除字符串首尾处的空白字符
file_get_contents()将整个文件读入一个字符 伪协议 php://input
其实看到file_get_contents(),我们就应该想到使用php://input将其绕过,php://input是可以访问请求的原始数据的只读流,可以直接读取到POST上没有经过解析的原始数据。但enctype=”multipart/form-data” 的时候 php://input 是无效的。
使用方法:bugku_file_get_contenets


①将要get的参数/?xxx=php://input
②使用post方法传递想要file_get_contents()返回的值
这道题目就是要get上传两个参数一个是ac一个是fn
使用这个协议?ac=flag&&fn=php://input
同时post上传一个flag 因为题目要求的是ac和fn的值要相同。
为什么使用php://input?
php://input是一个PHP伪协议,它允许访问请求的原始数据(即POST请求体)。当使用file_get_contents('php://input')时,它会读取POST请求体中的数据作为文件内容。这在这里非常有用,因为我们可以通过POST请求直接控制文件内容,从而匹配$ac的值。
关键点:
-
php://input将POST数据视为文件流,因此我们可以动态设置文件内容。 -
在这个挑战中,我们需要
$ac等于文件内容,所以通过php://input,我们可以让文件内容等于$ac。
11.13
header()
header("location:index.php?line=&filename=a2V5cy50eHQ=");
功能:发送HTTP头部信息
参数:"location:URL" 实现重定向
注意:必须在输出任何内容之前调用
array()
$file_list = array(
'0' => 'keys.txt',
'1' => 'index.php',
);
功能:创建数组
替代语法:也可以使用 [](PHP 5.4+)
用途:定义允许访问的文件白名单
intval()
$line = isset($_GET['line']) ? intval($_GET['line']) : 0;
功能:将变量转换为整数
作用:防止SQL注入和类型混淆攻击
示例:"123" → 123, "abc" → 0
93

被折叠的 条评论
为什么被折叠?



