buffer-overflow

    6

    4答えて

    私はchar*を使用するが、バイト配列を期待する私のすべての関数は、char*を使用して、引数として文字列を期待する多くの関数を持っています。 問題は、ヌルターミネータが見つからないため、すべての種類のオーバーフローを引き起こす文字列関数でバイト配列を渡すのが間違っている可能性があることです。 これは通常どのようにデルタですか?私はuint8_tを取るためにすべての私のバイト配列関数を変更すること

    9

    2答えて

    バッファオーバーフローについて学習しています。 #include <stdio.h> char *secret = "password"; void go_shell() { char *shell = "/bin/sh"; char *cmd[] = { "/bin/sh", 0 }; setreuid(0); execve(shell,cmd,0

    5

    6答えて

    strcmp()(no 'n')は、どちらの引数にもヌル文字が表示されるとすぐに処理を停止し、結果を返します。 したがって、引数の1つがヌルで終了することが100%確実であることがわかっている場合(たとえば、文字列リテラルの場合)、strncmp()( 'n')を使用した場合のセキュリティ上のメリットはありません。strlen()strcmp()は既知の終端文字列より多くの文字を読み取ることは決し

    5

    1答えて

    スタックスマッシングでリターンアドレスを変更して命令をスキップしようとしました。次のコードは、mainの++をスキップし、 "1 3"の出力を出力します。私はこのコードを32ビットのIntelマシン上で実行しました。 #include<stdio.h> void fun(int a,int b) { // buffer char buf[8]; char *p;

    31

    7答えて

    私はCentOS 6.4 32ビットを使用しており、プログラムでバッファオーバーフローを引き起こしています。 GDB内で動作します。ここに出力があります: [[email protected] bufferoverflow]# gdb stack GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1) Copyright (C) 2010

    7

    3答えて

    バッファオーバーフローの脆弱性の基礎を見て、スタックの動作を理解しようとしました。そのためには、戻り値のアドレスをある値に変更する簡単なプログラムを作成したかったのです。誰も私が最初の引数からオフセットを得るためにベースポインタのサイズを計算するのを助けることができますか?次のように void foo(void) { char ret; char *ptr; pt

    6

    3答えて

    私はパケットの送受信に以下の2つの機能を持っています。 void send(std::string protocol) { char *request=new char[protocol.size()+1]; request[protocol.size()] = 0; memcpy(request,protocol.c_str(),protocol.size());

    6

    2答えて

    %sを使用するscanfに非ASCII 16進文字を出力する方法はありますか?私は\x08\xDE\xADのような16進数の文字を挿入しようとしています(バッファオーバーフローを示すため)。 入力はコマンドラインパラメータではなく、プログラム内部のscanfです。

    6

    1答えて

    私はバッファオーバーフロー、特にlibcの種類への復帰について戸惑う。 Iは、以下の脆弱なコードがあります。私は-mpreferred-stack-boundary=2フラグでGCC-2.95(NO -fstack-protector)を使用してコンパイル #include<stdio.h> #include<string.h> main(int argc, char **argv) {

    6

    4答えて

    データを格納するために使用される固定サイズのバイナリバッファがいくつかあります。 そして、memcpyは、バッファを別のバッファにコピーするために使用されます。ソースバッファは宛先バッファよりも大きい可能性があるためです。バッファオーバーフローがあるかどうかをどのように検出できますか?