首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

看代码学安全(7 )- parse_str函数缺陷

漏洞解析 : 这一关其实是考察变量覆盖漏洞,⽽导致这⼀漏洞的发⽣则是不安全的使⽤ parse_str 函数。 由于 第21行 中的 parse_str() 调用,其行为非常类似于注册全局变量。...我们来看看PHP官方对 parse_str 函数的定义: parse_str 功能 :parse_str的作用就是解析字符串并且注册成变量,它在注册变量之前不会验证当前变量是否存在,所以会直接覆盖掉当前作用域中原有的变量...这个问题的解决就利用到了 $REQUEST 内容与 parse_str 函数内容的差异特性。...而通过上面代码的遍历进入 parse_str 函数的内容则是 [a=1&b=2&c=3] ,因为 parse_str 函数会针对传入进来的数据进行解码,所以解析后的内容就变成了[a=1,b=2,c=3]...结语 看完了上述分析,不知道大家是否对 parse_str() 函数有了更加深入的理解,文中用到的CMS可以从 这里 下载,当然文中若有不当之处,还望各位斧正。

99610

代码审计Day7 - parse_str函数缺陷

下面是 第7篇 代码审计文章: Day 7 - Bell 题目叫做钟,代码如下: 漏洞解析 : 这一关其实是考察变量覆盖漏洞,⽽导致这⼀漏洞的发⽣则是不安全的使⽤ parse_str 函数。...我们来看看PHP官方对 parse_str 函数的定义: parse_str 功能 :parse_str的作用就是解析字符串并且注册成变量,它在注册变量之前不会验证当前变量是否存在,所以会直接覆盖掉当前作用域中原有的变量...这个问题的解决就利用到了 $REQUEST 内容与 parse_str 函数内容的差异特性。...而通过上面代码的遍历进入 parse_str 函数的内容则是 [a=1&b=2&c=3] ,因为 parse_str 函数会针对传入进来的数据进行解码,所以解析后的内容就变成了[a=1,b=2,c=3]...使用 parse_str 函数之前先自行通过代码判断变量是否存在。 这里提供一个demo漏洞样例代码,以及demo的修复方法。

63530
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CTF| 这是一个刚挖好的洞······

    经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当,import_request_variables()使用不当,开启了全局变量注册等。...extract()函数导致的变量覆盖问题 extract() 该函数使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。...最终PAYLOAD: POST DATA:pass=&thepassword_123= parse_str函数导致的变量覆盖问题 parse_str() 函数用于把查询字符串解析到变量中,如果没有array...参数,则由该函数设置的变量将覆盖已存在的同名变量。...parse_str() 用法参考:http://php.net/parse_str CTF中parse_str()导致的变量覆盖问题的例题1: 题目源码: 1.<?

    1.9K80

    DedeCMS V5.7sp2网站漏洞如何修复

    最近我们发现dedecms漏洞,存在高危的parse_str函数sql注入漏洞。...关于该织梦漏洞的详情,我们一步一步来剖析: 首先来介绍下parse_str函数的机制与作用是什么,简单通俗来讲就是解析网站传过来的字符串,将字符串的值转变成一个固有的变量值,这个函数在传入进来,进行转变的时候并不会验证网站当前变量的值是否含有...在dedecms最新版里的buy_action.php代码里,存在网站漏洞,dedecms针对于该文件之前更新并修复过网站漏洞,代码里增加了许多函数的安全过滤,但是在过滤的同时编码函数进行解码的时候没有严格的过滤掉传入进来的值...我们对该代码进行人工的安全检测发现,在第4,第6行里调用了一个mchStrCode函数机制,这个函数我来简单跟大家讲解一下原理是什么,该函数是将前端网站用户提交过来的数据进行解码,然后通过parse_str...dedecms网站漏洞修复建议: 关于这次的dedecms parse_str函数SQL注入漏洞,需要修复的就是变量的覆盖修复,在对前端输入过来的值进行安全判断,确认变量值是否存在,如果存在将不会覆盖,

    3K10

    变量覆盖漏洞的分析与总结

    extract()函数使用不当导致的变量覆盖 该函数可以将变量从数组中导入当前的符号表 我们看一下在w3school中函数的定义 ?...我们成功通过注入GLOBALS[yml]来改变$yml的值 parse_str()函数使用不当导致的覆盖 该函数可以把查询的字符串解析到变量中,我们来看一下w3school中对该函数的定义 ?...$yml; echo ""; $a = $_GET['a']; parse_str($a); echo "out1:".$yml; ?...> 在这里我们没有设置parse_str()函数的第二个参数,现在我们来尝试构造同名变量 ?...对于第三种情况,强烈推荐将registerglobals设置为Off 对于第四种情况,我们应该在使用parse_str()时养成指定第二个参数的习惯,这样才能避免变量被覆盖 对于最后一种情况,我们同样要指定第二个函数参数来设置要注册的变量前缀

    1.4K20

    php函数用数组传递多位参数

    我之前不会编写函数,都是用的别人做的。后来慢慢学会就逐步添加想要的功能,但是问题出现了。...我修改的函数(用于curl抓取页面)的相关设置太多,导致函数的形参多的冒泡,使用起来很麻烦 function curl_get($url, $re=0,$ua=0,$ip=1,$post=0,$followLocation...//每次调用的时候很蛋疼 最近难以忍受调用这种形式的函数,遂修改下 function curl_get($url, $array=array('re'=>0,'ua'=>0,'ip'=>1,'post'....)){} 刚开始没发现使用上有问题,但是后来真闯到鬼了,明明默认的形参是ip=1,但是打死都没反应 curl_get(url, array=array('post'=>0))后来知道是怎么回事:调用函数时的...'; parse_str($str_deaful,$arr); parse_str($str,$arr2); $array = array_merge($arr,$arr2); //do...... }

    2.5K30

    PHP代码安全杂谈

    ereg()函数:字符串正则匹配。 strpos()函数:查找字符串在另一字符串中第一次出现的位置,对大小写敏感。 这2个函数都是用来处理字符串的,但是在传入数组参数后都将返回NULL。...所有这里将password参数指定为数组,利用函数漏洞拿到flag: 拓展总结 除了strcmp()函数外,ereg()和strpos()函数在处理数组的时候也会异常,返回NULL。...==FALSE,满足条件,拿到flag: 六、parse_str函数变量覆盖缺陷 理论 parse_str函数的作用就是解析字符串并注册成变量,在注册变量之前不会验证当前变量是否存在,所以直接覆盖掉已有变量...void parse_str ( string $str [, array &$arr ] ) str 输入的字符串。...实践 测试代码: 考察点 parse_str变量覆盖缺陷 write-up 找到核心代码: 因为这里用到了parse_str函数来传递b,if的语句的条件是拿$a[0]来比较的,有因为这里的变量a的值已经三是固定的了

    1.7K60
    领券