티스토리 뷰
( 저번주에 sql 인젝션을 막 공부하고 풀었던 write up 입니다. sql 인젝션에 대한 포스트는 좀 더 정리하고 올리겠습니다 )
먼저 18번을 클릭하면 이 문제는 SQL INJECTION이라고 알려주고 있습니다. 아래 보면 index.phps가 있는데,
이렇게 소스코드를 보여줍니다.
우선 소스코들르 살펴보면 GET방식으로 우리가 입력한 값을 변수에 담는 형식이고, 그 변수가 SQL쿼리문 안에 들어가 있네요. 간단하게
mysql_fetch_array가 가져온 배열의 [0]번째 즉, 첫 번째 값이 guest면 hi guest가 출력되고 admin이면 문제가 풀리게 되어있습니다.
웹 해킹 문제를 처음 풀어보는거라 어떤식으로 접근해야 할지 잘 감이 안왔습니다. 그래서 일단쿼리문을 자세히 봤는데, 컬럼명이 id인 테이블에
guest라는 id가 있는 거겠구나 했습니다. 그래서 테이블을 대충 그려놓고 no가 몇인지 알아볼려고 1부터 넣어봤는데 guest가 1번이여서 바로
hi guest가 나오네요.
여기서 그럼 challenge18_table의 no=1은 guest니까 no=0아니면 no=2가 admin이지 않을까 생각했습니다.
자세히보면 eregi로 여러 키워드나 특수문자들이 필터링이 되어있습니다. 그래서 처음에는 저 필터링을 우회해서 쿼리문을 작성하는건가 했습니다.
그래서 일단 스페이스바(공백)을 우회하는 방법으로 +를 찾았고, select를 우회하는 방법 같은 것을 검색해봤더니 ‘sel’’ect’나 php문법은 대소문자
에 예민하기 때문에 SeleCt같이 우회를 할 수 있다고 해서 ‘Un’’ion’+‘sel’’ect’+id+’Fr’’om’+challenge18_table+where+id=’admin’을 넣어 봤더니 안
됬습니다…
더 생각을 해보니까 앞에 id=guest and 이게 가장 문제라고 생각했습니다. 이미 앞에서 guest를 선택하고 and조건을 주니까 다른걸 중복으로 선택
하기가 애매했습니다. 그래서 앞의 조건을 무효화 시킬 수 없을까 해서 검색을 하다가 where문에 and와 or조건을 같이 주어도 된다는걸 알고,
99+or+id=’admin’을 넣어봤더니 안됩니다… (99를 넣어 앞 조건을 거짓으로 만들고 or연산을 통해 뒤의 조건으로 검색할려고 했습니다...)
여기서부터 시간을 엄청보냈는데, +가 안되는건가 해서 다른 우회방법을 찾아보니 %0a가 탭키를 우회한다길래 99%0aor%0aid=’admin’을 넣었더
니 역시였습니다. 그래서 혹시 admin이 없나 해서 no=0이랑 no=2도 넣어봤는데 hi admin 절대 안떴습니다.
이후부터는 안되는 이유를 모르니까 너무 짜증이나서 sql사례를 찾아보다가 저 우회한 문자가 url encoding방법이라는 것을 알게 됩니다. GET방식
으로 url에 변수를 입력할수 있다는 것은 알아서 99%0aor%0aid=’admin’을 url에 넣어 보니까 안됩니다; 다른걸 찾아볼까 하다가
99%0aor%0ano=0 이랑 99%0aor%0ano=2 넣어봤는데 99%0aor%0ano=2에서
hi admin을 드디어 봅니다.
id=’admin’이 안되는 이유 : 같이 공부하는 친구에 의하면 이미 앞에서 where id=’guest’로 선택이 되었기 때문에 id의 중복 선택이 불가능하다고
합니다.
풀어보면서 안되는 이유들에 대해 답을 할 수 없는 부분이 많다는 것을 느끼게 됩니다...
'Security' 카테고리의 다른 글
쉘 코드(/bin/sh (0) | 2019.01.16 |
---|---|
SQL 인젝션 (0) | 2019.01.14 |
webhacking.kr 23번 (0) | 2019.01.10 |
XSS (0) | 2019.01.10 |
어셈블리어 (0) | 2019.01.10 |
- Total
- Today
- Yesterday
- 방명록 프로젝트
- 쉽게 배우는 운영체제
- 선형 회귀
- 프로그래머스
- 파이썬 for Beginner 솔루션
- 파이썬 for Beginner 연습문제
- Spring
- 운영체제 반효경
- spring mvc
- git
- jsp
- Gradle
- 김영환
- 지옥에서 온 git
- Thymeleaf
- 스프링 테스트
- 스프링
- 생활코딩 javascript
- Python Cookbook
- Do it! 정직하게 코딩하며 배우는 딥러닝 입문
- 패킷 스위칭
- git merge
- git branch
- Spring Data JPA
- Computer_Networking_A_Top-Down_Approach
- 쉘 코드
- 스프링 컨테이너
- JPA
- Spring Boot
- 스프링 mvc
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |