[ Natas 17 -> Natas18 PHP Injection ]

2017. 9. 28. 21:37WebHacking/[OverTheWire]Natas




1> 첫 페이지 화면



2> 페이지 소스코드


Natas16번 문제와 같은 PHP Injection 문제입니다. 16번문제에서는 쿼리문 조건의 참 거짓에 따라서 화면 출력이 달랐습니다

하지만 이번 문제에서는 화면에 출력되는 것이 아무것도 없습니다

이 때 사용할 수 있는 방법은 sleep() 함수와 연산자 and 의 특징을 이용하는 것입니다


[ sleep() 함수 ]

sleep(5) : 5초동안 로딩한 후 동작을 수행한다


[ and 연산자 ]

쿼리문 WHERE 조건식 1 and 조건식2

=> 조건식 1이 참인 경우    : 조건식2의 참, 거짓을 확인한다


=> 조건식 1이 거짓인 경우    : 조건식2의 참,거짓을 확인하지 않고 쿼리문을 종료한다



3> and & sleep 활용법


* 입력값 : username=natas16" and length(password)=32 and sleep(5) #

* 쿼리문

SELECT * FROM users WHERE username="natas16" and length(password)=32 and sleep(5) #"

유저명이 natas16이고 비밀번호의 길이가 32가 맞는지 확인한다. 길이가 32가 맞다면 sleep(5) 함수가 실행된다


* 입력값 : username=natas16" and ascii(substr(password,1,1))>0 and sleep(5) #

* 쿼리문

SELECT * FROM users WHERE username="natas16" and ascii(substr(password,1,1))>0 and sleep(5) #"

유저명이 natas16이고 비밀번호의 첫 글자의 아스키 10진수 값을 비교한 후 sleep(5) 함수가 실행된다



4> 파이썬 자동화 프로그램 작성

시간모듈( time ) 과 time모듈을 사용한다

import time => time.time() 메서드 : 1970년 1월 1일 이후부터 축적된 초를 float단위로 반환


[ 파이썬 소스코드 ]


Natas서버로부터 응답을 받을 때 sleep()함수가 실행되어 5초동안 대기상태가 된다

따라서 그 5초를 검사할 수 있도록 코드를 만든 뒤 sleep()함수를 실행시킨 문자열을 화면에 출력하여 비밀번호를 확인한다



[ 파이썬 실행 결과 ]


[ 와이어샤크 캡쳐화면 ]




Natas18 : xvKIqDjy4OPv7wCRgDlmj0pFsCsDjhdP