<워게임 26번>
소스 코드를 보여준다고 하니 view source 를 눌러보자
if(preg_match(“/admin/”, $_GET[‘id’])) {echo”no!”; exit(); }
>> 가장 먼저 preg_match 라는 명령어로 admin이라는 단어를 걸러내고 있음을 알 수 있음
하지만..가장 마지막 명령을 보면 If($_GET[‘id’]==“admin”) { solve(26);}
이므로 이 문제를 푸는 핵심 단어가 admin임을 알 수 있다.
$_GET[‘id’] = urldecode($_GET[‘id’]) ;
>> GET형식으로 받은 id값을 urldecode()를 통해 변호하여 다시 대입해놓는다.
이제 단순히 admin이라는 단어를 url 인코딩하면 될 것 같지만
그럼에도 문제는 해결되지 않는다.
왜냐! 웹서버와 브라우저 사이에서 데이터를 교환할 때
브라우저는 폼에서 입력받은 데이터를 자동으로 인코딩한 값을 보내고
php는 자동으로 디코딩 하기 때문이다.
즉 내가 admin을 한번 인코딩하면 php는 자동으로 한 번 디코딩하여
브라우저로 보내므로 admin이라는 단어가 브라우저로 보내지고
이 단어는 가장 첫 명령어인 preg_match에 의해 걸러진다.
워게임 26번을 풀려면?
Admin을 두번 인코딩하여 폼에 입력한다.!
그럼 자동으로 브라우저에 ‘한번’ 디코딩한 값을 보내고
이는 id값에 대입되겠지? 그럼 명령( $_GET[‘id’] = urldecode($_GET[‘id’]) ; )에 따라
다시한번 디코딩하고 결국 admin을 얻게 된다.
마지막으로 If($_GET[‘id’]==“admin”) { solve(26);} 를 충족하므로
문제 26번 해결!!
'about Security > 웹보안과 해킹' 카테고리의 다른 글
[웹해킹] # sqlmap 자동화 공격 (0) | 2020.10.03 |
---|---|
[웹해킹] # 블라인드 SQL 인젝션_level.low (0) | 2020.10.03 |
[웹해킹] # SQL 인젝션 (0) | 2020.10.03 |
[웹해킹문제풀이] # webhacking.kr 워게임 4번 (0) | 2020.10.02 |
# 칼리리눅스 갑자기 안열림 + 칼리리눅스 2020 로그인 + 인터넷 연결 (0) | 2020.09.27 |
댓글