ちょっとしたlsのtips

この記事はTSG Advent Calendar 2018の5日目の記事が当日18:00になっても出てこないことから「やべぇ」となって慌てて作られた記事です。昨日はmoratorium08さんのTSG live CTF writeup - cruel dd, rop4, rop1, simple pwn, RSA modoki, repeat64, leap it, TSG shooter - moragramming!でした。

さて、来週or再来週のコンテンツ制作に奔走している僕ですが(無駄に期待値を上げる人)、今学期のTSG分科会で触れた内容を少しここに書いてみたいなと思いました。

僕が所属しているプログラミングサークルTSGはCTFをよくやっています。因みに僕はその中で最弱です。ということで誰にでも出来る問題を1問。因みにこの記事は1話完結型なので、writeupが下に続いています。読みたくない人は気を付けてください。

問題

sshで接続して、カレントディレクトリでpython3で実行する形式です。

import os
import subprocess
res = subprocess.check_output("ls").decode("utf-8").split("\n")[:-1]
for f in res:
    print(f)
    if not os.path.exists(f):
         subprocess.call("cat flag.txt", shell=True)

さて、余裕でしたかね。

閑話休題

ここでメタい話をすると、問題のすぐ下に解説があるとつらい思いをする人がいる訳で。この空間を無駄に埋める必要があるんです。ということで自分の秋以降の話をします。

僕は9月末から「工学部電気電子工学科」、別称「EEIC」「電電」「(自主規制)学科」への内定をもらい、そちらの授業を受けています。その学科の(自主規制)さと言えば、毎日のように出る(検閲により削除されました)、(検閲により削除されました)、(検閲により削除されました)。お陰で自分が趣味(つまり競プロとか秋になったらやろうと思っていた機械学習とか)に手を出す時間が無くなっていてとても悲しいです。

さらに、偶然が重なり、今まで僕は1限の授業を一度も履修せずに過ごしてきました。通学に90分かかる身として嬉しいことこの上無いです。
ところが、この(自主規制)学科に来てから状況は変わりました。何ということでしょう!空欄で真っ白だった履修の1限の欄は、毎日授業で埋め尽くされているではありませんか!あまりの辛さに1つ授業を履修解除するレベル。

しかも行われる授業は極端な情報系の自分に対して「情報系はぬる過ぎる」「物理系はつらい」ととても(削除)な環境です。進振り失敗したので仕方ないですが…

writeup

lsのソースコードを読むと、decode_switches関数で色々環境変数を読み込んでいます。これを適当に設定すると、「エラーを吐くけど止まらない」みたいな挙動をします。
例えば、COLUMNS=-1として実行すると、

ls: ignoring invalid width in environment variable COLUMNS: '-1'
...(lsの正しい挙動)

が出力されます。これをやるだけです。

「へぇー」としかならねぇ。以上、問題3分クッキングでした。