質問・実現したいこと
タイトルにある通り, Python3.x系のprint関数で$ echo -e
と同じような動作をさせたいです。
※$ echo -e
は, エスケープシーケンスを解釈するオプションをつけたechoコマンドのことです。
echoコマンドについてはこちらをご参照ください
例を挙げるならば,
bash
1$ echo -e 'AAAAAAAAAAAAAAAA\xce\xfa\xde\xc0'
と同じ出力結果をPython3.x系のprint関数でも出力したいということです。
Python3.x系のprint関数で出力したい理由は, CTFのPwnにおいては任意の文字数をA
で埋めたくなることが多いからです。
例えば, A
を16個表示するだけでも, 以下のようにechoとprintを使うのでは雲泥の差があります。
bash
1$ echo 'AAAAAAAAAAAAAAAA'
bash
1$ python -c "print('A'*16)"
試したこと・確認したこと
最初に挙げた'AAAAAAAAAAAAAAAA\xce\xfa\xde\xc0'を作ろうとprint関数を用いて色々と試してみました。
以下のようなコードを書き, print関数の内部で文字列を結合させてみました。
bash
1$ python -c "print('A' * 16 + '\xce\xfa\xde\xc0')"
すると, 以下のように勝手にutf-8でエンコードされてしまうらしく, 元の'\xce\xfa\xde\xc0'の情報を失ってしまうようです。
bash
1$ python -c "print('A' * 16 + '\xce\xfa\xde\xc0')" 2AAAAAAAAAAAAAAAAÎúÞÀ
そこで, utf-8でデコードすれば良いのでは?と思いました。
そのため, 以下のようなコードを書き, print関数の内部で生成した文字列を'utf-8'でデコードしてみました。
bash
1$ python -c "print('A' * 16 + ('\xce\xfa\xde\xc0').decode('utf-8'))"
すると, 以下のようなエラーが出て, strオブジェクトはdecodeメソッドを持っていないよ, と怒られてしまいました。
bash
1$ python -c "print('A' * 16 + ('\xce\xfa\xde\xc0').decode('utf-8'))" 2Traceback (most recent call last): 3 File "<string>", line 1, in <module> 4AttributeError: 'str' object has no attribute 'decode'
どのようにすれば, Python3.x系のprint関数で, bashのecho -eと同じような動作をさせられるのでしょうか?
ご回答のほど, よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
OS: Ubuntu 18.04LTS
Python: 3.6.7
Pythonには少し触れた程度です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/10 03:22