[Cryptography] Textbook-DH
·
Hacking/Wargame
문제 : https://dreamhack.io/wargame/challenges/120 Textbook-DHDescription Alice와 Bob의 통신을 중간자 드림이가 엿보고 있습니다. 둘의 키교환 과정을 공격해 플래그를 획득해주세요 ! 플래그 형식은 DH{...} 입니다. References https://dreamhack.io/lecture/courses/75dreamhack.ioCode Analysis라이브러리from Crypto.Util.number import getPrime #소수 반환from Crypto.Util.Padding import pad, unpad #패딩from Crypto.Cipher import AES # AESimport hashlib #해시 함수 제공import ran..
[블록 암호] 운영모드
·
Hacking/Cryptography
다양한 크기의 데이터를 처리할 수 있도록 고안된 블록 암호의 사용 방법Padding (패딩)평문에 데이터를 붙여서 평문의 크기가 블록 크기의 배수가 되도록 만드는 과정 Bit Padding (비트 패딩)마지막 블록에서 평문이 채우지 못하는 비트 중 최상위 비트를 1로 설정하고 나머지는 모두 0으로 채우는 패딩 기법수신자 : 평문의 마지막 비트부터 처음으로 값이 1인 비트가 나올때까지를 패딩으로 인식할 수 있음 > 제거하여 평문 복구 * 평문의 크기가블록 크기의 배수인 경우 : 수신자의 메세지 일부를 패딩으로 오인하게 되는 문제 발생→ 패딩으로 한 블록을 추가함 ex) 0101 1010 1000 0000Byte Padding (바이트 패딩) : ANSI X.923블록의 남는 바이트를 일반적으로 0으로 채우..
[Pwnable] basic_exploitation_000
·
Hacking/Wargame
문제 : https://dreamhack.io/wargame/challenges/2 basic_exploitation_000Description 이 문제는 서버에서 작동하고 있는 서비스(basic_exploitation_000)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 셸을 획득한 후, "flag" 파일을 읽으세요. "fdreamhack.ioEnvironmentUbuntu 16.04Arch: i386-32-littleRELRO: No RELROStack: No canary foundNX: NX disabledPIE: No PIE (0x8048000)RWX: Has RWX segments32bit 바이너리 : 주소가 4byte..
[Pwnable] Return Address Overwrite
·
Hacking/Wargame
Code AnalysisOOB ( Out of Bound)▶ scanf("%s", buf) → %[n]s- 입력 길이를 제한하지 않음- 공백문자가 들어올 때까지 계속 입력을 받음> 버퍼 오버플로우 발생 * 버퍼의 크기를 같이 입력하는 strncpy, stncat, snprintf, fgets, memcpy Trigger프로그램이 잘못된 메모리 주소에 접근했다는 의미 *core dumped : 코어파일이 생성됨 > 프로그램이 비정상 종료됐을 때 디버깅을 돕기 위해 운영체제가 생성해주는 것 Stack frame► 0x400729 ret 0x40072a nop word ptr [rax + rax] 0x400730 ..
BitLocker
·
Hacking
데이터 도난, 분실, 부적절하게 서비스 해제된 디바이스의 노출 위협을 해결하는 전체 드라이브에 대한 암호화를 제공하는 윈도우 보안 기능  이동식 디스크와 시스템 드라이브 암호화 지원전체 암호화를 진행하여 엑세스 제한Window 7부터 지원BitLocker의 제공 기능전체 디스크 암호화 : 윈도우 운영체제와 데이터를 포함한 전체 디스크 암호화볼륨 암호화 : 특정 볼륨(드라이브)만 암호화TPM 기반 암호화 : TPM을 사용하여 암호화 키를 보호복구키 제공: BitLocker을 해제하기 위한 복구키 제공 TPM하드웨어적인 보안 장치 : 비밀번호나 인증서, 암호키 등을 저장 ▶ BitLocker와 함께 작동하여 시스템이 오프라인 상태인 동안 디바이스가 변조되지 않았는지 확인 암호화 : AES 128 bit / ..
Disk Scheduling (디스크 스케줄링)
·
CS/OS
디스크 구조 Taccess (디스크 접근시간) = Tseek (탐색 시간) + Trotation (회전 지연시간) + Ttransfer(전송 시간)disk queue : 디스크에 오는 요청을 저장해두는 queue > 디스크 스케줄링 알고리즘을 이용하여 시간을 감소시킴 Disk Scheduling AlgorithmFCFS ( First Come First Served ) disk queue에 요청이 들어온 순서대로 처리장점 : 공평하게 요청을 처리할 수 있음, 단순한 알고리즘단점 : 비효율적임 > 헤드가 움직이는 거리가 매우 커짐 SSTF ( Shortest Seek Time First )탐색 시간이 가장 짧은 것을 선택함  장점 : Seek Time이 적음, 처리량을 극대화할 수 있음단점 : starva..
SAM(Security Account Manager)
·
Hacking
SAM(Security Account Manager) database file in the microsoft windows operating system that contains usernames and passwords 사용자 이름과 비밀번호가 포함된 Microsoft Windows 운영 체제의 Database 파일 각 사용자 계정 : LAN 암호 & SAM Microsoft Windows 암호 할당 Passworld hashes : 두 가지 모두 암호화되어 있어 어떤 사용자도 접근할 수 없음 > 보안 강화 비밀번호를 입력 > Windows 시스템 : SAM의 비밀번호와 비교하여 확인 - 일치하는 경우 : 시스템에 대한 엑세스 권한 부여 > SAM파일이 백그라운드에서 계속 실 - 일치하지 않는 경우 :..
[Memory Corruption] Stack Buffer Overflow
·
Hacking/Pwnable
Stack Buffer Overflow 스택에 위치한 버퍼에 버퍼의 크기보다 많은 데이터가 입력되어 발생하는 버그  *stack overflow : 스택 영역이 너무 많이 확장되면서 발생하는 버그  Buffer (버퍼)데이터가 목적지로 이동되기 전에 보관되는 임시 저장소 데이터가 처리되는 속도가 다른 두 장치 > 버퍼 : 완충작용을 해줌버퍼가 가득 찰 때까지 유실되는 데이터 없이 통신 가능속도가 다른 두 장치에서 안정적으로 목적지에 도돨하도록 함→ 데이터가 저장될 수 있는 모든 단위를 의미 ex) 스택 지역 변수 : 스택 버퍼 / 힙 지역 변수 : 힙 버퍼 *버퍼링 : 송신 측의 전송 속도가 느림 → 수신 측의 버퍼가 채워질 때까지 대기 Buffer Overflow (버퍼 오버플로우)버퍼가 넘치는 것을 ..
[Pwnable] Shell_basic
·
Hacking/Wargame
문제 : https://dreamhack.io/wargame/challenges/410 shell_basicDescription 입력한 셸코드를 실행하는 프로그램이 서비스로 등록되어 작동하고 있습니다. main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는dreamhack.io  execve shell code를 사용할 수 없음> orw shell code를 이용하여 /home/shell_basic/flag_name_is_loooooong 에 있는 값을 알아내야함 int fd = open("/home/shell_basic/flag_name_is_loooooong", RD_ONLY, NULL);read(fd, buf, 0x50);write..
[Exploit] ShellCode(2) - execve shell code
·
Hacking/Pwnable
shell : 운영체제에 명령을 내리기 위해 사용되는 사용자 인터페이스kernel : 운영체제의 핵심 기능을 하는 프로그램  shell 획득 → 시스템 제어 → 시스템 해킹 성공execve shell code임의의 프로그램을 실행하는 shell code → 서버의 shell을 획득할 수 있음 execve("/bin/sh", null, null)syscallraxarg0 (rdi)arg1 (rsi)arg2 (rdx)execve0x3bconst char *filenameconst char *const *argvconst char *const *envp rax : 0x3brdi : "/bin/sh"rsi : NULLrdx : NULL* NULL : xor register register;Name: execve..