Կարճ ասած՝ ամեն ինչ սկսվեց elFinder-node-ի կոնեկտորից։ Ուսումնասիրում էի, մեկ էլ տեսնեմ՝ target պարամետրը ընդհանրապես չի ֆիլտրվում։ Քանի որ սիստեման Base64-ով կոդավորված payload էր սպասում, սովորական Path Traversal-ով հանգիստ դուրս եկա վեբ-դիրեկտորիայից։

Բայց սա մենակ մուտքն էր։ Բուն պրոբլեմն էն էր, որ սերվերի վրա Node.js պրոցեսը աշխատում էր լրիվ root իրավունքներով։ Իսկ երբ դու root ես, մենակ ֆայլ կարդալը քեզ չի բավարարում. արդեն կարաս ֆայլ գրես ու ստեղծես էնպիսի տեղերում, որտեղ վեբը հաստատ դոստուպ չպիտի ունենար։

Կարայի հենց տեղում JS-ով մի հատ Reverse Shell գցեի, բայց դա այնքան էլ հուսալի չէր՝ քեշի պատճառով կարար կախեր կամ պրոցեսը kill լիներ ու կապս կտրվեր։ Դրա համար որոշեցի միանգամից persistence ապահովել:

Քանի որ իրավունքներս ներում էին, մտա /etc/cron.d/ դիրեկտորիա ու ընդեղ մի սովորական տեքստային ֆայլ գցեցի՝ մեջը ընդամենը մի տող կոմանդ։ Էդ հրամանը սիստեմին ստիպում էր ամեն րոպե կպնել իմ մեքենային ու սերվերի shell-ը դնել դեմս։


Էս մեթոդով էնպիսի կայունություն ես ստանում, որ նույնիսկ եթե ադմինը նկատի ու կապս քցի, ուղիղ մի րոպեից cron-ը նորից ինձ ավտոմատ միացնելու ա։ Արդյունքում ունենք մաքուր ու կայուն RCE՝ անմիջապես օպերացիոն համակարգի մակարդակով։

Փաստացի, մի հատ չֆիլտրված պարամետրն ու ծրագիրը root-ով աշխատացնելու ադմինի կոպիտ սխալը բերեցին նրան, որ սերվերը լրիվ pwn եղավ: