# Web Security Academy Information Disclosure [toc] ## Information disclosure in error messages `/product?productId=1s`のように`1`に対して`a-zA-Z`でもつければエラーが出ます。 ```java Internal Server Error: java.lang.NumberFormatException: For input string: "1s" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) at java.base/java.lang.Integer.parseInt(Integer.java:668) at java.base/java.lang.Integer.parseInt(Integer.java:786) at lab.k.a3.x.b.C(Unknown Source) at lab.q.s.w.b.R(Unknown Source) at lab.q.s.t.d.j.c(Unknown Source) at lab.q.s.t.w.lambda$handleSubRequest$0(Unknown Source) at h.m.u.l.lambda$null$3(Unknown Source) at h.m.u.l.h(Unknown Source) at h.m.u.l.lambda$uncheckedFunction$4(Unknown Source) at java.base/java.util.Optional.map(Optional.java:260) at lab.q.s.t.w.m(Unknown Source) at lab.server.y.u.a.V(Unknown Source) at lab.q.s.z.H(Unknown Source) at lab.q.s.z.V(Unknown Source) at lab.server.y.u.c.w.p(Unknown Source) at lab.server.y.u.c.q.lambda$handle$0(Unknown Source) at lab.k.h.k.e.e(Unknown Source) at lab.server.y.u.c.q.O(Unknown Source) at lab.server.y.u.z.m(Unknown Source) at h.m.u.l.lambda$null$3(Unknown Source) at h.m.u.l.h(Unknown Source) at h.m.u.l.lambda$uncheckedFunction$4(Unknown Source) at lab.server.c.L(Unknown Source) at lab.server.y.u.z.f(Unknown Source) at lab.server.y.e.f.Q(Unknown Source) at lab.server.y.v.B(Unknown Source) at lab.server.y.k.B(Unknown Source) at lab.server.su.P(Unknown Source) at lab.server.su.z(Unknown Source) at lab.a.s.lambda$consume$0(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833) Apache Struts 2 2.3.31 ``` `Apache Struts 2 2.3.31`を送ったら終了です。 ## Information disclosure on debug page `/cgi-bin/phpinfo.php`にアクセスして、`Ctrl+f`でsecretと検索すればひっかかるので値を入れて終了。 ## Source code disclosure via backup files Burp Suiteのbuilt-in payloadsの`Interesting file and directories`を使うと、`/backup`が存在することがわかります。 `/backup`のレスポンス内で、`/backup/ProductTemplate.java.bak`を発見できるのでこれにアクセスして、ソースコード内からパスワードを取得し、終わりです。 ## Authentication bypass via information disclosure `/my-account?id=wiener`に対して`TRACE`メソッドを使うと、`X-Custom-IP-Authorization: my-global-ip`というヘッダがついていることがわかります。 これをコピーして、`my-global-ip`を`127.0.0.1`にすると、`Admin panel`が表示されることがわかります。 ![image](https://hackmd.io/_uploads/rJd0XIQFa.png) `Admin panel`は、`/admin`であることがレスポンスでわかるので、`/admin`にリクエストを飛ばし、レスポンスからcarlosのデリートを行うエンドポイントを取得します。 `/admin/delete?username=carlos`であることがわかるので送って終わりです。 ## Information disclosure in version control history `/.git`があることがわかります。 ![image](https://hackmd.io/_uploads/H1Fir8XF6.png) ```bash wget -r https://lab/.git ``` でローカルにダウンロードします。 ```bash= git log commit 1db5f4f2321530df5ac213ed9affc3ae245f6e6e Author: Carlos Montoya <carlos@evil-user.net> Date: Mon Jun 22 16:23:42 2020 +0000 Add skeleton admin panel git show 1db5f4f2321530df5ac213ed9affc3ae245f6e6e +ADMIN_PASSWORD=mtfxvrugd3vogeloksuy ``` これでadministratorのpasswordを取得し、carlosをデリートして終わりです。