Skip to main content
Unlisted page
This page is unlisted. Search engines will not index it, and only users having a direct link can access it.

2 posts tagged with "Pwn"

View All Tags

[SECCON Beginners CTF 2020] Beginner's Stack

metarin

Let's learn how to abuse stack overflow!

解説

ふつーのバッファーオーバーフロー問です 愚直にwin_addrに飛ばすとアライメントで怒られるのでsub rsp, 0x08 ; add rsp, 0x08 ; ret ;を途中に挟んでます

[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を取れる