2014-01-01から1年間の記事一覧

2014年11月、Elasticsearchの脆弱性(CVE-2014-3120)を狙った攻撃

tcp/9200に次のようなリクエストが来ていた。 GET /_search?source=%7B%22query%22%3A+%7B%22filtered%22%3A+%7B%22query%22%3A+%7B%22match_all%22%3A+%7B%7D%7D%7D%7D%2C+%22script_fields%22%3A+%7B%22exp%22%3A+%7B%22script%22%3A+%22import+java.util.…

コマンド入力中にman page / helpを見れるようにする

bind -xはコマンドラインの状態を保持したまま任意のコマンドを実行するキーバインドを定義する。 これを使うと、zshのrun-helpのような機能を実装することができる。 if [[ -n "$PS1" ]]; then bind -x '"\eh":"[[ -n $READLINE_LINE ]] && man ${READLINE_…

bash tips

きちんとまとめられた情報が少ないのでメモ。 bashの機能はemacsと共通する部分が多く、使われている用語やキーバインドも類似している。 以下で述べるキーバインドについて、C-xはCtrl+x、M-xはESC xまたはC-[ xを表す。 kill-ringを活用する bashにはkill-…

grepのようにfindする

findコマンドのオプション指定が面倒なので、grepのように使える、次のようなシェル関数を定義してみる。 if [[ -n "$PS1" ]]; then f() { find "${2:-.}" \! -type d \! -path "*/.*" -path "*$1*" |& grep -v -F ": Permission denied" | sort } fi このコ…

aliasとシェル関数の使い分け

aliasとシェル関数の違いについてのメモ。 たとえばgrepコマンドを常にロケール非依存にて扱い処理を高速化するにあたり、一見、次の二つの定義は同等に見える。 alias grep='LC_ALL=C grep --color=auto' grep() { LC_ALL=C command grep --color=auto "$@"…

安全に標準コマンドを置き換える

「cdの引数を絶対パスにしてコマンドヒストリに残す」のように標準コマンドを置き換える上で考えるべき、bashの仕組みについてのメモ。 環境 $ uname -a Linux vm-ubuntu64 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x8…

cdの引数を絶対パスにしてコマンドヒストリに残す

cdの引数が相対パスのままコマンドヒストリに残って便利な例が思いつかないので、絶対パスでコマンドヒストリに残すようにする。 具体的には、以下のシェル関数を.bashrcに書く。 if [[ -n "$PS1" ]]; then cd() { command cd "$@" local s=$? if [[ ($s -eq…

x64でのReturn-to-dl-resolve + __libc_csu_init gadgetsにfiniセクションを使う

「x64でROP stager + Return-to-dl-resolve + __libc_csu_init gadgetsによるASLR+DEP回避をやってみる」では、ASLR+DEPが有効なx64環境でReturn-to-dl-resolve + __libc_csu_init gadgetsを使ってシェル起動を行った。 この際、事前に固定アドレスにret命令…

x64で__libc_csu_init gadgetを使ったstack pivotをやってみる

「x64でDynamic ROP + Return-to-vulnによるASLR+DEP+RELRO回避をやってみる」では、leave命令がない実行ファイルに対してstack pivotを行わずに複数回のROPシーケンス実行を行った。 しかし、コンパイラによってはleave命令がない場合でも__libc_csu_init関…

行末C-fでdabbrev-expandする

Emacsのdabbrev-expand(動的補完)は便利だが、デフォルトのキーバインドがM-/となっておりやや使いにくい。 そこで、カーソルが行末の場合に限りC-fでdabbrev-expandするようにしてみる。 ;; intelligent C-f/C-b (defun forward-char-or-dabbrev-expand (…

x64でPartial overwriteとsystem関数を使ったASLR+PIE+DEP+FullRELRO回避について考えてみる

「x64でBuffer over-read+Partial overwrite他によるASLR+PIE+DEP+FullRELRO回避をやってみる」では、Buffer over-readによるInformation leakを利用してx64環境かつPIEが有効な条件下におけるシェル起動を行った。 ここでは、Information leakを利用する代…

「ROP Illmatic: Exploring Universal ROP on glibc x86-64」というタイトルで発表した

AVTOKYO2014 このブログで書いてきたExploit系のいろいろについて話した。 ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja) from inaz2 Also English version is available. マイクを持ちながらのデモがきつかったり、時間をオーバーしてしまっ…

Fabricを使って複数のサーバを操作する

デプロイツールFabricを使って、SSH経由で複数のサーバを操作する方法のメモ。 同種のツールにparallel-ssh(pssh)があるが、psshでsudoを行うためには/etc/sudoersを編集してパスワードなしでsudoできるようにしなければならない。 Fabricでは、一度入力し…

名前や用途が似ているLinuxコマンドの整理

いろいろあるLinuxコマンドを区別するためのメモ。 w系 wログイン中のユーザについて、実行中のコマンド名も含め表示する whoログイン中のユーザについて、ログイン時刻を表示する usersログイン中のユーザのみを表示する id自分の実ユーザ名、実効ユーザ名…

chardetで文字コードを自動変換する

curlなどで取得したテキストを自動的にターミナルの文字コード(たとえばUTF-8)に変換したい場合がある。 このような場合には、Pythonのchardetモジュールが使える。 chardetは、Mozilla Firefoxで使われている文字コード判定アルゴリズムをPythonモジュー…

x64でBuffer over-read+Partial overwrite他によるASLR+PIE+DEP+FullRELRO回避をやってみる

「ROP stager + Return-to-dl-resolve + ブルートフォースによる32bit ASLR+PIE+DEP回避」では、8bitのブルートフォースを行うことでx86環境かつPIEが有効な条件下でのシェル起動を行った。 しかし、x64環境ではASLRによりランダム化されるbit数が28bitとな…

x64でROP stager + Return-to-dl-resolve + DT_DEBUG read + __libc_csu_init gadgetsによるASLR+DEP+RELRO回避をやってみる

「x64でROP stager + Return-to-dl-resolve + DT_DEBUG readによるASLR+DEP+RELRO回避をやってみる」では、rdi、rsi、rdxの各レジスタをpopするROP gadgetを意図的に埋め込んだ上でシェル起動を行った。 ここでは代わりに__libc_csu_init gadgetsを使い、x64…

Elasticsearch+KibanaでTwitter Streamを収集する

データ収集・解析システムElasticsearchとWebフロントエンドKibanaを使い、Twitter Streamを収集する方法のメモ。 環境 Ubuntu 14.04.1 LTS 64bit版 $ uname -a Linux vm-ubuntu64-twitter 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x…

Dockerを使ってみる

コンテナ管理ツールDockerを使うと、gitのような差分バージョン管理のもとでLXCのようなLinuxコンテナを扱うことができる(実際にはLXCではなくlibcontainerが使われる)。 ここではDockerを使い、UbuntuとCentOSのコンテナを作ってみる。 環境 Ubuntu 14.04…

x64で実行可能なメモリアドレスに対する入出力システムコールを検知してみる

「x64でDynamic ROP + Return-to-vulnによるASLR+DEP+RELRO回避をやってみる」では、leave命令によるstack pivotができない場合でも同一の脆弱性を複数回利用することでシェルを起動した。 また、シェルの起動にはlibcバイナリの中身をwrite(2)で読み出し得…

x64でDynamic ROP + Return-to-vulnによるASLR+DEP+RELRO回避をやってみる

「x64でDynamic ROPによるASLR+DEP+RELRO回避をやってみる」では、libcバイナリを読み出しその中に含まれるgadgetを利用してROPを行うことでシェル起動を行った。 しかし、コンパイラによっては実行ファイルにleave命令が存在しない場合があり、このような場…

「How to apt-get from the internal network: remote sshd with kneesocks」というタイトルで発表した

すみだセキュリティ勉強会2014#3 - すみだセキュリティ勉強会 すみだセキュリティ勉強会2014#3 : ATND 直接インターネットに出れないサーバからSSHサーバ経由でapt-getする方法について、SOCKS5 proxifier "kneesocks" の実装を交えながら紹介した。 How to …

x64でDynamic ROPによるASLR+DEP+RELRO回避をやってみる

「x64でROP stager + Return-to-dl-resolve + DT_DEBUG readによるASLR+DEP+RELRO回避をやってみる」では、x64環境において次のようなステップを踏むことでスタックバッファオーバーフローからのシェル起動を行った。 DT_DEBUG readによりlink_map構造体およ…

upnpbindを作った

https://github.com/inaz2/upnpbind NATを越えられるnc -l。 UPnP IGD Protocolを使い一時的にポートを開けることで、LAN内のマシンでインターネットからの通信を待ち受けることができる。 ルータのUPnP機能が有効になっている必要があるが、そのような環境…

kneesocksを作った

https://github.com/inaz2/kneesocks proxychains-ngより手軽に使えるSOCKS 5 proxiferを作った。 LD_PRELOADを使ってconnect(2)を置き換えることにより、だいたいのコマンドでSOCKS 5 Proxyを経由するようにする。 最初はsocksifyというコマンド名にしよう…

opensshとproxychains-ngによるSOCKS Proxy経由のインターネット接続

次のようなネットワークにおいて、直接ルータに接続できないServer Bからインターネットにアクセスする方法のメモ。 具体的には、Server Aで起動しているSSHサーバに対してdynamic port forwardを行い、SOCKS Proxyとして利用する。 また、任意のコマンドでS…

IT系企業の研究論文に関するリンク集

GoogleやFacebookなど、IT系企業名義で公表された研究論文をまとめたページについてのメモ。 Google Facebook Twitter Microsoft Research Yahoo! Labs Bell Labs HP Labs

roputilsを作った

https://github.com/inaz2/roputils 主にReturn-oriented Programmingを楽に行うためのツールキットを作った。 pwntoolsやzioなどのCTFフレームワークを参考にしており、機能もかなり近いものになっている。 また、CLIツールとしてchecksec.shやpattern_crea…

glibcの "/bin/sh" はどこにあるのか

libcライブラリをstringsすると、"/bin/sh" などのパス文字列を見つけることができる。 $ strings -tx /lib/i386-linux-gnu/libc-2.15.so | grep " /" ... 161d98 /bin/sh 161ee4 /tmp 162bf8 /dev/tty 162c3d /proc/self/maps 1633bf /etc/localtime ... こ…

x64でROP stager + Return-to-dl-resolve + __libc_csu_init gadgetsによるASLR+DEP回避をやってみる

x64環境においてROPを行うには複数のレジスタをセットする必要があるが、glibcの__libc_csu_init関数を利用すると任意の3引数関数が呼び出せることが知られている。 ここでは、ROP stager + Return-to-resolveに加えてこれを利用することで、ASLR+DEPが有効…