본문 바로가기

전체 글

(156)
[Webhacking.kr] old-23 write up 문제에 접속하면 다음과 같은 입력 폼과 메시지가 나타난다. 을 입력하니 no hack이 뜬다. code 파라미터에 들어가므로 code값을 수정하며 테스트 해봤다. 키워드들이 필터링 되나 싶어 테스트 해보니 no hack이 뜨긴했지만 다른 영문자도 no hack이 떴다. 이렇게 연속된 영문자일 경우 no hack이 뜬다. 다른 특수기호나 sc 모두 따로 쓸 경우, 띄어 쓸경우 잘 출력이 된다. 문자열을 띄워서 입력하니 저렇게 나온다. 생각해보니 공백도 문자이기 때문에 alert와 a l e r t는 다르다.. 널값을 넣어 문자를 하나하나 인식하도록 했다. a%00l%00e%00r%00t(1;) 풀고나니 쉽네..
[Web] php, mysql을 활용한 게시판 글 수정 및 좋아요 구현 / 웹개발-8 글 수정을 위해선 작성된 글을 볼 수 있어야 한다. 제목란에 하이퍼링크를 걸어 작성된 글을 DB에서 가져와 화면에 뿌려주는 파일을 작성했다. 각 글의 제목을 클릭하면 이동할 수 있다. read.php
[Webhacking.kr] old-25 write up 문제에 들어가면 쿼리스트링으로 file에 hello가 전달되고 있다. 페이지는 현재 경로의 파일들을 보여주는 듯하며 file에 파일명을 입력하면 내용을 보여주는 듯 보였다. 당연히 file에 flag를 넘겨 보았다. 다음과 같은 문자열만 나올 뿐 내가 원하는 flag는 나오지가 않았다. 가만 생각해보니 php 코드는 프론트에서 보이지 않기 때문에 개발자가 의도적으로 echo를 해주지 않는 이상 보이지가 않는게 당연하다. 당연히 flag는 echo를 해주고 있지 않을거기 때문에 flag.php를 그대로 볼 수 있는 방법이 없나 생각했다. php wrapper을 이용해서 base64 인코딩된 값으로 가지고 오도록 했다. 이 값을 디코딩하면 flag.php의 전체 코드일 것이다. php wrapper 먼저 w..
[Webhacking.kr] old-38 write up 문제를 들어가니 입력폼이 하나 나온다. LOG INJECTION이라고 힌트가 주어져서 log injection을 키워드로 구글링을 해봤다. 로그 기록을 조작할 수 있을 때 발생하는 취약점이라고 한다. 코드를 봐보자. 코드를 보니 주석으로 admin.php 파일이 admin 페이지라고 힌트가 주어져서 접속해봤다. 로그 기록을 볼 수 있는 log viewer를 제공하는듯 했고 admin이 아니라는 문자열이 같이 출력됐다. 만약 admin으로 접속하면 문제가 해결될 것 같다. 입력폼에 무언가를 입력 후 다시 접속해보자. 내 아이피가 찍히고 입력폼에 입력했던 문자열이 그대로 나왔다. 이번엔 admin을 입력 후 다시 접속해보자. admin을 입력하니 index.php에 바로 위와같은 모습이 보였다. admin...
[Webhacking.kr] old-24 write up 코드를 보면 접속자의 ip와 접속 정보를 화면에 뿌려주고 있다. 만약 접속자의 ip가 127.0.0.1 이라면 문제는 해결된다. php의 extract함수의 인자로 $_SERVERD와 $_COOKIE를 줘서 실행하고 있다. extract의 함수는 배열의 키를 변수로 만들고 값을 해당 변수의 값으로 만든다. ex) arr['hello'] = world -> extract(arr), $hello = world가 된다! 중요한점은 $_SERVER에는 사용자 접속 정보가 담겨 있기 떄문에 extract($_SERVER)이 부분에서 $REMOTE_ADDR 변수가 생기게 된다. 그러나 $_COOKIE 또한 extract에 넘겨주고 있기 때문에 cookie 값에 REMOTE_ADDR이라는 키값을 만들면 변조가 가능하..
[Webhacking.kr] old-54 write up 이 문제는 사이트에 들어가면 Password is [flag]에서 flag부분이 1초마다 바뀐다. 저 부분을 자세히보면 flag형식과 비슷하고 때문에 저 부분이 flag라고 생각했다. 이제 코드를 보자! 코드를 보면 1초 후 answer함수가 실행되고 있다. x변수는 run 함수의 리턴값이 담기며 리턴값에는 javascript에서 HTTP 요청을 보낼 수 있는 객체가 담겨 있다. answer함수는 서버로 HTTP요청을 보낸다. m에 i값을 넘겨주며 innerHTML에 응답값을 추가하며 i를 증가시킨다. 만약 응답값이 있다면 다시 answer함수를 실행시키지만 응답값이 없다면 ?를 html에 추가하고 종료된다. 근데 문제점은 innerHTML에 추가할때 +=가 아니라 =로 추가하고 있기 때문에 계속 리셋되..
[Webhacking.kr] old-18 write up 이번 문제는 대놓고 SQL INJECTION이라고 주어진다! 코드를 보자. 쿼리 결과로 admin이 나오면 문제는 해결된다. 코드에 no가 2인 값이 admin이라고 나와 있기 때문에 우린 이것을 이용할 수 있다. 그러나 쿼리문의 where 문 바로 뒤에 id='guest'라고 명시되어 있기 때문에 아무리 no를 건드려도 해결이 불가능하기때문에 or을 이용해서 앞 조건을 false로 만들고 뒤를 true로 만들면 해결이 가능하다. 위처럼 입력하니 no hack이 뜬다. 자세히 보니 공백도 필터링을 하고 있다. 이건 개행이나 탭 문자로 간단히 우회가 가능하다. 2%09or%0ano=2 페이로드는 url창에서 url인코딩하여 전달(그냥 문자 그대로 전달도 가능) 하거나 폼창에 문자 그대로 전달해야한다. 만 ..
[Webhacking.kr] old-39 write up 입력폼이 하나 주어진다. 소스코드를 살펴보자. 사용자 입력값을 받아와 DB에 쿼리문을 날리고 있으며 '1'을 조회하고 있다. 해당 쿼리문에서 1이 조회되면 문제는 풀린다. 따라서 우리는 해당 쿼리문이 참이 되도록 해주면 된다! 필터링 부분을 보자. 역슬레쉬, 싱글쿼터를 필터링 하고 있고 substr함수를 이용해서 15자리 까지만 자르고 있다. 역슬레쉬는 빈칸으로 사라지나 싱글쿼터는 하나가 두개로 대체되고 있다. 쿼리문을 다시 보면 id부분에 사용자 입력값 앞에 싱글쿼터가 하나 붙어 있다. 우리는 admin을 입력하고 싱글쿼터를 닫아주기만 하면 문제를 해결할 수 있다. 싱글쿼터가 두개로 대체되나 15자리까지만 사용자 입력값이 잘리기 때문에 마지막에 입력하면 싱글쿼터를 하나만 입력을 할수가 있다. admin..