問題タブ [shellcode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - バイト文字列を検索するシェルコード:0C330408Bh
悪意のあるコードからシェルコードを抽出したマルウェア(Blackhole Exploit)の動作を学んでいます。バイト文字列の検索以外のすべてを理解しました。誰かがこれについて私を助けることができますか?このシェルコード(ほとんどの悪意のあるシェルコード)がこの特定の文字列を検索するのはなぜですか?検索コードは次のようになります。
scanf - シェルコードを挿入
ちょっとした質問がありました。
コンソール アプリケーション内に次のコードがあるとします。
この脆弱性を悪用して、次のシェル コード (MessageboxA) を入力します。
コンソールからシェル コード (16 進値) を入力するにはどうすればよいですか?
入力をそのまま入力すると、数値は16進数ではなく文字として扱われます。
どうもありがとう。
security - バッファオーバーフロー-シェルを生成した後、プログラムが終了します
私はFreeBSDシステムでバッファオーバーフローを実験してきました。最初の実験として、悪用されたプログラムに別のプロセス(この場合は/ bin / hostname)を開始させようとしました。それはすべて正常に機能し、プログラムはホスト名を出力してから終了しました。その後、プログラムにシェルを生成させようとしました(つまり、/ bin / shを実行します)。これは、呼び出されるプログラムを表す文字列を交換するだけで実行できると思いました。これを試してみると、悪用されたプログラムは単に終了します。gdbによると、新しいプロセス(/ bin / sh)が正常に生成されます。ただし、シェルは生成されません。次に、最初のエクスプロイトを試し、/ bin/shファイルを/bin/ hostnameに移動しましたが、それでも何も変更されません。私の質問は、/ bin /shを他のコマンドと実行することについて何が違うように見えるかということです。
参考までに、シェルの生成を試みるために、次のシェルコードを使用しました。
c - この単純なシェルコードcプログラムをターミナルからコンパイルするにはどうすればよいですか?
私はubuntu12のターミナルを使用してこれをコンパイルしようとしています:
この例はhttp://www.securitytube.net/video/235で見つけました。これは、AlephOneが「SmashingtheStack forFunandProfit」で使用したものでもあります。それ以来、多くの変化があったことを私は知っています。より簡単な例では、次のように使用しました。
gcc -ggdb -mpreferred-stack-boundary = 2 -fno-stack-protector filename filename.c
また、静的ユーティリティを含める場合もあります。上記のCコードをコンパイルしようとするまではうまくいきました。ターミナルから受け取るメッセージは次のとおりです。
これは非常に単純な例であり、このエラーはおそらくLinuxの現在の標準的なセキュリティ対策が原因であると理解していますが、今後はこの例などを使って練習していきたいと思います。誰かが助けることができれば、それは「粉砕」になります。
乾杯
c - シェルコードの実行中に C プログラムがハング/サスペンドする
プログラムの実行中に sptr() が実行され、そこでハングします。おそらく、シェルコードがメモリ内で実行されているためです。printf("..") は実行されません。私の問題は、プログラムで printf() を実行することです。
助けてください :)
エリック・フィンとアルビン・ウォンに返信
あなたの両方が指示したように変更し、私が得たエラーは次のとおりです。
Microsoft Windows [バージョン 6.1.7600] Copyright (c) 2009 Microsoft Corporation. 全著作権所有。
X:>"my program.exe" '»".¼' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されません。これを表示する必要があります
char shellcode[] は有効です。以前に正常にコンパイルしました。
以下は、悪意のあるシェルコードを含む元のコードであるため、アンチウイルスはそれを検出する必要があります。これは、シェルコードが問題ではないことを確認するためです。
上記のコードは正常にコンパイルされ、完全に実行されます
一部の行をシステム(シェルコード)に変更しました。コンパイルはできますが、正しく実行されません
linux - connect() 関数の基本的なシェルコード
Ubuntu 11.10 x86 でシェルコードを書いていますが、int 0x80 syscall の前のレジスタは次のようになります。
これは connect() システムコール用に設定されています。ecx レジスターの値は、以下を含む引数配列です。
ここで、0x00000009 はファイル記述子、0x8e60583 は以下を指すサーバー構造体ポインターです。
つまり:
ファイル記述子が正しく、0x66 を eax (socketcall は syscall #102) に格納するなどのレジスタに設定されたすべての定数値は、コードを実行すると、私の知る限りでは正しいことを知っています。接続されたソケット FD を eax レジスタに格納すると、次のように返されます。
これは明らかに間違っています。私が間違ったことをしましたか?
編集: inet_address のエンディアンを変更しました。
shellcode - 295 バイトより小さいシェル生成シェルコード
295 バイトより小さいシェル生成シェルコードが必要です。Metasploit は通常、300 バイトを (はるかに) 超えるシェル生成シェルコードを生成します。
または、シェルを生成するシェルコードを圧縮できる方法はありますか?
編集: Windows XP/2003 用のこれらのシェルコードが必要です。
assembly - nasm 64 ビット プッシュ qword?
おそらく明らかに間違ったことをしているのですが、興味深い問題があるようです。
私の問題は、AAAABBBBCCCC をスタックにプッシュし、標準出力で出力しようとしていることです。ただし、私の x86_64 環境では、 がpush 0x41414141
プッシュされているようです4141414100000000
。
したがって、次のコード ブロック:
OutputsAAAABBBB
は、たった 8 バイトだと思っていたのですが、実際には私が要求した 12 バイトでした。出力ファイルにパイプしてhexeditで見ると、表示されていることに気付きました414141410000000042424242
.
push
命令が値をプッシュすると思いdword
ます。サイズqword
のスタックに?私はこれを考えるのが正しいですか?
これは、余分なバイトを考慮に入れ、長さを 20 に変更することで簡単に回避できますsys_open
。
だから私の質問は、私は何が間違っているのですか?
gdb - シェルコードが gdb で SyntaxError を返す
C プログラムのコマンドライン引数としてシェルコードを渡そうとしています。しかし、gdb は私に SyntaxError を与え続けます。私は何を間違っていますか?
以下は、C プログラムとシェルコードの内容です。
脆弱な.c
gdbで実行しているコマンドは次のとおりです。
c - バッファオーバーフローに関するコンパイラの技術
最新のコンパイラGCCは非常に強力であるため、コンパイルフェーズでのバッファオーバーフローを防ぐこともできるため、OSはスタックスペースでコードを実行できません。
例えば:
魔法の0x41414141を取得できる唯一の方法は、次のようなGCCコンパイルパラメータを設定することです。
(ubuntu 10.04 x86 lucid 32ビットボックスでテストしました)
GCCスタックスマッシング保護をバイパスする方法はありますか?