Wargame/LOS

    [LOS] dragon 풀이 (st.20)

    풀이 이번 문제에는 Query문에 주석이 있다. #은 한줄 주석이므로, %0a와 같은 개행문자를 이용하면 주석을 무력화 시킬 수 있다. 원리는 다음과 같다. select id from prob_dragin where id='guest'# and pw='1'%0aand pw='1' or id='admin'%23 해당 부분만 개행 문자로 인해 주석처리가 되고, 뒤에 Query는 그대로 값을 전달하게 된다.

    [LOS] iron golem 풀이 (st.21)

    풀이 이번에는 지금까지 봤던 문제들과는 조금 다르다. 다음 코드를 주목하자. if(mysqli_error($db)) exit(mysqli_error($db)); 이번 문제는 Error Based SQLi인 듯하다. 먼저 다음 쿼리를 넣어 에러를 출력해보자. Query: ?pw=1' > You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1''' at line 1 Query를 보내 확실하게 Error Based SQLi인 것을 확인했다. 먼저 에러를 이용해 pw의 길이를 구해보자. 여러분들은 부등호를 이용해 정확한 값..

    [LOS] skeleton 풀이 (st.10)

    풀이 이번에는 Query문 뒤에 and 1=0이 붙어있다. and 1=0은 죽었다가 깨어나도, 참으로 못 만드니 그냥 뒤에 주석을 붙여 코드를 지워버리자. Query: ?pw=1' or id='admin'%23

    [LOS] troll 풀이 (st.8)

    풀이 이번 문제도 역시 노멀한 SQLi이다. 단, admin이라는 단어를 Filtering한다. 근데 생각해보니까 SQL은 대소문자를 구분하지 않는다. 그러면? Query: ?id=Admin

    [LOS] darkelf 풀이 (st.6)

    풀이 역시, 다른 문제와 크게 다르지 않다. 이번 문제는 or와 and라는 문자열을 Filtering 한다. 다음과 같이 Query문을 수정해보자. Query: ?pw=1' || id='admin'%23

    [LOS] vampire 풀이 (st.9)

    풀이 싱글쿼터를 Filtering한다. 그리고 GET['id']값을 소문자로 바꾸고, admin이란 값이 들어있을 경우 공백으로 replace한다. 음.. id값에 'admin'만 없으면 되는거다. 그러면 adadminmin을 넣으면 어떻게 변할까? GET['id'] = strtolower("adadminmin") #id는 현재 adadminmin GET['id'] = str_replace("admin", "", GET['id']) # adadminmin -> admin 그러면 남는 값은 admin이므로 문제가 해결된다. Query: ?id=adadminmin

    [LOS] nightmare 풀이 (st.18)

    풀이 처음 보고 이렇게 쉬운데 왜 18단계일까 하다가.. pw값의 최대 길이가 6자리다. Filtering 되지 않은 주석은 ;%00이 있으니, ('') = False라는 점을 이용해 Query문을 짜봤다. Query: ?pw=')=0;%00

    [LOS] golem 풀이 (st.11)

    풀이 똑같은 Blind SQLi지만, or, and, substr, =를 필터링하는 문제이다. or -> || and -> %26%26 substr -> mid = -> like 로 바꿔서 Query문을 수정하자. 먼저 pw의 길이를 알아내자. Query: ?pw=1' || id like 'admin' %26%26 length(pw) like 8%23 pw의 길이는 부등호를 사용하면 알아내기 쉽다. 이제 pw의 길이를 알았으니, 파이썬을 이용해 값을 알아내보자. 코드는 다음과 같다. 대소문자에 유의하자.