Skip to content

Instantly share code, notes, and snippets.

View hal0taso's full-sized avatar

__ukun617 hal0taso

View GitHub Profile
@vngkv123
vngkv123 / simple_note.py
Last active September 5, 2017 14:51
MMA 2017 3rd simple note write-up
from pwn import *
import sys, time
context.binary = "./simple_note-b5bdfa5fdb0fb070867ac0298a0b2a850f22e712513038d92c24c40664fac56b"
binary = ELF("./simple_note-b5bdfa5fdb0fb070867ac0298a0b2a850f22e712513038d92c24c40664fac56b")
libc = ELF("./libc.so.6-4cd1a422a9aafcdcb1931ac8c47336384554727f57a02c59806053a4693f1c71")
if len(sys.argv) == 1:
p = process(["./simple_note-b5bdfa5fdb0fb070867ac0298a0b2a850f22e712513038d92c24c40664fac56b"], env={"LD_PRELOAD":"./libc.so.6-4cd1a422a9aafcdcb1931ac8c47336384554727f57a02c59806053a4693f1c71"})
log.info("PID : " + str(proc.pidof(p)[0]))

トラップはよい機能だけど完全に信頼できるというわけではないよ。SIGKILLとSIGSTOPはトラップできない。

大昔のいくつかのUnixにはSIGKILLをトラップする怪しげな方法があった。もしプログラムがptraceされていたら、どのようなシグナルでも(SIGKILLでも)、そのプロセスを停止させてptraceをしている側のプロセスに通知するという動作になっていた。

そこで僕は"sh"という名前のプログラムを書いた。そのプログラムはメモリサイズを/bin/shと同じになるように注意深く調整したあと、fork & execして、子プロセスをptraceした。子プロセスは"superman"というプログラムだった。僕の偽shは、supermanが何らかのシグナルを受け取ると、そのシグナル番号をsupermanのメモリに書き込んだ後、つねにSIGINTでsupermanを再開するという動作になっていた。supermanのSIGINTハンドラはシグナル番号をみて面白メッセージを表示するようになっていた。

僕はそのプログラムを起動して、システム管理者のところにいって、何かプロセスがkillできないんだけど、と言った。システム管理者は^Cや^\を一応試した後、別の端末からログインしてrootになって、psでsupermanを見つけて、それをkill -9した。

「クリプトン星人にはSIGKILLは効かないぞ」と表示されてプロセスが動き続けているのを見た時の彼の顔といったらなかなかのものだった。

@qnighy
qnighy / normalforms.md
Last active July 27, 2020 08:04
いろいろな標準形

Jordan標準形 (Jordan normal form)

K:代数閉体, V:有限次元のK-線形空間, f : V → V 線形写像のとき、Vの基底を上手く選ぶと表現行列がJordanブロックを対角線上に並べた行列になる。

この標準形はJordanブロックの順列を除いて一意である。

計算方法1: 固有方程式を解き固有値を得る。(A-λI)x=0となるxを探す。(A-λI)y=xとなるyを探す。これを止まるまで繰り返すことで基底の一部が得られる。別の固有ベクトルや別の固有値に対しても同様のことを行う。

有理標準形 (Frobenius normal form)

今学期受けたMITのCSの授業

私はこの秋にMITのCSのPhDコースに入学しまして、先日期末試験を終えて冬休みに突入しました。MITは(おそらくアメリカの大学院ならMITに限らないと思いますが)本当に日本人が少なく、興味がある人がいても情報を手に入れづらいと思いますので、受けた授業の感想でも書いてみようかなと思います。ただし、私が受けたのは次に示すように数学っぽいものだけだったので興味の違う人には参考にならないかもしれませんが……。

私が今学期受けた授業は、

  • 18.404/6.840 Introduction to Theory of Computation
  • 6.820 Foundation of Program Analysis

の二つです。二つだけというと少ないように聞こえるかもしれませんが、それぞれ週に2回、90分の授業が行われるので4コマ分です。さらに、こちらでは大学院の授業でも宿題などが多く課されるのが普通ですので、一般的な日本の大学院より授業は大変なんじゃないかなと思います。(もちろん、私も日本の大学院全般を知っているわけではないので同程度に授業がハードな日本の大学院もあるのかもしれません。)

Your First Format String Attacks.

1. What's the `Format String Bugs'?

 Format String Bugs(以降, FSBとする)とは, sprintf()fprintf()などのprintf関数群やsyslog()などのFormat Strings(以降, 書式指定子とする)を扱える関数において, ユーザが自由に書式指定子を配置できるバグである. これを利用した攻撃手法をFormat String Attacksと呼び, この攻撃によりターゲットとなるプロセスがアクセス可能な任意のメモリの読み書きが行えるようになる. また, それを利用しプログラムの制御を乗っ取ることも可能である.
 実際のプログラムに多く存在するとは到底言えないような脆弱性ではあるが稀に見つかることはある. CVE-2012-0809[1]ではsudoのデバッグ機能にFSBが見つかり, 実際にlocal exploitが公開されたりもした. 前述の通り珍しいものではあるが, 任意のメモリの書き換えができるなど非常に強力なものであることからCTFではよく題材にされる.
 この記事ではFSBの検証に以下の環境を使用した.

sh-4.3$ uname -a
Linux Arch_Laptop 4.0.4-1-ARCH #1 SMP PREEMPT Mon May 18 06:43:19 CEST 2015 x86_64 GNU/Linux
@toshia
toshia / teokute_fav_mikutter.md
Created March 7, 2017 11:21
ておくれ、ふぁぼ、mikutter

ておくれ、ふぁぼ、mikutter

移植するにあたって

2016年10月から、「ておくれ、ふぁぼ、mikutter」を公開していたDropboxが、Publicフォルダに設置したHTMLファイルをWebページとして公開する機能を停止した。これによって、本文書はダウンロードすることは出来るが、ブラウザ上で閲覧することは出来なくなっていた。さらに2017年3月、同15日に明示的に公開リンクを取得しなければPublicフォルダに入れているドキュメントも公開されないように変更するというアナウンスがあった。公開設定をしてもブラウザで閲覧できないことも踏まえると、もうDropboxで公開するのは良い手ではない。

思えばこれを書いたのは2012年末。もう4年以上前ということに驚きを隠せない。本文には書いてないが、丁度祖父が危篤で、年の瀬であることも相まってかなり慌ただしい年末だったと記憶している。結局、2012年12月24日の昼下がり、私が京都の四条河原町近辺でせいべと昼食を食べながら、数日前に公開されたこの文書について語り合っている時に訃報が入り、せいべといっしょにすぐ近くのデパートに喪服を買いに行った。そんなときだったからと言うと言い訳になるが、校正が十分に行き届いておらず、そのうち直そうと思いながら今日に至る。

2012年というのは恐ろしく昔のことだ。2017年現在、StSは消え、Twitterは幾度となく倒産・身売りの話を繰り返し、ふぁぼはいいねになり、おるみんによって新たなておくれクラスタが形成された。今日も人はておくれ、ふぁぼり、mikutterを使っている。この文書は今となっては当時を切り取った貴重な記録になっており、再公開にあたって読み直してみると、自分の記憶が思いの外劣化していることに驚いた。この文書が当時想定していたような役割をちゃんと果たしていることが意外でもあるし嬉しくもある。

@TakesxiSximada
TakesxiSximada / README.md
Last active November 14, 2022 00:46
LLVMでLLVM-IRを生成して眺める

LLVMでLLVM-IRを生成して眺める

LLVM

コンパイラのフレームワーク。あらゆるステージで最適化するように設計されている。 なんとなく行っている意味はわかるけど具体的にどこがどうかはあんまりピンとこない。 仮装マシン上で動作する中間言語(LLVM-IR)を生成して、そこから動作マシーンに対応するプログラムを生成するっぽい。

LLVM とは、コンパイル時、リンク時、実行時などあらゆる時点でプログラムを最適化するよう設計された、任意のプログラミング言語に対応可能なコンパイラ基盤である。 Wikipediaよりhttps://ja.wikipedia.org/wiki/LLVM

@pmelchior
pmelchior / pytorch_pgm.py
Created December 30, 2018 23:23
Proximal Gradient Method for pytorch (minimal extension of pytorch.optim.SGD)
from torch.optim.sgd import SGD
from torch.optim.optimizer import required
class PGM(SGD):
def __init__(self, params, proxs, lr=required, momentum=0, dampening=0,
nesterov=False):
kwargs = dict(lr=lr, momentum=momentum, dampening=dampening, weight_decay=0, nesterov=nesterov)
super().__init__(params, **kwargs)
if len(proxs) != len(self.param_groups):
raise ValueError("Invalid length of argument proxs: {} instead of {}".format(len(proxs), len(self.param_groups)))

WannaCry|WannaDecrypt0r NSA-Cyberweapon-Powered Ransomware Worm

  • Virus Name: WannaCrypt, WannaCry, WanaCrypt0r, WCrypt, WCRY
  • Vector: All Windows versions before Windows 10 are vulnerable if not patched for MS-17-010. It uses EternalBlue MS17-010 to propagate.
  • Ransom: between $300 to $600. There is code to 'rm' (delete) files in the virus. Seems to reset if the virus crashes.
  • Backdooring: The worm loops through every RDP session on a system to run the ransomware as that user. It also installs the DOUBLEPULSAR backdoor. It corrupts shadow volumes to make recovery harder. (source: malwarebytes)
  • Kill switch: If the website www.iuqerfsodp9ifjaposdfjhgosurijfaewrwergwea.com is up the virus exits instead of infecting the host. (source: malwarebytes). This domain has been sinkholed, stopping the spread of the worm. Will not work if proxied (source).

update: A minor variant of the viru