▣ 구현(MySQL, Oracle 공통)

  1) OptionParser

        : 파이썬 인터프리트 시 실행인자로 옵션 값을 입력받도록 구현

        : 입력받은 옵션 값을 라이브러리 함수의 인자타입에 맞게 변환


  2) Code

import optparse;
import ast;

desc = "Blind SQL Injection Tool"  # 해당 프로그램정보 기술

# optparse내 OptionParser메서드 호출 > parser변수 내 저장
parser = optparse.OptionParser(description=desc)

# parser객체의 add_option()메서드를 통해 상세속성 지정
parser.add_option("-u", "--url", dest="arg_url", default="", type="string", help="\"http://www.stgsecurity.co.kr/board/list.do\"")
parser.add_option("-x", "--fixedParam", dest="arg_fixedParam", default="", type="string", help="ex)\"name1=value1&name2=value2...\"")
parser.add_option("-p", "--payParam", dest="arg_payParam", default="", type="string", help="ex) \"name\"")
parser.add_option("-H", "--header", dest="arg_header", default="", type="string", help="ex)'host':'10.1.1.3:8080', 'cookie':'JSESSION=usersesson'...")
parser.add_option("-m", "--method", dest="arg_method", default="GET", type="string", help="ex) GET | POST")
parser.add_option("-o", "--frontStr", dest="arg_frontStr", default="", type="string", help="ex) \"id'\"")
parser.add_option("-f", "--flagString", dest="arg_flagStr", default="", type="string", help="ex) \"Success\"")
parser.add_option("-s", "--sql", dest="arg_sql", default="", type="string", help="ex) \"SELECT MEMBER_ID FROM USER\"")
parser.add_option("-r", "--row", dest="arg_row", default=1, type="int", help="ex) 1")
parser.add_option("-d", "--dbms", dest="arg_dbms", default="", type="string", help="ex) \"MYSQL | ORACLE\"")

# 옵션과 인자값들을 파싱
options, args = parser.parse_args()
     
# urllib.urlencode()의 인자 값은 딕셔너리 타입이어야 함.    
# 이에 파라미터 형태의 문자열을 딕셔너리 형태로 변환
def param2dic(param) :
    param = "{'" + param.replace("&", "','") + "'}"
    param = param.replace('=', "':'")
    param = ast.literal_eval(param) # str자료형을 dictionary자료형으로 변환
    return param


# requests라이브러리를 통해 전송 시 헤더정보는 딕셔너리타입이어야 함.
# 헤더정보를 입력받아 dictionary형태로 변환
def header2dic(header): 
    header = "{" + header + "}"
    header = ast.literal_eval(header)
    return header

# 입력된 인자값들을 Dictionary형태로 저장
payload = {'method':options.arg_method, 'flagStr':options.arg_flagStr, 'frontStr':options.arg_frontStr, 
           'sql':options.arg_sql, 'row':options.arg_row, 'dbms':options.arg_dbms, 'url':options.arg_url, 
           'fixedParam':param2dic(options.arg_fixedParam), 'payParam':options.arg_payParam, 
           'header':header2dic(options.arg_header)}





다른 카테고리의 글 목록

Python/Tools 카테고리의 포스트를 톺아봅니다