PICO CTF 2013 PHP 2: 85

时间:2022-10-08 10:15:49

这一题应该是入门级题目吧

链接:http://oj.xctf.org.cn/problems/253

--------------------------------------------------------------------------------

首先点击打开题目的超链接就显示了一句话,一般都先看一下源码吧

PICO CTF 2013 PHP 2: 85

源码有个注释,说源代码在index.phps里,那就在地址栏输入者个文件看看咯,输入就提示下载了,下载了就更好

PICO CTF 2013 PHP 2: 85

用编辑器打开就看到代码如下:

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

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


<br><br>
Can you authenticate to this website?
<!-- source: index.phps -->
首先第一个if里的eregi函数可以说匹配函数吧,只要含有admin无论大小写都返回true

PICO CTF 2013 PHP 2: 85

PICO CTF 2013 PHP 2: 85PICO CTF 2013 PHP 2: 85

所以我们肯定不能直接输入admin这个单词的,这就为下面作了铺垫了

下面将$_GET['id']进行了UrlDecode解码,然后再跟admin进行比较,如果相等就输出key,想想都有点击小激动啊(以下献丑了,其实每次成功都经历了不少,很多时候那些成功人士都没有告诉你们,一方面可能能让你们产生崇拜感,另一方面,人对于痛苦,不爽的事情都是天性地去忘掉的)

先去百度一下在线UrlEncode编码吧(想着一编码,绕过第一个if,再解码,进入第二个if,输出key,多好,但是理想总是很遥远)

PICO CTF 2013 PHP 2: 85

看到这我的内心是崩溃的

*

*

*

*

*

*

*

其实中间还犯了一点小错误,毫无目的的去搜寻地址栏支持什么编码什么的(现在看来:跟源代码的原意违背了,源代码就很明确的都用了urldecode了,就肯定是要我们输入urlencode后的值啊)

接下里就直接搜了w3c的url编码表

ASCII Value URL-encode ASCII Value URL-encode ASCII Value URL-encode
æ %00 0 %30 ` %60
  %01 1 %31 a %61
  %02 2 %32 b %62
  %03 3 %33 c %63
  %04 4 %34 d %64
  %05 5 %35 e %65
  %06 6 %36 f %66
  %07 7 %37 g %67
backspace %08 8 %38 h %68
tab %09 9 %39 i %69
linefeed %0a : %3a j %6a
  %0b ; %3b k %6b
  %0c < %3c l %6c
c return %0d = %3d m %6d
  %0e > %3e n %6e
  %0f ? %3f o %6f
  %10 @ %40 p %70
  %11 A %41 q %71
  %12 B %42 r %72
  %13 C %43 s %73
  %14 D %44 t %74
  %15 E %45 u %75
  %16 F %46 v %76
  %17 G %47 w %77
  %18 H %48 x %78
  %19 I %49 y %79
  %1a J %4a z %7a
  %1b K %4b { %7b
  %1c L %4c | %7c
  %1d M %4d } %7d
  %1e N %4e ~ %7e
  %1f O %4f   %7f
space %20 P %50 %80
! %21 Q %51   %81
" %22 R %52 %82
# %23 S %53 ƒ %83
$ %24 T %54 %84
% %25 U %55 %85
& %26 V %56 %86
' %27 W %57 %87
( %28 X %58 ˆ %88
) %29 Y %59 %89
* %2a Z %5a Š %8a
+ %2b [ %5b %8b
, %2c \ %5c Œ %8c
- %2d ] %5d   %8d
. %2e ^ %5e Ž %8e
/ %2f _ %5f   %8f
为了方便测试,我就在本地写了个文件测试,代码如下:

PICO CTF 2013 PHP 2: 85

因为a的编码是%61嘛,我就在地址栏输入啊,结果一按回车.......,就变成a了

PICO CTF 2013 PHP 2: 85

PICO CTF 2013 PHP 2: 85

我再看一下编码表,发现.....

PICO CTF 2013 PHP 2: 85

原来%号都用编码啊,那%2561不就是表示%61吗,马上测试一下

PICO CTF 2013 PHP 2: 85

那这题应该结束了吧

PICO CTF 2013 PHP 2: 85PICO CTF 2013 PHP 2: 85

哈哈得到key了,去拿那85分吧