-
[LOS] 7. orge 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 17. 16:39
darkelf 때와 마찬가지로 or과 and는 필터링되지만, 실제 pw를 알아내야 해결되는 문제이다. 따라서 orc 문제와 비슷하게 풀되, or과 and만 잘 우회하면 된다. 먼저 pw의 길이를 알아내자. (&&의 경우 그대로 입력하면 제대로 인식되지 않아서 &&의 URL 인코딩 값인 %26%26으로 입력해야 한다.) pw=1' || id='admin' %26%26 length(pw)=1--%20 pw의 길이는 8 bytes이다. pw의 길이를 알았으니 이제 실제 pw가 무엇인지 ascii 함수와 substr 함수를 통해 알아낸다. pw=1' || id='admin' %26%26 ascii(substr(pw,1,1))=97--%20 자동화 프로그램은 orc에서 사용했던 것과 동일한 프로그램을 사용하였다...
-
[pwnable.kr][Toddler's Bottle] 3. bofWargame/pwnable.kr 2019. 7. 17. 15:00
이번 문제는 버퍼 오버플로우에 관한 문제이다. 먼저 bof와 bof.c 파일을 wget 명령어로 다운받는다. 다운받은 bof.c 파일을 확인해보자. func 함수 내에 gets 함수가 사용된 것을 확인할 수 있다. gets 함수는 표준 입력(stdin)에서 문자열을 가져오는 함수로, 읽어들일 문자열의 길이를 지정하지 않기 때문에 버퍼 오버플로우가 발생할 수 있다. func 함수에서는 버퍼인 overflowme의 크기가 32 bytes이므로 이 크기를 넘어서는 문자열을 입력값으로 주면 key의 값도 조작할 수 있을 것이다. 인자 key를 조작하기 위해서는 먼저 key의 위치를 알 필요가 있다. 이를 위해 gdb를 실행시켜 func 함수를 디버깅해보았다. key와 0xcafebabe를 비교하는 부분이 fun..
-
[LOS] 5. wolfman 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 16. 21:08
이전 문제들과 거의 비슷하지만 이번 문제는 공백을 필터링한다. 따라서 이 공백 문자를 우회하여 admin 권한을 획득해야 한다. 공백 문자를 우회하는 방법은 여러 가지가 있으나, 나는 \n을 사용하였다. \n의 URL 인코딩한 값인 %0a를 공백 대신 사용한다. pw=1' or id='admin → pw=1'%0aor%0aid='admin ※ 참고 Webhacking.kr에 역시 비슷한 문제가 있으니 참고하자. 아래에 공백 문자 우회에 대해서도 좀 더 자세히 설명하였다. https://g-idler.tistory.com/6?category=830164
-
[LOS] 4. orc 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 16. 20:55
goblin과 마찬가지로 id는 admin으로 고정되어 있고, pw가 일치하면 Hello admin 문구가 출력된다. SQL 인젝션을 이용하여 pw를 우회해서 admin에 로그인해 보았다. pw=' or '1'='1 위 소스코드의 아랫부분을 다시 보면, addslashes 함수가 보인다. addslashes 함수는 ', ", \ 등의 특수문자가 db 내에서 문자로 인식될 수 있도록 해당 문자를 이스케이프(escape) 시켜주는 함수이다. 예를 들면 db에 "I'm a student"라는 문자열을 넣을 경우, 작은 따옴표(') 때문에 쿼리문 실행 시 오류가 발생할 수 있다. 이러한 오류를 방지하기 위해 addslashes 함수를 사용하여 해당 문자열을 "I\'m a student"로 바꿔준다. addsla..
-
[LOS] 3. goblin 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 16. 18:44
쿼리문을 보니 id는 guest로 이미 고정되어 있고, no를 get 방식으로 입력받는다. guest로 고정된 id를 admin으로 바꾸면 문제가 해결될 것이다. 일단 인자로 no를 1부터 넣어보았는데, no = 1일 때만 Hello guest 문구가 출력되었고, 다른 숫자를 넣었을 때는 문구가 출력되지 않았다. 이를 통해 id=guest에 할당된 no가 1이라는 것을 알 수 있다. no=1이 guest이므로, admin에 할당된 no도 존재할 것이다. admin의 no는 2라고 가정한다. 따라서 no의 인자로 admin의 no를 주면 admin 계정으로 로그인이 가능할 것이다. 하지만 id가 guest로 고정되어 있고 no는 and 구문으로 묶여있기 때문에, id='guest' and no=3으로 해당..