일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 앙버터마카롱
- 고르드
- 홍대 토라비
- 잠실새내
- useMutation error
- 지보싶 신촌점
- 비동기배열
- 비동기배열처리방법
- graphql
- 화이트해커를 위한 웹 해킹의 기술
- 화이트 해커를 위한 웹 해킹의 기술
- 토라비
- promise메서드
- 예쁜술집 예술
- graphql with RN
- apolloclient
- apollo react native
- graphql 400
- 신촌 소문난집
- promise처리
- graphql react native
- 금별맥주
- graphql mutation error
- 잠실새내 도그존
- 운정 소바동
- graphql with reactnative
- 홍대 예술
- 홍대 카페 장쌤
- typescript
- 도그존
- Today
- Total
목록wargame 풀이/LOS (7)
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
LOS 11번 (golem) 이번에도 blind sql injection을 이용해서 문제를 해결해야한다. 정확한 pw를 알아내서 전달해야 golem이 해결된다. 이번에는 or, and, substr, =을 필터링하고 있다. 따라서 이를 우회해서 사용해야한다. or -> || and && substr mid = like, 이제 preg_match를 우회하면서 admin의 pw를 얻어내는 코드를 작성해보자 먼저 pw의 길이를 알아내고, 동시에 pw도 구해보자 import string import requests my_cookies=dict(PHPSESSID="h03l2gldvrnepic1mmqtgs0nj6") #쿠키 값 idLength=0 url="https://los.rubiya.kr/chall/golem..
SELECT id FROM prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0; 위와 같은 SQL 쿼리문이 있다. solve 조건은 id=='admin'이기 때문에 pw에 id='guest'를 거짓으로 만들고 id를 'admin'으로 만드는 쿼리문을 입력해야한다. 하지만 pw 뒤에 1=0이 and 연산으로 더해져 있다. 1=0은 항상 거짓이기 때문에 쿼리문 전체가 거짓이 된다. 따라서 1=0을 없애주어야 하는데, 1=0이 pw 뒤에 위치하기 때문에 pw에 입력할 쿼리문의 마지막에 주석처리를 해주면 pw에 입력한 쿼리문까지만 실행되고 1=0이 주석처리될 것이다. ?pw=1'||id='admin'%23 (%23이 주석처리)
8번 풀이 (troll) id='admin' 일때 solve가 실행된다. 그런데 admin이 입력되면 HeHe를 출력하면서 solve가 실행되지 못하게 끊어낸다. 또, 작은 따옴표를 사용하지 못하게 해서 쿼리문을 수정할 수는 없다. 따라서 admin을 입력하면 안되는데,,,admin을 입력해야한다... 1번째 preg_match문에 /i는 대소문자를 구분하지 않는다는 뜻이다. 그래서 admin을 Admin으로 입력하면 preg_match에는 걸리지 않지만 id를 불러올 때에는 admin으로 인식한다. 9번 풀이 (vampire) 8번과 굉장히 유사하다. 그런데 이번에는 strtolower이 있어서 Admin이라고 입력해도 모두 소문자로 바꾸어주는 작업을 하기 때문에 같은 방법으로는 우회할 수 없다. 이번..
이번에는 or과 and를 사용하지 못하게 하고 있다. 또, SQL 쿼리문이 2개가 보이는데, 하나는 id='guest'이고, 나머지 하나는 id='admin'이다. pw를 전달하면 1번째 쿼리문을 실행하고 같은 pw 값으로 2번째 쿼리문까지 실행한다. solve는 입력한 pw와 id='admin'의 pw가 같을 때 실행되고 addslashes로 인해 쿼리문은 전달되지 않아 정확한 admin의 pw를 파라미터로 전달해야한다. id가 존재할 때 Hello+id가 화면에 출력되는 것을 이용해 Blind SQL injection 공격을 통해 admin의 pw길이와 pw를 순서대로 알아내보자 우선 admin의 pw 길이를 얻는 코드는 다음과 같다. (python) import string import reques..
5번 풀이 (wolfman) solve 실행 조건은 id='admin' 이다. 따라서 앞의 id='guest' and pw=''를 거짓으로 만들고 뒤에 id='admin'을 or 을 이용해 추가해주면 된다. 그런데 pw에 입력받은 문자 중에서 공백(space)이 있으면 exit 하는 것을 볼 수 있다. 따라서 스페이스를 사용하지 않으면서 쿼리문을 입력해야한다. 그래서 스페이스를 대신하는 tab을 이용했다. (tab=%09) '%09or%09id='admin'%23 입력 tab을 이용하는 것 외에도 or이 아니라 ||를 이용하면 공백 없이도 입력할 수 있다. ('||id='admin'%23) 6번 풀이 (darkelf) 6번도 id='admin'이면 solve가 실행된다. 이번에는 or과 and를 사용하면..
LOS 4번 orc 두번째 단락에서 addslashes를 이용해 pw에 입력된 값이 SQL로 작동하는 것을 방지하고 있다. PHP addslashes: 웹의 폼에서 입력한 글자가 SQL로 동작하는 것을 방지하기 위해 (' " \ 등)기호 앞에 \를 추가한다. stripslashes: 추가되었던 백스래쉬를 제거한다. -> SQL로 동작하게 함 또, solve의 조건은 pw에 입력된 값이 addslashes 처리한 후에도 그 값과 같을 때이다. ->id='admin'인 사용자의 pw를 정확하게 입력해야 한다. pw를 얻기 위해 pw의 길이를 먼저 알아야 한다. pw에 쿼리문이 들어가면 solve는 실행되지 않지만 적어도 "Hello admin"은 출력될 수 있다. 이를 이용해서 pw의 길이를 알아내보자. ?..
1번 gremlin solve("gremlin")의 조건을 보면 $result['id']가 존재할 때 gremlin이 해결되는 것을 볼 수 있다. 조건에 pw는 없기 때문에 pw부터는 주석처리 할 예정 id는 WHERE 조건을 항상 참으로 만들어 $query에 id를 담는다. ?id=' or 1=1%23 을 URL에 넣어준다. (1=1은 항상 참, or 연산에 의해 id가 참이 된다.) 2번 cobolt gremlin과 마찬가지로 solve 조건에 pw가 존재하지 않으니 pw 부터는 주석처리한다. 이번에는 $result['id'] == 'admin'이어야 solve가 실행되기 때문에 id에 admin을 넣어주고 그 뒤는 주석처리해준다. ?id=admin'%23 을 URL에 넣어준다. 3번 goblin 이..