Pwnable/LOB

Pwnable/LOB

[LOB] 20. DEATH_KNIGHT

passcode : got the life (NO DRAG, NO PASSCODE) LOB CLEAR

Pwnable/LOB

[LOB] 19. XAVIUS

passcode : throw me away (NO DRAG, NO PASSCODE) C언어로 구성된 간단한 소켓 프로그래밍 코드이다. 소켓 통신이란? 소켓 : IP address 와 Port 넘버가 합쳐진, 네트워크 상에서 서버 프로그램과 클리어언트 프로그램이 통신을 할 수 있도록 해주는 소프트웨어 장치이다. 엔드 포인트 : IP address + Port 조합, 식별자로 사용됨 일반적으로 서버는 특정 포트가 바인딩된 소켓를 가지고 특정 컴퓨터에서 작동한다. 클라이언트는 서버의 IP 주소 및 호스트 네임과 포트를 알고 있으며 이를 이용하여 연결 요청을 하게 된다. 요청을 하게 되면 서버는 소켓으로부터 요청을 받아들인다. 서버와 클라이언트가 통신을 하기 위한 과정은 다음과 같다. 클라이언트가 서버에 연결..

Pwnable/LOB

[LOB] 18. NIGHTMARE

passcode : beg for me (NO DRAG, NO PASSCODE) 이번 문제에서는 상당히 제약이 많다. 라이브러리 함수도 사용할 수 없으며 버퍼도 이용할 수 없고, RET의 뒷부분은 물론이거니와 ret, leave 함수들도 사용할 수 없다. 대신에 fgets 함수로 입력을 받는다. 바로 이 부분을 이용하면 될 것 같다. fgets 와 같이 어떠한 값들을 입력받는 함수들을 이용할 때 메모리에는 이 입력받은 값들을 일시적으로 저장하는 임시 버퍼가 생성된다. 모든 함수들은 스택에 올라갈 때 인자부터 올라가게 되므로, gdb 로 분석해보면 fgets를 call 하기 전에 0x8049a3c, 즉 stdin 임시 버퍼의 주소를 올린다. 우선 적당한 위치에 bp를 걸어준다. 걸어줄 부분은 fgets 호..

Pwnable/LOB

[LOB] 17. SUCCUBUS

passcode : here to stay (NO DRAG, NO PASSCODE) 간단하게 PLT를 이용하여 푸는 문제이다. PLT에 관련된 내용은 RTL에서 다루었다. 간단히 말해서 함수를 호출할 때 우선 PLT를 참고하고, 이 PLT는 다시 GOT를 참고한다. 문제는 다음과 같은 알고리즘으로 해결한다. main 함수의 RET 값이 strcpy 함수의 주소로 덮인다. 또한 strcpy 함수의 RET 값이 “AAAA”로 덮이기 때문에 이를 strcpy 함수의 기능을 이용하여 shellcode의 주소로 덮는다. strcpy 함수를 이용하므로 인자의 개수 및 인자값을 잘 설정하여 argv[1]에 전달한다. strcpy(char *dest, char const source) 따라서 payload는 다음과 같..

Lucvs
'Pwnable/LOB' 카테고리의 글 목록