-
BOF 준비운동 (2)Wargame Site/BOF 2019. 4. 22. 15:37
STEP3 > Stack Frame BOF 준비운동 (1) 에서 설명했던 것처럼 새로운 프레임에 접근할 때, Prolog 가 발생한다고 했다. 우선 이 Prolog 가 갖는 의미를 생각해보자. Prolog 를 하는 근본적인 이유는 주소에 대한 효율적인 접근에 있다. 중요한 한가지 사실은 프로그램에서는 EBP 를 기준으로 변수를 지칭한다. 다음 그림에서와 같이 EIP 가 int a = 3, int b = 5, float c =7 이 실행됨에 따라 해당 Stack 에서는 다음과 같이 해당 정보들이 쌓인다. EBP - 8, EBP - 12 와 같은 방식으로 a, b, c 를 지칭한다. 자, 만약 프레임이 교체되지 않는다면 어떤일이 발생할까? 프레임이 구분되어있지 않은 경우에 프로그램내의 변수들에 접근하기 위해..
-
BOF 준비운동 (1)Wargame Site/BOF 2019. 4. 21. 12:06
STEP1 > EIP BOF 를 접하기 앞서 우선 프로그램이 작동하는 원리를 대략적으로 살펴보도록하자!! 하나의 프로그램은 여러개의 프레임으로 구성이 되어있다. 함수단위 쯤으로 생각해도 무방할 거 같다. 이 때 3가지 레지스터에 대한 이해가 필요한데, 그것은 바로 EIP, EBP, ESP 이다. 우선, EIP 는 프로그램의 다음 실행위치를 가르키는 포인터이다. 결론적으로, EIP 만 조절할 수 있다면 프로그램을 마음대로 이끌어 갈 수 있다는 것이다. 이러한 EIP 를 바꾸어 놓는 것이 BOF 의 핵심이다. 특정 프레임안에서 다른 프레임을 호출하는 경우 EIP 의 변화가 생긴다. EIP 는 프로그램의 다음실행위치를 뜻하기 때문에 특정 프레임을 호출했을 때, 우선 특정 프레임 (B,C Frame) 의 주소 ..
-
Pwnable.kr #5 cmd2Wargame Site/Pwnable.kr 2019. 4. 11. 12:44
'CMD1' 과 같은 방법으로 접근하는 문제일 것 같다는 생각이 들었다. other 의 권한으로 접근할 수 있는 것은 cmd2.c 의 소스보기와 cmd2 의 실행권한이고, cmd2 에 group 에 setGUID 가 설정되어있는 것을 토대로 flag 의 파일을 읽어오는 문제이다. 형식은 비슷하지만, 이전 문제보다는 좀 더 필터링이 많아진 것을 한눈에 알 수 있었다. 그 중 가장 절망적이었던 것은 '/' 였다.... "\$[ 명령어 ]" 의 형태를 취했을 때 '/' 를 사용할 수 있는 것을 알 수 있다. 루트 디렉터리로 이동한 뒤 /bin/sh 명령어를 작동시키니 문제를 해결할 수 있었다. 우선 CMD1 과 같은 방식의 접근으로 해결해보았다. 아래는 sh 을 열어서 확인하는 방법이다.
-
Pwnable.kr #4 cmd1Wargame Site/Pwnable.kr 2019. 4. 9. 15:59
다음으로 접근한 문제는 "CMD1" 이었다. 우선 자아정체성부터 찾자 'ls -l' 를 통해 하위목록을 확인해보니 전형적인 Pwnable 문제의 구조같았다. other 의 권한으로 접근할 수 있는 것은 cmd1.c 의 소스보기와 cmd1 의 실행권한이고, cmd1 에 group 에 setGUID 가 설정되어있는 것을 토대로 flag 의 파일을 읽어오는 문제이다. 소스안에서 putenv 의 PATH 를 통해 환경변수를 설정한 것을 알 수 있었다. 하지만, 딱봐도 저런 디렉터리는 없을 것 같다. 역시나 없다. 그렇다면 어떻게 접근해야할까? 우선 우리가 'cat', 'ls' 라는 명령어를 입력했을 때 일어나는 일을 이해해볼 필요가 있다. 명령어의 위치를 살펴보기 위해 'which ls', 'which cat'..
-
|Lord of SQL_injection| #32 AlienWargame Site/SQL injection 2019. 4. 8. 16:49
마지막 문제 Alien 이다. LOS 라는 대장정의 마침표를 찍어볼까아?? 띠용.. 문제를 풀기위해서 만족해야하는 4가지 조건이 있다. 우선 두 개의 쿼리가 있는 것을 알 수 있다. (query, query2) 1. query 의 결과 id 는 admin 이여야 한다. 2. query 의 결과 id 는 admin 이면 안된다. 3. query2 의 결과 id 는 admin 이면 안된다. 4. query2 의 결과 id 는 admin 이여야 한다. 1, 2 번 3, 4 번의 조건이 너무 모순적이었다. 단순한 문제는 아니라고 생각했다. 만약 계속 바뀌는 값을 중간에 설정할 수 있다면 문제가 해결될거 같다는 생각이 들었다. 예를 들어, 쿼리의 결과인 id 가 시간단위로 바뀐다면 if 문을 파고들 수 있지 않을..
-
|Lord of SQL_injection| #31 ZombieWargame Site/SQL injection 2019. 4. 8. 14:32
드디어 마지막 줄로 내려왔습니다 여러분 !! 좀비? 보다 벌통같은 녀석이다. 앞서 봤던 QUINE 을 사용하면 풀.릴.것.같.지.만 ACE 가 필터링 되어버렸다. 결국 이전 문제를 마주쳤을 때와 똑같은 상황이었다. Hint 라도 얻기위해 Google 을 펼쳐들었다. information_schema.processlist 에 있는 info 에는 실행하는 명령어가 들어가 있다는 것을 알게되었다. union select 를 사용해서 info 의 내용을 꺼내본 결과 다음과 같은 것을 확인 할 수 있었고, 이제 substring 으로 해당 문자열을 뽑으면 될 것 같았다. 38 에서 73 까지 걸러냈고 그 결과 문제가 해결됬음을 확인할 수 있었다.