목록분류 전체보기 (37)
kaka09
PHP e ModiFier 취약점은 preg_replace 함수에서 "/e" 옵션을 사용할때 발생하는 취약점이다. "/e" 옵션은 치환될 문자를 php 코드 그대로 해석하는 옵션이다. 만약 치환된 결과가 system과 같은 문자열일 경우 /e 옵션에 의해 해당 문자열은 php 코드 그대로 해석하게 될 것이다. Nebula level09 문제를 통해서 e modifier 취약점에 대해 살펴보자 [사진]1-1 소스코드를 살펴보면 인자 2개를 받도록 설계되어 있고, 그중 첫번째 인자는 파일명을 받도록 되어있다. 여기서 취약점 포인트는 $contents = preg_replace("/(\[email (.*)\])/e", "spam(\"\\2\")", $contents); 부분이다.위에서 서술한대로 "/e"옵션을..
[사진]1-1 저번 문제는 안그러더니 다시 CodeEngn 일때의 키값을 구하라는 문제다. 기존과정이랑 똑같이 PEID를 통해 패킹여부를 확인해 보았다. [사진]1-2 확인결과 EXE SHELD 라는게 적용되어 있는거 같다. 그대로 직역하면 실행방패.. 뭔가 DEP와 연관있는 개념인가?? 검색 해봐도 별다른 정보를 얻을순 없었다. 해당 용어는 차후에 알아 보도록 하고 문제풀이에 들어가 보겠다. 일단 패킹이 된것 같진 않아보여서 올리 디버거로 바로 실행해 보았다. [사진]1-3 다행히 올리 디버거로 정상 실행이 되는것을 확인이 되었다. 그러면 이제 부터 손쉽게 문제풀이가 가능하다. 여기까지 왔으면 이제 name이 주어진 상황에서는 공통요소가 보일것이다..인자입력->키 생성->비교->분기 대충 이러한 과정을..
[사진]1-1 이번에는 연속 우려먹는 문제에서 탈출하였다. 키값이 주어지고 주어진 키값에 맞는 name값을 찾으라는 문제이다. 점점 마지막에 가까워지니 난이도 조절을 하는 것일까?? 아무튼 이번에도 PEID로 먼저 확인절차를 가해보았다. [사진]1-2 확인결과 패킹은 씌워져 있지 않았다. 고로 올리 디버거로 바로 확인해보았다. [사진]1-3 올리 디버거로 실행결과 정상적으로 프로그램이 불러와졌다. 이전 과정과 똑같이 성공메세지 부분을 찾아보자 [사진]1-4 이번 문제는 이전 문제들과 달리 실패 메세지가 존재하지 않은것 같다. Good boy, well done등 메세지가 보이는걸로 봐서 성공 했을경우만 성공 메세지가 출력하는것 같다. 그래서 성공 메세지 영역으로 들어가 어셈코드를 분석해 보았다. [사진]..
[사진]1-1 이번 문제도 시리얼을 구하는 문제다. 끝까지 이걸로 우려먹는 건가????... 암튼 이번에도 패킹 여부를 확인하기 위해 먼저 PEID로 확인절차를 가했다. [사진]1-2 패킹은 되어있지 않지만 C++ 프로그램으로 작성되었다는것을 확인 할 수 있다. C#은 있었어도 C++은 처음이다. 일단 올리 디버거로 실행이 되는지 한번 살펴 보았다. [사진]1-3 다행히 올리 디버거로 잘 실행이 되는것을 확인할 수 있었다. 또 덤으로 콘솔창이 하나 실행이 됬는데 아무래도 이번 문제는 콘솔기반 프로그램이라서 그런듯.. 아무튼 올리 디버거로 정상적인 디버깅이 가능하니 문자열을 찾아보자 [사진]1-4 콘솔기반이라 그런지 굉장히 문자열이 많이 쓰인다. 성공 메세지 찾느랴 눈 빠질뻔한건 덤 이다.. 위 사진을 참..
[사진]1-1 14번 문제처럼 입력값이 CodeEngn일 때의 시리얼을 구하는 문제이다. 패킹 여부를 알기위해 PEID로 검사를 해보았다. [사진]1-2 패킹이 되어있지 않는 프로그램이다. 언패킹 과정 없이 올리 디버거를 이용하여 분석을 시도해 보았다. [사진]1-3 올리 디버거로 열어 봤을때 다음과 같은 어셈코드가 나온다. 이번 문제도 시리얼을 찾는 문제기 때문에 성공메세지 근처에 키값을 비교하는 구문이 존재할 가능성이 높으므로 문자열 검색을 통해 성공 메세지 부분을 찾아 보았다. [사진]1-4 찾아보면 "You cracked~~~"로 시작하는 문자열을 확인할 수 있다. 해당 부분으로 이동하여 분기구문을 살펴보자 [사진]1-5 어셈코드를 살펴보면 EAX와 45B844를 비교하여 값이 일치하면 "You ..
[사진]1-1 이번 문제는 시리얼을 구하는 문제이다. bruteforce 기법을 이용해야 한다는데.. 일단 PEID로 패킹이 되어있는지 부터 검사 하였다. [사진]1-2 UPX로 패킹되어 있는걸 확인할 수 있다. 올리 디버거로 디버깅을 시도해보자 [사진]1-3 OEP로 진입후 다음과 같은 어셈코드를 확인 할 수 있다. 서브함수로 00401025로 진입해서 어떠한 루틴을 처리하는것을 알 수 있다. 일단 시리얼키를 찾기 위해서 스트링 검색을 시도해 보았다. [사진]1-4 스트링을 찾아보면 밑에 Good Job 으로 시작하는 문자열을 확인할 수 있다. 해당 영역으로 이동하여 어셈코드를 살펴보자 [사진]1-5 "Godd job~~" 으로 시작하는 문자열의 영역을 들어가서 확인해보면 위에서 분기문이 존재하는것을 ..
[사진]1-1 정답은 무엇인가라는 심플한 메세지만 주어졌다. 심플하게 올리 디버거로 까보자 [사진]1-2 응?? 올리디버거로 열 수 없다는 에러메세지를 보여준다.. 뭐지 싶어서 혹시 이상한 종류의 패킹인가 싶어 PEID로 확인해 보았다. [사진]1-3 PEID로 확인해본 결과 C#으로 만들어진 프로그램임을 확인 할수 있었다. 구글링을 찾아보니 C# 같은 경우는 일반 PE 파일구조와는 달라 올리 디버거로 실행시키기 어렵다고 한다. 따라서 C#전용 디컴파일러를 사용해야 한다는데, C#도 자버처럼 중간언어로 변환 시키는 과정이 존재해 디컴파일로 원본 소스에 가깝게 복원이 가능하다고 한다. jetbrain 의 dotpeek을 이용하여 디컴파일을 시도하였다. [사진]1-4 디컴파일로 원본 소스코드를 복원한 결과이..
[사진]1-1 이번 문제는 특정 key값을 구한 다음 성공메세지를 키값으로 변경시킬수 있는지 물어보는 문제다. 즉 키값과 성공메세지 부분을 찾아야 한다. 올리 디버거로 해당 문제를 디버깅 해보자 [사진]1-2 올리 디버거로 살펴본 결과 하단 부분에 "In the Bin" "Congraturation~" 문자열을 볼 수 있다. 키값만 찾으면 해당 문자열을 덮어 씌우면 된다. 문제는 키값인데 키값은 생각보다 어렵지 않게 찾을 수 있다. 바로 CMP EAX, 7A2896BF 구문인데 비교문이 일치하면 밑에 성공메세지를 출력하는 영역으로 분기한다. [사진]1-3 7A2896BF를 10진수로 바꾸면 2049480383이다. 10진수로 변환한 값을 넣어야 제대로 비교가 되고 참고로 해당 문제에서는 숫자 이외의 값은..
[사진]1-1 이번 문제도 OEP를 언급하는것으로 보아 패킹된 프로그램임을 알 수 있다. 왠지 앞으로는 계속 패킹된 문제들만 제공할듯?? 아무튼 이번 문제에서는 예전에 풀어봤던 문제인 StolenByte를 찾는 문제이다. 먼저 PEID를 사용하여 어떤 패킹 알고리즘을 사용하였는지 확인해 보자 [사진]1-2 PEID로 확인결과 UPX로 퍠킹이 되었음을 확인할 수 있다. 이번엔 따로 언패킹을 시도하지 않고 바로 올리 디버거를 이용해 풀이를 시도해보았다. [사진]1-3 9번 문제와 똑같은 느낌이 난다.. 참조하는 문자열도 말이고.. 혹시나 싶어서 한번 실행을 시켜 보았다. [사진]1-4 9번문제와 완전 똑같은 문제다.. StolenByte 찾는 문제도 똑같고 단순히 OEP만 추가 되었는데.. 조금 풀어보다 왜..
[사진]1-1 OEP를 언급하는것을 보아 해당 문제또한 패킹이 되어 있는 문제인것 같다. 이전 문제들과 똑같이 upx.exe를 이용하여 언팩을 시도하였으나.. [사진]1-2 upx로 패킹된 프로그램이 아니라고 한다.. 그래서 PEID 라는 툴을 사용하여 해당 문제가 어떠한 알고리즘으로 패킹 되었는지 확인하였다. [사진]1-3 PEID로 확인결과 ASPack 이라는 알고리즘으로 패킹이 된 것을 확인할 수 있다. 나중에 따로 upx나 ASPack의 차이점 그리고 패킹 과정에 대해서도 포스팅을 다뤄야 겠다. 지금은 문제풀이에 집중 하자.. [사진]1-4 직접 올리 디버거로 디버깅 해본 결과 UPX 알고리즘 처럼 ASPack도 PUSHAD->POPAD으로 거치는 과정은 비슷했다. 다만 해당 해당 문제에서는 JM..