Main 70

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..

webhacking.kr 20번

먼저 소스코드를 확인해보았다. submit버튼을 누르면 ck함수가 실행된다. ck함수를 해석해보면, nickname 입력칸이 빈칸이면 nickname입력칸으로 커서를 위치시킨다. comment와 captcha도 마찬가지로 실행된다. lv5frm.captcha_.value값은 새로고침할때마다 값이 계속 바뀌는데, 만약 captcha에 입력한 값과 lv5frm.captcha_.value값이 다르면 커서가 captcha로 이동한다. =>nickname, comment 입력칸이 비어있으면 안되고, 무작위로 생성된 lv5frm.captcha_.value값과 captcha입력값이 같아야한다. 그랬더니 너무 느리다고.. (。•́︿•̀。) 아마 time limit이 2초여서 그런것같다. 2초안에 입력하는 것은 불가능이..

해시함수

해시함수란 ? 임의의 길이의 데이터를 입력받아 항상 일정한 길이의 비트열로 변환시켜주는 함수 해시함수 종류 1) MD5 : 주로 무결성 검사에 사용되는 128비트의 암호화 해시함수 ->128비트의 해시값 출력 (16진수로 32바이트) 2) SHA : 서로 관련된 암호학적 해시함수들의 모임. SHA 함수군에 속하는 최초의 함수는 공식적으로 SHA라고 불리지만, 나중에 설계된 함수들과 구별하기 위하여 SHA-0이라고도 불림. SHA는 하나인 MD4에 기반을 두고 있으며, MD5의 취약성을 개선 및 대처하기 위해 설계된 함수 ->160비트의 해시값 출력 (16진수로 40바이트) 3) SHA-1 : 기존의 알고리즘에서 암호학적 보안을 감소시키는 결함들을 수정한 함수 ->160비트의 해시값 출력 (16진수로 40..

기초 다지기 2020.02.02

2진수, 8진수, 16진수

비트 (bit) : 0 또는 1 바이트 (byte) : 8개 단위의 비트(bit)를 하나의 그룹으로 사용, 나타낼 수 있는 수는 총 2^8(256)개로 0~255까지의 값 -> 1바이트 = 8비트 2진수 : 0과 1로 구성된 수로, 1개의 비트로 표현 가능 8진수 : 0~7로 구성된 수로, 3개의 비트로 표현 가능 10진수 : 우리가 사용하는 숫자 16진수 : 0~15로 구성된 수로, 4개의 비트로 표현 가능 10진수 2진수 8진수 16진수 10 0000 1010 012 0xa 11 0000 1011 013 0xb 12 0000 1100 014 0xc 13 0000 1101 015 0xd 14 0000 1110 016 0xe 15 0000 1111 017 0xf 16 0001 0000 020 0x10

기초 다지기 2020.02.02

webhacking.kr 19번

js문제여서 소스코드를 먼저 확인해봤는데, 자바스크립트 코드도 없고, 눈에 띄는 코드가 없었다. id가 admin일 때, 제출버튼을 눌러보니 admin이 아니라고 출력됐다. 이번엔 id를 guest라고 입력하고 제출했더니, hello guest가 출력됐다. 그런데 logout버튼을 눌러도 첫 화면으로 돌아가지 않는다 ㅠ 쿠키를 확인해보니, 인코딩된 값이 userid 쿠키값으로 설정되어있었다. 인코딩된 값은 guest라고 예측할 수 있었다. 이 때 ! userid쿠키값을 보고 base64로 인코딩된 값이라는 것을 알아야 한다. 쿠키값을 base64 디코딩했더니, 이상한 문자열이 출력되었다ㅠ base64 디코딩할 때, 기억해야할 점 ! %3D는 =으로 교체해서 디코딩해줘야한다. 디코딩된 값을 보니, gues..

webhacking.kr 15번

문제 들어가자마자 alert창이 뜨고, 확인 누르면 다시 challenge창으로 돌아간다., (´・ω・`)? alert창을 안뜨게 하려고 구글링해서 크롬 설정을 바꿨는데, 뭘 잘못한건지 계속 alert창이 떴다ㅠ 그래서 '팝업 및 리디렉션'말고 '자바스크립트'를 차단시켜봤다. 그랬더니 alert창이 안떴다 ㅎㅅㅎ !! 페이지에 아무것도 없길래 소스코드를 봤더니, url뒤에 ?getFlag를 입력하면 성공 ~! 50점짜린데 헤매느라 은근 오래걸렸담,, (。•́︿•̀。)

webhacking.kr 18번

SQL인젝션 문제인가보다.., '͡•_'͡• preg_match($pattern, $str, $match) : str에서 pattern을 검색하고, pattern이 존재하면 TRUE값을 반환해주고 그렇지 않으면 FALSE값을 반환해주는 함수 (pattern은 정규식 패턴) 1을 입력했더니, hi guest 출력 no=1이면 guest ! no=2면, admin으로 문제 해결 ! 이 때, $_GET[no]에 공백, /, (, ), |, &, select, from, 0x를 입력하면 no hack이 출력된다. => 공백, /, (, ), |, &, select, from, 0x를 입력하지 않고, no를 2로 만들어야 한다. select id from chall18 where id='guest' and no=..