전체 글 292

[LeagueOfGuardians 2] register_you

[LeagueOfGuardians 2] register_you 바이너리는 64bit고 NX가 걸려있습니다. v6에 malloc으로 동적 할당을 하고 v6 + 3 (v6은 *형이고 64bit이기 때문에 +3은 +24임)에 hello 함수를 넣습니다. 즉, v6 + 3은 함수 포인터입니다. 그리고 이 함수를 1번 메뉴 register에서 호출하게 됩니다. 마침 바이너리에서 bonus 함수를 제공합니다. 저 함수 포인터를 bonus 함수의 주소로 바꿔주면 됩니다. bonus 함수의 주소 : 0x400806 자, 다시 main의 3번 메뉴를 보면 v6에 %s로 입력 검증 없이 받고 있습니다. dummy 값 24byte와 보너스 함수의 주소를 넘겨주면 될 것 같네요.

System&Write up/CTF 2018.07.24

[LeagueOfGuardians 2] EnteredFLAG

[LeagueOfGuardians 2] EnteredFLAG 64bit 바이너리입니다. 입력을 받고 아무 출력을 하지 않고 꺼집니다. 사실 이 문제는 팀원들이 “angr 문제다”라고 하자마자 잡은 문제입니다. 어제 이 대회를 준비하면서 angr를 설치하다가 계속 오류가 나서 애를 썼는데, 문제가 나왔으니 일단 도전은 해보자 해서 풀게 되었습니다. 이렇게 한 문자씩 가르쳐주는 함수들이 있고, 이 모든 걸 우회하면 플래그가 나올 것입니다. . . . 바로 저 부분이 플래그를 출력해주는 부분인데요. 주소를 확인해봅시다. 0x400DEF네요. 바로 파이썬 코드를 작성해보겠습니다.

[LeagueOfGuardians 2] FOR

[LeagueOfGuardians 2] FOR 바이너리는 32bit이고 NX가 걸려있습니다. main은 간단합니다. WriteReview 함수에 취약점이 있을 것 같네요. BOF 취약점이 발생합니다. s에 0x6C(108) + 4(SFP)만큼 dummy를 넣어주면 return address를 변조할 수 있습니다. puts_plt로 puts_got를 Leak하고, 제공된 libc를 통해서 puts의 offset을 구해서 빼주면 libc_base를 알아낼 수 있습니다. 그리고 puts 함수는 인자가 1개이기 때문에 pr(pop ; ret)을 구해야 합니다. pr : 0x08048379 puts_offset : 0x5f140 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19..

System&Write up/CTF 2018.07.24

[백준 BOJ][sort] 11651 좌표 정렬하기 2

11651_좌표 정렬하기 2 링크 https://www.acmicpc.net/problem/11651 풀이 좌표를 먼저 y 좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순으로 정렬하는 문제입니다. 우선 좌표를 표현하기 좋은 자료구조인 pair[]를 사용하겠습니다. sort()의 3번째 인자인 compare 함수를 정의해줘야 하는데요. bool compare(pair p1, pair p2)를 정의해줍시다. 1. y가 증가하는 순으로 -> if(p1.second != p2.second) return p1.second return p1.first < p2.first; pair 생성은 make_pair(x, y)로 할 수 있습니다..

PS/BOJ 2018.07.24

[백준 BOJ][sort] 11650 좌표 정렬하기

11650_좌표 정렬하기 링크 https://www.acmicpc.net/problem/11650 풀이 좌표를 먼저 x 좌표가 증가하는 순으로, x좌표가 같으면 y좌표가 증가하는 순으로 정렬하는 문제입니다. 우선 좌표를 표현하기 좋은 자료구조인 pair[]를 사용하겠습니다. sort()의 3번째 인자인 compare 함수를 정의해줘야 하는데요. bool compare(pair p1, pair p2)를 정의해줍시다. 1. x가 증가하는 순으로 -> if(p1.first != p2.first) return p1.first return p1.second < p2.second; pair 생성은 make_pair(x, y)로 할 수 있습니다. 코드

PS/BOJ 2018.07.24

[백준 BOJ][sort] 1181 단어 정렬

1181_단어 정렬 링크 https://www.acmicpc.net/problem/1181 풀이 sort() 함수의 세 번째 인자에 들어갈 compare 함수의 정의가 필요합니다. 첫 번째 조건은 길이가 짧은 것부터, 이 조건은 compare 함수의 인자가 (string a, string b)라고 했을 때, if(a.size() != b.size()) return a.size() < b.size(); 해주면 됩니다. 두 번째 조건은 길이가 같으면 사전 순으로, 이 조건은 return a < b; 해주면 됩니다. string이 사전순으로 처리해 주기 때문입니다. 마지막으로 중복 제거입니다. 저는 이전에 출력한 문자열을 저장해둔 다음, 출력할 때 비교하게 해서 출력시에 처리하기로 했습니다. 코드

PS/BOJ 2018.07.24

[백준 BOJ][sort] 10989 수 정렬하기 3

10989_수 정렬하기 3 링크 https://www.acmicpc.net/problem/10989 풀이 오름차순 정렬이지만 N의 범위가 10,000,000입니다. 그렇다면 배열에 담으면 메모리 초과가 나겠네요. 그래서 뒤의 조건인 ‘이 수는 10,000보다 작거나 같은 자연수이다’를 이용해서 arr[10001]을 만든 다음 입력 받은 수를 tmp라고 하면 arr[tmp]++을 해주고 출력할 때, 아래서부터 출력해주면 됩니다. 코드

PS/BOJ 2018.07.24
반응형