분류 전체보기
-
- 문제 접속 시 메인 화면이다. - url 파라미터로 val이 전달되는 것을 확인 - view-source를 클릭! - url파라미터로 전달된 val이 preg_match() 함수를 통해 필터링되는 것을 확인 - 필터링을 우회하여 sql injection 공격 수행, 결과 값으로 2를 받아오면 문제 해결 - 필터링되는 문자 2, -, +, from, _, =, 공백, *, / - 숫자 2가 필터링되므로 char() 함수를 이용, 아스키코드로 문자를 지정 - val=char(50)으로 설정하여 시도 - query error 발생 - sql injection은 성공하였으나 테이블에 lv=2 값이 존재하지 않아 query error발생 - sql문을 통해 직접 결과값을 2로 반환하도록 시도 - val = 3..
Old - 07- 문제 접속 시 메인 화면이다. - url 파라미터로 val이 전달되는 것을 확인 - view-source를 클릭! - url파라미터로 전달된 val이 preg_match() 함수를 통해 필터링되는 것을 확인 - 필터링을 우회하여 sql injection 공격 수행, 결과 값으로 2를 받아오면 문제 해결 - 필터링되는 문자 2, -, +, from, _, =, 공백, *, / - 숫자 2가 필터링되므로 char() 함수를 이용, 아스키코드로 문자를 지정 - val=char(50)으로 설정하여 시도 - query error 발생 - sql injection은 성공하였으나 테이블에 lv=2 값이 존재하지 않아 query error발생 - sql문을 통해 직접 결과값을 2로 반환하도록 시도 - val = 3..
2021.05.16 -
?의 위치에서 값이 계속 변경이 되더니, 마지막엔 ?이 되었다. 무슨 기능인지는 잘 모르겠다. 그래서 개발자 도구에서 코드를 살펴보았다. function run(){ if(window.ActiveXObject){ try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) { return null; } } } else if(window.XMLHttpRequest){ return new XMLHttpRequest(); } else{ return null; } } x=run(); function answer(i){ x.open('GET','..
Old - 54 Write Up?의 위치에서 값이 계속 변경이 되더니, 마지막엔 ?이 되었다. 무슨 기능인지는 잘 모르겠다. 그래서 개발자 도구에서 코드를 살펴보았다. function run(){ if(window.ActiveXObject){ try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) { return null; } } } else if(window.XMLHttpRequest){ return new XMLHttpRequest(); } else{ return null; } } x=run(); function answer(i){ x.open('GET','..
2021.05.15 -
이번에도 입력값에 통해 PHP에 어떤 조건이 되어있는 것으로 판단이 된다. View-source를 열어서 코드를 확인하였다. 코드를 보니, 첫번째 replace인 str_replace(“\\”,””,$_POST[‘id’])은 입력값에서 ::\::이 있는 경우 제거한다. 두번째 replace인 str_replace(“’”,”’’”,$_POST[‘id’])은 입력값에서 ::’::을 ::’’::으로 변환한다. 이 2가지를 통과한 후, Substr 함수에 0, 15을 줘서 입력값의 0번째부터 14번째 인덱스까지 추출하여 쿼리문에 삽입한다. 쿼리는 length(id)
Old - 39 Write Up이번에도 입력값에 통해 PHP에 어떤 조건이 되어있는 것으로 판단이 된다. View-source를 열어서 코드를 확인하였다. 코드를 보니, 첫번째 replace인 str_replace(“\\”,””,$_POST[‘id’])은 입력값에서 ::\::이 있는 경우 제거한다. 두번째 replace인 str_replace(“’”,”’’”,$_POST[‘id’])은 입력값에서 ::’::을 ::’’::으로 변환한다. 이 2가지를 통과한 후, Substr 함수에 0, 15을 줘서 입력값의 0번째부터 14번째 인덱스까지 추출하여 쿼리문에 삽입한다. 쿼리는 length(id)
2021.05.15 -
페이지에 들어가니, Log Injection이 눈에 가장 띄었다. Log Injection이란? 사용자 입력을 로그 파일에 기록하면 공격자가 로그 항목을 위조하거나 악성 콘텐츠를 로그에 삽입하는 기법 값을 넣고 서버에 보내봐도 별다른 이상이 없었다. 그래서 개발자 도구을 이용하여 코드를 살펴보았다. LOG INJECTION Admin page로 이동하는 A태그가 주석 처리가 되어있는 것을 볼 수 있었다. 해당 주소로 이동하니, 다른 이용자들이 입력한 값들이 로그로 쌓인 것을 볼 수 있었다. 또한 Flag를 얻을 수 있는 방법도 적혀져 있었다. admin을 로그에 쌓으면 Flag를 주는 것으로 판단하였고, 나는 어떻게 할 것인가 고민을 하였다. 고민 끝에 줄바꿈을 통해 로그를 위조하기로 하였다. \\n, ..
Old - 38 Write Up페이지에 들어가니, Log Injection이 눈에 가장 띄었다. Log Injection이란? 사용자 입력을 로그 파일에 기록하면 공격자가 로그 항목을 위조하거나 악성 콘텐츠를 로그에 삽입하는 기법 값을 넣고 서버에 보내봐도 별다른 이상이 없었다. 그래서 개발자 도구을 이용하여 코드를 살펴보았다. LOG INJECTION Admin page로 이동하는 A태그가 주석 처리가 되어있는 것을 볼 수 있었다. 해당 주소로 이동하니, 다른 이용자들이 입력한 값들이 로그로 쌓인 것을 볼 수 있었다. 또한 Flag를 얻을 수 있는 방법도 적혀져 있었다. admin을 로그에 쌓으면 Flag를 주는 것으로 판단하였고, 나는 어떻게 할 것인가 고민을 하였다. 고민 끝에 줄바꿈을 통해 로그를 위조하기로 하였다. \\n, ..
2021.05.15 -
View-source 라는 링크만 있어서 일단 코드를 확인하였다. 코드에서 중요한 부분만 가져왔는데, id의 값이 URL 디코딩 후 admin이면 Flag를 획득하는 조건이 있었다. 나는 admin을 이중 URL 인코딩하여 id에 넣어줄 것이다. 이중 URL 인코딩을 하는 이유는 PHP는 넘겨받은 값을 URL 디코딩을 하기 때문에 한번만 인코딩을 하면 PHP는 자동으로 디코딩을 하여 원래의 값으로 쓰기 때문이다. 문제에서 요구하는 건 URL 인코딩된 admin이기 때문에 이를 반영하기 위해 이중 URL 인코딩을 하였다. ?id=%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65를 페이지 URL 뒤에 넣고 서버에 보내니, Flag를 획득할 수 있었다.
Old - 26 Write UpView-source 라는 링크만 있어서 일단 코드를 확인하였다. 코드에서 중요한 부분만 가져왔는데, id의 값이 URL 디코딩 후 admin이면 Flag를 획득하는 조건이 있었다. 나는 admin을 이중 URL 인코딩하여 id에 넣어줄 것이다. 이중 URL 인코딩을 하는 이유는 PHP는 넘겨받은 값을 URL 디코딩을 하기 때문에 한번만 인코딩을 하면 PHP는 자동으로 디코딩을 하여 원래의 값으로 쓰기 때문이다. 문제에서 요구하는 건 URL 인코딩된 admin이기 때문에 이를 반영하기 위해 이중 URL 인코딩을 하였다. ?id=%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65를 페이지 URL 뒤에 넣고 서버에 보내니, Flag를 획득할 수 있었다.
2021.05.15 -
이번 문제는 SQL Injection이라고 적혀져 있는 것으로 보아 SQL 쿼리에 관한 문제로 추측된다. 맨 밑에 초록색 A태그를 클릭하여 코드를 확인하였다. 코드를 보니, 조건문 중에서 preg_match 함수의 인자 값들이 눈이 갔다. 그 후, preg_match가 있는 조건문 밑에 있는 줄의 주석에서 admin는 no=2이라는 것을 알 수 있었다. 하지만 현재 SQL 쿼리의 Where을 보니, id=‘guest’이라고 적현 것을 보니 no에 2을 넣은다고 해서 admin의 id가 나오지는 않을 것으로 판단된다. 대충 코드를 보니, 입력 값에 대한 검증이 있으며 입력 값은 쿼리의 no에 들어간다는 것을 알 수 있었다. 일단 guest의 no을 1~9까지 넣어서 찾아보도록하겠다. 1을 입력하니, hi ..
Old - 18 Write Up이번 문제는 SQL Injection이라고 적혀져 있는 것으로 보아 SQL 쿼리에 관한 문제로 추측된다. 맨 밑에 초록색 A태그를 클릭하여 코드를 확인하였다. 코드를 보니, 조건문 중에서 preg_match 함수의 인자 값들이 눈이 갔다. 그 후, preg_match가 있는 조건문 밑에 있는 줄의 주석에서 admin는 no=2이라는 것을 알 수 있었다. 하지만 현재 SQL 쿼리의 Where을 보니, id=‘guest’이라고 적현 것을 보니 no에 2을 넣은다고 해서 admin의 id가 나오지는 않을 것으로 판단된다. 대충 코드를 보니, 입력 값에 대한 검증이 있으며 입력 값은 쿼리의 no에 들어간다는 것을 알 수 있었다. 일단 guest의 no을 1~9까지 넣어서 찾아보도록하겠다. 1을 입력하니, hi ..
2021.05.15