본문 바로가기

Wargame/Lord of SQLInjection

(18)
Lord of SQLInjection 20번 dragon 코드를 보면 id가 admin이기만 하면 풀리는 게임인데 query를 보면 id가 guest로 고정되어있고 뒤에 주석처리가 되어있다. 그러나 #은 한 줄만 주석으로 하기 때문에 줄을 바꿔주고 query를 작성해주면 된다. 줄 바꿈 하기 위해서 %0a를 써주고 pw를 다시 지정해주고 or을 이용해서 id를 admin으로 지정해준다. 답 : pw=%0a and pw='' or id='admin
Lord of SQLInjection 19번 xavis query에 id='admin'으로 고정되어 있고 코드를 보면 pw를 찾으면 되는 문제인 것 같다. length를 이용하여 pw의 길이를 먼저 알아봤다. pw의 길이는 12이다. 라고 생각하고 전에 있던 코드를 돌려봤는데 이상한 이러한 결과가 나왔다. 혹시 싶어서 쳐봤지만 역시나 아니었고 코드가 문제인가 싶어서 여기저기 바꿔봤지만 절대 나오지 않았다. 그래서 찾아봤더니 역시나 생각 못한 방식이 있었다. 코드만 보고 쉬울 거라 생각했지만 pw는 유니코드로 이루어졌고 한글자당 4byte였다. 그러나 그것도 이것저것 코드를 바꿔봤지만 되지 않아서 아직 모르는 게 많기 때문이라고 생각하고 다른 분의 코드를 참고해보기로 했다. 지금 소개할 코드는 https://tutoreducto.tistory.com/60 이 ..
Lord of SQLInjection 18번 nightmare id!='admin'은 고정적인 것 같고 pw에 값을 입력하는 것 같다. pw에 참인 값과 뒤 query를 무시할 수 있는 주석을 같이 넣어주면 될 것 같다. 최대 6글자까지 사용할 수 있다. 코드를 보면 #를 사용하지 못한다. 이 대신 사용할 수 있는 것을 찾아보았다. 주석 처리가 가능한 것들 -- # ;%00 코드를 보면 1과 2는 사용할 수 없기 때문에 3을 사용했다. 현재 ;%00을 넣는다고 치면 query는 pw=(';%00') and id!='admin'가 된다. 그럼 앞에 있는('를 받아줄 게 없기 때문에 똑같이 ')도 추가해준다. 지금 쿼리는 pw=('')만 존재하는 것과 다름없고 현재 쓴 것은 ');%00이고 %00는 1글자로 처리되기 때문에 총 4글자를 사용한 셈이다. 남은 글자는 총 ..
Lord of SQLInjection 17번 zombie_assassin strrev와 addslashes를 몰라서 일단 먼저 찾아봤다. strrev : 문자열을 거꾸로 뒤집는 함수 addslashes : ' , ", /, NULL byte를 문자열과 구분하기 위해서 사용된다. (문자열 앞에 \를 붙여서 구분) 이런 특성이 있기 때문에 만약 내가 id에 "를 넣게 되면 일단 addslashes에 의해 \"가 되고 strrev에 의해 "\이러한 형태로 바뀌게 된다. 그걸 이용해서 16번과 동일하게 id의 뒤 싱글 쿼터와 pw='까지 무시해주고 or을 이용해 id에 값을 넣을 것이다. 이때 addslashes 특성을 사용하는 것 중에 '와 \는 사용해봤자 \가 의미가 없어지기 때문에 패스하고 나머지 2개 중 하나를 사용해준다. 또 pw도 똑같이 적용 되기 때문에 참인 값을 작성할..
Lord of SQLInjection 16번 succubus 코드를 보면 id와 pw를 입력해서 id에 값을 넣기만 하면 풀리는 문제인 것 같다. '(싱글 쿼터)를 쓰지 못하기 때문에 id에 값을 모두 넣어서 무효화시키는 건 불가능하고 또 id 값만 넣으면 되니 pw는 사실 딱히 필요가 없는 친구다. 그러나 id=''로 막혀있고 싱글 쿼터는 쓰지 못하니 pw의 '를 이용하여 id에 값을 넣을 것이다. 일단 id의 뒤 ' 하나를 무시해줘야 하는데 방법을 모르기 때문에 검색을 해보았다. 검색을 해보니 ' 앞에 \를 붙여 싱글쿼터가 아닌 그냥 문자로 인식하게끔 만든다. 이때 id='\' and pw = '' 이런 형태가 되는데 지금 이 상태에서 pw에 or과 무조건 참인 값을 이용해 id값을 채워주고 뒤에 있는 싱글 쿼터 하나는 %23을 이용하여 무시해준다. 답 : i..
Lord of SQLInjection 15번 assassin 코드를 보면 '를 사용할 수 없기 때문에 id를 직접적으로 변경하는 건 어려울 거 같다. 그러므로 pw를 얻어내서 문제를 풀어야할 것 같다. 일단 pw=이 아닌 pw like인 것을 활용해서 문제를 풀 것이다. like는 %와 _를 이용하여 쉽게 풀어낼 수 있는데 일단 pw의 길이를 먼저 얻어낼 것이다.4 _를 7개 이하 쓰면 아무것도 뜨지 않고 8개보다 더 많이 쓰더라도 아무것도 뜨지 않는다. 그러므로 guest와 admin 둘 다 8글자인 것을 알 수 있다. 처음에 Hello admin으로만 코드를 작성했을 때 코드가 진행 되지 않았다. 그런 점에서 알 수 있는 것은 guest의 pw와 admin의 pw가 일부분 혹은 모두 겹친다는 것이다. 그렇기 때문에 다시 코드를 작성했다. 이렇게 코드를 해서 실..
Lord of SQLInjection 14번 giant 지금까지 문제들과 모양이 좀 다른 것 같다. 일단 shit이라는 것에 입력할 수 있는 것 같고 띄어쓰기, \n, \r, \t를 사용하지 못한다. 일단 shit이 어디에 들어가는지 알기 위해서 shit=1을 쳐보았더니 fromprob 사이에 입력이 되는 것으로 보인다. 아마 저기에 띄어쓰기를 하면 딱 좋을 거 같은데 막혀있으니 바꿔줄 수 있는 문자를 검색해보았다. 공백을 바꿔줄 수 있는 문자는 되게 많은 것 같은데 그중 검색해서 알아본 것은 %09 : tab %0a : line feed %0d : carriage return %0b : vertical tab %0c : form feed 이렇게 5가지가 나왔는데 그 중 1, 2, 3은 코드상 막혀있으니 나는 4를 이용하여 작성해보았다. 넣어주니 이렇게 풀렸..
Lord of SQLInjection 13번 bugbear query를 보면 id는 guest로 고정되어 있다. 코드에서 알 수 있는 것은 substr, ascii, =, or, and, , like, 0x 다 쓰지 못한다. 그리고 id를 admin으로 바꾸고 pw를 맞추면 되는 것 같다. 일단 like와 =를 쓰지 못하기 때문에 not과 를 이용해서 거짓의 거짓인 참을 만들어 pw의 길이를 알아보았다. 띄어쓰기를 하지 못하기 때문에 웬만한 건 모두 괄호로 분리했다. pw의 길이는 8이다. 그리고 이제 코드를 작성해보겠다. 이렇게 필터링된 것들을 모두 변환시켜서 넣어줬다. 그러면 이렇게 pw가 나오게 되고 이걸 넣어주면 이렇게 풀리게 된다. 답 : pw=52dc3991