如何看待php与旁路

  介绍

如何看待php与旁路,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

标签:[php代码审计,绕过]

<强>代码如下

 & lt; php ?
  中将__FILE__);
  
  $ _ =, @ $ _GET [& # 39; _ # 39;];
  if  (, preg_match (& # 39;/[\ x00安康;0 - 9 \ & # 39;“;”,美元。| [{_defgops \ x7F] +/我# 39;,,$ _),)
  死(& # 39;rose  will  not  do  # 39;进行实质性的);
  
  if  (, strlen (count_chars(函数($ _),0 x3)),祝辞,0 xd )
  死(& # 39;你断开连接;so ,, omg # 39;);
  
  eval ($ _);
  ?在

代码分析

前面的那个正则过滤大概就是过滤了下面的这些字符,借鉴师傅博客

 \ x00安康;0-9 ,,,,,,,,,,,,,,,,,,,,,,匹配\ x00到空格(\ x20), 0 - 9的数字
  & # 39;“,“和美元。| [{_defgops ,,,,,,,,,,,,,匹配这些字符
  \ x7F ,,,,,,,,,,,,,,,,,,,,,,,,,,,匹配德尔(\ x7F)字符

而下面的这个如果语句实现的效果是,所传入的变量里面的所有不同的字符的个数不能超过十六进制的<代码> 0 xd> 13>

绕过

模糊可用方法

然后就是如何绕过了,这里可以看到并没有过滤到<代码> ^ ,<代码> ~ 这两个字符,所以可以使用取反绕过试一试,

但是一般情况下可以先写个脚本看看还有那些函数是可以用的。<代码> php可用方法模糊脚本

& lt; php ?   $=get_defined_functions数组();//返回所有内置定义函数   foreach ($ array[& # 39;内部# 39;],as 美元arr){,,//遍历所有方法   if  (, preg_match (& # 39;/[\ x00安康;0 - 9 \ & # 39;“\ ',美元。| [{_defgops \ x7F] +/我# 39;,,arr),美元),继续;   if  (, strlen (count_chars(函数(arr), 0 x3)),祝辞,0 xd ),继续;   打印(arr强生# 39;美元& lt; br/祝辞& # 39;);   }

所的结果如下

空白
  修剪
  ltrim
  空空的
  链接
  拆开
  棕褐色
  :
  atanh
  双曲正切
  intval中
  邮件
  最小值
  马克斯

虽然这里没什么能用的,但是这个模糊的脚本还是很有启发性的,遇到旁路的时候可以先用这样的脚本试一试是不是能够直接用某些危险方法。

异或+ url编码绕过

这里直接使用取反的那个操作,下面是代码。

 & lt; php ?
  $ a =, urlencode (~ & # 39; phpinfo& # 39;);
  回波(美元);

如何看待php与旁路”> </p> <p>虽然出来了,但是其实没啥用,因为<代码> phpinfo(); </代码>本来的字符数就没有超过13个,接下来就是缩短字符数与看未被禁用的函数了,下面是被禁用的方法</p> <pre> pcntl_alarm, pcntl_fork, pcntl_waitpid, pcntl_wait, pcntl_wifexited, pcntl_wifstopped, pcntl_wifsignaled, pcntl_wifcontinued, pcntl_wexitstatus, pcntl_wtermsig, pcntl_wstopsig, pcntl_signal, pcntl_signal_get_handler, pcntl_signal_dispatch, pcntl_get_last_error, pcntl_strerror, pcntl_sigprocmask, pcntl_sigwaitinfo, pcntl_sigtimedwait, pcntl_exec, pcntl_getpriority, pcntl_setpriority, pcntl_async_signals,系统执行,escapeshellarg, escapeshellcmd, passthru, proc_close, proc_get_status, proc_open, shell_exec,邮件,imap_open, </pre> <p>我就认识三个可以命令执行的方法,但是没过滤扫目录的函数<代码> scandir() </代码>,还有读文件的函数<代码> readfile() </代码>,还有打印变量信息的函数<代码> var_dump() </代码>,我借鉴的那个wp里面用的是用多次使用<代码> ^ </代码>和<代码>()</代码>来异或的方式,这里我也这么做,但是条条大路通罗马,肯定还有不少其他方法,这里就不复现了,遇到了再说吧。</p> <h4>绕过脚本实现</h4> <p>这里我们想传入的变量信息是这样的</p> <pre lang=皃hp xml: lang=皃hp”> print_r (scandir(& # 39; # 39;公司));</pre> <p>可以看看有多少个字符</p> <pre> & lt; php ?
  时间=美元s “print_r (scandir(& # 39; # 39;公司));“;
  $ a =, strlen (count_chars(函数($ s), 0 x3));
  回波(美元);</pre> <p> <img src=如何看待php与旁路