전체 글 105

[webhacking.kr] webhacking.kr 54

54번 문제 - Password is 문자 형식에서 문자만 바뀌어서 출력이 된다. 바뀌는 부분의 문자들을 모으면 FLAG값을 얻을 수 있을 것 같다. 일단 코드의 answer 함수부분을 먼저 보았다. 28번째 줄에서 GET방식으로 매개변수 m에 i의 값을 넣는 다는 것을 알 수 있고 30번째 줄에서 서버에 요청하여 응답으로 받은 데이터를 문자열로 반환시키는 responseText를 사용하여 받은 데이터를 aview.innerHTML에 넣은 것을 알 수 있다. 그리고 나서 i의 값을 증가시킨다. 32번째 줄에서 만약 x.responseText인 문자가 있다면 20밀리 초 후에 증가시킨 i를 answer에서 다시 실행한다는 것을 알 수 있다. 즉 변하는 문제는 0.02초마다 한 문자씩 변하는 것이다. 33번..

[webhacking.kr] webhacking.kr 46

46번 문제 위와 같은 코드가 나왔다. 코드를 통해 GET방식으로 lv를 받는 다는 것, 공백 / * % select 0x limit cash를 필터링한다는 것을 알 수 있다. 또한 id가 admin이면 해결이 되는 것을 알 수 있었다. 앞의 조건을 무효화 시키고 숫자를 받아 아스키 코드에 맞게 문자를 리턴해주는 char()함수를 통해 admin을 우회하였다. 46번 URL 뒤에 해당 조건에 맞게 추가해주었다.

[webhacking.kr] webhacking.kr 39

39번 문제 소스코드를 확인해보았다. id='{$_POST['id']}에서 닫는 ‘가 없음을 알 수 있다. substr($_POST[‘id’],0,15)를 통해 15개의 문자열만 추출한다는 것을 알 수 있다. $_POST['id'] = str_replace("'","''",$_POST['id']);를 통해 싱클쿼터를 입력해도 더블쿼터로 변함을 알 수 있다. 하지만 15개만 추출하므로 더블쿼터를 15번째자리에 있으면 하나가 substr에 의해 잘려 1개만 입력됨을 알 수 있다. admin을 입력한 후 15번째에 싱글쿼터를 입력해주었다.

[webhacking.kr] webhacking.kr 35

35번 문제 view-source에 들어갔더니 나온 소스코드이다. get방식으로 phone과 id를 전달받음을 알 수 있다. 그리고 if(preg_match("/\*|\/|=|select|-|#|;/i",$_GET['phone'])을 통해 phone에서 필터링되는 문자들을 알 수 있고, if(strlen($_GET['id']) > 5)와 if(preg_match("/admin/i",$_GET['id']))을 통해 id의 크기가 5보다 작아야 한다는 것, admin이 포함되면 안된다는 것을 알 수 있다. insert into chall35(id,ip,phone) values('{$_GET['id']}','{$_SERVER['REMOTE_ADDR']}',{$_GET['phone']})을 통해 sql문장으로 ..

[webhacking.kr] webhacking.kr 32

32번에 들어갔을 때 나오는 화면이다. 아이디를 하나 누르고 다른 아이디를 눌러보았다. 위와 같은 alert가 뜨면서 선택을 못하는 것을 알 수 있다. 쿠키 값을 확인해 주었다. ok라는 쿠키 값을 바꿔주면 투표를 할 수 있을 것 같은데, 내 아이디로 100이 되어야 하므로 100번 바꿔주어야 한다. 그래서 ok라는 값 자체를 차단시켜보았다. 위와 같이 값으로 차단을 통해 ok를 차단하였다. 차단을 통해 쿠키가 생성되지 않아 클릭을 계속 할 수 있게 되었다. 내 아이디에 해당되는 부분을 계속해서 100까지 투표하였다.

[webhacking.kr] webhacking.kr 26

코드를 보면 GET방식으로 돌아온 id의 값을 urldecode를 해서 다시 담는다는 것을 알 수 있다. urldecode를 해서 담은 값이 admin일 경우 문제가 해결된다. admin값을 아스키코드를 참고하여 인코딩하면 %61%64%6D%69%6E가 된다. 이 인코딩 된 값을 URL에 직접 입력해줬다. no!가 뜨면서 id=admin으로 된 것을 알 수 있었다. 실패한 원인을 찾아보니 웹 서버와 브라우저 사이의 데이터 교환 시 브라우저에서는 데이터를 자동 인코딩하여 서버에 보내고 서버는 인코딩된 값을 자동으로 디코딩 하기 때문에 인코딩하여 보낸 %61%64%6D%69%6E를 서버에서 디코딩하여서 admin으로 나타남을 알 수 있다. 서버에서 디코딩하였는데 %61%64%6D%69%6E를 값으로 가질 수..

[webhacking.kr] webhacking.kr 25

25번 문제 URL을 화면에 나와있는 값들로 변경해 보았다. ?file=hello은 hello world을 출력해주고, ?file=flag은 FLAG is in this code을 출력해주고, ?file=index은 아무것도 출력되지 않는다. 이를 통해서 file에 file명을 입력하면 자동으로 php가 붙는 것 같았다. 여기서 해결하기 위해 php wrapper를 사용해서 LFI 공격을 해야하는 것 같다. 기본적인 LFI공격은 www.[공격 사이트 주소].index.php?page=../../../../../../../../etc/passwd/(널바이트)로 이루어져 있다. wrapper 중 php://filter wrapper를 사용했다. 이 wrapper를 사용하면 encode/decode 옵션을 사..

[webhacking.kr] webhacking.kr 24

24번 문제 view-source에 들어가면 소스코드가 나온다. extract($_COOKIE)는 cookie에 있는 값을 변수로 만드는 것이다. $ip에 $REMOTE_ADDR값을 넣어준다는 것을 알 수 있고, 조건문에서 str_replace()함수를 통해 ‘..’ -> ‘.’ , ’12’ -> 공백, ‘7’ -> 공백, ‘0’ -> 공백으로 변환되는 것을 알 수 있다. 그리고 ip가 127.0.0.1이면 해결이 되는 것을 알 수 있었다. cookie값을 변경해서 값을 127.0.0.1로 변경해보았다. REMOTE_ADDR라는 이름의 쿠키를 만들었다. 그리고 str_replace() 를 고려하며 127.0.0.1이 되도록 하면 112277…00…00…1을 넣어주면 될 것 같았다. 이름이 REMOTE_A..