단순 금이 간 P*$$w*rd
10274 단어 beginnerscppprogramming
What is a passworded file without a "possward"?
디지털 시대의 발전과 함께; 디지털 보안은 안전을 위해 훨씬 더 중요해지고 있습니다. 그리고 공격자들이 매우 능숙해짐에 따라 더 강력한 보안을 위한 개선의 필요성이 탐색 및 구현을 간청합니다.
어쨌든, 나는 그것을 위해 여기 있는 것이 아닙니다. 나는 C 프로그래밍 언어로 코딩된 간단한 암호 파일을 간단한 방법으로 해킹할 수 있는 방법을 보여주기 위해 여기에 있습니다. 내 우분투 컴퓨터에서 이것을 실행할 것입니다.
여기에서 파일crackme2에 액세스할 수 있습니다.
openssl
프로그램을 실행하려면 crakme2
라이브러리를 설치해야 할 수 있습니다. sudo apt install libssl-dev
sudo nano /etc/apt/sources.list
을 편집하여 다음 줄을 추가합니다. deb http://security.ubuntu.com/ubuntu xenial-security main
Then sudo apt update
and sudo apt install libssl1.0.0
파일을 실행해 보겠습니다.
$ ./crackme2
>>> bash: ./crackme2: Permission denied
위와 같은 경우 사용자에게 파일에 대한 실행 권한이 없음을 의미합니다. 아래를 실행하여 사용자에 대한 실행 권한을 추가하십시오.
$ chmod 744 crackme2
또는
$ chmod u+x crackme2
실행 파일을 다시 실행해 봅니다.
$ ./crackme2
>>> Access Denied
어머나! 접근 불가?! 이는 파일에 귀하가 가지고 있지 않은 액세스 유형 및/또는 첨부된 암호가 있음을 나타냅니다. 그리고 알고 있더라도 액세스 권한을 얻기 위해 이 암호를 어디에 써야 하는지도 모릅니다.
자, 우선! 이 파일이 제거되었는지 확인해야 합니다. Why?
file 명령을 사용하여 파일 유형을 확인하십시오. 명령은 아래에 따라 분류하기 위해 각 인수를 테스트합니다.
$ file crackme2
>>> crackme2: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e707426293fb8df389849d6d43665deb4e0229c2, not stripped
제거되지 않았습니다. 파일에 일부 정보와 기호가 포함되어 있음을 나타냅니다.
다음으로 파일에 대해 ltrace를 수행해 보겠습니다.
ltrace is a program that simply runs the specified command until it exits. It intercepts and records the dynamic library calls which are called by the executed process and the signals which are received by that process. It can also intercept and print the system calls executed by the program.
$ ltrace ./crackme2
>>> __libc_start_main(0x400876, 1, 0x7ffed3761ee8, 0x400a60 <unfinished ...>
strncmp("HOSTNAME=28baaff6813f", "jennieandjayloveasm=", 20) = -34
strncmp("LANGUAGE=en_US:en", "jennieandjayloveasm=", 20) = -30
strncmp("PWD=/root/alx-low_level_programm"..., "jennieandjayloveasm=", 20) = -26
strncmp("TZ=America/Los_Angeles", "jennieandjayloveasm=", 20) = -22
strncmp("HOME=/root", "jennieandjayloveasm=", 20) = -34
strncmp("LANG=en_US.UTF-8", "jennieandjayloveasm=", 20) = -30
strncmp("LS_COLORS=rs=0:di=01;34:ln=01;36"..., "jennieandjayloveasm=", 20) = -30
strncmp("LESSCLOSE=/usr/bin/lesspipe %s %"..., "jennieandjayloveasm=", 20) = -30
strncmp("TERM=xterm", "jennieandjayloveasm=", 20) = -22
strncmp("LESSOPEN=| /usr/bin/lesspipe %s", "jennieandjayloveasm=", 20) = -30
strncmp("SHLVL=1", "jennieandjayloveasm=", 20) = -23
strncmp("LC_ALL=en_US.UTF-8", "jennieandjayloveasm=", 20) = -30
strncmp("PATH=/usr/local/sbin:/usr/local/"..., "jennieandjayloveasm=", 20) = -26
strncmp("OLDPWD=/etc", "jennieandjayloveasm=", 20) = -27
strncmp("_=/usr/bin/ltrace", "jennieandjayloveasm=", 20) = -11
puts("Access Denied"Access Denied
) = 14
+++ exited (status 1) +++
잡았다!!! 위의 추적을 보면 이 프로그램이 PATH, HOSTNAME, HOME, LANG 등과 같은 환경 변수에 액세스하고 있음을 알 수 있습니다. C 언어의 strncmp 함수를 사용하여 jennieandjayloveasm=과 처음 20자를 비교합니다. jennieandjayloveasm으로 이름에 대한 환경 변수를 검색합니다.
원하는 값을 가진 이름으로 변수를 생성하여 이 프로그램이 찾고 있는 것을 제공하겠습니다.
$ export jennieandjayloveasm=alvicci
변수가 성공적으로 생성되었는지 확인하겠습니다.
$ echo $jennieandjayloveasm
>>> alvicci
이제 파일에서 ltrace를 다시 실행하겠습니다.
$ ltrace ./crackme2
>>> __libc_start_main(0x400876, 1, 0x7fffd90db8d8, 0x400a60 <unfinished ...>
strncmp("HOSTNAME=28baaff6813f", "jennieandjayloveasm=", 20) = -34
strncmp("LANGUAGE=en_US:en", "jennieandjayloveasm=", 20) = -30
strncmp("PWD=/root/alx-low_level_programm"..., "jennieandjayloveasm=", 20) = -26
strncmp("TZ=America/Los_Angeles", "jennieandjayloveasm=", 20) = -22
strncmp("HOME=/root", "jennieandjayloveasm=", 20) = -34
strncmp("LANG=en_US.UTF-8", "jennieandjayloveasm=", 20) = -30
strncmp("LS_COLORS=rs=0:di=01;34:ln=01;36"..., "jennieandjayloveasm=", 20) = -30
strncmp("jennieandjayloveasm=alvicci", "jennieandjayloveasm=", 20) = 0
MD5_Init(0x7fffd90db740, 0x400af6, 20, 61) = 1
strlen("alvicci") = 7
MD5_Update(0x7fffd90db740, 0x7fffd90ddf20, 7, 0x7fffd90ddf20) = 1
MD5_Final(0x7fffd90db7a0, 0x7fffd90db740, 0x7fffd90db740, 0x69636369) = 1
sprintf("ab", "%02x", 0xab) = 2
sprintf("11", "%02x", 0x11) = 2
sprintf("4a", "%02x", 0x4a) = 2
sprintf("86", "%02x", 0x86) = 2
sprintf("d9", "%02x", 0xd9) = 2
sprintf("a0", "%02x", 0xa0) = 2
sprintf("af", "%02x", 0xaf) = 2
sprintf("b8", "%02x", 0xb8) = 2
sprintf("da", "%02x", 0xda) = 2
sprintf("d6", "%02x", 0xd6) = 2
sprintf("36", "%02x", 0x36) = 2
sprintf("8c", "%02x", 0x8c) = 2
sprintf("bd", "%02x", 0xbd) = 2
sprintf("53", "%02x", 0x53) = 2
sprintf("7a", "%02x", 0x7a) = 2
sprintf("c1", "%02x", 0xc1) = 2
strcmp("e99a18c428cb38d5f260853678922e03"..., "ab114a86d9a0afb8dad6368cbd537ac1"...) = 4
puts("Access Denied"Access Denied
) = 14
+++ exited (status 1) +++
멋진! 그것은 우리가 했던 초기 시도보다 더 멀리 나아갔습니다. 그래서 파일에 대한 환경 변수를 확인하고 찾은 후 strlen 함수를 사용하여 값의 길이를 확인했습니다.
보기에는 환경 변수 값의 MD5 해시를 계산하고 strcmp 함수를 사용하여 프로그램 자체에서 미리 정의된 MD5와 비교하는 것 같습니다.
strcmp 함수를 사용하여 프로그램에서 미리 정의된 MD5 해시 값 e99a18c428cb38d5f260853678922e03과 환경 변수의 해시 값을 비교하고 있습니다.
실제 암호를 확인하려면 MD5 해시 값을 문자열로 해독해야 합니다. 이를 위해 md5online 웹 사이트를 사용할 수 있습니다.
변환 후 결과는 "abc123"입니다.
암호가 올바른지 확인하기 위해 환경 변수 jennieandjayloveasm의 값을 abc123으로 바꾸겠습니다.
$ export jennieandjayloveasm=abc123
그런 다음 실행 파일을 실행해 보겠습니다.
$ ./crackme2
>>> Access Granted
위이에이!
파일에 대한 암호가 있습니다.
이제 파일에 액세스할 수 있습니다.
아직 여기 계세요?
나는 당신을 더 사랑합니다! 💕
내가 어떻게 이런 일을 했지? 현재 ALX software engineering programme 에 등록되어 있습니다. 그리고 프로젝트 중 하나에서 실행 파일에 대한 암호가 포함된 파일을 생성하라는 요청을 받았습니다.
이미지: from gettyimages
읽어 주셔서 감사합니다. 이것은 오랫동안 읽었으며 도움이 되었기를 바랍니다.
로그아웃: 친근한 초보자 ❤
Reference
이 문제에 관하여(단순 금이 간 P*$$w*rd), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/hi_heavens/a-simple-cracked-pwrd-1ckg텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)