반응형

전체 글 259

[webhacking.kr] 34번 문제

400점인 34번 문제를 풀어보자. 첫 화면에 들어가면 'debug me'라는 alert창이 뜨게 된다. 소스코드를 확인해보면 보기가 어렵게 쓰여있다. 우선 코드를 보기 쉽게 변환시켜주기 위해 해당 사이트를 이용했다. https://wepplication.github.io/tools/beautifyCode/ 웹 소스코드 정렬 사이트 온라인 코드 정렬 사이트 js, css 등의 소스를 깔끔하게 정렬해주는 사이트 wepplication.github.io 'debug me' alert창이 난 곳을 찾기 위해 debug me 로 검색했지만 나오지 않고, alert으로 검색했을 때에는 1개의 alert만 존재했다. 해당 소스코드의 의미를 확인하기 위해 콘솔 기능을 이용하였다. 우선 alert 부분부터 확인해보면 ..

[webhacking.kr] 33번 문제

200점인 33번 문제를 풀어보자. 첫 화면에서 Wrong이라는 메시지와 소스코드를 확인할 수 있다. get변수에 "hehe"가 담겨있으면 다음 페이지로 이동하게 된다. 두번째는 post 방식으로 post=hehe&post2=hehe2 값이 request되면 된다. 프록시를 이용하여 request를 변조해보자. 세번째는 myip에 내 ip주소를 담아 전송하면 된다. 네번째에는 힌트와 함께 현재 시간을 md5형식으로 변환하여 password 변수에 담아 전송하면 된다. 다섯 번째 페이지는 md555.php가 된다. url을 통해 imget을 보내고 post방식으로 데이터 impost를 보내고 cookie값으로 imcookie를 보내면 다음 페이지로 넘어갈 수 있다. 이제 gpcc.php로 넘어가보자. 이제..

[webhacking.kr] 32번 문제

150점인 32번 문제를 풀어보자. 문제에 들어가면 순위표가 뜨게 된다. 해당 이름을 클릭하면 투표를 할 수 있는데 이미 투표를 했다는 alert창이 뜨게 된다. 쿠키 값을 살펴보니 vote_check 쿠키값이 들어있다. 해당 쿠키를 삭제한 후 투표를 다시해보면 정상적으로 숫자가 카운트되는 것을 볼 수 있다. 이제 문제를 풀기 위해 ctrl+f를 이용해 내 아이디를 찾고 카운트를 100으로 만들어보자.

[webhacking.kr] 31번 문제

150점인 31번 문제를 풀어보자. 10000 ~ 10100 중 랜덤한 포트로 접속을 시도한다. 접속한 내 pc로 접속하기 위해 공유기 포트포워딩을 설정한다. 설정 후, netcat 프로그램을 이용하여 10000번 포트로 listening 상태를 만든다. 그리고 문제를 새로고침 해보게 되면 flag 값을 확인할 수 있다. 플래그 값 : FLAG{i_have_a_big_and_beautiful_server} Auth 페이지에 제출하게 되면 문제를 풀 수 있다.

[webhacking.kr] 30번 문제

550점인 30번 문제를 풀어보자. mysqli_connect는 MySQL, MariaDB에 연결하는 함수이다. 해당 함수를 사용하기 위해서는 값들이 필요한데 해당 소스코드에는 어떤 값들도 들어있지 않다. 이런 경우에는 default값을 가져와서 사용하게 되는데 기본 값을 아래의 php 매뉴얼 사이트에서 확인할 수 잇다. https://www.php.net/manual/en/ini.list.php mysqli_select_db 함수는 mysqli_connect 를 통해 연결된 객체가 선택하고 있는 DB를 다른 DB로 바꾸기 위해 사용된다. 사용법 mysqli_select_db(연결객체, DB명) 이제 문제를 풀기 위해서는 공인 IP로 접근이 가능한 개인 서버가 필요하다. - chall30 DB 만들기 -..

[webhacking.kr] 29번 문제

400점인 29번 문제를 풀어보자. 파일을 업로드 할 수 있어, 테스트로 파일을 업로드 해보았다. time, ip, file 명 순으로 입력되는 것을 볼 수 있다. Injection을 시도할 곳을 찾는 중에 filename에 컬럼 순서는 '파일이름' , 타임스탬프(INT), '아이피' 순으로 입력하면 공격이 가능한 것으로 보인다. 테스트 구문 : filname="test",1234, '내 ip')#" 이제 DB값을 가져오기 위한 코드를 작성해서 flag값을 가져오자. - DB명 출력 filename="test', 1234, '내 ip'),((SELECT database()), 1234, '내 ip')#" - 테이블명 출력 테이블 명이 2개 이상일 수 있기 때문에 group_concat 사용 filenam..

[webhacking.kr] 27번 문제

150점인 27번 문제를 풀어보자. id가 admin이면 문제가 풀리는 것으로 확인된다. 그러나 select, limit, 스페이스, =, 0x 등의 문자열이 필터링 되고 있다. admin의 no값이 2이므로 우리는 우회하여 no의 값을 2로 만들면 된다. '='가 필터링 되므로 like 를 사용하고, 공백은 %09(탭)으로 대체해서 쿼리문을 작성한다. 쿼리문 : no=0)%09or%09no%09like%09%272%25%27%09--%09 정상적으로 문제가 풀리는 것을 확인할 수 있다.

[webhacking.kr] 26번 문제

100점인 26번 문제를 풀어보자. 첫화면은 소스코드 보기만 있고, 별 다른 특징은 없다. 소스코드에서 $_GET['id']값이 admin이면 "no!"를 echo하게 된다. 그리고 $_GET['id']을 url 디코딩 했을 때 값이 admin이면 문제가 풀리게 된다. admin을 URL 인코딩 후 전송해보았지만 "no!"라는 값이 뜨게 된다. 이렇게 된 이유는 웹 서버와 브라우저 사이에서 데이터 교환 시 브라우저는 폼에서 입력받은 데이터를 자동으로 인코딩한 값을 php서버로 보내고 php는 받은 인코딩된 값을 자동으로 디코딩하기 때문에 우리가 GET방식으로 보낸 url은 php서버에서 자동으로 디코딩 됬기 때문에 preg_match에 걸려 "no!"가 뜨게 된 것이다. 그럼 여기서 admin을 2번 U..

[webhacking.kr] 25번 문제

150점인 25번 문제를 풀어보자. file에 file명을 입력하면 자동으로 php가 붙어 include 되는 것으로 보인다. LFI 취약점을 이용해 보자. 우리는 php wrapper를 사용해서 LFI 사용해보자. - php wrapper란? 우선 wrapper란 실제 데이터의 앞에서 어떤 틀을 잡아 주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램입니다. 원래 php wrapper는 개발자들의 개발을 돕기 위해서 만들어진 기능이지만 우리는 이 기능을 사용한 lfi에 대해 알아보도록 하겠습니다. 우리가 php wrapper를 사용한 lfi공격에 대해 알아야 하는 이유는 앞에서 배운 기본적인 lfi공격은 다음과 같은 형식으로 구성되어 있었습니다. www.[우리가 공격할 웹 사이트의..

반응형