Pwnable.Dragon 풀이. 내 동생을위한 RPG 게임을 만들었다.하지만 그를 속일거야. 나는 이기기가 불가능 해.그가 나에게 너무 화를 내지 않기를 바란다 : p! 라고 써 있다.다운로드 링크가 따로 있고, Running at에 있는 것을 봐서는 UAF과 같이 풀이 방식과 접근 방식이 비슷할 것이다. 일단 dragon 파일을 다운로드하고, 프로그램을 동작하면 영웅 두 종류를 선택할 수 있다. 프리스트와 나이트를 고를 수 있는데, 하나 선택하면 게임이 시작한다. 일단 1번 Priest를 선택하니 위의 화면과 동일하게 떴다.애기 드래곤이 등장했다. 아마 엄마 드래곤(=The Dragon)도 있는 거 같다.임의로 1번을 계속 선택하니까 패배했고, 애기 드래곤은 1판마다 HP를 회복한다.음..........
# Related site issues/PW.KR
Pwnable.flag 풀이. 파파가 포장된 선물을 줬다. 열어보자.이 Flag 문제도 bof 문제처럼 바이너리가 주어졌다.'this is reversing task. all you need is binary' 이 문구을 보니 뭔가 리버싱 문제인 거 같다.일단 그래서 헥스에디터로 flag 바이너리를 실행해봤다.보니까 ELF 파일에 UPX로 패킹이 된 거 같다. 일단 그러면 언패킹을 해줘야 한다. 그러기 전에 wget를 통해서 flag 바이너리 파일을 다운로드 받고, gdb를 이용할 수 있도록chmod 775를 하여 권한을 올려준다. 일단 리버싱 문제이기 때문에 문자열이 어떤 것이 있는지 확인하고자 strings flag 명령어를 이용하여 문자열을추출해 봤다. strings flag>flag_str.txt..
Pwnable.bof 풀이. Nana가 내게 말하길 버퍼오버플로우가 가장 일반적인 소프트웨어 취약점이라고 합니다. 그게 사실인가?라고 쓰여져 있다.일단 다운로드 하라고 하는 bof라는 실핼 파일과 bof.c라는 소스 코드가 있다.또한 nc를 통해 접속해서 푸는 문제라고 나와 있다.nc란 netcat의 줄임말로 TCP/UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓸 수 있는 유틸리티다.UNIX 계열의 cat을 보면 파일을 대상으로 읽고 쓰는데 Netcat는 network connection에 읽고 쓰는 것이라고 한다.pwnable 문제 유형을 보면 ssh를 통해 원격 터미널 접솟을 통해 문제를 푸는 경우도 있고,nc 서버로 접속해 문제를 푸는 경우도 있기에 숙지하고 있어야 하는 방법이다.먼저..
Pwnable collision 풀이. 일단 소스 코드를 해석하자면 인자는 2개로 해야 하며, 두번째 if는 2번쨰 인자의 글자, 즉 바이트 수는 20이어야 하며 세번째 if는 hashcode값과 check_password(첫번째 인자를 지칭)와 같으면 flag를 실행해주는 구조다. 일단 hashcode는 양수의 고정값이고, check_password 함수는 양수의 고정값을 반환하며 받아온 인자를 정수화시키고 그것을 5번씩 더해서 리턴해주는 형태다. 일단 그러면 위 소스코드에 나온 0x21DD90EC를 만들어 줘야 하므로, 역추적을 해본다. 다시 말해 20바이트 문자열을 int형 포인터로 캐스팅하여 정수값으로 res에 더한다. 즉 res = 0x21DD09EC 4바이트씩 총 20바이트, 다시 말해 5번을..
Pwnable.uaf 1.Introduction '"엄마 Use After Free 버그가 뭐예요?" 라는 영어 문장으로 시작한다.UAF--> Use After Free 버그란 힙영역에서 발생하는 버그다.운영체제의 최적화를 위해 운영체제는 힙에 할당하고 해제한 영역을 flag비트만 설정해둔 다음, 그 영역의 메모리 데이터를 그대로 남겨둔다. 해제한 힙 영역을 재사용함으로써 문제가 발생한다. 즉 객체지향 언어인 C++, JAVA에서 발생한다.왜냐하면 동적으로 힙영역에 객체를 생성하고, 해제하게 되면 객체 데이터가 힙 영역 메모리에 그대로 남아있기 때문이다.객체안에 함수가 있다면, 그 영역에 함수 포인터를 원하는 값으로 덮어 씌워서 프로그램의 실행을 움직일 수 있다. 일단 putty를 키고 접속해본다.힌트를..
Pwnable. Fd 문제 풀이. 2번. 문제를 보면 "엄마가 말씀하시길, 로그인 시스템에 기반을 둔 패스코드를 만들라고 했다."무슨 뚱딴지 같은 소리인지 모르겠다... 즉 해석해보면 로그인 시스템을 기반으로 한 passcode 프로그램이다. 아무 에러없이 C코드가 컴파일이 되었고, 근데 컴파일에 경고가 있다라고 해석할 수 있었다. 바로 접속 후 디렉터리를 확인하고, C 코드를 확인했었다. 일단 되게 길다.......... 천천히 살펴보자면, 대략 메인 함수 실행이 welcome() => login() 순으로 진행되는 것을 확인 할 수 있었다.Welcome()함수를 보면, 100byte만큼의 char형 배열에 입력을 받는 부분이 존재한다.그 다음 실행되는 login()함수를 보면 passcode1==33..
Pwnable. Fd 문제 풀이. 1번. Pwnable.kr 1번 문제다. 엄마! linux에서 파일 디스크립터가 무엇인가요? 라는 문제다.일단 파일 디스크립터에 대한 설명이 필요하다.아래 부분에서 설명을 하겠다.원격 = xshell으로 접속한 결과 메타스플로잇 같이 그림이 나온다. ls -al로 파일의 권한을 확인해 보겠다. 일단 fd와 flag가 보인다. fd에는 setuid 권한이 설정되어 있고, 답이 적혀 있는 것 같은 flag 파일에는 fd2 권한이 되어야볼 수 있다. 일단 BOF인줄 알았는데, BOF에 취약한 함수가 안 보이는 것 같아서 아닌 거 같다. 소스를 대강 보자면, fd의 인자 값(atoi(argv[1])으로 받아서 0x1234(10진수로 변환 => 4660)을빼준다. 그리고 read..