Wargame
-
<Lord of SQL Injection> golemWargame/Lord of SQL Injection 2021. 11. 13. 16:26
golem 'prob', '_', '.', '()', 'or', 'and', 'substr(', '='을 필터링한다. 'pw'의 값을 알아내면 문제가 풀린다. '='이 필터링되는 경우에는 'like'를 사용하여 우회할 수 있다. 참으로 ?pw=' || 1 like 1%23을 입력하면 "Hello {$result[id]}"를 출력한다. 거짓으로 ?pw=' || 1 like 2%23을 입력하면 아무것도 출력하지 않는다. 참과 거짓으로 구분할 수 있기 때문에 Blind SQL Injection 공격을 하면된다. 먼저 pw의 길이를 알아보면 ?pw=' || length(pw) like 8%23을 입력하면 "Hello admin"을 출력하는걸로 봐서 pw의 길이는 8인 것 같다. 이제 한 글자씩 찾으면된다. ?p..
-
<Lord of SQL Injection> vampireWargame/Lord of SQL Injection 2021. 11. 13. 00:49
vampire 싱글 쿼터(')를 필터링하고, 전달받은 'id' 값을 소문자로 변환한다. 그리고 전달받은 'id' 값에 'admin' 문자열이 있으면 전달받은 'id' 값에서 'admin'을 지운다. 그런데 'id'의 값이 'admin'이 되야 문제가 풀린다. 'admin'을 한 번 없애기 때문에, 'aadmindmin' or 'adadminmin' or 'admadminin' or 'admiadminn' 을 'id' 값에 전달하면 'admin'이 된다. 문제가 풀리게 된다. 이 문제를 처음 접했을 때, 'admin'을 16진수로도 해보고, 여러 방법을 시도했다. 하지만 한 개 남겨진 싱글 쿼터(')를 해결할 수 없었다. SQL Injection은 창의력? 같은 것도 필요한 것 같다.
-
<Lord of SQL Injection> orgeWargame/Lord of SQL Injection 2021. 11. 12. 01:04
orge 'prob', '.', '_', '()', 'and', 'or'을 필터링한다. 전달받은 'pw'의 값에 싱글 쿼터, 더블 쿼터, 백 슬래시가 있을 경우, 이 들 앞에 '\'를 추가한다. 그리고 'pw'의 값이 참이고 'pw'의 값과 전달받은 'pw'의 값이 같으면 문제가 풀린다. 우선 ?pw=' || 1=1%23을 입력하면 현재 'id' 값에 따라 "Hello guest"를 출력한다. "1=1" 대신 "1=2"로 거짓을 만들어 입력하면 아무것도 출력하지 않는 것을 확인할 수 있다. 이를 통해 Blind SQL Injection을 수행해야 한다는 것을 짐작할 수 있다. 먼저 'pw'의 길이를 알아보면 ?pw=' || length(pw) < 10%23를 입력하면 ?pw=' || length(pw) ..
-
<Lord of SQL Injection> wolfmanWargame/Lord of SQL Injection 2021. 11. 11. 23:51
wolfman 앞의 문제들과 같이 'prob', '_', '.', '()'를 필터링 한다. 또한 공백을 필터링한다. 따라서, ?pw=' or 1=1%23 을 입력하면 (%23은 #의 urlencoding 방식으로 주석처리를 위함이다) "공백 없음"이란 메시지가 출력된다. 공백없이 ?pw='or1=1%23 을 입력하면 아무 것도 출력하지 않는다. 이렇게 공백문자를 필터링 할 경우, %09, %0a, %0b, %0c, %0d, %a0, /**/ 를 사용해서 공백문자를 대체할 수 있다. 즉, ?pw='%09or%091=1%23 을 입력하면 현재 id의 값에 따라 "Hello guest"를 출력하는 것을 확인할 수 있다. 그럼 이제 id의 값을 'admin'으로 주면 문제가 풀리게 된다. ?pw='%09or%0..
-
<Webhacking.kr> old-06Wargame/Webhacking.kr 2021. 11. 11. 18:17
old-06 이미 풀어서 ID와 PW가 변경되었다. 원래는 ID : guest, PW : 123qwe 이다. 우선 view-source를 먼저 살펴본다. 먼저 나오는 PHP 문을 살펴보면 $val_id와 $val_pw를 먼저 base64로 인코딩을 20번 돌린다. 그리고 $val_id와 $val_pwd의 값에서 각각 숫자들을 코드에 나타난 특수문자로 교체한다. 이것을 쿠키 값으로 설정한다. 크롬의 확장 프로그램인 'EditThisCookie'를 통해 쿠키 값을 살펴보면 쿠키 값이 3개 존재한다. 위 페이지 소스코드에 따라 user에는 guest를 변환한 값이고, password에는 123qwe를 변환한 값이다. 이제 두 번째 PHP 문을 살펴보면 ID와 PW의 값이 각각 'admin'과 'nimba'이면..
-
<Lord of SQL Injection> orcWargame/Lord of SQL Injection 2021. 11. 11. 14:25
orc GET 방식으로 'pw' 값을 전달받는다. 'id' 값이 참이면 "Hello admin"을 출력한다. 전달받은 'pw'에 싱글 쿼터('), 더블 쿼터("), 백 슬래시(\)가 있으면 그 앞에 '\'를 추가해서 전달받은 'pw' 값으로 한다. 그리고 'pw' 값이 참이고, 'pw' 값이 전달받은 'pw' 값이 같다면 문제가 풀린다. 우선 pw=1을 해보면 아무것도 출력되지 않는다. or 문을 사용하여 'id' 값도 전달해야 하는 것 같다. ?pw=' or 1=1%23을 전달하면 "Hello admin"이 출력된다. 이를 통해 쿼리가 참이면 "Hello admin"이 출력되고, 거짓이면 아무것도 출력되지 않는 것을 짐작할 수 있다. 결과가 참과 거짓뿐이므로 Blind SQL Injection을 수행해..