no image
Basic RCE L03
먼저 문제를 볼까요 :D 비주얼베이직에서 스트링 비교함수 이름은 무엇인가 입니다! 다운받아서 Ollydbg로 열어봅시다 :D Ollydbg로 올렸을 때 시스템 오류가 발생하더라구요! 위의 파일 다운받아서 해당 프로그램이 있는 경로에 압축 풀어주시면 됩니다 :D 프로그램의 Entry Point입니다! Entry Point는 프로그램이 시작하는 부분을 말합니다 :D 바로 밑의 CALL함수에서 바로 프로그램을 실행시켜버리네요! 그리고 CALL함수를 들어가면 76XXXXXXXX 주소로 시작하는데 이는 DLL 구역입니다 ㅎㅎ DLL은 분석할 필요가 없죠! 그럼 어떻게 분석을 해야할까요 :D 유추할 수 있는 문자열을 통해서 찾아보도록 합시다! [마우스 오른쪽 버튼] - [Search for] - [All refer..
2020.02.07
no image
Web - 가위바위보
문제를 들어가면 가위바위보가 있군요! (원래 test랑 오른쪽 위 사진이 저게 default가 아닙니다.. 제가 미리풀어본다고 바꾼게 원래대로 안돌아가더라구요 ㅠㅠ) 게임을 해보니까.. 별일은 일어나지 않았습니다 ㅎㅎㅎ 오른쪽 위 구석탱이에 설정버튼 보이시나요 :D ? 저기를 들어가봅시다! 들어가니 이름과 프로필 이미지를 바꿀 수 있습니다! 그리고 이미지 밑에 파일 선택 버튼이 있는데 이미지 파일이 아닌 다른 파일은 막아져있는걸 볼 수 있었습니다. 그래서 전 여기서 느낌이 왔습니다 :D 파일 업로드를 우회해서 flag를 얻으면 되겠구나 했죠 ! 그래서 가장 대표적인 확장자 우회를 해봤지만 먹히지 않더라구요.. : ( 그래서 저는 HxD를 통해서 파일을 조작해보았습니다! img의 파일 헤더는 "FF D8 ..
2020.02.03
no image
Old - 06 (score:100)
들어가니 ID와 PW가 있고 소스코드를 볼 수 있습니다 :D 일단 소스코드를 보도록 합시다! 소스코드를 보니 Encoding 부분과 Decoding 부분이 나뉩니다! 그럼 인코딩 부분을 먼저 보도록 합시다 :D if(!$_COOKIE['user']) 쿠키에 user가 있으면 참, 없으면 거짓 $val_id="guest" val_id 변수에 guest 저장 $val_pw="123qwe" val_pw 변수에 123qwe 저장 for($i=0;$i
2020.02.03
no image
Basic RCE L02
문제에서 실행파일이 손상이되어서 실행이 되지 않는다고 합니다! 일단 Ollydbg로 올려봅시다! 역시 실행파일이 손상이되었기 때문에 Ollydbg에는 올라가지 않습니다. 그럼 어떻게 봐야할까요 :D HxD를 통해서 봅시다! HxD란 메모리 편집기입니다 :D 자세한 정보와 다운로드 경로는 밑의 사이트를 이용해 주세요! https://mh-nexus.de/en/hxd/ HxD - Freeware Hex Editor and Disk Editor | mh-nexus HxD - Freeware Hex Editor and Disk Editor HxD is a carefully designed and fast hex editor which, additionally to raw disk editing and modif..
2020.02.03
no image
Basic RCE L01
혹시나 어셈블리어를 모르시는 분들은 반드시 어셈블리어를 공부하시고 문제 풀이에 임하시기 바랍니다 ^_^ GetDriveTypeA의 리턴값을 물어보는군요! 가장 대표적인 Ollydbg로 열어보겠습니다 :D http://www.ollydbg.de/ OllyDbg v1.10 www.ollydbg.de Ollydbg는 대표적인 디버거 툴로 위의 사이트에서 간단하게 다운받으실 수 있습니다 :D 이렇게 어셈블리어가 나옵니다! 어셈블리어란? 쉽게 말하면, 컴퓨터의 언어인 기계어를 사람이 보기 쉽게 변환한 언어라고 생각하시면 됩니다 :D 더 자세히 알고 싶으시면 밑의 사이트를 읽어 주세요! https://ko.wikipedia.org/wiki/%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC%EC%96..
2020.01.31
no image
Old - 15 (score 50)
https://webhacking.kr/ Webhacking.kr Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte webhacking.kr 사이트 링크입니다 :D 사이트가 새롭게 단장했군요! 바뀌기 전에 몇 문제 풀었었는데.. 아이디, 패스워드가 기억이 나질 않는군요 ㅠ_ㅠ Webhacking 문제는..
2020.01.31
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

Basic RCE L03

HelloMG
|2020. 2. 7. 18:59

Basic RCE L03 문제

먼저 문제를 볼까요 :D

비주얼베이직에서 스트링 비교함수 이름은 무엇인가 입니다!

 

다운받아서 Ollydbg로 열어봅시다 :D

시스템 오류

Ollydbg로 올렸을 때 시스템 오류가 발생하더라구요!

msvbvm50.zip
0.67MB

위의 파일 다운받아서 해당 프로그램이 있는 경로에 압축 풀어주시면 됩니다 :D

Entry Point

프로그램의 Entry Point입니다!

Entry Point는 프로그램이 시작하는 부분을 말합니다 :D 

프로그램 실행 함수

바로 밑의 CALL함수에서 바로 프로그램을 실행시켜버리네요!

그리고 CALL함수를 들어가면 76XXXXXXXX 주소로 시작하는데 이는 DLL 구역입니다 ㅎㅎ

DLL은 분석할 필요가 없죠!

그럼 어떻게 분석을 해야할까요 :D

유추할 수 있는 문자열을 통해서 찾아보도록 합시다!

Search for - All referenced text strings

[마우스 오른쪽 버튼] - [Search for] - [All referenced text strings]

 

Password

들어가면 프로그램 내 문자열을 모두 보여주는데용

맨 밑으로 내려가면 password와 비교 후 나타내는 문자열이 보이실 꺼예요 :D

더블 클릭해서 들어가봅시다!

vbaStrCmp

쨘! 비밀번호 바로 밑에 CALL 함수 보이시죠 :D ?

그리고 이름은 "vbaStrCmp"랍니다 ㅎㅎㅎ

이름부터 감이 오시나요?

 

vba(visual basic, 비쥬얼베이직)

Str(String, 문자열)

Cmp(Compare, 비교)

 

참 쉽죠 :D ?

이번 문제에서 새로운 기능을 알아가는 것 같네요!

문자열 기준으로 찾고 싶은게 있다하면

[마우스 오른쪽 버튼] - [Search for] - [All referenced text strings]

잊지마세요 :-)

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

Basic RCE L06  (0) 2020.02.12
Basic RCE L05  (0) 2020.02.10
Basic RCE L04  (0) 2020.02.09
Basic RCE L02  (0) 2020.02.03
Basic RCE L01  (0) 2020.01.31

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

Old 06번 문제

들어가니 ID와 PW가 있고 소스코드를 볼 수 있습니다 :D

일단 소스코드를 보도록 합시다!

 

소스코드를 보니 Encoding 부분과 Decoding 부분이 나뉩니다!

Encoding

그럼 인코딩 부분을 먼저 보도록 합시다 :D

if(!$_COOKIE['user']) 쿠키에 user가 있으면 참, 없으면 거짓
$val_id="guest"  val_id 변수에 guest 저장
$val_pw="123qwe"  val_pw 변수에 123qwe 저장
for($i=0;$i<20;$i++) 변수 i에 0을 저장하고 i를 1씩 증가시켜 20이 넘을 때까지 반복
$val_id=base64_encode($val_id);  val_id 변수의 값을 base64로 인코딩 후 다시 저장
$val_pw=base64_encode($val_pw); val_pw 변수의 값을 base64로 인코딩 후 다시 저장
$val_id(pw)=str_replace("A","B",$val_id(pw)); val_id(pw) 변수의 값에서 A가 존재하면 B로 치환 후 다시 저장
Setcookie("user",$val_id, ~ ) val_id 값을 user라는 쿠키값에 저장
Setcookie("password",$val_pw, ~ ) val_pw 값을 password라는 쿠키값에 저장

대략적으로 보면 guest와 password를 base64인코딩 20번을 한 뒤

해당 문자를 다른 문자로 치환해서 cookie 값에 저장시켜 버립니다.

Decoding

디코딩은 Encoding 순서와 반대이군요 :D

 

자 그럼 여기서 어떻게하면 풀까요?

밑에 보면

if($decode_id=="admin" && $decode_pw="nimda")

이라는 조건이 보입니다!

암호화되 어떤 문자열에서 디코딩 되었을 때 id가 admin, pw가 nimda이면 답이 되는군요 :D

그럼 id가 admin, pw가 nimda인 상태에서 암호화를 시켜버리면 되겠네요!

 

저는 phptester라는 홈페이지를 이용해서 id와 pw값을 넣고 돌렸습니다!

phptester

오른쪽에 보이시죠 :D

위의 id와 밑의 pw를 쿠키에 넣으면!!

문제풀이 성공!

짠! 이렇게 문제가 풀어집니다 :D

 

정말 쉽죠 ㅎㅎㅎㅎ?

코드만 보고 이해하면 바로 풀리는 문제입니다!

 

php말고도 python같은 다른언어로 풀어보시는것도 어느정도는 공부되겠죠 :D?

 

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

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

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

Basic RCE L02

HelloMG
|2020. 2. 3. 17:51

Basic RCE L02

문제에서 실행파일이 손상이되어서 실행이 되지 않는다고 합니다!

일단 Ollydbg로 올려봅시다!

Error

역시 실행파일이 손상이되었기 때문에 Ollydbg에는 올라가지 않습니다.

그럼 어떻게 봐야할까요 :D

 

HxD를 통해서 봅시다!

 

HxD란 메모리 편집기입니다 :D

자세한 정보와 다운로드 경로는 밑의 사이트를 이용해 주세요!

https://mh-nexus.de/en/hxd/

 

HxD - Freeware Hex Editor and Disk Editor | mh-nexus

HxD - Freeware Hex Editor and Disk Editor HxD is a carefully designed and fast hex editor which, additionally to raw disk editing and modifying of main memory (RAM), handles files of any size. The easy to use interface offers features such as searching and

mh-nexus.de

자 HxD로 열어보면 이렇게 프로그램의 메모리를 볼 수 있습니다!

HxD

프로그램 메모리는 영역이 나누어져있고 각 필드값도 지정되어 있어서

알고 계신다면 해석도 가능합니다 :D

그러나 지금 설명하면 너무 길기 때문에 따로 공부하시면 좋을 것 같네요 !

(저는 "리버싱핵심원리" 라는 책을 가지고 공부를 했었습니다 :D)

Password

밑으로 좀 내려오시다보면 data영역을 확인할 수 있었습니다!

 

"Nop, try a gain!", "Yeah, you did it!" 이라는 두가지 문자열이 보이네요 :D

분기점이라고 할 수 있으며 뒤의 문자열이 문제에서 보이는 패스워드값이 아닐까 생각을 했는데..

패스워드가 맞았습니다 :D

 

좀 억지스럽게 푼면이 없지않아 있지만..ㅋㅋㅋㅋㅋ

더 알고 싶으신분들은 메모리 구조를 분석해서 복원시킨뒤 풀어보시면

공부도 많이되고 좋을 것 같네요 :D

 

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

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

Basic RCE L06  (0) 2020.02.12
Basic RCE L05  (0) 2020.02.10
Basic RCE L04  (0) 2020.02.09
Basic RCE L03  (0) 2020.02.07
Basic RCE L01  (0) 2020.01.31

Basic RCE L01

HelloMG
|2020. 1. 31. 17:10

 


혹시나 어셈블리어를 모르시는 분들은

반드시 어셈블리어를  공부하시고 문제 풀이에 임하시기 바랍니다 ^_^ 


 

 

 

Basic 1번 문제

GetDriveTypeA의 리턴값을 물어보는군요!

 

가장 대표적인 Ollydbg로 열어보겠습니다 :D

http://www.ollydbg.de/

 

OllyDbg v1.10

 

www.ollydbg.de

 

 

Ollydbg는 대표적인 디버거 툴로 위의 사이트에서 간단하게 다운받으실 수 있습니다 :D

 

01.exe

이렇게 어셈블리어가 나옵니다!

 


어셈블리어란?

 

쉽게 말하면, 컴퓨터의 언어인 기계어를 사람이 보기 쉽게 변환한 언어라고 생각하시면 됩니다 :D

더 자세히 알고 싶으시면 밑의 사이트를 읽어 주세요!

https://ko.wikipedia.org/wiki/%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC%EC%96%B4

 

어셈블리어 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 어셈블리어(영어: assembly language) 또는 어셈블러 언어(assembler language)[1]는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어이다. 컴퓨터 구조에 따라 사용하는 기계어가 달라지며, 따라서 기계어에 대응되어 만들어지는 어셈블리어도 각각 다르게 된다. 컴퓨터 CPU마다 지원하는 오퍼레이션의 타입과 개수는 제각각이며, 레지스터의 크기와 개수, 저장된 데이터 형의 표현도 각기 다르다

ko.wikipedia.org


자! 차례대로 분석해봅시다!

 

다들 잘 아시겠지만 혹시 모르시는 분들을 위해서 ~_~

먼저 간단한 단축키를 알려드리겠습니다!

 

[F7]   명령어 실행(함수 진입 O)

[F8]   명령어 실행(함수 진입 X)

[Ctrl+F2]   프로그램 재시작

 

[F8]을 눌러서 열심해 내려갑시다!

MessageBoxA

MessageBoxA 함수를 만납니다!

다들 잘아시겠지만

오른쪽에 보면 Style, Title, Text, h0Wner 보이시죠?

이것들은 MassageBoxA의 인자입니다!

함수를 불러올 때 인자를 먼저 넣고 함수를 부른다는거 잊지마세요 !

EAX 3

함수가 반환되면 EAX 레지스터에 값을 저장시킵니다 :D

GetDriveTypeA가 3이 반환이 되는군요!

[F8]을 이용해서 계속 내려가 봅시다!

계속 진행

내려가면

CMP 명령어를 통해 EAX, ESI를 비교하고

JE 명령어를 통해 40103D로 점프할지를 정합니다.

 

JE는 EAX, ESI가 같으면 정해진 주소를 넘어갑니다!

(정확히는 ZF가 1이 되면 넘어가게 됩니다. 이부분은 찾아서 공부해보시기 바랍니다.)

 

하지만 EAX(1), ESI(401003)이 서로 다르기 때문에 계속 실행하여

원하는 것을 얻지 못하게 되죠!

EAX 401005 변경

그럼 문제에서 GetDriveTypeA가 무엇이 되어야 CD-Rom을 인식시킬 수 있냐인데!

반환값이 3이 아니라 다른 값이어야겠죠!

 

비교문에서 401003의 값을 맞춰주기 위해

뒤에서 EAX 레지스터 값이 총 2번 감소하기때문에

"401005"를 반환시키면 401003이 되겠죠 :D


INC REG => REG값을 1 감소 시킨다.

DEC REG => REG값을 1 증가 시킨다.


EAX 레지스터를 더블클릭하여 강제로 값을 변환시켜보았습니다!

그리고 조건문까지 내려갑시다 :D

40103D로 점프!

조건문에서 EAX와 ESI가 401003으로 같은 값이 된거 보이시나요 :D

그래서 조건이 만족하기 때문에 40103D로 점프하게 됩니다!

(ZF가 1이 된것도 확인하셔야 합니다!)

성공!

쨘! 이렇게 원하는 인식 시킬 수 있게 되었습니다!

 

그럼 GetDriveTypeA가 반환되어야 하는 값은 "401005"가 되겠네요 :D

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

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

Basic RCE L06  (0) 2020.02.12
Basic RCE L05  (0) 2020.02.10
Basic RCE L04  (0) 2020.02.09
Basic RCE L03  (0) 2020.02.07
Basic RCE L02  (0) 2020.02.03

Old - 15 (score 50)

HelloMG
|2020. 1. 31. 16:17

https://webhacking.kr/

 

Webhacking.kr

Index Welcome Stranger! Notice(en) [2019-08-18] In the process of receiving service, some loss of data has been observed. For example, in very few accounts there may be a truncation of the last one letter of an userid. If userid contains multibyte characte

webhacking.kr

 

사이트 링크입니다 :D

 

사이트가 새롭게 단장했군요!

바뀌기 전에 몇 문제 풀었었는데.. 아이디, 패스워드가 기억이 나질 않는군요 ㅠ_ㅠ

 

Webhacking 문제는 처음부터 풀지않고 점수가 낮은 것부터 차차 풀어나가겠습니다 :D

실력이 좋지 않아서 높은 점수를 바로 풀기 어렵거든요 !

 

자 그럼 50점 문제인 Old-15번 문제를 풀어보도록 하겠습니다!

15번 문제

15번 문제를 들어가면 "Access_Denied"는 팝업창이 등장합니다.

 

js문이니 무력화 시키기 위해 javascript를 꺼버립시다!

개발자 도구(F12) -> 설정(F1) -> Disable Javascript 체크 :D

 

그럼 페이지의 소스코드를 확인할 수 있습니다 :D

15번 소스코드

소스코드를 보니 alert문으로 인해 팝업창이 뜨고 이전페이지로 이동하게 되어 있습니다 : (

그래서 밑의 document.write 문이 실행하지 않았던거죠!

 

그럼 이제 쉽게 풀 수 있겠죠 :D

"/?getFlag"를 주소에 넣어주면 플래그를 얻을 수 있답니다!

풀이

이번 문제는 javascript를 끄면 풀 수 있는 간단한 문제였습니다!

 

이만 간단한 풀이 방법이었습니다 :D

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

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

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