无参数RCE学习分享

admin 2024年1月11日10:24:48评论14 views字数 1174阅读3分54秒阅读模式

无参数RCE

遇到一些正则匹配判断

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

在这一串代码中我们不能转入参数,只能传入函数,因此我们只能通过利用函数得到rce的目的

bypass的方法

这里我们通过嵌套函数的方法达到目的

getallheaders()

这个函数就要用来获取http标头,例如cookie;user-agent;content-type之类的

我们可以通过让服务器执行我们http传入的内容,导致代码执行,也就是利用getallheaders()传入rce命令。

但是只有getallheaders()函数还不够,这里我们利用其他函数,从getallheaders()数组中获取我们需要的内容。

end()

end()函数可以将数组的内部指针自动到最后一个单元,也就是我们可以通过end()获取到getallheaders()数组中的最后一个值

因此我们可以使用

?c=eval(end(getallheaders()))

的方法,然后将content-type放置到header中的第一个,这样我们就可以通过content-type传参了

无参数RCE学习分享

我们可以看到ls不能执行,因为没有匹配上正则,eval函数不被执行

因此我们可以利用上面说的方法

无参数RCE学习分享

我们除了把Content-Type放到最底下,我们还可以放到http头最上面,然后利用函数array_reverse倒转到最底下

无参数RCE学习分享

这个就是getallheaders()+end()+array_reverse()利用方法

get_defined_vars()方法

get_defined_vars可以用来返回所有变量的数组

无参数RCE学习分享

我们可以向get再传多一个参数

无参数RCE学习分享

current()

这里再用多一个函数current,current可以用来获取数组中的当前的值,默认第一个,也就是获取到数组中的GET,而GET里面还有一个数组用来存储具体参数,因此我们再利用end来获取test的值作为参数

无参数RCE学习分享

这个是get_defined_vars()+current()+end()利用方法

session_start()+session_id()    [仅限于php7以下的]

session_id()可以用来获取/设置当前会话的id

session_start()可以启动新会话或者重用现有的会话

我们利用session_start()启动session机制然后通过session_id()读取id

然后再cookie传入参数

只读取文件的方法

scandir(pos(localeconv()))可以找到服务器的根目录

使用show_file和highlight_file可以读取指定文件

原文始发于微信公众号(YaYaLiou):无参数RCE学习分享

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月11日10:24:48
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   无参数RCE学习分享http://cn-sec.com/archives/2383578.html

发表评论

匿名网友 填写信息