검색결과 리스트
글
문제에 들어가니 다음과 같은 화면이 나왔다.
로그인을 누르니 다음과 같은 창이 나온다.
아무 ID 와 PW 를 입력하면 다음과 같은 창이 나오며 admin 이 아니라 접근이 제한되었다고 한다.
id 를 admin 으로 하고 아무 PW 로 로그인을 하니 잘못된 PW 라고 나온다.
여기서 SQL Injection 을 해보려고 admin' -- 로 해봤는데 이전과 다른 반응이 없어서 일부러 거짓 값을 입력해봤다.
이래도 Access Denied 만 나오고 별 다른 변화는 보이지 않는다.
여기에서의 SQL Injection 은 힘들겠다고 생각하고 다른 페이지로 가보기로 했다.
join page 로 가기 위해 버튼을 누르니 접근 거부가 나온다.
main page 에서 코드를 보니 login 버튼의 onclick event 로 move('login') 이라는 함수가 실행되었고
스크립트를 살펴보니 page 명이 login 이면 mem/login.php 로 이동한다고 한다.
login 버튼을 누르면 mem/login.php 로 이동한다는 것인데
이걸 보고 mem/join.php 가 존재하지 않을까라는 생각에 입력해보니
위와 같은 검은 화면이 나왔다.
문제를 풀 당시에는 바로 검은 화면이 나왔는데 오늘 다시 해보니 mem/join.php 로 가도 Access Denied Alert 창으로 계속 나오길래
console 을 이용하여 script 에 alert 문구를 location.href = 'mem/join.php'; 로 바꾸고 join 버튼을 누르니 됐다.
문제를 풀 때에는 생각을 못했는데 mem 으로 접근할 수도 있다고 한다.
아무튼 join page 의 코드를 살펴보니 다음과 같은 기괴하게 암호화된 문장이 있었다.
하나하나 해석할 수도 있었지만 콘솔 창에 변수들을 입력해주고 하나하나 입력해주니 다음과 같은 코드가 나왔다.
코드를 보아하니 oldzombie 라는 cookie 가 없을 시 bye.
URL 에 mode=1 이 없을 경우 access_denied 가 나오고 전 페이지로 돌아가게 되어있었습니다.
그래서 쿠키 툴을 이용해 oldzombie 라는 쿠키를 만들어주고,
GET 방식에서 ? 뒤에 mode=1 이라는 문구를 붙였습니다.
( GET 방식에서는 URL 의 ? 뒤에 변수 값들을 넣어준다고 합니다. )
그랬더니 다음과 같은 페이지가 나왔습니다.
login page 에서 admin 으로 로그인을 하라고 했기에 admin 으로 id 를 만들어보니 이미 존재하는 ID 라고 합니다.
sql injection 을 시도하려 했는데 id text 창의 길이가 5로 제한되어 있었습니다.
7로 바꾸고 주석을 달아봤습니다.
sign up 이라고 나오지만 로그인 창에 가니 되지 않습니다.
그래서 admin 이라는 문구를 우회하기 위해 다음과 같이 최대 길이를 변경하고 문구를 나눠봤습니다.
성공했다고는 나오지만 어찌된 일인지 '가 \' 로 인식됩니다.
찾아보니 php.ini 파일에는 자동적으로 모든 GET, POST, COOKIE 데이터에 addslashes() 를 처리하는 설정값이 있는데
addslashes() 함수가 데이터베이스 쿼리에서 처리가 되는 문자 앞에 \를 붙인 문자열을 반환하는 함수라 그렇다고 합니다.
적용되는 문자에는 ', ", \, NULL 이 있다고 합니다.
이번에는 최대 길이를 6으로 설정하고 --와 함께 주석으로 사용되는 # 을 넣어봤습니다.
이것도 sign up 이라고 나오기는 하지만 마찬가지로 로그인은 되지 않습니다.
왜 그러지 싶어서 addslashes() 함수를 우회할 수 있는 방법을 찾아봤는데
이 방법을 사용하면 admin 에 다른 문자가 붙어 안 됩니다.
이 글을 쓰다가 갑자기 깨달은건데 id 쿼리문에 주석을 붙이려면 id' -- 이런식으로 해야되는데.. 멍청했네요
아무튼 다른 풀이들 보고 뒤에 공백을 넣어 풀기는 풀었는데 왜 공백만 되는지 모르겠네요.
따로 여러번 시도해보고 성공/실패한 걸 기록해 보겠습니다. ( '' 안이 text 에 넣은 값이라고 보시면 됩니다. )
'admina' 실패
'adminasdf' 실패
'admin#' 실패
'admin --' 실패
' admin' 실패
'admin%' 실패
'admin ' 성공
'admin ' 성공
'admin+' 실패
어디 게시글에서는 서버에서 ID 쿼리를 5글자까지만 가져가고 클라이언트에서 admin 이랑 같은건지 검사하는거라고 하던데
그렇게 따지면 1, 2, 3, 4, 6, 9 번도 성공해야되는게 아닌가 싶습니다..
그리고 공백 처리 함수같은게 사용됬으면 앞에 공백을 붙인 것도 되야 되는 것같은데..
다른 풀이 글에서는 된다고 한 게 왜 되는 게 있고 안 되는 게 있는 지 모르겠네요.
제가 뭘 잘못했나..?
'Hacking > Web Hacking' 카테고리의 다른 글
Webhacking.kr 10번 문제 (0) | 2018.09.26 |
---|---|
Webhacking.kr 24번 문제 (0) | 2018.09.21 |
Suninatas 23번 문제 (0) | 2018.09.20 |
Suninatas 22번 문제 (0) | 2018.09.20 |
Webhacking.kr 3번 문제 (0) | 2018.09.18 |
RECENT COMMENT