1. 문제 상황 2. 해결 과정 얻은 문자열이 어떤 유형인지 확인하는 습관을 기르자! # 원격서버로부터 파일 다운받기 scp -P [port_number] -r [username]@[hostname]:/home/rcity12/ /home/kali/wargame/ # 파일 확인 ls -alh # 두 파일 비교 diff -u rcity12-flag1.txt rcity12-flag2.txt # 얻은 문자열을 파일 내 저장하고 유형 확인 touch abc vi abc file abc # base64 복호화 (참고로 바로 echo "문자열" | base64 -d 로도 가능하다) base64 -d abc
1. 문제 상황 2. 해결 과정 john 에서 사용하는 워드리스트 파일은 각각 문자열이 줄넘김되어 있어야 john에서 크래킹할 수 있다. 이번 문제에서 wordlist.txt가 줄넘김되어 있지 않아서 계속 실패했었다 ㅠ.ㅠ 그리고 더욱 중요한 점!!! 현재 칼리 리눅스에 기본 설치되어 있는 john은 John the Ripper 1.9.0-jumbo-1+bleeding-aec1328d6c 버전인데, 이 버전에 버그가 있어서 정상적으로 SSH 개인키 복호화가 되지 않는다. 그래서 다른 버전의 john을 설치하고 진행해야 문제가 풀린다(버그 있는걸 몰라서 시간 많이 소요됨ㅜㅜ) 설치 방법: https://github.com/openwall/john/blob/bleeding-jumbo/doc/INSTALL-U..
1. 정의 DNS 터널링은 DNS 프로토콜을 이용하여 데이터를 전송하는 기술로, 일반적으로 DNS는 도메인 이름을 IP 주소로 변환하는 데 사용됨 또한 DNS 터널링은 데이터를 캡슐화하고 전송하는 데 사용됨 2. 목적 네트워크 보안 우회: 네트워크 보안을 우회하고 통신 가능 데이터 은닉: 데이터를 암호화하고 DNS 터널을 통해 전송함으로써 데이터를 숨길 수 있음 즉, 외부로 나가는 네트워크 트래픽 모니터링을 우회하면서 데이터를 외부로 유출하기 위해 사용 가능한 기술 3. 문법 : 데이터를 전송하기 위한 특별한 도메인 이름을 사용 : DNS 레코드 유형 (예: A, AAAA, TXT 등) : 전송하려는 데이터 4. 라이브러리 DNS 터널링을 위한 다양한 도구와 라이브러리가 있음(Iodine, Dns2tcp..
1. 문제 상황 2. 해결 과정 단순히 7z을 압축해제하려고 하면 쓰기 권한이 없어서 오류가 뜬다. 이때 /tmp 디렉터리를 잘 활용하기! file flag.txt # 타입 확인 mkdir /tmp/stone1 # 임시 디렉터리 생성 cp -a flag.txt /tmp/stone1 # 파일 복사 cd /tmp/stone1 # 디렉터리 이동 7z x flag.txt # 7zip 압축해제 unzip flag.xyz.zzz.abc # zip 압축해제 mv flag.xyz.zzz flag.xyz.zzz.gz # gzip으로 압축되어있으나 파일 확장자가 .gz가 아니어서 인식못하는 경우 파일명 변경해주기 gunzip flag.xyz.zzz.gz # gzip 압축해제 tar -xvf flag.xyz.zzz # ta..
1. 반복문 1) while - 기본 구조 # while: 반복문의 시작을 의미/ do: 반복문 코드 블록의 시작을 의미/ done: 반복문의 끝을 의미 while 조건식 do 실행할 코드 done # 한 줄로 작성 while 조건식; do 실행할 코드; done - 괄호 사용 조건문 예시 # () 괄호: 명령어 그룹화, 그룹화된 명령어는 하나의 단위로 취급 # [] 괄호: 조건식 참/거짓 여부 평가 # 주의할 점: [] 괄호 안에는 무조건 띄어쓰기해야 한다!! while read -r line; do decoded=$(echo "$line" | base64 --decode) while [[ "$decoded" != *flag:* ]]; do decoded=$(echo "$decoded" | base64..
1. 문제 설명(달리기 경주) https://school.programmers.co.kr/learn/courses/30/lessons/178871 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr # list.index()를 활용해서 풀면 시간초과 발생하여 실패 # 딕셔너리의 키:값을 활용 def solution(players, callings): position = {} for i,j in enumerate(players): position[j] = i # 인덱스(순서)를 값으로 줌 for k in callings: index = position[k] if..