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
no image
Basic RCE L06
문제를 보니 Unpack을 한 후 Serial을 찾으라고 되어 있군요 :D Unpack을 하란말은 Packing이 되어 있다는 말이겠죠 ㅎㅎㅎㅎ 다운받으시고 OllyDbg로 열어보면 PUSHAD로 시작하는 것을 보아 Packing이 되어 있는것을 확인할 수 있습니다. (Unpack 하는 과정은 "Basic RCE L05" 포스팅에 나와있습니다 :D) OEP가 보입니다. OEP는 Original Entry Point의 약자로 Packing이 되어 있을 때 기존의 EP를 의미합니다. 즉 Unpack하여 나온 프로그램의 EP가 OEP가 되겠군요 :D 다음 시리얼을 찾아야하는데 쉽게 찾는 방법 말씀드렸죠 ㅎㅎㅎ? [Search for] - [All referenced text strings]을 이용하여 문자열을..
2020.02.12
no image
Cryptography - Great Binary
파일을 다운받아서 열어보았습니다 :D Binary로 구성되어 있네요! 그래서 Binary를 String으로 바꿔주는 사이트를 이용했습니다 :D 참.. 쉽죠잉 :D ?
2020.02.10
no image
Old - 17 (score:100)
문제를 보니 입력칸이 덩그라니 있더라구요! 소스코드를 봅시다 :D 음... 아주아주 긴 식과 함께 만일 이걸 맞추면 답을 10으로 나눈 어떤 페이지로 넘어간다네요..? [F12]를 이용해서 전부 복사한 다음 계산을 했습니다! 그리고 나온 값을 입력하니.. 풀렸네요...????? 음....? =_= 이만 17번 풀이였습니다..!
2020.02.10
no image
Basic RCE L05
프로그램의 등록키는 무엇인가 입니다! Ollydbg로 올려보겠습니다 :D 처음부터 PUSHAD 명령어가 보입니다. 생소한 시작이네요.. PUSHAD 명령어로 시작한다는 것은 현재 프로그램이 Packing 되어 있다는 것을 의미합니다 :D PEiD라는 툴이 있는데 이는 프로그램의 상태를 보여줍니다! "UPX 0.89.6 ~~ "로 시작되어 있는거 보이시나요 :D 그리고 EP Section이 현재 UPX1으로 나타납니다! 이는 UPX Packer로 Packing 되어 있다는 얘기죠! 블로깅 전에는 Google을 이용하여 스스로 공부하시길 바랍니다 :D 아주 잘 나와있어용 ! https://github.com/upx/upx/releases/tag/v3.94 upx/upx UPX - the Ultimate Pa..
2020.02.10
no image
Old - 16 (score:100)
문제로 들어가보니 달랑 저거만 있네요..?! 소스코드를 봅시다 :D 소스코드를 자세히 보니.. mv 함수 안에 여러개의 조건이 있습니다. kk(star.~) 별을 생성한다. if(cd==100) star.~ cd가 d(100)이면 오른쪽으로 이동한다. if(cd==97) star.~ cd가 a(97)이면 왼쪽으로 이동한다. if(cd==119) star.~ cd가 w(119)이면 위쪽으로 이동한다. if(cd==115) star.~ cd가 s(115)이면 아래쪽으로 이동한다. if(cd==124) location.href=String.from ~ cd가 |(124)이면 특정페이지로 이동한다. 실제로 d, a, w, s를 누르니 방향대로 별이 이동하는걸 확인할 수 있었습니다 :D 자세히 보시면 cd가 12..
2020.02.09
no image
Basic RCE L04
먼저 문제를 봅시다! 디버거를 탐지하는 함수의 이름을 찾으라네요 :D EP(Entry Point) 입니다! 그리고 도스 프로그램이 켜지네요 :D [F8]을 누르면서 계속해서 내려가 봅시다! 계속해서 내려가다보니 빨간칸으로 표시 되어있는 곳에서 갑자기 "디버깅 당함"이라는 문자열이 출력되기 시작합니다. 그리고 더이상 분석이 안되더군요! 그래서 저 지점을 기억한 후 [Ctrl]+[F2]를 누르고 다시 시작해서 저 함수로 들어가 봅시다 :D 함수를 분석해보니 Sleep 함수와 IsDebuggerPresent 함수가 보입니다. 계속가다 401074 주소의 함수에서 "디버깅 당함"이라는 문자열이 출력됩니다. 그래서 저기 함수를 분석해보니 특별히 디버깅을 탐지하는 듯한 로직은 보이지 않습니다 : ( 계속해서 디버깅..
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

Basic RCE L06

HelloMG
|2020. 2. 12. 20:56

Basic RCE L06 문제

문제를 보니 Unpack을 한 후 Serial을 찾으라고 되어 있군요 :D

Unpack을 하란말은 Packing이 되어 있다는 말이겠죠 ㅎㅎㅎㅎ

 

다운받으시고 OllyDbg로 열어보면 PUSHAD로 시작하는 것을 보아 Packing이 되어 있는것을 확인할 수 있습니다.

(Unpack 하는 과정은 "Basic RCE L05" 포스팅에 나와있습니다 :D)

OEP

OEP가 보입니다.

OEP는 Original Entry Point의 약자로 Packing이 되어 있을 때 기존의 EP를 의미합니다.

즉 Unpack하여 나온 프로그램의 EP가 OEP가 되겠군요 :D

 

다음 시리얼을 찾아야하는데 쉽게 찾는 방법 말씀드렸죠 ㅎㅎㅎ?

[Search for] - [All referenced text strings]을 이용하여 문자열을 찾아보면 밑의 부분에서

시리얼 같아 보이는것을 찾을 수 있었습니다!

Serial

시리얼을 비교하는 부분에 브레이크포인트를 걸어준 후 [F9]를 눌러서 실행시키고

시리얼을 입력할 때 입력을 하여 줍니다!

You got it :)

그리고 계속해서 [F9]를 눌러 실행시키면

"You got it :)"

이라는 메시지박스가 실행이 되는군요 ㅎㅎㅎ!

 

그럼 6번 문제 풀이 포스팅을 마치도록 하겠습니다 :D

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

Basic RCE L08  (0) 2020.02.14
Basic RCE L07  (0) 2020.02.13
Basic RCE L05  (0) 2020.02.10
Basic RCE L04  (0) 2020.02.09
Basic RCE L03  (0) 2020.02.07

파일을 다운받아서 열어보았습니다 :D

Binary

Binary로 구성되어 있네요!

그래서 Binary를 String으로 바꿔주는 사이트를 이용했습니다 :D

Binary to String

참.. 쉽죠잉 :D ?

 

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

Cryptography - Classic Cipher-1  (0) 2020.02.13
Cryptography - Smooth CipherText  (0) 2020.02.12
Web - Cookie  (0) 2020.02.07
Web - 가위바위보  (0) 2020.02.03
Web - Time  (0) 2020.01.31

Old 17번 문제

문제를 보니 입력칸이 덩그라니 있더라구요!

소스코드를 봅시다 :D

소스코드

음... 아주아주 긴 식과 함께 만일 이걸 맞추면 답을 10으로 나눈 어떤 페이지로 넘어간다네요..?

F12

[F12]를 이용해서 전부 복사한 다음 계산을 했습니다!

그리고 나온 값을 입력하니..

정답

풀렸네요...?????

음....? =_=

 

이만 17번 풀이였습니다..!

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

Old - 24 (score:100)  (0) 2020.02.13
Old - 18 (score:100)  (0) 2020.02.12
Old - 16 (score:100)  (0) 2020.02.09
Old - 14 (score:100)  (0) 2020.02.07
Old - 06 (score:100)  (0) 2020.02.03

Basic RCE L05

HelloMG
|2020. 2. 10. 17:39

Basic RCE L05 문제

프로그램의 등록키는 무엇인가 입니다!

Ollydbg로 올려보겠습니다 :D

PUSHAD

처음부터 PUSHAD 명령어가 보입니다.

생소한 시작이네요..

 

PUSHAD 명령어로 시작한다는 것은 현재 프로그램이 Packing 되어 있다는 것을 의미합니다 :D

PEiD라는 툴이 있는데 이는 프로그램의 상태를 보여줍니다!

PEiD_v0.95.zip
0.42MB
PEiD

"UPX 0.89.6 ~~ "로 시작되어 있는거 보이시나요 :D

그리고 EP Section이 현재 UPX1으로 나타납니다!

이는 UPX Packer로 Packing 되어 있다는 얘기죠!

 


블로깅 전에는 Google을 이용하여 스스로 공부하시길 바랍니다 :D

아주 잘 나와있어용 !


 

https://github.com/upx/upx/releases/tag/v3.94

 

upx/upx

UPX - the Ultimate Packer for eXecutables. Contribute to upx/upx development by creating an account on GitHub.

github.com

명령프롬프트로 upx 프로그램이 존재하는 경로까지 이동해줍시다.

그리고 "upx.exe"를 입력하면 옵션을 볼 수 있습니다 :D

upx.exe

저희는 unpacking 해줘야 하기 때문에

"upx.exe -d 프로그램이름"

이용해줍니다!

 

+ 언팩킹하실 때 권한이 없다고 뜨신다면, 05.exe 프로그램이 동작 중인지 확인하시기 바랍니다 :D

unpacking

unpacking이 되었다면 PEiD로 확인해봅시다 :D

Unpacking 후 PEiD

쨘! Borland Delphi 4.0 -5.0 로 바뀌었죠 :D ?

그리고 EP Section 또한 Code로 변경되었습니다!

이제 순조롭게 분석을 시작해보도록 합시다 :D

EP

EP입니다. 빠르고 쉽게 분석하기 위해 앞서 알게된

[Search for] - [All referenced text strings] 옵션을 이용해봅시다 :D

[Search for] - [All referenced text strings]

내려가 보니 시리얼로 보이는 부분과 성공, 실패 시 출력되는 문구같은 곳을 발견할 수 있었습니다 :D

Point

그래서 실행시켜보니 프로그램이 실행이되고 유저 이름과 시리얼 번호를 적는 칸이 존재하더군요 !

아무값이나 시도해보았는데 자꾸 실패가 됩니다 : (

 

그래서 분석결과 표시된 CALL 함수에서 확인 후 JNZ에서 넘어가게 됩니다 !

그럼 CALL 함수로 들어가봅시다!

CALL 분석

CALL 내부로 들어가니 어떤 두개의 값을 비교합니다 !

제가 입력한 값과 "Unregistered..." 비교값인 "Registered User"을 비교하는군요 :D

Registered User

그리고 마저실행하니 예상대로 실패 메시지 박스가 실행됩니다.

실패

그래서 "Unregistered..." -> "Registered User"로 변경을 하였습니다.

그런데 또 무언가를 비교하는군요 ?

앞에 이름을 비교하는것처럼 똑같은 방식으로 시리얼을 비교하고 있습니다 :D

Serial Number

그럼 ASCII로 나타나있는 저 시리얼 번호가 진짜 번호겠죠 :D ?

입력해봅시다!

성공

이렇게 간단히 찾을 수 있었습니다 :D

 

이번 문제에서는 Packing부분을 알아야 풀 수 있는 문제가 아니었나 생각이 듭니다 :D

 

여기서 중요한 것은 Packing이 되어 있다고 해서 분석을 못하는 것은 아닙니다!

Packing되어있는 부분을 진행시키다 보면 OEP를 마주하게 되고

그때부터는 Unpacking되어 있는 것처럼 분석이 가능하니까요 :D

그러나 편의상 upx 프로그램을 이용하여 언패킹해서 문제를 풀어보았습니다!

 

반드시 Packing 되어 있는 상태에서 직접 분석 해보시기를 바랍니다 :D

또 하나의 공부로써 도움이 많이 되걸랑요 >_<

 

그럼 5번문제 풀이를 마치겠습니다!

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

Basic RCE L07  (0) 2020.02.13
Basic RCE L06  (0) 2020.02.12
Basic RCE L04  (0) 2020.02.09
Basic RCE L03  (0) 2020.02.07
Basic RCE L02  (0) 2020.02.03

Old 16번 문제

문제로 들어가보니 달랑 저거만 있네요..?!

소스코드를 봅시다 :D

 

소스코드

소스코드를 자세히 보니..

mv 함수 안에 여러개의 조건이 있습니다.

kk(star.~) 별을 생성한다.
if(cd==100) star.~ cd가 d(100)이면 오른쪽으로 이동한다.
if(cd==97) star.~ cd가 a(97)이면 왼쪽으로 이동한다.
if(cd==119) star.~ cd가 w(119)이면 위쪽으로 이동한다.
if(cd==115) star.~ cd가 s(115)이면 아래쪽으로 이동한다.
if(cd==124) location.href=String.from ~ cd가 |(124)이면 특정페이지로 이동한다.

실제로 d, a, w, s를 누르니 방향대로 별이 이동하는걸 확인할 수 있었습니다 :D

별 이동

자세히 보시면 cd가 124일 경우 특정페이지로 이동하고 주석처리로 "do it!"이 있는거 보이시나요 :D ?

그래서 |(파이프)를 누르니 문제가 풀렸습니다!

문제 해결

너무 간단하죠 ㅎㅎㅎㅎ?!

뭔가 소스코드 해석하는 문제인가 싶네요..! :D

 

이만 16번 문제 풀이였습니다 :D

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

Old - 18 (score:100)  (0) 2020.02.12
Old - 17 (score:100)  (0) 2020.02.10
Old - 14 (score:100)  (0) 2020.02.07
Old - 06 (score:100)  (0) 2020.02.03
Old - 15 (score 50)  (0) 2020.01.31

Basic RCE L04

HelloMG
|2020. 2. 9. 17:25

Basic RCE L04 문제

먼저 문제를 봅시다!

디버거를 탐지하는 함수의 이름을 찾으라네요 :D

EP(Entry Point)

EP(Entry Point) 입니다!

그리고 도스 프로그램이 켜지네요 :D

[F8]을 누르면서 계속해서 내려가 봅시다!

디버깅 탐지

계속해서 내려가다보니 빨간칸으로 표시 되어있는 곳에서

갑자기 "디버깅 당함"이라는 문자열이 출력되기 시작합니다.

그리고 더이상 분석이 안되더군요!

 

그래서 저 지점을 기억한 후 [Ctrl]+[F2]를 누르고 다시 시작해서 저 함수로 들어가 봅시다 :D

함수 분석

함수를 분석해보니 Sleep 함수와 IsDebuggerPresent 함수가 보입니다.

계속가다 401074 주소의 함수에서 "디버깅 당함"이라는 문자열이 출력됩니다.

그래서 저기 함수를 분석해보니 특별히 디버깅을 탐지하는 듯한 로직은 보이지 않습니다 : (

 

계속해서 디버깅을 해보았습니다!

무한루프

여기서 무한루프가 걸립니다!

그이유는 뭘까요?

40108B 주소에서 JMP명령어로 처음으로 계속 돌아가게 됩니다.

 

즉, 저 구간이 계속해서 빙빙 돌아간다는 거죠!

그럼 디버깅을 탐지하는 함수는 무엇이냐인데..

IsDebuggerPresent 함수가 정답입니다!

 

IsDebuggerPresent 함수는 PEB 구조체의 디버깅 상태값을 확인하여

디버깅 시 1을 리턴하고 아니면 0을 리턴합니다 :D

https://docs.microsoft.com/en-us/windows/win32/api/debugapi/nf-debugapi-isdebuggerpresent

 

IsDebuggerPresent function (debugapi.h) - Win32 apps

Determines whether the calling process is being debugged by a user-mode debugger.

docs.microsoft.com

자세한 사항은 위의 microsoft 정식 홈페이지에서 확인하시면 됩니다 :D

1을 리턴

현재 Ollydbg로 디버깅 중이기 때문에

1을 리턴한다고 했죠 ?

 

위의 사진을 보다시피 EAX가 1로 반환된 것을 볼 수 있습니다 :D

 

 

그럼 이를 우회하는 방법은 없을까요!?

 

다양한 방법이 있습니다!

 

 

첫번째

IsdebuggerPresent 함수로 반환된 EAX 값을 0으로 강제로 변경해주면 되겠죠 :D ?

Modify EAX

바꿔주는 이유는 당연히 EAX를 0으로 바꾸면 디버깅하고 있지 않다는 뜻이니까요!

 

 

두번째

IsDebuggerPresent함수를 "MOV EAX, 0"로 변경하면 됩니다!

MOV EAX, 0

그럼 EAX값이 변하지 않겠죠 ㅎㅎㅎ?

 

 

세번째

PEB 구조체의 디버깅 상태값을 변경해 버리는 겁니다 :D

처음부터 차근차근해봅시다!

 

먼저 IsDebuggerPresent 함수로 들어가면 MOVZX 명령어가 나옵니다.

MOVZX 명령어를 실행 전까지 실행시키고

EAX 값에서 오른쪽 클릭하여 [Follow in Dump] 기능을 이용합니다 :D

Follow in Dump

그럼 메모리 부분 구조체로 이동하게 되고

빨간 칸으로 표시된 부분이 바로 디버깅 상태값입니다 :D

디버깅 상태 값 변경 전

저 부분을 클릭 후 [Space] 바를 눌러서 0으로 변경을 시켜줍시다!

디버깅 상태 값 변경 후

이후 실행하면 정상이라고 출력되는 것을 볼 수 있습니다 :D

IsDebuggerPresent 우회

 

이렇게 IsDebuggerPresent 함수에 대해 알아보았고 우회하는 방법까지 알아보았습니다 :D

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

Basic RCE L06  (0) 2020.02.12
Basic RCE L05  (0) 2020.02.10
Basic RCE L03  (0) 2020.02.07
Basic RCE L02  (0) 2020.02.03
Basic RCE L01  (0) 2020.01.31