안경잡이개발자

728x90
반응형

  fly me to the moon 문제 또한 웹 해킹 문제 유형입니다. 자바스크립트(JavaScript) 클라이언트 단의 코드 분석을 통해 문제를 해결할 수 있습니다.

 

 

  [Start] 버튼을 누르면 간단한 형태의 오락실 게임이 등장합니다.

 

 

  게임을 대충 플레이한 뒤에 패배하시면, 다음과 같이 점수가 31337점이 되어야 한다고 합니다. 아무래도 고득점을 받아야 플래그(Flag) 값을 얻을 수 있을 것입니다. 어떻게 하면 플래그 값을 얻을 수 있을까요?

 

 

  난독화가 되어 있는 자바스크립트(JavaScript) 소스코드를 확인해야 합니다.

 

 

  이럴 때는 JS Beautifier를 이용할 수 있습니다. 매우 복잡한 난독화 기법이 사용되지 않은 경우, 간단한 형태의 난독화는 이러한 도구를 이용하면 풀리게 됩니다.

 

  ▶ JS Beautifier 홈페이지: https://beautifier.io/

 

  위 사이트에 접속하여 난독화 된 소스코드를 풀어 본 뒤에, 확인을 해보시면 this['getScore']라는 함수는 _0x8618x7() 함수와 동일합니다. 또한 _0x8618x7() 함수는 _0x8618x6이라는 변수의 값을 가져오는 함수입니다. 다시 말해 _0x8618x6이 점수(Score)를 의미하는 함수일 것이라고 예상할 수 있습니다.

 

 

  따라서 게임 페이지에서 개발자 도구(F12)를 실행하여, [Console] 탭으로 이동해서 다음과 같이 난독화가 풀린 소스코드를 통째로 복사한 뒤에 score에 해당하는 변수 값만 31,337로 변경하여 붙여넣기 할 수 있습니다.

 

 

  이후에 엔터(Enter)를 입력하여 적용한 뒤에 다시 게임을 플레이하면 정상적으로 Flag가 등장합니다.

 

 

 

728x90
반응형

728x90
반응형

  WTF_CODE 문제는 간단한 개발 관련 상식을 가지고 있는지, 혹은 모르는 내용을 인터넷에 적절히 검색하여 문제를 해결해 나갈 수 있는 능력이 있는지를 물어보는 문제 유형입니다.

 

 

  문제 풀이를 시작하면, 하나의 소스코드 파일을 제공합니다. 이를 다운로드 받아서 열어 볼 수 있습니다.

 

 

  실제로 에디터(Editor)나 브라우저를 하나 실행하여 이 파일을 열어 보면, 내부적으로 공백만 포함되어 있습니다.

 

 

  구글에서 .ws 확장자에 대해서 검색해 보면 Whitespace 프로그래밍 언어라고 나옵니다. 다시 말해 공백으로만 이루어진 프로그래밍 언어라는 의미인 것 같습니다. 온라인 IDE 중에서 이러한 프로그래밍 언어를 실행시켜주는 서비스가 있습니다.

 

  바로 ideone입니다. 홈페이지 주소: http://ideone.com/

 

  실제로 해당 온라인 IDE에 접속하여 소스코드 유형을 [Whitespace]로 설정한 뒤에 소스코드를 붙여넣기 하고, [Run] 버튼을 눌러 코드를 실행할 수 있습니다.

 

 

  실행 결과 다음과 같이 Key 값이 등장합니다.

 

 

 

728x90
반응형

728x90
반응형

  이 문제 또한 웹 해킹 유형의 문제입니다.

 

 

  문제 풀이를 시작하니 해당 페이지의 기능을 담당하는 PHP 소스코드를 보여주는 버튼이 등장합니다. [get source] 버튼을 눌러서 소스코드를 확인할 수 있습니다.

 

 

  소스코드를 확인합니다. 먼저 mysql_real_escape_string() 함수는 SQL Injection을 방어하기 위한 기본적인 함수입니다. trim() 함수는 사용자가 입력한 문자열에서 앞뒤 공백문자를 제거해주는 역할을 수행합니다.

 

  다시 말해 적절한 ID와 PW를 입력하여 로그인을 하면 플래그(Flag) 값이 나올 것 같습니다. 그렇다면 어떠한 아이디와 비밀번호를 입력해야 문제를 풀 수 있을까요? 이 문제는 문제 제목에서부터 볼 수 있듯이 필터링(Filtering)과 관련한 문제로 이해할 수 있습니다.

 

 

  이 문제는 SQL Injection 문제가 아닙니다. 페이지의 소스코드를 보면 다음과 같이 데이터베이스에 기록되어 있는 아이디 및 비밀번호 정보가 포함되어 있습니다. 따라서 SQL Injection 문제는 아니고, 인증에서의 필터링(Filtering) 우회 문제라고 할 수 있습니다.

 

  이 문제는 PHP는 문자열 비교에 있어서 대소문자를 구별하지만, MySQL은 기본적으로 대소문자를 구별하지 않는다는 점을 이용하면 풀 수 있습니다. (이는 MySQL을 이용하는 개발자들이 자주 간과하는 특징이기도 합니다.) 다시 말해 파라미터 $id 값의 문자열에 대문자를 끼워서 입력하면 문제를 풀 수 있습니다.

 

  예를 들어 아이디(ID) 값으로 GUEST라고 넣게 되면, 데이터베이스에 존재하는 guest라는 회원 정보 검색에 성공하기 때문에 GUEST라는 데이터를 얻습니다. 그렇기 때문에 필터링을 우회하여 블록(Block) 처리 된 사용자로 로그인을 할 수 있게 되는 것입니다.

 

 

  따라서 다음과 같이 아이디(ID)에 하나 이상의 대문자를 끼워서 ID 및 PW를 입력하면 문제가 풀립니다.

 

 

  다음과 같이 Password(Flag) 값이 등장합니다.

 

 

※ MySQL 대소문자 구별에 대하여 ※

 

  MySQL 온라인 컴파일러를 이용하면, 대소문자 구별을 정말 안 하는지 확인할 수 있습니다.

 

  https://paiza.io/en/projects/new?language=mysql

 

  위 사이트에 접속하여 다음과 같은 소스코드를 입력하여 실행해보세요.

 

create table Test(id integer, title varchar(100));
insert into Test(id, title) values(1, "Hello");
select * from Test where title = 'HELLO';

 

  실행 결과 정상적으로 데이터를 조회합니다.

 

 

728x90
반응형

728x90
반응형

  QR CODE PUZZLE 문제는 말 그대로 QR 코드를 찾아내는 문제입니다. 문제 유형은 웹 해킹입니다.

 

 

  문제 풀이 페이지로 이동하면 다음과 같이 QR 코드 퍼즐이 등장합니다. 다만 우리가 직접 퍼즐을 움직여서 QR 코드를 찾아내는 것은 쉽지 않을 것 같습니다.

 

 

  다만 개발자 도구(F12)를 실행하여 소스코드를 확인해 보면, #join_img라는 요소의 src 속성의 값을 변경하는 부분이 등장합니다. 이미지의 소스를 변경하겠다는 의미이므로, 이 소스 값이 원래 이미지를 나타내는 경로일 가능성이 높습니다.

 

 

  따라서 [Console] 탭으로 이동하여 해당 소스 부분의 문자열이 원래 어떤 것이었는지 확인합니다. 이렇게 콘솔 창에서 코드를 직접 실행하는 방식을 동적 분석 방식이라고 합니다.

 

 

  결과적으로 다음과 같이 해당 경로로 이동해보니, QR 코드 이미지가 등장했습니다.

 

 

  QR 코드는 온라인 디코더(Decoder) 서비스를 이용해서 직접 휴대폰으로 촬영하지 않아도 간단히 인식할 수 있습니다.

 

   ▶ ZXing Decoder 홈페이지: https://zxing.org/w/decode.jspx

 

 

  인식된 결과를 확인해 보니 다음과 같이 특정한 URL 주소가 등장했습니다.

 

 

  해당 URL 주소로 이동하니, 성공적으로 플래그(Flag) 값을 얻을 수 있었습니다.

 

728x90
반응형

728x90
반응형

  flee는 '달아나다'라는 뜻을 가지고 있습니다. 말 그대로 버튼이 달아나는 상황에서 버튼을 클릭해야 되는 문제라고 이해할 수 있습니다. 따라서 이 문제 유형 또한 웹 해킹 문제 유형입니다.

 

 

  문제 풀이를 시작하면 다음과 같이 [click me!]라는 버튼이 등장합니다. 이 버튼을 클릭하면 정답 처리를 받을 수 있다는 의미인 것 같습니다. 다만 마우스를 움직이면 이 버튼이 마우스를 피하여 이리저리 움직인다는 특징이 있습니다.

 

 

  따라서 개발자 도구(F12)를 실행하여 다음과 같이 [요소 선택] 버튼을 누릅니다. 그러면 화면이 정지 상태가 되며, 이 때 버튼을 클릭할 수 있습니다.

 


  그러면 다음과 같이 플래그(Flag) 값이 등장합니다. 또한 이 문제는 개발자 도구에서 [Elements] 탭으로 이동하여 소스코드 상에서 버튼 클릭 함수를 확인하고, 그것을 콘솔 창에 입력하는 방식으로도 문제를 풀 수도 있답니다. 

 

728x90
반응형

728x90
반응형

  already got 문제는 가장 쉬운 문제 유형으로, 웹 해킹 문제입니다.

 

 

  웹 페이지에 접속하면 다음과 같이 이미 Key 값을 얻었다는 메시지가 나옵니다. 그렇다면 서버로부터 이미 Key를 전달 받았다는 의미로 이해할 수 있습니다.

 

 

  따라서 개발자 도구(F12)를 실행한 뒤에 새로고침을 해보면, 다음과 같이 [Network] 탭에서 서버로부터 전달 받은 응답헤더(Response Header)에 [FLAG] 값이 포함되어 있는 것을 확인할 수 있습니다.

 

 

  결과적으로 다음과 같이 제출하여 정답 처리를 받을 수 있었습니다.

 

728x90
반응형

728x90
반응형

※ 유튜브 수익에 대한 세금은 어떻게 납부해야 되는가? ※

 

  유튜브(YouTube)를 운영하다 보면 광고 수익이 발생하게 됩니다. 다만 이렇게 얻은 광고수익에 대하여 어떻게 세금 납부를 해야 하는지 궁금하실 수 있습니다.

 

  세금의 경우 연 소득이 크게 발생하지 않는다면 굳이 사업자 등록을 하지 않아도 괜찮습니다. 저 또한 유튜브를 통해 얻는 연 소득이 매우 적기 때문에 사실상 세금 부담이 크지 않습니다. 하지만, 일정 규모 이상의 수입이 있다면 사업자 등록을 하는 게 유리하다고 하네요. 일반적으로 수 천만 원대 이상의 수익이 발생하시는 분들이 사업자 등록을 고려하시는 것 같습니다. 저는 수입이 적기 때문에 해당사항이 아닌 것 같습니다.

 

  더불어 MCN과 계약을 하신 분들이라면, MCN 측에서 정보를 알려 줄 것이므로 MCN과 계약을 하지 않은 1인 크리에이터 유튜버를 대상으로 어떻게 세금을 납부해야 하는지 가이드라인을 제시해드리겠습니다.

 

※ 부가가치세와 종합소득세 ※

 

  유튜브를 운영하여 수익을 창출할 때 세금 납부는 크게 두 가지입니다. 바로 부가가치세와 종합소득세인데요. 일반적으로 어떤 분야든 사업자 등록을 해서 물건을 팔면 부가가치세가 10% 붙습니다. 종합소득세는 1년간 번 돈에 대하여 소득세를 납부하는 것이구요!

 

  사업자 등록을 하지 않았다면, 부가세는 납부하지 않아도 됩니다. 또한 사업자 등록을 했다고 해도, 애드센스 수입은 해외에서 국내로 들어오는 금액이기 때문에 영세율 적용 대상이라고 합니다. 다시 말해 0%의 세금, 즉 실질적으로 부가세를 납부하지 않는다고 합니다. 그래도 사업자 등록을 한 상태라면 근거 서류와 함께 0%에 대한 신고를 해야 합니다. 즉, 사업자 등록이 되어 있는 경우에는 납부할 금액이 없다고 하더라도 신고는 해야 하는 것이구요!

 

  또한 종합소득세는 사업자 등록 여부와 상관 없이 필수적으로 납부를 해야 합니다. 종합소득세는 일반적으로 1월에서 12월 사이에 벌어들인 소득을 합산해 다음 해 5월에 신고하는 세금입니다. 소득세 신고를 하지 않으면, 나중에 가산세가 부과되기 때문에 꼭 소득세 신고를 해주셔야 한다고 해요!

 

※ 종합소득세율 ※

 

  그렇다면 얼마의 종합소득세를 신고해야 할까요? 연 단위로 보았을 때,


  과세표준이 12,000,000원 이하라면 세율은 6%
  과세표준이 12,000,000원 초과 ~ 46,000,000원 이하라면 15%라고 합니다.

 

  특히 연 소득이 억대가 넘어가는 경우에는 꼭 세무사를 고용하셔서 도움을 받으시는 게 현명할 것 같습니다. 다만 저 같이 소득이 적은 유튜버들은, 세무사를 고용하는 것이 더 부담스러울 수 있기 때문에 직접 신고를 하는 게 더 나은 것 같아요!

728x90
반응형

728x90
반응형

  이번 포스팅에서는 두 개의 유용한 소프트웨어를 소개하고자 합니다. 하드웨어에 대한 정보를 알려주는 프로그램들입니다. 먼저 HWiNFO는 하드웨어에 대한 정보를 빠르게 수집해서 요약(Summary) 정보를 보여준다는 특징이 있습니다. 드라이버 정보를 포함해 전반적인 하드웨어 관련 정보를 모두 보여줍니다. HWMONITOR는 더 간단한 정보만 요약해서 보여줍니다. 하드웨어 온도(Temperature), 전력 소모량, 각 장치의 이용량(Utilization) 등에 대한 정보를 포함합니다.

 

  ▶ HWiNFO 공식 홈페이지: https://www.hwinfo.com/download/

 

  HWiNFO 공식 홈페이지는 위 URL과 같습니다. 사이트에 접속한 뒤에 [Portable] 버전을 다운로드 하실 수 있는데, 가벼운 버전을 이용해도 기본적인 정보를 모두 확인할 수 있씁니다.

 

 

  다운로드를 하실 때는 설치 프로그램을 받아서 설치하는 방법과, 바로 Portable 프로그램을 받는 방법 등이 있습니다. 저는 바로 [HWiNFO Portable]을 선택하여 다운로드 했습니다.

 

 

  바로 프로그램을 실행하면 됩니다.

 

 

  [Run] 버튼을 누릅니다.

 

 

  실행 후에 약간의 시간이 흐른 뒤에 CPU 및 GPU에 대한 정보부터 Clock에 대한 정보를 알려줍니다. 더불어 메인 보드, 키보드, 오디오 장치, 메인 메모리 등에 대한 정보도 알려줍니다.

 

 

  또한 [Sensors] 버튼을 누르면 현재 각 장치가 얼마나 많은 전력을 소비하고 있는지, Clock 상태는 어떤지, 온도는 어떤지 등에 대한 정보를 알려준답니다.

 

 

  ▶ HWMONITOR 공식 홈페이지: https://www.cpuid.com/softwares/hwmonitor.html

 

  HWMONITOR 공식 홈페이지는 위와 같습니다. 사실 이 프로그램도 기본적인 하드웨어의 상태 정보를 알려주기 때문에 좋습니다. HWiNFO에서 알려주는 센서 정보처럼 간결하게 알려준다는 장점이 있습니다.

728x90
반응형

728x90
반응형

  기드라(Ghidra)미국 국가 안보국(NSA)에서 만들어 오픈 소스로 공개한 역어셈블리어 프레임워크입니다. 기드라를 이용하면 기존에 작성되어 있는 프로그램을 효과적으로 디버깅하고 분석할 수 있습니다. IDA Pro에 대적할 수 있는 무료 프로젝트라고 알려져 있습니다.

 

  ▶ 기드라(Ghidra) 공식 홈페이지: https://ghidra-sre.org/

 

  기드라는 공식 홈페이지에서 매우 간단하게 설치할 수 있습니다.

 

 

  기드라는 JDK 11 버전 이상을 요구합니다. 따라서 기드라를 정상적으로 이용하기 위해서는 사전에 JDK가 설치되어 있는지 확인해주셔야 합니다. JDK 11 이상이 설치되어 있지 않다면, JDK 11이 설치된 폴더를 입력하라는 박스가 나오게 됩디다. 혹시 JDK 11이 존재하지 않으시는 분은 아래 경로에서 설치하실 수 있습니다.

 

  ▶ JDK 11 홈페이지: https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html

 

 

  이제 Windows 사용자의 경우, Ghidra 배치 파일을 실행하여 프로그램을 동작시킬 수 있습니다.

 

 

  Ghidra를 처음 실행한 분이라면 다음과 같이 [Ghidra Help] 창이 등장할 겁니다. 이 문서를 참고하여 Ghidra를 어떻게 사용할 수 있는지 공부해 보시는 것을 추천합니다. 이 창을 닫더라도 [F1]을 누르면 다시 등장합니다.

 

 

  기드라를 실행한 뒤에 프로젝트를 생성하여, 특정한 프로그램에 대한 분석이 가능합니다.

 

 

  [Ctrl + N]을 눌러서 하나의 프로젝트를 새롭게 만들어 주겠습니다.

 

 

  저는 다음과 같이 Test라는 이름으로 하나의 프로젝트를 생성해 보았습니다.

 

 

  이제 분석을 하고자 하는 프로그램 파일을 프로젝트 이름이 적힌 곳으로 Drag & Drop하여 놓으면 파일을 열어서 분석할 수 있게 됩니다. 이후에 프로그램은 어떠한 Format으로 열 것인지 설정할 수 있는데, 기본 설정 그대로 프로그램을 열 수 있습니다.

 

 

  프로그램이 열린 이후에는 자신이 새롭게 연 프로그램에 대하여 요약 된 정보를 보여줍니다.

 

 

  또한 특정한 옵션에 따라서 분석해주는 기능이 존재합니다.

 

 

  [Yes] 버튼을 눌러서 기본 옵션 그대로 분석(Analysis)을 진행할 수 있습니다.

 

 

  또한 자주 많이 사용하는 기능으로는 문자열(String) 검색이 있습니다.

 

 

  문자열을 어떤 방식으로 분석할 지 설정할 수 있는데, 기본 설정 그대로 하면 길이가 5 이상은 문자열을 추출합니다.

 

 

  다음과 같이 특정한 문자열을 검색하여, 해당 문자열이 어디에서 등장하는지 확인할 수 있습니다.

 

 

  저는 해당 문자열이 나온 부분을 확인하여, 이 문자열이 어떤 함수에서 참조되는지 확인해보았습니다.

 

 

  특정한 함수의 소스코드 부분을 클릭하면, 자동으로 [Decompile] 영역에 디컴파일 된 소스코드 내용이 출력됩니다. IDA Pro의 Hex-Ray와 흡사하게 동작한다고 이해할 수 있습니다.      

 

 

  그리고 역어셈블리어 도구라고 하면, 플로우 그래프를 그려주는 기능을 빼놓을 수 없습니다. 저는 [Function Graph] 창을 한 번 열어보았습니다.

 

 

  이후에 Main 함수를 검색하여, 해당 함수를 [Function Graph]로 확인하면 다음과 같습니다.

 

 

  이상으로 Ghidra의 기본적인 기능을 확인해보았습니다.

728x90
반응형

728x90
반응형

  OllyDbg는 어셈블리어 수준의 디버깅 도구입니다. 무료로 이용할 수 있으며, 돌아가고 있는 런타임 환경의 프로그램에 붙여서 동적 분석을 진행할 수 있도록 해줍니다. 흔히 프로그램을 분석해야 할 때 단순히 소스코드만 보고, 실행 과정을 파악하기 어려울 수 있는데 그럴 때 쓰기 좋은 도구입니다.

 

  따라서 Dev C++을 이용하여 간단히 Hello World 프로그램을 작성한 뒤에 이를 분석하여, 프로그램을 패치(Patch)하는 실습을 해보겠습니다.

 

#include <stdio.h>

int main(void) {
	printf("Hello World\n");
	return 0;
}

 

  32-bit 프로그램으로 설정한 뒤에 프로그램을 생성하겠습니다.

 

 

  이후에 다음의 경로에 접속하여 OllyDbg를 설치합니다. 아래쪽으로 내려오면 [download] 링크가 있으며, 여기에 들어가서 OllyDbg 1.10 버전을 받으시면 됩니다.

 

  ▶ OllyDbg 홈페이지: http://www.ollydbg.de/ 

 

 

  이후에 다음과 같이 [Download OllyDbg] 버튼을 눌러 OllyDbg를 설치합니다.

 

 

OllyDbg는 기본적으로 [관리자 권한으로 실행] 해주셔야 합니다.

 

 

이후에 [F3]을 눌러서 바로 특정한 프로그램을 열어 디버깅을 진행할 수 있습니다.

 

 

  그럼 다음과 같이 프로그램 창이 실행 되고, 왼쪽 위에 실행 버튼을 눌러서 프로그램을 동작시킬 수 있습니다.

 

 

  실행 버튼을 누른 결과 'Hello World'가 출력됩니다.

 

 

※ 프로그램 디버깅 및 패치 해보기 ※

 

  이제 'Hello World'를 다른 문자열로 바꾸어 출력하도록 해봅시다. 먼저 Ctrl + F2를 눌러서 Restart를 합니다. [Hex dump]를 확인하여 비어 있는 메모리 주소를 클릭한 뒤에 스페이스 바(Space Bar)를 눌러서 DUMP 수정 창을 열 수 있습니다.

 

 

  다음과 같이 정보를 수정 할 수 있습니다. 그냥 바꿀 아스키 코드를 입력하여 [OK]를 누르시면 됩니다.

 

 

  저는 'ABC HELLO!'라고 변경해보았습니다.

 

 

  이후에 "Hello World" 문자열을 참조하는 부분에서 주소 값을 "ABC HELLO!"의 주소 값으로 설정합니다. 저는 주소 값 403310의 위치에 문자열을 넣었으므로 이 주소로 설정했습니다.

  

  

    실행 결과, 정상적으로 변경된 문자열이 출력되었습니다.

  

 

  다른 방법도 존재합니다. 별도의 문자열을 메모리에 기록한 뒤에 그것을 가리켜 출력하도록 하는 것이 아니라,  'Hello World'가 원래 존재하던 메모리 주소에서 값을 변경하는 방법입니다. Hex Dump창에서 [Ctrl + G]를 눌러 "Hello World"의 주소 검색할 수 있습니다.

 

 

  이제 해당 주소 값으로 이동하여 "Hello World"를 "Hell  World"로 변경해보았습니다.

 

 

  이번에 실행해 보시면 마찬가지로 정상적으로 실행됩니다.

 

 

※ 패치된 파일 저장하기 ※

 

  프로그램 패치 후에 저장하는 방법 또한 간단합니다.

 

 

  [Hex Dump]의 내용을 변경한 이후에 바로 우클릭하여 [Copy to executable file]을 누릅니다.

 

 

  이제 열린 창에서 다시 우클릭 하여 [Save File]을 눌러서 저장을 진행하시면 됩니다.

 

 

  저장된 파일을 실행해 본 결과, 정상적으로 변경된 코드 내용으로 출력되는 것을 확인할 수 있습니다.

 

 

728x90
반응형