Example #1
0
def test_deep_mutant_simple2():
    """fz的data是json, 其他不变"""
    fz = make_complex_req()
    fz.bin_body = json.dumps(
        collections.OrderedDict([
            ("x", "1"),
            ("b", "2"),
            ("z", "3"),
            ("kerbin", "kerbal"),
        ])).encode("UTF-8")

    mutant = DeepMutant(DummyPayloadFactory)

    expected = [
        # query
        b"/anything?a=a__1&b=2&c=3&a=x&a=y",
        b"/anything?a=1&b=b__2&c=3&a=x&a=y",
        b"/anything?a=1&b=2&c=c__3&a=x&a=y",
        b"/anything?a=1&b=2&c=3&a=a__x&a=y",
        b"/anything?a=1&b=2&c=3&a=x&a=a__y",

        # data
        b"""{"x": "x__1", "b": "2", "z": "3", "kerbin": "kerbal"}""",
        b"""{"x": "1", "b": "b__2", "z": "3", "kerbin": "kerbal"}""",
        b"""{"x": "1", "b": "2", "z": "z__3", "kerbin": "kerbal"}""",
        b"""{"x": "1", "b": "2", "z": "3", "kerbin": "kerbin__kerbal"}""",
    ]

    for atk_fz, correct in zip(mutant.make(fz), expected):
        assert correct in atk_fz.to_bare()
Example #2
0
def test_deep_mutant_simple():
    """在传入值不涉及递归的情况下, 行为应该和shallow是 *几乎* 相同的
    除了一个优点以外: 不会丢失重复key
    """
    fz = make_complex_req()
    mutant = DeepMutant(DummyPayloadFactory)

    expected = [
        # query
        b"/anything?a=a__1&b=2&c=3&a=x&a=y",
        b"/anything?a=1&b=b__2&c=3&a=x&a=y",
        b"/anything?a=1&b=2&c=c__3&a=x&a=y",
        b"/anything?a=1&b=2&c=3&a=a__x&a=y",
        b"/anything?a=1&b=2&c=3&a=x&a=a__y",

        # data
        b"a=a__b&c=d&c=e&e=x&x=f",
        b"a=b&c=c__d&c=e&e=x&x=f",
        b"a=b&c=d&c=c__e&e=x&x=f",
        b"a=b&c=d&c=e&e=e__x&x=f",
        b"a=b&c=d&c=e&e=x&x=x__f",
    ]

    for atk_fz, correct in zip(mutant.make(fz), expected):
        assert correct in atk_fz.to_bare()
Example #3
0
def test_headers_mutant():
    fz = make_complex_req()
    fz.headers["User-Agent"] = "monkey"
    fz.headers["Referer"] = "http://cat.com"
    mutant = HeadersMutant(DummyPayloadFactory)
    expected = [
        b"User-Agent: User-agent__monkey",
        b"X-Forward-For: X-Forward-For__",
        b"referer: Referer__http://cat.com",
    ]

    for atk_fz, correct in zip(mutant.make(fz), expected):
        assert correct in atk_fz.to_bare()
Example #4
0
def test_shallow_mutant():
    fz = make_complex_req()
    mutant = ShallowMutant(DummyPayloadFactory)

    expected = [
        # query
        b"/anything?a=a__1&b=2&c=3",
        b"/anything?a=1&b=b__2&c=3&a=x&a=y",
        b"/anything?a=1&b=2&c=c__3&a=x&a=y",
        b"/anything?a=a__x&b=2&c=3",
        b"/anything?a=a__y&b=2&c=3",

        # data
        b"a=a__b&c=d&c=e&e=x&x=f",
        b"a=b&c=c__d&e=x&x=f",
        b"a=b&c=c__e&e=x&x=f",
        b"a=b&c=d&c=e&e=e__x&x=f",
        b"a=b&c=d&c=e&e=x&x=x__f",
    ]

    for atk_fz, correct in zip(mutant.make(fz), expected):
        assert correct in atk_fz.to_bare()
Example #5
0
def test_deep_mutant_complex():
    """测试复杂的包含递归的项"""
    fz = make_complex_req()
    fz.query["c"] = json.dumps(dict(
        j="son",
        f="yet=another&form=1",
    ))
    fz.data["e"] = parse.urlencode([
        ("cat", "dog"),
        ("j2", '{"foo":"bar"}'),
    ])
    mutant = DeepMutant(DummyPayloadFactory)

    expected = [
        # query
        b"/anything?a=a__1&b=2&c=%7B%22j%22%3A+%22son%22%2C+%22f%22%3A+%22yet%3Danother%26form%3D1%22%7D&a=x&a=y",
        b"/anything?a=1&b=b__2&c=%7B%22j%22%3A+%22son%22%2C+%22f%22%3A+%22yet%3Danother%26form%3D1%22%7D&a=x&a=y",
        b"/anything?a=1&b=2&c=c__%7B%22j%22%3A+%22son%22%2C+%22f%22%3A+%22yet%3Danother%26form%3D1%22%7D&a=x&a=y",
        b"/anything?a=1&b=2&c=%7B%22j%22%3A+%22son%22%2C+%22f%22%3A+%22yet%3Danother%26form%3D1%22%7D&a=a__x&a=y",
        b"/anything?a=1&b=2&c=%7B%22j%22%3A+%22son%22%2C+%22f%22%3A+%22yet%3Danother%26form%3D1%22%7D&a=x&a=a__y",
        b"/anything?a=1&b=2&c=%7B%22j%22%3A+%22j__son%22%2C+%22f%22%3A+%22yet%3Danother%26form%3D1%22%7D&a=x&a=y",
        b"/anything?a=1&b=2&c=%7B%22j%22%3A+%22son%22%2C+%22f%22%3A+%22f__yet%3Danother%26form%3D1%22%7D&a=x&a=y",
        b"/anything?a=1&b=2&c=%7B%22j%22%3A+%22son%22%2C+%22f%22%3A+%22yet%3Dyet__another%26form%3D1%22%7D&a=x&a=y",
        b"/anything?a=1&b=2&c=%7B%22j%22%3A+%22son%22%2C+%22f%22%3A+%22yet%3Danother%26form%3Dform__1%22%7D&a=x&a=y",

        # data
        b"a=a__b&c=d&c=e&e=cat%3Ddog%26j2%3D%257B%2522foo%2522%253A%2522bar%2522%257D&x=f",
        b"a=b&c=c__d&c=e&e=cat%3Ddog%26j2%3D%257B%2522foo%2522%253A%2522bar%2522%257D&x=f",
        b"a=b&c=d&c=c__e&e=cat%3Ddog%26j2%3D%257B%2522foo%2522%253A%2522bar%2522%257D&x=f",
        b"a=b&c=d&c=e&e=e__cat%3Ddog%26j2%3D%257B%2522foo%2522%253A%2522bar%2522%257D&x=f",
        b"a=b&c=d&c=e&e=cat%3Ddog%26j2%3D%257B%2522foo%2522%253A%2522bar%2522%257D&x=x__f",
        b"a=b&c=d&c=e&e=cat%3Dcat__dog%26j2%3D%257B%2522foo%2522%253A%2B%2522bar%2522%257D&x=f",
        b"a=b&c=d&c=e&e=cat%3Ddog%26j2%3Dj2__%257B%2522foo%2522%253A%2B%2522bar%2522%257D&x=f",
        b"a=b&c=d&c=e&e=cat%3Ddog%26j2%3D%257B%2522foo%2522%253A%2B%2522foo__bar%2522%257D&x=f",
    ]

    for atk_fz, correct in zip(mutant.make(fz), expected):
        assert correct in atk_fz.to_bare()
Example #6
0
def test_payload_factory_dummy():
    fz = make_complex_req()
    pf = DummyPayloadFactory(fz)

    assert list(pf.make(key="cat", value="dog")) \
           == [(Payload("cat__dog"), {})]