39번 문제에 들어가보니까 text 입력창이 나왔다.



코드를 보니 주석으로 index.phps 라고 적혀있었고, 그곳으로 들어가보니 소스가 있었다.



대충 해석을 해보니 id 입력값에 \\가 있으면 없애주고 '를 ''로 바꿔준다.

바꾼 값을 처음부터 15글자를 잘라 쿼리문에 붙여서 실행했을때의 결과를 배열로 저장해서,

배열의 첫번째 값이 good 이면 문제는 풀리게 된다.


mysql_query() 는 지정한 DB 에 하나의 질의를 해서 성공한다면 결과값을 오류시 false 값을 반환하는 함수이다.

mysql_fetch_array() 는 mysql_query() 를 통한 결과값을 배열로 저장하는 함수이다.

substr() 은 문자열을 잘라 반환하는 함수이다.


text field 에 아무거나 써봐도 ' 로 닫혀있지 않아 아래와 같은 오류가 나온다.



그래서 good' 과 같은 형식으로 써야하는데 '를 쓰면 ''가 되어 ' 개수가 또 맞지 않게 된다.

그런데 코드를 잘 살펴보며 15번째까지 자른다고 나왔있다.

다른 관점에서 생각해보면 16번째부터 읽지 않는다는 소리이므로 15번째에 '를 넣으면 ''로 바뀌어도 '까지만 읽어서 ' 개수가 맞게 된다.

따라서 아래와 같이 입력해보았다.




성공!



\\ 는 왜 없애는 건지 모르겠다. 특수문자 처리 못하게 하려고 없애는거면 \ 를 없애야하지 않나?

아무튼 다른 방식으로 몇번 해봤는데 일단 id 에 입력되는게 good 이 아니더라도 풀리긴 풀렸다.


특수문자 처리에 대해 알아보니 ' 는 DB 에 ' 가 들어가게 되어서 오류가 발생할 수 있으니 \' 를 통해 ' 를 문자열 처리하는 거라고 했다.

입력할 때는 \' 로 입력이 되지만 DB 에서 보이는 내용은 ' 라고 한다.


그래서 다음과 같이 시도해봤다.


처음으로는 마찬가지로 15번째에 ' 를 입력하는데 14번째에 \ 를 입력해서 특수문자 처리가 되도록 해봤다.


안 된다. good         \' 가 good         \''가 되지만 15번째에서 잘려 good         \'가 되고,

DB 에는 ' 가 문자열 처리되어 good         ' 로 입력되지만 닫는 ' 가 없어서 안 된다고 생각했다.



그렇다면 14번째에 ' 를 입력하고 13번째에 \ 를 입력한다면 어떻게 될까?



솔직히 나는 될 거라고 생각했지만 안 됬다. good        \' 가 good        \'' 가 되고 15번째에서 잘려도 그대로이기에

DB 에는 good        ' 로 입력되고, 닫는 문자열 ' 도 있어서 성공할 줄 알았지만 실패했다. 


'Hacking > Web Hacking' 카테고리의 다른 글

Webhacking.kr 10번 문제  (0) 2018.09.26
Webhacking.kr 24번 문제  (0) 2018.09.21
Webhacking.kr 5번 문제  (0) 2018.09.21
Suninatas 23번 문제  (0) 2018.09.20
Suninatas 22번 문제  (0) 2018.09.20


문제에 들어가니 위와 같은 화면이 나왔다.




코드를 열어보니 onclick 시 왼쪽으로 1만큼 가고 800만큼 간다면 ?go=800 으로 이동한다.





URL 에 위와 같이 입력해보니 아래와 같이 no hack 이라고 나온다. ( 어떤 값을 입력하든지 마찬가지 이다. )




눌러서 이동시켜보려고 했는데 이동이 안 된다.

뭐지 하면서 고민하면서 코드 다시 한 번 보는데 문제되는 부분이 없다.

찾아보니 크롬에서는 안 된다고 한다.


그래서 사파리로 들어가서 다음의 코드를



위와 같이 한 번 누를때 1만큼 가는 게 아니라 800만큼 가도록 수정했다.



성공!



'Hacking > Web Hacking' 카테고리의 다른 글

Webhacking.kr 39번 문제  (0) 2018.09.27
Webhacking.kr 24번 문제  (0) 2018.09.21
Webhacking.kr 5번 문제  (0) 2018.09.21
Suninatas 23번 문제  (0) 2018.09.20
Suninatas 22번 문제  (0) 2018.09.20

문제에 들어가니 위와 같은 화면이 나오고, 코드를 열어보니 주석에 소스가 index.phps 에 있다고 합니다.



index.phps 에 들어가보니 다음과 같은 코드가 있었습니다.


REMOTE_ADDR 이란 PHP 에서 사용자가 현재 페이지에서 보고 있는 시스템의 IP 주소를 나타냅니다.


extract 함수는 배열의 키값을 변수화 해주는 함수라고 하고, 대충 해석해보니


REMOTE_ADDR 이 없다면 서버에서 설정해주는 것 같고, 쿠키에 REMOTE_ADDR 이 있을 때


ip 의 값에서 12,7.,0.을 지우라는 소리 같습니다.



solve 함수가 있는 조건문을 보니 ip를 127.0.0.1 을 만들라는 것 같군요.


처음에는 되나 싶어서 아래와 같은 방법을 써봤는데 프록시의 정의조차 생각하지 않고 일단 해보는 나, 대단하군요.



네, 당연히 안 됩니다.


REMOTE_ADDR 라는 쿠키를 만들어주고 127.0.0.1 이 될 값을 넣어줍시다.



Suninatas 1번 문제처럼 replace() function 생각해서 127.0.0.1 를 결과값으로 만들면 됩니다.




위와 같이 입력해주면!


성공했습니다!



쿠키에다가 아무 생각 없이 127.0.0.1 이 될 값을 입력했는데 오늘 다시 해보다가 


이 값에 따라서 표에 나오는 값이 달라짐을 확인할 수 있습니다.




이 문제를 풀고 webhacking.kr 사이트에 들어가니 계속 wrong ip! 127.0.0.1 이 뜬다.


Edit this cookie 를 통해 쿠키를 지워도 계속 뜬다.


인터넷 사용기록, 호스팅된 데이터들 다 삭제했더니 겨우 들어가졌다.



'Hacking > Web Hacking' 카테고리의 다른 글

Webhacking.kr 39번 문제  (0) 2018.09.27
Webhacking.kr 10번 문제  (0) 2018.09.26
Webhacking.kr 5번 문제  (0) 2018.09.21
Suninatas 23번 문제  (0) 2018.09.20
Suninatas 22번 문제  (0) 2018.09.20


문제에 들어가니 다음과 같은 화면이 나왔다.


로그인을 누르니 다음과 같은 창이 나온다.



아무 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

드디어 Suninatas Web 부분 마지막 문제이다.

들어가니 Hard Blind Sql Injection 이라고 나오고 22번과는 달리 admin 또한 Filtering 되어 있다.


이번에는 힌트로 22번 내용에 추가적으로 admin 을 우회하라고 나와있다.

뭔가 업그레이드 된 22번의 느낌이다.

일단 guest / guest 로 로그인 해봤다.

22번과 마찬가지로 OK guest 라고 나온다.

물론 다른 ID 나 잘못된 PW 를 입력하면 False 가 나온다.

한 번 아래와 같이 Query 문을 작성해봤다.

기본적으로 로그인 되는 건 guest 인 것 같다.

admin 을 입력해서 로그인 해보니

No hack 이라고 나온다.

그래서 힌트대로 admin 이라는 문자열을 우회하기 위해 다음과 같이 자르고 쿼리문을 작성해봤다.

admin 으로 로그인 되어 OK admin 이라고 나온다.

지금 생각해보면 ad'+'min" -- 로 하나 ad'+'min' and 1=1 -- 로 하나 똑같은 데

이때는 SQL Injection 이라는 것을 처음 접해본때라 뭣도 모르고 이렇게 적은 것 같다.

아무튼 길이를 찾으려고 len 함수를 통해 찾아보니 PW 의 길이로 12가 나왔다.

여기서 왜인지는 모르겠는데 막혔다고 생각해서 풀이를 찾아보니 PW 의 첫글자가 v 라고 한다.

그래서 입력해봤는데 v 가 맞았다.



이대로 코드를 통해 돌려봤는데 v 이후로 No Hack! 이 나온다.

다른 함수를 사용해보려고 mid 함수를 사용해봤다.

위와 같이 No hack 이라고 나온다.

뭐가 문제지 싶어하다가 쿼리문의 길이가 문제인가 싶어서 aaaaaaa 이런식으로 길이를 체크해봤다.

31글자 이상이면 No hack 이 나왔다.

 left 함수는 left(string,length) 와 같이 사용하는데 string 을 왼쪽부터 length 만큼 잘라오라는 뜻인데,

이대로 코드를 작성하니 31글자 이상이 될 때부터 No hack 이 나온 것이였다.


그래서 left 함수와 right 함수를 이용해서 31글자가 안 되게 쿼리문을 작성해서 1글자씩 읽어오도록 했다.

해봤는데 false 가 나와서 ?? 해봤지만 일단 다른분들 풀이가 이렇게 하라길래 이대로 코드를 작성해봤다.



이 코드의 결과로 아래가 나온건지는 잘 모르겠지만 이상하게 암호가 나온다.

( 이유에 대해서는 밑에서 설명하도록 하겠다. )



당연히 암호가 아니다.

다른 방식으로 성공 확인을 하기로 했다.



이 태그를 통해 성공 여부를 확인하도록 코드를 작성했다.



성공했다.


-------------------------------------------------------------------------------------------------------------------------


이게 푼 지 한 일주일 정도 되는 문제이다.

지금 생각해보면 반은 수치스럽고, 반은 한심하게 풀었던 문제라고 생각한다.

솔직히 이걸 풀었다고 할 수 있을지도 의심이 간다.


물론 이런식으로 해결해서 SQL injection 에 대한 이해가 가능했지만

뭔가 맛있는 아이스크림을 먹으려고 하는데 맛을 느끼기도 전에 배속에 들어가있는 느낌이다.


위의 오류들과 확인해야 될 부분에 대해 하나 하나 확인해보도록 하자.

우선 위에서는 풀이를 보고 바로 left 함수를 사용했는데 

사실 우선적으로 생각할 수 있는 접근 방법은 mid 함수라고 생각한다.


그래서 mid 함수를 사용해보았다.

이 결과는 false 로 출력되었다. 아까 말했듯이 기본적으로 guest 로 로그인 되는건가 싶어서 admin 을 붙여보았다.

글자 수가 30자를 초과해 No hack! 이 출력된다.

기본적으로 guest 로 로그인 된다면 guest 의 PW 의 첫글자 g 로 인식되는건가 싶어서 g 로 입력해보았다.

마찬가지로 False 값이 나왔다.


그래서 찾아보니 이 문제에 사용된 DB 는 MsSQL 로 mid() function 을 지원하지 않는다고 한다.

이렇게 left, right 함수를 사용해야 된다는 것을 유추해 볼 수 있다.

그리고 이 쿼리문이 false 값으로 출력된다고 위에서 말했는데 괄호 닫기 < ) > 를 하지 않아 오류가 난 것이였다.

정상적으로 실행된다면 아래와 같이 admin 으로 로그인이 된다.

이러한 유도 과정을 통해 충분히 위에 올린 코드를 실행해 볼 수 있었고

실행했을 때 나온 아래와 같은 오류는 아까 말한 기본적으로 인식되는 게 guest 라는 것이 문제가 되는 게 아닐까 싶었다. 



guest 또한 로그인이 되면 OK 라는 사인이 나오게 되니 충분히 시도해 볼만 하다고 생각했다.

그래서 아래와 같은 쿼리문을 입력했다.

내 추론이 맞았다.

이렇게만 입력하면 false 값이 나오는데 'or left(right(pw,12),1)='g' -- 를 통해 guest 로 로그인 되는 걸 보면

OK 만 보기 때문에 guest 의 암호또한 불러오는 걸로 생각했다.

guest 의 암호는 guest 인데 오른쪽에서 12글자를 가져오게 되어

gggggggguest 이런식으로 저장되서 섞여 나오는 게 아닐까 생각했다.


이를 통해 생각해보니 기본적으로 guest 로 설정되는 것이 아니라 조건에 맞는 것으로 되는 것 같다.


아래와 같을 때 guest 로 나온다는 것때문에 오해했었는데 

학교 보안 스터디 형이 우선순위가 있을 수 있다고 하셔서 이해가 되었다.

아무튼 gggggggguest 로 설정되는 지 찾아보려고 해당 문제에서 아래와 같은 쿼리문을 입력해보았다.

그런데 글자수 제한때문에 No hack 이 출력된다.


이와 같은 문제는 MsSQL 의 right() function 처리 방식에 따라 달라지는 것 같은데 어떻게 처리되는지는 잘 모르겠다.


이 문제에 대해 드는 의문을 한 페이지에 정리해서 이미지로 첨부하며 이 글을 마치도록 하겠다.


P.S

코드를 작성하면 바로 저장하고, 문제를 풀면 바로바로 풀이하자.

일주일 전에 풀고 코드도 한 페이지에서 작성하면서 지워버리니까 어떻게 풀었는지 생각도 안 나고 이후 수정도 힘들다.

그 때 풀이하며 메모하던 걸 보면서 겨우겨우 쓰기는 했는데 복잡한 문제일수록 바로바로 풀어야 될 것 같다.

'Hacking > Web Hacking' 카테고리의 다른 글

Webhacking.kr 24번 문제  (0) 2018.09.21
Webhacking.kr 5번 문제  (0) 2018.09.21
Suninatas 22번 문제  (0) 2018.09.20
Webhacking.kr 3번 문제  (0) 2018.09.18
Webhacking.kr 14번 문제  (0) 2018.09.18

들어가니 대놓고 Blind Sql Injection 이라고 나온다.

위와 같은 Keyword 들을 필터링한다고 나와있다.



평소처럼 코드를 봐보니 위와 같은 주석이 있었으며 

그 내용을 보니 guest / guest 로 로그인 할 수 있고 admin의 password 를 찾으라는 것 같다.

guest / guest 로 로그인 하니 위와 같이 OK guest 가 나왔다.


이 외의 ID 나 잘못된 PW 를 입력하면 위와 같이 False 라고 나온다.

admin 으로 로그인하기 위해서 admin' and 1=1 -- 라는 Query 문을 작성했다.

위와 같이 OK admin 이라고 나온다.

나는 admin 의 password 를 알아내기 위해 true / false 를 반환하는 DB에

len() 이라는 function 을 이용하여 pw 의 길이를 유추했다.

Password 의 길이는 10 글자라고 한다.

하나하나 입력해보려면 시간이 너무 오래 걸리니 브루트포싱을 이용해서 찾기로 하였다.

굳이 Burp Suite 가 아니여도 되기는 하지만 여기서 User-Agent 와 Cookie 를 확인하고

다음과 같은 코드를 통해 Admin 의 Password 를 구할 수 있다.



위의 Substring () Function 은 MySQL 에서 substring(string, start point, length) 와 같은 형식으로 사용된다.

이 문제의 DB가 MySQL 이라는 걸 알 수 있었던 이유는 Injection 할 때 MySQL 에 있는 함수를 사용할 수 있다는 걸 알았기 때문이다.


따라서 위의 코드는 PW 가 10 글자 이니 10번의 반복을 하고,

DB 의 pw 에서 한 글자씩 가져와 비교해보고 OK 라는 문구로 True 값이 확인되면 key에 더하는 형식으로 admin 의 pw 를 찾았다.


'Hacking > Web Hacking' 카테고리의 다른 글

Webhacking.kr 5번 문제  (0) 2018.09.21
Suninatas 23번 문제  (0) 2018.09.20
Webhacking.kr 3번 문제  (0) 2018.09.18
Webhacking.kr 14번 문제  (0) 2018.09.18
Webhacking.kr 15번 문제  (0) 2018.09.18

처음에는 이게 뭔가 싶었다.


코드를 보니 25까지 칸이 있고 Value 가 0으로 설정되어 있으며 type 이 hidden 으로 설정되어있었다.

보니까 5X5 에서 onclick 이벤트로 누르면 반전시키게 되어있었다.

그래서 생각해보니 아니 이게 뭐야! 익숙한 네모네모 로직이 아니었던가!

재밌게 풀고 GOGO! 를 눌렀다.

그랬더니 다음과 같은 이름을 입력하라는 창이 나온다.

그래서 내 ID 를 입력해 봤더니 다음과 같이 answer 와 IP 가 나왔다.

answer 에 있는 1010100000111 어쩌구 저쩌구를 복사해서 

Auth Key 로 입력하니 틀렸다고 나온다. 


Value 값을 보니 25까지 value 값을 다 더하는 스크립트로 Answer 가 나오는 거 였다.

그리고 다시 결과를 보니


다음과 같이 name, answer, ip 가 있길래 DB에 들어가지 않을까 싶어서

value 값에 SQL Injection 을 해서 다음과 같이 해보았다.

하지만 이런식으로 해킹하지 말라고 나왔다.

여러 조합으로 해보니 or 이랑 = 을 필터링 하는 것 같았다.


그러다 or 의 역할을 하는 연산자 || 를 입력했고, = 대신에 True 를 입력했다.



이렇게 하니 name 은 admin으로 나오고 answer 값이 나왔다.



위 이미지에서 ip 58.74.230.208 로 나온건 aa, 쿼리문 만들어서 넣어놨는데 저렇게 나왔다.

성공!

'Hacking > Web Hacking' 카테고리의 다른 글

Suninatas 23번 문제  (0) 2018.09.20
Suninatas 22번 문제  (0) 2018.09.20
Webhacking.kr 14번 문제  (0) 2018.09.18
Webhacking.kr 15번 문제  (0) 2018.09.18
Webhacking.kr 2번 문제  (0) 2018.09.18


문제에 들어가니 다음과 같은 파일이 나왔다.


코드를 분석해보니 check 버튼을 누르니 ch() 라는 JavaScript Function 이 실행되게 되어있었다.

indexOf() Function 은 indexOf("찾을 문자열") 과 같은 형식으로 사용하며,

결과를 숫자로 반환하는 데 해당 문자열이 없을 경우 -1 을 반환하고,

있는 경우 문자열의 시작 위치에 해당하는 index 를 반환하는 Function 입니다.



구글 개발자 도구 콘솔 창에서 document.URL 을 확인해보니 다음과 같이 나왔고,

.kr 이 시작하는 index 번호를 확인해보니 g 의 위치인 17 이였습니다.

17 * 30 을 해보니 510 이 나왔고 입력해보니 Password는 260100 이라는 Alert 창이 나왔습니다.


그래서 이걸 입력했지만! 고등학교때 풀었던 거라 이미 클리어..




'Hacking > Web Hacking' 카테고리의 다른 글

Suninatas 22번 문제  (0) 2018.09.20
Webhacking.kr 3번 문제  (0) 2018.09.18
Webhacking.kr 15번 문제  (0) 2018.09.18
Webhacking.kr 2번 문제  (0) 2018.09.18
Webhacking.kr 1번 문제  (0) 2018.09.18


들어가자 마자 Access_Denied 가 뜨더니 확인을 누르니 다음과 같은 키가 바로 나왔다가 원래 page 로 돌아갔다.

난 이러한 기회를 놓치지 않기에 빠르게 스크린샷을 찍고 키를 입력했다.


굉장히 기묘하게 푼 것 같아서 다른 방법으로 풀어보았다.

방법은 간단하게 Burp Suite 프록시 툴을 이용해서 절차별로 확인하면 된다.


끝!

'Hacking > Web Hacking' 카테고리의 다른 글

Webhacking.kr 3번 문제  (0) 2018.09.18
Webhacking.kr 14번 문제  (0) 2018.09.18
Webhacking.kr 2번 문제  (0) 2018.09.18
Webhacking.kr 1번 문제  (0) 2018.09.18
Suninatas 8번 문제  (0) 2018.09.09


이 문제는 Webhacking.kr 에서 500점인 문제인데 한 번 도전해보고 싶어서 해봤다.



게시판들을 보다가 코드를 까보니 admin이라는 페이지가 있어서 들어가봤다.

들어갔더니 다음과 같은 페이지가 나왔다.

당연히 비밀번호를 모르기에 찾아보던 중

mainpage 에서 아래와 같은 주석을 발견했다.


쿠키를 보니 time 이라는 이름의 쿠키가 있었다.



여기서 어떻게 해야되는 지 고민하다가 찾아보니 쿠키나 세션 또한 데이터베이스에 저장할 수 있다고 한다.

그래서 여기에 True/False 에 따른 변화를 보기 위해 다음과 같이 입력해보니

참일때에는 다음과 같이


주석 내의 시간이 이렇게 변했고,

거짓일때에는 다음과 같이

이렇게 변했다.


이 문제에는 암호를 입력해야 되는 페이지가 2개 있었는데

하나는 Board, 다른 하나는 Admin 이었다.

그래서 이걸 이용해서 이 둘의 password 를 알아내기로 했다.

일단 각 Password의 길이를 알아내기 위해 다음과 같은 방법으로 찾아보니

freeboard 는 9 글자, Admin 은 10 글자였다.



여기서 table 명은 board 페이지에 들어가면



이렇게 나와있어서 위와 같이 했고, admin 은 별다른 힌트가 없어서 admin 이라고 했다.

( 찾아보니 예전에는 힌트로 Table 명을 제공했다고 한다. )

( 이 외에 Table 명 Column 명을 알아내는 방법을 찾아봤는데 Union 으로 찾을 수 있다고 하는데 직접 해보니까 안 되서 그냥 안 했다. )


그래서 다음과 같은 사이트에서 코드를 가져와서 돌려봤다.

http://rootnix.in/80

코드는 다음과 같고


실행해보니 다음과 같이 20분 정도 걸려서 비밀번호가 나왔다.



admin page 에 비밀번호를 입력하니 다음과 같이 나왔고


Free Board 게시글에 비밀번호를 입력하니 다음과 같이 다운 받을 수 있는 파일이 나와서 다운을 받았다.



압축 해제를 하니 manual.html 의 암호를 입력하라는 창이 나왔고,

admin page 에서 얻은 암호를 입력하니 다음과 같은 html 파일이 나왔다.




manual.html 파일을 열어보니 다음과 같이 Auth Key 가 나왔다.



500점 짜리 성공! 



난이도 자체는 Suninatas 22번, 23번이랑 비슷한 것 같다.


프록시 툴 사용을 마쳤다면 원래대로 설정해놓자.




'Hacking > Web Hacking' 카테고리의 다른 글

Webhacking.kr 14번 문제  (0) 2018.09.18
Webhacking.kr 15번 문제  (0) 2018.09.18
Webhacking.kr 1번 문제  (0) 2018.09.18
Suninatas 8번 문제  (0) 2018.09.09
Suninatas 7번 문제  (0) 2018.09.07