[webhacking.kr]old-26 write up

zzsla·2023년 6월 13일

문제 정보

없다.

문제

문제에 들어가면 소스코드 링크만 주어지는데 소스코드는 이렇게 되어 있다.

분석

php부분만 보면 먼저 get으로 요청받은 idadmin이면 프로그램이 no!라고 출력한 뒤에 죽는다.
그리고 요청받은 idurldecode를 한 뒤에 id에 다시 넣는다.
그 다음 그 idadmin이면 문제가 풀린다.

  if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
  $_GET['id'] = urldecode($_GET['id']);
  if($_GET['id'] == "admin"){
    solve(26);
  }

취약점

일단은 admin을 잘 우회해서 admin을 넣어야 한다. ad%00min 이것도 생각해 봤지만 urldecode에 걸린다. 하지만 urldecode를 이용하여 쉽게 우회할 수 있다. urldecodeascii코드으로 이루어진 값을 char형으로 바꿔준다.

익스플로잇

adminurlencode 방식으로 보내면 필터링부분에서 걸리지 않고 값을 보낼 수 있다.
adminurlencode값은 %61%64%6d%69%6e이다. 하지만 이대로 주소창을 이용해서 보내게 되면 주소창에서 한 번 urldecode를 해 주기 때문에, 값이 admin으로 변하면서 걸리게 된다. 그렇기 때문에 urlencode를 이중으로 사용한다. %61%64%6d%69%6eurlencode값은 %25%36%31%25%36%34%25%36%64%25%36%39%25%36%65이다. 이 값을 보내면 주소창에서는 %61%64%6d%69%6e로 변하게 되고, 이 값이 id값으로 들어가서 urldecode가 실행되면 admin으로 변하게 되면서 문제가 풀리게 된다.
?id=%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65

profile
[README]newbi security hacker :p

0개의 댓글