IT 그리고 정보보안/Write-up

LOB Level 20 (xavius)

plummmm 2021. 4. 12. 19:17
반응형

드디어 마지막 문제다. 열어보자.

 

/*

        The Lord of the BOF : The Fellowship of the BOF

        - dark knight

        - remote BOF

*/

 

#include <stdio.h>

#include <stdlib.h>

#include <errno.h>

#include <string.h>

#include <sys/types.h>

#include <netinet/in.h>

#include <sys/socket.h>

#include <sys/wait.h>

#include <dumpcode.h>

 

main()

{

        char buffer[40];

 

        int server_fd, client_fd;

        struct sockaddr_in server_addr;

        struct sockaddr_in client_addr;

        int sin_size;

 

        if((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1){

                perror("socket");

                exit(1);

        }

 

        server_addr.sin_family = AF_INET;

        server_addr.sin_port = htons(6666);

        server_addr.sin_addr.s_addr = INADDR_ANY;

        bzero(&(server_addr.sin_zero), 8);

 

        if(bind(server_fd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1){

                perror("bind");

                exit(1);

        }

 

        if(listen(server_fd, 10) == -1){

                perror("listen");

                exit(1);

        }

 

        while(1) {

                sin_size = sizeof(struct sockaddr_in);

                if((client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &sin_size)) == -1){

                        perror("accept");

                        continue;

                }

 

                if (!fork()){

                        send(client_fd, "Death Knight : Not even death can save you from me!\n", 52, 0);

                        send(client_fd, "You : ", 6, 0);

                        recv(client_fd, buffer, 256, 0);

                        close(client_fd);

                        break;

                }

 

                close(client_fd);

                while(waitpid(-1,NULL,WNOHANG) > 0);

        }

        close(server_fd);

}

 

리모트 BOF 공격에 대한 문제이다..

생전 처음 해보는 리모트 익스플로잇이라;; 소캣부터 다시 공부하고 왔다...

 

쭉 들여다 보니 recv()함수 쪽에 문제구나.

 

recv(client_fd, buffer, 256, 0);

 

buffer로 부터 최대 256byte 복사하도록 설정했는데.

버퍼는 40byte.. 오버플로우가 일어난다. 이부분이 취약점

이 곳을 공략하면 된다.

 

일단 standalone 서비스이다. (지가 소캣 열고 다하므로..)

standalone은 표준 입출력,에러에 대한 처리가 가능하지 않다.

그래서 bind 셸코드나 reverse 셸코드를 써야한다.

 

버퍼가 40바이트니까 페이로드를 

[nop 44] [ret] [nop] [bind shellcode] 이런 식으로 짜면되겠다. 

반응형

'IT 그리고 정보보안 > Write-up' 카테고리의 다른 글

Codegate 2013 - Web(100)  (0) 2021.04.12
Pwnable.kr - fd  (0) 2021.04.12
LOB Level 19 (nightmare)  (0) 2021.04.12
LOB Level 18 (succubus)  (0) 2021.04.12
LOB Level 17 (zombie_assassin)  (0) 2021.04.12