목록2026/01/07 (2)
Tyojong
6) exit("No Hack ~_~"); $query = "select id from prob_nightmare where pw=('{$_GET[pw]}') and id!='admin'"; echo "query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) solve("nightmare"); highlight_file(__FILE__); ?> 문제 목표if($result['id']) solve("nightmare");id가 출력되면 문제가 해결된다. if(strlen($_GET[pw])>6) exit("No Hack ~_~"); pw의 입력 길이는 5자 이하로 제한되어있다. ..
문제 설명코드 분석처음 배포자가 owner로 설정되고 changeOwner에 주소를 넣고 호출 시 넣은 주소가 owner가 된다.단, changeOwner함수를 호출한 주소(msg.sender)가 트랜잭션을 시작한 주소(tx.origin)랑 동일하면 안된다. 즉, 공격자가 changeOwner함수를 직접 호출해 owner를 설정하면 적용되지 않는다.익스플로잇msg.sender의 경우 스마트 컨트랙트 또는 사용자(EOA)의 주소를 받아온다.하지만 tx.origin의 경우 사용자(EOA)의 주소만 가져온다. 공격 컨트랙트를 생성해 컨트랙트에서 changeOwner를 호출하면 msg.sender는 공격 컨트랙트의 주소가 되고 tx.origin의 경우 사용자의 주소가 되어 owner를 변경할 수 있게된다.공격 ..
