浅析PHP变量解析杂乱规矩语法

访客5年前黑客资讯609

翻了良久前写过的关于php杂乱语法变量解析的文章,发现许多当地存在问题。因而又查阅文档从头了解了一遍该语法,谈谈个人的了解,并记载在此。
 
标题简析
一道很早之前的标题,代码(简化):
$str= @(string)$_GET['str'];
eval('$str="'.addslashes($str).'";');
经过eval履行php代码取得flag,addslashes函数将字符串中的特别字符转义,“{}”在双引号中能够符号变量鸿沟来解析,运用该办法来到达代码履行的意图。
eg:

经过payload:${assert($_GET[cmd])}}即可获取shell,也能够运用system函数来履行命令读取flag等。
 
变量解析之杂乱语法
当字符串用双引号或heredoc结构界说时,其间的变量将会被解析。共有两种语法规矩,一种简略规矩,一种杂乱规矩,这儿评论杂乱规矩。
杂乱规矩语法的明显符号是用花括号围住的表达式。任何具有string表达的标量变量,数组单元或目标特点都可运用此语法,表达办法{$var_name}或${var_name}。

依据php官方文档,这儿提示在PHP5今后能够运用{$}来调用函数、办法等。看下面的比如:

不难了解,{${getname()}} => {$s1ye},以函数回来值命名变量。这儿我在函数中加入了echo "s1ye";,能够发现先履行了getname函数并输出了“s1ye”,接着才履行了echo(优先级)。
为了便利了解payload,运用以下代码进行测验:

结构了一个相似phpinfo的简化函数,运用变量解析在双引号中的杂乱语法,先履行了test函数输出了“just for test”并回来true,能够看到,回来一条正告而且变量a的值是空的。
为什么Notice为”Undefined variable: 1”呢?回来TRUE,变量应该为$TRUE的。前面官方文档说过了,$ + string的变量会被解析,而TRUE是bool类型,而且是个常量,当回来TRUE并命名变量时php解析器将TRUE转化为了string类型。

因为没有该变量导致赋值给a变量时回来为空(并不能用数字最初来命名变量)。
 
了解payload
直接运用payload{${phpinfo()}}或许${${phpinfo()}}会回来phpinfo信息,但都会报错。


上面现已讲过了报错的原因,这儿就很好了解了。接下来逐渐的来剖析payload成功履行的进程:

eval函数将字符串当作php代码履行,因而,经过图中代码清晰可见相当于界说了str变量,赋值为一个字符串”{${phpinfo()}}”。
$str = "{${phpinfo()}}",花括号界说了变量的鸿沟,因而该条句子先履行括号中内容,获取函数回来值,并以回来值的string命名变量再赋值给str变量(同上面剖析的test函数相同)。
到了这儿只需修正”{${?}}”中的?为其他php代码就能够到达写文件读文件或许getshell等操作了,只需要注意addslashes函数即可。
 
考虑
先看一下原题代码
eval('$str="'.addslashes($str).'";');
在双引号中能够运用花括号界说变量鸿沟,调用函数等,假如修正为单引号包裹addslashes函数,还能履行代码了吗。
$str = @(string)$_GET['str'];
eval("$str='".addslashes($str)."';");
很简单就发现尽管addslashes函数部分内容被单引号包裹,可是变量str却变成了双引号包裹。这说明仍是能够被运用的,直接测验上面的payload:

发现报错,变量相同被双引号包裹(其实并没有被双引号包裹),这儿却报错了。可是payload2${${phpinfo()}}却能够正常履行。

其实这儿只需略微考虑一下就能够了解了,用两个比如来解说:

能够看到payload1不能履行成功的原因便是并没有被双引号包裹,所以外层符号变量鸿沟的花括号无用。而payload${phpinfo()}/${${phpinfo()}}(不管加几个”${}”都无差,只不过报错更多罢了)相当于$a=’string’,a==(phpinfo()的回来值string方式),即履行函数后运用回来值界说变量并赋值,因而能够履行成功。
 
总结
全体看下来感觉仍是很绕的,总结便是遇到问题除了百度谷歌,要多仔细读官方文档, 其实文档现已写得很清楚了。
 

相关文章

黑客在线接单,程序员黑客联系方式,损友圈找黑客黑了你是什么意思

15高级职称考生报名.exe 英国0.02%[1][2][3][4][5][6][7][8]黑客接单渠道0x00 前语之所以叫固件,是由于这部分软件被贮存在手机的只读存储器内,用户只能读取其间的...

代码审计入门之BlueCMS v1.6 sp1-黑客接单平台

大家好,我是聂风,在此,我做一个简略的代码审计文章共享来便利同学们学习。BlueCMS v1.6 sp1一直以来便是PHP代码审计入门的最佳良品。这次咱们就挑选这一个事例进行学习。我先声明,我的代码审...

网络黑客接单怎么说_看门狗2黑客空间怎么找

V4版别现在存在的一切依据,都将这个新呈现的Hades安排与Zebrocy联络在一同,因而能够确定与Sofacy歹意安排相关,一同也作为BlackEnergy、GreyEnergy、Sandworm集...

怎么查开房,如何找一名黑客师傅,找黑客被骗了

upLoad_bm1.asp和upLoad_c1.asp这两个随意选个,一般办理员都忽视了这2缝隙。 部分Bypass 1.e这中特别的数值方法适合于MSSQL的场景。 Step 2 Standard...

学信网显示结业严重吗,cf找黑客那解封吗,找黑客修改挂科会被开除吗

图20 无人机绑架模块全家福  上一篇WPA/WAP2wifi 暗码破解笔记提到怎么勘探邻近敞开的AP而且破解进入,那么进入他人据局域网咱们能干些什么呢?换句话说假如他人进入了咱们内部网络,会有什么影...

黑客盗号在线接单平台_专业黑客找ip

· BlackWallet.co是一款根据Web的Stellar Lumen币(XLM)钱包使用。 一个或多个不知道的黑客进犯BlackWallet并绑架了其DNS服务器,并其用户账户中盗取了超越40...