2017-12-13 17 views
0

좋아, 나는 SQL 주입에 대한 웹 응용 프로그램 감사 보고서에 실패한 CF11 웹 응용 프로그램이 있습니다.이 보고서는 Acunetix에서 작성했습니다.Coldfusion SQL 인젝션? 웹 응용 프로그램 검사 실패

어쨌든,이 보고서는 나에게 SQL 주입에 취약 내 사이트에 10 페이지를 제공합니다,하지만 난 코드를 확인, 나는 이러한 경우 각 쿼리 중 하나의

예를 CFQUERYPARAM을 사용하여 사실입니다 내가 읽고

<cfquery datasource="#application.DSN#" name="qResult" result="r"> 
     update #table# s 
     set s.loader_status = <cfqueryparam cfsqltype="cf_sql_varchar" value="#ucase(arguments.status)#"> 
     <cfif isDefined("bio_loader_status") and bio_loader_status neq ''> 
     , s.bio_loader_status = <cfqueryparam cfsqltype="cf_sql_varchar" value="#ucase(bio_loader_status)#"> 
     </cfif> 
     , s.session_id = NULL 
     , s.session_expiration = NULL 
     <cfif isDefined("arguments.rowid") and arguments.rowid neq ''> 
       where s.rowid = CHARTOROWID(<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.rowid#">) 
     </cfif> 

    </cfquery> 

모든 것을 내가 SQL 공격 (등, cfquery 등 PARAM를 사용하여 datasurce 및 테이블 변수를 사용)에 대해 보호하고, 아직 보고서는 달리

URL encoded GET input rowid was set to 1'" 
Error message found: Error Executing Database Query 
GET /index.cfm/status?rowid=1'%22&type=billing HTTP/1.1 
을 주장 하더군요 핸들러에 의해 호출

누군가 내가 뭘 잘못하고 있는지 밝힐 수 있습니까? 또는 가정에서 옳지 않은 보고서입니까? 알렉스의 주장 더욱 확대하여

+0

따라서, 보고서는 코드가 있어야 할 상황에서 오류를 던지고 있다고 주장하고있다? –

+0

@KevinB 하하 잘 모릅니다! 난 그렇게 생각, 그 이유는이 성공적으로 SQL 인젝션, 그것이 성공했는지 결정하기 위해 무엇을 찾고 조건 –

+0

을 것으로 보인다 나던 소유권 주장 잘 모르겠어요 의미? 200 상태 코드 응답? –

답변

8

:

그들은 당신이 기꺼이 ROWID가 숫자가 아닌 사실을 처리하는, 그들은

내 이전 고용주가 표준 오류 메시지가보고 싶지 않아 정기적 인 침투 테스트 (펜 테스트)가 해당 응용 프로그램에 대해 수행되었습니다. CF에서 출력되는 오류 메시지는 공격 문자열을 화면에 표시합니다. 디버깅 정보가 필요하거나 화면에 표시되도록하려는 비 생산, 비 QA 환경의 경우에는 문제가 없습니다. 프로덕션에서는 코드가 어디서 빠졌는지에 관해서는 손을 쓰지 않을 것입니다.

오류 메시지 GET /index.cfm/status?rowid=1'%22&type=billing HTTP/1.1은 공격자가 공격 할 수있는 URL 매개 변수와 함께 어떤 파일과 경로를 알려줍니다. 이 파일이 요청 스택의 포함 파일이고 해당 파일을 직접 요청할 수 있으면 이후의 공격에 노출 될 수 있습니다. 이 오류를 포착하여 메시지를 출력해야합니다.

이 URL에 액세스하려면 로그인해야하는 경우가 있습니다. 공개 URL에는 문제와 관련된 정보가 없어야합니다. The rowID must be an Integer 또는 rowID is invalid과 같은 것을 출력하지 마십시오. 그러면 더 많은 공격이 발생할 것입니다. Invalid request은 공개 URL 오류로 문제가되지 않습니다.

이제 실제로 <cfqueryparam>이 주사 공격을 멈출 수없는 경우. 이전 회사의 일부 레거시 저장 프로시 저는 동적 SQL을 사용합니다. CF에서와 마찬가지로, 문자열은 proc 안에서 연결될 것이고 SQL 실행 명령은 최종 SQL 문자열을 실행할 것입니다. <cfqueryparam>에 인코딩 된 문자열을 전달할 수 있습니다. 인코딩 된 문자열은 함께 연결될 때 proc 내부의 SQL 문자열에 삽입됩니다. 이를 위해 문자열 매개 변수의 유효성을 검사하기 위해 오래된 procs 더미를 업데이트하고 거부 할 특정 문자열을 찾아야했습니다.

가능하면 인프라에 Web Application Firewall을 추가해야합니다. Online ColdFusion Meetup Group은 내일 CF 응용 프로그램을위한 하나의 소프트웨어 기반 WAF에 대한 발표를하고 있습니다. 참석하지 못하면 기록 될 것이라고 확신합니다. 저는 어젯밤에 현재의 CF 사이트를 AWS로 이동하는 작업을 마쳤습니다. 여기에서 우리는 보안을 위해 WAF을 스택에 추가해야했습니다. 이는 오류를 적절하게 포착 할 필요가 없으며 적절한 메시지를 표시 할 필요가 없다는 것을 의미하지는 않습니다. 요청이 응용 프로그램 서버에 도착하기 전에 알려진 공격 경로를 거부 할 수있는 경우로드를 줄이는 경향이 있습니다.

+0

"생산에서, 당신은 코드가 트립 곳으로 손을 팁을 싶지 않아요."<<<이 충분히 강조 수 없습니다. – Shawn

+0

확인 자세한 질문에 대한 죄송합니다, 굉장하지만이 tremedously 도움 그것은, 그것은 방화벽 뒤에 공개 URL입니다되지 그런데 , 내 느낌이 과잉이다 그러나 아마 그게 전부입니다, 브라우저에서 VPN 로그인 및 두 단계 인증이 필요합니다 모든 프런트 엔드 devs가 말하는 –