ZAP에서 Passive Script 만들기
요즘 몇가지 만들어쓰고 있는데, 간단하게 틀이되는 코드와 대략적인 설명으로 글 작성합니다.
ZAP에선 Context menu, passive scan, active scan 등 모든 기능 구간에 대한 기본적인 script template 코드를 제공해주고 있고, 다른 코드 참조해서 작성하면 어렵지 않습니다. 확장기능 만드는거보다 쉬워서 계속 스크립트 적용해서 최적화하면 Burp보다 좋다고 생각됩니다. 이런면에선 정말 강점이 두드러지는 것 같아요.
코드는 Javascript 코드 기준으로 진행하겠습니다. 우선 Passive scan script의 뼈대가 되는 함수는 scan() 입니다. 해당 script가 enable 되면 scan으로 ps(zap 객체인듯?), msg(request/response 데이터), src의 인자값을 받습니다. 원하는 처리 로직대로 코드 작성해주시고, ps의 raiseAlert 메소드를 통해 ZAP의 Alert 부분으로 데이터를 넘겨줄 수 있습니다.
function scan(ps, msg, src) {
url = msg.getRequestHeader().getURI().toString(); // msg에서 url 데이터 가져옴
alertRisk = 2
alertReliability = 2
alertTitle = "script 이름"
alertDesc = "취약점 내용"
alertSolution = "대응방안"
cweId = 0
wascId = 0
re = /REGEX!/g // 적용할 정규식 룰!
contenttype = msg.getResponseHeader().getHeader("Content-Type")
unwantedfiletypes = ['image/png', 'image/jpeg','image/gif','application/x-shockwave-flash'] // Media 계열들 무시
if (unwantedfiletypes.indexOf(""+contenttype) >= 0) {
//
return
}else{
body = msg.getResponseBody().toString()
if (re.test(body)) { // 정규식 테스트
re.lastIndex = 0 // After testing reset index
var your_data = []
while (comm = re.exec(body)) {
your_data.push(comm[0]);
}
ps.raiseAlert(alertRisk, alertReliability, alertTitle, alertDesc, url, '', '', your_data.toString(), alertSolution, '', cweId, wascId, msg); // Alert에 등록
// 각각 모두 Alert 페이지에 나타나는 항목들입니다.
}
}
}
이 코드를 Enable 시키면 Response 데이터에서 정규식으로 원하는 문자열이 있는 경우에 Alert 쪽으로 넘겨주게 됩니다. 우선 뼈대는 있기 떄문에 로직만 넣어주면 쉽게쉽게 원하는 기능을 만들 수 있습니다.
혹시라도 재미있는 아이디어 있다면 댓글, 메일 등 남겨주세요 :) (이미 회사에서 여러가지 적용하고 있지만..ㅋㅋㅋ)