티스토리 뷰

Security/웹 해킹

Webhacking.kr 18번

on1ystar 2019. 1. 10. 04:45
728x90
반응형

 

( 저번주에 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=1guest니까 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문에 andor조건을 같이 주어도 된다는걸 알고

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의 중복 선택이 불가능하다고 

합니다.

풀어보면서 안되는 이유들에 대해 답을 할 수 없는 부분이 많다는 것을 느끼게 됩니다...

728x90
반응형

'Security > 웹 해킹' 카테고리의 다른 글

SQL 인젝션  (0) 2019.01.14
webhacking.kr 23번  (0) 2019.01.10
XSS  (0) 2019.01.10
댓글