做题网址:https://www.ichunqiu.com/battalion?q=3433
一.解题思路
首先看到代码:
include "flag.php";
$a = @$_REQUEST['hello'];
if(!preg_match('/^\w*$/',$a ))
{
die('ERROR');
}
eval("var_dump($$a);");
show_source(__FILE__);
?>
看到超全局变量$_REQUEST,加上提示说flag就在某六位变量中,想着可能和Global 作用域有关,然后想到 [php全局变量漏洞 $GLOBALS漏洞预警],漏洞相关资料可以看这个网址:https://blog.csdn.net/kendyhj9999/article/details/26624915
所以试着从全局变量入手。
二.解题步骤
直接在网址后加?hello=GLOBALS 把hello变为超全局变量,同时用burpsuite进行抓包拦截得到flag:
三.解题收获
1.
可变变量:把一个变量的值作为一个变量的变量名
$$a = 'world'; // 相当于$$a=$hello=world
echo "$a $hello";?>// 输出hello world
2.
GET方法和POST方法传值的区别:
使用get方式提交表单时,浏览器将各个表单字段元素及其数据按照url参数的方式附加在请求行的资源后面。使用get方式传递的数据量是有限的,一般限制在1K以下。
使用post方式时,浏览器把各表单字段元素及其数据作为HTTP消息的实体内容发送给web服务器,而不是作为url地址参数传递,因此,使用post方式,要比使用get方式大的多。
3.
burpsuite作为代理中间人对请求和响应进行拦截,丢弃,修改,把请求数据包转给其他服务器的功能。
领取专属 10元无门槛券
私享最新 技术干货