분류 전체보기(29)
-
[LOB] LEVEL4 (goblin -> orc)
[ Level4(goblin) Login ] ID : goblin PW : hackers proof orc.c를 확인해보니, egghunter가 있다. extern char **environ은 환경변수를 의미하는데, egghunter에 있는 memse함수t을 이용하여 환경변수의 값을 0으로 바꾼다. ※ memset함수 메모리의 내용(값)을 원하는 크기만큼 특정 값으로 세팅할 수 있는 함수 - 함수 원형 void* memset(void* ptr, int value, size_t num); - 파라미터 *ptr : 세팅하고자 하는 메모리의 시작 주소 value : 메모리에 세팅하고자 하는 값 num : 길이 그리고 if(argv[1][47] != '\xbf') 에서 argv[[1]의 47번째 문자가 '\xb..
2021.03.17 -
[LOB] LEVEL3 (cobolt -> goblin)
[ Level3(cobolt) Login ] ID : cobolt PW : hacking exposed ( 이번에도 bash2를 입력하여 0xff를 0x00으로 인식하는 오류를 예방한다. ) cat명령어로 goblin.c를 확인해보니 gets함수로 buffer를 입력받고 있다. ( gets함수는 Bufferoverflow취약점을 가진 함수이다. ) 또한 코드에서 /bin/sh를 실행하는 코드가 없기 때문에 RET에 /bin/sh 쉘코드 환경변수를 만들어 그 주소를 RET에 넣어 /bin/sh를 실행시켜 비밀번호를 구하면 될 것이다. 우선, 환경변수를 만들어 준다. \x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x..
2021.03.08 -
[LOB] LEVEL2 (gremlin -> cobolt)
[ Level2(gremlin) Login ] ID : gremlin PW : hello bof world ( 이번에도 bash2를 입력해주어, 0xff를 0x00으로 인식하는 오류를 예방해준다. ) cat 명령어로 cobolt.c 파일의 내용을 확인해보니, 이번에도 strcpy함수를 사용하고 있다. ( strcpy함수는 Bufferoverflow에 취약한 함수이다. ) 코드에 따로 /bin/sh를 실행시켜주는 코드가 없으므로 이번에도, RET에 쉘코드쉘 코드 환경변수 주소를 넣어 쉘 코드를 실행시켜 비밀번호를 구하면 될 것이다. 우선, 환경변수를 만들어준다. \x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\..
2021.03.08 -
[LOB] LEVEL1 (gate -> gremlin)
[ Level1(gate) Login ] ID : gate PW : gate 로그인 후, bash2를 입력하여 준다. 그 이유는 0xff를 0x00으로 인식하는 오류를 피하기 위해서이다. ls로 디렉터리와 파일들을 확인해보면, gremlin 실행파일과 gremlin.c 파일이 존재한다. cat 명령어로 gremlin.c를 확인하면 BufferOverflow에 취약한 strcpy함수를 사용하는 것이 보인다. 또한, ls -la명령어로 파일들의 권한을 확인해보니, gremlin 실행파일에 setuid 비트가 있는 것을 볼 수 있다. ( 파일의 소유자는 다음 level인 gremlin이다. ) ※ setuid 비트 8진수 : 4000 setuid 비트를 실행파일에 적용하면 실 사용자에서 프로그램 소유자의 ID..
2021.03.06 -
[LOB] Settings
LOB는 The Lord Of Bufferoverflow의 약자로 모의해킹을 하기 위해 해커스쿨에서 만든 시스템이다. ( FTZ와 유사한 방식으로 문제를 해결하며 FTZ보다 난이도가 있다. ) [ Install ] 아래의 링크로 접속하여 다운로드한다. https://www.hackerschool.org/HS_Boards/zboard.php?id=HS_Notice&no=1170881885 https://www.hackerschool.org/HS_Boards/zboard.php?id=HS_Notice&no=1170881885 [BOF-BufferOverflow- 원정대란?] 비교적 쉬운 BOF 공략 환경인 Redhat 6.2에서부터 궁극의 Fedora 14까지 수십개의 레벨을 거쳐가며 BOF 시스템 해킹 실..
2021.03.05 -
[pwnable.kr] bof
Download에 적힌 링크에 접속하여 bof와 bof.c 파일을 다운로드하여준다. ( Linux 운영체제에서 다운로드한다. ) cat 명령어를 이용하여 bof.c의 코드를 확인한다. bof.c 코드에서 gets함수를 사용하고 있다. gets함수는 Buffer Overflow 취약점을 갖고 있으므로, 이를 통해 key값을 0xcafebabe로 바꾸어 주면 될 것이다. Buffer Overflow 공격을 하기 위해 key의 위치와 입력받는 overflowme의 위치를 알아내야 한다. gdb를 사용하여 bof를 실행시킨다. disass func를 입력하여 func함수를 어셈블리 코드로 확인한다. 어셈블리 코드를 확인해보면, cmp 명령어를 확인해 볼 수 있다. cmp명령어로 [ebp+0x8]과 0xcafeb..
2021.03.03 -
[pwnable.kr] collision
프로토콜 : ssh 아이디 : col 호스트 : pwnable.kr 포트 : 2222 Password : guest putty에서 원격으로 접속한다. 접속 후, ls를 입력하니 실행파일인 col, 소스코드가 담긴 col.c 그리고 flag가 있다. cat명령어를 이용하여 col.c를 확인한다. 코드를 보니, argv[1]를 입력해야 하며, argv[1]가 20byte 입력되어야 한다. 또한 argv[1]을 check_password함수로 넘겨 hashcode와 같을 경우 flag를 확인할 수 있다. check_password함수를 보면 입력했던 p(argv[1])배열을 (int*)로 바꾸어준 뒤, for문으로 5번 돌려 res에 더해주고, 이를 return 해준다. 따라서 hashcode를 5등분한 다음..
2021.03.02 -
[ pwnable.kr ] fd
pwnable.rkr에 접속 좌측 상단에 PLAY 클릭! fd 클릭 프로토콜 : ssh 아이디 : fd 호스트 : pwnable.kr 포트 : 2222 Password : guest SSH를 이용하여 원격 접속을 해야 한다. 원격 접속을 하기 위해 Putty를 설치한다. [ Putty 다운로드 ] Putty를 실행한 후, Host Name(or Ip address)를 pwnable.kr로 Port는 2222로 Connection Type은 SSH로 해준다. ID는 fd, PW는 guest를 입력하여 로그인한다. ls -al 명령어를 통해 현재 디렉터리 내에 있는 파일들과 디렉터리의 권한을 확인한다. fd.c 에 read 권한이 있는 것을 확인한다. cat 명령어로 fd.c를 확인해보니, atoi함수에 a..
2021.02.28 -
[FTZ] Level 20
[ Level 20 ] level20 로그인 ID : level20 PW : we are just regular guys 코드를 보면 /bin/sh를 실행하는 코드가 없다. 따라서 쉘 코드 환경변수를 만들어서 RET에 넣어서 실행시켜야 될 것 같다. 하지만 입력에 사용한 함수가 fgets이다. fgets는 Buffer Overflow공격에 취약하지 않다. 또한 입력을 받는 길이가 79로 정해져 있어서 RET로 접근할 수 없다. 그리고 코드에 이상한 점이 하나 있다. C언어 코딩을 할 때, printf함수를 사용한다면, 보통 printf("%s", bleh);처럼 서식지정자(format specifier)를 사용하여 printf함수를 작성한다. 하지만 힌트에 나온 attackme 코드에서는 서식지정자를 사..
2021.02.25 -
[FTZ] Level 19
[ Level 19 ] level19 로그인 ID : level19 PW : swimming in pink 힌트를 확인해보면, attackme의 코드를 볼 수 있다. 코드에서 /bin/sh를 실행하는 코드가 없기 때문에 RET를 덮어씌워 /bin/sh의 쉘 코드를 실행하면 될 것이다. RET에 쉘 코드를 넣기 위해 환경변수를 만들어 준다. ( RET는 4byte지만 쉘 코드는 4byte를 초과하기 때문에 쉘 코드를 환경변수로 만들어서 환경변수의 주소(4byte)를 대신 RET에 덮어 씌우는 것이다. ) 만들어준 환경변수의 주소를 알기 위해 getenv.c 파일을 만들어준다. getenv함수를 이용하여 SHELLCODE의 주소를 알아내고 %p를 이용하여 주소를 출력해주도록 한다. gcc명령어를 사용하여 실..
2021.02.23