54번 문제에 들어가자마자

딱 이거밖에 뜨지 않았다... 뭐지? 싶었는데

 

 

 

 

 

조금 있다가 갑자기 is 뒤에 알파벳이랑 숫자가 순식간에 슈슈숭 지나갔다.

잉? 뭐지? 하고 있다보니 다 끝나고 물음표만 남았다.

뭔가 그 지나간 알파벳과 숫자들을 순서대로 나열하면 password가 될 것 같은 직감이 들었다.

 

 

 

 

우선 소스코드부터 보기로 했다.

 

 

소스코드에는 첫 페이지에 나와있던 Password is 옆에 값이 계속 바뀌는데

자바스크립트로 된 소스로 ?m=0 부터 차례대로 그 페이지에 요청을 하여 값을 얻어서 우리에게 보여준다.

실제로 Paros로 잡아보면 m=0 ~ m=32 까지 값이 보내진다.

이 값들을 차례대로 연결시키면 32개의 문자열이 만들어지는데 이것이 인증코드가 된다.

 

 

 

 

하지만 너무 빨리 지나가기 때문에 육안으로는 한번에 받아적을 수가 없었다.

그래서 크롬개발자도구의 Network 탭을 이용하기로 했다.

 

Network 탭에서는 특정 페이지를 로드하면서 발생한 Network 요소들을 모두 보여주므로 이 문제를 풀기 위해 크롬개발자도구를 열어(F12) Network 탭을 열고 페이지 새로고침을 하면 위와 같은 모습을 확인할 수 있습니다.

 

 

 

Recording된 값들을 하나씩 확인해서 전부 다 이어본 결과 아래와 같은 문자열이 나왔다.

 

 

 

그리고 그 문자열을 Auth 페이지에 가서 입력하고 Submit 한다.

 

 

 

 

54번 문제 해결!

 

 

 

 

 

 

 

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

[웹해킹] 36번 문제  (0) 2017.09.04
[웹해킹] 38번 문제  (0) 2017.09.04
[웹해킹] 6번 문제  (0) 2017.05.01
[웹해킹] 4번 문제  (0) 2017.04.17
[웹해킹] 1번 문제  (0) 2017.04.17

아직 어려운 문제들은 이해하기 힘들 것 같아서 100점짜리 문제를 찾다가

눈에 띈 38번 문제를 선택!

 

38번 문제를 누르면 이런 페이지가 뜬다.

 

이것만 봐서는 아무것도 알 수가 없으므로 소스코드를 확인해보자

 

 

 

 

 

소스코드를 보니 Login 버튼을 누르면 값이 전달되고, Admin 버튼을 누르면 admin.php로 이동한다는 것을 알 수 있다.

 

 

 

 

그래서 처음 페이지로 돌아가 Admin 버튼을 눌러보니 이런 페이지가 떴다.

뭔가 ip주소를 나타내는 것 같은데 무엇인고?

 

 

 

그래서 다시 원래 페이지로 돌아가 먼저 login이라고 쓰고 Login버튼을 눌러봤다.

아무 변화가 없다..

그래서 admin 이라고 쓰고 다시 버튼을 눌러봤더니

나는 admin이 아니라고 알려준다.

 

 

 

 

 

그리고서 다시 Admin 버튼을 눌러보았더니 내가 썼던 login이라는 단어가 생겼다.

(admin을 넣고나서 확인한건 캡쳐하는걸 깜빡함..ㅎ)

 

 

 

 

먼저 내 ip주소로 추정되는 121.133.112.99:login을 넣어서 Login버튼을 눌러봤는데 무쓸모...

그래서 121.133.112.99:admin을 넣었더니

 

 

웬걸? 성공했다.

 

 

 

 

 

*추가 내용*

 

Log Injection



 

log injection이란 sql injection처럼 파라미터를 통해 로깅을 조절하는 방법을 말합니다


 

보통 웹 어플리케이션에서 log4j 등을 이용해 파일에 로깅을 합니다

일반적으로는 장애 발생시 에러 추적을 위해 사용됩니다

하지만 데이터 유실시 복구 방침으로 로깅을 하기도 하고요, 그냥 말 그대로 그냥 로깅을 하기도 하지요 또한 로그 파일을 파싱하여 무언가 통계를 내기도 합니다(웹CRM)


 

일반적으로 로그인에 대한 로깅을 파일에 다음과 같이 합니다 (로그인예가 아니더라도..)

String userid = request.getParameter("userid");

...

if (로그인성공)

    log.write("User login succeeded for : " + userid);

else

    log.write("User login failed for : " + userid);


 

로그가 정상적으로 기록된다면 아마 다음과 같은 형태가 될겁니다

User login succeeded for : guest

User login succeeded for : admin


 

그렇다면 로그인시 다음과 같은 문자열을 입력했으면 어떻게 될까요?

guest\nUser login succeeded for : admin


 

그럼 로그 결과는 다음과 같이 출력됩니다

User login succeeded for : 

guestUser login succeeded for : admin

User login succeeded for : admin

붉은색 부분이 사용자가 입력한 부분이죠



출처: http://www.hides.kr/46 [Hide]

 

 

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

[웹해킹] 36번 문제  (0) 2017.09.04
[웹해킹] 54번 문제  (0) 2017.09.04
[웹해킹] 6번 문제  (0) 2017.05.01
[웹해킹] 4번 문제  (0) 2017.04.17
[웹해킹] 1번 문제  (0) 2017.04.17

 

1번, 4번을 풀고 다음 문제는 6번!!

 

생전 처음 접하는 해킹 문제에 정신이 아득해진다... ㅎㅎ

 

 

 

 

 

어찌됐든 6번 문제를 클릭해보니 이런 화면이 떴다.

맨 위에 힌트가 base64인것을 보니 인코딩이나 디코딩을 이용해야하는 문제인 것 같다.

화면을 한번 살펴보고 저 눌러달라고 말하는 듯한 밑줄 쳐진 index.phps를 클릭해봤다.

 

 

 

 

 

 

 

index.phps를 클릭했을 때 뜬 코드다.

 

일단 solve 부분을 보면 decode_id 값과 decode_pw 값이 admin이면 문제가 해결된다고 나와있다.

그리고 아까 맨 처음 화면에 출력된 부분을 보면 ID는 guest이고 PW는 123qwe라고 출력돼 있는 것을 알 수 있다.

다시 소스를 보면 현재 출력된 ID와 PW는 decode_id와 decode_pw를 20번  디코딩한 값이라고 볼 수 있고 decode_id와 pw는 쿠키값 user와 password에서 받아오는 것을 알 수 있다.

 

최종으로 디코딩된 값이 admin이어야 하므로 디코딩하기전의 decode_id와 pw는 admin을 인코딩한값이어야 한다.
for문을 이용해 20번을 디코딩하므로 decode_id와 pw에는 admin을 20번 인코딩한 값이 들어가야 한다.

 

 

 

 

 

 

 

각각 id와 password의 쿠키값이다.

 

 

 

 

 

 

 

이제 다시 webhacking.kr 홈페이지로 돌아와 Memo란에 guest를 넣어주고 ->base64를 20번 눌러준다.

 

 

 

 

 

 

123qwe도 똑같이 해준다.

 

그리고 그 결과를 다시 index.phps로 돌아가 각각 id와 password의 쿠키값에 넣어준다.

 

 

 

 

 

짜잔~!! 6번 문제 해결★☆

 

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

[웹해킹] 54번 문제  (0) 2017.09.04
[웹해킹] 38번 문제  (0) 2017.09.04
[웹해킹] 4번 문제  (0) 2017.04.17
[웹해킹] 1번 문제  (0) 2017.04.17
[웹해킹] 회원가입 및 로그인  (0) 2017.04.13

+ Recent posts