분류 전체보기
-
|Lord Of Bufferoverflow| #8 orge - trollWargame Site/BOF 2019. 5. 20. 16:05
이번에는 인자가 두 개여야 한다는 점과 argv[1] 을 아예 밀어버리는 코드가 추가되었다. 여기서 잠깐, buffer 에는 앞의 40 바이트를 제외하고 그대로 남아 있다는 것을 명심해야한다. SFP , RET 는 그대로 남아 있다는 것이다. 그렇다면, #7 에서 해결했던 방식으로 접근하면 어떻게 될까? 파일이름에 shell code 를 집어넣고, argv[0] 자리로 RET 를 돌려준다면? 문제가 해결될 것이다. 하지만, 여기서 주의해야할 사항이 있다. 파일이름으로는 \x2F 가 들어가면 안된다는 점이다. \x31\xc0\x50\x68\x2f\x2f... 기존에 사용하던 Shell code 는 다음과 같이 \x2F ('/') 이 포함되어 있기 때문에 링크를 생성할 수 없다. \xeb\x11\x5e\x3..
-
|Lord Of Bufferoverflow| #7 darkelf - orgeWargame Site/BOF 2019. 5. 20. 15:03
눈에 띄는 부분이 argv[0] 의 길이가 77 이여야 한다는 것이었다. argv[0] 은 실행파일의 경로가 쓰여있다. 따라서 심볼릭 링크를 사용해서 경로에 이름을 설정해주도록 하자. 물론 cp 한 파일을 대상으로 하면 된다. 주의해야할 점은 75 라는 숫자이다. 실행 할때 ./ 를 붙혀주기 때문이다. 이것까지 경로에 해당되기 때문에 2 를 뺀 75 길이 만큼만 이름으로 지정해주어야한다. 그 결과 77 의 길이를 검사하는 부분을 통과한 것을 알 수 있다. 이번에도 core dump analysis 를 통해 접근해보도록 한다. RET 만 수정해주면 끝이난다. 위와 같은 작업을 orge 파일에 똑같이 적용시켜주면 SHELL 을 따낼 수 있다.
-
SQL injection 바로 잡기 #3 Bool ValueWargame Site/SQL injection 2019. 5. 20. 14:29
MySQL 에서 Bool 값은 그 값이 정해져 있다. True 는 1 이고, False 는 0 이다. 그러면 다음 세 개의 Query 에서 혼동이 올 수 있다. 1. where 123 2. where 123 = True 3. where 123 = False 1 번 Query 는 Where True 의 의미를 가집니다. (의미만!) 하지만, 2 번 Query 는 Where False 과 같습니다. 3 번 Query 또한 Where False 와 같습니다. 왜.... 이런 현상이 발생할까요? 바로 0이 아닌 모든 상수는 True 로 취급하지만, True 는 모든 상수가 아니기 때문입니다. 이 점을 미루어 봤을 때, where 1 = True 는 where True 로 동작합니다. 만약 -1
-
SQL injection 바로 잡기 #2 문자와 숫자의 비교Wargame Site/SQL injection 2019. 5. 20. 11:36
MySQL 에서 비교를 할 때 발생하는 잘못된 개념을 바로잡아보자! 문자와 문자 문자와 숫자, 문자와 BOOL 이 두 경우의 차이를 바로 잡아야한다. 문자와 문자를 비교할 때는 우리가 알고 있는 방식으로 작동한다. 하지만, 문자와 숫자 혹은 Bool 값이 동작할 때는 의외의 결과가 나온다. 기본적으로 작은따옴표 안의 값들을 우리는 문자열이라고 부른다. '123' 과 '124' 는 같지 않다. 문자열 끼리의 연산은 냉정하다(?)!! 한 자라도 다르면 False 를 반환한다. 하.지.만 문자와 숫자를 비교할 때 만약 문자열이 숫자로 시작하는 경우, 숫자가 아닌 부분까지의 값을 숫자로 숫자와 비교한다. 예를들어, '123ab' 는 123 과 같은 값이 나온다는 것이다. 이 부분을 잘 짚고 넘어가야 한다.
-
|Lord Of Bufferoverflow| #6 wolfman - darkelfWargame Site/BOF 2019. 5. 20. 10:43
자, 이번에는 argv[1] 의 길이가 제한되 있기 때문에 기존의 방식과는 다른 접근을 해야한다. 그 방법은 의외로 단순하다. argv[2] 위치에 shell code 를 넘겨주는 방식으로 접근하면 되니까! RET 를 돌려줄 수 있는 쪽이 한 곳이라도 있다면, 해결되는 문제이다. 첫 번째 인자를 buffer(40) + SFP (4) + RET (4) 형태로 넘겨주고, 두 번째 인자를 shell code 로 넣어주면 SEHLL 을 따낼 수 있을 거 같다, ./darkela `python -c 'print "A"*44 + "\xbf"*4'` `python -c 'print "shell code"'` main 함수 또한 인자를 받고 시작되기 때문에 main 함수의 EBP 밖에는 인자들이 줄줄이 있을 것이다. ..
-
SQL injection 바로 잡기 #1 Error Based Blind SQL injection 9eNWargame Site/SQL injection 2019. 5. 20. 00:19
최근 SQL injection 실습 사이트를 만들어보면서 그 간 공부하면서 잘못 잡았던 개념들을 정리하고자 SQL injection 바로 잡기 섹터를 구성했다. 직접 구현해보지 않으면 모를만한 내용을 다룰 예정이다. Los 28 번 문제인 프랑켄슈타인의 궁금점이 사이트 구축을 통해서 해결이 되었다. 9eN 의 문제였다. 근본적으로 Error 의 종류부터가 다른 것이었다. 1. Syntax Error 2. Logical Error 문법 에러는 Query 자체가 실행되지 않은 채로, 바로 에러 메세지를 반환하는 특성을 지니고 있다. 하지만, 논리적 에러는 Query 자체는 실행이 되지만, 논리적 오류로 인해 메세지를 반환하는 특성을 지니고 있다. 따라서, Error Based SQL injection 을 하..
-
|Lord Of Bufferoverflow| #4 goblin - orcWargame Site/BOF 2019. 5. 19. 23:36
역시나 접속성공과 동시에 확인한건 '나 자신'!! 음... 이제까지 했던 방식과 별반 다르지 않아 보인다. 환경변수를 사용하지도, \xbf 외의 값을 사용하지도 않아봤기 때문이다. core Dump Analysis 로 가보자~ 우선 RET 구간을 \xbf * 4 로 주었다. 그 이유는 필터에 안걸리기 위해서이다. 기존의 방식대로 해결 되었다 ㅎㅎ 깰끔하게 클리어 ~ 이제부터는 필터링 조건이 뭔가 많이 붙기 시작할 거 같은 느낌적인 느낌이 든다 ㅎㅎ