-- 混合HTML 元素和img 事件绕过测试
13 | http://127.0.0.1/xss_test.php?xss_test_2=" -- 初期XSS 绕过元素属性闭合测试
14 | http://127.0.0.1/xss_test.php?xss_test_2=" onerror="alert('xss'); -- 元素事件XSS 测试
15 | http://127.0.0.1/xss_test.php?xss_test_2=' " onload="alert('xss'); -- 元素事件XSS 误报BUG 测试
16 | http://127.0.0.1/xss_test.php?xss_test_2=" alt="change tips"; -- 元素XSS 修改非事件属性测试
17 | http://127.0.0.1/xss_test.php?xss_test_2=" /> -- 绕过元素之外构造DOM XSS 测试
18 | http://127.0.0.1/xss_test.php?xss_test_2=123 -- 元素XSS 误报测试
19 |
20 | 在测试中全部通过,`XSS-hunter` 的检测效果:
21 | 
22 |
--------------------------------------------------------------------------------
/xss_ctf1.php:
--------------------------------------------------------------------------------
1 | ') && strstr($_GET['keyword'],''))
5 | echo '';
6 | echo '
'.$_GET['keyword'];
7 | } else {
8 | echo '';
9 | }
10 |
11 | ?>
--------------------------------------------------------------------------------
/xss_ctf2.php:
--------------------------------------------------------------------------------
1 |
2 | ') && strstr($_POST['username'],''))
5 | echo '';
6 | if (strstr($_POST['password'],''))
7 | echo '';
8 | }
9 | ?>
10 |
11 |
12 |
13 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/xss_ctf3.php:
--------------------------------------------------------------------------------
1 |
2 | ') && strstr($_POST['Comment'],'')) {
5 | echo '';
6 | } else {
7 | $comment_data='
'.$_POST['Comment'];
8 | $comment_file=fopen('./data.txt','a');
9 | fwrite($comment_file,$comment_data);
10 | fclose($comment_file);
11 | }
12 | }
13 | ?>
14 |
15 |
16 |
17 |
18 |
22 |
23 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/xss_ctf4.php:
--------------------------------------------------------------------------------
1 |
2 |
'.$_POST['Comment'];
5 | $comment_file=fopen('./data.txt','a');
6 | fwrite($comment_file,$comment_data);
7 | fclose($comment_file);
8 | }
9 | ?>
10 |
11 |
12 |
13 |
14 |
18 |
19 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/xss_hunter.js:
--------------------------------------------------------------------------------
1 |
2 | // XSS 漏水报告
3 |
4 | function report(xss_detail_element) {
5 | console.log('WARNING! EVAL ELEMENT .. '+xss_detail_element.tagName+' '+xss_detail_element.src);
6 | }
7 |
8 | // 动态检测DOM 上变化来检测XSS
9 |
10 | function dynamic_check_eval_event(element) {
11 | var black_element_event=['onerror','onload'];
12 |
13 | for (var element_attribute_index in element) {
14 | var event=eval('element.'+element_attribute_index);
15 |
16 | for (var black_element_event_index in black_element_event)
17 | if (black_element_event[black_element_event_index]==element_attribute_index && 'function'==typeof event)
18 | return true;
19 | }
20 | return false;
21 | }
22 |
23 | function dynamic_check_eval_element(element) {
24 | var black_element_name=['SCRIPT','IFRAME'];
25 |
26 | for (var index in black_element_name)
27 | if (black_element_name[index]==element.tagName)
28 | return true;
29 |
30 | return false;
31 | }
32 |
33 | function init() {
34 | // init body observer object for monited dynamic element create ..
35 | var observer = new MutationObserver(function (mutations) {
36 | mutations.forEach(function (mutation) {
37 | if ('childList'==mutation.type || 'subtree'==mutation.type) {
38 | for (var index=0;index';
72 | test_script+='
';
73 | test_script+='
';
74 | test_script+='
';
75 | test_script+='';
78 | test_script+='';
79 | test_script+='';
80 |
81 | document.body.innerHTML=test_script;
82 |
83 | // document.body.innerHTML+='
84 | // /*
12 |
13 | ';
84 | test_script+='';
85 | test_script+='';
86 |
87 | document.body.innerHTML=test_script;
88 |
89 | // document.body.innerHTML+='
90 | // /*
100 |
101 |
373 |
374 |
377 |
378 |
379 |
380 |
381 |
391 |
395 |
396 |
397 |
408 | ';
411 | ?>
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |