본문 바로가기
Write Up/webhacking.kr_old

Webhacking.kr Challenge(old)_2번문제_part1

by 비원(Be one) 2019. 11. 20.
반응형

여러분 안녕하세요. 세이버입니다.

 

이번 강에서는 Webhacking.kr Challenge old 2번 문제를 풀어보겠습니다.

 

과거의 2번 문제와 비슷한 유형이니 기존의 강의를 보고 오셔도 푸실 수 있습니다.

 

Webhacking.kr 문제풀이_Part3_2번 문제 : https://poci.tistory.com/54

 

Webhacking.kr 문제풀이_Part3_2번 문제

여러분 안녕하세요. POCI입니다. 이번 시간에는 Webhacking.kr의 2번 문제를 풀어보도록 하겠습니다. 1. 사이트 둘러보기 2번 문제에 들어가시면 'BEISTLAB FOR SECURITY'라는 사이트가 나옵니다. 한번 사이트..

poci.tistory.com


1. 문제 파악하기

2번 문제를 클릭합니다.

 

데이터베이스 마크가 있는 걸로 보아 데이터베이스와 관련된 문제인 거 같습니다.

 

2번을 클릭하면 'Restricted area'라는 제목과 글이 적혀있는 창으로 이동합니다.

 

클릭되는 것도 없고, 더 이상 확인할 것도 없으니 페이지의 소스코드를 확인해봅시다.

 

4줄의 간단한 코드가 쓰여있습니다.

마지막에 주석으로 써인 if you access admin.php i will kick your ass가 저를 흥분시키네요.

(전 그런 취향이 아니에요...)

 

admin.php로 이동하면 비밀번호를 입력하는 창이 나옵니다.

지금은 비밀번호를 모르니 일단 패스합시다.

 

이제 남은 단서는 주석에 적힌 시간입니다. 하지만 시간으로 뭐 어쩌라는건지 모르겠습니다.

 

2. 쿠킷값 알아보기

단서를 찾기 위해 EditThisCookie를 이용해서 쿠키의 값을 확인해봅시다.

 

EditThisCookie의 다운법과 사용법은 1번 문제풀이를 참고하세요.

Webhacking.kr Challenge(old)_1번문제 : https://poci.tistory.com/98 

 

Webhacking.kr Challenge(old)_1번문제

여러분 안녕하세요. 세이버입니다. 2019년 9월 webhacking.kr의 사이트 운영자분이 바뀌면서 몇 가지 문제들과 UI가 변화되었습니다. 오랜만에 문제를 풀기 위해 들어가 봤는데 사이트가 팔린 줄 알았습니다. 검..

poci.tistory.com

쿠킷값을 확인하니 time 쿠키가 있습니다.

 

이걸 보고 주석에 적힌 시간이 중요한 키워드라는 걸 알 수 있습니다.

 

그래서 값을 1로 바꿔보았습니다. 그랬더니 주석 부분의 시간이 바뀐 걸 확인할 수 있습니다.

 

2를 입력해보았습니다.

 

시간의 초 부분이 2로 바뀌었습니다.

자연수는 참이라는 의미이기에 참인 값을 입력하면 시간의 초 부분이 입력한 값으로 바뀌는 것을 알 수 있습니다.

 

거짓을 의미하는 0도 한번 입력해봅시다.

 

0을 입력하면 엉뚱한 코드가 나와서 시간 확인이 불가능합니다. 심지어 쿠킷값도 초기화됩니다.

아마 거짓일 때의 주석 부분을 일부러 안 보여주게 하려는건가 봅니다.

 

그럼 거짓일 때의 주석 부분은 어떻게 알 수 있을까요?? 한번 SQL Injection 공격을 해보겠습니다.

SQL Injection 공격에 대한 설명은 아래 링크를 확인해주세요.

https://poci.tistory.com/49

 

SQL Injection 공격

SQL Injection 공격은 웹해킹에서 가장 많이 쓰이는 공격 기법 중 하나입니다. SQL와 Injection(주입하다)의 합성어로, SQL를 주입하는 공격이라는 의미입니다. SQL Injection 공격은 아이디, 비밀번호를 적는 란..

poci.tistory.com

SQL 공격으로 거짓인 구문을 입력하면 초부분이 0으로 출력됩니다.

 

즉, time 쿠킷값이 참일 경우는 초 부분이 쿠킷값과 일치하게 되고, 거짓일 경우는 09:00:00으로 나오게 된다는 것을 알 수 있습니다.

 

3. Blind SQL Injection 공격

이처럼 SQL문에 대하여 참과 거짓의 대답이 있을 경우에는 Blind SQL Injection 공격을 할 수 있습니다.

Blind SQL Injection 공격에 대한 설명은 아래 링크를 참고해주세요.

https://poci.tistory.com/52

 

Blind SQL Injection 공격

저번에 SQL Injection 공격을 설명드렸습니다. SQL Injection 공격 : https://poci.tistory.com/49 SQL Injection 공격 SQL Injection 공격은 웹해킹에서 가장 많이 쓰이는 공격 기법 중 하나입니다. SQL와 Inject..

poci.tistory.com

예전 사이트의 2번 문제는 힌트로 DB명과 테이블명을 알려줬었는데, 이번 사이트에서는 안 알려줬더라고요...

그래서 정공법으로 해봤습니다.

 

노가다의 시작

먼저 테이블의 이름을 알아야 합니다.

select count(table_name) from information_schema.tables where table_schema=database()

이 SQL문은 현재 위치한 데이터베이스의 테이블의 수를 검색하는 구문입니다.

 

09:00:02가 나온 걸로 보아 테이블의 개수가 2개임을 알 수 있습니다.

그럼 이제 테이블의 이름을 알아보죠

 

select length(table_name) from information_schema.tables where table_schema=database() limit 0, 1

이 SQL문은 현재 위치한 데이터베이스의 테이블 중 첫 번째 테이블명의 길이를 검색하는 구문입니다.

 

첫 번째 테이블은 13자리임을 알 수 있습니다.

 

이제 여러분은 선택하셔야 합니다.

노가다로 한 글자씩 검색을 할 건지, 파이썬으로 웹크롤링을 할 건지

 

저는 웹크롤링 코드까지 썼지만... 네트워크 오류로 결국 노가다를 했습니다.

 

select ascii(substring(table_name, 1, 1)) from information_schema.tables where table_schema=database() limit 0,1

이 SQL문은 현재 위치한 데이터베이스의 테이블 중 첫 번째 테이블명의 첫 번째 단어를 아스키코드로 출력하는 구문입니다.

 

1분 37초는 97초입니다. 즉, 아스키코드가 97인 'a'가 첫번째 단어입니다.

 

그다음에는 select ascii(substring(table_name, 2, 1)) from information_schema.tableswhere table_schema=database() limit 0,1 입력해서 두 번째 단어를 알아냅니다.

 

 

100초가 나왔으니 아스키코드가 100인 'd'가 두 번째 단어입니다.

 

이런 방법으로 13번째 단어까지 모두 알아내시면 됩니다.

여러분들이 직접 하시라는 의미로 테이블명은 공개하지 않겠습니다.

 

select length(table_name) from information_schema.tables where table_schema=database() limit 1, 1

이 SQL 구문을 입력하면 두 번째 테이블명의 길이가 나옵니다.

 

다행히 3글자로 짧은 편이네요.

 

select ascii(substring(table_name, 1, 1)) from information_schema.tableswhere table_schema=database() limit 1,1 (첫 번째 단어 검색)

select ascii(substring(table_name, 2, 1)) from information_schema.tableswhere table_schema=database() limit 1,1 (두 번째 단어 검색)

이렇게 한 단어씩 검색하시면 테이블명을 알 수 있습니다.

 

너무 노가다가 길어져서 이번 강의는 여기까지 하고 다음 강의에서 이어가도록 하겠습니다.

 

크롤링 코드는 직접 만들어 보심을 추천드립니다.


이번 강의는 여기까지입니다.

 

오늘도 수고하셨습니다.

 


정리

EditThisCookie를 이용하여 쿠킷값을 변조해서 Blind SQL injeciton을 수행한다.


강의가 유익하셨거나 마음에 드셨으면 구독과 좋아요, 댓글 부탁드립니다.

궁금하신 점이나 질문은 댓글이나 메일 남겨주세요.

 

poci5003@gmail.com

 

 

 

 

 

 

반응형