no image
Web - 가위바위보
문제를 들어가면 가위바위보가 있군요! (원래 test랑 오른쪽 위 사진이 저게 default가 아닙니다.. 제가 미리풀어본다고 바꾼게 원래대로 안돌아가더라구요 ㅠㅠ) 게임을 해보니까.. 별일은 일어나지 않았습니다 ㅎㅎㅎ 오른쪽 위 구석탱이에 설정버튼 보이시나요 :D ? 저기를 들어가봅시다! 들어가니 이름과 프로필 이미지를 바꿀 수 있습니다! 그리고 이미지 밑에 파일 선택 버튼이 있는데 이미지 파일이 아닌 다른 파일은 막아져있는걸 볼 수 있었습니다. 그래서 전 여기서 느낌이 왔습니다 :D 파일 업로드를 우회해서 flag를 얻으면 되겠구나 했죠 ! 그래서 가장 대표적인 확장자 우회를 해봤지만 먹히지 않더라구요.. : ( 그래서 저는 HxD를 통해서 파일을 조작해보았습니다! img의 파일 헤더는 "FF D8 ..
2020.02.03
no image
Web - Time
문제로 들어가면 php 문이 나옵니다! 3가지 조건이 있네요 :D 1. 시간은 숫자만 됩니다! 2. 시간이 너무 짧습니다! 3. 시간이 너무 깁니다! 그럼 위의 시간을 계산해 봅시다! 60*60*24*30*2 = 5,184,000‬ 60*60*24*30*3 = 7,776,000‬ 사이의 시간을 넣으면 풀릴까 해서 넣어봤습니다 ! 5184001을 넣으면 어떻게 될까요? 11번째 줄 sleep 함수로 인해 5184001초를 기다려야 flag가 출력이 됩니다 : ( 그 때까지 기다리기엔 무리가 있겠죠..? 그럼 어떻게 풀어 나가야할까요 ㅇㅅㅇ? 4번줄에 is_numeric 함수가 보이시나요 :D is_numeric 함수는 변수가 숫자인지 아닌지를 판단을 해주는 함수입니다! https://www.php.net/..
2020.01.31
no image
Web - 마법봉
문제를 들어가면 "해쉬에 마법을 부여하면 그 어떤 것도 뚫릴지어니...."라는 말과 그림이 나옵니다. (그림이 어째 조금.. =_=) 일단 소스 코드를 볼 수 있는 버튼이 있으니 소스를 보도록 합시다! 소스코드는 간단합니다! 전에 입력하는 란과 "240610708"을 md5로 해쉬화한거랑 일치하면 flag를 출력하네요 ! 참.. 난감한 문제라고 생각할 수 있겠지만 문제의 화면에서 적절한 힌트를 주고 있는거 아시나요 :D 그것은 바로 매직해시 입니다! 간단히 알아보면 일부 프로그래밍 언어에서는 자동 캐스팅을 지원하는데 "0eXXXXX" 형식으로 지원을 할 경우 모두 부동 소수점 처리가 되어 "==" 연산자에서는 0으로 처리가 된다네요 :D 자세한 사항은 밑의 사이트를 보시고 공부하시면 될 것 같습니다! h..
2020.01.23
no image
Web - Read File
문제로 들어오니 구글과 같은 모습의 홈페이지가 나옵니다! 여기서 의심해봐야할 부분은 url에 command라는 변수에 google url이 들어가는거 보이시나요 :D 그리고 File 이름은 flag.php 라고 명시가 되어 있네요! 그럼 command에 flag.php를 넣어줘볼까요 !!? google의 모습은 사라지고 Read File, File is flag.php라는 문구만 남아 있네요 :( 혹시나 싶어서 다른 값도 넣어봤습니다! 똑같은 화면이 나오는 군요 ! 그럼 혹시 필터링을 하는건 아닐까 싶네요 :D flag.php를 필터링한다고 생각하고 넣어봤는데 이것도 아닌가봅니다. 그럼 flag를 필터링하는지 보겠습니다 :D flag가 필터링이 되어있었네요 :D flag가 필터링이 되어 있기 때문에 fl..
2020.01.21
no image
Web - Guess me
들어가면 php코드와 어떤 값을 제출하는게 보입니다. 위의 코드를 해석해보면 filename 변수에 "secret.txt' 문자열이 들어가있고 extract 함수로 GET메소드를 사용합니다. guess는 우리가 입력한 값이 들어가게 되고 secretcode는 filename 변수의 값인 secret.txt에서 내용을 읽어옵니다. 그래서 guess와 secretcode가 같다면 flag를 나타낸다는 것이군요 :D 여기서 주의 깊게 보셔야할 것은 extract 함수입니다! extract 함수에는 취약점이 있는데요 :D &_GET 또는 $_POST로 인자를 전달 시에 파라미터의 값을 초기화할 수 있습니다. 그렇다면 이 문제는 어떻게 풀 수 있을까요? extract 함수를 이용해서 filename의 인자를 전달..
2020.01.20
no image
Web - 보물
문제로 들어가보면 다음과같이 보물상자와 3개의 버튼이 나옵니다 :D 일단 아무 Page 1 버튼을 클릭해봅시다! 클릭하니 알 수 없는 문자열이 출력이 되네요. 그리고 page라는 인자에 페이지 번호의 값이 들어가는게 보입니다! 다른 페이지 번호를 들어가도 알 수 없는 문자열만 보이네요 : ( 문제를 읽어보면 페이지 숫자 중에 보물을 숨겨놨다고 합니다! 즉, 페이지 숫자는 몇개인지 정확히 모르지만 엄청많고 그중 하나가 보물 즉, flag란 소리겠죠? :D 그러나 노가다로 하기엔 너무나 힘드니까.. url페이지의 내용을 출력해주는 간단한 프로그래밍을 해봅시다! 역시 파이썬이 요즘 대세죠! 코드를 간단히 설명하겠습니다 :D 각각 변수의 의미는 다음과 같습니다. url = 문제 url url_re = url 초..
2020.01.09
no image
Web - Button
문제로 들어가 봅시다! 버튼으로 하여금 플래그를 출력하게 해달라네요 :D 일단 한번 눌러보도록 합시다! 그런데 눌러보니 아무런 동작을 하지 않네요 : ( 소스코드를 확인해볼까요? 소스코드를 보니 버튼을 눌러도 별 동작을 하지않는걸 확인했습니다. 그런데 가만히 보면 button의 value가 button인거 보이시나요? 문제에서 버튼으로 플래그를 출력하게 해달라고 했으니 value를 flag를 바꿔서 출력한다는 느낌을 받을 수 있었습니다 :D F12를 누른 후 value를 더블클릭하면 간단히 수정할 수 있습니다! 그럼 버튼 이름이 flag로 수정된 것을 확인할 수 있었고 누르면 다음과 같이 flag를 얻을 수 있었습니다 :D
2020.01.09
no image
Web - Hidden
문제로 들어가 봅시다! "5번 파일에 플래그가 있다악!!!!!!!!!!!!!" 이라는 말과 4개의 버튼이 존재합니다. 일단 버튼 하나를 눌러볼까요? :D Nop 이라는 메세지 박스가 출력이 되는 군요! 그런데 url에 보면 id라는 인자가 1로 넘어가는게 보이시나요? :D 버튼의 숫자가 각각 url의 id의 인자역할을 한다는 걸 알 수 있습니다. 그럼 5번 파일에 플래그가 존재한다고 하였으니 url에 id의 인자 값을 5로 넣고 접속하면 되겠죠? :D 이렇게 간단하게 문제를 해결할 수 있었습니다!
2020.01.09

Web - 가위바위보

HelloMG
|2020. 2. 3. 20:06

가위바위보 문제

문제를 들어가면 가위바위보가 있군요!

(원래 test랑 오른쪽 위 사진이 저게 default가 아닙니다.. 제가 미리풀어본다고 바꾼게 원래대로 안돌아가더라구요 ㅠㅠ)

게임을 해보니까.. 별일은 일어나지 않았습니다 ㅎㅎㅎ

 

오른쪽 위 구석탱이에 설정버튼 보이시나요 :D ?

저기를 들어가봅시다!

설정 페이지

들어가니 이름과 프로필 이미지를 바꿀 수 있습니다!

그리고 이미지 밑에 파일 선택 버튼이 있는데 이미지 파일이 아닌 다른 파일은 막아져있는걸 볼 수 있었습니다.

이미지 파일이 아닙니다.

그래서 전 여기서 느낌이 왔습니다 :D

파일 업로드를 우회해서 flag를 얻으면 되겠구나 했죠 !

그래서 가장 대표적인 확장자 우회를 해봤지만 먹히지 않더라구요.. : (

HxD

그래서 저는 HxD를 통해서 파일을 조작해보았습니다!

img의 파일 헤더는 "FF D8 FF"이더라구요 :D

그래서 저는 밑에처럼 조작을 해보았습니다!

메모리 변경

그리고 업로드를 시켜봅시다!

변경 성공

변경이 되었다고 하네요 :D

설정페이지의 url 뒤에 setting.php가 보이실겁니다!

저는 제가 업로드 시킨 test.php를 들어가보았습니다!

test.php

"무언가 일어났습니다." 라는 문구가 출력이 되는군요?

일단 실행은 되긴 되는 모양인가 봅니다!

실행이 된다는것은 웹셸도 사용이 된다는 것이겠죠 :D ?

웹셸 제작

이렇게 간단한 웹셸코드를 넣은 후 업로드 시켜서 다시 들어가봅시다!

test.php

흠 똑같은 화면이 뜨는군요?

왜 저렇게 뜨지라는 생각을 한참했습니다.. : (

그래서 홈페이지의 소스코드를 보니까 경로가 다르더라구요!

사진 경로

그래서 경로를 다시 수정해서 들어가보았습니다 !

avatars/test.php

그래도 말썽이네요..?

그래서 다시 생각한게 이름을 test.php로 바꿔서 파일이름과 똑같은 형태의 url을 만들어줘봤습니다!

test.php 변경
flag 획득

이름을 파일이름처럼 변경시켜 일치시킨 후에 유효한 url로 만들어버리는거였네요 :D

 

이렇게 파일 업로드 우회 문제였네요 :D

좋은 경험되셨나요?

다음 문제에서 뵙도록하겠습니다 :D

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

Cryptography - Great Binary  (0) 2020.02.10
Web - Cookie  (0) 2020.02.07
Web - Time  (0) 2020.01.31
Web - 마법봉  (0) 2020.01.23
Web - Read File  (0) 2020.01.21

Web - Time

HelloMG
|2020. 1. 31. 15:06

Time 문제

문제로 들어가면 php 문이 나옵니다!

 

3가지 조건이 있네요 :D

1. 시간은 숫자만 됩니다!

2. 시간이 너무 짧습니다!

3. 시간이 너무 깁니다!

 

그럼 위의 시간을 계산해 봅시다!

60*60*24*30*2 = 5,184,000‬

60*60*24*30*3 = 7,776,000‬

 

사이의 시간을 넣으면 풀릴까 해서 넣어봤습니다 !

 

5184001

5184001을 넣으면 어떻게 될까요?

11번째 줄 sleep 함수로 인해 5184001초를 기다려야 flag가 출력이 됩니다 : (

그 때까지 기다리기엔 무리가 있겠죠..?

그럼 어떻게 풀어 나가야할까요 ㅇㅅㅇ?

 

4번줄is_numeric 함수가 보이시나요 :D

is_numeric 함수는 변수가 숫자인지 아닌지를 판단을 해주는 함수입니다!

https://www.php.net/manual/de/function.is-numeric.php

 

PHP: is_numeric - Manual

If you want detect integer of float values, which presents as pure int or float, and presents as string values, use this functions: PHP_INT_MAX) {        return false;    }    return is_float($val) ? false : preg_match('~^((?:\+|-)?[0-9]+)$~', $val);}funct

www.php.net

자세한건 php 정식 사이트에서 보시기 바랍니다 :D

 

위의 사이트에서 보면

지수형태도 True로 반환되는거 보이시나요 :D

 

그리고 11번째 줄에서 sleep 함수 안에 int로 형변환되는 것을 본다면 "지수형태로 보내면 되겠구나!" 생각이 들겠죠?

왜냐하면 int형으로 인해서 뒤의 소수점이 다날라가버리기 때문이죠 :D

 

그럼 어떻게 보내줘야 할까요!

"5.184001E+6"

을 입력하게되면 flag가 5초후에 등장하게 될겁니다 :D

왜냐하면 6,8번 째 줄은 지수형으로 나타내서 5184001이 되어 통과하게 되고

11번째 줄에선 int 형변환으로 인해 5.184001E+6 => 5로 변환되기 때문이죠 :D

 

그럼 다음 문제에서 뵙도록 하겠습니다!

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

Web - Cookie  (0) 2020.02.07
Web - 가위바위보  (0) 2020.02.03
Web - 마법봉  (0) 2020.01.23
Web - Read File  (0) 2020.01.21
Web - Guess me  (0) 2020.01.20

Web - 마법봉

HelloMG
|2020. 1. 23. 02:23

마법봉 문제

문제를 들어가면 "해쉬에 마법을 부여하면 그 어떤 것도 뚫릴지어니...."라는 말과 그림이 나옵니다.

(그림이 어째 조금.. =_=)

일단 소스 코드를 볼 수 있는 버튼이 있으니 소스를 보도록 합시다!

소스코드

소스코드는 간단합니다!

전에 입력하는 란과 "240610708"을 md5로 해쉬화한거랑 일치하면 flag를 출력하네요 !

참.. 난감한 문제라고 생각할 수 있겠지만 문제의 화면에서 적절한 힌트를 주고 있는거 아시나요 :D

 

그것은 바로 매직해시 입니다!

간단히 알아보면 일부 프로그래밍 언어에서는 자동 캐스팅을 지원하는데

"0eXXXXX" 형식으로 지원을 할 경우 모두 부동 소수점 처리가 되어

"==" 연산자에서는 0으로 처리가 된다네요 :D

자세한 사항은 밑의 사이트를 보시고 공부하시면 될 것 같습니다!

https://www.whitehatsec.com/blog/magic-hashes/

 

Magic Hashes | WhiteHat Security

For more than the last decade, PHP programmers have been wrestling with the equals-equals (==) operator.

www.whitehatsec.com

자 그럼 "240610708"를 md5로 해시화하게 되면 "0e462097431906509019562988736854"이됩니다!

그럼 sha1로 해쉬화 했을 때 "0eXXXX"로 시작하는 것을 찾게되면

"=="연산자를 사용하였기 때문에 두개다 0으로 처리되어서 flag가 출력이 되겠죠 :D

위의 사이트에보면 "10932435112"을 sha1로 해쉬화 했을 때

"0e07766915004133176347055865026311692244"이 나온답니다!

 

그럼 이럴땐 어떻게 대처할 수 있을까요 ?!

"==" 대신 "==="를 사용해주면 한방에 해결이 됩니다!

그럼 이만 다음 문제에서 뵐게요~! :D

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

Web - 가위바위보  (0) 2020.02.03
Web - Time  (0) 2020.01.31
Web - Read File  (0) 2020.01.21
Web - Guess me  (0) 2020.01.20
Web - 보물  (0) 2020.01.09

Web - Read File

HelloMG
|2020. 1. 21. 15:10

Read File 문제

문제로 들어오니 구글과 같은 모습의 홈페이지가 나옵니다!

 

여기서 의심해봐야할 부분은 url에 command라는 변수에 google url이 들어가는거 보이시나요 :D

그리고 File 이름은 flag.php 라고 명시가 되어 있네요!

그럼 command에 flag.php를 넣어줘볼까요 !!?

command=flag.php

google의 모습은 사라지고 Read File, File is flag.php라는 문구만 남아 있네요 :(

혹시나 싶어서 다른 값도 넣어봤습니다!

command=f

똑같은 화면이 나오는 군요 !

그럼 혹시 필터링을 하는건 아닐까 싶네요 :D

flaflag.phpg.php

flag.php를 필터링한다고 생각하고 넣어봤는데 이것도 아닌가봅니다.

그럼 flag를 필터링하는지 보겠습니다 :D

flaflagg.php

flag가 필터링이 되어있었네요 :D

flag가 필터링이 되어 있기 때문에

flaflagg.php -> flag.php

됩니다!

 

필터링을 우회하는 문제라서 생각보다 간단히 풀었네요!

그럼 다음문제에서 뵙도록 할게요~~ :D

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

Web - Time  (0) 2020.01.31
Web - 마법봉  (0) 2020.01.23
Web - Guess me  (0) 2020.01.20
Web - 보물  (0) 2020.01.09
Web - Button  (0) 2020.01.09

Web - Guess me

HelloMG
|2020. 1. 20. 18:23

Guess me 문제

들어가면 php코드와 어떤 값을 제출하는게 보입니다.

위의 코드를 해석해보면

filename 변수에 "secret.txt' 문자열이 들어가있고 extract 함수로 GET메소드를 사용합니다.

guess는 우리가 입력한 값이 들어가게 되고

secretcode는 filename 변수의 값인 secret.txt에서 내용을 읽어옵니다.

그래서 guess와 secretcode가 같다면 flag를 나타낸다는 것이군요 :D

 

여기서 주의 깊게 보셔야할 것은 extract 함수입니다!

extract 함수에는 취약점이 있는데요 :D

&_GET 또는 $_POST로 인자를 전달 시에 파라미터의 값을 초기화할 수 있습니다.

그렇다면 이 문제는 어떻게 풀 수 있을까요?

 

문제풀이

extract 함수를 이용해서 filename의 인자를 전달하고 있기 때문에 취약점을 이용하여

filename의 값을 초기화 시킬 수 있습니다!

[문제풀이] 그림처럼 넣으면 filename은 abcd 값으로 초기화되고

파일이 존재하지 않기 secretcode에는 아무런 값이 들어가지 않습니다!

즉, filename과 guess는 둘다 아무런 값을 가지지 않기 때문에

flag가 뿅! 하고 나올거예요 :D

 

그럼 저 함수는 무조건적으로 취약한걸 까요? 당연히 조건이 있겠죠 :D

1) 변수가 선언한 뒤에 extract 함수가 오면 취약하다.

2) 내부변수의 이름을 알아야 한다.

 

그럼 안전하게 쓰여질려면 어떻게 해야할까요?

1) extract 함수로 인해서 값이 덮여진다면 다시 다른 값으로 덮어준다.

2) EXTR_SKIP 옵션을 사용해 준다.

 

1번은 다시 덮어다주면 사용자가 변수를 자기마음대로 줘도 값이 설정값으로 돌아가겠죠 :D

2번은 충돌이 있을 경우 덮어쓰지 않게 하는 옵션입니다.

자세한 사항은 php 정식홈페이지에서 확인하시면 될 것 같네요 !

https://www.php.net/manual/en/function.extract.php

 

PHP: extract - Manual

[New Version]This function is very useful for filtering complicated array structure.Also, Some integer bitmasks and invalid UTF-8 sequence detection are available.Code: $_GET,            INPUT_POST => $_POST,            INPUT_COOKIE => $_COOKIE,           

www.php.net

제 포스터를 봐주셔셔 감사하고 공부하신다고 수고 많으셨어요 :D

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

Web - 마법봉  (0) 2020.01.23
Web - Read File  (0) 2020.01.21
Web - 보물  (0) 2020.01.09
Web - Button  (0) 2020.01.09
Web - Hidden  (0) 2020.01.09

Web - 보물

HelloMG
|2020. 1. 9. 00:46

문제로 들어가보면 다음과같이 보물상자와 3개의 버튼이 나옵니다 :D

보물 문제

일단 아무 Page 1 버튼을 클릭해봅시다!

Page 1 버튼 클릭

클릭하니 알 수 없는 문자열이 출력이 되네요.

그리고 page라는 인자에 페이지 번호의 값이 들어가는게 보입니다!

다른 페이지 번호를 들어가도 알 수 없는 문자열만 보이네요 : (

 

문제를 읽어보면 페이지 숫자 중에 보물을 숨겨놨다고 합니다!

즉, 페이지 숫자는 몇개인지 정확히 모르지만 엄청많고 그중 하나가 보물 즉, flag란 소리겠죠? :D

그러나 노가다로 하기엔 너무나 힘드니까.. url페이지의 내용을 출력해주는 간단한 프로그래밍을 해봅시다!

소스코드

역시 파이썬이 요즘 대세죠!

코드를 간단히 설명하겠습니다 :D

각각 변수의 의미는 다음과 같습니다.

url = 문제 url

url_re = url 초기화

number = page 인자

 

while에 조건을 1로 주어서 계속 무한반복을 시키고 들어갑니다.

이후 url에 number 변수의 값을 스트링형으로 변환 후 더하고 response의 문자열에

'HackCTF'라는 문자열이 존재하면 출력하고 아니면 number값을 계속 증가시키고 url의 변수를 초기화 시킵니다 :D

 

그리고 좀 기다려보다보면.. flag가 쨘! 하고 나타나게됩니다 :D

보물 문제 flag

 

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

Web - Read File  (0) 2020.01.21
Web - Guess me  (0) 2020.01.20
Web - Button  (0) 2020.01.09
Web - Hidden  (0) 2020.01.09
Web - /  (0) 2020.01.09

Web - Button

HelloMG
|2020. 1. 9. 00:25

문제로 들어가 봅시다!

Button 문제

버튼으로 하여금 플래그를 출력하게 해달라네요 :D

일단 한번 눌러보도록 합시다!

그런데 눌러보니 아무런 동작을 하지 않네요 : (

소스코드를 확인해볼까요?

소스코드

소스코드를 보니 버튼을 눌러도 별 동작을 하지않는걸 확인했습니다.

그런데 가만히 보면 button의 value가 button인거 보이시나요?

문제에서 버튼으로 플래그를 출력하게 해달라고 했으니 value를 flag를 바꿔서

출력한다는 느낌을 받을 수 있었습니다 :D

value 수정

F12를 누른 후 value를 더블클릭하면 간단히 수정할 수 있습니다!

버튼 이름 변경

그럼 버튼 이름이 flag로 수정된 것을 확인할 수 있었고 누르면 다음과 같이 flag를 얻을 수 있었습니다 :D

Button 문제 flag

 

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

Web - Read File  (0) 2020.01.21
Web - Guess me  (0) 2020.01.20
Web - 보물  (0) 2020.01.09
Web - Hidden  (0) 2020.01.09
Web - /  (0) 2020.01.09

Web - Hidden

HelloMG
|2020. 1. 9. 00:16

문제로 들어가 봅시다!

Hidden 문제

"5번 파일에 플래그가 있다악!!!!!!!!!!!!!" 이라는 말과 4개의 버튼이 존재합니다.

일단 버튼 하나를 눌러볼까요? :D

1번 버튼 클릭

Nop 이라는 메세지 박스가 출력이 되는 군요!

그런데 url에 보면 id라는 인자가 1로 넘어가는게 보이시나요? :D

버튼의 숫자가 각각 url의 id의 인자역할을 한다는 걸 알 수 있습니다.

그럼 5번 파일에 플래그가 존재한다고 하였으니 url에 id의 인자 값을 5로 넣고 접속하면 되겠죠? :D

 

Hidden 문제 flag

이렇게 간단하게 문제를 해결할 수 있었습니다!

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

Web - Read File  (0) 2020.01.21
Web - Guess me  (0) 2020.01.20
Web - 보물  (0) 2020.01.09
Web - Button  (0) 2020.01.09
Web - /  (0) 2020.01.09