목록WarGame_WriteUp (8)
starting point
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ujZRt/btqCafGk9EH/2n3Rrz5to71KXidwj87QWK/img.png)
초기화면은 입력창과 제출 버튼이 있고, 대놓고 SQL Injection임을 보여준다. 그럼 바로 소스코드를 살펴보겠다. [사진2]를 살펴보면 no라는 이름으로 text값이 GET방식으로 전달되는 것을 확인할 수 있다. [사진3]을 살펴보면 preg_match를 통해서 특정 문자를 필터링한다. #, select, (, 공백, limit, =, 0x를 대소문자 구분 없이 필터링한다. 문제를 해결하기 위해서는 쿼리문의 결과로 나온 id값이 'admin'이면 해결된다. 수월한 문제 해결을 위해서 admin의 no값이 2라는 것을 알려준다. 그럼 위의 쿼리문을 통해 원하는 결과를 얻어내기 위해 쿼리문을 조작해보겠다. [사진4]를 통해서 guest값이 있는 레코드의 no=1 임을 알 수 있다. 위에서 알아낸 정보를..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dT61e2/btqB6JWqQK6/P0AzPPPkwpAnksBsjETPm1/img.png)
입력창과 제출 버튼이 있는 초기화면이다. 우선 개발자 도구를 통해서 html소스를 살펴보겠다. post방식으로 문자를 전송하고 입력할 수 있는 문자열의 최대길이는 15로 제한한 것을 확인할 수 있다. 다음으로 view-source를 통해서 소스코드를 살펴보겠다. 입력된 문자열은 str_replace()함수와 substr()함수를 통해서 필터링된다. str_replace()함수부터 살펴보겠다. str_replace()함수는 특정 문자를 다른 문자로 대체하는 함수이다. 위 코드에서는 \(역슬래시)는 "(없음)"으로 대체하고, '(싱글쿼터)는 ''(싱글쿼터 2개)로 대체한다. substr()함수를 살펴보겠다. substr()함수는 선택된 문자열을 원하는 부분만 자르는 함수이다. 위 코드에서는 post방식으로 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bAgvSJ/btqB4ZZwTxS/6doKl4SHTlKbtAkwOuSQZK/img.png)
url에 #뒤에 적힌 경로를 통해 gadget.js를 로드하는 것을 추측할 수 있다. 경로를 조금 바꾸니 제대로 로드가 되지 않는 것처럼 보인다. 개발자 도구를 통해 변화를 관찰해 보겠다. url의 #뒤에 적힌 경로가 그대로 적혀 외부 리소스를 가져오는 것을 알 수 있다. [사진4]의 리소스 요청은 실패한 것을 [사진5]의 콘솔창을 통해서 확인할 수 있다. 그렇다면 이 문제는 외부의 리소스를 가져와서 문제를 해결해 볼 수 있을 것이다. 하지만 외부 리소스를 이용해서 문제를 해결하려면 서버를 생성해야 하기 때문에 외부리소스를 가져오지 않고 해결하는 방법이 있다. data URL scheme이다. data:[미디어타입][;인코딩방식],의 형태를 가진다. 이러한 방식을 통해서 외부 리소스를 가져오지 않고 직접..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bn1P5S/btqB7aFgkMy/dTZIkk22KfLKZ1wvZQ9Wt0/img.png)
Sign up을 클릭하면 회원가입 창으로 넘어간다. url을 보면 next변수에 confirm이라는 값이 들어가는 것을 볼 수 있다. 이곳에 다른 값을 넣어보고 변화하는 것을 개발자 도구를 통해 살펴보겠다. 입력되는 값에 따라 태그의 링크가 변화하는 것을 볼 수 있다. 이 곳에 onclick속성을 넣는 방법을 통해 문제를 해결할 수 있다. 힌트를 보면 onclick속성을 사용하는 방법 이외에 방법을 사용하라고 나와있다. 이를 해결하기 위해서 다른 방법을 찾아야 한다. 태그와 on속성을 사용하지 않고 자바스크립트를 실행시킬 수 있는 방법이 있다. javasciprt:(anycode)를 통해 자바스크립트를 실행시킬 수 있다. 원래는 태그를 통해서 자바스크립트가 실해되지만 이러한 방법으로도 간단한 자바스크립트..