SQL injection/webhacking

webhacking 4번

ys.k 2022. 3. 8. 03:07

포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.

4번 페이지다.

음.. 일단 소스코드를 보자.

if조건문과 hash가 있다.

hash는 10,000,000과 99,999,999 사이에서 랜덤 하나를 추출해 salt_for_you와 합쳐준 값이다.

그리고 그걸 chall4_session에 넣어준 후 500번 sha1로 인코딩해준다.

isset함수를 알아보자.

isset(a) // a변수가 설정이 되었으면 true, 아니면 false 반환해준다.

chall4 값이 존재하고, post로 key값을 받아 session chall4와 일치하면 문제가 풀린다.

그리고 웹페이지에 보이는 값은 500번이 sha1인 코딩된 문자열이다..

sha1은 단방향 암호로 원문을 알아낼 수 없다...

그 말은 이 문제가 아주 오랜 시간이 걸린다는 것을 의미한다. ㅋㅋㅋㅋ

 

이 문제를 풀기 위해서 나는 문제를 2개로 나눴다.

1. 9000만 개에 달하는 데이터 만들기 (사전 만들기->레인보우 테이블)

2. 현재 웹페이지 hash의 사전 검색 공격 기법

두 개의 과정으로 나눈 이유는 webhacking.kr은 로그인 상태여야 문제를 풀 수 있는데, 비교하다가 로그아웃되어 해쉬가 바뀌어버리기라도 한다면 대참사다..

시작해보자

 

코드는 간단할수록 좋다.

이제 오늘은 여기까지 하고 레인보우 테이블이 만들어질 때까지 기다려야겠다.

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

누워있다가 너무 찜찜해서 풀고 자려고 왔다.

일단 그동안 약 500만 개의 데이터가 축적되었다.

전체의 5.56%에 해당하는 양이다.

어차피 쓰고 지울 파일이니 많이 추출해봤자 좋을 게 없다고 생각이 들었다.

이제 정답률은 5.56%이다. ㅋㅋㅋㅋㅋ

첫 번째 시도-실패

두 번째 시도-실패

체감상 50번을 했는데 안 나왔다.

내가 코드를 잘못 만든 건지 슬슬 불안해지던 찰나에 메모장에서 검색을 잘못하고 있었다..

다행이다..

그리고 값을 바로 찾았다.

혹여나 시간을 버렸나 긴장하고 있던 찰나에 값이 찾아져서 기분이 좋다.

찾은 값의 숫자 뒤에 salt_for_you를 붙여서 제출해준다.

문제 해결!!!!!!

 

추후 자바의 멀티 스레드를 사용하여 레인보우 테이블의 제작 비용과, blind sql의 비용을 줄여보도록 해야겠다.

시행착오

1. isset()과 $_post에 대해서 배웠다.

2. python으로 sha1 인코딩 방법과 파일 입, 출력에 대해 배웠다.

3. 레인보우 테이블의 개념에 대해서 배웠으며 제작, 사용까지 해보았다.

4. 단방향성 암호는 레인보우 테이블을 통해 뚫을 수 있다.

5. 이번 문제로 해킹에대한 생각이 재정리 되었다. 오래걸리더라도 방법만 존재하면 해야한다.

6. sha1인코딩 문자열의 특징은 각 자리가16진수인 40자리 문자열이다.