misc
buuctf-小明的保险箱
打开附件是一个在线图片首先将其另存为,然后仅仅只是一个图片,而无其他信息,那么我们再进行binwalk或者foremost文件分离,得到了一个文件夹,其中含有一个压缩包但是是一个加密的,我们再暴力破解密码然后成功解压,得到了一个文本文件,打开既是flag
crypto
buuctf-Alice与Bob
根据题目,我们需要将这个大整数分解为两个素数后,将小数放在前,大数放在后,然后组成的新数进行md5加密
buuctf-大帝的密码武器
下载附件后得到的是一个文件,其名为zip,有所怀疑是压缩包,用010打开,看到其中含有多个txt文件,将其重命名为后缀的zip
解压后得到两个文本文件以及一个文件夹先查看密文和题目文件这是题目,再根据题目,大帝的密码武器,应该这个巨大的人物就是凯撒大帝这里我们输入密文后选择枚举,就可以得到一串的明文,得到一个有意义的单词security(是第14个),所以偏移量是13(因为第一个的偏移量为0)再包上flag{}即可
buuctf-丢失的md5
下载附件得到了一个python脚本
import hashlib
for i in range(32,127):
for j in range(32,127):
for k in range(32,127):
m=hashlib.md5()
m.update('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM')
des=m.hexdigest()
if 'e9032' in des and 'da' in des and '911513' in des:
print des
但是这个代码并不成熟,先将其完美一下
import hashlib
for i in range(32,127):
for j in range(32,127):
for k in range(32,127):
m=hashlib.md5()
m.update(('TASC'+chr(i)+'O3RJMV'+chr(j)+'WDJKX'+chr(k)+'ZM').encode())
des=m.hexdigest()
if 'e9032' in des and 'da' in des and '911513' in des:
print(des)
再来分析一下
- 导入了一个hashlib的模块
- 进行三个循环,得候选字符
- 给了一个m来进行md5计算
- 对m进行字符更新(通过update函数),其中的字符包括了已固定的‘TASC’,'O3RJMV','WDJKX','ZM',然后还有通过三个循环得到了字符,即chr(i),chr(j),chr(k);(i,j,k通过外层循环获得,然后再将其从ascii码转为字符)。
- 再将刚才生成的字符串转为十六进制,赋给des
- 进行条件判断,如果des这个十六进制里包含了 'e9032','da','911513'就输出des
运行后得到的字符串即为des ‘e9032994dabac08080091151380478a2’运行出来的即是flag‘’
web
nssctf-[LitCTF 2023]PHP是世界上最好的语言!!
题目有所提示是用php语言写的,那么我们就需要了解php语言这是它的基本格式
然后打开环境,看到右边板块的下方写着run code,也就是说右侧可以运行代码我们就在右侧板块输入php代码
先输
<?php system('ls')
?>来查看目录,然后我们
可是我们试图去穿越,却没有输出,那就换个办法,不去寻找根目录,直接cat试试,成功了!
re
nssctf-[SWPUCTF 2021 新生赛]非常简单的逻辑题
flag = 'xxxxxxxxxxxxxxxxxxxxx'
s = 'wesyvbniazxchjko1973652048@$+-&*<>'
result = ''
for i in range(len(flag)):
s1 = ord(flag[i])//17
s2 = ord(flag[i])%17
result += s[(s1+i)%34]+s[-(s2+i+1)%34]
print(result)
# result = 'v0b9n1nkajz@j0c4jjo3oi1h1i937b395i5y5e0e$i'
打开附件是一个python代码,我们对其分析,一个flag被*占位隐藏了,一个字符串s,然后使i遍历flag的长度,即0到len(flag)-1。每一次遍历,s1为flag的第i位转为Unicode码后又对17进行除法并向下取整,s2为flag的第i位转为Unicode码后与17求余,
result就是加入字符,即s的第(将s1的结果与i相加后再与34求余)位以及s的第-(s2的结果加上i再加上1,然后与34求余)【即逆向索引】。
分析了代码后我们需要写脚本
result = 'v0b9n1nkajz@j0c4jjo3oi1h1i937b395i5y5e0e$i'
s = 'wesyvbniazxchjko1973652048@$+-&*<>'
result1=[result[i:i+2] for i in range(0,len(result),2)]
print(result1)
flag=''
for i in range(len(result1)):
for r in range(32,127):
s1=r//17
s2=r%17
flag=s[(s1+i)%34]+s[-(s2+i+1)%34]
if flag==result1[i]:
print(chr(r),end='')
首先是将其结果result以及运行需要的字符串s加入程序,然后因为原代码中flag的一个字符将转为两个字符并加入result中,所以我们将result分为两个一组的列表,即result1。
然后给一个空的变量flag,遍历result1的长度(即遍历原flag的长度)那么多次,然后再遍历ascii码中可以输出为字符的所有ascii值(为的是还原原代码的flag[i]的ascii值),然后与前面进行同样的运算后一次转出两个字符,再与result1的第i的元素相比较,如果flag与其相同,那么这个r对应的字符就在flag的第i位。如此便得到了flag
pwn(后续补充)
buuctf-rip
工具准备
checksec
打开虚拟机的终端
克隆git clone https://github.com/slimm609/checksec.git
然后进入这个克隆得到的文件 cd checksec
手动复制
修改checksec的权限为可执行
结束,我们再查看一下checksec的版本,有结果就是说我们安装成功了