Wargame (21) 썸네일형 리스트형 Webhacking.kr 1번 대충 윗 코드들은 이 페이지에 도달하기까지의 코드들이다. 그리고 중요한 아래 코드들을 보면 cookie값을 바꿔서 푸는 문제라는 것을 알 수 있다. cookie값에 현재 1이 넣어져 있는 상태이다. cookie['user_lv']에 3보다 큰 값을 넣어야 풀리는 문제이다. 그러나 cookie['user_lv']에 4 이상의 값을 넣으면 1로 값이 초기화된다. 그러므로 3보다 크고 4보다는 작은 숫자를 넣어줘야 한다는 것을 알 수 있다. 그래서 이렇게 확장 프로그램 EditThisCookie를 이용해 3.1을 넣어서 문제를 완료했다. 이렇게 한 후 뒤로가기 버튼을 누르면 풀리는 것을 볼 수 있다. Lord of SQLInjection 20번 dragon 코드를 보면 id가 admin이기만 하면 풀리는 게임인데 query를 보면 id가 guest로 고정되어있고 뒤에 주석처리가 되어있다. 그러나 #은 한 줄만 주석으로 하기 때문에 줄을 바꿔주고 query를 작성해주면 된다. 줄 바꿈 하기 위해서 %0a를 써주고 pw를 다시 지정해주고 or을 이용해서 id를 admin으로 지정해준다. 답 : pw=%0a and pw='' or id='admin Dreamhack - simple_sqli Lord of SQLInjection 문제는 꾸준히 풀었기 때문에 sqli 기초는 쉬웠던 것 같다. #!/usr/bin/python3 from flask import Flask, request, render_template, g import sqlite3 import os import binascii app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' DATABASE = "database.db" if os.path.exists(DATABASE) == False: db = sqlite3.connect(DATABASE) db.execute.. Dreamhack - cookie SQL Injection만 풀다 보니까 이제 막 기초를 밟고 있는 나에게는 어렵게 느껴지기도 해서 다른 wargame도 찾아보았다. Dreamhack에 가장 기초 부분부터 풀기 시작할 예정이다. cookie 문제의 코드 from flask import Flask, request, render_template, make_response, redirect, url_for app = Flask(__name__) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' users = { 'guest': 'guest', 'admin': FLAG } @app.route('/') def index(): username = request.cookie.. Lord of SQLInjection 19번 xavis query에 id='admin'으로 고정되어 있고 코드를 보면 pw를 찾으면 되는 문제인 것 같다. length를 이용하여 pw의 길이를 먼저 알아봤다. pw의 길이는 12이다. 라고 생각하고 전에 있던 코드를 돌려봤는데 이상한 이러한 결과가 나왔다. 혹시 싶어서 쳐봤지만 역시나 아니었고 코드가 문제인가 싶어서 여기저기 바꿔봤지만 절대 나오지 않았다. 그래서 찾아봤더니 역시나 생각 못한 방식이 있었다. 코드만 보고 쉬울 거라 생각했지만 pw는 유니코드로 이루어졌고 한글자당 4byte였다. 그러나 그것도 이것저것 코드를 바꿔봤지만 되지 않아서 아직 모르는 게 많기 때문이라고 생각하고 다른 분의 코드를 참고해보기로 했다. 지금 소개할 코드는 https://tutoreducto.tistory.com/60 이 .. Lord of SQLInjection 18번 nightmare id!='admin'은 고정적인 것 같고 pw에 값을 입력하는 것 같다. pw에 참인 값과 뒤 query를 무시할 수 있는 주석을 같이 넣어주면 될 것 같다. 최대 6글자까지 사용할 수 있다. 코드를 보면 #를 사용하지 못한다. 이 대신 사용할 수 있는 것을 찾아보았다. 주석 처리가 가능한 것들 -- # ;%00 코드를 보면 1과 2는 사용할 수 없기 때문에 3을 사용했다. 현재 ;%00을 넣는다고 치면 query는 pw=(';%00') and id!='admin'가 된다. 그럼 앞에 있는('를 받아줄 게 없기 때문에 똑같이 ')도 추가해준다. 지금 쿼리는 pw=('')만 존재하는 것과 다름없고 현재 쓴 것은 ');%00이고 %00는 1글자로 처리되기 때문에 총 4글자를 사용한 셈이다. 남은 글자는 총 .. Lord of SQLInjection 17번 zombie_assassin strrev와 addslashes를 몰라서 일단 먼저 찾아봤다. strrev : 문자열을 거꾸로 뒤집는 함수 addslashes : ' , ", /, NULL byte를 문자열과 구분하기 위해서 사용된다. (문자열 앞에 \를 붙여서 구분) 이런 특성이 있기 때문에 만약 내가 id에 "를 넣게 되면 일단 addslashes에 의해 \"가 되고 strrev에 의해 "\이러한 형태로 바뀌게 된다. 그걸 이용해서 16번과 동일하게 id의 뒤 싱글 쿼터와 pw='까지 무시해주고 or을 이용해 id에 값을 넣을 것이다. 이때 addslashes 특성을 사용하는 것 중에 '와 \는 사용해봤자 \가 의미가 없어지기 때문에 패스하고 나머지 2개 중 하나를 사용해준다. 또 pw도 똑같이 적용 되기 때문에 참인 값을 작성할.. Lord of SQLInjection 16번 succubus 코드를 보면 id와 pw를 입력해서 id에 값을 넣기만 하면 풀리는 문제인 것 같다. '(싱글 쿼터)를 쓰지 못하기 때문에 id에 값을 모두 넣어서 무효화시키는 건 불가능하고 또 id 값만 넣으면 되니 pw는 사실 딱히 필요가 없는 친구다. 그러나 id=''로 막혀있고 싱글 쿼터는 쓰지 못하니 pw의 '를 이용하여 id에 값을 넣을 것이다. 일단 id의 뒤 ' 하나를 무시해줘야 하는데 방법을 모르기 때문에 검색을 해보았다. 검색을 해보니 ' 앞에 \를 붙여 싱글쿼터가 아닌 그냥 문자로 인식하게끔 만든다. 이때 id='\' and pw = '' 이런 형태가 되는데 지금 이 상태에서 pw에 or과 무조건 참인 값을 이용해 id값을 채워주고 뒤에 있는 싱글 쿼터 하나는 %23을 이용하여 무시해준다. 답 : i.. 이전 1 2 3 다음