목록Hacking/Webhacking.kr (14)
minhui study
Challenge md5 password - 207p md5('value', true)에 대해서 찾아보았다. md5같은 경우 인자로 들어온 문자열을 md5 해시하여 32bytes의 길이로 반환을 해주는데 여기서 두번째 인자 옵션을 디폴트 값 false가 아닌 true로 주면 Hex값을 16bytes의 바이너리 값으로 반환해준다. md5('문자열', false) / md5('문자열') -> 32자리의 16진수 값을 반환한다. md5('문자열', true) -> 16자리의 바이너리 형식으로 반환한다. 테이블에는 id : admin / pw : admin 인 값이 있다고 가정해보자 select id from table where pw='admin' ='abc'; 만약 위와 같은 쿼리문을 입력한다면 admin은..
Challenge 06 - 100 Points 처음에는 다음과 같은 화면이 뜬다. 일단 코드부터 살펴보자 다음과 같이 edit this cookie를 통해 실제 쿠키값에 인코딩된 굉장히 복잡한 값이 있는 것을 확인할 수 있다. (오른쪽 쿠키모양을 누르면 된다. 쉽게 다운받을 수 있다.) 나머지 코드를 마저 해석해보자 그렇다면 문제가 해결되기 위해서는 user와 password 쿠키값에 admin과 nimda가 20번 인코딩된 값을 넣어주어야 한다. 직접 인코딩을 20번 하기 힘드므로 아래 사이트에서 다음과 같이 코드를 입력해서 출력해보면 기호가 없으므로 따로 치환해줄 필요없이 그 값을 복사하여 $id값은 user에 $pw값은 password에 쿠키값을 넣어주면 문제가 해결된다. http://www.wri..
Challenge 23 - 200Points :: XSS 23은 xss와 관련된 문제이므로 문제를 풀기 전에 xss에 대해 정리를 해보았다. XSS(Cross Site Scripting) 이란? - Injection 공격으로, 웹사이트보안이 취약한 부분에 HTML 또는 자바스크립트 코드를 삽입하여 피해자 PC의 정보를 빼간다. - XSS를 방어하기 어려운 이유는 브라우저가 자바스크립트코드를 실행할 수 있고, 사용자들이 브라우저로 신뢰하고 있는 웹사이트를 돌아다닐 때 해당 페이지에서 악의적인 코드가 문제없이 실행될 수 있기 때문이다. - XSS공격은 피해자PC의 브라우저에서 공격자에 의해 스크립트를 실행시켜 사용자 세션을 탈취할 수 있게 만들고, 웹사이트를 변조시켜 악성 사이트로 리다이렉션할 수 있도록 만..
Challenge 58 - 150 Points 문제에 들어가면 다음과 같이 콘솔창 같은 게 뜬다. 아무거나 쳐보다가 ls라고 치니 다음과 같이 index.js temp.html이 떴다. flag라고 치면 거부되고 오직 admin만 접근이 가능하다고 뜬다. 소스코드를 살펴보자 web socket을 사용하기 위해 sokcket.io package를 사용한다. 클라이언트나 서버에서 socket.io를 이용하여 event를 발생시킬 수 있고 이 event는 서로에게 전달된다.(서버와 비동기 양방향 통신) socket.io는 io라는 변수명으로 서버에서 사용된다. prevenDefault() : 기본으로 정의된 이벤트를 작동하지 못하게 하는 메서드이다. ( 의 기본 동작을 막을 수 있다.) 여기서는 만약 우리가 ..
Challenge 47 - 150 Points :: Mail Header Injection 처음에 send버튼을 눌러보았더니 다음과 같은 화면이 떴다. Mail subject에 입력한 내용은 밑에 Subject:옆에 나타나는 걸 볼 수 있다. 그리고 no-reply@webhacking.kr이 no-existed@webhacking.kr에게 보내는 메일이고, 그 메일 내용에 FLAG가 있는 것 같다. 여기서 Mail Header Injection을 시도해보자 우리가 만들어야 될 형식은 다음과 같다. To : no-existed@webhacking.kr From : no-reply@webhacking.kr(줄바꿈) Cc : 내 메일 주소 여기서 Cc의 의미는 "숨은 참조자"이다. 숨은 참조자이면 no_exi..
Challenge 32 - 150 Points 일단 현재 내 아이디는 jeongminhee99이고 지금은 첫번째로 올라와 있지만 처음 문제화면이 나왔을 때는 0/100으로 리스트의 가장 밑부분에 있었다. 근데 처음 한번 아이디를 누르면 그 해당 아이디 옆 숫자가 1이 늘어나고 또 한 번 더 누른 뒤에는 만약 jaehong13이라는 아이디를 누르면 다음과 같은 url과 알림이 뜬다. 클릭 대신 url에 ?hit=jeongminhee99라고 해도 숫자가 올라가지 않는다. cookie값을 보니 vote_check에 ok라고 있었다. 그래서 ok를 지우고 클릭을 하게 되면 1이 올라가는 걸 확인할 수 있다. 그럼 이 문제는 어떻게 하면 풀릴까? 1씩 올려서 내 아이디가 1등이 되었을 때 문제가 해결되는 듯하다...
Challenge 31 - 150 Points::포트포워딩 $port = rand(10000,10100); // rand는 난수를 생성하는 함수이다. 즉, 포트 번호는 10000 ~ 10100 사이의 숫자에서 생성된다는 의미이다. $socket = fsockopen($_GET['server'],$port,$errno,$errstr,3) or die("error : {$errstr}"); // $socket=fsockopen(hostname,port no,errno,errstring,timeout) = fsockopen ("연결할 도메인이나 ip","포트번호","에러(오류 번호)","에러메세지(문자열)","연결시도시간(데이터를 읽거나 쓰는 시간에 대한 시간 제한 설정)") -> 소켓 연결 함수로 다른 서버..
Challenge 27 - 150 Points 바로 소스코드를 확인해보자. 코드의 전반적인 흐름을 보면 id값에 admin이 들어가게 되면 풀리는 문제인 것 같다. 데이터베이스 테이블 중에서 id가 guest이고 no가 사용자로부터 전달받은 그 파라미터에 해당하는 값인 그 데이터를 찾아서 id값을 조회한다는 것을 알 수 있다. 이를 통해 데이터베이스의 테이블에는 문자열인 id와 정수인 no가 있다는 걸 알 수 있다. 그래서 위 화면을 보면 사용자가 1을 넣었을 때 id가 guest이고 no가 1인 id가 조회되어서 $q에 guest값이 담기게 되었고 그 결과 guest가 화면에 출력된 것을 확인할 수 있다. 하지만 만약에 2이상의 값들을 입력하게 된다면 테이블에는 id가 guest면서 no가 2이상인 정..