no image
Cryptography - Classic Cipher-2
문제로 가보니 힌트가 존재합니다! 힌트는 키가 숫자라네요!? 일단 파일을 열어봅시다! 암호화된 문자열이 존재합니다! 그리고 키는 "python"이라는군요? 저는 한참을 고민했습니다.. 전치암호인가.. 치환암호인가.. 오만가지 다보다가! python과 숫자.. 알파벳의 순서를 나타내보자 했죠! 알파벳 순서를 보니 이렇게 나옵니다! 그럼 암호문도 숫자만큼 나누어봅시다! 다행히 6글자로 딱 나눠떨어지는군요! 그리고 하나로 합쳐봤는데.. 답이었습니다 :D 이렇게 Classic Cipher-2 문제풀이를 마치겠습니다 :D
2020.02.14
no image
Old - 26 (score:100)
덩그러니 소스코드게 있네요! 소스코드를 보아하니.. id라는 인자값에 "admin"이면 "no!" 출력하고 url 디코딩했을 때 admin이면 문제 풀이 성공이랍니다! admin을 넣어주니 역시는 역시나죠 :D 그럼 간단한거 아닌가요?! url 인코딩한 값을 넣어주면 되겠죠! (google에 "url 인코딩 표"를 검색하면 무수히 많이 나옵니다 ~_~) 자 이렇게 완료해서 넣어주도록 합시다! 엥!? no!!? 왜지.. 하는 순간 url을 보니까 admin으로 디코딩 되어 있음을 보았습니다! 그래서 알아본 결과.. 웹 서버와 브라우저 사이에서 데이터 교환할 때 브라우저 폼에서 입력받은 데이터를 인코딩한 값으로 php서버에 보내고 php는 받은 것을 디코딩한다네요! 그럼 인코딩한 값을 한번 더 인코딩하면 풀..
2020.02.14
no image
Basic RCE L08
OEP를 구하라고 하네요 :D 일단 Ollydbg로 올려봅시다! 올려보니 PUSHAD가 존재합니다! 패킹이 되어 있다는 소리인데.. 이번에는 패킹을 디버깅으로 풀어보도록 하겠습니다 :D 먼저 PUSHAD는 무엇이냐! 8개의 레지스터를 스택에 쌓아줍니다! (EAX -> ECX -> EDX -> EBX -> ESP -> EBP -> ESI -> EDI) 그리고 PUSHAD가 존재하면 마지막엔 반드시 POPAD가 존재한다는거 있지마세요 :D 자 위의 레지스터를 잘 주목해보세요! 지금 보이시나요? 레지스터가 들고 있던 값들이 전부 스택에 쌓아졌습니다! 1020C41 주소에서 ESI에 들어가는 주소인 101A000을 보면 Packing된 내용들이 들어가 있습니다! 1020C4C에 보면 EDI값을 스택에 쌓는데 보..
2020.02.14
no image
Cryptography - Classic Cipher-1
문제를 보니 Hint가 있습니다! Hint가 [::-1]이라고 나와있는데 저는 한참 고민했습니다..ㅠ_ㅠ 그래서 알아보던 중 [::-1]이 Python에서 문자를 역순 시켜 주는 것이더라구요! 역순을 시킨 뒤 가장 많이 쓰이는 카이사르(시저) 암호 복호화를 시도해보았습니다 :D C언어로 짠 코드입니다! 19번째에 떡하니 flag가 보이는군요! 지금까지 Classic Cipher-1 문제 풀이였습니다 :D
2020.02.13
no image
Old - 24 (score:100)
문제를 들어가보니 client ip와 agent 정보가 출력이 됩니다 ! 소스를 볼 수 있으니 소스를 확인해보도록 합시다 :D 소스코드를 확인해보니 ip부분에 필터링이 걸려있고 ip가 127.0.0.1이면 풀린다고하네요 :D 그래서 저는 어떻게 ip값을 바꿀까 생각하다가 쿠키값을 이용해서 바꿨습니다! 필터링이 걸려있기 때문에 우회를 하기 위해 다음과 같은 방법을 사용했습니다! 중간중간에 필터링되는 값을 넣어 127.0.0.1을 나타낼 수 있게 만든 것입니다 :D 쿠키값을 넣고 다시 새로고침해주면 이렇게 문제가 풀립니다! 이상 24번 문제 풀이였습니다 :D
2020.02.13
no image
Basic RCE L07
문제를 보니 "CodeEngn은 어떤것으로 변경되는가?" 입니다. 조건이 컴퓨터 C 드라이브의 이름이 CodeEngn일 경우라네요! 그럼 일단 C드라이브의 이름을 바꿔줍시다! (저는 처음에 C드라이브 이름 안바꾸고 했다가 한참 애먹었습니다..ㅠㅠ) 자 변경을 시키고 Ollydbg로 열어줍니다 :D EP입니다! 처음부터 GetModuleHandleA함수를 통해 어떤 모듈의 정보를 가져오는군요 :D https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulehandlea GetModuleHandleA function (libloaderapi.h) - Win32 apps Retrieves a module han..
2020.02.13
no image
Cryptography - Smooth CipherText
문제를 보니 암호화가된 문자열이 보입니다 :D 보다보니 LymoADJ{t_tzwi_3vxbd0p3_vff.afy'q_wzoxpq_dp_qfz} 이부분에서 카이사르 암호화된 것일까? 라는 생각을 했지만.. HackCTF -> LymoADJ 에서 같은 c가 다른 문자열로 나옵니다. 그래서 저는 비즈네르 암호화라는 걸 직감했습니다 :D https://ko.wikipedia.org/wiki/%EB%B9%84%EC%A6%88%EB%84%A4%EB%A5%B4_%EC%95%94%ED%98%B8 비즈네르 암호 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 비즈네르 암호(프랑스어: Vigenère 暗號)는 프랑스 외교관이었던 블레즈 드 비즈네르에 의하여 1586년에 ..
2020.02.12
no image
Old - 18 (score:100)
이번에는 SQL Injection 문제네요 ㅎㅎㅎㅎ 밑에 소스코드를 볼 수 있게 해주니 클릭해서 보도록 합시다 :D 소스코드를 보아하니 몇개가 필터링 되어 있습니다. (띄워쓰기, /, (, ), |, &, select, from, 0x) 그리고 보여지는 구문은 select id from chall18 where id='guest' and no=$_GET[no](입력값) 이네요 :D solve의 조건은 id가 admin이여야 합니다! 쿼리 뒤에 admin's no=2라고 힌트가 대놓고 나와 있군요 ㅎㅎㅎ! 그래서 저는 밑의 공식을 이용하여 공격을 해보았습니다! "False and False or True" id='guest' and no=2 or no=2를 입력하여 줘야하는데 공백이 현재 필터링 되어 있으..
2020.02.12

Classic Cipher-2 Hint

문제로 가보니 힌트가 존재합니다!

힌트는 키가 숫자라네요!?

 

일단 파일을 열어봅시다!

ciphertext

암호화된 문자열이 존재합니다!

그리고 키는 "python"이라는군요?

 

저는 한참을 고민했습니다..

전치암호인가.. 치환암호인가.. 오만가지 다보다가!

 

python과 숫자.. 알파벳의 순서를 나타내보자 했죠!

python 알파벳 순서

알파벳 순서를 보니 이렇게 나옵니다!

그럼 암호문도 숫자만큼 나누어봅시다!

복호화

다행히 6글자로 딱 나눠떨어지는군요!

그리고 하나로 합쳐봤는데.. 답이었습니다 :D

복호화 성공

이렇게 Classic Cipher-2 문제풀이를 마치겠습니다 :D

'CTF > HackCTF' 카테고리의 다른 글

Reversing - Reversing Me  (0) 2020.02.24
Reversing - Welcome_REV  (0) 2020.02.24
Cryptography - Classic Cipher-1  (0) 2020.02.13
Cryptography - Smooth CipherText  (0) 2020.02.12
Cryptography - Great Binary  (0) 2020.02.10

 

Old 26번 문제

덩그러니 소스코드게 있네요!

소스코드

소스코드를 보아하니..

id라는 인자값에 "admin"이면 "no!" 출력하고

url 디코딩했을 때 admin이면 문제 풀이 성공이랍니다! 

admin 입력

admin을 넣어주니 역시는 역시나죠 :D

그럼 간단한거 아닌가요?!

url 인코딩한 값을 넣어주면 되겠죠!

(google에 "url 인코딩 표"를 검색하면 무수히 많이 나옵니다 ~_~)

admin url 인코딩

자 이렇게 완료해서 넣어주도록 합시다!

no!

엥!? no!!?

왜지.. 하는 순간 url을 보니까 admin으로 디코딩 되어 있음을 보았습니다!

그래서 알아본 결과..

 

웹 서버와 브라우저 사이에서 데이터 교환할 때 브라우저 폼에서 입력받은 데이터를

인코딩한 값으로 php서버에 보내고 php는 받은 것을 디코딩한다네요!

 

그럼 인코딩한 값을 한번 더 인코딩하면 풀리지 않을까요 :D?

밑의 홈페이지를 이용해서 url 인코딩을 진행해 봅시다!

https://www.url-encode-decode.com/

 

URL Encode Decode - URL Percent Encoding and Decoding.

Join to access discussion forums and premium features of the site.

www.url-encode-decode.com

인코딩

자 인코딩하면 오른쪽과 같은 값이 나옵니다!

이제 넣어보도록 합시다 :D

풀이 성공

문제가 풀렸죠 ㅎㅎㅎ?!

 

그럼 26번 문제 풀이를 마치도록하겠습니다 :D

'CTF > Webhacking.kr' 카테고리의 다른 글

Old - 39 (score:100)  (0) 2020.02.24
Old - 38 (score:100)  (0) 2020.02.23
Old - 24 (score:100)  (0) 2020.02.13
Old - 18 (score:100)  (0) 2020.02.12
Old - 17 (score:100)  (0) 2020.02.10

Basic RCE L08

HelloMG
|2020. 2. 14. 16:56

Basic RCE L08 문제

OEP를 구하라고 하네요 :D

 

일단 Ollydbg로 올려봅시다!

PUSHAD

올려보니 PUSHAD가 존재합니다! 패킹이 되어 있다는 소리인데..

이번에는 패킹을 디버깅으로 풀어보도록 하겠습니다 :D

 

먼저 PUSHAD는 무엇이냐!

8개의 레지스터를 스택에 쌓아줍니다!

(EAX -> ECX -> EDX -> EBX -> ESP -> EBP -> ESI -> EDI)

 

그리고 PUSHAD가 존재하면 마지막엔 반드시 POPAD가 존재한다는거 있지마세요 :D

레지스터

자 위의 레지스터를 잘 주목해보세요!

스택

지금 보이시나요?

레지스터가 들고 있던 값들이 전부 스택에 쌓아졌습니다!

ESI

1020C41 주소에서 ESI에 들어가는 주소인 101A000을 보면

Packing된 내용들이 들어가 있습니다!

EDI

1020C4C에 보면

EDI값을 스택에 쌓는데 보면 아무런 값이 없습니다 !

앞으로 이공간에 복호화된 값이 들어가게 될것입니다 ㅎㅎㅎ

 

자 그럼 트레이싱 기능을 이용해서 계속 분석해보도록 하다보면..

복호화된 값

이렇게 복호화된 값들이 들어가게 됩니다!

LoadLibraryA

그러다 LodaLibraryA를 통해서 Kernel32.dll을 로드합니다.

이것이 의미하는 바는 그 안에 존재하는 함수를 사용하겠다는 의미입니다.

그럼 한번 IAT를 살펴보도록 합시다!

IAT

IAT에 보니 API가 현저히 보족한거 보이실겁니다 !

즉, LodaLibraryA로 Kernel32.dll을 로드하는 이유는 GetProcAddress를 이용해서 복구하기 위해서였네요 :D

복구 루틴

이렇게 복구하는 루틴입니다!

EDI가 가지는 값을 한번 살펴볼까요 :D

EDI

보니 API의 이름을 확인할 수 있네요!

API 이름 목록을 인자로 받아 GetProcAddress를 호출하고 해당 인자를 EAX에 저장합니다.

101F008부터 EAX의 값을 저장하면서 Kernel32.dll의 IAT를 복구하고 다른 IAT도 모두 복구시킵니다!

복구된 IAT

이렇게 복구가 되면 VirtualProtect 함수를 만나게 되고 실행권한을 부여합니다!

VirtualProtect

그리고 처음에 말했듯이 PUSHAD가 존재하면 POPAD도 존재한다고 했었죠 ㅎㅎㅎ?

이렇게 POPAD를 만나면 Unpacking이 마무리된 단계입니다 :D

그리고 ESP 값을 원래대로 되돌려 줍니다!

ESP-80

그리고 JMP를 통해서 OEP로 가게됩니다!

OEP

그래서 정답은 1012475입니다 :D

 

사실상 UPX로 언패킹하면 쉽게할 수 있지만 한번쯤은 이렇게 알아보는것도 공부가 될거라 생각합니다!

여기서 꿀팁!

POPAD를 바로찾아가는 방법도 있습니다만..

또 다른문제에서 패킹문제가 존재한다면 그 방법을 통해서 분석하도록 하겠습니다!

 

그럼 8번 문제 풀이를 마치겠습니다 :D

'CTF > CodeEngn.kr' 카테고리의 다른 글

Basic RCE L10  (0) 2020.02.23
Basic RCE L09  (0) 2020.02.15
Basic RCE L07  (0) 2020.02.13
Basic RCE L06  (0) 2020.02.12
Basic RCE L05  (0) 2020.02.10

 

hint
Classic Cipher-1 문제

문제를 보니 Hint가 있습니다!

Hint가 [::-1]이라고 나와있는데 저는 한참 고민했습니다..ㅠ_ㅠ

그래서 알아보던 중 [::-1]이 Python에서 문자를 역순 시켜 주는 것이더라구요!

[::-1]

역순을 시킨 뒤 가장 많이 쓰이는 카이사르(시저) 암호 복호화를 시도해보았습니다 :D

소스코드

C언어로 짠 코드입니다!

카이사르 암호 복호화

19번째에 떡하니 flag가 보이는군요!

 

 지금까지 Classic Cipher-1 문제 풀이였습니다 :D

'CTF > HackCTF' 카테고리의 다른 글

Reversing - Welcome_REV  (0) 2020.02.24
Cryptography - Classic Cipher-2  (0) 2020.02.14
Cryptography - Smooth CipherText  (0) 2020.02.12
Cryptography - Great Binary  (0) 2020.02.10
Web - Cookie  (0) 2020.02.07

Old 24번 문제1

문제를 들어가보니 client ip와 agent 정보가 출력이 됩니다 !

소스를 볼 수 있으니 소스를 확인해보도록 합시다 :D

소스코드

소스코드를 확인해보니 ip부분에 필터링이 걸려있고

ip가 127.0.0.1이면 풀린다고하네요 :D

 

그래서 저는 어떻게 ip값을 바꿀까 생각하다가 쿠키값을 이용해서 바꿨습니다!

필터링이 걸려있기 때문에 우회를 하기 위해 다음과 같은 방법을 사용했습니다!

우회

중간중간에 필터링되는 값을 넣어 127.0.0.1을 나타낼 수 있게 만든 것입니다 :D

문제 풀이 성공

쿠키값을 넣고 다시 새로고침해주면 이렇게 문제가 풀립니다!

 

이상 24번 문제 풀이였습니다 :D

'CTF > Webhacking.kr' 카테고리의 다른 글

Old - 38 (score:100)  (0) 2020.02.23
Old - 26 (score:100)  (0) 2020.02.14
Old - 18 (score:100)  (0) 2020.02.12
Old - 17 (score:100)  (0) 2020.02.10
Old - 16 (score:100)  (0) 2020.02.09

Basic RCE L07

HelloMG
|2020. 2. 13. 19:03

Basic RCE L07 문제

문제를 보니 "CodeEngn은 어떤것으로 변경되는가?" 입니다.

조건이 컴퓨터 C 드라이브의 이름이 CodeEngn일 경우라네요!

 

그럼 일단 C드라이브의 이름을 바꿔줍시다!

(저는 처음에 C드라이브 이름 안바꾸고 했다가 한참 애먹었습니다..ㅠㅠ)

C 드라이브 이름 변경

자 변경을 시키고 Ollydbg로 열어줍니다 :D

EP

EP입니다!

처음부터 GetModuleHandleA함수를 통해 어떤 모듈의 정보를 가져오는군요 :D

https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulehandlea

 

GetModuleHandleA function (libloaderapi.h) - Win32 apps

Retrieves a module handle for the specified module. The module must have been loaded by the calling process.

docs.microsoft.com

그리고 DialogBoxParamA을 지나칠 때

다이얼로그박스가 실행이되는 것을 알 수 있습니다!

 

그리고 어떤값을 입력하라고 하는군요 :D

그래서 저는 좀 살펴보다가 밑에서 비교구문이랑 성공 및 실패 메시지박스 발견할 수 있었습니다!

비교구문

그럼 BP(BreakPoint)를 걸어주고 다이얼로그에

test라는 값을 입력해 주었습니다!

lstrcatA

그러자 입력한 test가 보이는군요!

그런데 lstrcatA가 보입니다 :D

lstrcat함수는 간략하게 설명해서 문자열을 이어붙여주는 기능을 합니다.

https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-lstrcata

 

lstrcatA function (winbase.h) - Win32 apps

Appends one string to another.Warning  Do not use.

docs.microsoft.com

lstrcatA는 취약점을 가진 함수네요!

어떤 취약점인지 이를 가지고 무엇을 할 수 있는지는 스스로 공부해보시길 바랍니다 :D

lstrcatA 2

ConcatString의 변수에 StringToAdd변수의 문자열이 붙여진걸 볼 수 있습니다!

그리고 계속실행하면 lstrcmpiA 함수가 보이네요 :D

lstrcmpiA

그러자 최종적으로 비교하는 것은

"test", "L2C-5781EqfqEngn4562-ABEX"

입니다!

 

그럼 정답이 무엇인지 짐작이 오시죠 :D?

성공

이렇게 성공했다는 메세지 박스를 받았습니다!

 

어떤 문자열의 암호화된 부분을 찾아내는 문제였네요 :D

이만 7번 문제 풀이를 마치겠습니다 !

'CTF > CodeEngn.kr' 카테고리의 다른 글

Basic RCE L09  (0) 2020.02.15
Basic RCE L08  (0) 2020.02.14
Basic RCE L06  (0) 2020.02.12
Basic RCE L05  (0) 2020.02.10
Basic RCE L04  (0) 2020.02.09

Smooth CipherText

문제를 보니 암호화가된 문자열이 보입니다 :D

보다보니 LymoADJ{t_tzwi_3vxbd0p3_vff.afy'q_wzoxpq_dp_qfz} 이부분에서

카이사르 암호화된 것일까? 라는 생각을 했지만..

HackCTF -> LymoADJ 에서 같은 c가 다른 문자열로 나옵니다.

그래서 저는 비즈네르 암호화라는 걸 직감했습니다 :D

https://ko.wikipedia.org/wiki/%EB%B9%84%EC%A6%88%EB%84%A4%EB%A5%B4_%EC%95%94%ED%98%B8

 

비즈네르 암호 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 비즈네르 암호(프랑스어: Vigenère 暗號)는 프랑스 외교관이었던 블레즈 드 비즈네르에 의하여 1586년에 발표된 암호이다. 외교관이었던 비즈네르는 26세 되던 해 로마로 발령받아 2년간 근무 하던 중 알베르티의 글을 읽고 크립토그래피에 관심을 기울이게 된다. 39세에 그는 평생 연구에 매달릴수 있을만큼 돈을 모았다고 판단하고 외교관을 그만 둔다. 알베르티의 논문을 자세히 분석하여, 이를

ko.wikipedia.org

비즈네르 암호화에 대해선 위의 사이트를 방문하여 보시길 바랍니다 :D

그래서 비즈네르 암호화를 풀어줄 사이트는 밑의 사이트입니다!

https://www.guballa.de/vigenere-solver

 

Vigenere Solver - www.guballa.de

Vigenere Solver This online tool breaks Vigenère ciphers without knowing the key. Besides the classical variant Beaufort ciphers and Autokey ciphers are supported as well. As an example you can crack the following cipher text with this tool: Altd hlbe tg l

www.guballa.de

이제 암호화된 문자열을 넣어서 돌려봅시다!

암호화

바로 나오네요 :D

그러나 Flag 부분의 문자열이 제대로 복호화가 되지 않은 것 같습니다!

복호화

그래서 복호화되지 않은 부분만 다시 돌려보겠습니다!

flag 암호화

다시 돌리니 제대로된 문자열이 나오네요 :D

flag 복호화

이렇게 Sooth CipherText 문제 풀이를 마치겠습니다!

'CTF > HackCTF' 카테고리의 다른 글

Cryptography - Classic Cipher-2  (0) 2020.02.14
Cryptography - Classic Cipher-1  (0) 2020.02.13
Cryptography - Great Binary  (0) 2020.02.10
Web - Cookie  (0) 2020.02.07
Web - 가위바위보  (0) 2020.02.03

Old 18번 문제

이번에는 SQL Injection 문제네요 ㅎㅎㅎㅎ

밑에 소스코드를 볼 수 있게 해주니 클릭해서 보도록 합시다 :D

소스코드

소스코드를 보아하니 몇개가 필터링 되어 있습니다.

(띄워쓰기, /, (, ), |, &, select, from, 0x)

그리고 보여지는 구문은

select id from chall18 where id='guest' and no=$_GET[no](입력값)

이네요 :D

 

solve의 조건은 id가 admin이여야 합니다!

쿼리 뒤에 admin's no=2라고 힌트가 대놓고 나와 있군요 ㅎㅎㅎ!

 

그래서 저는 밑의 공식을 이용하여 공격을 해보았습니다!

"False and False or True"

공격 형태

id='guest' and no=2 or no=2를 입력하여 줘야하는데

공백이 현재 필터링 되어 있으므로 공백은 url 인코딩문자로 %0a 우회할 수 있습니다ㅎㅎㅎㅎ

문제 풀이

이렇게 18번 문제를 해결해보았습니다 :D

'CTF > Webhacking.kr' 카테고리의 다른 글

Old - 26 (score:100)  (0) 2020.02.14
Old - 24 (score:100)  (0) 2020.02.13
Old - 17 (score:100)  (0) 2020.02.10
Old - 16 (score:100)  (0) 2020.02.09
Old - 14 (score:100)  (0) 2020.02.07