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

Windowsでdownload-execシェルコードを書いてみる

「Windowsでconnect-backシェルコードを書いてみる」ではプログラムがWinsockを利用していることを前提に、connect-back shellを起動するシェルコードを書いた。 この他に、Windowsではインターネットから実行ファイルをダウンロードし実行するシェルコード…

x86 bootloaderでHello Worldを書いてみる

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 x64で電卓を起動するシェルコードを書いてみる

「Windowsで電卓を起動するシェルコードを書いてみる」では、Windows 32bitアプリケーション用のシェルコードを作成した。 ここでは、Windows 64bitアプリケーションから電卓を起動するシェルコードを書いてみる。 環境 Windows 8.1 Pro 64 bit版、Visual St…

tsharkでpcapファイルからHTTP情報を抽出する

Wiresharkには、Wiresharkと同等の機能を持つCLIコマンドとしてtsharkが付属している。 tsharkではオプションとして-T fields -e <field> [-e <field> ...]を指定することで、指定したフィールドのデータをタブ区切りで出力することができる。 次の例では、dump.pcapという</field></field>…

WindowsでUNC LoadLibraryによる任意コード実行をやってみる

LoadLibrary関数は実行時にDLLをロードする関数であるが、引数にUNCパスを与えることにより、SMBプロトコル(Windowsファイル共有)を介してリモートホストにあるDLLをロードできることが知られている。 また、DLLはロード時にDLLMain関数が自動的に呼び出さ…

Metasploitのexploitモジュールを書いてみる

Metasploit Frameworkは、エクスプロイトコード実行をはじめとした種々のタスクを統一されたインタフェースで扱うための統合環境(フレームワーク)である。 ここでは、スタックバッファオーバーフロー脆弱性のあるプログラムを用意し、これに対するexploit…

Windowsでスタックバッファオーバーフロー脆弱性からMeterpreterに接続してみる

主にWindows環境に対して使われる高機能なリモート操作コンソールとして、Meterpreterと呼ばれるものがある。 ここでは、Metasploit Frameworkを使いMeterpreter用のシェルコードを生成してみる。 さらに、スタックバッファオーバーフロー脆弱性を利用してこ…

WindowsでSEH overwriteによるstack canary(/GS)回避をやってみる

スタックバッファオーバーフロー攻撃に対する防御手法のひとつにstack canaryがある。 これは関数の先頭でcanaryと呼ばれるランダムな値をスタックに積んでおき、関数の末尾でこの値が書き換えられていないかチェックすることで攻撃を検知するというものであ…

cdb/Windbgの使い方のメモ

よく使いそうなものの覚書。 シンボルサーバの指定 環境変数を用いて指定しておくとよい。 >set _NT_SYMBOL_PATH=srv*C:\Symbols*http://msdl.microsoft.com/download/symbols デバッグ情報付きでコンパイル コンパイルオプションとして/Ziを付ける。 >cd /Z…

Windowsでnon-ASLR DLLを利用したROPによるDEP回避をやってみる

「WindowsでReturn-oriented Programming(ROP)によるDEP回避をやってみる」では、実行ファイル中でVitrualProtect関数が使われていることを前提にROPを行った。 ここでは、ASLRが無効な古いシステムDLLを利用することにより、VirtualProtect関数を呼び出し…

WindowsでReturn-oriented Programming(ROP)によるDEP回避をやってみる

「Windowsで単純なスタックバッファオーバーフロー攻撃をやってみる」では、DEPを無効にした状態でシェルコードの実行を行った。 ここでは、DEPが有効な環境下において、ROP(Return-oriented Programming)によるシェルコード実行をやってみる。 環境 Windo…

Windowsで単純なスタックバッファオーバーフロー攻撃をやってみる

Windowsで各種セキュリティ機構をオフにして、単純なスタックバッファオーバーフローによるシェルコード実行をやってみる。 環境 Windows 8.1 Pro 64 bit版、Visual Studio Community 2013 with Update 4 >systeminfo OS 名: Microsoft Windows 8.1 Pro OS …

「proxy2: HTTPS pins and needles」というタイトルで発表した

すみだセキュリティ勉強会2015#1 - すみだセキュリティ勉強会 すみだセキュリティ勉強会 2015#1 : ATND HTTPS周辺の話題と、HTTP/HTTPS Proxyとして機能するPythonスクリプトproxy2の紹介を行った。 proxy2: HTTPS pins and needles from inaz2 ありがとうご…

Linux x64でchroot jailから脱出するシェルコードを書いてみる

仙石浩明の日記: chroot されたディレクトリから脱出してみる 上の記事では、chrootがsuperuserならば脱出可能であることについて書かれている。 また、実際にマニュアルを確認すると、確かにそのことが記載されている。 CHROOT(2) Linux Programmer's Manua…

Windowsでconnect-backシェルコードを書いてみる

「Windowsで電卓を起動するシェルコードを書いてみる」ではPEBからライブラリ関数のアドレスを特定し、WinExec関数を使って電卓を起動するシェルコードを書いた。 ここでは、プログラムがWinsockを利用していることを前提に、connect-back shellを起動するシ…

Windowsで電卓を起動するシェルコードを書いてみる

「Windowsで電卓を起動するアセンブリコードを書いてみる」では呼び出すライブラリ関数のアドレスをハードコードした形でアセンブリコードを書いたが、ASLRが有効なDLLについてはDLLが読み込まれるたびにベースアドレスが変化するため常には機能しない。 こ…

PowerShellでnc(netcat)を書いてみる

多くのLinuxディストリビューションでは標準でncコマンドが入っており、リモートホストへの接続あるいはローカルポートでの待ち受けを行い、端末からネットワークソケットに対し読み書きすることができた。 一方Windowsの場合、前者はtelnetコマンドで代用す…

PowerShellで正規表現フィルタを書いてみる

Windowsにおいて標準で利用できるスクリプト環境としては古くからWindows Scripting Host(WSH)があるが、Windows 7以降ではこれに加えPowerShellと呼ばれるシェルが利用できる。 また、WSHでJScriptまたはVBScriptのもとでCOMコンポーネントを扱えたように…

Windowsで電卓を起動するアセンブリコードを書いてみる

限定的な環境において電卓を起動するアセンブリコードを書き、シェルコードとして実行してみる。 環境 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の開発環境を構築し、コンパイル・デバッグをやってみる

WindowsでVisual Studio Community 2013とDebugger Tools for Windowsをインストールし、コンパイラ一式とデバッガを使えるようにする。 また、簡単なC言語コードを書き、コマンドラインからのコンパイルとデバッグをやってみる。 環境 Windows 8.1 Pro 64ビ…

Kprobesで実行可能メモリの読み出しを検知してみる

Dynamic ROP(JIT-ROP)はlibcなどの実行可能メモリを読み出し、その中にあるgadgetを利用することでROPを行う。 これに対し、「x64で実行可能なメモリアドレスに対する入出力システムコールを検知してみる」では、ptraceでreadシステムコールを監視すること…

LinuxカーネルモジュールでStackjackingによるSMEP+SMAP+KADR回避をやってみる

「Linuxカーネルモジュールでret2usrによる権限昇格をやってみる」では、Kernel Address Display Restriction(KADR)を無効にした上で/proc/kallsymsからカーネルシンボルのアドレスを取得し、カーネル空間からユーザ空間の関数を実行させることにより権限…

Linuxカーネルモジュールでret2usrによる権限昇格をやってみる

Linuxカーネルモジュールにおける任意アドレス書き換え(Arbitrary address write)の脆弱性を利用し、ret2usr(Return-to-user)と呼ばれる手法によるroot権限への権限昇格をやってみる。 環境 Ubuntu 14.04.1 LTS 64bit版、Intel SMEP無効 $ uname -a Linu…

無条件で権限昇格するLinuxカーネルモジュールを書いてみる

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コマンドを作った

dog - opposite of cat 背景 Burp SuiteのDecoder機能では、下図のように適当な文字列に対して複数回のエンコード、デコード、ハッシュ計算を簡単に行うことができる。 便利なので、コマンドラインとパイプでもやりたい。 また、Ubuntu 8.04ではcat(1)に対し…

ARMでstack pivot、Dynamic ROPをやってみる

「ARMでReturn-oriented Programming(ROP)をやってみる」ではlibcのベースアドレス、libc関数のオフセットを調べた上でROPを行った。 ここでは、ASLRが有効となっている場合を想定し、GOTアドレスの書き出しおよびstack pivotをもとにしたDynamic ROP(JIT…

ARMでReturn-oriented Programming(ROP)をやってみる

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 #…

ARMで単純なスタックバッファオーバーフロー攻撃をやってみる

「単純なスタックバッファオーバーフロー攻撃をやってみる」と同様に、Linux ARM(armel)環境でスタックバッファオーバーフローからのシェルコード実行をやってみる。 環境 Ubuntu 14.04.2 LTS ARM版(ユーザモードQEMU利用) # uname -a Linux c7b94bb2fc1…

Linux ARM用のシェルコードを書いてみる

「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アセンブリについてのメモ

ARM EABI(armel)についてのメモ。 RealView Compilation Tools アセンブラガイド バージョン 4.0 ARMレジスタ r0からr15までのレジスタとcpsrレジスタがあり、r11はフレームポインタ(fp)、r12はプロシージャ内呼び出しスクラッチレジスタ(ip; intra-pro…