小物三下

小物三下

最近の記事

XZ Utilsの脆弱性を試してみた

ファイルの圧縮・解凍を行うツールであるXZ Utilsにバックドアが仕込まれていた問題(CVE-2024-3094)。 脆弱性の概要や詳細は以下が一番わかりやすくまとめられていると思う。 liblzmaはxzのライブラリでsshから使用されるため、悪用された場合は外部の攻撃者からリモートでコード実行される危険性がある。 今回は脆弱性の理解を深めるために、いくつかのサイトを参考にして仮想環境でバックドアを実行してみた。 手順仮想環境の構築 脆弱性を試すため仮想マシンを構

    • DockerでNginx+PHP環境を簡単に構築してWebシェルを立ててみる

      1年ぶりくらいに技術触るのでリハビリがてら。 Linuxカーネルのバックドアとして使われがちなWebシェルを手軽に試したいと思ったのでDockerで環境を構築してテストしてみた。 docker-composeの環境構築 docker-compose.ymlなどの内容は下記の参考サイトより拝借。 ディレクトリ構成は画像のような感じ。 # docker-compose.ymlversion: "3"services: nginx: build: .

      • parrot OSでLinuxカーネルをビルド

        ただのメモ でカーネルソースをダウンロード。バージョンはlinux-6.3-rc6だった。 linux-6.3-rc6ディレクトリ内でmake x86_64_defconfigを行う。 特にmenuconfigなどで設定の変更は行わなかった。 その後は make -j$(nproc) でビルド開始。 1つ目のエラーとして「gelf.hが無いぜ」的なことを言われたので、調べた結果libelf-devが不足しているようだ。 sudo apt install libelf-

        • gdbでglibcのシンボルが読み込めない場合の対策

          Temporary breakpoint 1, 0x0000555555555149 in main ()(gdb) p &main_arenaNo symbol table is loaded. Use the "file" command. gdb使っててこんな感じになってモヤることが長く続いた。 調べたところ、使っているlibcに対応するデバッグ情報をインストールすればよいとのこと。 └──╼ $/lib/x86_64-linux-gnu/libc.so.6GNU

        XZ Utilsの脆弱性を試してみた

          共有ライブラリのリロケーションに使われるセクションとreturn_to_dl_resolve攻撃

          ELFバイナリにおいて共有ライブラリの関数を使用する場合、通常はプログラム実行時に動的なリロケーション(再配置)が行われる。 この時は.pltや.got.pltといったセクションが使われ、Pwnではしばしば.got.pltセクションを任意のアドレスに書き換える攻撃が行われる。 今回は一度目のリロケーション時に使われるセクションとその構造について調べてみた。 実行環境とGlibcのバージョンは以下の通り。 └──╼ $uname -aLinux parrot-b660m

          共有ライブラリのリロケーションに使われるセクションとreturn_to_dl_resolve攻撃

          アセンブラのAT&T記法とIntel記法

          アセンブラにはAT&T記法とIntel記法の二種類が存在する。割とIntel記法のほうが使われている気はするものの、GNUアセンブラ(GAS)ではAT&T記法が用いられており、従ってGDBでもデフォルトではAT&T記法が使用される。 GDBで記法の切り替えGDBで記法を切り替えるには、GDBを起動してコマンドラインから set disassembly-flavor intel と入力すれば、Intel記法へと切り替わる。逆にAT&T記法にするには"set disasse

          アセンブラのAT&T記法とIntel記法

          alma linuxにTigerVNCを入れて動かした

          VirtualBox上に建てた仮想環境でAlma Linuxを動かしてサーバを構築している途中。 そのAlma LinuxにVNCサーバを入れることで、リモートからGUI環境で作業できるようになる。環境は以下のような感じ。 $ cat /etc/redhat-releaseAlmaLinux release 8.5 (Arctic Sphynx) # dnf info tigervnc-server名前 : tigervnc-serverバージョン

          alma linuxにTigerVNCを入れて動かした

          pwntoolsとgdbserverでエクスプロイトのデバッグ

          書いたエクスプロイトがうまく動作しないとき、pwntoolsのgbd.debug()をつかってgdbを立ち上げてその上でエクスプロイトを動作させることで、不具合の原因を調査することができる。 以下のページにあるプログラムをエクスプロイトしてみる。 // bof.c#include <stdio.h>int main() { char buf[300] = {}; setlinebuf(stdout); printf("buf = %p\n", buf);

          pwntoolsとgdbserverでエクスプロイトのデバッグ

          ここ数日やったことこと

          最近バイナリ的なことをよく勉強していたのだが、SECCON2021で一問もPwnを解けないという醜態を晒したので、コンピュータ全般についてしっかり勉強をやり直すことにした。 ・文字コードについて 今まで文字コードについて、たとえばUnicodeやUTF-8、Shift-JISの違いがよくわかっていなかったので改めて勉強し直した。 符号化文字集合と符号化形式の違いをしっかり理解して、区別して考えるとわかりやすかった。 文字コードに関するセキュリティリスクについては以下の

          ここ数日やったことこと

          fastbinsをgdbで見てみる

          今日は短め。休日だし。 mallocで確保されてfreeされたヒープ領域は、arenaという仕組みによって管理されており、フラグメントの防止や再mallocの高速化などに貢献している。arenaはスレッドごとに一つ存在するため、マルチスレッドであれば複数のarenaができるわけだが今回はややこしいので一つのarenaに絞ってみていく。 デフォルトのarenaをmain_arenaと呼び、malloc_state構造体で定義されている。いつものようにglibcのソースコード

          fastbinsをgdbで見てみる

          tcacheをgdbで見てみる

          tcacheは、スレッドごとにfreeされたヒープ領域をキャッシュしておく仕組みで、パフォーマンスの著しい向上が期待できる。glibc 2.26より導入された。(こちらのサイト より) 自分の環境はglibc 2.31なので、ここからglibc 2.31のソースコードを入手して見てみる。glibc-2.31/malloc/malloc.cにtcache関連のコードは存在していた。 【tcacheについて】tcacheはtcache_entryとtcache_perthre

          tcacheをgdbで見てみる

          printf関数でヒープ領域が確保される理由を調べてみた

          先日pwnの勉強がてらtcache poisoningについて調べていたところ、以下のページを見つけたので、サイトに載っていたサンプルプログラムをコンパイルしてGDBでヒープ領域を確認してみた。 http://tukan.farm/2017/07/08/tcache/ ヒープ領域にはtcache_entryやtcache_perthread_struct、mallocで確保されたchunkが格納されていると思っていたが、他にprintf関数で表示する文字列もこのヒープ領域

          printf関数でヒープ領域が確保される理由を調べてみた

          今日やったこと(BMPファイルのヘッダ 解析)

          最近やったことと言えば一人で深酒して二日酔いしたくらいの事ですが、そんなことを記事に書いてもどうしようもないので。 http://www.ece.ualberta.ca/~elliott/ee552/studentAppNotes/2003_w/misc/bmp_file_format/bmp_file_format.htm https://algorithm.joho.info/image-processing/bmp-file-data-header/ 以上のサイト

          今日やったこと(BMPファイルのヘッダ 解析)

          最近やったこと

          あんまり何も書かないのもどうかと思ったので。 とは言っても書けるようなことをしてないのが原因なのですが。 ここ数日、elfファイルについて勉強を行いました。 こちらの方の記事とelf.hを見ながら、elfヘッダやプログラムヘッダを解析するプログラムをコピペもとい作成しました。 ただ記事を眺めるよりも実際に手を動かすことで深い知識が身についたと思います。プログラムの内容はreadelfと同じようなものですが、作ってみることで逆にreadelfの出力が理解しやすくなった気

          最近やったこと

          x86-64で簡単なシェルコードを作ってみる

          最近portswiggerにハマっててVulnhubの勉強が滞りがちだったのでたまには低レイヤーをやります。Web系楽しいんじゃあ^〜 とはいってもあまりにも多くの人がチャレンジしてるような内容ですが。 基本的にはこちらの、ももいろテクノロジーさんの記事にある方法をなぞっているだけです。 https://inaz2.hatenablog.com/entry/2014/03/13/013056 ┌─[parrot@parrot-tobefilledbyoem]─[~/D

          x86-64で簡単なシェルコードを作ってみる

          LinEnum.shが行っているコマンドを調べてみた⑤

          前回までのつづきにして今回で終わり. 【Dockerについての調査】 ・grep -i docker /proc/self/cgroup 2>/dev/null; find / -name "*dockerenv*" -exec ls -la {} \; : 自身のプロセス, 要は今の自分がDockerコンテナ内にいるかどうかを調べている. cgroupsはLinuxカーネルに実装されているコンテナ関連の機能の一つで、複数のプロセスをグループ化してまとめてリソースの制限

          LinEnum.shが行っているコマンドを調べてみた⑤