-
[Lord of SQLInjection] #4 orc[+] Security [+]/Lord of SQLInjection 2020. 5. 3. 02:16
이제 4번 문제!!
이전까지와 다른 점이 있다면
$_GET[pw] = addslashes($_GET[pw]);
pw쿼리에 /를 붙여서 다시 pw 에 저장하는 코드가 보이고
if(($result['pw']) && ($result['pw'] == $_GET['pw']))
URL파라미터로 입력한 pw가 데이터베이스에서 조회된 pw와 정확히 일치해야 문제를 패스할 수 있다.
즉 Blind SQL Injection 문제다!
으... 4단계부터 Blind SQL Injection이라니...
Blind SQL Injection이란 임의의 코드로 원하는 값을 바로 얻어내는 것이 아닌. 특정한 쿼리를 입력해가며 서버의 참 거짓 반응을 통해 공격을 수행해야한다.
장님 처럼 더듬더듬 거리며 패스워드의 길이를 알아내고 문자열을 하나씩 넣어가며 정확한 패스워드값을 찾아내야한다.
하나씩 일일이 찾아야 하기에 수작업으로 하는 것은 너무 비효율적이다.
파이썬을 키자!
보통 대부분은 requests 라이브러리를 사용하지만, 필자는 selenium 라이브러리를 사용한다.
뭔가 자동적으로 착착착착! 하고 동작하는 것을 보면 정말이지.. 정말로 해커가 된 것같은 기분이다.
우선 selenium 라이브러리와 bs4 라이브러리를 설치한다.
(어떻게 설치하는지는 설명 안해도 괜찮겠지요....?)
그후 자신의 크롬 버전에 맞춰서 웹드라이버를 다운받은 후 웹드라이버가 있는 경로를 지정한다.
driver = webdriver.Chome('여기에 경로를 입력하세요!')
그 후 usr, password 변수에 각각 lord of sql injection의 아이디와 비밀번호를 입력하면 끝이다!
이제 실행하면 자동적으로 착착 진행되면서 사이트에 접속한다.
우선 비밀번호의 길이부터 알아낸다!
url 뒤에
?pw=1' or length(pw) = 1%23
?pw=1' or length(pw) = 2%23
?pw=1' or length(pw) = 3%23
...
?pw=1' or length(pw) = 50%23
까지 body에 Hello 라는 텍스트가 있으면 그게 비밀번호 길이다!
이후
"?pw=1' or id='admin' and ord(substr(pw,{},1))={}%23".format(j,i)
코드를 사용하여 비밀번호를 찾아낼 수 있다.
위 코드에 대해 간략하게 설명을 드리자면!
substr(pw,1,1)=0 pw의 첫번째값은 0 이라는 뜻입니다.
substr(pw,2,1)=9 pw의 두번째값은 9 라는 뜻입니다.
ord(substr(pw,1,1)=48 pw의 첫번째값의 아스키 번호는 48이라는 뜻입니다.
오크 컷!
'[+] Security [+] > Lord of SQLInjection' 카테고리의 다른 글
[Lord of SQLInjection] #6 darkelf (0) 2020.05.03 [Lord of SQLInjection] #5 wolfman (0) 2020.05.03 [Lord of SQLInjection] #3 goblin (0) 2020.05.02 [Lord of SQLInjection] #2 cobolt (0) 2020.05.02 [Lord of SQLInjection] #1 gremlin (0) 2020.05.02