2014-01-01から1年間の記事一覧
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.…
bind -xはコマンドラインの状態を保持したまま任意のコマンドを実行するキーバインドを定義する。 これを使うと、zshのrun-helpのような機能を実装することができる。 if [[ -n "$PS1" ]]; then bind -x '"\eh":"[[ -n $READLINE_LINE ]] && man ${READLINE_…
きちんとまとめられた情報が少ないのでメモ。 bashの機能はemacsと共通する部分が多く、使われている用語やキーバインドも類似している。 以下で述べるキーバインドについて、C-xはCtrl+x、M-xはESC xまたはC-[ xを表す。 kill-ringを活用する bashにはkill-…
findコマンドのオプション指定が面倒なので、grepのように使える、次のようなシェル関数を定義してみる。 if [[ -n "$PS1" ]]; then f() { find "${2:-.}" \! -type d \! -path "*/.*" -path "*$1*" |& grep -v -F ": Permission denied" | sort } fi このコ…
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の引数が相対パスのままコマンドヒストリに残って便利な例が思いつかないので、絶対パスでコマンドヒストリに残すようにする。 具体的には、以下のシェル関数を.bashrcに書く。 if [[ -n "$PS1" ]]; then cd() { command cd "$@" local s=$? if [[ ($s -eq…
「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でDynamic ROP + Return-to-vulnによるASLR+DEP+RELRO回避をやってみる」では、leave命令がない実行ファイルに対してstack pivotを行わずに複数回のROPシーケンス実行を行った。 しかし、コンパイラによってはleave命令がない場合でも__libc_csu_init関…
Emacsのdabbrev-expand(動的補完)は便利だが、デフォルトのキーバインドがM-/となっておりやや使いにくい。 そこで、カーソルが行末の場合に限りC-fでdabbrev-expandするようにしてみる。 ;; intelligent C-f/C-b (defun forward-char-or-dabbrev-expand (…
「x64でBuffer over-read+Partial overwrite他によるASLR+PIE+DEP+FullRELRO回避をやってみる」では、Buffer over-readによるInformation leakを利用してx64環境かつPIEが有効な条件下におけるシェル起動を行った。 ここでは、Information leakを利用する代…
AVTOKYO2014 このブログで書いてきたExploit系のいろいろについて話した。 ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja) from inaz2 Also English version is available. マイクを持ちながらのデモがきつかったり、時間をオーバーしてしまっ…
デプロイツールFabricを使って、SSH経由で複数のサーバを操作する方法のメモ。 同種のツールにparallel-ssh(pssh)があるが、psshでsudoを行うためには/etc/sudoersを編集してパスワードなしでsudoできるようにしなければならない。 Fabricでは、一度入力し…
いろいろあるLinuxコマンドを区別するためのメモ。 w系 wログイン中のユーザについて、実行中のコマンド名も含め表示する whoログイン中のユーザについて、ログイン時刻を表示する usersログイン中のユーザのみを表示する id自分の実ユーザ名、実効ユーザ名…
curlなどで取得したテキストを自動的にターミナルの文字コード(たとえばUTF-8)に変換したい場合がある。 このような場合には、Pythonのchardetモジュールが使える。 chardetは、Mozilla Firefoxで使われている文字コード判定アルゴリズムをPythonモジュー…
「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によるASLR+DEP+RELRO回避をやってみる」では、rdi、rsi、rdxの各レジスタをpopするROP gadgetを意図的に埋め込んだ上でシェル起動を行った。 ここでは代わりに__libc_csu_init gadgetsを使い、x64…
データ収集・解析システム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を使うと、gitのような差分バージョン管理のもとでLXCのようなLinuxコンテナを扱うことができる(実際にはLXCではなくlibcontainerが使われる)。 ここではDockerを使い、UbuntuとCentOSのコンテナを作ってみる。 環境 Ubuntu 14.04…
「x64でDynamic ROP + Return-to-vulnによるASLR+DEP+RELRO回避をやってみる」では、leave命令によるstack pivotができない場合でも同一の脆弱性を複数回利用することでシェルを起動した。 また、シェルの起動にはlibcバイナリの中身をwrite(2)で読み出し得…
「x64でDynamic ROPによるASLR+DEP+RELRO回避をやってみる」では、libcバイナリを読み出しその中に含まれるgadgetを利用してROPを行うことでシェル起動を行った。 しかし、コンパイラによっては実行ファイルにleave命令が存在しない場合があり、このような場…
すみだセキュリティ勉強会2014#3 - すみだセキュリティ勉強会 すみだセキュリティ勉強会2014#3 : ATND 直接インターネットに出れないサーバからSSHサーバ経由でapt-getする方法について、SOCKS5 proxifier "kneesocks" の実装を交えながら紹介した。 How to …
「x64でROP stager + Return-to-dl-resolve + DT_DEBUG readによるASLR+DEP+RELRO回避をやってみる」では、x64環境において次のようなステップを踏むことでスタックバッファオーバーフローからのシェル起動を行った。 DT_DEBUG readによりlink_map構造体およ…
https://github.com/inaz2/upnpbind NATを越えられるnc -l。 UPnP IGD Protocolを使い一時的にポートを開けることで、LAN内のマシンでインターネットからの通信を待ち受けることができる。 ルータのUPnP機能が有効になっている必要があるが、そのような環境…
https://github.com/inaz2/kneesocks proxychains-ngより手軽に使えるSOCKS 5 proxiferを作った。 LD_PRELOADを使ってconnect(2)を置き換えることにより、だいたいのコマンドでSOCKS 5 Proxyを経由するようにする。 最初はsocksifyというコマンド名にしよう…
次のようなネットワークにおいて、直接ルータに接続できないServer Bからインターネットにアクセスする方法のメモ。 具体的には、Server Aで起動しているSSHサーバに対してdynamic port forwardを行い、SOCKS Proxyとして利用する。 また、任意のコマンドでS…
GoogleやFacebookなど、IT系企業名義で公表された研究論文をまとめたページについてのメモ。 Google Facebook Twitter Microsoft Research Yahoo! Labs Bell Labs HP Labs
https://github.com/inaz2/roputils 主にReturn-oriented Programmingを楽に行うためのツールキットを作った。 pwntoolsやzioなどのCTFフレームワークを参考にしており、機能もかなり近いものになっている。 また、CLIツールとしてchecksec.shやpattern_crea…
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を行うには複数のレジスタをセットする必要があるが、glibcの__libc_csu_init関数を利用すると任意の3引数関数が呼び出せることが知られている。 ここでは、ROP stager + Return-to-resolveに加えてこれを利用することで、ASLR+DEPが有効…