목록lord of sql injection (5)
생선이의 잡다한 블로그
이번 문제에서는 공백 한 칸(스패이스바 한 번이 금지되어 있습니다 그러면 이 문제를 풀기 위해 공백 없이 풀거나 스페이스바가 아닌 다른 공백을 넣어서 풀어주면 됩니다 우선 다른 공백을 이용하는 방법입니다 저는 탭을 공백으로 이용하려고 합니다 탭은 아스키코드로 09번 이므로 아래와 같이 적어줍니다 ?pw='%09or%09id='admin 다음은 공백 없이 푸는 방법입니다 or를 ||으로 적어주면 공백 없이 가능해집니다 ?pw='||id='admin
admin의 pw를 알아내야 합니다 substr(값, 시작할 위치, 범위) 이 substr을 이용하면 substr(pw, 1, 1) 이렇게 하면 pw에서 1번째 자리부터 1개 substr(pw, 2, 1) 이렇게 하면 pw에서 2번째 자리부터 1개 이렇게 한 자리씩 맞는지 확인을 해줄겁니다 그리고 여기에 ascii(값)을 이용해 줄겁니다 ascii(subsrt(pw,1,1)) = 10 위와 같이 적어주면 pw의 첫 번째 값의 아스키코드가 10인지 비교하게 됩니다 이제 아래와 같이 구문을 적어서 비밀번호를 잘 맞춰봅니다 id에 admin을 적어준 이유는 admin의 pw 값을 비교해야 하기 때문입니다 ?pw=' or id='admin' and ascii(substr(pw,1,1)) = 47 %23 ?pw=..
이 문제에는 앞의 id 가 guest로 고정이 되어있고 no 만 입력을 받고 있네요 그럼 or 을 적절히 활용하여 앞 부분을 거짓으로 만들고 뒷 부분을 id에 admin을 넣어 참이 되도록 하면 될 것 같습니다 그래서 아래와 같이 적어줬는데 문자열이 막혀있군요 ?no=123123 or id='admin' 여기서 no에는 guest의 no 값과 같아지지 않게 하기위해 아무런 값이나 넣었습니다 이럴때 문자열을 16진수로 나타내주면 이 16진수 값을 문자열로 읽어 간다고 합니다 아스키코드로 a 0x61 d 0x64 m 0x6D i 0x69 n 0x6E 이므로 모두 조합하면 admin은 16진수로 0x61646D696E 따라서 ?no=123123 or id=0x61646D696E 위와 같이 적어주면 됩니다!
위의 식을 참으로 만들어야 합니다 우선 기본적인 'or 1=1 을 먼저 대입해 봅니다 무언가가 되긴 됐는데 admin이 아니라고 합니다 그래서 아래와 같이 id에 admin을 넣고 뒤를 주석처리 하니 되네요! ?id=admin' %23