[SuNiNaTaS(써니나타스)] 2번 문제 풀이


오늘은 2번 문제를 풀었다. 사실 9번을 풀려고 했으나, 2번과 3번을 빼놓고 문제를 풀면 빈 공간이 생기는 찝찝함 때문에 2번을 풀게 되었다.

(문제 목록)

 

 

2번 문제를 들어가면 아래와 같은 화면을 보게 된다. 'ID'와 'PW'를 입력해서 'Join' 버튼을 누르는 것 같다. 이 화면만 보기엔 아무것도 얻을 수 없기에 페이지 소스코드를 확인해 봤다.

(2번 문제)

 

 

'F12'를 눌러서 소스코드를 확인해 보니, 힌트가 바로 보였다.

Hint : Join / id = pw

힌트를 보면 id와 pw가 같다고 한다. 그래서 한번 같은 값을 넣어봤다.

(힌트!)

 

 

'ID'와 'PW' 값에 동일한 값 1 을 넣어봤는데 아래와 같은 팝업창이 보였다. 내가 무엇을 놓치고 있는 것 같았다. 그래서 다시 페이지 소스코드를 들어가서 놓치고 있는 부분을 다시 확인해봤다.

(잘못된 접근 방법)

 

 

스크립트를 확인해보니 'chk_form()'이라는 함수가 있었다. 해당 소스를 해석해보면 id와 pw이 같은 값일 시 아까 팝업창으로 보았던 "You can't join! Try again" 문구가 출력될 것이고, 다른 값일 시 문제가 풀리는 것이다.

(chk_form 함수)

 

 

아까 힌트에서는 id와 pw 값이 같을 경우라고 했고, 스크립트에선 다를경우 문제가 풀린다고 했다. 그러면 우회하는 방법을 통해서 문제를 풀어야 한다. 나는 'F12'에 있는 'Console' 기능을 이용했다.

우선 'ID'와 'PW' 값에 동일한 숫자(1)를 넣고 'Console'창에 "document.web02.submit()"을 입력한 다음 엔터를 눌렀다.

1. ID와 PW에 동일한 값을 입력

2. Console 창에 "document.web02.submit()" 입력

3. 엔터(Enter)

(문제 풀이)

 

 

해당 방법으로 키값을 쉽게 구할 수 있었다.

(키 값 획득!)

 

 

곧바로 키값을 입력하니 아래와 같은 팝업창으로 축하해주었다.

(문제 해결!)

 

 

점수 획득! 점수가 올라가는 것을 보니 뿌듯함도 밀려온다!

(점수 획득!)

 

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

[SuNiNaTaS(써니나타스)] 8번 문제 풀이


오늘 문제는 8번 문제를 풀었는 데, 많은 고생이 있었다.

(문제 목록)

 

 

8번 문제를 들어가면 아래의 화면처럼 ID와 PW를 입력하라는 창이 존재한다. 정말 8번 문제 화면에는 이것만 존재해서 바로 페이지 소스코드를 확이해봤다.

(8번 문제)

 

 

페이지 소스코드를 확인해보면 힌트가 나와 있다.

"Hint : Login 'admin' Password in 0~9999"

ID가 'admin'이고 PW가 0부터 9999 중 하나인 것 같았다.

(힌트)

 

 

ID 창에 'admin'을 PW 창에 0부터 9999까지 손으로 입력하기가 힘들어서 'Burp Suite(버프 스위트)' 툴을 이용하기로 했다.

'Burp Suite(버프 스위트)' 설치 및 설정 방법은 아래의 링크를 참고하면 된다.

https://200301.tistory.com/7

 

[Burp Suite (버프스위트)] 설치 및 설정 방법

[Burp Suite] 설치 방법 오늘은 어제 "Suninatas(써니나타스) 4번 문제"에서 사용했던 [Burp Suite]에 대한 설치 방법에 대해 설명하고자 합니다. 아래의 링크는 어제 내가 풀었던 링크를 걸어놨습니다. https://2..

200301.tistory.com

 

 

처음에 ID에 'admin'을 PW에 '1'을 집어넣고 버프스위트를 실행시킨다. 그 다음 아래의 화면처럼 우측클릭 후 'Send to Intruder'을 선택한다.

(PW을 0 부터 시작 안한 이유가 처음에 0을 집어 넣었을 때, 값이 아니라고 했기 때문이다.) 

 

 

그 다음 "Intruder" 창에 들어오면 "Payloads" 부분에 들어온다. 거기서 Payload type 에서 "Numbers"로 바꾸고, Payload Options에서 From, To, Step 부분을 설정해준다.

From : 처음 숫자

To : 마지막 숫자

Step : 몇개씩 숫자를 증가 시킬 것인가?

(설정!)

 

 

그 다음 "Positions"으로 돌아와서 'Start attack'을 눌르면 된다. 여기서 주의해야 할 점은 ∮(이거..? 비슷한걸 못찾았네...)을 지워야한다는 것이다. PW의 값만 제외하고!

 

 

그러면 버프 스위트가 자동으로 값을 1씩 증가시키면서 PW에 대입하는 것을 볼 수 있다.

 

 

이렇게 0부터 9999까지 자동으로 넣어주고 나서 Request와 Response를 확인해보면 정답을 찾을 수 있다. "Response"에 "Raw"를 들어가면 대부분 'Password Incoorrect' 출력되지만, 정답일 경우 'Authkey'값이 출력된다.

이 과정이 정말 많은 시간을 요구했다.... 좀 더 편한 방법을 찾아봐야 할 것 같다.

(정답확인)

 

 

Authkey값을 그대로 넣어주면 문제가 해결된다.

(문제 해결!)
(점수 획득!)

 

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

 

[SuNiNaTaS(써니나타스)] 5번 문제


오늘은 'Suninatas(써니나타스)' 문제를 풀기로 했다. 매번 100점 문제들만 풀다 보니 실력이 늘지 않는 것 같아서, 오늘은 4번 옆에 있는 301 point 5번 문제를 풀기로 했다. 1번부터 5번까지 보면 4번까지는 100점대인데 5번만 300점대이다. 처음에는 살짝 겁이 났지만 그래도 할 수 있을 거라 생각했다.

(문제 목록)

 

 

5번 문제를 들어가면 아래의 사진처럼 'Check key Value' 라고만 나와있었다. 문제를 처음 접했을 때 생각은 네모 박스 안에 올바른 key 값을 넣으면 되는 것 같았다. 그럼 이제 키값을 넣어야 하는데 화면에는 아무것도 없으니 'F12'을 눌러 화면 자체의 코드를 확인해보았다.

(5번 문제)

 

 

소스코드를 확인해보니(아래의 사진) 힌트로 숫자 '12342046413275659'가 보였다. 이것을 이용해서 문제를 해결하는 것 같다.

(사실 이 값을 그대로 네모박스에 넣어봤다.... 힌트라고 그래서.... 하지만 아무 일도 일어나지 않았다ㅜㅜ)

(힌트~)

 

 

주석으로 힌트처리된 거 말고 제대로 된 소스코드를 확인해보고자 숨겨져 있는 코드들을 확인하기 시작했다. 그랬더니 아래의 사진처럼 복잡해 보이는 스크립트가 존재했다. 이것을 보고 해석하려고 했지만 실력이 없어서 무슨 소리인지 한참을 들여다보았다.

(스크립트 소스코드)

 

 

한참을 봐도 무슨 소리인지 몰라서 머리가 지끈거릴 때, 아래에 'Authkey'값에서 힌트를 얻었다. 'Unpacking JavaScript'라는 힌트를 통해 해당 소스코드가 'Packing'되어 있다는 걸 깨닫고 문제를 풀었다.

(Unpacking JavaScript)

 

 

해당 스크립트가 'Packing' 되어 있으니 'Unpacking'을 시도해줘야 한다. 나는 그래서 대신 'Unpacking' 해주는 사이트를 이용하기로 했다. 아래 사이트가 대신해주는 사이트이다.

https://www.strictly-software.com/unpacker#unpacker

 

Unpack Javascript - Strictly Software

// Create a get elements by class name function document.getElementsByClassName = function(clsName){ var retVal = new Array(); var elements = document.getElementsByTagName("*"); for(var i = 0;i < elements.length;i++){ if(elements[i].className.indexOf(" ")

www.strictly-software.com

 

 

스크립트에 있는 소스코드를 긁어와서 'Unpack'을 눌러주면 숨겨져 있는 소스코드를 확인할 수 있다.

('Unpakcing' 하는법)

 

'Unpacking'한 소스코드는 아래와 같다. PASS함수를 이용하라고 하는데, 5번 문제 소스코드에서는 PASS함수가 보이지 않았다. 그러면 PASS함수 안에 힌트 값을 넣으면 문제가 풀리지 않을까 생각했다.

var digitArray = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f');
function PASS(n) {
	var result = '';
	var start = true;
	for (var i = 32; i > 0;) {
		i -= 4;
		var digit = (n >> i) & 0xf;
		if (!start || digit != 0) {
			start = false;
			result += digitArray[digit]
		}
	}
	return (result == '' ? '0': result)
}

 

 

그래서 'F12'을 눌러서 'Console'창에 들어갔다. 그다음에 내가 임의로 값을 만들어서 "PASS(12342046413275659)" 입력했다. 출력 값으로 난수 값이 출력되었고, 이 값을 그대로 네모 박스 안에 넣었다.

(PASS 안에 값 넣은 화면)

 

전체적으로 보면 아래의 사진과 같이 되는데, 난수 값을 넣어주면 'Authkey'값이 출력되는 것을 확인할 수 있다.

(키값 입력 화면)

 

 

나온 Auth 값을 메인 화면에 넣어주면 아래와 같이 점수가 올라가는 것을 확인 할 수 있다!

(점수 향상!)

 

 

 

[문제 해결]


이번 문제는 5번 문제를 풀면서 어려울 줄 알았다. 사실 'Unpacking JavaScript'가 아니었으면 문제 접근을 하기 힘들었을 것이다. 다행히 넓게 봐서 문제를 풀 수 있었던 것 같았다.

그리고 언패킹에 관해서 살짝 언급되어서 이 부분에 대해서 공부가 아주 조금 된 것 같기도 하다.

또 콘솔 창에서 작업을 이번이 처음인데 아직 많이 어색하다. 좀 더 익숙해질 수 있도록 연습해야겠다.

 

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

[Webhacking.kr] 24번 문제풀이


오늘은 "Webhacking" 24번 문제를 풀었다. 밖의 날씨도 비가 오고 늦잠도 자버려서 점수 배점이 낮은 문제를 풀었다. 

(Webhacking 24번문제)

 

 

24번 문제에 들어가면 아래의 화면처럼 'client ip'와 'agent'가 보인다. 'agent' 옆을 보니 사용자의 환경을 뜻하는 것 같았고, 'client ip'는 난수가 들어가 있는 것처럼 보였다. 그리고 'Wrong IP!'까지 현 화면에서는 문제를 풀 수 없는 것들만 보였다. 

(24번 문제)

 

 

처음 화면에서는 아무것도 발견할 수 없어서 'view-source'에 들어가서 소스코드를 확인해보기로 했다. 아래 화면은 24번 문제의 소스코드이다.

(24번 소스코드)

 

 

문제를 풀기 위해선 소스코드를 해석해야한다.

 

소스코드 해석


1. extract 함수

해당 함수는 배열 속의 키의 값들을 변수화 시키는 것이다.

 

예를 들어 

$a[x] = "Hello";

$a[y] = "World";

extract($a);

 

echo $x;

echo $y;

 

결과 값은 "Hello World"가 출력되는 것이다.

 

사실 extract() 함수를 사용하지 않고 배열을 이용해서 출력할 수 있다. 

$a[x] = "Hello";

$a[y] = "World";

 

echo $a[x];

echo $a[y];

 

결과 값은 위와 같이 "Hello World"가 출력될 것이다.

  extract($_SERVER);
  extract($_COOKIE);

 

 

2. htmlspecialchars() 함수

해당 함수는 HTML 코드가 들어가는 특수 문자를 일반 문자로 인식되어 출력되게 하는 것이다.

 

'&' -> '&amp;'

'"(큰 따옴표)' -> '&quit;'

''(작은따옴표)' -> '&#039'

'<' -> '&ltl'

'>' -> '&gt'

 

위에 써놓은 것처럼 HTML 코드가 들어오면 우리가 일반 문자로 바꿔주는 함수인데, 문제를 풀 때는 사용하지 않는 것 같다.

(문제에 풀 때 필요한 것이면 댓글로 알려주시겠어요?)

    $ip = htmlspecialchars($REMOTE_ADDR);

 

 

3. str_replace("1번","2번","3번") 함수

1번째 인수 : 변경 대상 문자

2번째 인수 : 변경하려는 문자

3번째 인수 : 변수 또는 문자열

 

즉, str_replce("노랭이", "키큰", "노랭이 라바")라고 할시 

'노랭이 라바' -> '키큰 라바'로 바뀌게 된다.

 

그러면  해당 소스코드는 아래와 같이 "ip" 값이 아래와 같이 바뀔 것이다.

'..' -> '.'

'12' -> ''

'7' -> ''

'0' -> ''

    $ip = str_replace("..",".",$ip);
    $ip = str_replace("12","",$ip);
    $ip = str_replace("7.","",$ip);
    $ip = str_replace("0.","",$ip);

 

 

4. 'ip'값이 127.0.0.1 일 경우 문제가 풀리게 된다.

  if($ip=="127.0.0.1"){
    solve(24);
    exit();
  }

 

 

 

문제 풀이


이제 본격적으로 문제를 풀기 위해서는 (나 같은 경우는 크롬을 사용했다.) 쿠키 하나를 추가시켜줘야 한다.

 

저는 "EditThisCookie"라는 확장 프로그램을 이용해서 'REMOTE_ADDR'를 추가시켰다.

 

추가시키는 방법은 아래와 같다. 일단 오른쪽 위에 있는 쿠키 모양의 아이콘을 클릭한다. 그다음 '+' 모양을 클릭한다. 그리고 추가하고 싶은 이름의 쿠키를 작성하면 끝이다.

'쿠키 아이콘 클릭' -> '+' 클릭 -> 추가하고 싶은 쿠키 이름 설정 후 '체크 표시' 클릭 

 

 

REMOTE_ADDR에 값을 넣어서 ip 값을 127.0.0.1이 출력되게 하려면 "112277...00...00...1"을 넣어주면 된다.

112277...00...00...1

빨간색으로 된 글자는 지워지게 되고, 회색 바탕으로 된 것은 '..' -> '.'로 바뀌게 된다. 그래서 아까 만들었던 REMOTE_ADDR 값에 112277...00...00...1 넣어주면 끝이다.

 

 

쿠키 값에 값을 넣고 'F5'을 눌러주면 아래와 같은 팝업창이 뜨게 된다.

(문제 해결)

 

'client ip' 값에는 127.0.0.1 이 출력되면서 100 point을 얻었다는 문장과 함께 문제를 풀었다.

(문제 해결)

 

 

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

'공부 > Webhacking' 카테고리의 다른 글

[Webhacking.kr] 26번 문제풀이  (6) 2020.03.08
[webhacking.kr] 6번 문제풀이  (4) 2020.03.04
[Webhacking.kr] 1번 문제풀이  (2) 2020.03.03

[SuNiNaTaS(써니나타스)] 4번 문제

오늘은 'Suninatas(써니나타스)'에서 4번 문제를 풀기로 했다. 2번과 3번은 아직 공부가 부족해서 어떤식으로 접근을 해야하는 지 몰라서 나중에 풀기로 했다.

(문제 목록)

 

 

4번 문제를 들어가 보면 아래의 화면 처럼 'point', 'Plus' 버튼, 'User-Agent', 'Auth key' 이렇게 보였다. 일단 네모 박스에 있는 것들을 제외하고 'User-Agent'는 사용자의 환경을 말하는 것 같다. 그리고 '?????' 되어있는 것을 내가 알아내야 하는 문제인 것 같다.

(4번 문제)

 

 

'User-Agent'가 정말 내 환경인지 궁금해서 크롬 우측 상단에 설정 창에 들어가 보았다. 들어가서 보니 문제에서 보았던 'Chrome/80.0.3987.132'는 사용자의 환경을 뜻하는 것이었다. 즉 문제를 푸는 사용자들의 환경을 확인해보라는 뜻인 것 같았다.

(Chrome 정보)

 

 

그러면 'Point'와 'Plus'는 무엇일까?

 

나의 고민은 해당 페이지 소스코드의 힌트를 보고나서 무엇인지 알 수 있었다. 아래의 화면은 해당 페이지 소스코드로서 주석처리가 된 곳을 볼 수 있다. 힌트에서는 'Point'가 50으로 만들면 문제가 해결되는 것 같았다.

(4번 문제 소스코드)

 

 

그래서 나는 바로 'Plus'를 눌러서 'Point'를 50으로 만들려고 했다. 하지만 'Point'는 25까지밖에 올라가지 않았다.

('Plus'가 25이상으로 올라가지 않는다.)

 

(25이상일때 뜨는 팝업창)

 

 

아무래도 서버와 클라이언트 통신을 주고받을 때 전달되는 패킷을 조작해야 될 것 같다. 그래서 나는 'Burp Suite(버프 스위트)'라는 툴을 이용해서 패킷을 조작하기로 했다.

(버프 스위트를 사용할 때 악의적인 목적을 가지고 사용시에는 문제가 발생할 수 있으니, 문제풀이 등 합법적인 용도에만 사용하여야 한다.)

 

 

아래의 화면은 'Burp Suite'를 키고 나서 문제 화면에서 'Plus'를 누른 뒤 캡처한 화면이다. 그 다음 오른쪽 클릭 한 후 'Sned to Repeater'를 누른다.

('Plus'를 누른 뒤 'Burp Suite'가 캡처한 화면)

 

 

'Send to Repeater'를 클릭한 후 'Repeater' 화면으로 넘어가면 아래와 같다.

('Repeater' 화면)

 

 

여기서 'User-Agent'를 'SuNiNaTaS'로 변환한 뒤 'Send' 버튼을 25번을 누른다. 정확히 25번을 눌러야 'Point' 값이 50이 된다.

('User-Agent' 설정 화면)

 

 

그러면 문제 화면에서 'Point' 값이 25에서 50으로 바뀐것을 확인할 수 있다. 정확하게 50이 되면 문제가 풀렸다는 팝업창이 뜨게 된다.

(문제 해결 팝업창)

 

 

키값 또한 문제화면에서 '?????' 대신 나타나게 될 것이다. 키값을 그대로 제출하면 포인트가 올라가 있다.

(포인트 획득!)

 

 

 

[느낀점]

프록시 서버를 처음 만져본 오늘 어떤식으로 작동되는 지 혼란이 많이 왔다. 다음에는 좀 더 정확하게 이해해서 문제에 접근을 해야겠다. 그리고 프록시 서버 뿐만 아니라 값을 올릴 때에도 문제였다. 처음에 단순히 'Send'만 보내면 해결될 줄 알았지만, 아무런 변화가 이루어지지 않았다. 왜냐하면 'User-Agent'값을 바꾸지 않았기 때문이다. 값을 바꾸고 나니 문제가 금방 풀렸다.

 

이번 문제를 풀면서 'Burp Suite'의 사용법에 대해 조금이나마 익힐 수 있는 시간이어서 너무 감사했다. 사실 이런 툴을 직접 이용해서 실전에 사용하기에는 많은 위험과 문제들이 동반된다. 하지만 이번 문제를 통해서 조금이나마 툴에 대한 사용법을 익힐 수 있어서 좋았다. 또한 나에게 부족한 부분이 무엇인지 확실하게 알아가는 시간이었다.

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

[SuNiNaTaS(써니나타스)] 1번 문제

오늘은 [Webhacking] 문제가 아닌 "Suninatas(써니나타스)"라는 워게임에서 문제를 풀었다.

아래의 화면처럼 1번부터 문제가 쭉 나열되어있었고, 문제를 해결할 시 나처럼 바탕색이 파란색으로 바뀐다. 문제를 못 풀었으면 1번을 제외한 나머지 화면처럼 바탕색이 흰색이다.

(Suninatas 문제 목록)

 

 

1번 문제는 100point 문제로 옆에 'PASS'는 지금까지 푼 사람인 것 같다. (4298명인 것 같은데, 많은 사람이 풀었다. 쉬운 문제일 것 같지만 어제처럼 방심하지 않고 정신 차리고 문제를 풀었다.)

 

1번 문제는 아래의 화면처럼 소스코드가 주어져있었다. 그 외에 기능들은 'main', 'Back', 'Check' 이렇게 3가지가 있다. 

(1번 문제)

 

각각 클릭하게 된다면 

'main' 은 "Suninatas(써니나타스)"의 메인 화면으로 이동하는 것이다.

'Back'은 이전 화면으로 이동하는 것이다.

'Check'은 답을 제출하때 사용되는 것이다.

 

 

문제를 해결하려면 소스코드의 이해부터 필요하다.


(아직 정확하게 모르기 때문에 설명에서 잘못된 부분이 있으면 알려주세요!)

Request 값을 받아오는 함수
Replace 값의 문자를 바꿔주는 함수
Mid 원하는 부분의 값을 가져오는 함수
& 두 값을 합치는 함수

 

더 부연설명을 하자면


Replace(abcd, "a" , "fg") 라고 하면

adcd에서 a를 fg로 치환하는 것이다.

그러면 해당 값의 출력은 "fgdcd" 가 출력되는 것이다.

 


Mid(abcd, 2, 2) 라고 하면

a가 1번, b가 2번, c가 3번, d가 4번이다.

그러면 2번째부터 2개만 가져와서 출력하는 것이기 때문에

해당 값의 출력은 "bc" 가 출력되는 것이다.

 


a = 노랭이

b = 라바

result = a & b 일 경우

result 값은 a와 b의 문자열이 합쳐진 "노랑이 라바"가 출력되는 것이다.

 

 

그러면 해당 1번 문제의 소스코드를 분석하면 아래와 같다.


str = Request("str") // 문자열을 받아서 'str'에 값을 집어넣는다.

If not str = "" Then // 받아온 문자열(str)이 아무것도 없으면 실행하지 않는다.

    result = Replace(str, "a", "aad") // 받아온 문자열(str)에서 "a" 문자를 "aad"로 바꿔준 다음 'result'에 값을 넣어준다.

    result = Replace(result, "i", "in") // 받아온 문자열(result)에서 "i" 문자를 "in"로 바꿔준 다음 'result'에 다시 넣어준다.

    result1 = Mid(result, 2, 2) // 받아온 문자열(result)에서 2번째부터 2개를 반환해 'result1'에 값을 넣어준다.

    result2 = Mid(result, 4, 6) // 받아온 문자열(result)에서 4번째부터 2개를 반환해 'result2'에 값을 넣어준다.

    result = result1 & result2 // 'result1'과 'result2'의 문자를 합친다.

    Response.write result

    If result = "admin" Then // 'result' 값이 admin 일 경우 실행

         PW = "????????"       // PW 값 출력

    End if // if문 종료

End if // if문 종료

그러면 나는 'result' 값에 admin이 출력되도록 값을 만들어 주면 되는 것이다.

그래서 내가 선택한 방법은 처음에 admin 값을 넣어서 순서대로 코딩을 진행하고 나서 거꾸로 문제를 해결하기로 했다.

str 값이 admin일 경우

result -> aaddmin

result -> aaddminn

result1 -> ad

result2 -> dmi

result -> addmi

위와 같은 방법으로 진행했을 경우에는 출력 값이 admin이 아닌 addmi이 출력되었다. 그래서 나는 최종적으로 result 값이 admin이 나오도록 고민해 봤고, 결국 답을 얻어냈다.

 


str = ami

result -> aadmi

result -> aadmin

result1 -> ad

result2 -> min

result -> admin

str의 값으로 "ami"을 넣었을 때, result 값이 "admin" 출력되는 것을 알 수 있다.

 

ami 값을 넣으면 아래의 화면처럼 문제가 풀렸다고 팝업창이 뜨게 된다.

(문제 해결 팝업)

 

그리고 문제 밑에 'Authkey' 값이 출력되는 데 이 값을 드래그해서 답을 제출하면 점수를 획득할 수 있다.

 

처음에 문제를 풀고 나서 점수가 안 올라가 의문점이 들었는데, 아래의 화면에 'AUTH'를 클릭해서 들어가야 한다.

 

들어가게 된다면 방금 전에 드래그한 값을 여기다가 제출하면 점수가 올라갈 것이다. 처음에는 답을 입력만 하면 끝인 줄 알았는데 해당 코드를 제출까지 해야만 문제가 해결되는 것을 알 수 있었다.

(Authkey 값 제출해야하는 화면)
(코드값을 제출하면 뜨게 되는 팝업창)

 

 

문제를 풀고 나면 점수가 올라가는 것을 확인할 수 있다. 

()

 

 

[궁금증]

문제를 풀 다보다가 result 값이 똑같이 admin이 나왔지만 문제의 답이 되지 않았다.

str = amin

result -> aadmin

result -> aadminn

result 1-> ad

result 2 -> min

result -> admin

str 값이 amin을 넣었을 시 result 값이 admin이 나왔다. 하지만 답이 되지 않는 걸 보니, "첫 번째 Request 값에서 str이 세 글자이니 'ami'만 가능한 것 아닌가"라는 생각을 했다. 왜냐하면 'amin'은 네 글자이기 때문이다. 혹시 알고 있으신 분들은 알려주실 수 있으신가요?

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

[Webhacking.kr] 6번 문제풀이

webhacking 6번 문제의 배점이 100점이어서 한번 풀어보기로 했다.

(old-06 100점 문제)

 

6번 문제를 들어가 보면 아래의 화면이 보인다.

(Webhacking.kr 6번 문제)

ID와 PW 값이 있는 거 보니, 이것을 이용하는 문제일 것 같았다.

화면에 'view-source' 링크가 있어서 들어가 보았다.

아래의 화면은 'view-source'의 소스코드이다.

('view-source'의 소스코드)

소스코드가 한눈에 들어오지 않고 엄청 길다. 간단하게 해석해보자면 오른쪽 화면에 보이는 소스코드에서 decode_id의 값이 admin이고 decode_pw의 값이 nimda일때 문제가 해결되는 문제인 것 같다. 그러면 나는 Cookie에서 id와 pw 값에 정확한 값을 입력하면 문제를 풀 수 있을 것 같았다.

 

아래의 화면에서 for문을 보게 되면 id와 pw를 20번씩 base64_decode을 하는 것을 알 수 있다.

(for문)

그러면 나는 반대로 생각해봐야 할 것이다. base64_decode를 이용하지 않고 base64_encode를 20번 돌려야 할 것이다. 

id에는 "admin"을, pw에는 "nimda" 값을 입력해서 base64_encode를 20번 하면 될 것이다.

 

나는 PHPTester 사이트를 이용하여 php 구문을 실행시켜 보았다. 아래 PHPTester를 이용하면 php 구문을 쉽게 동작시켜 볼 수 있다.

http://phptester.net/

 

PHPTESTER - Test PHP code online

Lorem Ipsum alternative : gaddafipsum.com       This application is free so please don't break it ! Contact :phptester.net@gmail.com Result

phptester.net

 

아래의 화면은 id에 "admin"의 값을, pw에 "nimda"의 값을 넣어 base64_encode를 20번 한 것이다. 문제의 소스코드를 보면 !,@,$,^,&,*,(,) 와 같은 문자를 치환할 수 있기에 base64_encode이 끝나면 곧바로 치환 할 수 있게 코드를 수정했다. 

(왼쪽화면 id를 20번 encode, 오른쪽 화면 pw를 20번 encode)

php 구문의 코드를 돌리고 화면에서 보이는 'Click to test your php code'를 누르면 내가 짠 코드가 실행된다. 출력된 값을 Cookie 값에 'user' 값과 'password' 값에 넣으면 된다.

 

('admin'을 20번 base64_encode 한 값)
('nimda'을 20번 base64_encode 한 값)

 

위의 화면 처럼 Cookie 값에 base64_encode 한 값을 넣으면 아래의 화면처럼 문제가 해결됐다고 출력된다.

(old-06 Pwned 화면)
(100point 획득 화면)

 

[시행착오]

처음에는 100점짜리 문제여서 가볍게 생각하고 접근했다. 소스 코드에서 'user'값에 admin이을 'password'값이 nimda을 넣으면 쉽게 풀 수 있을 줄 알았다.

(잘못된 값을 넣었을 때 화면)

잘못된 값을 넣으니 위의 세번째 화면처럼 ID와 PW에는 아무런 변화가 없었다. 이번 문제는 어제 풀었던 문제보다 쉽게 생각해서 접근을 했더니, 문제의 접근 방법이 잘 못 되었던 것 같다. 또한 이번 기회에 'PHPTester'라는 사이트를 알게 되어서, 간단한 php 구문을 어렵지 않게 동작시킬 수 있었다. 

아무리 배점이 낮은 문제일지라도 가볍게 생각하면서 문제를 풀면 안되는 것일 이번 기회에 알게 되었다.

 

 

 

*해당 블로그는 개인적인 공부와 정보 공유를 위해 만들었습니다.

'공부 > Webhacking' 카테고리의 다른 글

[Webhacking.kr] 24번 문제풀이  (6) 2020.03.10
[Webhacking.kr] 26번 문제풀이  (6) 2020.03.08
[Webhacking.kr] 1번 문제풀이  (2) 2020.03.03

+ Recent posts