前言:
全靠大佬带飞,自己菜的一批,还需继续努力!,把觉得有必要记录的记录一下。
Funhash
<?php
include 'conn.php';
highlight_file("index.php");
//level 1
if ($_GET["hash1"] != hash("md4", $_GET["hash1"]))
{
die('level 1 failed');
}
//level 2
if($_GET['hash2'] === $_GET['hash3'] || md5($_GET['hash2']) !== md5($_GET['hash3']))
{
die('level 2 failed');
}
//level 3
$query = "SELECT * FROM flag WHERE password = '" . md5($_GET["hash4"],true) . "'";
$result = $mysqli->query($query);
$row = $result->fetch_assoc();
var_dump($row);
$result->free();
$mysqli->close();
?>
level 2和level 3都比较常见,这里就不说了,主要是level 1,之前倒是没见过这种的
$_GET["hash1"] != hash("md4", $_GET["hash1"])
需要满足输入的参数经过md4加密后还等于其本身,在外网查资料发现
https://crdx.org/post/hsctf-2019-md5-minus-minus
由于字符串的md4散列不太可能与字符串本身相同,因此可以推测PHP的类型篡改系统可能会被滥用。然后通过暴力破解得到一个值,这个值便可以满足这个条件
0e251288019
所以最终payload为:
http://39.101.177.96/?hash1=0e251288019&hash2[]=1&hash3[]=2&hash4=ffifdyop
得到flag
bank
题目给出了nc的地址,连过去发现
是通过sha256函数加密的而且加盐了,需要输入XXX才能继续,那只有爆破了,但使用普通的用户脚本去爆破这三位非常浪费时间,而且这个程序是限时的,如果在规定的时间内没有完成操作,就会被弹出,所以爆破一定要快,这里用Go语言的脚本
package main
import (
"bytes"
"crypto/sha256"
"encoding/hex"
"fmt"
"runtime"
"sync"
"time"
)
var (
chars = []byte("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890")
tail = []byte("TeEo77GsmzVmVwDip")
result, _ = hex.DecodeString("e1a16f0afb2efee2ffd27f9b34a68236a2dd056abaaeac140b5c68a454c15e46")
wg