1. pyc
PYCを使用してオンラインで逆コンパイルしてPythonソースコードを取得します。
#!/usr/bin/env python
#詳細については、https://tool.lu/pyc/をご覧ください
#version: python 3.8
ランダムをインポートします
def encrypt_file(file_path):
random.seed(114514)
#警告: Decompyleが不完全
file_path='./flag'
encrypt_file(file_path)
次に、AI分析を使用して、対応する復号化スクリプトを取得します
ランダムをインポートします
OSをインポートします
def decrypt_data(encrypted_data):
random.seed(114514)
decrypted_data=bytearray()
byte in necrypted_data:の場合
key=random.randint(0、128)
decrypted_data.append(byte ^ key)
decrypted_dataを返します
def read_file(file_path、mode='rb'):
open(file_path、mode)をfile:として
file.read()を返します
def write_file(file_path、data、mode='wb'):
open(file_path、mode)をfile:として
file.write(data)
def decrypt_file(encrypted_file_path、output_file_path):
encrypted_data=read_file(encrypted_file_path)
decrypted_data=decrypt_data(encrypted_data)
write_file(output_file_path、decrypted_data)
__NAME __=='__ Main __' :の場合
encrypted_file_path='flag.enc'
output_file_path='flag_decrypted.txt'
decrypt_file(encrypted_file_path、output_file_path)
#flag {u_r_g00d_at_do1n_pyc}
2. mwatch
ヒント:データセキュリティ研究者がスマートデバイスによって収集されたデータをリアルタイムで分析すると、デバイスユーザーの価値が高いことを検出します。最高の値を分析するのに役立ちます。フラグ{MD5(データ収集デバイス名データ受信デバイス名値)}
心拍数は何度も表示されます。質問の説明に基づいてこれを探す必要があります。関連する心拍数のみを確認してください
フラグ{MD5(MIスマートバンド5_REDMI K40_128)}
フラグ{453D8FEDA5ADB6E7B4D54F71A9CE9E14}
3. babyrsa
ヒント:特定の従業員には、素数を生成する初期値があり、このアルゴリズムを長時間実行しました。このプログラムは誤って終了し、誤って初期値を削除しました。プレーンテキストを復元できますか?
ソースコード:
#task.py
#!/usr/bin/env python3
# - * - coding: utf-8-* -
秘密のインポートフラグから、init
crypto.util.Numberインポートから *
sage.allからimport *
gmpy2インポートirootから
m=bytes_to_long(flag.encode())
r=getPrime(128)
p=init
#範囲(r-1):の場合
#p +=next_prime(init)
#arsert iroot(p、3)[1]==1
Q=getPrime(12)
#n=p*q*r
n=r ** 4*q
E=getPrime(17)
c=pow(m、e、n)
印刷(f'r={r} ')
print(f'e={e} ')
印刷(f'c={c} ')
#R=287040188443069778047400125757341514899
#E=96001
#c=73855802810562767814979785380202271810096755452877197575049929510423791238909 673184757193027320814618632612457868216163319969575131936068848815308298035625
Qを取得するために12ビットの素数を爆破してから復号化します
crypto.util.Numberからlong_to_bytesをインポートします
R=287040188443069778047400125757341514899
E=96001
c=73855802810562767814979785380202271810096755452877197575049929510423791238909 673184757193027320814618632612457868216163319969575131936068848815308298035625
#指数のモジュラスが実際にr ** 4であると仮定すると
n=r ** 4
#emodφ(n)のモジュラー逆数を計算します。ここで、φ(n)は(r-1)*(r ** 3)のようなrの関数になる可能性があります
#RSA復号化式m=c^d mod nにはφ(n)の正しい値が必要です。ここで、d=e^( - 1)modφ(n)
#ここで、φ(n)=r^4 -r^3を単純化として仮定すると、実際のRSAセットアップに基づいてこれを調整する必要があるかもしれません
phi_n=r ** 4 -r ** 3
d=inverse(e、phi_n)
#メッセージを復号化します
m=pow(c、d、n)
#番号をバイトに変換します
メッセージ=long_to_bytes(m)
印刷(メッセージ)
#flag {3b0ce326141ea4f6b5bf2f37efbd1b42}
4. バックパック
BKZアルゴリズムを使用して、一連のベースを解くバックパック暗号化
#!/usr/bin/env python3
# - * - coding: utf-8-* -
sage.allからimport *
秘密のインポートフラグから
crypto.util.Numberインポートから *
数学からインポートlog2から
クラスナープサック:
def __init __(self、n、m):
self.m=[]
self.n=n
self.m=self.pre(m)
self.a=0
self.b=0
def pre(self、m):
tmp_m=bin(m)[2:]
t=[]
TMP_M:のTMPの場合
T.Append(int(tmp))
tを返します
def get_m(self):
seq=[randint(2 ** 34,2 ** 35)for _ in range(self.n)]
self.m=seq
def calc_denity(self):
t=log2(max(self.m))
d=self.n/t
印刷(d)
def enc(self):
self.get_m()
self.calc_dences()
c=0
範囲のt(len(self.m)):
c +=self.m [t] * self.m [t]
印刷(f'c={c} ')
print(f'm={self.m} ')
__NAME __=='__ Main __' :の場合
m=bytes_to_long(flag.encode())
n=m.bit_length()
k=ナップサック(n、m)
k.enc()
#c=231282844744
#M=[27811518167、19889199464、19122558731、1966624823、25670001067、30690729665、23936341812、31011714749、30524482330、21733333371593、17530715307153071530715307153071530717153071530715307153071530715307153071530715307153071530715307153071530715307153071715チ19140841231、33846825616、17334386491、28867755886、2935454582、21758322019、27261411361、31465376167、26145493792、270792、270792、2707992 33514052206、25397635665、21970496142、30801229475、22405695620、18486900933、27071880304、17919853256、18072328152、21108080920]
Sagemathで実行:
crypto.util.Number inmort long_to_bytesから
C=231282844744
M=[27811518167、19889199464、19122558731、1966624823、25670001067、30690729665、
23936341812、31011714749、30524482330、21737374993、17530717152、19140841231、
33846825616、17334386491、288677555886、29354544582、21758322019、27261411361、
31465376167、26145493792、27075307455、33514052206、25397635665、21970496142、
30801229475、22405695620、18486900933、27071880304、17919853256、18072328152、
21108080920]
l=block_matrix([[1、matrix(zz、m)]、[0、c]])。lll())。
L:の行
row [-1]==0およびlen(set(row [:-1]))==1:の場合
#最後の要素を除くすべての要素が同じであると仮定すると同じです
ans=[abs(i)in ow in ow in [:-1]]
ans=int( ''。join(map(str、ans))、2)
print(long_to_bytes(ans))
5. ターゲットを絞ったデータ収集
OpenPyxlをインポートします
リクエストをインポートします
インポート時間
urllib.parseインポートurlencodeから
burp0_url='http://121.40.65.125:23328/submit'
Def devery_name_and_id(input_file、output_file):
wb=openpyxl.load_workbook(input_file)
ws=wb.active
ws.iter_rows(min_row=1、max_col=1、max_row=ws.max_row、values_only=true):の行の場合
行[0] :の場合
名前、id_number=row [0] .split( '----')#extrame name and Identityカード
印刷(名前、id_number)
Age=2024-int(id_number [6:10])
if(int(id_number [10:12])4):
年齢- =1
sexx=u'male '
burp0_json={'address':' asd '、' age ': str(age)、 'ethnicity ':' as '、' experience ': '1'、 'idcard': id number、' name ': '' '' 'position ':' as '、' sex': sexx}
sexx2=u'female '
burp0_json1={'address':' asd '、' age '3: str(age)、 'ethnicity ':' as '、' experience ': '1'、 'idcard'3360 id _number、' name ': '' '、 'position ':' as '、' sex': sexx2}
try:
r0=requests.post(burp0_url、json=burp0_json)
r1=requests.post(burp0_url、json=burp0_json1)
print(r0.request.body)
print(r0.text、r1.text)
#time.sleep(0.5)
requests.exceptions:を除く
print( 'err')
#time.sleep(2)
#ws.append([name.strip()、id_number.strip()])
#wb.save(output_file)
wb.close()
__name__=='__main __' :の場合
input_file='data1.xlsx'
output_file='deprosed_data.xlsx' #Noの使用、破棄されます
devery_name_and_id(input_file、output_file)
6. 天気
レビューbundle.js
アクセスするパラメーターを取得します
7.mysqlクリーンアップ
ヒント:
要件に応じて、データベースからいくつかのユーザーデータを完全に削除するには、提供されたMySQLコンテナに接続してすべてのCTFテーブルを削除してください。ユーザーIDは5142、2123、1169、および8623です。これらのユーザーを徹底的にクリーンアップする必要があり、サーバーでは残りのデータを見つけることはできません[および他のユーザーデータも変更できません。操作が成功すると、システムはCTF.FLAGテーブルにフラグデータを入力します。 (MySQL CTFユーザーパスワードPSWD@123)
( '5142'、 '2123'、'1169 '、' 8623 ')のushows_id in(' 5142 '、' 2123 '、' 18623 ')から削除します。
( '5142'、 '2123'、'1169 '、' 8623 ')inuser_id in(' 5142 '、' 2123 '、' 8623 ');
userlog where where user_id in( '5142'、 '2123'、'1169 '、' 8623 ');
user_id in( '5142'、 '2123'、'1169 '、' 8623 ');
( '5142'、 '2123'、'1169 '、' 8623 ')でid(' 5142 '、' 2123 '、'1169'、 ');
テーブルを再構築し、削除後に残りのデータをクリアします
Alter Tableユーザーエンジン=innodb;
Alter Table userlog Engine=innodb;
Table TransactionHistory Engine=Innodbを変更します。
Alter Table ShopphingCart Engine=Innodb;
Alter Table Orders Engine=Innodb;
8. ファントムスクエア
第3レベルのマジックスクエアには8つの結果しかありません。もう数回試してみてください
Hashlibをインポートします
ランダムをインポートします
文字列をインポートします
#文字セットを英数字として定義します
charset=string.ascii_letters + string.digits
true:
#チャーセットからランダムな4文字列を生成します
rand_str='' .join(random.choice(charset)for _ in _ in range(4)) + 'cyhqp8lsgzyjtnud'
#文字列のSHA-256ハッシュを計算します
hash_output=hashlib.sha256(rand_str.encode())。hexdigest()
#ハッシュがターゲットハッシュと一致するかどうかを確認します
hash_output=='11f8af166cc28e24b4646cc300436f4d4bf8e11b2327379331a3eca2d5fc7c0c'3360の場合
print(rand_str [:4])#一致が見つかった場合は最初の4文字を印刷します
壊す
'' '
[2、7、6、9、5、1、4、3、8]
[2、9、4、7、5、3、6、1、8]
[4、3、8、9、5、1、2、7、6]
[4、9、2、3、5、7、8、1、6]
[6、1、8、7、5、3、2、9、4]
[6、7、2、1、5、9、8、3、4]
[8、1、6、3、5、7、4、9、2]
[8、3、4、1、5、9、6、7、2]
4 3 8
9 5 1
2 7 6
'' '
Recommended Comments