首页 » 网站建设 » PHP复制不笼罩技巧_变量覆盖那些事

PHP复制不笼罩技巧_变量覆盖那些事

访客 2024-12-09 0

扫一扫用手机浏览

文章目录 [+]

https://www.hetianlab.com/expc.do?ec=ECID3ec0-232d-4e11-8cb0-52a8620c51ee&pk_campaign=toutiao-wemedia#stu

详细理解PHP中变量覆盖漏洞干系的知识。
复制上方链接,进入实操靶场!

PHP复制不笼罩技巧_变量覆盖那些事

漏洞事理

变量覆盖是指可以用自己的传参值代替程序原有的变量值。

PHP复制不笼罩技巧_变量覆盖那些事
(图片来自网络侵删)
漏洞探求

例如下面的函数或者语法利用不当时就会涌现漏洞。

$$extract()parse_str()import_request_variables()mb_parse_strregister_globals漏洞解析

这里先剖析函数,再剖析漏洞。

extract()事理

extract()函数从数组中将变量导入到当前的符号表。

例如

<?php$a="eeknight";$my_array=array("a"=>"C","b"=>"T","c"=>"F");extract($my_array);echo"\$a=$a;\$b=$b;\$c=$c";?>输出:$a=C;$b=T;$c=F攻击手段

这里先举个例子

<?php$a="echo'eeknight';";echo$a;echo"\n";eval($a);?>输出:echo'eeknight';eeknight

在上面双引号包裹了单引号,然后通过eval去利用他,就可以直接输出单引号里的东西了。

为什么要说这个东西,由于当你单引号里的东西可以被利用,是不是就可以写什么实行什么了。

怎么利用呢,这时候刚才先容的extract就发挥浸染了。

把上面的例子大略改一下

<?php$a="echo'eeknight';";extract($_GET);eval($a);?>

$事理

$$产生的漏洞紧张是由于foreach遍历数组的值,然后将获取的数组键名作为变量,数组中的值作为变量的值。

在这先大略先容一下foreach和$$。

foreach循环只适用于数组,并用于遍历数组中的每个键/值对。

<?php$colors=array("red","green","blue","yellow");foreach($colorsas$value){echo"$value\n";}?>输出:redgreenblueyellow

$$这里举个例子

在PHP中,$var表示一个名为var的普通变量,它存储字符串、整数、浮点等任何值。
而$$var是一个引用变量,用于存储$var的值。

在我看来便是套娃。

<?php$var="ee";$$var="eeknight";echo$var;echo"\n";echo$$var;echo"\n";echo"$ee";?>输出:eeeeknighteeknightparse_str()

parse_str()把查询字符串解析到变量中。

parse_str(string,array)string 必需。
规定要解析的字符串。
array 可选。
规定存储变量的数组的名称。
该参数指示变量将被存储到数组中。

<?phpparse_str("name=eeknight&age=20");echo$name."\n";echo$age;?>输出:eeknight20攻击办法

通过上面的例子,可以想到,如果parse_str()括号是GET,PSOT等之类的,我们是不是就可以直接实行我们要的函数。

mb_parse_str

mb_parse_str— 解析 GET/POST/COOKIE 数据并设置全局变量

详细的用法和上面的parse_str()一样。

这里就不多解释了。

import_request_variables()

import_request_variables()函数将 GET/POST/Cookie 变量导入到全局浸染域中。

<?phpimport_request_variables("gP","ee_");echo$ee_knight;?>

攻击办法

只要利用了这个函数,就可以直接对里面的变量进行赋值。

register_globals

register_globals的意思便是注册为全局变量

当php.ini中register_globals=On时,通报过来的值会被直接注册为全局变量,当为off时,须要到特定的数组中去得到

例子

<?phpecho"Register_globals:".(int)ini_get("register_globals")."<br/>";if($auth){echo"hello!";}?>ON

OFF

这里ON-->OFF的转换时记得重启一下apache。

一些附加解释为什么echo "\$a = $a; \$b = $b; \$c = $c";这里要加上\呢解:这些斜杠的的意思便是,让后面的变量失落去意义。
那么写的是什么便是什么。
parse_str()php.ini文件中的magic_quotes_gpc设置影响该函数的输出。
如果已启用,那么在parse_str()解析之前,变量会被 addslashes() 转换。
import_request_variables()该函数在最新版本的 PHP 中已经不支持。
支持的版本:PHP 4 >= 4.1.0, PHP 5 < 5.4.0。
register_globalsregister_globals从php5.3.0起废弃,并从php5.4.0时移除。
漏洞防御addslashes()addslashes()在每个双引号(")前添加反斜杠。
利用原始变量,不进行变量注册;验证变量存在,如果一定要进行变量注册,可以在注册变量前先判断变量是否存在。
标签:

相关文章

php为无色透明技巧_水货钻石其实也还行

从各种钻石中,可以看到大大小小的“包裹体” 图片来源:参考文献包裹体的种类多样。比钻石形成更早的包裹体,叫“原生包裹体”;与钻石同...

网站建设 2024-12-19 阅读0 评论0

phpstudy发送gbk技巧_php的文件上传

这里首先声明一下这一章的内容比较多,比较难,你要抱着和自己去世磕的态度。细微之处不放过,多敲多练是王道。 学习就像爬山,得一步一步...

网站建设 2024-12-19 阅读0 评论0