package Ġorg . t 2 4 6 oss lab . easy bug gy 4 kt . v ulnerabilities Ċ Ċ import Ġo gn l . O gn l Ċ import Ġo gn l . O gn l Context Ċ import Ġo gn l . O gn l Exception Ċ import Ġorg . apache . commons . lang . StringUtils Ċ import Ġorg . apache . commons . lang . math . Number Utils Ċ import Ġorg . springframework . stereotype . Controller Ċ import Ġorg . springframework . web . bind . annotation . RequestMapping Ċ import Ġorg . springframework . web . bind . annotation . RequestParam Ċ import Ġorg . springframework . web . servlet . Model AndView Ċ import Ġorg . t 2 4 6 oss lab . easy bug gy 4 kt . controller . Abstract Controller Ċ import Ġjava . util .* Ċ Ċ @ Controller Ċ class ĠO GN L Expression Injection Controller Ġ: ĠAbstract Controller () Ġ{ ĊĊĠĠĠ Ġ@ RequestMapping ( value Ġ= Ġ"/ ogn le ij c ") ĊĠĠĠ Ġfun Ġprocess (@ RequestParam ( value Ġ= Ġ" expression ", Ġrequired Ġ= Ġfalse ) Ġexpression : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm av : ĠModelAndView , Ġlocale : ĠLocale ): ĠModelAndView Ġ{ ĊĠĠĠĠĠĠĠ Ġset View And Common Objects ( mav , Ġlocale , Ġ" command injection ") ĊĠĠĠĠĠĠĠ Ġvar Ġvalue : ĠAny ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġerr Message Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġctx Ġ= ĠO gn l Context () ĊĠĠĠĠĠĠĠ Ġif Ġ(! StringUtils . isBlank ( expression )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpr Ġ= ĠO gn l . parse Expression ( expression !!. replace (" Math \\. ". to Regex (), Ġ"@ Math @ ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= ĠO gn l . getValue ( expr , Ġctx ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠO gn l Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . reason Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr Message Ġ= Ġe . reason . message !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" O gn l Exception Ġoccurs : Ġ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Exception Ġoccurs : Ġ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" Error Ġoccurs : Ġ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( expression Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm av . add Object (" expression ", Ġexpression ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm av . add Object (" err msg ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmsg ?. getMessage (" msg . invalid . expression ", ĠarrayOf ( err Message ), Ġnull , Ġlocale )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull Ġ&& ĠNumber Utils . isNumber ( value . toString ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm av . add Object (" value ", Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġm av ĊĠĠĠ Ġ} Ċ } Ċ