반응형

python 80

[Tenable CTF] Web 문제들(3/3) - 웹해킹 / Python

Tenable CTF 에서 웹해킹 카테고리에 있던 문제들은 하나의 웹 사이트가 주어지고, 그 안에서 여러 플래그를 찾아 해결하는 방식이었다. 간단한 문제들이 많아서 여러개를 한번에 포스팅한다. 위에 보이는 것이 공통적으로 제공되는 웹사이트이다. 일곱번째 문제는 Certificate of Authenticity 문제이다. 문제 제목에서 볼 수 있는것처럼 인증서와 관려한 문제이다. 문제 페이지에서 https:// 로 스키마를 바꿔서 접속하면 인증서가 하나 다운로드 된다. 다운받은 인증서를 열어보면 발급 대상 및 발급자에 플래그가 적혀있는걸 볼 수 있다. 마지막 문제는 Follow The Rabbit Hole 문제이다. 이전 문제들과 비교해보면 확실하게 풀이수가 적다. 메인 페이지에서 Rabbit Hole 버..

CTF/웹해킹 2023.04.06

[CTFlearn] Time to Eat - 리버싱 / Python

CTFlearn의 여든 세번째 문제 이번에는 Medium 난이도의 리버싱 문제이다. 문제파일로는 파일이 제공된다. 문제에서 제공되는 코드를 열어보면 이렇게 적혀있다. eat, EaT, eaT, eAT 등 변수나 함수 이름을 상당히 헷갈리게 적어놔서 그냥 봐선 대체 무슨 말인지 알기가 어렵다. 일단 실행시켜봤다. what's the answer 라는 문구가 나오며 사용자 입력을 받는다. hello 라고 입력해 봤더니 bad length 라는 문구가 출력되었다. 사용자 입력값을 eat 에 저장하고 eat 가 9 와 같은지 비교하고 있는데 이 부분이 길이를 체크하는 부분이다. 입력값을 9자리여야 한다. 이번엔 aaaaaaaaa 라고 입력해봤다. bad format 이라면서 입력값의 예시를 출력해준다. 입력값은..

CTF/리버싱 2023.03.31

[CTFlearn] Weird Android Calculator - 프로그래밍 / JADX / Python

CTFlearn의 여든두번째 문제 이번엔 프로그래밍과 관련한 문제이다. 문제 설명을 읽어보면 이상한 안드로이드 계산기라고 하는데 이상한점을 찾아내라고 한다. 문제를 풀때 안드로이드 기기는 필요없다고 한다. 문제에서 주어지는 것은 WeirdCalculator.apk 파일이다. apk 파일이 주어지는 jadx 라는 도구를 사용하면 유용하다. (https://github.com/skylot/jadx) 자바 디컴파일러로 apk 파일을 넣으면 디컴파일해서 java 소스코드를 볼 수 있게 해준다. jadx 를 실행시킨 후 문제 파일을 열면 이런 화면이 나온다. 왼쪽 메뉴에서 가장먼저 MainActivity 부분을 확인해봤다. 특별한게 없는거 같아서 아래쪽에 Parser 를 눌러보니 AnonymousClass1Int..

워게임/CTFlearn 2023.03.30

[HackTheBox] USB Ripper - 포렌식 / Python

EASY 난이도의 포렌식 문제 sysadmin 으로서 누군가가 USB 를 이용해 중요 정보를 가지고 나간걸 찾아내라고 한다. 문제힌트도 함께 주어진다. once you find it, "crack" it 잘 기억해 둔다. 문제 파일로는 두개의 파일이 주어진다. 첫번째 파일은 syslog 파일이다. 일부만 가져왔는데 파일 크기가 무려 90만줄이다.. USB를 연결할 때마다 해당 USB의 Product, Manufacturer, SerialNumber 를 로그로 남기는듯 하다. 두번째로 주어지는 파일은 auth.json 파일이다. 이 파일에는 json 형태로 인가된 USB의 Product, Manufacturer, SerialNumber 값을 저장하고 있다. syslog 에서 식별된 값이 auth.json ..

[Tenable CTF] Not JSON - 암호학 / Base64 / Python

어렵진 않지만 조금 고민했던 문제이다. 문제에서 주어지는 것은 Base64 로 인코딩된 듯한 긴 문자열이다. 일단 바로 CyberChef(https://gchq.github.io/CyberChef/) 에서 Base64 디코딩을 해보았다. 뭔가 디코딩이 되긴 되는거 같은데.. 깔끔하지 않은 느낌이었다. 좀더 자세히 보기 위해 To Hex 레시피를 추가해 16진수값으로 한번 살펴보았다. notepad++ 에 옮겨적고 천천히 분석해봤더니 패턴이 보였다. 빨간 화살표가 표시된 1....2..... 부분부터 16진수 값에 특정한 패턴이 보였다. 맨앞에 있는 30, 31, 32, 33 ... 이 숫자들은 ASCII 코드로 0,1,2,3... 을 의미하는데 이 숫자들은 플래그의 INDEX 값이다. 그리고 세번째 열(..

CTF/암호학 2023.03.16

[DiceCTF] babymix - 리버싱 / IDA / Python

쉬운것 같으면서도 쉽지 않은 리버싱 문제 python z3 를 알고있다면 금방 풀수있다. babymix 라는 이름의 바이너리 파일이 하나 주어진다. 한번 실행시켜봤다. admin 비밀번호를 입력하라고 요구하고, 비밀번호가 틀리면 Incorrect 메세지가 출력되면서 종료된다. 바로 IDA 를 이용해 디컴파일 해보았다. main 함수를 보면 사용자의 입력값을 s에 담아 check815546 함수로 집어넣는다. 그 검증결과가 참일경우 Correct 라는 메세지가 출력된다. check815546 함수를 살펴봤다. 사용자가 입력한 값의 각 자리를 계산해서 특정한 조건을 만족시키는지 검증한다. 그런데 한번 검증하고 끝나는게 아니라 여기서 또 check921708 함수를 호출한다. check921708 함수도 마찬..

CTF/리버싱 2023.03.05

[CTFlearn] RE_verseDIS - 리버싱 / IDA / Python

CTFlearn 의 일흔 여섯번째 문제 이번엔 Medium 난이도의 리버싱 문제이다. 숨겨진 비밀번호를 찾으라고 한다. 문제에서 주어지는 것은 problem 파일이다. 리눅스 환경에서 시험삼아 실행시켜 보았다. 비밀번호를 입력받는데 test 라고 입력했더니 틀린 비밀번호라는 문구가 출력된다. 바로 IDA 라는 디스어셈블러를 이용해 problem 파일을 열고, F5를 눌러 main 함수의 수도코드를 살펴보았다. key 배열에 들어있는 값을 key2 배열로 옮겨서 집어넣고, msg 배열에 str[4 * 1] ^ LOBYTE(key2[i]) 의 결과값을 집어넣는다. 그리고 사용자의 입력값이 msg 배열과 같은지 검증하고 있다. key 배열에는 IdontKnowWhatsGoingOn 라는 값이 들어있고, str..

워게임/CTFlearn 2023.03.03

[justCTF] That's not crypto - 리버싱 / uncomplye6

어렵지 않은 리버싱 문제 crypto 문제가 아니라고 문제 제목에서부터 강력하게 어필하고 있다. 문제에서 주어지는 것은 checker.pyc 파일이다. .pyc 파일을 파이썬 코드로 복구하는데는 uncompyle6 라는 도구를 사용한다. pip install uncompyle6 라고 입력하면 다운로드 받을 수 있다. uncompyle6 이라고 입력하면 아래쪽에 디컴파일된 결과가 출력된다. from random import randint def make_correct_array(s): from itertools import accumulate s = map(ord, s) s = accumulate(s) return [x * 69684751861829721459380039 for x in s] def val..

CTF/리버싱 2023.02.15

[boot2root] Vulnerable Adventure 2 - MISC / Python

이전 문제(https://hackingstudypad.tistory.com/413) 와 연계되는 문제이다. 똑같이 전에 제공되었던 client.py 파일을 이용해서 풀 수 있다. import struct import socket import random s = socket.socket() port = 1013 s.connect(('35.238.225.156',port)) coins = 100 health = 100 mana = 100 posx = 0 posy = 0 goblin = 0 terminated = 0 dummyflag = 0 vuln = random.randint(1,500) while(1 == 1): print "Welcome to game" print "What would you like ..

CTF/MISC 2023.02.11

[boot2root] Vulnerable Adventure - MISC / Python

이번 문제는 뭐라 분류해야 할지 몰라서 MISC 로 넣었다. MISC는 miscellaneous의 약자로 여러가지 잡다한 이라는 의미를 가지고 있다. 문제 설명을 읽어보면 client 를 실행시켜 플래그를 얻으라고 한다. 문제에서 주어지는 파일은 client.py 파일이다. import struct import socket import random s = socket.socket() port = 1013 s.connect(('35.238.225.156',port)) coins = 100 health = 100 mana = 100 posx = 0 posy = 0 goblin = 0 terminated = 0 dummyflag = 0 vuln = random.randint(1,500) print(vuln) ..

CTF/MISC 2023.02.08
반응형