분류 전체보기

webhacking.kr

[webhacking.kr] old-24 (extract)

문제분석 & 풀이문제에 접속하니 클라이언트 IP 주소 , 클라이언트 에이전트 정보가 나와있다. 소스도 주어져있으니 소스를 봐보도록하자. 소스를 분석하면 다음과 같다.1. extract() 를 통해 $_SERVER , $_COOKIE 정보를 변수로 선언한다. (2,3번)2. $ip 변수에 클라이언트 ip, $agent 변수에 클라이언트 에이전트 정보를 넣는다. (4,5번)3. 클라이언트 ip는 여러번의 replace()를 통해 값을 변환하고 $ip변수에 넣는다. (6~12번)4. 최종적으로 $ip 변수의 값이 "127.0.0.1"이면 문제가 해결된다. 결론적으로 $ip에 들어갈 값즉, 클라이언트의 ip값을 "127.0.0.1" 만들어야 한다는 것인데.... 이것은 불가능해보인다. 그렇다면 어떻게 $ip값을..

webhacking.kr

[webhacking.kr] old-23 (XSS)

문제분석 & 풀이페이지에 접속하니 빈칸과 함께 미션이 주어져있다. 미션 그대로 스크립트 태그를 넣어 제출하면 "no hack"이라고 뜬다. url 부분을 보니 code 라는 파라미터를 통해 값이 전달되고 있다. 아마 서버쪽에서 필터링을 하는 것 같은데 어떻게 우회할 수 있을까 고민을 해봤다. 아스키코드표를 보면 0x00이 NULL 값이 것을 알 수 있는데 code 파라미터를 통해 명령어를 전송하기 때문에 명령어 사이사이에 NULL값을 넣어서 전송하면 우회되서 필터링에 걸리지 않고 사이사이에 넣은 값이 NULL 이기 때문에 명령어는 정상적으로 실행되지않을까? 라고 생각했다. 위 사진처럼 스크립트 태그 명령어 사이마다 NULL(%00)을 넣고 값을 전송해봤다. 명령어가 정상적으로 실행됐다! 클리어!!

webhacking.kr

[webhacking.kr] old-22

문제분석 & 풀이admin으로 로그인을 하라는 미션이 주어진다. join을 통해 계정을 생성할 수 있다.  guest / guest 으로 계정을 생성하고 로그인을 해보자. [그림]처럼 pw가 해싱된 상태로 출력된다. 해싱된 pw 길이는 32자리로 MD5로 해싱됐다고 추측할 수 있다. MD5가 맞는지 확인해보기 위해서 "guest"를 MD5로 해싱해서 값을 비교했다.  하지만 결과는 달랐다. "guest" + salt → 암호값아마도 단순하게 "guest"를 해싱한게 아니라 salt 값이 추가된 상태로 해싱된 것 같다. 해싱 결과를 복호화하려면 레인보우 테이블을 이용하는 방법 밖에 없다. ○ 레인보우 테이블특정 알고리즘(ex. MD5)에 대한 평문과 암호문을 테이블 형태로 모두 기록해서 암호문에서 평문으로..

webhacking.kr

[webhacking.kr] old-21 (sqli → blind)

문제분석 & 풀이로그인창이 보인다. blind sql injection 문제인 것 같다. guest / guest 로 로그인을 시도하면 "login success" 라는 메세지가 뜬다. 뜬금없이 성공한게 이상해서 id / pw 를 아무 값이나 넣어보니 이번에는 "login fail" 이라고 뜬다. 아마도 guest / guest 는 우연히 맞은 것 같다. select * from [table] where id=$id and pw=$pw 로그인 쿼리를 위처럼 예측해볼 수 있다. 이를 토대로 인젝션을 시도해보자.  select * from [table] where id='guest' and pw='1'or'1'='1' 간단한 인젝션 쿼리를 만들 수 있다. where 문에서 or 기준으로 앞은 참이 아니더라도..

webhacking.kr

[webhacking.kr] old-20

문제분석 & 풀이문제에 접속하면 여러개의 빈칸이 보인다. 바로 소스부터 봐보자.모든 빈칸에 값이 들어가 있어야 하며 captcha 부분 빈칸은 빈칸 오른쪽에 써있는 값과 같은 값이 들어가야 문제가 해결되는 것 같다. 위와 같이 값을 넣고 제출해보았다. Too Slow? 왜 느리다고 뜨나 했더니 제한시간 2초가 존재했다. 즉, 페이지가 생성되고 2초안에 조건에 맞는 값을 입력하고 제출해야 문제가 해결되는 것 같다. document.getElementsByName('id')[0].value='a'; // nickname 에 값 넣는 코드document.getElementsByName('cmt')[0].value='a'; // comment 에 값 넣는 코드document.getElementsByName('c..

webhacking.kr

[webhacking.kr] old-19 (url, base64, md5)

문제분석 & 풀이admin이 입력된 폼이 있다. 제출하면 admin이 아니라고 뜬다. 개발자도구를 이용해서 코드를 봤지만 특이사항은 없는 것 같다. admin이라고 써있는 값을 guest라고 바꿔서 전송을 해보니 "hello guest" 라는 문구가 뜨는 것을 확인할 수 있다. 개발자도구를 키고 쿠키를 확인하면 userid 라는 쿠키가 있다. userid 쿠키의 값은 암호문 형태였다. 맨 끝 부분에 %3D가 있는 것을 토대로 url 인코딩이 됐다는 것을 알 수 있다. %3D는 url 디코딩하면 "="이다.  여기서 마지막에 "="이 붙은 것을 토대로 base64 인코딩 데이터라는 것을 알 수 있다. "="는 base64 인코딩 과정에서 패딩으로 사용되는 문자이기 때문이다. 쿠키값을 url → base64..

keyme
'분류 전체보기' 카테고리의 글 목록 (29 Page)