본문 바로가기

study/CTF

(15)
[HackCTF] 내 버퍼가 흘러넘친다!!! ctf.j0n9hyun.xyz/challenges#%EB%82%B4%20%EB%B2%84%ED%8D%BC%EA%B0%80%20%ED%9D%98%EB%9F%AC%EB%84%98%EC%B9%9C%EB%8B%A4!!! HackCTF Do you wanna be a God? If so, Challenge! ctf.j0n9hyun.xyz 1. prob1 파일의 보호기법을 확인하기 - NX : disabled -> stack에 실행권한이 존재한다는 의미 2. IDA로 디컴파일 해보기 - main() 함수 외에 전부 기본적인 함수들 - 7번째 줄 read() 함수로 name 변수에 50(0x32)Byte 만큼 입력값을 읽어서 넣어줌 -> name은 main() 함수내에 선언된 변수가 아니다. - name 변수를 더블..
[HackCTF] Basic_BOF #2 ctf.j0n9hyun.xyz/challenges#Basic_BOF%20#2 HackCTF Do you wanna be a God? If so, Challenge! ctf.j0n9hyun.xyz 1. IDA로 파일을 열어서 디컴파일하기 - 포인터 v5은 sup() 함수를 가리키고 있음 - sup() 함수에서 s의 주소값을 리턴 => v5은 변수 s를 가리킴 - main() 함수의 7번째 줄을 확인하면 s 변수에 입력값 133Byte를 넣어주는 코드이다. 하지만 v5와 s 변수의 주소공간의 차이는 128Byte로 133byte를 입력하면 변수 s 주소공간을 넘쳐서 v5에 쓰인다. 2. 사용되지 않은 함수 발견 - 사용되지 않은 shell() 함수를 발견 하였고, 실행시 쉘 코드를 실행시키는 system()..
[HackCTF] Basic_FSB 1. 파일을 다운받고 디컴파일 int __cdecl main(int argc, const char **argv, const char **envp) { setvbuf(stdout, 0, 2, 0); vuln(); return 0; } int flag() { puts("EN)you have successfully modified the value :)"); puts(aKr); return system("/bin/sh"); } int vuln() { char s; // [esp+0h] [ebp-808h] char format; // [esp+400h] [ebp-408h] printf("input : "); fgets(&s, 1024, stdin); snprintf(&format, 0x400u, &s); ret..
[HackCTF] Pwnable - RTL_World 1. rtl_wold 파일을 다운받아서 IDA로 디컴파일 하기 + 코드 해석하기 main() int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax int v4; // [esp+0h] [ebp-A0h] int v5; // [esp+10h] [ebp-90h] char buf; // [esp+14h] [ebp-8Ch] void *v7; // [esp+94h] [ebp-Ch] void *handle; // [esp+98h] [ebp-8h] void *s1; // [esp+9Ch] [ebp-4h] setvbuf(stdout, 0, 2, 0); handle = dlopen("/lib/i386-linux-gnu/lib..
[HackCTF] Pwnable - Basic_BOF #1 1. bof_basic 파일을 다운 받아서 IDA로 오픈 - HEX-RAY 플래그인이 설치되어야 디컴파일이 가능하다 - F5를 눌러 디컴파일을 한다. 2. 코드 해석하기 - 12번째 줄의 if문을 true로 만들어야 system 함수가 호출되는 것을 알 수 있음. => v5의 값을 0xDEADBEEF으로 만들어야함 - 변수 s와 v5가 있는 걸 확인, fgets() 함수를 사용해서 변수 s의 주소에 45바이트만큼의 입려값을 넣는다. - s의 주소는 ebp-34 / v5의 주소는 ebp-c → 0x43 - 0xc = 0x28 - 0x28은 10진수로 40. s와 v5 주소 차는 40바이트. - v5의 주소가 s의 주소보다 큰 값이기 때문에 먼저 선언 되었음을 알 수 있음(데이터 쌓이는 순서 : 높은 주소값..
[CTF] pwanable.kr_passcode (PLT와 GOT 개념 정리) pwnable.kr의 passcode 문제 풀이 문제 해석 더보기 엄마가 암호 기반 로그인 시스템을 만들라고 하셨어. 내 초기 C 코드는 오류 없이 컴파일되었어! 컴파일러 경고가 있긴 했지만 누가 신경이나 쓰겠어? ssh 접속하기 1. ls -al 명령어를 사용하여 파일 및 디렉토리 리스트를 출력 : 권한(퍼미션, 허가권)을 확인 할 수 있음 출력 결과 -> 파일 종류 및 권환(퍼미션), 링크 수, 사용자(소유자), 그룹, 파일크기, 수정시간, 파일이름 관련 내용 : https://pamooochim.blogspot.com/2015/10/blog-post_27.html 리눅스 파일 구조와 파일 권한 읽기, 명령어 소개 파일 구조 ls -l 명령어로 파일 목록 출력했을 때 보이는 화면 형식: {파일유형} ..
[CTF] suninatas.com_web02 suninatas.com의 web 2번째 문제풀이 2번째 문제는 로그인 문제이다. 처음엔 SQL injection인 줄알고 접근 했지만, 아니였다. 크롬 개발자모드로 코드를 확인하면 Join 버튼을 누르면 실행되는 함수를 볼 수 있다. id와 pw가 같으면 로그인에 실패하고, 같지 않으면 document.web02.submit(); 이 실행돼서 성공하는 것처럼 보인다. 하지만 힌트를 보면 id와 pw가 같아야한다고 한다. 모순적인 말로 혼란을 가져올 수도 있다. 단순하게 개발자도구의 콘솔창으로 javascript 코드 우회를 하면 된다. 위의 코드는 함수를 재정의 해줌으로써 id와 pw에 동일한 값을 넣으면 로그인에 성공하도록 하였다. 더보기 정답
[CTF] reversing.kr_easy crack reversing.kr의 easy crack 문제풀이 별다른 힌트 없이 문제를 클릭하게 되면 바로 파일이 다운로드 됩니다. exe파일을 실행하면, 이런 창이 뜨고 박스 안에 아무 문자열을 입력 했을 때 맞지 않는 패스워드라고 뜹니다. 정확한 패스워드를 입력해야 플래그 값을 찾을 수 있을 것 같습니다. 우선 실행파일로 IDA로 열어 보겠습니다. 구조를 확인하면 왼쪽은 패스워드를 맞췄을 때, 오른쪽은 틀렸을때 이동하게 됩니다. 이걸 주소와 함께 보자면, 틀렸을 때 이동하는 주소 부부은 loc_401135 로 위 코드에서 이쪽으로 이동하는 부분을 찾아주면 됩니다. loc_401135 를 클릭하고 위로 올리면 동일한 주소에 노란색 하이라이트가 생겨 보기 쉬워집니다. jnz short loc_401135 이 코드..