목록전체 글 (542)
선릉역 1번 출구
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dChttI/btrbUXMnUXu/8kjQSb7tITC38rGaEglIY0/img.png)
이번에는 공백을 막았다. or를 막기 위함인데 이는 ||으로 대체해서 공략할 수 있다. 1. || 사용하기 pw가 ''로 선언되어 있기 때문에 query는 아래처럼 작성해준다. (%27->') ?pw=1%27||id=%27admin 2. 주석으로 공백을 대체하기 ?pw=1'%09or%09id='admin //%09 = tab이고 tab으로 공백을 대체해주었음
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cP3nii/btrbVsLTW90/zu3GRaKnyw0PWkZsUHCtPk/img.png)
prob, _, ., (), ', ", `의 문자를 막는다. solve 조건은 result['id'] value가 admin이면 풀린다. 1. 문자말고 아스키코드 Hex 값의 형태로 작성하기 'admin'에서 ''가 막혀있기 때문에 이 형태를 아스키코드 값인 0x61646d696e로 작성한다. p?no=2%20||%20id=0x61646d696e 2. admin의 no를 찾기 admin의 no = 2였음 3. 문자열의 아스키 값을 char() 함수를 통해 문자열로 변환하기 ?no=2 || id = char(97, 100, 109, 105, 110) 4. ord() 함수 사용하기 ord() 함수는 ()안 parameter의 맨 왼쪽 값을 반환하는 함수로 제일 왼쪽 값(a) = 97인 id를 반환하게 한다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/xSgSw/btrbUW7GTO3/IcP5jWv8yVAx2Se0OYGv91/img.png)
id랑 pw에서 거르는 문자는 prob, _, ., ()이 있다. pw는 md5(hash)로 되어있기 때문에 건들일 수 있는 부분이 아니다. 그럼 id만을 조작해서 이 문제를 풀어보자. 1. 주석처리 ?id=admin';%00 뒷 부분을 주석처리 해버려 id = 'admin'만이 성립되게 한다. 2. 연산자 우선순위 '0' and pw=md5('')인 부분을 false로 보내버리고 id='admin'부분이 성립하게 한다. clear!
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/eBskkz/btrbUYj56Ay/kQQZAmrD1k3BuyEQP20vKk/img.png)
preg_match로 거르는 문자는 prob, _, ., ()이 있다. solve되는 조건이 result['id']가 true인 경우, 즉 id 값을 가져오는 경우이다. 마법의 or 1을 사용하기 위해서 pw = '{$_GET[pw]}'가 ''로 둘러싸여 있기 때문에 '를 넣어준다. ?id=guest&pw=1%27%20or%20%27 그럼 where절이 true가 되어 table의 id 값을 가져올 수 있게 된다. Clear!