전체 글
2021_1학기_시스템해킹_계획(21기)
주차 과제 1주차 (3/22 - 3/28) * VMWare Workstation + Ubuntu 16.04 * IDA Pro 7.0 설치 - IDA Pro 사용법 정리 * pwndbg 설치 (gdb-peda 아닙니다!) 파일 디버깅할 때 이렇게 떠야 제대로 설치된 겁니다! * pwntools 설치 pwntools 사이트(설치 및 docs) : http://docs.pwntools.com/en/stable/ - [dreamhack] pwntools 사용법 (9강 Tools 중) 직접 실행하고 정리 * vim 설치 * checksec 설치 설치 방법 정리: doongdangdoongdangdong.tistory.com/92?category=869860 2주차 (3/29 - 4/4) - [Lazenca] Re..
[ROP Emporium] ret2win
check - 64bit - NX만 걸려있음 Analyze pseudo code (IDA) - 친절하게 힌트도 준다: read(0, &s, 0x38)에 대한 설명문으로, 0x20byte 크기의 스택 버퍼 s에 56byte를 입력한다는 점과 read()함수를 사용하기 때문에 NULL 바이트에 대해 걱정할 필요가 없다는 메시지이다. - 위 힌트에서 다 알려줬듯이 0x20byte만큼 할당된 스택버퍼 s에 그 이상의 값을 read함수를 통해 입력받기 때문에 BOF 취약점이 발생한다. - 함수목록을 살펴보면 ret2win이라는 함수가 있다. 이 함수는 system("/bin/cat flag.txt")를 호출하므로 이 함수로 이어지게 ROP chain을 만들면 될 것 같다. Exploit payload: BUF[0..
[SWEA] 1933. 간단한 N 의 약수
문제 문제의 제목 그대로 입력받은 정수 N의 약수를 모두 출력하는 문제이다 입력: 정수 N (1~1,000 >> int 형으로 가능) 출력: 정수 N의 모든 약수 풀이 import java.util.Scanner; import java.io.FileInputStream; class Solution { public static void main(String args[]) throws Exception { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); for(int i=1;i
[HackCTF] Pwning (재)
check - 32bit - Partial RELRO >> .got.plt 영역을 덮어쓸 수 있다 - NX Analyze pseudo code - atoi 함수를 이용해 문자 nptr값을 정수 v2로 바꾼다. - [get_n 호출 1] get_n 함수의 매개변수 a2에 4를 인자로 전달한다. get_n 함수의 반복문을 총 5번 반복하며 v4에 5개의 값을 입력받을 수 있다. - [get_n 호출 2] get_n 함수에 nptr주소값과 v2를 인자로 전달한다. get_n 함수의 반복문을 총 v2번 반복하며 v4에 v2개의 값을 입력받을 수 있다. >> get_n의 두 번째 인자로 v2를 전달할 때 v2이 데이터형은 int 형이지만, 매개변수 a2의 타입은 unsigned int이다. 즉, 음수를 입력하게 ..
[HackCTF] Gift
check - 32bit - NX Analyze psuedo code - binsh 문자열의 주소와 system 함수의 주소를 출력한다. - 128byte만큼 사용자로부터 fgets함수를 통해 입력받고 입력받은 내용을 출력한다. - printf(&s)에서 포맷스트링을 직접 출력인자로 넣으면서 FSB 취약점이 발생한다. - 0x84byte만큼 할당되어 있는 스택 버퍼 s에 gets를 통해 길이 제한없이 값을 입력받으면서 BOF 취약점이 발생한다. - 변수 binsh는 bss 영역에 정의된 초기화되지 않은 변수이다. 즉 binsh 변수에 "/bin/sh\x00"을 저장하여 사용할 수 있을 듯 하다. + bss 영역이기 때문에 ASLR이 적용되어 있어도 주소값이 달라지지 않는다. 실행 - 변수 binsh와 s..
[SWEA] 2027. 대각선 출력하기
문제 문제 화면에 나온 출력화면과 같이 대각선에 #이 출력되도록 한다. 입력: 없음 출력: 대각선에 #, 나머지는 + 풀이 import java.util.Scanner; import java.io.FileInputStream; class Solution { public static void main(String args[]) throws Exception { for(int i=0;i
[HackCTF] Look at me (재)
check - 32bit - NX - Partial RELRO - statically linked library >> 많은 함수들이 바이너리 파일 내에 저장되어 있고 plt와 got 주소가 따로 분리되어 있지않다. Analyze pseudo code - 0x18byte만큼 할당받은 스택 버퍼 v1에 gets함수를 통해 값을 입력받는다. 이 때 크기 제한이 없기 때문에 오버플로우가 발생할 수 있다. functions system 함수와 "/bin/sh" 문자열이 현재 바이너리에 포함되어 있지 않다 + statically linked library >> system함수 호출이 아닌 다른 방식으로 exploit 할 수 있어야한다! ex. mprotect / execve(int 0x80) >> "/bin/sh"..
[SWEA] 1936. 1대1 가위바위보
문제 A와 B가 가위바위보를 한다. 가위: 1, 바위: 2, 보: 3 로 입력을 받고, 입력받는 순서대로 A와 B가 낸 값이라고 한다. 이긴 사람의 알파벳을 출력한다. (단, 비기는 경우는 없다고 한다.) 입력: 정수 2개 (차례로 A와 B의 가위/바위/보) 출력: 문자 (이긴 사람) 풀이 import java.util.Scanner; import java.io.FileInputStream; class Solution { public static void main(String args[]) throws Exception { Scanner sc = new Scanner(System.in); int a,b; a = sc.nextInt(); b = sc.nextInt(); System.out.print(a>b..