メインコンテンツまでスキップ
非公開のページ
このページは非公開です。 検索対象外となり、このページのリンクに直接アクセスできるユーザーのみに公開されます。

「pwn」タグの記事が2件件あります

全てのタグを見る

[SECCON Beginners CTF 2021] beginners_rop

metarin

Do you like programming?

Did you know Return Oriented Programming?

問題

Cのプログラムとソースコード、そしてlibc-2.27.soが配布されます

#include <stdio.h>
#include <unistd.h>

char *gets(char *s);

int main() {
char str[0x100];
gets(str);
puts(str);
}

__attribute__((constructor))
void setup() {
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
alarm(60);
}

解説

明らかに自明なBuffer Overflowがあります しかし、実行ファイルにはsystem()syscallがありません また、NXビットが有効なのでshellcodeを実行することもできません そこでROPとret2libcを組み合わせた攻撃をします

以下の手順で攻撃をします

  1. libcのgetsのアドレスをputsで出力
  2. libcのベースアドレスを計算し、one_gadgetのアドレスを得る
  3. GOTのputsのアドレスをgetsでone_gadgetのアドレスに書き換える
  4. putsを呼び出すとone_gadgetが呼ばれshellを取れる