아.... 어제오늘 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


제로보드 설정까지 완료했으므로
이제 제로보드를 이용하여
게시판을 만들어보겠다.

관리자 계정으로 로그인 하고
왼쪽 상단에 Add Group을 눌러준다.




(Add Group 클릭)



클릭 후 그룹 이름을 써주고
확인을 누른다. (기본으로 설정해준다.)



(그룹 생성)



그룹이 생성된 모습이다.



(그룹 생성 모습)



여기서 왼쪽 상단에 게시판 항목에 Add를 클릭한다.



(게시판 Add)



게시판 Add 입력 항목이다.
여기서 이름을 작성해주고
기본 보호 설정을 해제 해 줄것이다. (먼저 웹 취약점을 공부하기 위해서)




(게시판 작성 페이지)



HTML 설정을 모두 허용으로 바꾸어준다.



(HTML 설정)



업로드 기능을 체크하여 자료실 기능을 사용으로 바꾸어준다.




(업로드 허용)



그리고 게시판 생성을 누르면
아래와 같이 게시판이 생성된 모습이 보인다.



(게시판 생성 후 모습)



이 페이지는 게시판의 목록을 볼 수 있다.

방금 우리가 만든 게시판을 확인해보자.

Preview를 클릭하여 본다.



(게시판 모습)



우리가 제로보드를 이용하여 만든 게시판의 모습이다.

회원가입을 하여 글을 작성해보겠다.! (테스트)



(회원가입)



그 후 로그인 하여 글을 작성해보겠다.



(글 작성)



보면 글이 잘 써지는 걸 확인해 볼 수 있다.




(작성된 모습)



글 목록에서도 보인다!



(게시판 목록 모습)



여기까지 게시판을 만들었다.

이제 이 게시판을 이용하여 웹 취약점을 살펴 보겠다. :)




웹 해킹에 들어가기 앞서
웹서버를 구축할 것이다.
(취약점이 많은!)

그 취약점들을 먼저 공부해 볼 것이기 때문이다.

리눅스에서 웹서버를 구축하기 전에
리눅스의 방화벽을 전부 해제해 줄 것이다.
(실제 서버에서는 해제하면 안된다!, 하지만 우리는 공부할 것이기 때문에 해제해 주도록 한다!)

리눅스에는 방화벽이 두개가 있다.
1. iptables
2. SELinux
이렇게 두개다!

iptables를 삭제해 줄것이다.
/etc/sysconfig/iptables  를 삭제해준다.



(iptables 삭제)



SELinux를 해제해 줄것이다.

vi /etc/sysconfig/selinux 에 들어가서 (vi 편집기 이용)
SELINUX에 disabled로 고쳐준다.



(SELinux 해제)



잘 해제 되었는지 확인해본다.
iptables -L   (명령)
했을 때 체인 룰이 아무것도 안나오면 설정이 안되있는 것이다.


getenforce를 입력하였을 때
Disabled라고 나오면 해제된 것이다.


(해제 모습)



그 후 yum을 이용하여
httpd.i386
php.i386
php-mysql.i386
mysql.i386
mysql-server.i386

을 설치해준다.



(설치된 모습)



httpd를 실행시켜준다. (아파치 웹서버이다.)



(실행 모습)



netstat -ant로 확인해볼 수 있다. (웹서버 포트는 80번 포트)



(웹서버 실행중)



혹은
현재 실행중인 프로세스를 확인해서 확인할 수 도 있다.
명령어 #> ps -ef | grep httpd



(프로세스 확인)



그렇게 되면 외부 호스트에서 IP주소로 접속하였을 때
아파치 화면이 뜬다.



(아파치 화면)



이제 MySQL 실행시켜줄 것이다.
MySQL은 DB이다.

명령어 #> service mysqld start

netstat -ant로
3306이 열려있으면 실행된 것이다.



(MySQL 실행)



mysql에 접속해 보겠다.
#> mysql -u root
(처음 접속, 비밀번호 설정 안했을 때) 이렇게 들어간다.



(접속 화면)



접속이 되면
mysql>
이렇게 프롬프트가 바뀐다.

비밀번호를 설정해 주겠다.
명령어
#> mysqladmin -u root password (쓸 비밀번호)



(비밀번호 설정)



비밀번호를 설정한 후에는 접속 방법이 조금 다르다.

#> mysql -u root -p
이렇게 접속하면
비밀번호 입력하는 란이 나온다.
여기에 아까 설정해준 비밀번호를 입력하면 된다.


(비밀번호 입력 접속)



이제 제로보드를 설치할 환경이 다 갖추어 졌다.

제로보드를 /var/www/html  경로에 다운받아준다.
현재 제로보드가 tar형태이므로 풀어줄 것이다.
명령어
#> tar xvf zboard.tar



(타르 파일 풀기)




(푼 모습)



해제하고 나면 해당 경로에 디렉터리 하나와 파일 하나가 생긴다.



(풀린 모습)



여기서 /etc/php.ini  파일을 하나 고쳐줄 것이 있다.



(vi /etc/php.ini )



vi 편집기를 이용해 들어와서
아래 표시된 부분을 On으로 고친다.



(고쳐진 모습)



그 후 외부 호스트에서
IP/zboard/install.php 경로로 접속을 하면 아래와 같이 나온다.



(접속 모습)



여기서 한글이 깨지는 것을 발견할 수 있는데
웹브라우저가 인코딩을 안해주기 때문이다.
인코딩 해주는 프로그램을 추가해준다.



(인코딩 프로그램 추가)



추가해 준 후 해당 페이지에서 오른쪽 클릭을 해서
Korea 로 인코딩 눌러준다.



(Korea 클릭)



그렇게 되면 아래와 같은 화면으로 잘 나오게 된다.!





+ Recent posts