일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 앙버터마카롱
- graphql 400
- useMutation error
- 토라비
- 잠실새내 도그존
- 홍대 예술
- promise처리
- apolloclient
- 금별맥주
- 화이트해커를 위한 웹 해킹의 기술
- 운정 소바동
- 신촌 소문난집
- 고르드
- promise메서드
- 예쁜술집 예술
- 홍대 토라비
- 비동기배열처리방법
- typescript
- apollo react native
- graphql with reactnative
- 도그존
- graphql react native
- 화이트 해커를 위한 웹 해킹의 기술
- graphql mutation error
- 홍대 카페 장쌤
- 잠실새내
- graphql with RN
- 지보싶 신촌점
- graphql
- 비동기배열
- Today
- Total
목록wargame 풀이 (61)
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
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 이..
id: level17 pw: king poetic level17의 힌트를 보자! level16이랑 굉장히 비슷하다! 다른 점은 level16에는 있던 shell() 함수가 level17의 attackme에는 존재하지 않는다. 하지만 권한을 level18로 바꾸어주는 setreuid는 있으므로 쉘을 띄워주는 쉘 코드를 환경변수에 등록하면 된다! 우선 main함수를 디스어셈블하자 디스어셈블 결과도 level16과 매우 똑같다. 그래도 스택 구조를 그려보자 스택 구조 역시 level16과 매우 똑같다. 달라진 점은 쉘코드를 환경변수에 넣고 환경변수 주소를 call 자리에 넣어야 한다는 점 뿐이다. 쉘 코드를 환경변수에 등록해주자! 이제 쉘 코드 시작 주소를 알아내는 shell.c 를 작성해서 컴파일 해주자 /..
id: level16 pw: about to cause mass 힌트를 읽어봅시다. (오늘은 즐거운 추석연휴♡) 이번에는 main 함수 뿐만 아니라 shell 함수와 printit 함수까지 볼 수 있다. main함수에서는 call포인터에 printit 함수의 주소를 넣어주고, fgets 이후에 call함수를 호출하고 있다. shell은 main함수에서는 호출되지 않았지만, setreuid와 shell을 띄워주는 기능을 한다. 그럼 fgets 취약점을 이용해 call에 printit의 주소가 아닌 shell함수의 시작주소를 넣어준다면? shell()함수가 호출되면서 level17 권한의 shell이 실행될 것이다! 스택 구조 파악을 위해 attackme 파일을 디스어셈블해주자 level14,15와 거의 비..
id: level15 pw: guess what 이번에도 hint를 읽으면서 시작해보장 level 14와 굉장히 비슷한 코드가 attackme의 코드로 나왔다. level14와 다른 점이 있다면 check가 포인터 변수라는 것! 그리고 조건문에서 check가 가리키는 값이 0xdeadbeef여야 한다는 점만 다르다! 따라서 check에 0xdeadbeef가 저장되어있는 주소를 넣어주어야한다. 우선 main함수를 디스어셈블 해서 스택 구조를 파악해보자 level14와 거의 똑같기 때문에 어셈블리어를 따로 해석하지는 않을 예정 ( 2020/09/28 - [wargame 풀이/FTZ] - FTZ level14 풀이 요기에 있음) 이를 바탕으로 그려본 스택 구조는 다음과 같다 (얘도 사실 level14와 똑같음..
id: level14 pw: what that nigga want? level14에 로그인 하고 hint를 열어보았다. 이번에는 main 함수 안에 쉘을 띄워주는 코드가 있기 때문에 굳이 쉘 코드를 사용할 필요가 없어보인다. int형 변수 crap과 check, 그리고 char 배열 buf가 보인다. fgets로 45바이트를 입력받고 있는데, buf의 크기는 20이다 -> overflow해서 다른 영역에 접근 가능 그런데 쉘을 띄워주는 부분이 조건문 안에 있다. check와 0xdeadbeef가 같으면 level15권한으로 쉘이 띄워지는 듯 하다. check의 위치 파악을 위해 attackme를 tmp에 복사하고 gdb를 실행해보자 main함수를 디스어셈블 했더니 위와 같은 결과를 알 수 있었다. che..
id: level13 pw: have no clue hint를 보았더니 다음과 같은 코드가 나왔다. 이번에도 strcpy를 사용했기 때문에 BOF 취약점이 존재한다. 그런데 (long) i 값이 0x1234567이 아니면 BOF 경고를 띄워주고 프로그램을 강제 종료시킨다. 이를 방지하려면 공격을 할 때 i자리에는 0x1234567을 그대로 넣어주어야한다. 이제 스택 구조를 알아보기 위해 attackme를 tmp에 복사하고 gdb를 실행시켜주자 main함수를 디스어셈블 했더니 위와 같은 정보를 얻었다. 이를 바탕으로 스택 구조를 그려봤다. 이번에도 환경변수를 생성해서 환경변수에 쉘 코드를 넣고 환경변수의 주소를 return address에 넣어줄 것이다. 하지만 i에는 0x1234567을 넣어주어야 하기 ..
id: level12 pw: it is like this hint를 확인해보자 level11과 매우 비슷한 코드다! 하지만 level11에서는 strcpy 함수를 사용해서 str에 입력했다면, level12에서는 gets를 이용해서 str에 값을 대입한다. (gets 함수 역시 BOF에 취약한 함수이다. 길이 제한 없이 입력받기 때문!) 일단 attackme 파일을 디스어셈블 해주고 스택 구조를 파악해보자 main+3에서 스택을 264바이트 확보했고, main+9에서는 8바이트 더 확보했다. main+49에서 eax에 ebp-264의 주소를 대입하고 이를 gets함수의 인자로 넣는걸로 보아 ebp-264가 str의 시작 주소임을 알 수 있다. 이 정보들을 가지고 스택 구조를 그려보았다! (사실 level..