반응형

pwnable 29

[Root Me] Python - input() - 포너블

파이썬과 관련된 포너블 문제 파이썬 스크립트의 취약점을 이용해 .passwd 파일의 내용을 읽어 비밀번호를 획득하면 된다. 문제에서는 파이썬 소스코드와 원격 접속할 수 있는 WebSSH 링크가 제공된다. WebSSH 를 이용하면 이렇게 원격에서 웹으로 작업할 수 있다. ls -al 을 해보니 .passwd 와 ch6.py, setuid-wrapper 파일이 보인다. ch6.py 외에는 모두 app-script-ch6-cracked 소유의 파일이다. 당연하게도 .passwd 파일은 권한이 없어 읽을 수 없다. setuid-wrapper.c 파일을 보면 setreuid 를 사용해서 ch6.py 파일을 실행시킨다. 위에서 setuid-wrapper 파일을 봐도 권한에 s 가 들어가 있는게 보인다. setuid..

워게임/Root Me 2023.06.10

[Tenable CTF] One Byte at a Time - 포너블 / XOR

간단한 포너블 문제 풀이수가 401 이나 되는걸 보니 아주 쉬웠나보다. 별다른 설명없이 원격으로 접속할 수 있는 주소만 주어진다. nc 를 이용해 원격접속을 해보면 [flag]> 라는 프롬포터가 나오면서 사용자의 입력을 받는다. 그럼 사용자의 입력값이 플래그와 어느정도 일치하는지 검증한 후, 입력한 부분까지 일치한다면 플래그의 그 다음글자를 어떤 IPv4 주소의 랜덤한 부분과 XOR 한 결과를 알려준다. 일단 플래그 포맷이 flag{} 라는것을 알고 있기 때문에 맨 먼저 f 부터 입력해봤다. 여러번 반복해서 입력해본 결과 f 를 입력했을때 결과로 나오는 값은 0x1b, 0x6e, 0x7c 세 가지였다. 이 세 값이 f 다음글자인 l 과 XOR을 했을때 나오는 값은 0x77 0x02 0x10 세 가지이다...

CTF/포너블 2023.03.18

[CTFlearn] RIP my bof - 포너블 / 버퍼오버플로우 / Pwndbg / Pwntool

CTFlearn 의 예순 아홉번째 문제 후반부로 갈수록 포너블 문제가 비중이 높아지는듯 하다. 이번엔 그래도 쉬운 난이도의 포너블 문제이다. 지난번 풀이했던 Simple bof 문제보다 살짝 더 어려워졌다. (https://hackingstudypad.tistory.com/380) 문제에서 주어지는 것은 bof2.c 소스코드와 바이너리인 server 파일이다. server 파일은 문제에서 제공된 서버(thekidofarcrania.com:4902) 에서 돌아가고 있는 파일이다. 한번 서버에 접속해본다. nc 명령어를 이용해 접속할 수 있다. 그럼 지난번처럼 친절하게 스택의 모습을 다 보여준다. Input some text : 라는 문구가 출력되고 사용자 입력을 받는데 어떤 값을 입력하면 그 값이 스택에 ..

워게임/CTFlearn 2023.02.16

[CTFlearn] Favorite Color - 포너블 / 버퍼오버플로우 / gdb

CTFlearn의 예순 여덟번째 문제 이번엔 Medium 난이도의 포너블 문제이다. ssh 로 원격 접속할 수 있는 주소가 하나 주어진다. 주어진 명령어를 그대로 입력하고 비밀번호인 guest 를 입력하면 문제 서버에 원격으로 접속할 수 있다. 문제 서버에는 color, color.c, flag.txt, Makefile 파일이 있다. 문제의 목표는 flag.txt 파일의 내용을 읽는 것이다. cat 명령어를 사용해서 읽어보려 했더니 권한이 없어서 읽을 수가 없었다. 이번엔 color 바이너리를 실행시켜 보았다. Enter your favorite color : 이라는 문구가 출력되면서 사용자의 입력을 받는다. red 라고 입력해봤더니 틀린 답이라는 문구가 나온다. #include #include #inc..

워게임/CTFlearn 2023.02.14

[justCTF] MyLittlePwny - 포너블 / Jail Escape

간단한 난이도의 Jail Escape 문제 대회에서는 보이는것 처럼 PWN, MISC 두 카테고리에 동시에 들어가 있는 문제였다. 별도로 파일은 제공되지 않고 nc 명령어를 이용해 원격에서 접속할 수 있도록 해놨다. 원격으로 접속하면 > 프롬포터가 나오면서 사용자의 입력을 받는다. 테스트용으로 hihi 라고 입력해 봤더니 My Little Pony 에 나오는 것 같은 캐릭터가 내가 입력한 말을 그대로 echo 해주었다. 단순히 입력한 말을 그대로 출력해주는데 어떻게 Escape 할 수 있을지 생각해봤다. 방법은 아주 간단했다. ` 기호를 입력하고 그 사이에 명령어를 넣으면 위처럼 명령어가 실행된 결과가 출력된다. 위 사진은 ls 명령어의 실행 결과이다. 중간에 flag 라는 이름의 파일이 보인다. 해당 ..

CTF/포너블 2023.02.13

[CTFlearn] Simple bof - 포너블 / 버퍼오버플로우

CTFlearn의 쉰네번째 문제 드디어 처음나온 포너블 문제이다. 포너블이라서 살짝 쫄았는데 이건 내가 봤던 포너블 문제중에서 가장 쉽고 친절한 문제였다. 문제 제목에 나온것처럼 문제의 목표는 버퍼오버플로우를 하는것이다. 먼저 문제에서 주어지는 bof.c 코드를 살펴본다. 크기가 16인 padding, 크기가 32인 buff 배열이 있고, nonsecret에는 0xffffff00, secret에는 0xdeadbeef 라는 값이 각각 들어있다. 프로그램을 실행시키면 Input some text: 를 출력하면서 사용자의 입력을 받는데, 입력을 받을 때 입력값에 대한 길이를 검증하지 않기 때문에 버퍼오버플로우 취약점이 발생한다. 버퍼오버플로우로 secret 변수의 값을 0x67616c66 으로 덮어쓴다면 pr..

워게임/CTFlearn 2023.01.09

[2020CCE] Simple Pwn - 포너블 / 버퍼오버플로우 / Pwndbg / Pwntool / IDA

2020년에 진행되었던 국정원 주최 사이버공격방어대회 묵혀놨던 Write Up을 이제야 포스팅 해 본다. 이번에 풀이할 문제는 simple pwn 이라는 포너블 문제이다. 이번 대회에서 가장 쉬웠던 포너블 문제로 스택 버퍼오버플로우 관련된 문제이다. 문제파일로 simple_pwn 이라는 바이너리가 주어진다. 한번 해당 파일을 실행시켜봤다. Welcome. This will help you : 라고하면서 이상한 16진수 값을 던져주고 사용자의 입력을 기다린다. what 이라고 아무단어나 입력해봤더니 그대로 프로그램이 종료되었다. IDA 라는 디스어셈블러를 이용해 바이너리를 열어보았다. main 함수 외에 특별한 함수는 보이지 않는다. main 함수에서는 128바이트 크기의 v4 변수를 선언하는데, gets..

CTF/포너블 2022.11.08

[CTFlearn] Lazy Game Challenge - 포너블

아주 재미있고 간단한 포너블 문제였다. 문제 설명을 읽어보면 John_123 이라는 사람이 만든 흥미로운 게임을 발견했는데 간단한 배팅게임이고, 이 게임을 pwn 해서 $1000000를 가져가 보라고 한다. 아래쪽에 접속할 수 있는 서버 주소가 나와있다. 보이는 것처럼 칼리 리눅스 터미널에서 그대로 입력하면 문제 서버에 접속이 가능하다. 접속하면 이런 화면이 나온다. 몇가지 게임의 규칙을 알려주는데 최초 주어지는 금액은 500$ 컴퓨터가 제시하는 숫자가 무엇인지 맞춰야한다. 컴퓨터가 제시하는 숫자의 범위는 1 - 10 이다. 10번의 기회가 주어진다. 사용자가 입력한 숫자가 10을 초과하더라도 기회는 계속 차감된다. 이정도가 이 게임의 룰이다. 이제 준비가 되었으니 아래쪽에 Y라고 입력해서 게임을 시작하..

워게임/CTFlearn 2022.09.25

[Root Me] ELF x86 - Stack buffer overflow basic 2 - 포너블 / 버퍼오버플로우

Root Me 의 두번째 포너블 문제 살짝 더 어려워진 버퍼오버플로우 문제이다. 아래쪽에 Environment configuration 을 보면 첫번째 문제와 다르게 NX (Non-Executable Stack) 과 Heap exec 가 설정되어 있는게 보이는데 이번 문제에서 딱히 의미있는 설정은 아닌것 같다. #include #include #include #include void shell() { setreuid(geteuid(), geteuid()); system("/bin/bash"); } void sup() { printf("Hey dude ! Waaaaazzaaaaaaaa ?!\n"); } void main() { int var; void (*func)()=sup; char buf[128]; ..

워게임/Root Me 2022.09.11

[Root Me] ELF x86 - Stack buffer overflow basic 1 - 포너블 / 버퍼오버플로우

Root Me 에서 처음 풀어보는 포너블 문제 가장 기본적인 스택 버퍼오버플로우 문제이다. 문제 환경을 살펴보면 아무런 보호기법도 적용되지 않은것이 보인다. 그냥 편하게 풀 수 있는 수준이다. #include #include #include #include int main() { int var; int check = 0x04030201; char buf[40]; fgets(buf,45,stdin); printf("\n[buf]: %s\n", buf); printf("[check] %p\n", check); if ((check != 0x04030201) && (check != 0xdeadbeef)) printf ("\nYou are on the right way!\n"); if (check == 0xdea..

워게임/Root Me 2022.09.03
반응형