single quote(')에 필터링이 걸려있고, admin에 대해서도 필터링이 걸려있다.(admin은 공백으로 치환됨) 이 필터링을 우회하여 id = 'admin'인 레코드를 반환 받아야 하는 문제이다. admin을 필터링하는데 이용한 함수str_replace(찾을 문자, 치환할 문자, 대상 문자열) 는 대소문자를 구별하는 함수이다. 따라서, id='Admin' 이라고 입력해주면 문제가 풀린다. str_replace() 함수는 대소문자를 구별하기 때문에, 필터링을 하고 싶다면 대소문자를 구별하지 않는 str_ireplace() 함수를 이용하는것이 좋다.
admin과 싱글쿼터 (')에 필터링이 되어있다. 이를 우회하여 id가 admin인 레코드를 반환 받아야 하는 문제이다. preg_match() 필터링 함수는 지금까지 많이 봤지만, ereg()함수는 처음봐서 구글링을 해보았는데. ereg("찾는 값"., "필터를 시킬 문자열") -> 대소문자를 구분한다.eregi("찾는 값"., "필터를 시킬 문자열") -> 대소문자를 구분하지 않는다. 라는 것을 알아냈다. 현재 admin이 ereg()로 필터링이 되어있기 때문에, 대소문자를 구분하고 있다. 따라서, Admin이라는 문자열에 대해서는 필터링이 적용되지 않는다. Mysql은 대소문자를 구별하지 않기 때문에 admin, Admin ADMIN 모두 같은 admin으로 인식한다. 따라서, ?id=Admin 이..
orge 단계 역시 or와 and에 필터링이 걸려있다.이 필터링들을 우회해서 id='admin'인 계정의 pw을 알아낸 뒤, 이 pw를 입력해야 하는 문제이다. 빨간색 밑줄친 부분이 admin의 pw를 알아낼 수 있는 힌트이다. 일단 pw의 길이를 알아내야 한다. orc문제를 풀때 pw의 길이가 8이었기 때문에, 이번에도 8로 먼저 입력해보았다. ?pw=' || id='admin' && length(pw) = 8 %23를 입력했더니 &가 인식되지 않아서, &대신 url 인코드된 %26을 사용하였다. ?pw=' || id='admin' %26%26 length(pw) = 8 %23를 입력하니까 맨 위 사진에 빨간 밑줄을 쳤던 코드에 의해 Hello admin이 출력이 된다. admin의 pw 길이는 8이라..
admin이라는 id의 pw를 GET으로 입력해줘야 하는 문제이다.preg_match()와 addslashes()로 필터링이 되어있다. 또한 GET으로 입력해준 pw와 DB상의 pw가 같아야 클리어 되기 때문에 admin 계정의 정확한 pw를 찾아야한다. 일단 pw의 길이를 알아내야 한다. length()함수를 이용하였다. pw=' or id=admin and length(pw)=1%23 주소창에 위와 같이 입력되면 pw의 길이가 1일경우, Hello admin이 출력된다. 1부터 시작해서 찾은 결과 pw의 길이는 8이다. 이제 두가지 방법중 하나를 택할 수 있다. 방법1은 위와 같이 substr(pw , 시작인덱스, 추출할 길이) 함수를 이용하는 것이다. pw=' or id='admin' and sub..
쿼리문을 전송했을때, 반환되는 레코드가 존재하면서, 그 레코드의 'id'라는 column의 값이 'admin'이어야 해결되는 문제이다. preg_match()라는 함수를 이용해서, 'prob', '_', '.', '()', ''', '"', '`' 에 필터링을 해놓았다.(패턴 구분자 뒤의 i는 필터링시 대소문자를 구별하지 않게함) 필터링으로 인해 '를 이용하지 못하게 되었지만 char()함수를 이용하면 이를 우회할 수 있다.admin을 아스키 코드로 인코딩 하면 97 100 109 105 110 이므로char(97,100,109,105,110) = 'admin' 이다. 따라서, ?no=3 or id=char(97,100,109,105,110)을 입력한다면(no=3대신에 no=1만 아니면 어떤 값을 넣어주..
1번 문제에 들어가면 나오는 PHP 코드이다. 일단 "./config.php"를 include 시킨다. 그리고 정규표현식 /prob|_|\.|\(\)/ 을 이용해서 id나 pw에"prob", "_", ".", "()" 이 포함된 경우 "No Hack ~_~" 이라는 메시지가 출력되도로 해놓았다.(/ 뒤에 있는 i는 대소문자를 구분하지 않겠다는 flag 이다.) 계속 코드를 읽어보면쿼리문 $query를 전송했을때, 반환되는 결과 값(column 이름 -> id)이 존재하기만 하면 문제가 해결된다. $query -> select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}' 이 페이지에서 URL에 #을 입력했을때 인식되지 않으므로 URL ..
칼리 리눅스에 구글 크롬을 설치하는 방법을 소개하겠다. 일단, 위와 같이 구글 크롬 설치 페이지에 접속한다. 리눅스에 설치하는 것이 맞으므로 파란색 "Chrome 다운로드" 버튼을 클릭한다. 칼리 리눅스 이므로 64bit Debian/Ubuntu용에 체크한 후 "동의 및 설치" 버튼을 클릭한다. Save File에 체크한 뒤 OK클릭 리눅스를 최신 상태로 업데이트/업그레이드 한다.apt-get dist-upgrade 명령은 의존성을 검사하며 업그레이드 하는 명령이다. Downloads 폴더로 이동하면위에서 설치한 구글 크롬의 deb파일이 존재한다. 일단 apt-get -f install 을 입력해서 의존성 파일들을 강제로 설치해 둔다.-f는 망가진 의존성 패키지가 있는 시스템을 즉시 정정하는 옵션이다. ..