[webhacking.kr]old-26 write up

zzsla·2023년 6월 13일
0

문제 정보

없다.

문제

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

분석

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개의 댓글