본문 바로가기

Security

(10)
Dreamhack 드림핵 - Command Injection Advanced 웹사이트 구조는 간단했습니다. URL을 입력해야 ‘Submit’ 버튼을 누를 수 있고, http로 시작하는 URL만 입력할 수 있습니다. 임의의 URL을 입력 후 ‘submit’ 버튼을 누르면 제출이 되고, ./cache/밑에 특정한 문자열로 변환되어서 저장되는 것을 확인했습니다. 제공된 문제 폴더를 확인해보았습니다. 문제 폴더 안에는 Index.php 파일 한 개만 존재하였습니다. 11번째 줄에서 먼저 입력된 URL 값이 http로 시작되는지 확인합니다. 그 후, 14번째 줄의 shell_exec( )이 curl을 기본적으로 실행시킵니다. 하지만 escapeshellcmd( ) 이 등의 문자열을 이스케이프 처리합니다. 이 문제의 이름이 command injection이기 때문에 이 escapeshell..
SQL Injection 문제 제작 - Master 문제 설명 입문자를 위한 SQL Injection 문제 SQL Injection에 대한 기본적인 이해를 돕기 위한 문제입니다. 풀이자는 제공된 Flask 코드를 분석해 입력값에 대한 별도 처리가 없음을 식별하고, 이를 이용해 쿼리 공격문을 작성해야 할 수 있습니다. 이 문제의 목표는 관리자(admin)의 정보를 조회하기 위해, 입력 값을 조작하여 SQL 쿼리가 항상 참이 되도록 만드는 것입니다. 이를 통해 관리자의 전공 정보와 함께 FLAG를 획득할 수 있습니다. 풀이 가이드 사용자는 이름과 학번을 입력하여 학생 정보를 조회할 수 있습니다. 코드를 분석하면, 입력 값에 대한 검사 없이 SQL 쿼리에 직접 삽입되고 있음을 알 수 있습니다. 이는 SQL Injection 공격에 취약점을 가지고 있음을 의미합..
XSS 문제 제작 - Event 문제 설명 입문자를 위한 XSS 문제 XSS(Cross Site Scripting)에 대한 기본적인 이해를 돕기 위한 문제입니다. 풀이자는 제공된 Flask 코드를 분석해 XSS 취약점을 식별하고, 이를 이용해 공격문을 작성해야 할 수 있습니다. 이 문제의 목표는 태그와 alert 함수를 활용해 간단한 XSS 공격을 수행하는 특정 조건을 만족시키는 것입니다. 성공적으로 공격 스크립트를 제출하면, FLAG를 획득할 수 있습니다. 풀이 가이드 코드 분석: 제공된 Flask 코드를 분석합니다. 중요한 부분은 /submit 라우트에서 **request.form['name']**을 받아, name 입력값이 **
Dreamhack 드림핵 - amocafe 웹사이트 형태 확인 Amocafe 문제는 검은 고양이 아모의 최애 메뉴 번호를 입력하면 플래그를 얻을 수 있는 문제입니다. 그래서 가운데 보이는 "my favorite menu is 1_c_3_c_0__ff_3e .."에 있는 같은 암호같이 생긴 1_c_3_c_0__ff_3e를 활용하여 풀어야 할 것 같았습니다. 입력칸에 아무 숫자나 입력하고 오더버튼을 누르면 try again 이라고 뜨는 것을 확인할 수 있었습니다. 코드 확인 그래서 소스코드를 보면, 6번에서 9번째 줄 보시면 flag.txt의 내용을 FLAG 라는 변수에 넣고, 14번째 줄에 이 변수 FLAG를 가져온 다음에 16~26번째 줄에서 비트 연산을 수행하여 나온 결과를 st 배열에 넣고 27번째줄, menu_str에서 합치는 과정을 볼 수..
Dreamhack 드림핵 - CSRF Advanced 웹사이트 형태 확인 드림핵 사이트의 문제 설명 부분에는 크게 얻을 정보가 없기 때문에 바로 서버 생성해서 사이트로 넘어가보았습니다. 위 사진은 CSRF 문제 화면입니다. 홈화면 포함해서 로그인,체인지 패스워드,csrf 페이지, flag 등 5가지의 페이지가 있었습니다. 그래서 문제 파일을 다운받아서 app.py 코드를 살펴보았습니다. 코드 확인 먼저 기본 페이지 코드에서 flag를 얻을 수 있는 방법을 알 수 있었습니다. Admin 계정으로 접속하면 flag를 얻을 수 있는 것으로 보입니다. 다음은 로그인 페이지입니다. 로그인에 성공했을 때 세션과 CSRF 토큰이 주어지는 것을 알 수 있습니다. 다음은 체인지 패스워드 페이지입니다. 이전 로그인 페이지에서 찾은 토큰 값과 바꾸고 싶은 비밀번호를 같이 넣어..
DOM-Based-XSS에 대하여 DOM을 설명하기에 앞서서 먼저 BOM에 대해서 잠깐 말씀드리겠습니다. 대부분 서비스는 웹 브라우저를 바탕으로 실행이 되는데, 이 브라우저와 관련된 객체들의 집합을 Browser Object Model , BOM이라고 부릅니다. 이 BOM으로 브라우저와 관련된 기능들을 구성하는데 DOM이 이 BOM 중의 하나입니다. DOM은 Document object model의 약자입니다. Document는 문서이고, Object는 객체로 번역이 됩니다. 그래서 번역하면 문서 객체 모델이라고 번역할 수 있습니다. 그럼 이 문서객체란 무엇이냐면 html 태그나 body태그 같은 html문서의 태그들을 JavaScript가 이용할 수 있는 객체(object)로 만들면 그것을 문서 객체라고 합니다. 그리고 모델이라는 단어..
Dreamhack 드림핵 - random-test 웹사이트 형태 확인 문제 설명에서 나와있듯이 사물함 번호에는 알파벳 소문자 혹은 숫자를 포함하는 4자리 문자열을 입력해야 하고, 자물쇠 비밀번호는 100 이상 200 이하의 정수를 입력해야 합니다. 하지만 둘 다 랜덤값이라는 점이 문제가 될 것 같습니다. 코드 확인 alphanumeric = string.ascii_lowercase + string.digits for i in range(4): rand_str += str(random.choice(alphanumeric)) 위 코드에서 4개의 문자열을 랜덤으로 생성하는 것을 확인할 수 있습니다. if locker_num != "" and rand_str[0:len(locker_num)] == locker_num: if locker_num == rand_s..
Dreamhack 드림핵 - simple_sqli 웹 사이트 형태 확인 이 문제는 다른 기능 없이 로그인 기능만 있는 파이썬 플라스크 기반 웹서버 입니다. 코드 확인 먼저 app.py 파일을 살펴보겠습니다. 서버가 생성되면서 테이블이 자동으로 생성되게 됩니다. 그와 동시에 (guest, guest) 계정과 (admin, ~~) 계정이 생성됩니다. admin 계정의 비밀번호는 binascii.hexlify 형태로 생성됩니다. 즉 16진수 난수 형태로 생성된다는 것을 알 수 있습니다. 다음은 로그인 함수를 살펴보겠습니다. res 라는 변수에 입력한 userid와 userpassword가 담겨서 데이터베이스에 요청이 가는 것을 확인할 수 있습니다. 별다른 sql injection 방지 코드와 같은 필터링이 없기 때문에 간단한 방법으로 공격을 시도해볼 수 있을..