본문 바로가기
반응형

WarGames/SQL Injection20

Lord of SQL Injection : Evil_wizard[24] [Level 24. Evil_wizard] Sol → ?email=aasup3r_secure_email@emai1.com 23단계와 마찬가지로, order의 특성을 이용해서 email을 구해야 한다. order=1을 먼저 넣어보았다. admin의 score가 rubiya의 score보다 작아서, 이메일을 제외한 어떤 column으로 정렬해도 admin이 먼저 출력된다. 아마 그래서 hell_fire와 똑같다고? 진짜?라는 뉘앙스의 도발(?)을 한 것이 아닐까.. 근데 사실 나는 저번 단계에서 score를 안 쓰고 풀었기 때문에 똑같은 코드로 답을 구할 수 있었다. same with hell_fire? really? 에 당당하게 yes!라고 답한 후 코드를 돌리면 된다. 이메일의 길이로 정렬해보니, 이번에.. 2021. 12. 30.
Lord of SQL Injection : Hell_fire[23] [Level 23. Hell_fire] Sol → ?email=admin_secure_email@emai1.com 정렬을 이용해서 admin의 이메일 주소를 맞춰야 하는 문제이다. 자동화 코드를 짜는데 꽤 시간이 걸렸다. 우선? order=1로 결과를 확인해보았다. if($result['id'] == "admin") $result['email'] = "**************"; 부분으로 인해 id가 admin인 경우 email은 *****로 표시되고, 첫 번째 column으로 정렬을 하였기 때문에 admin이 알파벳 순서상 먼저 뜬 것을 확인할 수 있다. order by는 정렬 기능인데, 위의 사진에서 볼 수 있듯이 views처럼 직접 column을 명시할 수도 있지만, length(content)처.. 2021. 12. 28.
Lord of SQL Injection : Dark_eyes[22] [Level 22. Dark_eyes] Sol → ?pw=5a2f5d3c 이번 문제는 21단계 문제랑 똑같다. 다만 에러를 출력하되 에러의 이유는 출력하지 않는다. 저번 문제를 풀 때 이번 문제에서 추가로 필터링되는 case 같은 문자를 사용하지 않았기 때문에, 쿼리문은 그대로 사용하되 참/거짓 판별법만 살짝 바꿨다. ?pw=' or id = 'admin' and (select 0 union select length(pw) = 1)%23 2021. 12. 25.
Lord of SQL Injection : Iron_golem[21] [Level 21. Iron_golem] Sol → ?pw=06b5a6c16e8830475f983cc3a825ee9a pw를 알아야 통과할 수 있기 때문에 Blind SQLi를 사용해서 비밀번호를 한 글자씩 알아내야 하는 점은 기존의 문제와 같다. 하지만 기존에는 if($result['id']) echo "Hello {$result['id']}" 코드가 포함되어 있었기 때문에 쿼리문의 참/거짓을 기준으로 자동화 코드를 돌릴 수 있었는데, 이번 소스코드에는 그 부분이 빠져있다. 대신에 다른 점은, if(mysqli_error($db)) exit(mysqli_error($db)); 부분이 포함되어 있다. Error를 띄우게 되어있다? 그렇다면 Error based SQLi를 사용해야 함을 추론할 수 있다. .. 2021. 12. 24.
Lord of SQL Injection : Dragon[20] [Level 20. Dragon] Sol → ?pw='%0Aand pw='' or id='admin id = 'guest' 이후에 주석이 달려있는데, id가 admin이어야 통과된다. 따라서 주석을 무효화시킬 수 있는 방법에 대해 고민해보아야 한다. [모의해킹_이론] - SQL Injection : 로그인 Case 별 인증 우회 위의 포스팅에서 로그인 로직을 케이스 별로 5가지를 살펴보았는데, 그중에 마지막 케이스가 바로 개행(Enter)을 넣어 주석을 방어하는 방식이었다. SQL Injection에서는 주석을 넣어 SQL 구문 일부를 무력화시키는 방식이 자주 사용되는데, Enter로 인해 구문이 다음 줄로 넘어간다면 이 주석은 힘을 잃게 된다. 따라서 %0A(Enter)를 통해 구문을 두 줄로 나누고,.. 2021. 12. 22.
Lord of SQL Injection : Xavis[19] [Level 19. Xavis] Sol → ?pw=우왕굳 우선 BlindSQL을 사용하기 위해 자동화 코드를 돌렸고, 비밀번호의 길이는 12가 나왔다. 그런데, 비밀번호를 하나씩 구하는 코드가 잘 돌아가지 않았다. 그래서 직접 pw =' or id = 'admin' and ascii(substring(pw, 1, 1)) > 0 # 을 넣어보았는데, Hello admin이 뜨지 않았다. 잉? 그래서 < 0을 넣었는데 이것도 Hello admin이 뜨지 않았다. 혹시나 해서 = 0을 넣으니 Hello admin이 떴다. 기존에는 아스키 값을 1에서 127 사이로 제한해두었었는데, 제한을 벗어나는 값이 비밀번호에 사용된 것 같다. 그래서 최솟값을 0으로 변경하고 다시 자동화 코드를 돌려보니, 1부터 12까지 .. 2021. 12. 19.