아.... 어제오늘 21번문제를 풀었다.
하루죙일 푼건 아닌데
너무 노가다성이 짙었다. (난독화...때문에...)
중간에 오기가 생겨서 끝까지 풀어봤다.


21번 문제 화면이다.!


(21번 문제 화면)



주어진 단서는 소스보기 뿐!
소스보기를 한다.



(소스 화면)



?.....
딱봐도 난독화다.
그래도 코드가 짧기 때문에 그나마 다행이다. (그래도 오래걸린다)

우선 오래볼거기 때문에 흰화면은 눈이 아프므로
Notepadd++ 에 옮겨서 분석하기로 한다.
원래 코드는 아스키 코드로 되어있는데
전부 해석해서 옮겼다. (파이썬 프로그램으로 코드를 짰다. 너무오래걸려서...)

아스키코드만 해석한 화면이다.


(아스키코드 해석)



하하... 아직 갈길이 멀다.

그래도 난독화 되어있다.
인내심을 가지고 같은 변수이름을 찾아서 ( 컨트롤 F ) 난독화를 정리해주면
아래와 같이 깔끔하게? 된다.



(난독화 정리)



...
여기까지 했으면 끝이다.
여기까지가 귀찮고 귀찮지만 귀찮은 작업이 끝났다.
짝짝짝
여기까지 친구랑 얘기하면서 설설 했다.

이제부터 본격적인 코드 분석이다. (여기부터는 어렵지 않다.)
위에서부터 하나씩 분석해보겠다.



(아스키 코드로 변환)



아스키 코드로 변환하는 것인데 5글자를 아스키코드로 바꾸어 전부 더해주는 함수이다.
여기서 b변수가 처음에 "" 빈 문자열로 출력되서 문자열이라고 생각했는데
뒤에 ord() int가 반환되는 함수가 나와서 아리송했다.
결과는 h함수에 들어오는 값을 한자한자 5글자 아스키코드로 바꾸어 전부 더해주는 함수이다.

그 다음으로는 아래와 같다. (아주 익숙한 문자열도 보인다)



(입력값 코드)



KEY는 우리가 찾아야할 정답으로 보인다.

mun이라는 변수에 GET방식으로 전달받는 key변수 값을 저장한다.
그 후 mun이라는 변수에 들어온 문자열을 "-" 으로 분리하여 배열로 a변수에 저장한다.
그 후 a 배열의 값을 체크하는데 이로써 알 수 있는 것은
a의 배열에는 5개의 값이 들어있고 알파벳과 숫자로 이루어진 문자열이어야한다는 점이다.
그렇지 않으면 Error!를 출력한다.

핵심에 맞는 조건값을 찾는 과정이다.



(키 코드)



이 코드는 if문으로 이루어져있고 이 조건들을 전부 만족하면 KEY를 출력하게 되어있다.

조건들을 정리하여 보았다.
조건
1. a배열 첫번째 요소 조건
a배열 첫번째 요소가 첫번째부터 2글자가 숫자이다.
a배열 첫번째 요소가 5번째 글자가 숫자면 안된다. 
a 배열의 첫번째 요소를 h 함수에 넣은 값이 312보다 크고 333 보다 작아야한다. 즉 아스키코드로 전부 바꾸면 312~333 사이의 값이어야한다.

a첫번째 요소 -> "11X1a"

2. a배열 두번째 요소 조건
a 배열 두번째 요소의 첫번째 글자가 숫자면 안된다.
a 배열 두번째 요소의 4번째 5번째 값이 숫자여야한다.
a배열의 두번째 요소 h함수 값이 300~326이다.

a 두번째 요소 -> "a3399"

3. a배열 세번째 요소 조건
a배열의 세번째 요소 첫번째 글자는 숫자가 아니다.
a배열의 세번째 요소 두번째 글자는 숫자이다.
a배열의 세번째 요소의 h함수 값이 349 ~ 407 사이이다.
 
a 세번째 요소 -> "a1d88"

4. a배열 네번째 요소 조건
!is_numeric(substr(${a}[3],0,2)) => a 배열의 4번째 요소의 첫번째 두번째 값은 숫자가 아니다.
is_numeric(substr(${a}[3],2,3)) => a 배열의 4번째 요소의 세번째 4번째 5번째값은 숫자이다.
h(${a}[3])>357&&h(${a}[3])<359 => a 배열의 4번째 요소는 357 ~ 359 값이다.

a 4번째 요소 -> "aa668"

5. a배열 다섯번째 요소 조건
(h(${a}[0])+h(${a}[1])+h(${a}[2])+h(${a}[3])) / 4  반올림한 값인 340
h함수에 넣었을때 340이 되어야한다.

a 5번째 요소 "aa011"

이 모든 요소들의 조건을 -으로 구분하여 입력하여 주면 된다.!



(정답 화면)




이 문제는 어렵지 않다.
다만 귀찮고 귀찮았던 문제일 뿐이다.!



'WarGame > xcz.kr' 카테고리의 다른 글

xcz.kr - prob18(Web)  (0) 2017.02.22
xcz.kr - porb13 (network)  (0) 2017.02.03
xcz.kr - porb17 (network)  (0) 2017.02.03


오랜 만에 간단한 웹 문제를 풀어볼것이다.

오늘 푼 문제는 xcz.kr 의 18번문제 웹 문제이다.
아주 아주 아주 기본적인 문제라고 Title에 적혀있다..!

문제 화면이다.



(문제 화면)



설명에 소스보기를 클릭한다!
소스가 나와있다.
보니 php 코드로 이루어져있고
난독화가 되어있다.
변수 이름을 요상하게 지어놓은 것이다.



(소스 코드)



보기 힘드니
Notepad++ 를 받아서 여기서 코드를 확인하였다. (눈이 아프니까)

난독화 또한 풀어주었다.
아래는 난독화 풀은 코드이다.
난독화를 풀었다는 이야기는 내가 보기 쉽게 어려운 변수들을 쉬운 변수이름으로 바꾸어 놓았다는 뜻이다.



(문제 코드)



먼저 눈에 띄는 것은 아래 빨간 박스



(폼 체크?)



여기서 보면 쿠키값 c와 GET방식으로 전달받은 변수 g, 그리고 POST방식으로 전달받은 변수 p가 선언되어있고
이 값들이 비어있으면 Wrong T.T 가 나오게 되어있다.

우선 내가 이 3개의 값을 채워서 넘겨줘야한다는 것을 파악하였다.

쭉 소스코드를 이어서 보면
test function이 있다. 만약 아래에서 이 함수를 쓰지 않으면 무시했겠지만
아래 이 함수를 사용하니까 분석해보았다.



(test function)



이 함수는 변수를 받아서 특정 형태로 변형하는 것이다.
ord 함수는 문자를 아스키 코드로 변환하는 것이다.

ord 함수가 없다면 원래
test 변수가 들어가면
- t - e - s - t 이렇게 출력되는 함수이다.
즉 여기서 t의 아스키 값, e의 아스키값 ... 등으로 변환하여
 - t - e - s - t 값을 출력하는 함수이다.

아래 코드는 확대해서 봐야한다.
conn 이라고 내가 이름지어준 변수인데
위에서 보면
conn 변수는 $g . $cookieval; 으로
GET방식 변수와 쿠키값이 연결된 값이다.
또 twinp 변수는 $twinp = $p;  값으로 p와 같은 값이다.



(소스 코드)



이 코드를 분석하면
conn의 값이 test 함수에 들어가서 출력한 값이 위에 표시된 값인지 또는
twinp의 값이 위에 적혀있는 값인지 체크하여 맞으면 key를 보여준다.

GET 혹은 POST 둘 중 하나의 변수만 맞게 써줘도 되지만
뭐하러!
그냥 두개 다 정답을 보내겠다!

정리하면
conn에는 givemepassword  
twinp에는 keyplz!
의 값이 들어가면 된다.
conn은 g와 cookieval의 값을 연결한 것이므로 작전을 짜면

나는
cookie 값 c = passowrd 를
GET 변수 g = giveme 를
POST변수 p = keyplz! 를
넣어서 보내겠다.

먼저 쿠키 값을 설정할 것이다.
F12에서
아래와 같이 쿠키를 입력한다.



(쿠키 입력)





(입력된 모습)




그리고 POST 방식으로 보내려면
form 태그를 사용해야하므로
form 태그를 만들어준다.



(Form 태그 작성)



그리고 action 변수 url에 g의 값을 GET방식으로 동시에 전달하기 위하여
?g=giveme 를 적었다.
여기서 go 버튼을 누르면 이 값들이 전송되게 Form태그를 만들었다.

이제 이 태그를 한줄로 이어서 아래와 같이 입력해준다. (F12 콘솔에서)



(만들어진 코드)




(코드 입력)



입력하면 아래와 같이 go 버튼이 하나 나온다.



(go 버튼 클릭)



클릭을 하면 우리가 설정해주었던 값들이 전부 전달되고
아래와 같이 Key가 나오게 된다.


(정답 화면)


'WarGame > xcz.kr' 카테고리의 다른 글

xcz.kr - prob21(Web)  (0) 2017.02.24
xcz.kr - porb13 (network)  (0) 2017.02.03
xcz.kr - porb17 (network)  (0) 2017.02.03




13번 문제이다. 이 또한 네트워크 관련 문제이다! :)
(문제에 나와있는데, 내 생각엔 이게 결정적인 힌트지 않았을까 싶다.)

문제화면이다.



(문제 화면)



다운로드를 클릭한다.




(다운로드!)



하니..!
pcap 파일이라고 뜨지 않고 그냥 파일이라고 뜬다..!
?.?
?.??



(다운파일)



HxD로 열어보니 pcap 시그니쳐랑 똑같다. (뭐야..)
와이어샤크로 열어보았다.

열렸다. (뭐야...)



(덤프패킷)



제일 먼저 살펴볼 것은 http 통신으로
어떤 데이터 혹은 파일을 주고 받았는지 체크해보아야한다.
체크!
필터링 http


(필터링 http)



필터링한 패킷중 HTTP Stream으로 확인해보니
png 파일. 그림파일이 전송되었던것을 확인 할 수 있었다.



(png 파일)



이 응답의 끝을 보니..



(???)



끝이 조금 이상하다..?
png 파일의 끝 형식이 아니다.

패킷을 보니 teasure라고 써있던데 3개로 쪼개져서 보내졌던거 같다.
HxD로 세 패킷의 데이터를 덤프해서 이어주면
png 파일이 된다.



(리커버리!)



사진을 열어보면.!





(답)




답이 나온다!

이걸 무턱대고 답칸에 적으면 오답이 나온다.
(나도 그랬다)

문제를 잘 보면
md5로 해쉬한 값을 입력하라고 나와있다.
md5는 해쉬알고리즘 중 하나이다.

인터넷에 md5 암호화 검색하면 사이트 많이 나오니까
거기서 암호화를 한 후 
답 입력하면
통과 :)

'WarGame > xcz.kr' 카테고리의 다른 글

xcz.kr - prob21(Web)  (0) 2017.02.24
xcz.kr - prob18(Web)  (0) 2017.02.22
xcz.kr - porb17 (network)  (0) 2017.02.03


네트워크 패킷 분석 문제를 조금 더 풀어보고 싶어서
이곳저곳 찾다가 찾은 사이트 xcz.kr 이다.
재밌는 형식의 워게임들이 있다.

여기에 있는 문제들도 풀어야겠다 :)

다른 문제보다 17번문제 네트워크 관련을 풀어보았다.


(문제화면)



상황은
패스워드를 잃어버렸다
패스워드를 찾으라~ 라는 문제다
뭘까!
일단 다운로드!



(다운로드 클릭)



다운받아보니 패킷 덤프 파일이다!
(내가 찾던 문제!)
(하지만 생각보다 쉬워서... 쉬우니 이 문제는 직접 풀어보세요 :) )



(문제)



이 덤프 파일에 ID와 패스워드가 있다는 말이다.
로그인을 하거나 회원가입 어쨋든 인터넷을 이용했을 테니
http 통신을 먼저 살펴봐야한다.
패킷 필터링으로 http


(http 패킷 필터링)



패킷 내용들을 보니 join_ok와 통신한 내용들이 보인다.
join 회원가입을 한 흔적이므로 이 패킷을 살펴보았다.



(회원가입 패킷)



패킷 내용은 HTTP Stream으로 확인하였다.



(HTTP Stream 클릭)



내용을 살펴보니..!
아이디와 비밀번호, 이메일 정보가 들어있다.


(패킷 내용)



잘보니 우리가 원하는 id가 아니라는 것을 알 수 있다.
우리가 원하는 아이디는 zzang 어쩌구다.

회원가입 페이지 패킷을 살펴서 찾았다.



(정답 패킷내용)



우리가 원하는 패스워드를 찾았다.

:)



'WarGame > xcz.kr' 카테고리의 다른 글

xcz.kr - prob21(Web)  (0) 2017.02.24
xcz.kr - prob18(Web)  (0) 2017.02.22
xcz.kr - porb13 (network)  (0) 2017.02.03

+ Recent posts