2016-11-09 128 views
0

我發現自己在我工作的公司爲安全審計員寫了一個測試;通過這樣做,我發現了一個我仍然無法解決的CTF挑戰。PHP/MySQL/hash:與安全相關的類型比較CTF challenge

如果想出來,最好讓你們看看你的想法。

的聯繫是https://2013.picoctf.com/problems/php3/

測試的描述說,要注意怎樣的MD5函數時,專門設置爲true的最後一個參數。

的片段上寫着:

$pass = md5($_POST[pass], True); 
$query = @mysql_fetch_array(mysql_query("select user from php3 where (user='$user') and (pw='$pass')")); 

而且md5()與真正在最後表示MD5將返回原表示,而不是字符串表示:

如果可選raw_output設置爲TRUE ,則md5摘要是 ,而不是以原始二進制格式返回,長度爲16.

考慮到這一點,你有什麼想法通過這個測試的過程是什麼?

我想這事做與做MySQL將一個字符串比較的二進制表示,即類似於Why md5('240610708') is equal to md5('QNKCDZO')?和相關的http://dev.mysql.com/doc/refman/5.7/en/type-conversion.html

mysql> SELECT '18015376320243458' = 18015376320243458; 
-> 1 
mysql> SELECT '18015376320243459' = 18015376320243459; 
-> 0 

描述的浮動比較的東西你能幫助我理解這個挑戰?

+0

不使用'mysql_'函數他們已被棄用 – Blueblazer172

+0

[Little Bobby](http://bobby-tables.com/)說*** [您的腳本存在SQL注入攻擊風險。](http: //stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)***。即使[轉義字符串](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)是不安全的! *** SQL注入!*** *這不僅僅是用於早餐!* –

+0

***您不應該使用[SHA1密碼哈希](https://konklone.com/post/why-google-is-匆匆的網絡殺人沙1)***或*** [MD5密碼哈希](http://security.stackexchange.com/questions/19906/is-md5-considered-insecure)* **,你真的應該使用PHP的[內置函數](http://jayblanchard.net/proper_password_hashing_with_PHP.html)來處理密碼安全性。在散列之前,請確保你[不要越過密碼](http://stackoverflow.com/q/36628418/1011527)或使用其他任何清理機制。這樣做*更改密碼並導致不必要的附加編碼。 –

回答

0

這是一個簡單的SQL注入,試試這個作爲用戶名:

admin') #

#將忽略該查詢的其餘部分(使它評論)

+0

感謝您的及時回覆!我看到了這一點,但忽略了它,因爲在質詢描述中它說:「注意md5第二參數以及它的使用方式」;所以我專注於此,假設實際的挑戰不是用#(這很明顯)注入。我想我應該在我的問題中提到這一點。無論如何,謝謝! –

+1

我不明白...有趣的部分是什麼? –

0
mysql> SELECT user from php3 where (user='admin') and (pw=0e55555555555555); 

將返回所需的數據。