보안

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..
source code login form태그의 pw input태그에 값이 unlock과 똑같다면 function sub() 가 실행된다 계산은 js에서 풀어보았음 답 : 7809297.1
index.php PHPreg Step 1 Step 2 Step 1 : Open the door & Go to Step 2 !! step2.php PHPreg Step 1 Step 2
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 와 같은 요청으로 서버에 보내지는것을 확인 리눅스의 셸에서 다중 명령어를 사용할때는 ; (세미클론..
소스코드를 확인해보면 입력된 $val_id, $val_pw 를 base64 인코딩 방식으로 20번 인코딩 한 후 id와 pw의 값에서 1~8까지 해당 하는 숫자를 특수문자로 대치 하는 방식으로 코드가 작성되어져있다. 대치가 완료되면 $val_id값과 $val_pw 값은 user, password 라는 이름으로 쿠키에 저장된다 base64 : 바이너리 데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 문자로 표현하기 위해 만들어진 인코딩 decode_id가 admin, decode_pw가 nimda 이면 문제가 풀림 소스코드에서 주어진 base64로 인코딩하는 부분을 긁어와 $val_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..
조건. id에 \ 값이 들어오면 공백으로 대치됨. id에 ‘ 값이 들어오면 ‘’ 로 대치됨. id값은 인덱스 0부터 15자리까지 자른 값이 된다. result의 인덱스 0번값은 1이면 문제가 풀린다. SQL에서 True를 나타내는 값은 1, True 이다. 문제풀이 SQL구문에서 WHERE절에 ‘ 가 시작하고 닫히지 않은것을 확인하였음. SQL 구문의 뜻은 Table 1 에서 member 컬럼중 id의 길이가 14보다 작고, id값이 $_POST[’id’]} 인것을 찾아라 라는 뜻 일단 a 라는 값으로 시도를 해보았습니다. a’ 로 문제가 풀리지 않는것을 확인하고 다시 한번 코드 확인하였습니다. SUBSTR(0,15) 라는걸 보고 다시 재시도하였음 조건에 있는 ‘를 ‘’ 로 대치한다는 조건때문에 and ..
Future0_
'보안' 카테고리의 글 목록