SYSTEM
-
What is heap - part1System hacking training/Knowledge 2018. 12. 12. 09:57
What is heap part 1 CTF문제를 풀이함에 있어 전혀 손도 못대는 영역이 heap영역에 대한 취약점을 다룬 문제들이였는데 Koreangang에서 아주 좋은 강의가 올라와서 heap을 처음으로 공부를 해봤습니다. 영상에서도 설명이 되었지만 how2heap을 통해 공부를 시작하려고 하지만 어디서부터 어떻게 시작해야되는지 모르시는 분들에게 정말 필요한 영상인것 같습니다 :) Heap Concept Tutorial#1(for heap exploit) https://www.youtube.com/watch?v=l0GVitgBPf0 이번 글에서는 해당 영상을 토대로 공부를 하면서 정리를 한 것을 포스팅하겠습니다. 제 정리가 보기 불편하고 어렵다면 위의 링크에서 영상을 보고 오시는 것을 추천드립니다. h..
-
[Toddler's Bottle] blukat write upSystem hacking training/pwnable.kr 2018. 11. 15. 23:34
오랜만에 머리도 식힐겸 pwnable.kr toddler 문제를 잡았습니다. 요로쿵 생긴 귀여운 친구에용 Sometimes, pwnable is strange... hint: if this challenge is hard, you are a skilled player. ssh blukat@pwnable.kr -p2222 (pw: guest) 많이 쉬운 문제였습니다. 어렵게 생각해서 문제지...ㅎ blukat@ubuntu:~$ cat blukat.c #include #include #include #include char flag[100]; char password[100]; char* key = "3\rG[S/%\x1c\x1d#0?\rIS\x0f\x1c\x1d\x18;,4\x1b\x00\x1bp;5\x0..
-
ELF Technique - RTL(Return To Library)System hacking training/Knowledge 2018. 2. 16. 16:58
RTL이란? return to library 의 약자이고 linux에서는 return to libc라고 불리기도 한다.(linux에서 library가 libc) 이 기법을 이용하면 프로그램에 system()가 없어도 라이브러리의 system()를 호출하여 사용이 가능하다. 이 기법을 익히기 전에 먼저 알고가야할 것들이 있다. 바로 plt와 got이다. plt 란?procedure linkage table의 약자로, 사용자가 만든 함수는 plt를 참조할 필요가 없지만 외부 라이브러리에서 가져다 쓸 경우 plt를 참조하게 된다.예를 들어 우리가 바이너리에서 만든 함수들 (main(), func() 등)은 plt를 참조할 필요가 없다.plt는 어떤 함수들이 나열되어있는 테이블이라고 생각을 하고 넘어간다. go..
-
Memory 구조System hacking training/Knowledge 2018. 2. 3. 18:39
프로그램이 실행되기 위해서는 프로그램이 메모리 상에 로드 되어 메모리 안에 있어야한다. 운영체제는 프로그램 실행을 위해서 다양한 메모리 공간을 제공한다. 프로그램은 크게 instruction(명령)과 data로 구분되고, 5가지로 세분화 하면 Code/Data/BSS/Heap/Stack 영역으로 이루어져있다. Stack Heap BSS Data Code(text) 1. Code(text) 영역 : 실행할 코드가 저장되는 영역 / HEX 파일 or BIN파일 메모리 2. Data 영역 : 프로그램의 전역 변수, 정적 변수, 배열, 구조체 등이 저장되는 영역 / 프로그램의 시작과 함께 할당, 프로그램 종료시 소멸 3. BSS 영역 : 초기화가 되지 않은 데이터가 저장됨 (Data역역은 초기화된 데이터가 저장..
-
level 19. 풀이System hacking training/Hackerschool F.T.Z 2018. 1. 6. 20:52
all clear 까지 얼마 안남았네용 ㅎ 풀이 시작합니다. 로그인 후 힌트파일을 열어보면 이와 같은 소스코드가 출력됩니다. 기존 문제와 다른 부분은 setreuid()함수가 없는것입니다. 하지만 ls -al attackme 로 attackme의 권한을 확인해 보면 이렇게 setuid가 걸려있는것을 확인 할 수 있습니다. 또한 gets()함수에서 문자열의 길이를 지정하지 않는점을 이용하여 bof 공격을 할 수 있습니다. 스택구조를 확인하기 위해 gdb로 disassemble 해보면 힌트파일의 소스코드와는 다른 40을 할당한것을 알 수 있습니다. dummy 값이 20이 들어간것이죠. 이제 공격 시나리오를 생각해보면 의미 없는 값을 40바이트로 dummy와 버퍼를 덮어고, SFP 를 4바이트로 덮고, 마지막..
-
0x1. PC 내부구조System hacking training/Windows 2017. 12. 6. 09:42
참고 서적 : 윈도우 시스템 해킹 가이드 / 김현민 지음 해킹을 공부하고 Exploit 코드를 작성하기 위해 pc 내부구조, 어셈블리어, 기계어 등을 알아야합니다. 윈도우는 현재 많은 공격자들의 타겟이 되고 있는 운영체제 중 하나 입니다. 해킹을 하기 위해서 많은 기반 지식을 요구하는데요. 먼저 cpu, 레지스터에 대해 설명드리겠습니다. [CPU] 윈도우 운영체제에서 동작하는 프로그램을 공격하기 위해 컴퓨터의 두뇌라고 할 수 있는 CPU에 대해서 알아야합니다. CPU 는 연산장치, 제어장치, 레지스터로 구성되어있고, 연산장치는 수학적 연산을 하는 장치(논리연산), 제어장치는 메모리에서 기계어 코드를 읽고, 해석한 뒤 실행, 레지스터는 연산을 위한 데이터를 저장하는 역할을 합니다. 레지스터에 대해서 좀 더..
-
level 17. 풀이System hacking training/Hackerschool F.T.Z 2017. 12. 3. 19:03
저는 해커스쿨 f.t.z를 풀이할때 한가지 습관이 있는데요. 문제 비밀번호를 획득하면 바로 풀어보는 습관입니다. (다들 그러실듯하지만..) level 16을 풀이하고 바로 level 17을 풀이하였는데 우연히 풀게 되어서 풀이를 작성하게 되었습니다. 기존에 나와있는 풀이와는 다를것으로 예상이 되고, 출제 의도와는 다르게 푼거같아서 어떨떨합니다만... ㅎㅅㅎ 풀이를 시작하겠습니다. 로그인 후 힌트파일을 열어본 결과입니다. 역시 함수 포인터로 printit() 의 시작 주소를 담고 있는것을 확인 할 수 있습니다. 하지만 이전의 문제와는 다르게 shell() 가 보이지 않네요. 대신 main()에 level 18의 권한을 주는것이 보이는데요. 풀이를 하기 위해 취약점을 찾아야겠죠? 이제는 바로 보일것같습니다...
-
level 16. 풀이System hacking training/Hackerschool F.T.Z 2017. 12. 3. 17:39
해커스쿨 F.T.Z level 16 풀이를 해보았습니다. 로그인 후 힌트 파일을 확인하면.. 이전 문제들과는 다르게 main() 외에 2개의 함수가 더 있는것을 확인할 수 있습니다. void shell()에서 level 17의 권한을 걸고, system()를 이용하여 쉘을 띄어주는군요ㅎ 또 main()에서 void (*call)() = printit; 이 부분을 중요하게 볼 필요가 있는데요. c언어를 공부하신 분들은 아시겠지만 이는 함수 포인터라고 하는 녀석입니다. 말 그대로 함수를 담는 변수라고 할 수 있는데요. 아시다시피 포인터 변수는 주소값을 저장하는 변수입니다. 배열과 마찬가지로 printit 과 같이 함수의 이름을 넣어줌으로서 시작 주소를 call 이라는 함수 포인터에 넣어줍니다. 따라서 쉘을 ..