모의해킹 (163) 썸네일형 리스트형 random-test #!/usr/bin/python3 from flask import Flask, request, render_template import string import random app = Flask(__name__) try: FLAG = open("./flag.txt", "r").read() # flag is here! except: FLAG = "[**FLAG**]" rand_str = "" alphanumeric = string.ascii_lowercase + string.digits for i in range(4): rand_str += str(random.choice(alphanumeric)) rand_num = random.randint(100, 200) @app.route("/", methods .. amocafe @app.route('/', methods=['GET', 'POST']) def index(): menu_str = '' # 빈문자열 org = FLAG[10:29] # FLAG의 인덱스 10위치에서부터 29까지의 길이을 org에 저장 org = int(org) # org에 저장된 문자을 int형으로 변형 st = ['' for i in range(16)] # 16개의 빈 문자열을 가지는 리스트 st를 생성 # 반복문....으로 연산.. 여기가 중요할듯,,, for i in range (0, 16): # res값은 org에서 4 * i 비트 오른쪽으로 쉬프트 하고 그다음 0xf와 AND 연산을 함 # 즉, org에서 i번째 4비트를 추출함 res = (org >> (4 * i)) & 0xf # res가 .. command-injection-chatgpt 메인화면에는 필요 없는 메시지와 Ping 페이지로 이동하는 메뉴가 있다. 8.8.8.8로 Ping을 보내면 응답값이 출력이 된다. 8.8.8.8;ls을 입력을 했을 때 ping명령어가 실행이 되면서 ;(세미콜론) 뒤에 있는 명령어가 실행이 된다. command Injection에 대한 필터링은 존재하지 않는거같다. 그렇기에 8.8.8.8; cat flag.py을 입력 하면 flag 값을 얻을 수 있다. API 리다이렉션을 활용한 언패킹 방해 기법 우회 PEview툴을 사용해 임포트 테이블을 확인해준다. 오늘 우리가 알아야하는 곳은 GetProcAddress이다. * GetProcAddress는 함수를 불러온다. -> Func의 address을 불러온다 프로그램을 올리디버거에 올리면 패킹이 되어있어 alert 경고창이 출력이 된다. PUSHAD가 바로 있는거 보면 PUSHAD로 밀어 넣고 분석이 끝난 뒤에 POPAD할 것이다. F8로 PUSHAD해준 다음 ESP 스택의 위치로 가서 브레이크 포인트를 걸어준다. F9을 눌러서 실행시켜주면 우리가 걸었던 하드웨어 브레이크 포인트거가 걸린다. CALL EAX에 들어가서 보면 PUSH EB가 원래 보여야한다....뭐지,..하여튼 여기는 함수의 프로로그를 나타내는 구간이기에 플러그인으로 덤프를 떠준다,.! 이제 .. Import address table 복구 : 레나 챌린지 (Level 21) PEview툴을 사용해 프로그램의 Import address table을 확인해 보자. Windows API에 관련된 함수들을 가지고 있다.(Process, dr\aw text, AndPoint..) 올리디버그로 보면 GetModuleHandleA인 windows api을 볼 수 있다. 여기를 통해서 윈도가 할 수 있는 명령어들을 많이 실행한다. GetModuleHandleA에 들어가면 포인터를 가지고 점프를 하는 걸로 보인다. 포인터가 어디인지 보려면 밑에 402000에 저장이 되어 있고. 7080B741이라느 숫자가 저장되어 있다. Ctrl + G 누르고 402000으로 이동을 해보자. 덤프창에서 보면 Import address table이다 PEview툴에서 볼 수 있다. 결론은 현재 프로그램을 올.. 패커와 프로텍터 : 레나 챌린지 (Level 20) 최초 패커의 등장 : "압축" -> exe 파일을 패커를 통해 압축한다. 프로텍터 : 패커에서 진화한 게 프로텍터이다. 패커와 목적이 다르다. "exe 파일 보호" 오늘 풀어볼 문제의 프로그램이다. 올리디버그로 프로그램을 열면 경고창이 뜬다. PE헤더에 나와있는 엔트리 포인트가 코드 섹션 밖에 있다는 내용이 적혀있다. (압축된 게 풀려야 된다는 의미?) 메모리 영역을 UnPackMe의 .text에서 실행이 되어야 하는데 46B000 주소부에서 실행되었다. F8로 하나씩 실행시키다보면 4271 B0 주소로 점프를 한다.. 여기 부분은 어디인지 모르기 때문에 메모리 영역을 확인해 보자. 메모리 영역을 보면 UnPackMe의 code 섹션 부분이다. DB라고 해가지고 데이터가 나와있는데 볼륨을 분석하기 위해서.. IsDebuggerPresent를 사용한 안티디버깅 방법 : 레나 챌린지 (Level19) 오늘 풀 문제들이다. - Debugger Detected.exe 프로그램을 실행시키면 정상적으로 작동이 되지만, 올리디버거에 올린 상태에서 실행을 시키면 정상적으로 동작이 되지 않는다. F8로 하나씩 실행시키다 보면 DialogBoxPraramA에서 메시지 박스가 출력이 된다. user32은 DLL 이다 -> 윈도 운영체제에서 유저와의 어떤 인터페이스를 제공한다. * user32자체에는 안티디버깅 기법이 걸려있지 않다. Ctrl + N 을 눌러 메시지 박스를 찾아 모든 곳에 브레이크 포인트를 걸어준다. 프로그램을 다시 실행시키면 브레이크 포인트가 걸리는 메시지 박스가 있다. 커널 스택에 들어가 보면 첫번째 스택에서 호출이 되었다. 최종적으로 어디서 호출이 되는지 따라가 보자 ctrl + g 을 눌러 [e.. 난독화 코드 해석과 패치 방법 : 레나 챌린지(Level18) 프로그램을 실행시키면 nag가 출력이 된다. 메시지를 보면 "nag을 제거하는데 두 개의 바이트를 패치해서 없앨 방법을 찾아내라"라고 적혀있다. 올리디버그로 열었는데 바로 밑에 우리가 원하는 nag 메시지 박스가 있는걸 볼 수 있다. 해당 부분에 브레이크 포인트를 걸고 실행을 해보니까...메시지 박스에 브레이크가 걸리지 않는다.. Ctrl + N 을 눌러 다른 곳에 메시지 박스가 존재하는지 확인하기 위해 브레이크 포인트를 걸어준다.. 다시 프로그램을 실행시키면 해당 부분에서 걸리게 된다. 내용을 밖에 나가서 보기위해 ctrl + g를 눌러 [esp]을 입력을 해보자. 점프하는 곳으로 오게 된다...그 위 주소를 보니까 nag 내용이 출력하는 메시지박스가 있는 걸 확인할 수 있다. 401011을 기억하고 .. 이전 1 ··· 3 4 5 6 7 8 9 ··· 21 다음