码迷,mamicode.com
首页 > Web开发 > 详细

实验吧Web-PHP大法

时间:2016-09-23 20:02:16      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:

链接:  http://www.shiyanbar.com/ctf/54

    技术分享

页面情况

    技术分享

获得提示: index.php.txt

<?php
if(eregi("hackerDJ",$_GET[id])) {
  echo("<p>not allowed!</p>");
  exit();
}

$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
  echo "<p>Access granted!</p>";
  echo "<p>flag: *****************} </p>";
}
?>

<br><br>
Can you authenticate to this website?

首先eregi()函数进行一次比较判断,如果想打印flag,id不能等于"hackerDJ" ,并且经过url解码后id等于"hackerDJ"

但这里需要注意的是:在浏览器中提交时浏览器会为我们进行一次解码
可以在本地执行下面的代码: 
<?php
$id = ‘%68ackerDJ;
if(eregi("hackerDJ",$id)) {
  echo("<p>not allowed!</p>");
  exit();
}

$id = urldecode($id);
if($id == "hackerDJ")
{
  echo "<p>Access granted!</p>";
  echo "<p>flag: *****************} </p>";
}
?>
可以看到成功打印,说明浏览器的确为我们转换了一次
技术分享

因此我们需要进行两次编码: h --> %68 --> %2568

构造url: index.php?id=%2568ackerDJ

提交即可获得flag:   flag: DUTCTF{PHP_is_the_best_program_language}

笔记:
字符串比对解析,与大小写无关。
eregi()函数
语法:  eregi(string pattern, string string, array [regs]);
返回值: 整数/数组
特点:PHP函数eregi()与大小写无关,类似函数ereg() 则区分大小写
例:if (eregi("C","abcdef")   //true

URl双编码: 将经过url编码产生的%再次编码,及把%替换为%25

 

实验吧Web-PHP大法

标签:

原文地址:http://www.cnblogs.com/ssooking/p/5901440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!