Write-Up Honor Among Thieves
Autor: Diego Alesxander Orrego Torrejon
HTB-Honor Among Thieves
{
"PrivateKey": "0xd960689403815fca9e764549167de01a49730723e764de0302890d0920219518",
"Address": "0x0a8B8E77482AB9b05D42567cF133Ba52D9746174",
"TargetAddress": "0xB3734d3097B9375975969D1E556af91516faBDf3",
"setupAddress": "0xc1746c57f795cE5Bd815D5947258FFB571F10Afd"
}
RPC:http://94.237.61.82:32521/rpc
Solution
Dado que con la funcion podemos intuir que tenemos que hacer un XOR y comparar si el key dado desencripta el hash
function talk(bytes32 _key) external {
bytes32 _flag = _key ^ encryptedFlag;
if (keccak256(abi.encode(_flag)) == hashedFlag) {
solver = msg.sender;
emit Voice(5);
} else {
emit Voice(block.timestamp % 5);
}
}
Dado que esto no es algo que podamos resolver por fuerza bruta vemos si esto ya fue solucionado consultado la variable solver address public solver
Lo cual nos confirma que alguien ya lo ha resuelto entonces buscamos en el historial con
cast logs --from-block 0 --to-block latest --rpc-url http://94.237.61.82:32521/rpc
y este para filtrar por el evento event Voice(uint256 indexed severity)
dado que se ejecuta esto al resolverlo emit Voice(5)
cast logs --from-block 0 --to-block latest --rpc-url http://94.237.61.82:32521/rpc 0x8be9391af7bcf072cee3c17fdbdfa444b42ad0d498941bcd0eb684da1ebe0d62 0x0000000000000000000000000000000000000000000000000000000000000005
con esto recuperamos el transactionHash:
0xc825e124539a399ad927bf4452a834ee0dca011e2eaf02194026284a8cb016be
ahora procedemos a buscar detalles de la transaccion mediante
cast tx 0xc825e124539a399ad927bf4452a834ee0dca011e2eaf02194026284a8cb016be --rpc-url http://94.237.61.82:32521/rpc
Con eso obtenemos lel input que se uso para resolver la funcion ahora decodificamos con
cast calldata-decode "talk(bytes32)" 0x52eab0fae1ded0b0d4b71aa0733c146f5f328aa3935a513d1dd24480bd4f23aa2a691ff2
lo cual nos da
0xe1ded0b0d4b71aa0733c146f5f328aa3935a513d1dd24480bd4f23aa2a691ff2
entonces llamamos a la funcion para resolver el problema con el valor obtenido
con
cast send 0xB3734d3097B9375975969D1E556af91516faBDf3 "talk(bytes32)" 0xe1ded0b0d4b71aa0733c146f5f328aa3935a513d1dd24480bd4f23aa2a691ff2 --private-key 0xd960689403815fca9e764549167de01a49730723e764de0302890d0920219518 --rpc-url http://94.237.61.82:32521/rpc
y listo resolvimos el problema
y obtenemos la flag