2016-11-01 3 views
1

내 대학 (IT-Securiy)의 프로그램이 있습니다. 예를 들어 php 또는 html 코드를 조작하여 "플래그"를 캡처해야합니다. 우리는 아래의 코드 만보고 프로그래머는 해당 웹 사이트에서 실행됩니다. 그래서 우리는 어떻게 든이 같은 URL 또는 무언가를 조작해야 ...하지만 난 정말 여기 하나에 붙어 :조작/PHP에서 md5 바이 패스?

<?php 
require_once '_flags.php'; 


highlight_file(__FILE__); 


if (isset($_GET['pw']) && 
     md5($_GET['pw']) == '0e13371337133713371337133713371337') { 
    echo $doyouphp3_flag; 
} 

내가 추가하여 암호를 제출해야한다는, 알고 ...

?pw=... 

... URL의 끝에,하지만 난 그냥 모릅니다 ... 예를 들어, md5 기능을 무시할 수있는 방법이 있습니까? 왜냐하면 내가 암호를 철저히하기를 원한다고 생각하기 때문입니다 ...

누군가가 나를 도울 수 있거나 적어도 나에게 힌트를 줄 수 있기를 바랍니다.

마리우스

+0

무염의 MD5는 쉽게 짐승처럼 강요 할 수 있습니다. – SLaks

+1

@SLaks,'0e13371337133713371337133713371337'은 유효한 md5 해시가 아닙니다 – Federkun

+0

@ 마리우스, 여기에 제안 :'var_dump ("0e321651651621651 == '0e13371337133713371337133713371337');'. 당신은 단지 올바른 해쉬를 찾을 필요가 있습니다. – Federkun

답변

1

당신은 0e13371337133713371337133713371337는 숫자 관찰해야하고, 그것은 유효한 MD5 해시가 아닙니다.

그러면 숫자 문자열과 관련된 php 느슨한 비교 (== 연산자 사용)가 어떻게 작동하는지 알아야합니다. 당신은 documentation에 그것을 읽을 수 있습니다

당신이 문자열로 숫자를 비교하거나 비교가 다음 각 문자열은 숫자와 숫자 수행 비교로 변환됩니다 숫자 문자열을 포함합니다.

그래서, 지금 당신은

var_dump('0' == '0e13371337133713371337133713371337'); // true 
var_dump('0e123' == '0e13371337133713371337133713371337'); // true 
var_dump('0e65165165165165' == '0e13371337133713371337133713371337'); // true 

그래서, 당신은 단지 또한 다수의 MD5 해시를 찾을 필요가 있음을 알고있다.

240610708의 md5 해시는 0e462097431906509019562988736854이고 "0e13371337133713371337133713371337" == "0e462097431906509019562988736854"이 참입니다. 그래서 당신은 그것을 사용할 수 있습니다. 또한 QNKCDZO도 잘 작동합니다.

여기에 학습 내용은 무엇입니까? 그 md5('240610708') == md5('QNKCDZO')true이고 위험하므로 == 대신 ===을 사용해야합니다.

+0

Ok, 고맙습니다. 나는 아직도 그것을 완전히 이해하지 못하고 매우 어리 석다는 것을 인정해야한다. : D 두 문자열은 숫자로 변환된다 ('e'가 부동으로되어 있기 때문에). 하지만 둘 다 다른 수레이지만, PHP에서 그들을 비교하면 사실인가? 하지만 그 이유는 아마도 수치 비교에 대한 문제를 이해하지 못했기 때문일 것입니다. 그건 내가 PHP에 대한 자세한 내용을 알게 될 때 분명해진다 ... 당신의 도움을 주셔서 감사합니다 – Marius

+0

그것은 이상한 것 같습니다. PHP는 이상 하네. 이상하게 말하게. – Federkun

+0

안녕하세요 ^^ 힌트를 주셔서 고마워요. ^^ 네가 java, C++ & co, 그리고 지금 php로 작업했다면 꽤 이상하게 보입니다. 어쨌든 – Marius