id='admin'의 pw를 알아내면 된다. case와 if에 필터링이 되어있는데,select 1 union select 2를 이용하면 된다. ?pw=' or id='admin' and (select 1 union select (length(pw)=8))%23 와 같이 입력하면 length(pw)와 비교하는 값이 실제 pw의 길이일 경우에만 에러가 출력되지 않는다. pw의 길이는 8이다. ?pw=' or id='admin' and (select 1 union select (ord(substr(pw,1,1))=53))%23와 같이 입력하면 ord(substr(pw,1,1)) 와 비교하는 값이 실제 pw의 첫째 자리 값일 경우에만 에러가 출력되지 않는다. 위를 이용하여 파이썬 프로그램을 작성하였다.pw는 5..
id='admin'의 pw를 찾는 문제이다. 지금까지는 조건식이 맞으면 "Hello admin!" 이 출력되는 것을 이용할 수 있었지만, 이번에는 에러 메시지가 출력되는 입력을 이용한다. select 1 union select 2 가 subquery로 사용될 경우 Subquery returns more than 1 row 라는 에러가 출력된다. if(조건, 참, 거짓) 을 이용하면 된다. if(length(pw)>pw길이,(select 1 union select 2),1) 를 이용하게 되는데, pw길이를 1에서 부터 증가시켜 입력한다면, 게속 에러가 출력되다가 pw길이가 실제 pw의 길이와 같아질 때 에러가 출력되지 않게된다. ?pw='or id ='admin' and if(length(pw)>16,(s..
id = 'admin'의 pw를 알아내야 하는 문제이다. 기존에 이용하던 파이썬 프로그램을 이용해서 pw 길이를 알아냈는데, 40이었다. ?pw=' or id = 'admin' and length(pw) =40 %23을 입력하면 Hello admin이 출력 -> length가 40 기존에 이용했던 파이썬 프로그램으로 각 자리별 패스워드를 확인했더니 모두 0 이어서, 위와 같이 pw를 입력했으나, 클리어 되지 않았다.. 혹시나 해서 pw중 한자리의 length를 확인 해봣더니 4였다.?pw='or id = 'admin' and length(substr(pw,1,1))= 4 %23 따라서 범위가 128~255인 확장 아스키 코드에 대해서 패스워드를 검색하도록 기존의 파이썬 프로그램을 수정하였고,멀티 바이트 ..
쿼리 입력에 대해서 임의의 id를 반환 받아야 하는 문제이다. 1. 주석에 필터링이 되어있다.(#, -)2. 입력 글자수가 6이하여야 한다. 일단 #, --를 사용하지 못하므로 우회하는 방법에는 /**/ 와 ;%00 이 있다. 글자 수 제한이 있기 때문에 길이가 짧은 %00을 이용하였고,false = false -> true 라는 것을 이용하였다. ?pw=')=0;%00을 입력하면 쿼리 입력의 조건 부분에서 pw=('') -> false, 0 -> false 이므로where true 주석이 되면서 클리어 된다. 입력 글자수도 딱 6자이다..
바로 전 문제인 zombie_assassin 과 동일 한 문제이다그러나 이번 문제는 싱글쿼터를 ereg가 아닌 preg_match로 필터링 하였다. preg_match에는 특별한 취약점이 없다 따라서, 문자열 이스케이프 \을 이용 하면 된다. ?id=\&&pw=or 1=1;%23 와 같이 입력하면 \ 뒤의 싱글쿼터가 문자로 인식되어where id='\' and pw=' or 1=1 ; #' 에서빨간색 부분이 id의 값으로 인식 된다. 따라서, or 뒤의 1=1에 의해query 입력에 대해 임의의 id가 반환되어 클리어 된다.
일단 pw에는 싱글쿼터 필터링이 되어있다.어떤 패스워드를 입력했을때 그 패스워드가 admin의 것이면 클리어되는 문제이다.like가 있으므로 %을 이용하면 해결가능할 것이다. 0-9, a-z , A-Z 다 입력해 봤는데,?pw=8% 를 입력했을때만 Hello guest가 출력된다.admin의 pw도 8로 시작하기 때문인 듯 하다. 그 다음도 ?pw=83% 를 입력했을때만 Hello guest가 출력된다.admin의 pw도 83으로 시작한다. ?pw=832% 를 입력하니 클리어 됬다.admin의 pw는 832로 시작함을 알아냈다.파이썬으로 코딩해서 풀어도 된다.
from과 prob_giant 사이에 공백을 입력해야 하는 문제이다. 하지만,입력 문자의 길이 1로 제한공백, \n, \r, \t 에 필터링이 되어있다. \n에 해당되는 %0a을 shit의 값으로 전달했더니 No Hack ~_~이 아닌, HeHe가 뜬다.이는 %0a를 1글자 이하로 인식한다는 뜻이다. 따라서 \n(%0a), \r(%0d), \t(%09)대신 %0b나 %0c 로 공백을 우회 하면된다. ?shit=%0c 또는 ?shit=%0b 를 입력하면 클리어
id = "admin" 인 계정의 pw를 알아내야 하는 문제이다.pw 는 싱글쿼터에 대한 필터링이 되어있고,no는 substr, =, or, and, 공백, like 등에 대해 필터링이 되어있다. 일단 admin의 pw 길이를 알아내야 한다!필터링 우회를 위해싱글 쿼터 -> 더블 쿼터or -> ||and -> %26공백 -> %09, %0a= -> in으로 대체 하였다. ?no=""||id%09in("admin")%26%26length(pw)%09in%09(8)위와 같이 입력하면 Hello admin이 출력된다. pw의 길이는 8이다. pw의 길이를 알아냈으니, pw의 각 자리를 알아내야 한다. 지금까지는 substr을 이용했지만 필터링이 되어있기 때문에, mid를 이용하였다. ?no=""||id%0ai..