PrestaShop

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

XSS์—์„œ RCE๊นŒ์ง€

  • PrestaXSRF: PrestaShop ์ต์Šคํ”Œ๋กœ์ž‡ ์Šคํฌ๋ฆฝํŠธ๋กœ XSS๋ฅผ RCE ๋˜๋Š” ๊ธฐํƒ€ ์‹ฌ๊ฐํ•œ ์ทจ์•ฝ์„ฑ์œผ๋กœ ์Šน๊ฒฉ์‹œํ‚ต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ this post๋ฅผ ํ™•์ธํ•˜์„ธ์š”. ์ด ๋„๊ตฌ๋Š” PrestaShop ๋ฒ„์ „ 8.X.X ๋ฐ 1.7.X.X๋ฅผ ์ง€์›ํ•˜๋ฉฐ ๋‹ค์Œ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค:
  • (RCE) PSUploadModule(); - ์ปค์Šคํ…€ Module ์—…๋กœ๋“œ: Persistent Module (backdoor)์„ PrestaShop์— ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

ps_checkout ExpressCheckout silent login account takeover (CVE-2025-61922)

ps_checkout ๋ชจ๋“ˆ < 5.0.5์—์„œ ์‹ ์› ๊ฒ€์ฆ์ด ๋ˆ„๋ฝ๋˜์–ด ์ธ์ฆ๋˜์ง€ ์•Š์€ ๊ณต๊ฒฉ์ž๊ฐ€ ์ด๋ฉ”์ผ์„ ์ œ๊ณตํ•˜์—ฌ ์–ด๋–ค ๊ณ ๊ฐ์˜ ์„ธ์…˜์œผ๋กœ๋„ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์—”๋“œํฌ์ธํŠธ (์ธ์ฆ ์—†์Œ): POST /module/ps_checkout/ExpressCheckout.
  • ํ๋ฆ„: ExpressCheckout.php๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ๋ณด๋‚ธ JSON์„ ๋ฐ›์•„ orderID๋งŒ ํ™•์ธํ•˜๊ณ  ExpressCheckoutRequest๋ฅผ ๊ตฌ์„ฑํ•œ ๋’ค ExpressCheckoutAction::execute()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ์ฆ ๋ฒ„๊ทธ: ์ทจ์•ฝํ•œ ๋ฒ„์ „์—์„œ ExpressCheckoutAction์€ ๋กœ๊ทธ์ธ์ด ์—†๋Š” ๊ฒฝ์šฐ CustomerAuthenticationAction::execute()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋Š” ๋‹จ์ˆœํžˆ customerExists(<payer_email>)๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  context->updateCustomer(new Customer($id))๋ฅผ ์‹คํ–‰ํ•˜๋ฏ€๋กœ email existence == login (๋น„๋ฐ€๋ฒˆํ˜ธ/ํ† ํฐ ๊ฒ€์ฆ ์—†์Œ).
  • ๊ณต๊ฒฉ์ž๊ฐ€ ์ œ์–ดํ•˜๋Š” ์ด๋ฉ”์ผ ํ•„๋“œ: JSON ํŽ˜์ด๋กœ๋“œ ๋‚ด order.payer.email_address๊ฐ€ ExpressCheckoutRequest::getPayerEmail()์— ์˜ํ•ด ์ฝํž™๋‹ˆ๋‹ค.

๊ณต๊ฒฉ ๋‹จ๊ณ„

  1. ๋“ฑ๋ก๋œ ๊ณ ๊ฐ ์ด๋ฉ”์ผ์„ ์ˆ˜์ง‘ํ•ฉ๋‹ˆ๋‹ค (admin ๊ณ„์ •์€ ๋ณ„๋„์ด๋ฉฐ ์ด ํ๋ฆ„์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค).
  2. ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•ด ์ธ์ฆ๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ orderID์™€ ํ”ผํ•ด์ž ์ด๋ฉ”์ผ์„ order.payer.email_address์— ๋„ฃ์–ด POST ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
  3. ์—”๋“œํฌ์ธํŠธ๊ฐ€ 500์„ ๋ฐ˜ํ™˜ํ•˜๋”๋ผ๋„ ์‘๋‹ต์—๋Š” ํ”ผํ•ด์ž ๊ณ ๊ฐ ์ปจํ…์ŠคํŠธ์˜ ์ฟ ํ‚ค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(์„ธ์…˜์ด ์ด๋ฏธ ์ „ํ™˜๋จ). ์ด๋ฅผ ํ†ตํ•ด PII ์ ‘๊ทผ์ด๋‚˜ ์ €์žฅ๋œ ์นด๋“œ๋กœ ๊ฒฐ์ œํ•˜๋Š” ๋“ฑ์˜ ํ–‰์œ„๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
POST /module/ps_checkout/ExpressCheckout HTTP/1.1
Host: `<target>`
Content-Type: application/json
Content-Length: 72

{"orderID":"1","order":{"payer":{"email_address":"victim@example.com"}}}

์ฐธ๊ณ ์ž๋ฃŒ

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ