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

alt text

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

alt text

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

alt text

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

alt text

y obtenemos la flag

alt text

alt text