-
[LOS] 15. assassin 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 19. 03:11
이번 문제는 필터링되는 문자가 싱글 쿼터(')밖에 없다. 이 싱글 쿼터(')를 우회해서 id가 admin이 되도록 조작할까 싶었지만, 아쉽게도 이 문제에서는 싱글 쿼터(')를 우회할 수 있는 방법이 없었다. 그런데 쿼리문에서 pw를 비교할 때 등호가 아닌 LIKE가 사용된 것이 걸린다. LIKE는 pw의 일부만 같아도 true를 반환하기 때문에, admin의 pw를 한 글자만 알아내도 LIKE에 의해 전체 쿼리문이 참이 되어 admin을 select할 수 있게 된다. LIKE 구문에서 사용하는 특수 문자 중에는 %가 있다. %는 0개 이상의 문자를 의미한다. 따라서 만약 pw LIKE "a%" 라는 쿼리문을 실행했을 때, pw의 맨 첫 번째 문자가 a면 true, 아니면 false를 반환한다. %를 이용..
-
[LOS] 14. giant 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 19. 01:54
shit이라는 인자를 GET 방식으로 입력받는데, 길이가 1보다 크면 No Hack 문구가 출력된다. 게다가 공백과 공백을 우회할 때 자주 사용되는 문자들까지 필터링된다. 일단 shit 인자에 한 자리 숫자를 인자로 주고 쿼리문을 확인해보자. 쿼리문을 보니 from과 prob_giant 테이블 사이에 공백이 없어서 쿼리문이 정상적으로 동작하지 않는 것을 알 수 있다. 따라서 이 문제는 공백, \n, \t, \r 문자를 우회하여 공백을 넣으면 쿼리문이 정상적으로 동작하여 1234가 select될 것이다. 공백을 우회할 수 있는 방법은 여러 가지가 있다. 1. Line Feed (\n) - 커서(캐럿)를 다음 줄(현재 위치에서 바로 아래줄)로 이동시키는 개행 문자 - URL Encoding: %0a - 예시..
-
[LOS] 13. bugbear 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 19. 01:13
no와 pw 2개의 인자를 GET 방식으로 입력받는다. pw에서는 싱글 쿼터(')를 필터링하고, no에서는 싱글쿼터('), substr 함수, ascii 함수, 등호(=), or, and, like, 0x, 공백까지 모두 필터링한다. 따라서 이 모든 필터링을 피해서 pw를 찾아내야 한다. 우회 방법은 아래와 같다. 공백 → \n (URL Encoding: %0a) 등호(=), LIKE → instr 함수, IN 연산자, 부등호() 싱글 쿼터(') → 더블 쿼터(") ascii 함수 → ord 함수, hex 함수 substr 함수 → mid 함수 OR → || AND → && (URL Encoding: %26%26) instr 함수에 대한 설명은 아래를 참조하자. ...더보기 instr 함수 - 형식: i..
-
[LOS] 12. darkknight 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 18. 21:19
이번에는 pw와 no 2개의 인자를 GET 방식으로 입력받는다. pw는 싱글 쿼터(')를 필터링하고, no는 싱글 쿼터('), substr 함수, ascii 함수, 등호(=)를 필터링한다. 싱글 쿼터(')의 사용이 막힐 경우, 더블 쿼터(")로 대체하여 사용할 수 있다. 또한 등호(=)는 like로 대체하여 사용한다. 이를 이용하여 pw의 길이를 알아내자. pw=1&no=1 or id like "admin" and length(pw) like 8 이제 실제 pw가 무엇인지 알아내자. ascii 함수는 ord 함수로 대체해서 사용할 수 있다. substr 함수는 mid 함수로 대체하자. (바로 이전 문제인 golem과 달리 darkknight는 substr만 필터링하기 때문에 substring도 필터링 대..
-
[LOS] 11. golem 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 18. 17:13
이번 문제에서는 or과 and를 필터링할 뿐만 아니라, 등호(=)와 substr 함수까지 필터링한다. 그런데 하단의 코드를 보면 알 수 있듯이, pw를 알아내야 문제가 풀리므로 substr 함수가 아닌 다른 함수를 사용하여 pw를 알아내야 한다. or은 ||로, and는 &&(%26%26)으로 우회 가능하다. 또한 등호(=)는 LIKE로 우회가 가능하므로, 아래와 같이 인자를 주면 Hello admin 문구가 출력된다. pw=1' || id like 'admin 이를 이용해서 pw의 길이를 알아내보자. pw='1' || id like 'admin' %26%26 length(pw) like 8--%20 pw의 길이가 8이라는 것을 알았으니 이제 실제 pw를 찾아보자. substr 함수는 substring ..
-
[pwnable.kr][Toddler's Bottle] 4. flagWargame/pwnable.kr 2019. 7. 18. 01:25
이번 문제는 리버싱 문제이다. wget로 문제에 나온 flag 파일을 다운받는다. 바이너리 파일이기 때문에 cat 명령어로는 파일을 열람할 수 없다. 그래서 바이너리 파일을 열람할 수 있게 해주는 xdd 명령어로 파일을 열람해보았다. xxd flag | less 이번엔 바이너리 파일에서 문자열만 추출해서 보여주는 strings 명령어로 flag 파일을 확인해보았다. 확인 결과 flag 파일이 UPX로 패킹되어 있다는 것을 알 수 있었다. flag 파일을 UPX로 언패킹 해보았다. 언패킹한 flag 파일을 실행해본 결과 아래와 같은 문구가 출력되었다. (처음에는 파일에 실행 권한이 없으므로 chmod로 실행 권한을 부여한다.) 출력된 문구에는 malloc( )을 하고 flag를 strcpy하겠다고 쓰여있다..
-
[LOS] 9. vampire 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 17. 16:55
id를 입력하면, strtolower 함수에 의해 입력한 문자열이 모두 소문자로 변환된다. 또한 id에 admin을 입력할 경우 str_replace 함수에 의해 공백으로 필터링된다. 이 두 함수를 모두 우회하여 admin으로 로그인해야 문제가 해결될 것이다. troll 문제 때처럼 ADMIN을 입력해도 strtolower 함수 때문에 다시 admin으로 변환되기 때문에 결국 str_replace 함수 필터링에 걸리게 된다. 따라서 결론적으로는 str_replace 함수를 우회해야 한다. str_replace 함수는 문자열 중간에 같은 문자열을 끼워넣으면 우회가 가능하다. 즉, 아래와 같이 입력하면, str_replace 함수에 의해 끼워넣어진 admin이 공백으로 필터링되고, 양옆의 admin만 남아서..