DEF",
310 | "
test",
311 | "
test",
312 | "
test",
313 | "
test",
314 | "
test",
315 | "
test",
316 | "
test",
317 | "
test",
318 | "
test",
319 | "
test",
320 | "
test",
321 | "
test",
322 | "
test",
323 | "
test",
324 | "
test",
325 | "
test",
326 | "
test",
327 | "
test",
328 | "
test",
329 | "
test",
330 | "
test",
331 | "
test",
332 | "
test",
333 | "
test",
334 | "
test",
335 | "
test",
336 | "
test",
337 | "
test",
338 | "
test",
339 | "
test",
340 | "
test",
341 | "
test",
342 | "
test",
343 | "
test",
344 | "
test",
345 | "
test",
346 | "
test",
347 | "
test",
348 | "
test",
349 | "
test",
350 | "
test",
351 | "
test",
352 | "
test",
353 | "
test",
354 | "
test",
355 | "
test",
356 | "
test",
357 | "
test",
358 | "
test",
359 | "
test",
360 | "
test",
361 | "
test",
362 | "
test",
363 | "
test",
364 | "
test",
365 | "
test",
366 | "
test",
367 | "`\"'>

",
368 | "`\"'>

",
369 | "`\"'>

",
370 | "`\"'>

",
371 | "`\"'>

",
372 | "`\"'>

",
373 | "`\"'>

",
374 | "`\"'>

",
375 | "`\"'>

",
376 | "`\"'>

",
377 | "\"`'>",
378 | "\"`'>",
379 | "\"`'>",
380 | "\"`'>",
381 | "\"`'>",
382 | "\"`'>",
383 | "\"`'>",
384 | "\"`'>",
385 | "\"`'>",
386 | "\"`'>",
387 | "\"`'>",
388 | "\"`'>",
389 | "\"`'>",
390 | "\"`'>",
391 | "\"`'>",
392 | "\"`'>",
393 | "\"`'>",
394 | "\"`'>",
395 | "\"`'>",
396 | "\"`'>",
397 | "\"`'>",
398 | "\"`'>",
399 | "\"`'>",
400 | "\"`'>",
401 | "\"`'>",
402 | "\"`'>",
403 | "\"`'>",
404 | "\"`'>",
405 | "\"`'>",
406 | "\"`'>",
407 | "\"`'>",
408 | "\"`'>",
409 | "\"`'>",
410 | "\"`'>",
411 | "\"`'>",
412 | "\"`'>",
413 | "\"`'>",
414 | "
![]()
",
415 | "
![]()
",
416 | "
![]()
",
417 | "
![]()
",
418 | "
![]()
",
419 | "
![]()
",
420 | "
![]()
",
421 | "
![]()
",
422 | "
![]()
",
423 | "
![]()
",
424 | "
![]()
",
425 | "
![]()
",
426 | "
![]()
",
427 | "
![]()
",
428 | "
![]()
",
429 | "
![]()
",
430 | "
![]()
",
431 | "
![]()
",
432 | "
![]()
",
433 | "
![]()
",
434 | "
![]()
",
435 | "
![]()
",
436 | "
\")
",
437 | "
\")
",
438 | "
\")
",
439 | "
\")
",
440 | "
\")
",
441 | "
![]()
",
442 | "

",
443 | "

",
444 | "

",
445 | "

",
446 | "

",
447 | "

",
448 | "
XXX",
449 | "

javascript:alert(1)\"` `>",
450 | "
![javascript:alert(1)//\"]()
",
451 | "
",
452 | "![\"`]()
\">",
453 | "",
454 | "",
455 | "",
456 | "",
457 | "
\">",
458 | "
",
459 | "
",
460 | "
",
461 | "
",
462 | "
",
463 | "
",
464 | "
",
465 | "
",
466 | "
",
467 | "
",
468 | "
",
469 | "perl -e 'print \"
\";' > out",
470 | "
",
471 | "",
472 | "",
473 | "",
474 | "<",
475 | ""
485 | );
486 | static List
SQL_INJECTION = Arrays.asList(
487 | "1;DROP TABLE users",
488 | "1'; DROP TABLE users-- 1",
489 | "' OR 1=1 -- 1",
490 | "' OR '1'='1",
491 | "'; EXEC sp_MSForEachTable 'DROP TABLE ?'; --",
492 | " ",
493 | "%",
494 | "_"
495 | );
496 | static List SERVER_CODE_INJECTION = Arrays.asList(
497 | "-",
498 | "--",
499 | "--version",
500 | "--help",
501 | "$USER",
502 | "/dev/null; touch /tmp/blns.fail ; echo",
503 | "`touch /tmp/blns.fail`",
504 | "$(touch /tmp/blns.fail)",
505 | "@{[system \"touch /tmp/blns.fail\"]}"
506 | );
507 | static List COMMAND_INJECTION = Arrays.asList(
508 | "eval(\"puts 'hello world'\")",
509 | "System(\"ls -al /\")",
510 | "`ls -al /`",
511 | "Kernel.exec(\"ls -al /\")",
512 | "Kernel.exit(1)",
513 | "%x('ls -al /')"
514 | );
515 | static List XXE_INJECTION = Arrays.asList(
516 | "]>&xxe;"
517 | );
518 | static List UNWANTED_INTERPOLATION = Arrays.asList(
519 | "$HOME",
520 | "$ENV{'HOME'}",
521 | "%d",
522 | "%s%s%s%s%s",
523 | "{0}",
524 | "%*.*s",
525 | "%@",
526 | "%n",
527 | "File:///"
528 | );
529 | static List FILE_INCLUSION = Arrays.asList(
530 | "../../../../../../../../../../../etc/passwd%00",
531 | "../../../../../../../../../../../etc/hosts"
532 | );
533 | static List CVES_AND_VULNERABILITIES = Arrays.asList(
534 | "() { 0; }; touch /tmp/blns.shellshock1.fail;",
535 | "() { _; } >_[$($())] { touch /tmp/blns.shellshock2.fail; }",
536 | "<<< %s(un='%s') = %u",
537 | "+++ATH0"
538 | );
539 | static List WINDOWS_SPECIAL_FILENAMES = Arrays.asList(
540 | "CON",
541 | "PRN",
542 | "AUX",
543 | "CLOCK$",
544 | "NUL",
545 | "A:",
546 | "ZZ:",
547 | "COM1",
548 | "LPT1",
549 | "LPT2",
550 | "LPT3",
551 | "COM2",
552 | "COM3",
553 | "COM4"
554 | );
555 | static List IRC_SPECIFIC_STRINGS = Arrays.asList(
556 | "DCC SEND STARTKEYLOGGER 0 0 0"
557 | );
558 | static List SCUNTHORPE_PROBLEM = Arrays.asList(
559 | "Scunthorpe General Hospital",
560 | "Penistone Community Church",
561 | "Lightwater Country Park",
562 | "Jimmy Clitheroe",
563 | "Horniman Museum",
564 | "shitake mushrooms",
565 | "RomansInSussex.co.uk",
566 | "http://www.cum.qc.ca/",
567 | "Craig Cockburn, Software Specialist",
568 | "Linda Callahan",
569 | "Dr. Herman I. Libshitz",
570 | "magna cum laude",
571 | "Super Bowl XXX",
572 | "medieval erection of parapets",
573 | "evaluate",
574 | "mocha",
575 | "expression",
576 | "Arsenal canal",
577 | "classic",
578 | "Tyson Gay",
579 | "Dick Van Dyke",
580 | "basement"
581 | );
582 | static List HUMAN_INJECTION = Arrays.asList(
583 | "If you're reading this, you've been in a coma for almost 20 years now. We're trying a new technique. We don't know where this message will end up in your dream, but we hope it works. Please wake up, we miss you."
584 | );
585 | static List TERMINAL_ESCAPE_CODES = Arrays.asList(
586 | "Roses are \u001b[0;31mred\u001b[0m, violets are \u001b[0;34mblue. Hope you enjoy terminal hue",
587 | "But now...\u001b[20Cfor my greatest trick...\u001b[8m",
588 | "The quic\b\b\b\b\b\bk brown fo\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007\u0007x... [Beeeep]"
589 | );
590 | static List IOS_VULNERABILITIES = Arrays.asList(
591 | "Powerلُلُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ冗",
592 | "🏳0🌈️",
593 | "జ్ఞా"
594 | );
595 | static List PERSIAN_SPECIAL_CHARACTERS = Arrays.asList(
596 | "گچپژ"
597 | );
598 | static List JINJA_2_INJECTION = Arrays.asList(
599 | "{% print 'x' * 64 * 1024**3 %}",
600 | "{{ \"\".__class__.__mro__[2].__subclasses__()[40](\"/etc/passwd\").read() }}"
601 | );
602 |
603 | static List ALL = getAllStringList();
604 |
605 | static List getRandomStrings(int size, NaughtyStrings type) {
606 | if (size < 0)
607 | throw new IllegalArgumentException("Size cannot be negative");
608 |
609 | if (type == null)
610 | throw new IllegalArgumentException("Invalid Naughty Strings Type");
611 |
612 | return new Random().ints(0, type.getString().size())
613 | .mapToObj(index -> type.getString().get(index))
614 | .limit(size)
615 | .collect(Collectors.toList());
616 | }
617 |
618 | static List getStrings(NaughtyStrings type) {
619 | if (type == null)
620 | throw new IllegalArgumentException("Invalid Naughty Strings Type");
621 | return type.getString();
622 | }
623 |
624 | @SuppressWarnings("unchecked")
625 | public static List join(List... lists) {
626 | List result = new ArrayList();
627 | for (List list : lists) {
628 | result.addAll(list);
629 | }
630 | return result;
631 | }
632 |
633 | public static List getAllStringList() {
634 | return join(RESERVED_STRINGS, NUMERIC_STRINGS, SPECIAL_CHARACTERS,
635 | UNICODE_SYMBOLS, UNICODE_SUBSCRIPT_SUPERSCRIPT_ACCENTS, QUOTATION_MARKS, TWO_BYTE_CHARACTERS, TWO_BYTE_LETTER, SPECIAL_UNICODE_CHARACTERS_UNION,
636 | CHANGING_LENGTH_WHEN_LOWERCASE, JAPANESE_EMOTICONS, EMOJI, REGIONAL_INDICATOR_SYMBOLS, UNICODE_NUMBERS, RIGHT_TO_LEFT_STRINGS, OGHAM_TEXT,
637 | UNICODE_UPSIDE_DOWN, UNICODE_FONT, SCRIPT_INJECTION, SQL_INJECTION, SERVER_CODE_INJECTION, COMMAND_INJECTION, XXE_INJECTION, UNWANTED_INTERPOLATION,
638 | FILE_INCLUSION, CVES_AND_VULNERABILITIES, WINDOWS_SPECIAL_FILENAMES, IRC_SPECIFIC_STRINGS, SCUNTHORPE_PROBLEM, HUMAN_INJECTION, TERMINAL_ESCAPE_CODES,
639 | IOS_VULNERABILITIES, PERSIAN_SPECIAL_CHARACTERS, JINJA_2_INJECTION);
640 | }
641 | }
642 |
--------------------------------------------------------------------------------
/src/main/java/io/github/nowshad/NaughtyStrings.java:
--------------------------------------------------------------------------------
1 | package io.github.nowshad;
2 |
3 | import java.util.List;
4 |
5 | public enum NaughtyStrings {
6 | RESERVED_STRINGS(BLNSInternal.RESERVED_STRINGS),
7 | NUMERIC_STRINGS(BLNSInternal.NUMERIC_STRINGS),
8 | SPECIAL_CHARACTERS(BLNSInternal.SPECIAL_CHARACTERS),
9 | UNICODE_SYMBOLS(BLNSInternal.UNICODE_SYMBOLS),
10 | UNICODE_SUBSCRIPT_SUPERSCRIPT_ACCENTS(BLNSInternal.UNICODE_SUBSCRIPT_SUPERSCRIPT_ACCENTS),
11 | QUOTATION_MARKS(BLNSInternal.QUOTATION_MARKS),
12 | TWO_BYTE_CHARACTERS(BLNSInternal.TWO_BYTE_CHARACTERS),
13 | TWO_BYTE_LETTER(BLNSInternal.TWO_BYTE_LETTER),
14 | SPECIAL_UNICODE_CHARACTERS_UNION(BLNSInternal.SPECIAL_UNICODE_CHARACTERS_UNION),
15 | CHANGING_LENGTH_WHEN_LOWERCASE(BLNSInternal.CHANGING_LENGTH_WHEN_LOWERCASE),
16 | JAPANESE_EMOTICONS(BLNSInternal.JAPANESE_EMOTICONS),
17 | EMOJI(BLNSInternal.EMOJI),
18 | REGIONAL_INDICATOR_SYMBOLS(BLNSInternal.REGIONAL_INDICATOR_SYMBOLS),
19 | UNICODE_NUMBERS(BLNSInternal.UNICODE_NUMBERS),
20 | RIGHT_TO_LEFT_STRINGS(BLNSInternal.RIGHT_TO_LEFT_STRINGS),
21 | OGHAM_TEXT(BLNSInternal.OGHAM_TEXT),
22 | UNICODE_UPSIDE_DOWN(BLNSInternal.UNICODE_UPSIDE_DOWN),
23 | UNICODE_FONT(BLNSInternal.UNICODE_FONT),
24 | SCRIPT_INJECTION(BLNSInternal.SCRIPT_INJECTION),
25 | SQL_INJECTION(BLNSInternal.SQL_INJECTION),
26 | SERVER_CODE_INJECTION(BLNSInternal.SERVER_CODE_INJECTION),
27 | COMMAND_INJECTION(BLNSInternal.COMMAND_INJECTION),
28 | XXE_INJECTION(BLNSInternal.XXE_INJECTION),
29 | UNWANTED_INTERPOLATION(BLNSInternal.UNWANTED_INTERPOLATION),
30 | FILE_INCLUSION(BLNSInternal.FILE_INCLUSION),
31 | CVES_AND_VULNERABILITIES(BLNSInternal.CVES_AND_VULNERABILITIES),
32 | WINDOWS_SPECIAL_FILENAMES(BLNSInternal.WINDOWS_SPECIAL_FILENAMES),
33 | IRC_SPECIFIC_STRINGS(BLNSInternal.IRC_SPECIFIC_STRINGS),
34 | SCUNTHORPE_PROBLEM(BLNSInternal.SCUNTHORPE_PROBLEM),
35 | HUMAN_INJECTION(BLNSInternal.HUMAN_INJECTION),
36 | TERMINAL_ESCAPE_CODES(BLNSInternal.TERMINAL_ESCAPE_CODES),
37 | IOS_VULNERABILITIES(BLNSInternal.IOS_VULNERABILITIES),
38 | PERSIAN_SPECIAL_CHARACTERS(BLNSInternal.PERSIAN_SPECIAL_CHARACTERS),
39 | JINJA_2_INJECTION(BLNSInternal.JINJA_2_INJECTION),
40 | ALL(BLNSInternal.ALL);
41 |
42 | private List items;
43 |
44 | NaughtyStrings(List items) {
45 | this.items = items;
46 | }
47 |
48 | public List getString() {
49 | return items;
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/src/test/java/io/github/nowshad/BLNSInternalTest.java:
--------------------------------------------------------------------------------
1 | package io.github.nowshad;
2 |
3 | import org.junit.jupiter.api.Test;
4 |
5 | import java.util.List;
6 |
7 | import static org.junit.jupiter.api.Assertions.*;
8 |
9 | class BLNSInternalTest {
10 |
11 | @Test
12 | void testGetRandomStrings_whenEmptyList_shouldReturnEmptyList() {
13 | List results = BLNSInternal.getRandomStrings(0, NaughtyStrings.ALL);
14 | assertTrue(results.isEmpty());
15 | }
16 |
17 | @Test
18 | void testGetRandomStrings_whenSingleItemList_shouldReturnSingleItemList() {
19 | List result = BLNSInternal.getRandomStrings(1, NaughtyStrings.ALL);
20 | assertFalse(result.isEmpty());
21 | assertEquals(1, result.size());
22 | }
23 |
24 | @Test
25 | void testGetRandomStrings_whenNegativeSize_shouldThrowError() {
26 | assertThrows(IllegalArgumentException.class, () -> BLNSInternal.getRandomStrings(-1, NaughtyStrings.ALL));
27 | }
28 |
29 | @Test
30 | void testGetStrings_whenReservedType_shouldReturnReservedItems() {
31 | List actualList = BLNSInternal.getStrings(NaughtyStrings.RESERVED_STRINGS);
32 | List expectedList = NaughtyStrings.RESERVED_STRINGS.getString();
33 | assertIterableEquals(expectedList, actualList);
34 | }
35 |
36 | @Test
37 | void testGetStrings_whenReservedType_shouldReturnListOfStrings() {
38 | List reservedList = BLNSInternal.getStrings(NaughtyStrings.RESERVED_STRINGS);
39 | assertTrue(reservedList.size() > 0);
40 | }
41 |
42 | @Test
43 | void testGetStrings_whenAllStringType_shouldReturnAllStrings() {
44 | List allStrings = BLNSInternal.getAllStringList();
45 | assertIterableEquals(allStrings, BLNSInternal.getStrings(NaughtyStrings.ALL));
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/src/test/java/io/github/nowshad/BLNSTest.java:
--------------------------------------------------------------------------------
1 | package io.github.nowshad;
2 |
3 | import org.junit.jupiter.api.Test;
4 |
5 | import java.util.List;
6 |
7 | import static org.junit.jupiter.api.Assertions.*;
8 |
9 | /**
10 | * @author Nowshad Hasan
11 | * @since 30/7/22 7:52 am
12 | */
13 | public class BLNSTest {
14 |
15 | @Test
16 | void testGetRandomList_whenSizeGreaterThanZero_shouldReturnGreaterThanZeroList() {
17 | List randomList = BLNS.getRandomList(10, NaughtyStrings.CHANGING_LENGTH_WHEN_LOWERCASE);
18 | assertTrue(randomList.size() > 0);
19 | }
20 |
21 | @Test
22 | void testGetRandomList_whenSizeLessThanZero_shouldThrowError() {
23 | assertThrows(IllegalArgumentException.class, () -> BLNS.getRandomList(-20, NaughtyStrings.REGIONAL_INDICATOR_SYMBOLS));
24 | }
25 |
26 | @Test
27 | void testGetRandomList_whenTypeIsNull_shouldThrowError() {
28 | assertThrows(IllegalArgumentException.class, () -> BLNS.getRandomList(20, null));
29 | }
30 |
31 | @Test
32 | void testGetList_whenNull_shouldThrowError() {
33 | assertThrows(IllegalArgumentException.class, () -> BLNS.getList(null));
34 | }
35 |
36 | @Test
37 | void testGetList_whenAllString_shouldReturnAllStrings() {
38 | List actualList = BLNSInternal.getAllStringList();
39 | List expectedList = BLNS.getList(NaughtyStrings.ALL);
40 | assertIterableEquals(actualList, expectedList);
41 | }
42 |
43 | @Test
44 | void testGetList_whenReservedString_shouldReturnReservedStrings() {
45 | List actualList = BLNSInternal.getStrings(NaughtyStrings.RESERVED_STRINGS);
46 | List expectedList = BLNS.getList(NaughtyStrings.RESERVED_STRINGS);
47 | assertIterableEquals(actualList, expectedList);
48 | }
49 |
50 | @Test
51 | void testGetList_whenRegionalIndicatorSymbols_shouldReturnRegionalIndicatorSymbols() {
52 | List actualList = BLNSInternal.getStrings(NaughtyStrings.REGIONAL_INDICATOR_SYMBOLS);
53 | List expectedList = BLNS.getList(NaughtyStrings.REGIONAL_INDICATOR_SYMBOLS);
54 | assertIterableEquals(actualList, expectedList);
55 | }
56 |
57 | @Test
58 | void testGetList_whenJapaneseEmoticons_shouldReturnJapaneseEmoticons() {
59 | List actualList = BLNSInternal.getStrings(NaughtyStrings.JAPANESE_EMOTICONS);
60 | List expectedList = BLNS.getList(NaughtyStrings.JAPANESE_EMOTICONS);
61 | assertIterableEquals(actualList, expectedList);
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/test/java/io/github/nowshad/NaughtyStringsTest.java:
--------------------------------------------------------------------------------
1 | package io.github.nowshad;
2 |
3 | import org.junit.jupiter.api.Test;
4 |
5 | import java.util.List;
6 |
7 | import static org.junit.jupiter.api.Assertions.assertIterableEquals;
8 | import static org.junit.jupiter.api.Assertions.assertTrue;
9 |
10 | /**
11 | * @author Nowshad Hasan
12 | * @since 29/7/22 2:04 pm
13 | */
14 | public class NaughtyStringsTest {
15 |
16 | @Test
17 | void testNumericString_whenNumericString_shouldReturnNumericStringList() {
18 | List expectedList = NaughtyStrings.NUMERIC_STRINGS.getString();
19 | List actualList = BLNSInternal.NUMERIC_STRINGS;
20 | assertIterableEquals(expectedList, actualList);
21 | }
22 |
23 | @Test
24 | void testSpecialCharacters_whenSpecialCharacters_shouldReturnGreaterThanZeroList() {
25 | List expectedList = NaughtyStrings.SPECIAL_CHARACTERS.getString();
26 | assertTrue(expectedList.size() > 0);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------