본문 바로가기

전체 글

(44)
Switching Command https://dreamhack.io/wargame/challenges/1081 Switching Command Description Not Friendly service... Can you switching the command? dreamhack.io 개요 이 문제의 골자는 PHP의 switch-case 문에서 사용하는 loose-comparison을 악용하여, 로그인하려는 사용자가 admin인 것처럼 속이는 것이다. 취약점 분석 맨 처음에는 "index.php" 에서 JSON 데이터를 파싱한 다음, username이 "admin"이라면 문자열 "no hack"을 화면에 표시하고 작업을 진행하지 않는다. 따라서 "그림 1"의 "Username"에 "admin"을 입력하더라도, shell을 얻는 등의 ..
CloudGoat vulnerable lambda 명령 덤프 CloudGoat의 vulnerable_lambda 문제에 사용한 명령어 및 결과를 정리한 덤프입니다. 아래에 나오는 "cg-bilbo-vulnerable_lambda_cgidfgo7f230y0"라는 유저는 현 시점에서 삭제한 상태입니다 $ aws configure --profile bilbo AWS Access Key ID [None]: AKIAYVBD5ZHSWXYDYZMZ AWS Secret Access Key [None]: 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 Default region name [None]: us-east-1 Default output format [None]: $ aws --profile bilbo --region us-east-1 sts ge..
simple_sqli_chatgpt https://dreamhack.io/wargame/challenges/769 simple_sqli_chatgpt 어딘가 이상한 로그인 서비스입니다. SQL INJECTION 취약점을 통해 플래그를 획득하세요. 플래그는 flag.txt, FLAG 변수에 있습니다. chatGPT와 함께 풀어보세요! Reference Server-side Basic dreamhack.io 이 문제는 SQL 인젝션 문제이다. 서버의 소스코드를 살펴보면서 그 이유를 살펴보도록 하자. 웹페이지는 물론, 서버에서도 사용자가 입력하는 값(userlevel)을 필터링을 안하고 있다. userlevel에 SQL 구문을 넣어서 userlevel을 0으로 만들면, admin으로 로그인 할 수 있을 것 같다. 예상과 달리, admin대신 g..
PHPreg https://dreamhack.io/wargame/challenges/873 phpreg Description php로 작성된 페이지입니다. 알맞은 Nickname과 Password를 입력하면 Step 2로 넘어갈 수 있습니다. Step 2에서 system() 함수를 이용하여 플래그를 획득하세요. 플래그는 ../dream/flag.txt에 위치합니 dreamhack.io 결론 먼저 얘기하자면, 정규표현식 문제이다. step1의 이름(input_name)에서는 정규표현식을 우회해야 하고, 비밀번호(input_pw)에서는 정규식에 부합하는 문자열을 써넣어야 한다. step2에서는 " flag"문자열을 탐지하는 정규 표현식을 우회해야 한다. 우선 step1 부터 살펴보자. 1) "//pw filtering"..
C언어를 기계어로 변환해보기 1. C언어가 기계어로 컴파일 하는 과정 요약하자면, C언어로 파일 작성 -> 컴파일러(Compiler)에서, 어셈블리어로 변환(확장자: .s) -> 어셈블러(Assembler)에서, 어셈블리어를 기계어로 변환(확장자: .o) -> 링커(Linker)에서, 실행파일(.exe) 생성[2] VSCode에서 개발할 때는 어셈블리어로 컴파일 하기 전에, 전처리한 파일을 생성한다. 이는 Visual Studio Intermediate File 이라고 하며, 확장자는 .i 이다. 그러면, Intermediate File, 어셈블리 파일, object 파일(.o)이 어떻게 생겼는 지 gcc를 이용해서 살펴보자. 2. gcc로 .i, .s, .o 파일 만드는 과정 입력받은 정수 2개를 곱한 결과를 출력하는 프로그램이 ..
DreamHack) ex-reg-ex https://dreamhack.io/wargame/challenges/834 ex-reg-ex Description 문제에서 요구하는 형식의 문자열을 입력하여 플래그를 획득하세요. 플래그는 flag.txt 파일과 FLAG 변수에 있습니다. 플래그 형식은 DH{...} 입니다. dreamhack.io 문제에서 주어진 링크에 들어가서, 알맞은 값을 써넣으면 flag가 나오는 형식의 문제이다. 그러면, 무엇을 기준으로 알맞는지 파악할까? 정규표현식(Regular Expression)을 이용해서 맞는지 아닌 지 파악한다. 제공하는 코드를 한번 보자. m은 입력받은 값이 정규식에 들어맞는 지를 판단한다. 만약 정규식에 부합한다면, flag를 화면에 표시한다. 그러면 주어진 정규식 " dr\w{5,7}e\d+am..
오버플로우 ? 언더플로우 오버플로우는 선언한 자료형이 감당할 수 있는 크기보다, 더 큰 값이 들어올 경우 발생하는 현상이다. 언더플로우의 경우, 자료형에 담을 수 있는 가장 작은 수 보다, 더 작은 수를 담으려고 할 때 발생한다. 예를 들어 C의 char 자료형은 -128이상 127 이하의 수를 담을 수 있다. 만약 char에 -129가 들어간다면, 언더플로우가 발생해서 그 값이 char의 최댓값인 127로 변경된다. 반대로 char에 130이 들어가면, 오버플로우가 발생하고, 값은 최솟값 근처인 -126으로 바뀐다. char, int의 오버플로우, 언더플로우를 볼 수 있는 코드를 아래와 같이 작성했다. #include int main(void) { char n1 = -129; // char에 저장 가능한 최솟값(-128)보다 ..
특정 위치의 비트를 끄기 이번에는 임의의 정수 n 에서, k번째 비트만 바꿔버리는 방법에 대해 알아보겠습니다. 이때 k번째 비트는 2진수 n의 맨 뒤에서부터 세는 점에 유의해주시기 바랍니다. 예를 들어, n= 93 에서 k = 4 번째 비트만 0으로 바꾸는 경우를 살펴보자. n을 이진수로 나타내면 1011101이다. 1 0 1 1 1 0 1 n에 적용할 비트마스크를 mask라고 하자. mask는 1을 왼쪽으로 3( = k - 1)회 shift한 수 이고, 아래와 같다. 0 0 0 1 0 0 0 n과 mask 끼리 xor 연산을 하면, k번째 비트만 1에서 0으로 바뀐 것을 알 수 있다. 1 0 1 0 1 0 1 비트를 1에서0으로 끄는 것 대신, 그 반대의 경우를 생각해보자. n = 85 에서, 2번째 비트(k = 2)를 0에서..