天下武功唯快不破

http://ctf4.shiyanbar.com/web/10.php

看题目,是要post一个值过去,看源码可以知道键为key,在Header中可以发现一个字段,FLAG

注释的重要性:<!-- please post what you find with parameter:key -->

post key=FLAG的值发现提示,必须更快,那么就只有写脚本来完成了

(注意的是,返回的FLAG解base64之后是xxx:xxx),冒号后面的才是要提交的值,所以这里要分割一下

运行得到flag 

import base64 import urllib2 import urllib
url = 'http://ctf4.shiyanbar.com/web/10.php' 
req = urllib2.Request(url)
rsp = urllib2.urlopen(req)
flag = rsp.info().getheader('FLAG')
flag = base64.b64decode(flag)
flag = flag.split(':')[1] 
print flag
data = urllib.urlencode({'key':flag})
req1 = urllib2.Request(url, data=data)
rsp = urllib2.urlopen(req1).read() 
print rsp

注:查看源码;Base64编码

 

安女神之名

1. 和GFW没有关系,它就是过滤了“安女神”三个字

2.安女神用什么编码好?备注以GET方式送出,URL编码没有什么用处,到了服务器端会被解码,所以用&#XXX;这种格式的HTML编码。对照表如下:

http://www.jb51.net/onlineread/htmlchar.htm 

http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php

其实就是Unicode编码加上了前缀&#。

Unicode编码在线工具:http://tool.chinaz.com/Tools/unicode.aspx

所以安女神的编码后得到&#23433;&#22899;&#31070;

好吧,如果你用16进制&#x5b89;&#x5973;&#x795e;

西普实验吧-ctf-web-1

输入后得到:flag = [[415 Unavailable For Legal Reasons]]

好吧,比较无聊,查看源码发现flag.

注:查看源码,HTML实体编码,Unicode编码

 

思路很重要

页面就是http://ctf4.shiyanbar.com/web/9/index.php

404found

我很喜欢。。可是,他不让查源码。。好,我就用python发包。或者,Firebug查看一下也可以。。(要选择显示注释,不然看不到,所以还是自己写程序比较好,这样信息得到的全,不容易忘)

import urllib2
import urllib
url = 'http://ctf4.shiyanbar.com/web/9/'
req = urllib2.Request(url)
response = urllib2.urlopen(req)
print response.read()

我粗心的没注意到源码那句“<!-- 粗心的程序员,写完代码也不删。-->”

所以就不会去查index.php~\index.php.bak这类临时文件。。

所以就不会发现该文件里的:

$flag='xxx';     
extract($_GET);     
if(isset($shiyan)){        
    $content=trim(file_get_contents($flag));
    if($shiyan==$content){ 
       echo'ctf{xxx}';     }
     else{       
       echo'Oh.no';}   
     }

然后就不会发现,这就是是一个GET提交,然后绕过验证的问题。

就不会使用 flag=乱七八糟的东西&shiyan=的参数添加来解决问题。关于变量覆盖,以后还要多学习,这个算基本无阻碍的。。

http://ctf4.shiyanbar.com/web/9/index.php?flag=&shiyan=

得到的结果也不是ctf{xxxxxxx}格式,所以,是加了密的,别怕,最简单的移位。

注:源码挖掘,临时文件

 

Forms

确实很简单,首先,网页太简单了,所以不是源码里藏了东西,就是发送的时候包里有东西。我们截取包,发现里面有个

西普实验吧-ctf-web-1

showsource,必须改为1,然后题就结了。

 

拐弯抹角

我觉得这道题挺不错,访问地址是:http://ctf5.shiyanbar.com/10/indirection/index.php

就是分7个步骤判断URL是否满足条件,URL重写的判断

我觉得源码很有趣,有教育意义,放出来:

  1 Flag:
  2 <?php 
  3 // code by SEC@USTC 
  4 
  5 echo '<html><head><meta http-equiv="charset" content="gbk"></head><body>'; 
  6 
  7 $URL = $_SERVER['REQUEST_URI']; 
  8 //echo 'URL: '.$URL.'<br/>'; 
  9 $flag = "CTF{???}"; 
 10 
 11 $code = str_replace($flag, 'CTF{???}', file_get_contents('./index.php')); 
 12 $stop = 0; 
 13 
 14 //这道题目本身也有教学的目的 
 15 //第一,我们可以构造 /indirection/a/../ /indirection/./ 等等这一类的 
 16 //所以,第一个要求就是不得出现 ./ 
 17 if($flag && strpos($URL, './') !== FALSE){ 
 18     $flag = ""; 
 19     $stop = 1;        //Pass 
 20 } 
 21 
 22 //第二,我们可以构造 \ 来代替被过滤的 / 
 23 //所以,第二个要求就是不得出现 ../ 
 24 if($flag && strpos($URL, '\\') !== FALSE){ 
 25     $flag = ""; 
 26     $stop = 2;        //Pass 
 27 } 
 28 
 29 //第三,有的系统大小写通用,例如 indirectioN/ 
 30 //你也可以用?和#等等的字符绕过,这需要统一解决 
 31 //所以,第三个要求对可以用的字符做了限制,a-z / 和 . 
 32 $matches = array(); 
 33 preg_match('/^([a-z\/.]+)$/', $URL, $matches); 
 34 if($flag && empty($matches) || $matches[1] != $URL){ 
 35     $flag = ""; 
 36     $stop = 3;        //Pass 
 37 } 
 38 
 39 //第四,多个 / 也是可以的 
 40 //所以,第四个要求是不得出现 // 
 41 if($flag && strpos($URL, '//') !== FALSE){ 
 42     $flag = ""; 
 43     $stop = 4;        //Pass 
 44 } 
 45 
 46 //第五,显然加上index.php或者减去index.php都是可以的 
 47 //所以我们下一个要求就是必须包含/index.php,并且以此结尾 
 48 if($flag && substr($URL, -10) !== '/index.php'){ 
 49     $flag = ""; 
 50     $stop = 5;        //Not Pass 
 51 } 
 52 
 53 //第六,我们知道在index.php后面加.也是可以的 
 54 //所以我们禁止p后面出现.这个符号 
 55 if($flag && strpos($URL, 'p.') !== FALSE){ 
 56     $flag = ""; 
 57     $stop = 6;        //Not Pass 
 58 } 
 59 
 60 //第七,现在是最关键的时刻 
 61 //你的$URL必须与/indirection/index.php有所不同 
 62 if($flag && $URL == '/indirection/index.php'){ 
 63     $flag = ""; 
 64     $stop = 7;        //Not Pass 
 65 } 
 66 if(!$stop) $stop = 8; 
 67 
 68 echo 'Flag: '.$flag; 
 69 echo '<hr />'; 
 70 for($i = 1; $i < $stop; $i++) 
 71     $code = str_replace('//Pass '.$i, '//Pass', $code); 
 72 for(; $i < 8; $i++) 
 73     $code = str_replace('//Pass '.$i, '//Not Pass', $code); 
 74 
 75 
 76 echo highlight_string($code, TRUE); 
 77 
 78 echo '</body></html>'
http://ctf5.shiyanbar.com/10/indirection/index.php

相关文章: