
view-source를 보면 $\_COOKE'user_lv'이 3초과 4이하면 solve(1)을 호출하여 문제가 풀리는 것으로 보인다.실수형으로 설정하여 조건을 만족시켜주자.페이지를 새로고침하면 점수를 획득할 수 있다.

소스를 확인하면 시간 정보와 admin.php라는 단서를 얻을 수 있다.admin.php로 가보면 password를 입력하라고 나온다.Cookie를 확인하면 time값이 들어가 있다.time값을 조작하여 새로고침하면 SQLi가 통한다.테이블 명을 알아내자.컬럼 명을 알

우측 하단을 클릭하면 검은색으로 바뀐다. 숫자만큼 검은색을 채우면 다음과 같은 도형이 만들어진다.이후 solved를 클릭하면 GET method로 색칠된 값을 보내고, 클리어했다고 나온다.name값을 아무거나 입력해보면 로그가 기록된다. (한글 입력 안됨)Clear페이

view-source를 클릭하면 Password로 입력된 값과 500번의 sha1 해시함수를 거치기 전의 값과 비교하여 맞다면 점수를 획득할 수 있다는 것을 확인할 수 있다.문제에서 주어지는 hash값은 새로고침할 때마다 새로 생성되므로, 바로바로 crack하기 보다는

Join 버튼을 클릭하면 Access Denied alert가 뜬다.script를 확인하면 Join버튼 클릭 시 무조건 Access Denited라고 나오고 Login버튼 클릭 시 mem/login.php로 이동된다.guessing으로 mem/join.php로 시도해봐

view-source를 클릭하면 소스코드를 볼 수 있고, 8번의 문자열 치환과 20번의 base64 디코딩을 거쳐서 id와 pw가 각각 admin, nimda가 되면 점수를 획득할 수 있을 것이라고 보인다.쿠키에서 점수를 얻기 위해 PHP Session값을 붙혀넣고 다

view-source를 누르면 쿼리의 결과가 2가 나와야 점수를 획득할 것으로 보이고, 2라는 값은 preg_match로 필터링된다.char함수를 이용하여 val에 char(50)넣으면 query error구문으로 간다. 즉, lv컬럼의 2라는 값은 존재하지 않는다.공

view-source를 클릭하여 소스를 확인하면, User-Agent의 값을 select하고 insert함을 알 수 있다. select 시에는 addslashes로 SQLi를 어느정도 방어하지만 insert query는 아무 필터링이 없다.agent에 hello','9

Password를 알아내야 하는 문제이다. 1, 2, 3이라 되어있는 링크를 클릭하면 Apple, Banana, Secret이라는 텍스트가 출력되고 GET method로 no라는 값이 넘어간다.column은 id, no라는 것으로 보아 no=1인 id의 값은 Apple

O라고 써져있는 부분의 소스를 보면 클릭 시 left.속성의 값이 +1px이 되고, left 속성의 값이 1600px이 되면 링크가 생성되며 go 변수에 left 속성의 값을 저장하여 GET method로 전송한다.그래서 go에 1600px를 넘겨 접근하면 no hac

view-source를 클릭하면 정규표현식을 이용하여 val에 들어있는 데이터와 매칭하여 참이면 점수를 획득할 수 있을 것으로 보인다.정규 표현식을 분해하자.1-3 : 1, 2, 3중에 1개가 들어가야 함a-f : a ~ f까지 중에 1개가 들어가야 함{5} : 바로앞

javascript challenge라고 한다. 소스 보자.전체 복사해서 한번 실행 시켜보자.개행문자를 통해 그래도 해석해보려고 노력해보면 (゚Д゚)는 function이나 class이거 한것 같다.JS 자동 정렬를 이용하여 편하게 본다.(゚Д゚)만 실행해보면 들어가 있

아무거나 넣어보고 제출을 누르면 no라는 변수에 GET method로 값을 전달한다.sleep(2)를 넣으면 SQLi가 통한다는 것을 알 수 있다.다양한 필터링이 걸려있다. space는 ()를 이용하여 우회하고 =는 in함수를 이용하자.(0)or(1)를 전달하여 참을

javascript 코드를 보면 .kr이 위치한 index에 30을 곱하면 pw값이 나온다.chrome DevTools를 이용하여 pw값을 구하자540값을 넣으면 점수를 획득할 수 있다.

문제 페이지에 접근하면 alert로 Access_Denied라고 나온다. javascript를 비활성화 하자. (chrome 기준 설명)비활성화 이후 다시 접근하면 빈 화면이고 소스를 보면 javascript를 확인할 수 있다.적힌 url로 접근하면 점수를 획득할 수

javascript를 보면 event.keyCode가 124일때 php파일명을 하나 알려준다.KeyCode table를 보면 124는 F13(Print Screen)으로 나와있지만, 눌러도 아무 반응이 없었다.그래서 console을 통해 값을 알아봤다.해당 파일에 접근

javascript를 보면 unlock값이 매우 긴 연산의 결과로 저장된다.복사 붙혀넣기를 하여 Console창에서 결과를 확인하자.결과 값을 넣고 check버튼을 클릭하면 점수를 획득할 수 있다.

view-source를 클릭하여 보면 $result'id'값이 admin이면 점수를 획득할 수 있다.no를 1로 넣으면 hi guest가 출력되는 것으로 보아 guest의 no는 1이다.따라서 0 or no=2를 넣으면 id='guest' and no=0이 되어서 값이

제출 버튼을 눌러보면 admin이 아니라고 한다.id를 aa로 하고 제출 버튼을 누르면 Cookie로 userid라는 값이 생긴다.형식을 보면 hash, base64 encoding, url encoding순으로 변환된 값으로 추정된다.aa의 hash는 0cc175b9

상단에 보면 2초라고 되어있는데, 모든 input값을 적고 Submit까지 2초안으로 해결해야하는 문제같다.captcah값은 매번 달라지는 듯 하다.python script를 짜서 돌려봤지만, 계속 Too Slow라고 한다.그렇다면 javascript를 직접 입력하자.

view-source도 없다. 단서를 직접 찾아야 한다. 먼저 id에 ' or sleep(2) -- 와 pw에 123을 넣으면 SQLi가 된다는 것을 확인할 수 있다. (pw도 마찬가지)id나 pw에 select라는 문자열이 들어가면 필터링된다.또한, id나 pw 중

username에 ' or sleep(5) -- 를 넣어보면 SQLi가 되는 것을 확인할 수 있다.join버튼을 누르고 username에 guest를 password에 guest를 넣어서 가입해보자.그 이후 로그인을 하면 password hash 값을 출력한다.해당 h

뭔 놈의 필터링이 있는지 거의 모든 2글자 이상의 데이터를 넣으면 no hack이라고 나온다.하지만 글자 사이에 %00(NULL을 URL encoding한 값)을 넣으면 출력된다.inject해야 하는 데이터를 만들어보자.?code=뒤에 직접 집어넣으면 점수를 획득할 수

view-source를 보면 ip변수가 127.0.0.1이 되어야 점수를 획득할 수 있을 거라고 추측된다.extract함수를 사용하고 있으므로 REMOTE_ADDR값을 조작할 수 있을 거라고 본다. 이때 COOKIE를 이용하면 될 것 같다.REMOTE_ADDR값을 변조

URL에서 인자 값을 보면 확장자를 제외한 파일을 출력하는 것으로 유추된다. 경험상 PHP의 include 함수를 사용하는 것으로 보인다.PHP의 filter기능을 이용하여 LFI를 시도하면 파일의 소스를 확인할 수 있다.결과는 base64로 인코딩되어 있고, 이를 디

view-source를 보면 id를 urldecoding한 값이 admin이면 점수를 획득할 수 있다.a만 URL encoding한 %61dmin을 전달하려고 했지만 브라우저가 강제로 a로 변경하여서 안됐다.%61을 한번더 URL encoding시켜보면 점수를 획득할

view-source를 보면 id가 admin이면 점수를 획득할 수 있을 것으로 보인다.no가 괄호로 감싸져 있기 때문에 먼저 연산되므로, 18번 문제와 같은 로직으로는 풀리지 않을 것이다.여러 필터링 문자들이 있기 때문에 다음과 같이 우회하자.'공백 -> '%0d''

flag.php링크를 클릭하면 아무것도 안보인다. php코드에 FLAG 값이 존재하는 것으로 추측된다.간단한 웹쉘을 만들어보자.업로드 해보면 '<' 문자가 필터링되어 php로서 파일을 실행시킬 수 없다..htaccess 파일을 올려서 php를 실행시키지 않고, 텍

파일 하나 올려보면 시간과 ip, 파일 명이 올라간다. 아마도 insert이후 ip기준 select인 듯 하다.다음과 같은 코드를 실행할 때, insert가 되는 것을 보아 file, time, ip순으로 값을 채워주면 될 듯하다.모든 값을 조작할 수 있지만, 시간은

view_source를 클릭하면 chall30_answer 테이블에서 flag컬럼의 데이터를 뽑아오는 코드를 확인할 수 있다.파일 하나를 업로드 해본다.PHP파일은 필터링 된다.PHP mysqli_connect에서 mysqli_connect 함수를 확인해 본다.이때,

10000 ~ 10100까지 숫자 한개를 골라 소켓 접속을 시도한다. 그렇다면 모두 대기 시켜주자포트 포워딩 이후 페이지를 새로고침해주면, FLAG를 획득할 수 있다.FLAG를 인증하여 점수를 획득하자.FLAG{i_have_a_big_and_beautiful_serve

view-source를 클릭하여 소스를 확인하자.get에 hehe를 전달하였더니 다음 문제가 나온다.다시 view-source를 클릭하여 소스를 확인하자.POST method로 필요한 데이터를 전달하면 다음 문제가 나온다.다시 view-source를 클릭하여 소스를 확

js가 난독화 되어있다.JS 자동 정렬를 이용하여 이쁘게 펴주자.밑 부분에 if else 구문이 있다. else구문의 alert가 debug me를 띄운다.if 문의 조건이 참일 때 어떤 값이 되는 지 개발자 도구로 확인해 보자.GET Method로 데이터를 전송하여

view-source를 클릭하면 GET method로 phone과 id를 입력할 수 있고, id가 5글자 초과이면 안되니 query를 넣을 곳은 phone밖에 없어보인다.ip는 자신의 공인 IP로 넣고, 괄호가 필터링이 아니기 때문에 쉽게 id가 admin인 데이터를

정전으로 index.php가 날라갔다고 한다. ".index.php.swp"으로 접근하여서 파일을 다운받은 후 열어보면 FLAG를 획득할 수 있다.FLAG를 넣어 점수를 획득하자.FLAG{what_about_the_nano_editor?}

view-source를 보면 업로드된 파일 이름에 접속한 IP를 적고 저장한 뒤, 접속 시간 기준 파일을 열어 적힌 IP:7777로 접속한다.netcat을 이용하여 포트포워딩 이후 리스닝하자.파일 업로드 스크립트를 실행하자.FLAG를 인증하여 점수를 획득하자.FLAG{

페이지 소스를 보면 admin.php라는 파일이 있음을 알 수 있다.admin.php로 접근해 보자.index.php에서 데이터를 넣으면 admin.php에 찍히는 것으로 보이고, SQLi는 안되고 '/'문자도 필터링 된다.<a href="https://

view-source를 클릭해보면 \\는 없어지고, ' 는 ' 2번으로 바뀐 뒤 15글자까지 추출한다. 또한 where 절에서 ' 가 안닫혀있다.따라서 15번째에 ' 가 있다면 ''로 바뀌어도 15번째 까지는 ' 이라서 통과가 될 것이다.입력하여 점수를 획득하자.

or 는 필터링 되는 것 같고 || 를 이용하면 no 에서 SQLi가 터짐을 알 수 있다.특이하게 no에 0||LENGTH(pw)=10 를 입력하면Success나 Fail이나 no hack같은게 아닌 admin password라는 창이 뜬다.and와 띄어쓰기가 필터링

view-source를 클릭하면 파일 업로드 시 FLAG를 입력 후 저장하지만, $upload_dir를 알 수 가없다.아무거나 올려서 반응을 보자.매우 긴 문자열을 넣어보면 $upload_dir의 값을 에러를 통해 알 수 있다.이제 적당한 이름의 파일을 업로드 후 오류

test.txt를 다운로드해보면 다음과 같은 내용이 있다.flag.docx는 access denied 메세지가 나온다.test.txt의 download링크를 보면 test.txt의 base64로 인코딩된 값임을 알 수 있다.따라서 flag.docx를base64인코딩하여

php확장자를 가진 파일을 업로드하였더니 wrong type이라고 한다.proxy를 이용하여 Content-Type을 image/png로 바꾸면 잘 업로드된다.FLAG를 인증하여 점수를 획득하자.FLAG{V2hhdCBkaWQgeW91IGV4cGVjdD8=}

view-source를 클릭하면 입력한 값의 5글자까지 자르고 system 의 변수로 들어간다.' 을 닫고 ; 으로 이어서 ls를 실행시켜주고 '를 다시 닫아주자.그리고 flag로 보이는 파일에 접근하자.FLAG를 인증하여 점수를 획득하자.FLAG{y2u.be/sW3R

view-source를 보면 id와 pw에 작은 따옴표, 큰 따옴표, 백 슬래쉬, 널 바이트가 포함되어 있다면앞에 백 슬래쉬를 추가하고 인코딩 타입은 utf-8에서 euc-kr로 변경한다.이때, mb_convert_encoding을 적용할 데이터에 %a1 ~ %fe +

view-source를 통해 소스를 보면 여러 필터링을 통해 select의 결과가 admin이면 점수를 획득할 수 있다.0 혹은 5이상이면 데이터가 없는 듯 하다.0 or id='admin'을 입력하면 id가 admin인 id와 cash를 select할 것이다.따옴표가

send를 클릭하면 메일이 전송되었다고 한다.

php 파일을 올려보면 텍스트로 올라간다.파일 명에 경로를 줘도 안된다.하지만 파일 명에 OS Command를 주면 먹는다. Delete 버튼을 클릭하면 아무래도 system함수로 삭제하나 보다.;ls 라는 파일을 업로드 후 삭제하면 FLAG를 획득할 수 있다.inde

view-source를 보면 여러 필터링이 되어 있다.

view-source를 보면 mb_convert_encoding 이후에 필터링이 늘었다.old 45번 처럼하면 풀리지는 않지면 여기서 사용했던 mb_convert_encoding 취약점을 활용하자.우선 id에는 %a1'/\*을 넣어서 select되는 것이 없게 하면서

우측의 view-source를 보면 id는 addslashes로 몇개의 문자를 필터링하고 pw는 md5 해쉬 값을 뜬다.이때, PHP MD5의 2번째 인자 값이 true이면, 리턴 값이 스트링이 아니라 바이너리이다.즉 md5의 결과가 바이너리 상으로 ' or 어쩌구가

admin page를 클릭하면 아이디와 패스워드를 입력하라는 문구가 나오고 취소를 누르면 view-source를 클릭할 수 있는 페이지가 나온다.view-source를 클릭하면 필터링이 없어 간단한 SQLi를 하라는 로직과 proxy를 이용하라는 로직이 나온다.먼저 a

view-source를 클릭하면 answer값이 테이블 명과 같으면 점수를 획득할 수 있다.procedure analyse()를 이용하여 컬럼이 어떤 DB에 속하는지어떤 테이블에 속하는 지, 최솟값 등 알 수 있다.단, where절이 있을 경우 존재하는 데이터를 넣어야

뭔가 휘리릭 지나간다. javascript를 확인하자.0.02초마다 텍스트가 바뀌기 때문에 인지하는 건 쉽지않으니 변수를 하나 두어 기록하자.FLAG를 인증하여 점수를 획득하자.FLAG{a7981201c48d0ece288afd01ca43c55b}

rank를 클릭하면 하단의 쿼리문이 나온다.score를 클릭하면 GET method로 score가 전달되고 id와 점수가 나온다.old-53에서 배운 procedure analyse를 이용하여 DB 및 컬럼 명을 알아내자컬럼 명은 id, score, p4ssw0rd_1

readme를 누르면 access denied라고 나온다.SQLi도 통하는 지 모르겠다.다만 게시판이 그렇듯 guest가 적은 글의 일부분인 he를 넣었을 때결과가 나오는 것을 봐서 like문을 이용했을 것이라고 추측한다.또한, flag{라고 입력했을 때, admin

view-source를 보면 넣는 데이터에 대해 출력 부가 없다.따라서 sleep등을 이용한 BlindSQLi를 해야할 것 같다.pw에 flag가 들어가므로 flag의 길이를 구해보자.FLAG를 획득하자. sleep 특성 상 네트워크 및 서버 등 여러 요인에 의해 오차

javascript 소스를 보면 socket io를 이용하여 메세지를 주고받는다.다수의 명령어는 찾을 수 없다고 하고, help를 치니 사용할 수 있는 명령어가 나왔다.flag를 치니 admin만 사용가능하다고 나온다.chrome 개발자 도구를 이용하여 username

view-source를 클릭하면 PHPSESSID가 숫자로 이루어져야 함을 알 수 있다.로그인 세션이 풀리겠지만 PHPSESSID를 숫자로만 이루어지게 변경 후재 로그인하여 문제를 다시 보면 Access Denied는 뜨지 않는다.그리고 Edge를 열어 (서로 다른 부

view-source를 클릭하면 id에 들어가는 값이 컬럼이 된다.SELECT 'admin' as id를 넣으면 id컬럼명에 데이터는 admin이 들어간다.따옴표를 넣으면 addslashes에 의해서 백슬래쉬가 앞에 붙어SQL Error가 날 것이다. 따라서 hex값으

script.js를 로드하고 있다.script.js에서는 report.php라는 링크를 알려준다.script태그를 넣으면 CSP(Content Security Policy)에 의해서 javascript를 사용할 수는 없었다.하지만 base 태그를 이용하여 injecti

Hello world :)를 클릭하면 popcat이 나온다.Hell world :(를 누르면 우는 모습의 고양이가 나온다.javascript를 보면 view.php로 GET method로 query라는 데이터에 일정 포맷의 데이터를 넣고 전송한다.Python을 이용하여

BABY문제와 유사한 문제이다.하지만 script.js를 상대경로를 통해 로드하는 것이 아닌 존재하지 않다.https://\*.google.com이라는 키워드가 있다.https://accounts.google.com/o/oauth2/revoke 를 이

preg_match밖에 없어서 난감하지만, catastrophic backtracking을 이용하여 시간이 오래걸리는 문자는 패턴이 매칭되어서 FLAG로 처리하면 될 듯하다.먼저 FLAG의 길이를 구하자.FLAG를 구하자.결과 값을 인증하여도 Invalid라고 나온다.

zip파일을 업로드하면 압축해제하여 각 파일들을 {현재 경로}/upload/파일 이름+{8자리 숫자}에 복사한다.이 때, ZIP Slip 취약점이 터질 경우 세션을 덮어쓸 수 있을거라고 판단된다.먼저, apache + php 서버를 구축하고, 세션을 저장하자.Apach

중간에 존재하는 물? 강? 때문에 보물상자로 접근이 불가능 하다.개발자 도구를 이용하여 전역변수에 접근이 가능한지 살펴보자.그 중 gamePlayer 변수의 \_x, \_y값을 보면 8,6이라는 점을 알 수 있다.캐릭터를 이동한 뒤 \_x, \_y값을 검증해보자. 현재

다음을 유의하며 쿼리를 짜야한다.query는 작은 따옴표가 없고 query2는 작은 따옴표가 존재한다.query의 결과가 admin이면서 admin이 아니여야한다. 즉, 쿼리 실행 시 마다 결과가 달라져야 한다.1번은 주석을 통해 우회하고, 2번은 IF를 사용할 수 없

Quine SQLi를 사용하면 되는 문제로서, Codegate CTF 2014에 나왔다고 한다.

체크 박스를 클릭하면 최소 0개를 선택하라고 하고, 선택안하면 필수항목이라 막힌다.다만 script상에서 FLAG가 존재한다.FLAG를 인증하여 점수를 획득하자.FLAG{how_can_i_pwn_googl3?}

참조되는 스프레드 시트의 A1에 원본 FLAG가 존재하고6번째 자리부터 19글자까지 ?로 치환한다.원본 스프레드 시트에 접근하려고 하면 엑세스가 거부된다.Burp Suite로 중간 패킷들을 잡아보자. Target을 설정하고,Request와 Response 둘 다 FLA