Wargame (21) 썸네일형 리스트형 Lord of SQLInjection 7번 orge 코드를 보니 4번 문제의 내용에서 or만 못 쓰는 것 같아서 이번에는 노가다 대신 코드를 작성해보려고 한다. 그전에 쉽게 얻을 수 있는 pw의 길이 값을 먼저 구해봤다. pw의 길이는 8이고 이제 코드를 작성해보겠다. 코드는 내가 들었던 강의를 참고하여 작성했다. 코드를 작성하고 실행해보니 pw를 구할 수 있었다. 답 : pw=7b751aec Lord of SQLInjection 6번 darkelf 전의 5번 문제와 똑같이 id는 guest로 고정되어 있고 admin으로 바꾸면 되는 문제 같다. 다른 점은 or과 and를 쓰지 못한다는 것인데 5번 문제의 공백을 해결하기 위해 썼던 || 연산자를 포함해서 풀면 될 것 같다. 답은 그냥 5번 문제와 똑같았다. 답 : pw='||id='admin'%23 Lord of SQLInjection 5번 wolfman query와 코드를 보니 id는 guest로 고정되어 있고 이걸 admin으로 바꾸면 풀리는 문제인 것 같다. if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 이 코드를 보지 못하고 pw=0' or id='admin'%23 이렇게 했더니 바로 No whitespace가 뜬다. 공백을 빼야하는 코드이다. 그러므로 띄어쓰기가 필요 없는 or을 대체해줄 수 있는 || 연산자를 포함시켜 문제를 해결했다. 답 : pw=%27||id=%27admin%27%23 Lord of SQLInjection 4번 orc 코드를 보면 pw에 pw값을 직접 넣어야 한다는 것을 알 수 있다. 그렇다면 Blind SQL Injection을 사용해야 하는데 잘 모르기 때문에 Blind SQL Injection에 관해 검색을 해보았다. Blind SQL Injection은 참 거짓으로만 확인을 해야 하기 때문에 = 이런 연산자들을 이용해 진행한다. 이미 pw=''라고 되어 있기 때문에 %23을 이용하여 ' 하나를 무시해준다. 이렇게 구문을 써보면 pw가 10보다 작은 글자 수라는 걸 알 수 있다. 이런 식으로 대입을 해보았을 때 pw의 길이는 8인 것을 얻어낼 수 있다. 그리고 이제 8글자 길이의 pw의 값을 하나하나 대입해서 알아봐야 하는데 이때 ascii()와 substr()이라는 함수를 사용하게 된다. ascii()라.. Lord of SQLInjection 3번 goblin goblin 문제의 형태는 이렇다. 현재 query문을 보면 id는 guest로 고정되어있다. no=1이라는 구문을 쳐보니 Hello guest가 뜬다. guest의 no은 1이었던 것 같다. 이것을 보면 admin의 no 또한 무작정 대입해서 되지 않을까 싶다. no=0으로 일단 앞의 query를 무효화시켜주고 or을 이용하여 no에 2를 대입해보았다. no=2는 admin의 no이 맞았기 때문에 문제는 해결되었다. 답 : no=0 or no=2 무작정 대입하는 것은 도박이기에 다른 방법이 있을 것이라고 생각하고 검색을 해보았다. 두 번째 방법은 첫 번째 방법처럼 no=0으로 앞의 query를 무시하고 or을 이용해 id에 admin을 넣어주는 것이다. 그러나 코드를 보면 if(preg_match('/.. 이전 1 2 3 다음