2015-01-01から1年間の記事一覧
「Windowsでconnect-backシェルコードを書いてみる」ではプログラムがWinsockを利用していることを前提に、connect-back shellを起動するシェルコードを書いた。 この他に、Windowsではインターネットから実行ファイルをダウンロードし実行するシェルコード…
x86環境においてHello Worldを表示するbootloaderを作成し、VirtualBoxの仮想フロッピードライブから起動してみる。 環境 Ubuntu 14.04.2 LTS 64bit版、VirtualBox 4.3.28 $ uname -a Linux vm-ubuntu64 3.13.0-48-generic #80-Ubuntu SMP Thu Mar 12 11:16:…
「Windowsで電卓を起動するシェルコードを書いてみる」では、Windows 32bitアプリケーション用のシェルコードを作成した。 ここでは、Windows 64bitアプリケーションから電卓を起動するシェルコードを書いてみる。 環境 Windows 8.1 Pro 64 bit版、Visual St…
Wiresharkには、Wiresharkと同等の機能を持つCLIコマンドとしてtsharkが付属している。 tsharkではオプションとして-T fields -e <field> [-e <field> ...]を指定することで、指定したフィールドのデータをタブ区切りで出力することができる。 次の例では、dump.pcapという</field></field>…
LoadLibrary関数は実行時にDLLをロードする関数であるが、引数にUNCパスを与えることにより、SMBプロトコル(Windowsファイル共有)を介してリモートホストにあるDLLをロードできることが知られている。 また、DLLはロード時にDLLMain関数が自動的に呼び出さ…
Metasploit Frameworkは、エクスプロイトコード実行をはじめとした種々のタスクを統一されたインタフェースで扱うための統合環境(フレームワーク)である。 ここでは、スタックバッファオーバーフロー脆弱性のあるプログラムを用意し、これに対するexploit…
主にWindows環境に対して使われる高機能なリモート操作コンソールとして、Meterpreterと呼ばれるものがある。 ここでは、Metasploit Frameworkを使いMeterpreter用のシェルコードを生成してみる。 さらに、スタックバッファオーバーフロー脆弱性を利用してこ…
スタックバッファオーバーフロー攻撃に対する防御手法のひとつにstack canaryがある。 これは関数の先頭でcanaryと呼ばれるランダムな値をスタックに積んでおき、関数の末尾でこの値が書き換えられていないかチェックすることで攻撃を検知するというものであ…
よく使いそうなものの覚書。 シンボルサーバの指定 環境変数を用いて指定しておくとよい。 >set _NT_SYMBOL_PATH=srv*C:\Symbols*http://msdl.microsoft.com/download/symbols デバッグ情報付きでコンパイル コンパイルオプションとして/Ziを付ける。 >cd /Z…
「WindowsでReturn-oriented Programming(ROP)によるDEP回避をやってみる」では、実行ファイル中でVitrualProtect関数が使われていることを前提にROPを行った。 ここでは、ASLRが無効な古いシステムDLLを利用することにより、VirtualProtect関数を呼び出し…
「Windowsで単純なスタックバッファオーバーフロー攻撃をやってみる」では、DEPを無効にした状態でシェルコードの実行を行った。 ここでは、DEPが有効な環境下において、ROP(Return-oriented Programming)によるシェルコード実行をやってみる。 環境 Windo…
Windowsで各種セキュリティ機構をオフにして、単純なスタックバッファオーバーフローによるシェルコード実行をやってみる。 環境 Windows 8.1 Pro 64 bit版、Visual Studio Community 2013 with Update 4 >systeminfo OS 名: Microsoft Windows 8.1 Pro OS …
すみだセキュリティ勉強会2015#1 - すみだセキュリティ勉強会 すみだセキュリティ勉強会 2015#1 : ATND HTTPS周辺の話題と、HTTP/HTTPS Proxyとして機能するPythonスクリプトproxy2の紹介を行った。 proxy2: HTTPS pins and needles from inaz2 ありがとうご…
仙石浩明の日記: chroot されたディレクトリから脱出してみる 上の記事では、chrootがsuperuserならば脱出可能であることについて書かれている。 また、実際にマニュアルを確認すると、確かにそのことが記載されている。 CHROOT(2) Linux Programmer's Manua…
「Windowsで電卓を起動するシェルコードを書いてみる」ではPEBからライブラリ関数のアドレスを特定し、WinExec関数を使って電卓を起動するシェルコードを書いた。 ここでは、プログラムがWinsockを利用していることを前提に、connect-back shellを起動するシ…
「Windowsで電卓を起動するアセンブリコードを書いてみる」では呼び出すライブラリ関数のアドレスをハードコードした形でアセンブリコードを書いたが、ASLRが有効なDLLについてはDLLが読み込まれるたびにベースアドレスが変化するため常には機能しない。 こ…
多くのLinuxディストリビューションでは標準でncコマンドが入っており、リモートホストへの接続あるいはローカルポートでの待ち受けを行い、端末からネットワークソケットに対し読み書きすることができた。 一方Windowsの場合、前者はtelnetコマンドで代用す…
Windowsにおいて標準で利用できるスクリプト環境としては古くからWindows Scripting Host(WSH)があるが、Windows 7以降ではこれに加えPowerShellと呼ばれるシェルが利用できる。 また、WSHでJScriptまたはVBScriptのもとでCOMコンポーネントを扱えたように…
限定的な環境において電卓を起動するアセンブリコードを書き、シェルコードとして実行してみる。 環境 Windows 8.1 Pro 64 bit版、Visual Studio Community 2013 with Update 4 >systeminfo OS 名: Microsoft Windows 8.1 Pro OS バージョン: 6.3.9600 N/A …
WindowsでVisual Studio Community 2013とDebugger Tools for Windowsをインストールし、コンパイラ一式とデバッガを使えるようにする。 また、簡単なC言語コードを書き、コマンドラインからのコンパイルとデバッグをやってみる。 環境 Windows 8.1 Pro 64ビ…
Dynamic ROP(JIT-ROP)はlibcなどの実行可能メモリを読み出し、その中にあるgadgetを利用することでROPを行う。 これに対し、「x64で実行可能なメモリアドレスに対する入出力システムコールを検知してみる」では、ptraceでreadシステムコールを監視すること…
「Linuxカーネルモジュールでret2usrによる権限昇格をやってみる」では、Kernel Address Display Restriction(KADR)を無効にした上で/proc/kallsymsからカーネルシンボルのアドレスを取得し、カーネル空間からユーザ空間の関数を実行させることにより権限…
Linuxカーネルモジュールにおける任意アドレス書き換え(Arbitrary address write)の脆弱性を利用し、ret2usr(Return-to-user)と呼ばれる手法によるroot権限への権限昇格をやってみる。 環境 Ubuntu 14.04.1 LTS 64bit版、Intel SMEP無効 $ uname -a Linu…
Linuxにおけるカーネルエクスプロイトの下準備として、無条件で権限昇格する(安全でない)カーネルモジュールを書いてみる。 環境 Ubuntu 14.04.1 LTS 64bit版 $ uname -a Linux vm-ubuntu64 3.13.0-44-generic #73-Ubuntu SMP Tue Dec 16 00:22:43 UTC 201…
dog - opposite of cat 背景 Burp SuiteのDecoder機能では、下図のように適当な文字列に対して複数回のエンコード、デコード、ハッシュ計算を簡単に行うことができる。 便利なので、コマンドラインとパイプでもやりたい。 また、Ubuntu 8.04ではcat(1)に対し…
「ARMでReturn-oriented Programming(ROP)をやってみる」ではlibcのベースアドレス、libc関数のオフセットを調べた上でROPを行った。 ここでは、ASLRが有効となっている場合を想定し、GOTアドレスの書き出しおよびstack pivotをもとにしたDynamic ROP(JIT…
ARM EABI(armel)環境でReturn-oriented Programming(ROP)をやってみる。 環境 Ubuntu 14.04.2 LTS ARM版(ユーザモードQEMU利用) # uname -a Linux c7b94bb2fc1e 2.6.32 #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 armv7l armv7l armv7l GNU/Linux #…
「単純なスタックバッファオーバーフロー攻撃をやってみる」と同様に、Linux ARM(armel)環境でスタックバッファオーバーフローからのシェルコード実行をやってみる。 環境 Ubuntu 14.04.2 LTS ARM版(ユーザモードQEMU利用) # uname -a Linux c7b94bb2fc1…
「Linux x86用のシェルコードを書いてみる」と同様に、Linux ARM(armel)用のシェルコードを書いてみる。 環境 Ubuntu 14.04.2 LTS ARM版(ユーザモードQEMU利用) # uname -a Linux c7b94bb2fc1e 2.6.32 #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 armv…
ARM EABI(armel)についてのメモ。 RealView Compilation Tools アセンブラガイド バージョン 4.0 ARMレジスタ r0からr15までのレジスタとcpsrレジスタがあり、r11はフレームポインタ(fp)、r12はプロシージャ内呼び出しスクラッチレジスタ(ip; intra-pro…