[Lord of SQLInjection] Iron Golem Write UP
2021. 8. 7. 20:53
워게임/Lord of SQLInjection
공격 백터는 pw 파라미터 하나 뿐이다. pw 파라미터의 검사는 prob, _, ., (), sleep, benchmark가 필터링 되며, addslashes 함수에 들어가기 때문에 ’, “, \, Null 바이트가 \', \", \\, \Null 바이트로 치환이 된다. Sleep 함수와 Benchmark 함수는 Time-Based Blind Injection에 사용되는 함수이다. Blind Injection은 응답의 참과 거짓을 구분할 수 없을 때 사용되는 기법인데, Time-Based는 지체되는 시간에 따라 참과 거짓을 구별하는 것이다. 현재 문제에선 내가 입력한 쿼리에 대한 결과를 얻을 수 없기 때문에 Blind Injection을 시도해야하는데, Sleep 함수와 Benchmark 함수가 필터링 ..
[Lord of SQLInjection] Dragon Write UP
2021. 8. 7. 20:44
워게임/Lord of SQLInjection
공격 백터는 pw 파라미터이며, pw 파라미터에 대한 검증은 prob, _, ., ()을 필터링하고 있다. 하지만 이 문제의 가장 큰 문제점은 select id from prob_dragon where id='guest'# and pw='{$_GET[pw]}'로 입력된 pw가 id 뒤로 넣어지게 되는데, id 뒤부터는 #로부터 주석처리가 된다는 것이다. 이 문제를 클리어하기 위해선 #를 무력화 시켜야하는 문제로 보인다. 위와 같이 URL 인코딩의 줄바꿈인 %0A 로 입력하여, 주석을 우회하려고 했지만 실패하였다. 혹시 내가 사용한 방법이 틀렸는지 확인하기 위해서 인터넷에 sqli %0a로 검색해보니, 내가 틀린 방법으로 하고 있었다. 원리는 밑과 같다. SELECT id FROM prob_dragon W..
[Lord of SQLInjection] Nightmare Write UP
2021. 8. 7. 20:00
워게임/Lord of SQLInjection
이번 문제는 where절의 pw가 ('')로 감싸져 있다. 또한 id는 admin이 아니라고 박혀있다. solve를 얻기 위해선 쿼리문의 값이 있어야 solve를 얻을 수 있다. 문제를 풀기 앞서 pw에 대한 검사가 있었다. prob, _, ., (), #, -를 필터링 길이가 6 초과를 하면 안됨. 일단 #, --를 사용해서 and id != 'admin'를 주석 처리하는 것은 포기해야할 것 같다. 인터넷에 주석 방법을 찾아보니 #, --, /**/, ;%00 4가지 방법이 있었다. 이 중 #, --은 필터링 때문에 불가능하며, /**/은 *사이에 쿼리문이 들어가야 함으로 현 문제에서 사용이 불적합하다. 즉, ;%00을 이용하여 and id != 'admin'를 주석 처리해야한다. select id f..
[Lord of SQLInjection] Zombie Assassin Write UP
2021. 8. 7. 19:56
워게임/Lord of SQLInjection
이번 문제는 Succubus 문제에서 발전된 문제이다. addslashes 함수를 사용하여 ', ", \, %00(Null 바이트)를 \', \", \\, \%00로 치환한다. 또한 strrev 함수를 이용하여 '\, "\, \\, %00\로 자리를 변경한다. 나는 ", %00를 이용하여 Succubus 문제처럼 풀이하려고 한다. select id from prob_zombie_assassin where id='"\' and pw='||1=1#'로 입력을 한다면, where 절의 id는 "' and pw='로 인식하게 된다. 원하는 대로 이루어졌지만, 간과한게 있었다. pw도 strrev 함수을 이용한다는 것이다. 나는 pw도 strrev함수로 자리가 바뀐다는 것을 깜박하였고, 반대로 #1=1||로 넣어..
[Lord of SQLInjection] Succubus Write UP
2021. 7. 24. 00:54
워게임/Lord of SQLInjection
이번 문제는 id와 pw를 입력받는 문제인데 where절에 id='{$_GET[id]}' and pw='{$_GET[pw]}'으로 들어간다. 문제는 두 파라미터가 '을 필터링을 하고 있는 것이 문제이다. 인터넷에 검색해본 결과 \를 사용하면 된다는 것을 알 수 있었다.만약 id 값이 ’ 것을 찾고 싶어서 쿼리문을 SELECT id FROM test WHERE id = '''로 작성하면 에러가 난다. 그 이유는 '를 문자로 인식하지 않기 때문이다. 이러한 문제 때문에 특수문자 예외처리를 해줘야하는데, 이것이 \이다. SELECT id FROM test WHERE id = '\''로 처리하게 되면 id가 '인 것을 찾는 쿼리문으로 된다. 이것을 이용하면, SELECT id FROM prob_succubus ..
[Lord of SQLInjection] Assassin Write UP
2021. 7. 24. 00:52
워게임/Lord of SQLInjection
해당 문제의 입력 파라미터는 pw 뿐이며, '를 필터링하고 있다. 또한 쿼리문을 보니, '' 안에 입력값이 들어가서 문제 해결에 어려움이 있을 것 같다. 결국 몇시간을 시도한 끝에 다른 사람의 문제풀이를 살펴보니 쿼리문에서 =를 대신 LIKE를 사용한 이유가 있었다. LIKE에선 약간의 정규식을 사용할 수 있다. 특정 문자% : 특정 문자로 시작 %특정 문자 : 특정 문자로 끝남 %특정 문자% : 특정 문자을 포함 위를 이용하여 pw를 찾으면 된다. import requests, string, itertools url = 'https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php' headers = {'Cookie': 'PHPSE..
[Lord of SQLInjection] Giant Write UP
2021. 7. 24. 00:50
워게임/Lord of SQLInjection
그동안 익숙했던 문제 스타일이 아닌 새로운 문제 스타일이 나왔다. 사이트에서 입력 받는 파라미터는 shit 하나이며, 이 파라미터는 from prob_giant의 사이에 들어가게 된다. shit의 필터링은 공백, \n, \r, \t이며, 입력 길이가 1보다 커서는 안된다. 나는 필터링 목록 대신에 사용할 만한 것을 생각하다가, addslashes 함수의 우회 방법이 생각이 났다. addslashes 함수의 우회 방법은 특정 인코딩 기법을 적용한 함수에 %01와 같이 의미가 없는 URL 인코딩 값을 넣어줌으로써 우회를 하는 방법이다. 이처럼 의미가 없는 URL 인코딩 값을 보내주면 될 것 같아서 %01를 서버에 보내봤다. 공백처리는 되었지만, 결과값을 반환하지 않고 있다. 인터넷에 검색하니, %01 ~ %..
[Lord of SQLInjection] Bugbear Write UP
2021. 7. 20. 22:01
워게임/Lord of SQLInjection
이번 문제는 굉장히 어려워 보였다. 그 이유는 이전 문제인 Darkknight 문제와 같은 문제이지만, 풀이에 사용하는 =, LIKE, ascii, 0x를 필터링을 하고 있기 때문이다. 문제 풀이를 위해 공격 백터와 공격 백터에 대한 검사를 정리하겠다. 공격 백터는 pw와 no가 있다. pw의 필터링은 '이며, addslashes 함수로 특정 특수 문자를 사용 못하게 치환하고 있다. no의 필터링은 prob, _, ., (), ‘, SUBSTR, ASCII, =, or, and, 공백, LIKE, 0x이 있다. 일단 생각한 방법은 '를 우회할 수 없으니, no를 이용하여 공격를 시도해야할 것 같다. 인터넷에 =, LIKE를 대신하여 사용할 만한 것을 찾을 수 있었다. 바로 IN 연산자라는 것이다. 사용하..
[Lord of SQLInjection] Darkknight Write UP
2021. 7. 19. 19:04
워게임/Lord of SQLInjection
이번에도 전 문제와 유사한 문제가 왔다. 하지만 필터링되는 부분이 다른 것을 확인할 수 있다. 이 문제에선 파라미터로 pw와 no를 서버로 전달한다. 서버에선 pw와 no에 대한 검사를 후 쿼리문에 삽입한다. 이때 검사는 pw의 경우 prob, _, ., (), '를 필터링하며, addslashes 함수를 이용하여 특정 특수 문자를 사용 못하게 치환한다. no의 경우 ', SUBSTR, ASCII, =를 필터링한다. 공격 백터는 pw와 no가 있는데 pw의 경우 ''으로 감싸져 있어서 공격을 시도했을 때 '를 사용해야지만 가능할 거 같다. 하지만 pw의 필터링 목록 중 '이 있어서 pw의 경우 공격 백터로 사용을 못할 것으로 판단되었다. 남은 건 no 파라미터인데 no의 경우 감싸진 것이 없어서 HEX와..