Main 70

PHP addslashes(), magic_quotes_gpc

webhacking.kr문제에서 자주 등장하는 addslashes함수 ㅎ addslashes() : 데이터베이스 쿼리에서 필드값으로 저장하기 전에 사용되는 함수이다. 만일 문자열에 작은따옴표('), 큰따옴표("), 백슬래시(\), NULL 문자(%00)가 포함되어 있다면, 이 문자들 앞에 백슬래시(\)를 붙여 특수 문자가 순수한 하나의 문자로 인식되도록 해준다. 만약 데이터베이스에 저장하기 전에 addslahses함수를 사용하지 않는다면, 데이터베이스의 필드값에 저장되는 문자열 가운데 특수 문자가 포함될 경우 그 문자가 하나의 일반적인 문자가 아닌 특수 문자로 인식되어 오류를 일으키거나 잘못된 결과를 초래할 수 있다. 예를 들어, I'm studying English를 쿼리로 전송하게 되면 I'm의 작은..

기초 다지기 2020.02.25

webhacking.kr 4번

view-soure 클릭 ! sleep(지연시간) : 입력된 초만큼 php코드의 실행을 지연시키는 함수 $_SESSION['세션 변수이름'] : 세션이 생성되고 나면 세션 변수를 $_SESSION 배열에 등록할 수 있고, 생성된 변수는 $_SESSION['세션 변수이름']으로 접근할 수 있다. rand(최소값, 최대값) : 난수 생성기 코드를 해석해보면, 'chall4'라는 세션이 존재하고 'chall4'세션 값이 $_POST['key']와 같으면 문제가 해결된다. 값이 같지않으면 $hash는 10000000~99999999사이의 값 중 하나에 "salt_for_you"를 더한 값으로 설정된다. $hash는 'chall4'세션값이 되고, sha1해시로 500번 암호화한다. 그리고 그 500번 암호화된 값..

webhacking.kr 61번

문제 들어가자마자 보이는 view-source 클릭 ! 코드를 해석해보면, GET방식으로 id값을 받고, 값이 없으면 $_GET['id']는 guest가 된다. $_GET['id']에 (, ), select, from, ,(콤마), by, .(따옴표)가 존재하면 Acess Denied가 출력된다. 입력된 $_GET['id']는 select문에 들어가게 되는데, 이전 문제와 달리 $_GET['id']가 삽입되는 위치는 where절이 아니라 칼럼명 자리에 들어가게 된다. select {$_GET['id']} from chall61 order by id desc limit 1 => chall61테이블에서 $_GET['id']칼럼을 조회하는데, 검색결과를 id값의 내림차순으로 1행만 출력한다. 이 때, sele..

webhacking.kr 59번

역시 view-source 먼저 보기 ㅎㅅㅎ 코드를 해석해보면, $_POST['lid']와 $_POST['lphone']을 입력받고 이 값들을 select문의 id,phone칼럼의 값으로 쓴다. 이 때, $result['lv']이 admin이면 문제가 해결된다. $_POST['id']와 $_POST['phone']도 입력을 받는데, $_POST['phone']의 길이는 20을 넘으면 안된다. $_POST['id']에는 admin이 포함되면 안되고, $_POST['phone']에는 admin, 0x, hex, char, ascii, ord, select가 포함되면 안된다. ( Access Denied 출력 ) $_POST['id']와 $_POST['phone']은 insert문의 value에 삽입된다. 먼..

webhacking.kr 58번

command창이 나오길래 명령어를 입력해봤다. ls를 입력하면 index.js temp.html이 출력되고, flag를 입력하니까 persmission deniend... admin only! 이라고 출력되었다. 힌트를 얻기위해 소스코드를 보았다. socekt.io() : 실시간으로 상호작용하는 웹 서비스를 만드는 기술인 웹소켓을 쉽게 사용할 수 있게 해주는 모듈 var socket = io() 부분이 socket을 연결해주고, socket.emit함수로 데이터를 전송하고 socket.on함수로 수신한다. e.preventDefault() : 페이지를 이동시키거나 form안에 있는 input 등을 전송한다던가 그 동작을 중지시키는 함수 코드를 보면, 소캣통신을 하는데 username은 'guest'로 ..

webhacking.kr 56번

readme를 누르면, access denied라고 뜨는 것을 봐서 readme를 읽는 것이 문제인 것같다 ( •́ ̯•̀ ) 소스코드에도 아무런 힌트가 없어서 search에다가 이것저것 입력해보았다. import string import urllib3 import requests urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) url = "https://webhacking.kr/challenge/web-33/" headers = {"Cookie" : "세션 값"} proxies = { "http" : "http://127.0.0.1:8888", "https": "https://127.0.0.1:8888" } for i in ran..

webhacking.kr 54번

문제를 누르자마자, FLAG값이 한글자씩 호다닫ㄱ 나오더니 마지막에 ?로 끝나버린다 ( ̄(エ) ̄)ノ 소스코드를 보니 answer함수가 실행돼서 그러는 것같다. 함수 내용을 보면, 0.02초마다 재귀함수를 이용해 계속 다른 값을 대입하면서 aview.innerHTML의 값을 바꾼다. 이를 반복하다가 x.responseText값이 없으면 ?로 바꾸는 것이다. 그래서 마지막에 ?로 끝나는 것., 문제를 해결하기 위해서는 answer함수를 수정해야한다. 나는 크롬 개발자도구를 이용해 코드를 수정했다. function answer(i){ x.open('GET','?m='+i,false); x.send(null); aview.innerHTML+=x.responseText; i++; if(x.responseText)..

webhacking.kr 51번

먼저 제일 눈에 띈 view-source 클릭 ! addslashes() : 어떤 문자열을 데이터베이스의 필드값으로 저장하기 전에 사용되는 함수로, 문자열에 특수문자(작은 따옴표, 쌍 따옴표 등)가 포함되어 있다면 그러한 문자앞에 역슬래시를 붙여줌으로써 특수문자가 순수한 하나의 문자로 인식되어 저장 md5("문자열", true) : 문자열을 16자리의 바이너리 형식의 해쉬값으로 반환 php 코드를 해석해보면, 먼저 POST방식으로 입력한 id값($_POST['id'])과 pw값($_POST['pw'])을 받는다. $_POST['id']와 $_POST['pw']는 select문의 id와 pw값으로 쓰이는데, 이 때 id가 존재하면 문제가 풀린다. 이 문제를 풀기위해서는 md5 취약점을 이용해야한다. $_P..

webhacking.kr 47번

send를 누르면 mail정보가 쫘르륵 뜬다. Subject에 Flag라고 써있는 것을 보니, Flag값을 얻으려면 메일 내용을 봐야할 것같다. 나도 메일을 받기 위해서는 내 이메일을 참조로 해서 보내면 된다. 따라서 Mail subject 입력칸에다가 내 이메일 주소를 보내야 한다 ! 개행문자 \r(커서를 맨 왼쪽으로 이동)과 \n(줄바꿈)을 이용해 내 이메일 주소를 입력한다. -> CRLF : https://movefast.tistory.com/57 %0d는 \r이고, %0a는 \n이다. 또한, Cc는 참조를 의미한다. 내 메일함에 가보면, FLAG값을 볼 수 있다 ٩(・ิᴗ・ิ๑)۶

webhacking.kr 43번

file upload 취약점 문제 ! 먼저 /flag파일을 읽기위해 php파일을 만들어줬다. 그리고 만든 파일을 업로드해줬는데, php를 필터링하나보다 ( -᷅_-᷄) 다른 확장자 파일을 이것저것 업로드해 본 결과, jpg파일은 업로드된다는 것을 알게 되었다. ​php파일을 업로드하면 Content-Type은 application/ocapplication/octet-stream으로 설정되는데 이게 필터링되는 것이다. 따라서 업로드가 되는 Content-Type=image/jpeg로 바꿔주면 업로드 성공 ! /upload/ch_43434343434343.php로 들어가보면 문제 해결 ~~~!~! ㅎㅅㅎ + php파일을 업로드한 뒤 Content-Type을 바꿔줘야지, jpg파일을 업로드한 뒤 파일명을 바꿔..