old challenge 47번 문제 풀이입니다.

 

 

 

Mail subject라는 부분이 보입니다.  그냥 send를 눌러봅니다.

 

 

 

메일이 보내진 모양입니다. Receiver가 no-existed@webhacking.kr 로 고정인 모양입니다. 내용에 flag가 있고요.

 

Mail Header Injection인  것 같으니, Textarea로 바꿔서 Cc: 항목에 제 이메일을 넣어줍시다.

 

Cc에 제 메일이 추가되었습니다.

 

Cc는 메일에서 참조를 뜻합니다.

 

제 메일함에 가보겠습니다.

 

 

메일을 통해 플래그를 받았네요.

 

CR-LF Injection으로 Mail Header Injection을 해봤습니다.

 

플래그 내용을 봐서는, Rubiya님이 이 이메일 보내는 문제 환경 만드는데 시간을 많이 쓰신 것 같습니다 ㅎ.

old 38번 문제입니다. 뭐 문제에서 대놓고 LOG Injection이라고 써있습니다.

 

 

아무거나 쓰고 login눌러봅시다.

 

아무 반응이 없습니다. 소스보기를 해보겠습니다.

 

 

 

admin.php로 가달라고 써있네요.

 

 

로그뷰어라고 써잇고, admin으로 로그를 써야한다고 합니다.

 

첫 페이지에서 버튼 이름이 login인 것으로 봐서 그 부분에 아이디를 넣는것인가 봅니다.

 

 

 

가장 아래에 제가 썼던 값들이 나타나있네요, 아이피도있고요.

 

첫 페이지에서 admin이라고 쳐보겠습니다.

 

 

 

막혀있네요.

 

로그가 아래로 쌓이는 것으로 보아, \r\n 인젝션이 가능할 것 같습니다. (Carrige Return, Line Feed)입니다.

 

(질문이 들어와서 추가적인 설명을 덧붙입니다.)

여기서 CR-LF 인젝션에 대하여 조금 더 부가적인 설명을 해 보도록 하겠습니다.

https://www.owasp.org/index.php/CRLF_Injection

 

CRLF Injection - OWASP

This is a Vulnerability. To view all vulnerabilities, please see the Vulnerability Category page. Last revision (mm/dd/yy): 03/14/2018 Vulnerabilities Table of Contents Description The term CRLF refers to Carriage Return (ASCII 13, \r) Line Feed (ASCII 10,

www.owasp.org

보통 CR-LF Injection이라고 하면 HTTP 패킷에 개행 문자를 넣어서 HTTP 응답값의 파라메터 변조를 하는 HTTP Response Split 같은데에 사용되는데, 여기서는 개행문자 끼워넣기 공격이라고 보시면 됩니다.

 

CR-LF는 리눅스에서 개행 문자, 즉 다음 줄로 바꾸는 줄바꿈 문자가 Carriage Return문자 + Line Feed 문자인데, 이를 줄여서 CR-LF라고합니다.

 

HTTP 패킷에서 파라메터들을 구분하는 문자열이기도 합니다.

 

admin.php에 로그가 쌓이는 형식을 보면

 

[ip주소1]:[아이디2]

[ip주소2]:[아이디2]

...

 

이러한 형식이 쌓입니다.

 

만약 내 아이피 주소가 192.168.0.123이라고 한다면

 

192.168.0.123:admin

 

이러한 값을 넣고 싶은데, 입력값에서 admin이라는 문자열을 필터링 하기 때문에 admin이라는 값을 넣을 수는 없습니다.

 

하지만 우리가 입력한 값이 guest\r\n192.168.0.123:admin 이라면, 다음과 같은 값이 입력되게 될 것입니다.

 

 

192.168.0.123:guest\r\n192.168.0.123:admin

 

여기서 \r\n는 개행문자, 즉 줄바꿈 문자를 뜻하므로 결과적으로 다음과 같은 모양이 됩니다.

 

192.168.0.123:guest

192.168.0.123:admin

 

첫줄에는 guest라는 계정으로 로그인 되었지만, 두번째 줄에는 admin계정으로 로그인 된 것처럼 로그가 남게 됩니다.

 

 

그러면 계속해서 진행해보도록 하겠습니다.

 

버프슈트 쓰기가 귀찮기 때문에 input text 항목을 textarea로 바꾼 뒤 CR-LF 인젝션을 해보겠습니다.

 

Login을 누른 뒤 admin 페이지에서 리프레쉬를 해주면

 

풀립니다.

 

대충 로그가 다 날라가버리네요.

old 42번 문제입니다.

 

소스보기를 해보겠습니다.

 

flag.docx는 access denied가 뜨게 되어있습니다.

 

근데 test.txt를 다운받는 부분을 보면 ?down=~~라고 뒤에 있는부분이 딱봐도 base64 인코딩된 녀석같이 생겼습니다.

 

저걸 decode해보면,

 

역시나였습니다...

 

 

따라서 링크를 ?down=ZmxhZy5kb2N4 로 이동하면 docx파일이 받아집니다.

 

받은 파일을 열면 플래그가 있습니다.

old-58번 문제입니다.

 

문제 들어가면 뭐 콘솔창 같은게 나오는데, ls나 이런걸 대충 때려봅니다.

 

ls라고 치니 index.js가 나옵니다.

 

flag라고 명령어를 쳐 보니,

admin only라고 나옵니다.

 

소스보기를 해보겠습니다.

 

 

 

socket.io로 서버와 비동기 양방향 통신을 하는데, var username에 보면 guest로 되어있고, 소캣을 쏠 때, guest:command 양식으로 쏩니다. 저 guest를 admin으로 바꾸어보도록 하겠습니다.

 

소캣을 쏘니, 플래그가 옵니다.

old challenge 54번 문제입니다.

 

링크를 누르면 Password is ~~하면서 한글자씩 값이 나옵니다.

촤라라라라~

뛰어난 동채시력과 순간 기억능력으로 모조리 다 받아서 이어 붙여주면 좋겠지만, 안타깝게도

 

우리 해커들과 해커 지망생들은 그런 능력이 없습니다.;;;;

 

일단 소스코드 보기를 보겠습니다.

 

 

뭐 activeX Object나 XHR같은걸로 비동기로 값을 쏴서 받아온 뒤 그려주는 방식인 것 같은데, 귀찮기 때문에 저 코드 값을 조금만 바꾸는 식으로 동작을 해보도록 하겠습니다.

 

answer 함수를 조금 바꾼 뒤 다시 동작시키면, flag를 다 보여주겠지요.

 

요러코롬 바꿔줍니다. 그리고 콘솔에 넣어서 다시 실행시킵니다.

 

Password is ? 라고 떠잇는 상태, 즉 다 끝난 뒤에 해야 합니다.

 

 

대충 한글자씩 추가가 됩니다.

 

완료되었습니다. 끝~

 

?를 때고 Flag{} 포맷만 가져가면됩니다.

old-6번 문제입니다.

 

바로 소스부터 보겠습니다.

 

밑부분에 solve(6);를 호출하는 부분을 보니, 각각 id/pw가 admin/nimda가 되면 됩니다. 그리고 이 값은 쿠키를 통해 입력을 주는데, base64 인코딩을 20번을 해야하고, 그리고 12345678 숫자들을 각각 !@$^&*()로 치환해준 값을 쿠키로 줘야 합니다. 해당 값을 만드는 js를 코딩해보겠습니다.

 

크롬 js 콘솔에 입력해서 결과를 보겠습니다.

 

 

uri encoding도 해줍시다.

흠. 어마무시하네요. 어쨋든 저 값으로 쿠키를 설정해서 요청을 보내면 풀립니다.

 

 

Old-36번 문제 풀이입니다. 문제로 들어가면 다음과 같이 나옵니다.

 

 

vi 편집기를 쓰다가, 파일이 날라갔다는 뭐 대충 그런내용입니다. 그렇다는 것은 swap 파일을 이용해서 복구가 가능하겠지요.

 

index.php 파일을 수정중이던  swap파일이면 파일 이름이 .index.php.swp 일 것입니다.

 

 url에 쳐서 다운받아봅시다. (https://webhacking.kr/challenge/bonus-8/.index.php.swp)

 

 

파일을 HxD 헥스 에디터로 열어보니 맨 마지막에 다음과 같은 글귀가 있습니다.

 

 

 

 

FLAG값을 가져다 쓰면 되겠네요.

새단장한 rubiya님 webhacking.kr의 old challenge 5번 문제 풀이입니다.

 

문제에 들어가면 까만 화면에 두개 버튼만 나옵니다.

일단 소스보기를 한번 보겠습니다.

대충 보니, 로그인버튼은 mem/login.php로 이동시키는데, 회원가입 버튼은 Access Denied라는 알럿 창이 뜨게 되어있습니다.

 

일단 로그인 창으로 넘어가서 admin이나 guest 계정으로 아무 패스워드나 쳐서 로그인 시도를 해보겠습니다.

admin/admin으로 로그인 시도를 할 시, wrong password가 뜹니다.

 

아무 아이디나 막 쳐도 Wrong password가 뜨게 되어있습니다.

 

느낌상 join 페이지를 알아내서 거기서 join을 해야 할 것 같습니다.

 

mem/join.php 로 이동을 해 보았는데 

뭐 이런 alert이 뜨고 아무 것도 안나옵니다.

 

소스코드를 한번 보겠습니다.

대충 난독화된 js가 있는 것 같은데, 내용 분석을 한번 해보겠습니다.

 

js beautifier에 보내서 코드를 조금 이쁘게 정리해보겠습니다.

https://beautifier.io/

 

Online JavaScript beautifier

 

beautifier.io

 

 

if문에 잇는 조건문들을 한번 찾아보겠습니다.

대충 보면 document.cookie에 oldzombie라는 문자열이 없거나, document.URL에 mode=1라는 문자열이 없으면 나가리시킨다는 내용입니다.

 

쿠키값을 한번 주고, url에 해당 부분을 추가해 보겠습니다.

쿠키값을 추가하고, url에 ?mode=1을 달아보겠습니다.

기특하게도 나타났습니다.

 

이제 admin으로 회원가입을 해봅시다.

 

아이디가 중복이라고 나옵니다.

회원가입 요청 시 admin뒤에 공백 여러개와 맨 끝에 NULL 문자를 넣어서 회원가입을 해보겠습니다.

 

회원가입 성공이라고 뜹니다.

 

이후 가입한 admin/asdf로 로그인을 시도해보도록 하겠습니다.

 

예전에 풀었었기에 already solved가 뜹니다.

 

Clear!

새단장한 webhacking.kr의 Old challenge 3번문제 풀이입니다.

 

링크로 들어가면 다음과 같은 페이지가 나옵니다.

그냥 solved를 눌러보니,

뭔가 복잡한 url query 파라메터가 나오곤 No라고 뜬 뒤 원래 페이지로 돌아가게 됩니다.

 

뭔가 스도쿠같이 생긴것 같아서 한번 풀어보도록 하겠습니다.

 

판때기가 크지 않기 때문에 스도쿠를 풀기는 쉬워보입니다.

우선 가장 아래줄은 5라고 되어있는데, 5x5 스도쿠이기 때문에 다 눌러버리면 됩니다.

 

그리고 중간 위쪽을 보면 1 1 1로 되어 있는데, 5칸 중 1 1 1이 되려면 O X O X O 방식으로 색칠하는 방법의 수 밖에 없습니다.

 

마찬가지로 왼쪽 가장 윗 줄 도 1 1 1이므로 1가지 경우의 수 밖에 나오지 않습니다.

 

칠한 모습입니다.

 

그리고 위쪽에 3이 두개가 있는데 둘다 마지막 칸에 붙어서 나올 수 밖에 없습니다. 한 덩어리뿐이기 때문입니다.

해당 부분까지 그려주면 모든 조건이 다 만족된 것 처럼 보입니다. 이대로 solved를 눌러봅시다.

이런 페이지가 나타납니다.

 

test라고 작성한 뒤 submit을 눌러보겠습니다.

위와 같은 페이지가 나타나게 됩니다.

 

내용이 db에 입력될 것 같으니 sqli의 영원한 친구 'or 1=1-- 를 입력해 보았습니다.

 

이스케이프가 된 채로 값이 입력이 되었습니다.

answer 값에 sqli를 시도해보기 위해서 hidden 값을 바꾼 뒤 제출해 보겠습니다.

query error라는 값이 나타납니다. injection point가 맞는 것 같습니다.

 

sql injection에서 테스트할때 많이 쓰는 input인 'or 1=1-- 를 answer값에 넣어서 한번 요청해보도록 하겠습니다.

 

burp suite를 이용해서 요청을 보내보면

 

오른쪽을 보면 already solved가 뜨게 됩니다. 이미 한번 푼 뒤 다시 풀기 때문에 저렇게 나옵니다.

 

 

+ Recent posts