From 6a59cd6e6e92f9c1de78fc2c7228a3bd05eafaa3 Mon Sep 17 00:00:00 2001 From: "sherif.fathy" <sherif.fathy@4033779f-a91e-0410-96ef-6bf7bf53c507> Date: Fri, 3 Nov 2006 01:14:36 +0000 Subject: [PATCH] git-svn-id: http://webgoat.googlecode.com/svn/trunk@28 4033779f-a91e-0410-96ef-6bf7bf53c507 --- .../org/owasp/webgoat/HammerHead.java | 5 ++- .../owasp/webgoat/lessons/ForcedBrowsing.java | 30 ++++++++++++------ .../owasp/webgoat/lessons/LogSpoofing.java | 10 ++++++ .../org/owasp/webgoat/session/WebSession.java | 20 ++++++++++++ .../main/project/WebContent/WEB-INF/web.xml | 5 +++ .../project/WebContent/database/webgoat.mdb | Bin 188416 -> 188416 bytes .../lesson_plans/ForcedBrowsing.html | 26 +++++++++++---- 7 files changed, 78 insertions(+), 18 deletions(-) diff --git a/ webgoat/main/project/JavaSource/org/owasp/webgoat/HammerHead.java b/ webgoat/main/project/JavaSource/org/owasp/webgoat/HammerHead.java index 6083aefc1..51997f810 100644 --- a/ webgoat/main/project/JavaSource/org/owasp/webgoat/HammerHead.java +++ b/ webgoat/main/project/JavaSource/org/owasp/webgoat/HammerHead.java @@ -307,6 +307,9 @@ public class HammerHead extends HttpServlet s.setHasHackableAdmin( screen.getRole() ); + //More bookkeeping here to see if the user was able to force browse to the + //config URL. + s.setHasHackableConfig( s.getRequest().getRequestURI()); lesson.handleRequest( s ); s.setCurrentMenu( lesson.getCategory().getRanking() ); } @@ -346,7 +349,7 @@ public class HammerHead extends HttpServlet // in order to satisfy the remote admin lesson. s.setHasHackableAdmin( screen.getRole() ); - + lesson.handleRequest( s ); s.setCurrentMenu( lesson.getCategory().getRanking() ); } diff --git a/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/ForcedBrowsing.java b/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/ForcedBrowsing.java index f191920f0..53b65f4f5 100644 --- a/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/ForcedBrowsing.java +++ b/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/ForcedBrowsing.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import org.apache.ecs.Element; +import org.apache.ecs.ElementContainer; import org.apache.ecs.StringElement; import org.owasp.webgoat.session.WebSession; @@ -14,8 +15,8 @@ import org.owasp.webgoat.session.WebSession; * under the GPL. You should read and accept the LICENSE before you use, modify and/or redistribute * this software. * - * @author Jeff Williams <a href="http://www.aspectsecurity.com">Aspect Security</a> - * @created October 28, 2003 + * @author Sherif Koussa <a href="http://www.macadamian.com">Macadamian Technologies.</a> + * @created November 02, 2006 */ public class ForcedBrowsing extends LessonAdapter { @@ -28,8 +29,18 @@ public class ForcedBrowsing extends LessonAdapter */ protected Element createContent( WebSession s ) { - // just to get the generic how to text. - return super.createContent(s); + ElementContainer ec = new ElementContainer(); + + if ( s.completedHackableConfig() ) + { + makeSuccess( s ); + } + else + { + ec.addElement( "Can you try to force browse to the config page which " + + "should only be accessed by maintenance personnel."); + } + return ec; } @@ -53,15 +64,14 @@ public class ForcedBrowsing extends LessonAdapter public List getHints() { List hints = new ArrayList(); - hints.add( "Lesson Hint 1" ); - hints.add( "Lesson Hint 2" ); - + hints.add( "Try to guess the URL for the config page" ); + hints.add( "The config page is guessable and hackable" ); + hints.add( "Play with the URL and try to guess what the can you replace 'attack' with." ); + return hints; } - - private final static Integer DEFAULT_RANKING = new Integer(15); protected Integer getDefaultRanking() @@ -80,7 +90,7 @@ public class ForcedBrowsing extends LessonAdapter public Element getCredits() { - return new StringElement("This screen created by: Your name could go here"); + return new StringElement("This screen created by: Sherif Koussa"); } } diff --git a/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/LogSpoofing.java b/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/LogSpoofing.java index ed689d92a..ab3b5094b 100644 --- a/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/LogSpoofing.java +++ b/ webgoat/main/project/JavaSource/org/owasp/webgoat/lessons/LogSpoofing.java @@ -19,6 +19,16 @@ import org.apache.ecs.html.Table; import org.apache.ecs.html.PRE; import org.apache.ecs.HtmlColor; +/** + * Copyright (c) 2002 Free Software Foundation developed under the custody of the Open Web + * Application Security Project (http://www.owasp.org) This software package org.owasp.webgoat.is published by OWASP + * under the GPL. You should read and accept the LICENSE before you use, modify and/or redistribute + * this software. + * + * @author Sherif Koussa <a href="http://www.macadamian.com">Macadamian Technologies</a> + * @created October 28, 2006 + */ + public class LogSpoofing extends LessonAdapter { private static final String USERNAME = "username"; diff --git a/ webgoat/main/project/JavaSource/org/owasp/webgoat/session/WebSession.java b/ webgoat/main/project/JavaSource/org/owasp/webgoat/session/WebSession.java index d92b15090..1211e5241 100644 --- a/ webgoat/main/project/JavaSource/org/owasp/webgoat/session/WebSession.java +++ b/ webgoat/main/project/JavaSource/org/owasp/webgoat/session/WebSession.java @@ -225,6 +225,8 @@ public class WebSession private String feedbackAddress = "<A HREF=mailto:webgoat@aspectsecurity.com>webgoat@aspectsecurity.com</A>"; private boolean completedHackableAdmin = false; + + private boolean completedHackableConfig = false; private int currentMenu; @@ -724,6 +726,16 @@ public class WebSession return ( completedHackableAdmin ); } + /** + * Has the user ever hacked the hackable config URL + * + * @return The hackable config value + */ + public boolean completedHackableConfig() + { + return ( completedHackableConfig ); + } + /** * Gets the authenticated attribute of the WebSession object * @@ -1103,6 +1115,14 @@ public class WebSession } } + public void setHasHackableConfig ( String url) + { + if ( config.indexOf("config") >= 0) + { + completedHackableConfig = true; + } + } + /** * @return Returns the isDebug. */ diff --git a/ webgoat/main/project/WebContent/WEB-INF/web.xml b/ webgoat/main/project/WebContent/WEB-INF/web.xml index 94720c354..f595a0d4c 100644 --- a/ webgoat/main/project/WebContent/WEB-INF/web.xml +++ b/ webgoat/main/project/WebContent/WEB-INF/web.xml @@ -227,6 +227,11 @@ <url-pattern>/attack</url-pattern> </servlet-mapping> + <servlet-mapping> + <servlet-name>WebGoat</servlet-name> + <url-pattern>/config</url-pattern> + </servlet-mapping> + <servlet-mapping> <servlet-name>LessonSource</servlet-name> <url-pattern>/source</url-pattern> diff --git a/ webgoat/main/project/WebContent/database/webgoat.mdb b/ webgoat/main/project/WebContent/database/webgoat.mdb index 35f49ec883a4fc9d79a1692f9962f600ddc0dcac..6796f1e657a9b26d7e25862aa8c27f0749887ed5 100644 GIT binary patch delta 3343 zcmeHJUu=_A6hFVO{o1Zu+pjn_=wfWPVUPrDyFgoHhW?vDW@r?NajCSEvY~~Jb+|z= zjE4~j&QK>_!UM^C;Lnp~d$^C(5D-#zd(aqP2u2elCTcW3_~1Uz*N)&cX1?vE_vU=( zoO{pjyXX9Ro9~R58^_CyCB=yivu@|lnDRQEGulm;$(DXF_3_hNXS~6?R&0Lv)N#kR zv(Nr;RYk|__dm6{cYmbz?uqmgk4~cb+PvYqG53FGxG`LLG_P5%-BvB~f*nD~N#F~U zXmjCx*CrED6OqY8X6hgk9v9C4b5Xtn95u_g?fB3vZo2RSRN>YTfGXn}PCNm#$fVG1 z#%~UHak^D*N-8rbmR5=Teymr`L>`ik0A6->gou2<wiz{1Y2BKtCVNehjcEPz967Na zHf_rHX2WWY$ikaoS<rRehy#hCF|3j0BrZavb|cr2KKu2tPrkd2$K=)nIE%FkhyBUn zD(hwzHgztN7MSg>$5*q}!qRH2@Q#thS{9Gt%j-!9$keOI!MgZfG2e$tc`IFA@_c0+ zCFb{Hok;a#@Ct{T<*og=0P*`?42t0~v<Ob_MVWdHy^!vHcw6P&H<+wsJQ0s2BC&*j zOEA#m3vT(lv^(taWVE|I8jB`Ep+GDe@<pTJn(*FpvF`S8Bpiw){DDy1-(^Tp?9Abq zNcABmY*{>IP1mxMp)4k#2y1b=N2&*LTJad=Uvgb^flR>XczCZs_vAOP;5h$QFNu36 z(aG!{vY}P<Ww4=GDhuxfnl{I1n6i|i5q^5<Fdbn%Oh?&1K!^AlXTQMqK-GJTtt^ce zr$4KryOyH&Q=YL0m&49gvB9NSBa5Lbeq=d(rHbFV6u+-pLx!;#dYz|{b%DJh_6OKo zrXDGojZQ^8I0;Q`?1N2=ok6qX4pVCkuzXo#^Lpt=^W}5UK1d=ZCi569mYT(xJaUVA zo7{L9@4?YSJ+y;jlpsI(#izq~27YNPAgsVHqen2I*sN$Eo$hyvxlwH2Wi^jx`v>xw zkw3;Y{$~_M_T_WgskBBaMdG{S(ZY;Iimn6OI2q&G>$;tNU2jqp_AQ*Gt~(Xe;-1Kj z;mH$~l^yl->-?`I1NHm2lI&M1b^h!8uOtJ$|2Ukx)`u-q1AcKmYMG>V4)ZYDB^!T9 gjc&9>E=*$;>WxyZ@%vY!B)L&KZ8=rO<+9@a3#h?F1^@s6 delta 643 zcma)4O=uHQ5Psj=-MD1y?n{g&q*{X_1i_#5q85K5sHY%SB(y0ZjUXt91O!n*jE59F z2#KM6(t}u#RuIZ2p*{qmEA?U#yGT5E5fN#r2Q7h~)W)~A;z0!G<70-IZw6-GD>_Ee zF>Gog+6b6mQH_~qoy}NE$KdDc^F2NF*uIzRg7@;1SFV3-9A12+iTN*xqP|2~Z$nF^ zkEV#UZG^b1n6{?pI<3yR|G}_-c=iu89}x!(^g!GJnhL++$HUc7$nb>5&uJ+0U2XJ^ zFfgb*z|aj<9Amh-wK8@{Q}KO$pfVP2>@L<(v4i|W0`Y3=?n#mEMu)jQPROf&SmE0S zGH^-RD@sY|tjq9r@{AGUmkyFE?RMKs>4X=qA|jkq7{$gPGOMmtJ%uJ?A2)MY@B}J& z_B1Y<&Q$2und}S{S#^jwasfloJ-J67$l;Tx4uKbL%e@lU@T_JhF_F#4^|F0Pfd}%4 zSZwxj$s4ogx!aE&d^v~nyvw0+z9obG&_%irmobqzi*U_;;p4Fq)bM?4)B;g}*ZBQp zAnzfVOIzT}3POC-8`=`VCiO$a-qNHhqD}cJ#Na#nz&Bn7d*V_`J!ymw<gv42JHJN% q-NI#yuCK_OWh6!6DayVP7n?=2j7g<tPZ`yvh2xS3ha8MMH1-pRiR@PZ diff --git a/ webgoat/main/project/WebContent/lesson_plans/ForcedBrowsing.html b/ webgoat/main/project/WebContent/lesson_plans/ForcedBrowsing.html index 134656b75..71c4235fa 100644 --- a/ webgoat/main/project/WebContent/lesson_plans/ForcedBrowsing.html +++ b/ webgoat/main/project/WebContent/lesson_plans/ForcedBrowsing.html @@ -1,9 +1,21 @@ -<div align="Center"> -<p><b>Lesson Plan Title:</b> How to Exploit Forced Browsing</p> -</div> -<!-- Start Instructions --> +<div align="Center"> +<p><b>Lesson Plan Title:</b>Forced Browsing. </p> + </div> + <p><b>Concept / Topic To Teach:</b> </p> -How to Exploit Forced Browsing +How to Exploit Forced Browsing. + <br> +<div align="Left"> +<p> +<b>How the attacks works:</b> +</p> +Forced browsing is a technique used by attackers to gain access to resources that are not referenced, but are nevertheless accessible. + +One technique is to manipulate the URL in the browser by deleting sections from the end until an unprotected directory is found +</div> <p><b>General Goal(s):</b> </p> -This lesson needs a creator! -<!-- Stop Instructions --> \ No newline at end of file +<!-- Start Instructions --> +* Your goal should be to try to guess the URL for the "config" interface.<br> +* The "config" URL is only available to the maintenance personnel.<br> +* The application doesn't check for horizontal priveleges. +<!-- Stop Instructions -->