WEB/webhacking.kr (old) 52

webhacking.kr 38번

먼저 소스코드를 봤더니 admin.php가 주석 처리되어있길래 들어가 봤다. admin.php에서는 admin으로 로그인하라는 메세지와 로그를 볼 수 있다. admin으로 로그인 해보니까 역시 난 admin이 아니라고., _( :0 」 )_ log viewer에 '내 IP주소:admin'이 입력되도록 만들어야 한다. 입력창에 줄바꿈 기호인 \n을 이용해 'aa\n IP주소:admin'를 입력해봤지만, \n가 그냥 문자열로 인식되어서 출력된다ㅜ \n을 쓰는 대신, input태그를 textarea태그로 바꿔서 엔터를 직접 입력했다. ㅎㅅㅎ LOG INJECTION 그랬더니 문제 해결 ~!

webhacking.kr 36번

문장을 해석해보면.., index.php파일을 vi편집기를 이용해 수정하고 있었는데, 갑자기 정전되어서 코드가 날라갔다고 코드를 찾아달라는 내용이다. 리눅스에서는 vi 편집 도중에 갑자기 리눅스가 종료(kill)되면, 임시파일을 생성한다. 임시파일의 확장자명은 swp으로, index.php.swp를 보면 꺼지기 전에 수정하고 있었던 코드를 볼 수 있다. ( 평소 피피티를 실행하면, 실행파일/임시파일이 생기는 것과 같은 원리(?) ) 그리고 index.php를 보면 전에 코드를 복구하겠냐고 물어본다. 위 캡쳐화면은 36 파일을 수정하던 도중 리눅스가 갑자기 종료된 후, vi 36을 다시 실행하면 전에 내용을 복구하겠냐고 물어보는 화면이다. 문제를 해결하기 위해서는 index.php.swp를 열어보면 된다 ..

webhacking.kr 32번

랭킹이 쭉 나오는데, 내 아이디는 젤 마지막에 있다 ٩(๑´0`๑)۶ 이름을 누르면 hit이 한번 올라가는데, 한번 더 누르면 이미 투표했다고 안된단다.., vote_check 쿠키가 있는 것을 보니, 쿠키값을 보고 투표 유무를 체크하는 것같다. 쿠키값이 ok이면, 투표를 했다고 판단하고 투표를 못하게 하는 것이다. vote_check 쿠키를 삭제하고, 투표하고 삭제하고 투표하고를 계속 반복해도 되지만 나는 21번에서 사용한 코드를 응용해서 문제를 풀어보았다 ㅎ import requests import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) url = "https://webhacking.kr/challenge..

webhacking.kr 31번

fsockopen(string hostname, int port, int [error], string [errstr]) : 서버의 열려진 어떤 포트로도 접속할 수 있고, 소켓의 연결을 설정할 수 있는 함수 먼저 코드를 해석해보자 ! port는 10000 ~ 10100사이의 랜덤으로 지정되고, GET의 server파라미터로 받은 IP에 랜덤한 port로 소캣을 열어서 연결을 시도한다. Warning을 보면, 'IP번호:포트번호'에 연결할 수 없다고 뜬다. 이를 통해 fsockopen함수로 연결을 시도한다는 것을 알 수 있다. => 연결을 시도한다는 것은 서버에 요청을 보낸다는 말과 같다. 요청을 보내면, 서버가 받아야하는데 그냥 받을 순 없고 서버 소캣을 열어야 한다 ! ๑°⌓°๑ 문제를 해결하기 위해서는..

webhacking.kr 21번

이번에 처음풀어보는 blind SQL injection 문제., blind SQL Inejction이란 ? 쿼리 결과로 오류메세지가 보이지 않고, 참 또는 거짓으로만 출력되어 DB구조를 파악하는 공격기법. id와 pw에 이것저것 입력해본 결과, id : guest / pw : guest면 login success가 출력된다. 그리고 잘못된 정보로 로그인을 시도하면, login fail이라고 출력된다. 가끔 wrong password라고 나오기도 하는데 login fail이랑 wrong password 차이는 쿼리문이 성립되면 wrong password가 출력되고, 올바르지 않은 쿼리문을 입력했을 시에는 login fail이 출력되는 것같다 ( -᷅_-᷄) 문제를 해결하기 위해서 id는 admin으로 입력..

webhacking.kr 27번

SQL인젝션 문제 ! 먼저 소스코드를 확인해봐야겠다. 코드를 해석해보면, GET방식으로 입력된 변수 no에 #,select,(,limit,=,0x가 포함되면 no hack을 출력한다. 입력된 no는 테이블에 있는 데이터를 조회하는 select문에 쓰인다. select문 결과에서 id가 admin이면, 문제가 해결된다 ! 그러나 id는 guest로 고정되어있고, 우리는 no만 바꿀 수 있다. 먼저 admin의 no값인 2를 입력해보면, query error가 출력된다. guest의 no=1이므로 올바르지 않은 select문이 만들어졌기 때문이다. 올바른 select문을 만들어주기 위해서는 or을 이용해야한다. (FALSE or TRUE = TRUE 원리) or연산을 이용해 guest는 거짓으로, admin..

webhacking.kr 26번

urldecode() : 인코딩된 문자열을 디코딩해주는 함수 코드를 해석해보면, 인코딩된 id값을 디코딩한 값이 admin이면 문제가 해결된다. url인코딩한 admin값을 입력해봤는데, no!가 출력되었다. 입력받은 데이터를 서버가 자동으로 디코딩하는 것이다. 그래서 %61%64%6D%69%6E를 한번 더 인코딩하여 입력했더니 문제 해결 ! id=%2561%2564%256D%2569%256E 참고 >>https://www.convertstring.com/ko/EncodeDecode/UrlEncode URL 인코딩 - 온라인 URL 인코더 www.convertstring.com

webhacking.kr 25번

url이 http://webhacking.kr:10001/?file=hello인걸로 봐서 hello.php의 내용이 출력된 것같다. hello 대신 flag를 입력했더니, 코드안에 FLAG가 있다?! 다음으로 file에 index를 입력했더니 아무것도 나오지 않았다. 뭔가 index.php 내용을 출력해야 문제가 풀릴 것같은 느낌 .., index.php의 내용을 보기 위해선 php wrapper를 이용해야한다. (전에 풀었었는데 까먹음.. (◞ ‸ ◟ㆀ)) php wrapper 중 php://filter를 이용하면 base64 방식으로 인코딩된 index.php를 얻을 수 있다. file=php://filter/convert.base64-encode/resource=index 입력 ! 출력된 값을 디코..

webhacking.kr 23번

스크립트 코드를 공격하라는 것 같은데.., 소스코드에도 스크립트 코드는 없다 ㅠ 를 입력해봤더니 no hack이라고 출력되었다. 입력창에 이것저것 입력하고 제출해보니, 알파벳 2글자 이상이면 no hack이 출력되는 것을 알 수 있었다. (한글이나 숫자는 제대로 출력됨) 문자 사이사이에 공백을 추가하고 제출했더니 문자열이 출력되었다 ! 연속된 알파벳만 필터링하는 것을 보니, 공백을 우회해서 문제를 해결해야할 것같다. url에 공백이 +로 대체된 것을 보고, +를 %0a로 바꿔서 입력해봤지만 똑같이 공백으로 인식하고 문자열이 출력됐다ㅜㅜ 연속된 문자열을 필터링하는 함수를 우회하는 방법 중 NULL값을 문자열 사이사이에 입력하면 된다는 것을 보고, 띄어쓰기 대신 %00(NULL의 url인코딩 값)를 입력하였..

webhacking.kr 24번

먼저 view-source를 확인해보았다. extract 함수 : 함수에 배열타입의 변수를 넣고, 배열속의 키값들을 변수화 htmlspeicalchar 함수 : 문자열에서 특수 문자를 html엔티티로 변환 $REMOTE_ADDR : 사용자의 IP정보 $HTTP_USER_AGENT : 사용자의 웹접속환경 정보를 담고 있는 PHP전역변수 코드를 해석해보면, $ip는 $REMOTE_ADDR의 값과 같은데, 이 중 특수문자는 html엔티티로 변환되고, ".."는 "."로, "12", "7.", "0."은 공백으로 대체된다. 이 때, $ip가 127.0.0.1이면 문제가 해결된다 ! $_SERVER[REMOTE_ADDR]는 IP주소 값인데, IP주소값을 바꿀 수는 없다. 코드를 보면 extract($_SERVER..