WEB/webhacking.kr (old) 52

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파일을 업로드한 뒤 파일명을 바꿔..

webhacking.kr 42번

test.txt 옆에 download를 누르면 파일이 다운로드된다. 그치만 flag.docx를 누르면 다운로드가 안되고, alert창이 뜬다., flag.docx를 보는 것이 문제 ! 소스코드를 보니, test.txt의 다운로드 경로가 base64로 인코딩되어있었다. 디코딩해보니까 test.txt가 나왔다 ㅎ flag.docx의 다운로드 경로도 flag.docx를 base64 인코딩한 값일 것같아 인코딩해서 입력해봤다. 그랬더니 flag.docx파일이 다운로드되고, 파일을 열어보니 FLAG값이 두둥 ٩(ˊᗜˋ*)و !

webhacking.kr 41번

view-source 클릭 ! isset() : 변수가 존재하면 True, 존재하지 않으면 False를 리턴하는 함수 코드를 보면, 처음 부분에 다른 문제에는 없었던 오류처리 코드가 있는 것을 볼 수 있다. 파일을 업로드하고, 업로드된 파일명에 ".", "", "/"가 포함되어있으면 공백으로 대체한다. 업로드된 파일은 /{$upload_dir} 아래로 복사되고, 그 파일안에 flag값이 쓰여져있다. flag값을 얻기위해 우리는 $upload_dir을 알아내야한다. 오류처리 코드가 추가된 것을 보고, 오류메세지를 통해 힌트를 얻어야겠다는 생각이 들었다. 파일을 업로드할 때, 파일명은 최대 255까지 입력할 수 있으므로 나는 피들러를 이용해 파일명을 엄~~청 길게 입력하여 업로드해봤다. 그랬더니 Warnin..

webhacking.kr 37번

view-source 클릭 ! view-source 이 문제는 php코드를 정확히 해석하고, 이해해야하기 때문에 주석을 달아서 공부했다. flag값을 얻기 위해서는 업로드된 파일에 쓰여져있는 IP값의 포트 7777로 연결해야한다. $host에는 $_SERVER['REMOTE_ADDR']값, 즉 파일을 업로드한 곳의 IP주소가 저장되어있다. $host에 내 서버 ip주소가 저장되게 하려면, 내 서버에서 파일을 업로드해야한다. import requests import urllib3 import time urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) url = "https://webhacking.kr/challenge/web-18/in..

webhacking.kr 39번

view-source 클릭 ! $_POST['id'] = POST방식으로 전달되는 id id에 "\\"가 포함되어있으면 공백으로 대체되고, " ' "는 " ' ' "로 대체된다. 그 후, id값 중 0~15번째 문자만 추출해서 저장한다. 추출된 문자열은 select문에 쓰이게 되고, select문이 성립하면 문제가 해결된다. 여기서 알아야 할 점 ! mySQL에서 'a' = 'a '의 결과는 1(TRUE)이다. -> char에서는 문자열을 비교할 때 공백을 채워서 비교하는 방법을 사용한다. 공백 채우기 비교에서는 우선 짧은 쪽의 끝에 공백을 추가하여 2개의 데이터가 같은 길이가 되도록 한다. 그리고 앞에서부터 한 문자씩 비교한다. 그렇기 떄문에 끝의 공백만 다른 문자열은 같다고 판단된다. -> 그에 반해..