보안

view-source GET요청으로 id값이 admin 이면 문제가 풀림 하지만 preg_match 함수로 “admin” 이라는 문자열이 있으면 필터링되어서 no! 라는 문자가 뜸 preg_match 필터링 우회 admin 을 URL Encoding 하여서 시도해봄 admin → %61%64%6D%69%6E → ?id=%61%64%6D%69%6E URL을 Encoding 하였는데 값을 넣고 요청을 보내면 URL이 admin 으로 바뀌고 가 뜨는것이 확인됨 php문 내부에 GET[′id′]=urldecode(_GET['id'] = urldecode(G​ET[′id′]=urldecode(_GET['id']); 를 확인하였는데 이 코드때문에 만약 %61%64%6D%69%6E 를 한번 더 URL Encoding..
Page 문제 소스코드 FLAG는 flag.py 에 있다고 힌트가 있었음 /ping 에 들어가면 해당하는 Host로 Ping 테스트를 할수 있는 기능이 있음 Ping! 버튼을 눌러보면 리눅스의 셸에서 실행된 결과값이 사이트상에 렌더링되어 출력된다. 다시 한번 코드를 살며보면 host = request.form.get('host') cmd = f'ping -c 3 "{host}"' 이 쪽부분에서 host는 ping값을 보낼 host를 form태그상에서 불러오고 cmd는 미리 짜여진 명령어안에 host의 ip만 대입하여 실행시키는것을 확인할 수 있다. POST 요청의 패킷을 한번 살펴보면 host=8.8.8.8 와 같은 요청으로 서버에 보내지는것을 확인 리눅스의 셸에서 다중 명령어를 사용할때는 ; (세미클론..
index.php PHPreg Step 1 Step 2 Step 1 : Open the door & Go to Step 2 !! step2.php PHPreg Step 1 Step 2
source code login form태그의 pw input태그에 값이 unlock과 똑같다면 function sub() 가 실행된다 계산은 js에서 풀어보았음 답 : 7809297.1
소스코드를 확인해보면 입력된 valid,val_id, val_pw 를 base64 인코딩 방식으로 20번 인코딩 한 후 id와 pw의 값에서 1~8까지 해당 하는 숫자를 특수문자로 대치 하는 방식으로 코드가 작성되어져있다. 대치가 완료되면 valid값과val_id값과 val_pw 값은 user, password 라는 이름으로 쿠키에 저장된다 base64 : 바이너리 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 문자로 표현하기 위해 만들어진 인코딩 decode_id가 admin, decode_pw가 nimda 이면 문제가 풀림 소스코드에서 주어진 base64로 인코딩하는 부분을 긁어와 validval_id와 val_pw를 admin, nimda로 지정 후 인코딩하고 출력되게 코드를 수정하고 개인 서버에서 php를 돌..
문제 웹사이트 접속 사이트는 Python의 Flask와 Jinja2 템플릿엔진으로 구동되고 있다. Jinja2 ← 템플릿 엔진의 취약점을 사용하여 exploit 할 수 있다. 취약점의 이름은 SSTI(Server Side Template Injection) 이다. SSTI : SSTI(Server Side Template Injection) 취약점은 공격자가 서버측의 기본 템플릿 구문을 이용하여 악성 페이로드를 삽입 한 다음 서버 측에 실행되면서 생기는 취약점이며 웹 템플릿 엔진마다 사용되는 페이로드가 다릅니다. 웹 템플릿 : 웹 템플릿 엔진은 웹 템플릿과 웹 컨텐츠 정보를 처리하는 목적으로 설계된 소프트웨어 웹 템플릿은 예를 들어 index.html 파일 안에 {{ }} 를 이용하여 태그안에 {{ 55..
-HTML 코드 -문제파일 코드 #!/usr/bin/env python3 from flask import Flask, request, render_template app = Flask(__name__) try: FLAG = open("./flag.txt", "r").read() # flag is here! except: FLAG = "[**FLAG**]" @app.route('/', methods=['GET', 'POST']) def index(): menu_str = '' org = FLAG[10:29] org = int(org) st = ['' for i in range(16)] for i in range (0, 16): res = (org >> (4 * i)) & 0xf if 0 < res < 12..
Code js의 if문이 true로 작동하도록 실행해보려고함. var ul 은 현재 URL임 = https://webhacking.kr/challenge/js-1/ ul은 https://webhacking.kr/challenge/js-1/ 에서 “.kr” 가 시작하는 곳의 index 값으로 대입됨 ul은 index값 * 30 으로 대입됨 문제풀이 var ul=document.URL; == https://webhacking.kr/challenge/js-1/ ul=ul.indexOf(”.kr”); == 18 ul=ul30; == 1830 = 540 답 : 540