0x.Wargame/lord of SQL injection
-
0x19.los Dragon0x.Wargame/lord of SQL injection 2018. 1. 24. 15:09
0x19.los Dragon 귀여운 용가리 그림이 있는 문제였다. 문제를 보니 쿼리문 자체에 #로 뒷 부분이 주석 처리가 되어있다. pw 를 입력해서 푸는 문제인데 그 부분이 주석처리 되어 있는 것이다. 인터넷에서 가장 먼저 #가 어떤 주석인지 확인해보았더니 한 줄을 주석처리 해주는 것이었다.그렇다면 줄을 띄워서 쿼리문을 작성한다면 성공할 수 있을 것 같아서 %0a를 사용해보았다. pw'1%0a로 and pw=1 전에 줄 바꿈이 실행되고 뒷 쿼리문이 아래와 같이 정상적으로 실행되었다.
-
0x18.los Xavis0x.Wargame/lord of SQL injection 2018. 1. 22. 14:42
0x18.los Xavis 오히려 쿼리문이 간단해진 문제였다. 거의 필터링이 없다시피 하기 때문에 아래와 같은 구문이 다 성공을 한다. 그런데 패스워드 길이를 확인해보니 무려 40바이트였다. 그래서 이전 문제와 같이 스크립트를 돌려봤는데,, 0000000000000000000000000000000 40개가 떴다.이건 분명 무슨 문제가 있다는 것이다. 그래서 생각한 것이 이 값이 ascii일 경우였다. ord를 사용하여 아스키의 값을 숫자로 변경한 뒤에 비교하는 스크립트를 돌려보았더니, 아래와 같은 결과를 얻을 수 있었다. 파이썬으로 hex로 변경한 뒤, 쿼리문에 때려박아보았지만 실패.. 구글 신의 힘을 빌려 ASCII로 변경을 하고, 다시 넣어보았더니 이제야 성공!~
-
0x17.los Nightmare0x.Wargame/lord of SQL injection 2018. 1. 19. 17:01
0x17.los Nightmare 유형이 바꼇다. 그리고 preg_match에는 주석처리를 못하도록 특수문자가 등록 되어있다. 문제를 보니 id!='admin'인데 참이면 성공이다. 즉 pw부분에서 어떻게 잘 넘겨야 되는데 6바이트 만큼밖에 사용하지 못한다.pw('')의 경우 오답이기 때문에 0을 리턴할 것이고, pw('')=0을 만들면 참이 될 것이다. 하지만 뒤의 괄호를 주석처리해줘야 할 것같은데 #와 /과 preg_match에 의해 필터링 된다. 그래서 %00을 사용하여 다음과 같이 쿼리를 작성하였다. pw=%27)=0;%00 그랬더니 아래와 같이 성공 문자를 확인할 수 있었다.
-
0x16.los Succubus0x.Wargame/lord of SQL injection 2018. 1. 15. 17:19
0x16.los Succubus 조금 어려운 문제였다. 이번 문제는 preg_match를 우회하는 방법을 알아야 풀 수 있었다. preg_match의 경우 패턴에 들어간 문자를 \ 를 사용하여 우회를 하면 되는데 잘 되지 않았다. 왜 안되는지 봤더니 싱글쿼터를 \ 로 우회를 하더라도 and로 적어버리면 문자로 인식되기 때문에 &를 써야만 했다. 그 부분만 유의하면 쉽게 풀 수 있는 문제였다. id=admin\&pw=%20or%201=1%23 위와 같이 쿼리문을 작성하면 싱글쿼터가 문자열로 인식이 되서 pw를 받기전까지를 문자열로 인식을 한다. 그래서 1-1로 우회를 하고 주석처리를 하면 풀 수 있다.
-
0x15.los Zombie_Assassin0x.Wargame/lord of SQL injection 2018. 1. 15. 16:55
0x15.los Zombie_Assassin 이번에는 또 새로운 함수가 등장한다. ereg() 함수는 다음과 같은 형태를 띈다. ereg("찾는값", "문자열", array[matches]) 이 함수는 문자열중에 찾는 값이 있으면 True를, 없으면 False를 반환한다. 만약 3번째 인자가 지정되어 있다면 찾은 문자열을 matches에 저장한다. 문제를 보니 id와 pw 입력 시 ' 여부를 확인한다. 이 말은 싱글쿼터에 대한 검증부분을 우회하라는 말인 것 같다. 또한 id와 pw에 대한 정보가 하나도 주어지지 않기 때문에 적절한 주석처리로 풀 수 있을 것 같았다. ereg같은 경우에는 %00으로 우회가 가능하다. 그래서 싱글쿼터 앞에 %00(Null)을 입력하여 우회를 하였고 뒷 부분을 주석처리 시켰다..
-
0x14.los Assassin0x.Wargame/lord of SQL injection 2018. 1. 12. 18:44
0x14.los Assassin 이번에도 새로운 유형의 문제였다. like로 푸는 문제인데 처음에는 싱글쿼터를 우회하는 문제인가 싶어서 헤매다가 %를 활용하여 DB에서 패스워드를 파싱하는 문제라는 사실을 깨달았다. 테이블 검색은 다음의 방법을 사용하였다. where and : 조건 모두 만족할 경우where or : 하나라도 만족할 경우where like : 단어로 검색- 문자% : 문자로 시작하는 단어- %문자 : 문자로 끝나는 단어- %문자% : 문자가 중간에 있는 단어order by 필드명 : 정렬order by 필드명 DESC : 역순 정렬 간을 보기위해 %%를 입력해보았더니 Hello guest가 뜬다. 위의 방식으로 문제를 푸는 것이 맞는 것이라는 뜻이다.8%를 넣으니 문구가 뜬다. 아래와 같..
-
0x12.los Bugbear0x.Wargame/lord of SQL injection 2018. 1. 10. 17:59
0x12.los Bugbear 너무 바빠서 오랜만에 또 이렇게 풀이를 쓰게 된다. ㅠㅠ. 이번 문제에서는 공백과 like를 사용하지 못하게 한다. 공백은 /**/ 로 우회하고, like는 instr 또는 in으로 우회가 가능하다. 2>1을 넣어서 간을 봐준 다음에 admin을 instr를 사용해서 id의 값으로 살포시 넣어주었다. length를 in 과 함께 사용해서 pw의 길이가 8인것을 확인하였고 right(left())와 in을 사용하여 하나 씩 값을 찾는 방법을 사용하였다. 패스워드를 입력하면 끝!