일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 구현
- dfs
- 백트래킹
- higunnew
- 운영체제
- 완전탐색
- 알고리즘
- fork
- 김건우
- BOJ
- 백준
- Memory Management
- 프로세스
- 스케줄링
- Deadlock
- samsung research
- 동기화문제
- paging
- 가상메모리
- 컴공복전
- 데드락
- segmentation
- exec
- Brute Force
- ascii_easy
- pwnable.kr
- 시뮬레이션
- BFS
- 삼성기출
- 삼성리서치
- Today
- Total
목록System Security (18)
gunnew의 잡설
이번 문제는 bof와 유사하긴 하지만 써야 하는 테크닉과 알아야 하는 개념들이 꽤 많다. 특히 ascii 필터 부분 때문에 고생을 꽤나 했다. 이번 문제를 풀기 위해서는 ROP(Return Oriented Programming)에 대한 개념이 있어야 한다. BOF와 유사하니 충분히 이해할 수 있다. ROP를 여기서 설명하기엔 내가 너무 힘들어서 못하겠다.. RTL(Return-to-Libc), RTL Chaining, GOT Overwrite에 대한 개념이 필요하다. 참고 : https://d4m0n.tistory.com/84?category=796362 RTL Chaining : https://hackstoryadmin.tistory.com/entry/ELF-Technique-RTL-Chaining 일..
이해하는데 머리가 터질 뻔했다. 이 블로그를 참조하면서 gdb로 며칠 째 직접 예시를 돌려보고 있었는데 블로그 글대로 나오지 않았다. 현재 gcc는 이 버그를 방지하는 장치가 돼있는 모양이다.. (이건 여러 보호 기법이 걸려있기 때문인데, 이를 해제하고 나의 리눅스 환경에서도 fsb를 실험해보기 위한 설정들을 밑에서 설명할 것) 참조 : eunice fsb 설명 [Format String Attack] 포맷 스트링 공격이란? Format String Attack [1] Format String Attack 서론 2000년도 후반에 해커들 사이에 큰 반향을 일으키 보고서 하나가 발표되었다. Format String Attack... Format String Attack이란 무엇인가? 이것은 기존에.. eu..
이번 문제는 정말 어려웠다. 그래도 문제를 풀면서 나 스스로에게 조금은 뿌듯했던 점이 있다. 어느 정도 접근 법도 맞았고, 템빨이긴 하지만(peda를 써서 읭(?) 하는 부분이 있었음. 추후 설명) exploitation point도 캐치하였다는 점이다. 물론 아직 gdb를 능숙히 다룰 수 있는 실력이나 어셈블리 코드를 분석하는 능력은 부족하지만, 까막눈이었던 몇 주 전과 비교하면 꽤나 나아진 느낌이다. 일기는 여기서 그만 쓰고 처음부터 차근차근해보자. pdisas main 디스 어셈블리 코드를 보기 전, 한 가지 팁이 있다. 다음과 같이 디스 어셈블리 코드가 깨지는 경우 set print asm-demangle on 를 치면 깨끗해진다. ↓↓ gdb uaf * uaf.cpp * #include #inc..
이번 문제도 결국 쉘 스크립트 명령어를 얼마나 잘 아느냐를 묻는 문제였다. 코드를 먼저 살펴보자. 먼저, delete_env()를 호출하여 이전에 설정된 환경 변수들을 모두 지운다. 그리고 filter() 함수를 통해서 실행 시 두 번째 인자로 =, PATH, export, /, `, flag를 사용할 수 없게 한다. 이전에 했던 python -c를 통한 payload 공격이라든가, 두 번째 인자로 새로이 환경 변수를 추가하여 공격하는 것을 방지한 모양이다. 나도 어떻게 할지 몰라 당황하던 중 검색을 통해 command라는 명령어를 알게 되었다. help command를 통해 살펴보자. cmd2@pwnable:~$ help command command: command [-pVv] command [arg ..
이 문제는 환경 변수에 대해 제대로 이해하고 있는지를 묻는 문제이다. 먼저 코드를 살펴보자. 비교적 간단하다. putenv() 함수는 무엇인가? 이전에 우리는 환경 변수에 대해서 살펴본 바 있다. 환경 변수란 내가 어떤 경로에 있든지 상관 없이 스크립트를 짤 수 있게 도와준다. 예를 들어 우리가 자주 쓰는 cat이라는 flag는 /bin에 저장되어 있다. 그런데 만약 환경 변수가 없다면 우리가 cat을 실행할 때마다 항상 /bin/cat ~~ 이런 식으로 입력해야만 한다. 얼마나 불편한가! 그래서 이를 편리하게 하기 위해 사용되는 것이 환경 변수이다. 이 정도는 모두가 알고 있을 것이라 생각하고 바로 환경 변수를 env 명령어를 통해 살펴보자. PATH만 따로 놓고보니 다음과 같이 등록되어 있다. cmd..
이번 문제도 너무 쉽다. 결국 취약점이 발견되는 곳은 play() 함수이다. submit에 우리가 직접 입력할 수 있으며, unsigned char lotto[6] 에 "/dev/urandom"을 통해 랜덤으로 문자를 입력한다. 자 그리고 문제가 되는 부분은 바로 이 부분이다. int match = 0, j = 0; for(i=0; i
음.. 이번 거는 좀 터무니가 없다. 이 사이트에 들어가서 소스 코드를 보다보면 betting() 함수가 나온다. 그런데 처음에 가진 돈보다 많이 걸면 다시 입력하라고 나온다. 그러나 이것은 반복문이 아니므로 이때 터무니 없이 높은 돈을 입력하면 그것이 베팅 머니가 된다. 이렇게 계속해서 걸다가 딱 한 번만 이기면 끝. 나도 4번 졌다.
글 쓰다가 날아가서 화가 난다. 이번 글은 짧게 써야겠다. 별로 어렵지도 않다. nc pwnable.kr 9007로 접속하면 가짜 동전 찾기 게임이 나온다. 문제를 읽어보니 딱 봐도 이분 탐색(Parametric Search) 문제이다. 그런나 이 게임을 100번을 통과해야 하는데 제한 시간은 60초이다. 딱봐도 뭔가 Exploitation Code를 작성해서 해결해야 겠다는 생각이 들지 않는가? 사람 손으로 1분 안에 깬다는 것은 불가능하다. 1. Parametric Search 이분 탐색 코드이다. while문의 제한은 C번이다. left는 0, right는 N으로 시작하며 계속해서 범위를 절반으로 줄여 나간다. left = 0 right = N cnt = C mid = -1 while cnt != ..
이번 게임도 개념을 안다면 정말 쉬운 문제였지만, 나는 몰랐기에 여기저기 많이 뒤져보았다. 이번 문제를 이해하기 위해서는 Bash(그냥 우리가 쓰는 쉘임)의 환경변수 설정에 대해 알아야 한다. 1. Bash 환경 변수 설정 Bash에서 환경 변수를 세팅해보자. foo=3을 대입하고 export foo를 해주면 env에 foo=3이 등록될 것이다. 그리고 환경 변수 대신에 환경 함수(?)를 설정할 수도 있다. foo()라는 함수를 hi를 출력하도록 해보자. 다음과 같이 foo() { echo hi; } 와 export -f foo를 하면, foo=3과 foo() { echo hi; }가 동시에 등록될 것이다. 근데 옛날 bash에서는 foo 환경 변수를 설정하는 것처럼 환경 함수(?)를 설정할 수도 있다...
이번 것은 굉장히 쉬웠다. 그러나 이전에 트라우마(?)가 있어 gdb로 뜯어보다가 시간만 날렸다. 결론부터 말하면 그냥 C파일만 봐도 된다. 왜냐하면 힌트에 operator priority가 쓰여있기 때문. 소스 코드를 통한 풀이 #include #include #define PW_LEN 10 #define XORKEY 1 void xor(char* s, int len){ int i; for(i=0; i 0)){ printf("read error\n"); close(fd); return 0; } char pw_buf2[PW_LEN+1]; printf("input password : "); scanf("%10s", pw_buf2); // xor your input xor(pw_buf2, 10); if(!s..