| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- CODEGATE
- WebHacking
- 상호배제
- sqli
- 시스템
- SQLInjection
- ctf
- Writeup
- webhacking.kr
- crosssitescripting
- 프로세스
- SQL Injection
- Linux
- XSS
- ubuntu
- Los
- SQL
- Python
- 웹해킹
- webhackingkr
- lordofsqlinjection
- 화이트햇콘테스트
- 운영체제
- CCE
- hacking
- 시스템프로그래밍
- web
- rubiya
- 해킹
- 알고리즘
- Today
- Total
목록전체 글 (67)
One_Blog
child toctou 라이트업이다. 이전의 baby toctou와 다르게 이상한 여러 검증 절차가 추가되었다. 이런식으로, HOST를 검사하여 HOST가 webhacking.kr이 아니고, HOST를 dns reolve했을 때 결괏값이 202.182.106.159가 아니라면 그냥 아무것도 실행을 안해버린다. 그리고 만약 HOST 검증을 통과하면, curl로 http://HOST:10020/cmd/{$_GET['q']}.txt를 한 후에, response값을 system으로 실행하고 결과를 알려준다. baby toctou는 단순 문자열 검증이었기에, 동시에 cat flag.php와 ls를 보냄으로써 해결할 수 있었다. 하지만 여기서는 다르다. DNS REBINDING이라는 공격기법을 써야한다. DNS R..
문제가 일단 상당히 당황스럽다. 처음 접속하면 이상한 해쉬값만 보여준다. 일단 대강 분석해보자면.. sleep 함수는 브포 방지, if문은 솔브를 확인하는 것같은데.. key를 인자값으로 받는다. 이때 key가 $_SESSION['chall4']랑 같아야 한다. $_SESSION['chall4']값은 확인이 안되는데, 값을 생성하는 과정은 확인이 된다. 대충 1000000~9999999 사이에서 수 하나 고른 후, "salt_for_you"라는 문자열과 합친 후 sha1을 500번 돌려서 값을 만들어낸다. 처음엔 sha1 hash collision과 같은 부류로 접근하는 문젠가 싶었는데.. 라이트업 찾아보니 그냥 무지성으로 레인보우 테이블 만들어서 값을 찾는 문제였다. 아니...1000000~999999..
상당히 쉬운 문제다. 일단 코드는 다음과 같다. 솔리디티 이전 버전에선 컨트랙트와 동일한 이름의 함수를 만들면 해당 함수가 생성자의 역할을 대신 하곤 했다. Fal1out함수도 위에 constructor까지 적어놓은 거보면 아마 그 생각으로 만들어놓은 것 같은데.. 오타가 나서 컨트랙트 이름은 Fallout인데 함수명은 Fal1out이 되어버렸다. 그래서 그냥 호출이 가능하다. from web3 import Web3, utils import json from solc import * import time account_address = 'REDACTED' private_key = 'REDACTED' contract_address = 'REDACTED' w3 = Web3(Web3.HTTPProvider('..
이번에는 블록체인 워게임 라이트업입니다. Level 1 - FallBack 풀이입니다. 해당 문제의 컨트랙트는 // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Fallback { mapping(address => uint) public contributions; address public owner; constructor() { owner = msg.sender; contributions[msg.sender] = 1000 * (1 ether); } modifier onlyOwner { require( msg.sender == owner, "caller is not the owner" ); _; } function contribute() ..