목록Study/Web Hacking (56)
촉촉한초코칩

LFI 취약점FI 취약점 : 파라미터 값을 정확하게 검사하지 않을 때 해커가 피해자 서버에서 파일을 읽고 실행할 수 있도록 하거나 서버에 악성 스크립트 또는 웹쉘을 만들고 웹 사이트 변조에 사용할 수 있다. LFI는 공격 대상 서버에 위치한 로컬 파일을 노출하거나 실행할 수 있다. → include() 사용 시 입력에 대해 필터링 하지 않아 include 문에서 로컬 파일을 실행할 수 있다. 코드 index.phppage 파라미터에 php파일명을 적으면 해당 페이지를 보여주고 없으면 main.php를 보여준다. list.php.. . index.html을 필터링하는 것 같다. view.php/flag | i /i를 필터링한다. file_get_contents : 전체 파일을 문자열로 읽는다. /var/..

SSTI https://www.igloo.co.kr/security-information/%EC%9B%B9-%ED%85%9C%ED%94%8C%EB%A6%BF-%EC%97%94%EC%A7%84-%EA%B8%B0%EB%B0%98%EC%9D%98-ssti-%EC%B7%A8%EC%95%BD%EC%A0%90-%EB%B6%84%EC%84%9D/웹 어플리케이션에 적용되어 있는 웹 템플릿 엔진에 공격자의 공격 코드가 템플릿에 포함된 상태에서 서버 측에서 템플릿 인젝션이 발현되는 공격 템플릿 엔진 : 템플릿 양식과 특정 데이터 모델에 따른 입력자료를 합성하여 결과 문서를 출력하는 소프트웨어 및 컴포넌트 → 브라우저에서 출력되는 웹 문서를 위한 것 SSTI 취약점서버 측에 템플릿이 구성되어 있고 사용자 입력 값이 기존 ..

Step 1문제 파일을 다운받으면 app.py 파일이 있다. 여기서 step1의 param값을 알 수 있다. Step21. paramstep1_num와 비교하는 prev_step_num은 step1에서 확인할 수 있다. url에 prev_step_num이 포함되어 있다. 우선 이 값이 param의 값이라고 생각했다. 2. param2step2_num은 직접 만들어서 hidden으로 숨겨두었다. hidden 된 부분을 text로 바꿔서 보이게 했더니 그럼 input text 값이 3개가 된다. 각각 숫자를 넣어봤는데 넘어가지지 않았다. 어...ㅋㅋㅋㅋㅋ그게 아니라 flag 를 봐야하는 거였다. 생각해보니 /step2에는 param과 param2의 값을 가져오고 비교하는 부분이 없어서 밑을 더 내려..

코드다운로드 받은 파일에는 index, step2.php 파일이 들어있다. step 파일을 보면 pw와 name의 정규포현식과 값이 들어있다. preg_replace() 함수는 문자열 내에서 정규 표현식을 사용하여 특정 패턴을 찾아 다른 문자열로 대체한다고 한다. name, pw 필터링 pw 값에 알파벳이 들어있으면 안됨 name에 nyang값이 있으면 ""로 치환 → 알파벳이 들어있으면 안되는데 pw의 저 값은 맞아야 한다..? 정규표현식 검사하는 함수를 우회할 수 있는 입력값을 사용한다. 공격 1. pw에는 알파벳이 들어가면 안됨 2. name의 nyang은 공백으로 치환되기 때문에 우회 → dnynyangang03103. 알파벳 입력이 안되므로 정규표현식에 맞게 문자열을 입력해야 함 /\d*\@\..

코드이미지 파일을 img_files에 넣고 순서대로 출력해주는 줄 알았는데.. 이미지 순서에 맞게 글자를 조합해보았는데 틀렸다고 떴다. 글자를 멈추는 방법에 대해 알아보았다. move가 글자 위치를 조정해주는 것 같아서 그 move를 실행해주는 곳을 찾아보았는데 requestAnimationFrame가 나왔다. 개발자도구에서 이부분을 주석처리 하려고 했으나.. 수정이 안된다. requestAnimationFrame 멈추기라고 검색하니까 뭐가 많이 나오는데.. console창에서는 접근이 잘 안돼서 개발자도구에서 함수에 접근하는 방법을 찾아보았다. https://duklook.tistory.com/65 이 부분을 누르면 된다. 저 코드가 계속 반복실행되는 것 같다. 멈추고 위에서 아래로 조합해보면 된다..

코드#!/usr/bin/python3from flask import Flask, request, render_templateimport reapp = Flask(__name__)try: FLAG = open("./flag.txt", "r").read() # flag is here!except: FLAG = "[**FLAG**]"@app.route("/", methods = ["GET", "POST"])def index(): input_val = "" if request.method == "POST": input_val = request.form.get("input_val", "") m = re.match(r'dr\w{5,7}e\d+am@[a-z]{..