爆破二
还是代码审计
一个一个来看:
- include: 包含并运行指定文件,没有找到文件时会触发一个错误(注意与require的区别,后者触发致命错误,程序停止)。当一个文件被包含时其中所包含的代码继承include所在行的变量范围,从该行开始调用文件在该行处可用的任何变量在被调用的文件中也都可用。不过所有在包含文件中所有的函数和类都有全局作用域。include出现在调用文件中的一个函数里,被调文件包含的代码将表现得像在该函数内部定义的一样。
- request一个名为hello得变量。POST,GET都行。
- var_dump:打印变量信息。
- eval:把字符串当作PHP代码执行。这很危险,它允许执行任意php代码。
开始做题:
出发点肯定是eval。又知道flag在 flag.php文件里,就想办法读这个文件的内容:
http://b93eb36aedb140459bd4e731a4f1d19f15490c4dda5c46ba.game.ichunqiu.com/?hello=file_get_contents('flag.php')
hello的value设置为读取文件的函数,让eval执行这段函数。
另附上php读取文件的五种方式:
- fread-读取指定文件(可安全用于二进制文件)。string fread ( resource $handle , int $length ),read() 从文件指针 handle 读取最多 length 个字节。文件系统指针,是典型地由 fopen() 创建的 resource(资源)。
- file_get_contents — 将整个文件读入一个字符串。失败返回false.
- feof与fread结合循环读取文件内容。feof — 测试文件指针是否到了文件结束的位置。
- file — 把整个文件读入一个数组中,然后逐个输出。
- fgets — 从文件指针中读取一行。
参考链接:五种读文件方式
爆破三
=10){
echo $flag;
}
show_source(__FILE__);
?>
$_session有三个变量,whoami的初始值是’ea’.
还是一个一个来看代码:
- range:显而易见a-z随机一个字母。
- mt_rand — 生成更好的随机数. $ str_rand[mt_rand(0,25)].$str_rand[mt_rand(0,25)]这里是生成两个字符并连接。
测试代码如上,
之后的判断要value的前两个字符与 变量whoami 相等并且将改值md5加密后截取 == 0,nums 加一并输出下一个 whoami 的值。这里想到用数组绕过。
构造payload
打印出的是下一次的随机值,接着传进去value,十次就得到了flag。