Input buildinfo: https://buildinfos.debian.net/buildinfo-pool/w/wapiti/wapiti_3.0.4+dfsg-1_all.buildinfo Use metasnap for getting required timestamps New buildinfo file: /tmp/wapiti-3.0.4+dfsg-178917q5i/wapiti_3.0.4+dfsg-1_all.buildinfo Get source package info: wapiti=3.0.4+dfsg-1 Source URL: http://snapshot.notset.fr/mr/package/wapiti/3.0.4+dfsg-1/srcfiles?fileinfo=1 env -i PATH=/usr/sbin:/usr/bin:/sbin:/bin TMPDIR=/tmp mmdebstrap --arch=amd64 --include=autoconf=2.69-14 automake=1:1.16.3-2 autopoint=0.21-4 autotools-dev=20180224.1+nmu1 base-files=11 base-passwd=3.5.49 bash=5.1-2 binutils=2.35.1-7 binutils-common=2.35.1-7 binutils-x86-64-linux-gnu=2.35.1-7 bsdextrautils=2.36.1-7 bsdutils=1:2.36.1-7 build-essential=12.9 bzip2=1.0.8-4 ca-certificates=20210119 ca-certificates-java=20190909 coreutils=8.32-4+b1 cpp=4:10.2.1-1 cpp-10=10.2.1-6 dash=0.5.11+git20200708+dd9ef66-5 debconf=1.5.74 debhelper=13.3.3 debianutils=4.11.2 default-jre-headless=2:1.11-72 dh-autoreconf=20 dh-python=4.20201102 dh-strip-nondeterminism=1.11.0-1 diffutils=1:3.7-5 dpkg=1.20.7.1 dpkg-dev=1.20.7.1 dwz=0.13+20210201-1 file=1:5.39-3 findutils=4.8.0-1 fontconfig-config=2.13.1-4.2 fonts-dejavu-core=2.37-2 g++=4:10.2.1-1 g++-10=10.2.1-6 gcc=4:10.2.1-1 gcc-10=10.2.1-6 gcc-10-base=10.2.1-6 gettext=0.21-4 gettext-base=0.21-4 grep=3.6-1 groff-base=1.22.4-6 gzip=1.10-2 hostname=3.23 init-system-helpers=1.60 intltool-debian=0.35.0+20060710.5 java-common=0.72 java-wrappers=0.3 libacl1=2.2.53-10 libarchive-zip-perl=1.68-1 libasan6=10.2.1-6 libasound2=1.2.4-1.1 libasound2-data=1.2.4-1.1 libatomic1=10.2.1-6 libattr1=1:2.4.48-6 libaudit-common=1:3.0-2 libaudit1=1:3.0-2 libavahi-client3=0.8-5 libavahi-common-data=0.8-5 libavahi-common3=0.8-5 libbinutils=2.35.1-7 libblkid1=2.36.1-7 libbrotli1=1.0.9-2+b2 libbsd0=0.11.3-1 libbz2-1.0=1.0.8-4 libc-bin=2.31-9 libc-dev-bin=2.31-9 libc6=2.31-9 libc6-dev=2.31-9 libcap-ng0=0.7.9-2.2+b1 libcc1-0=10.2.1-6 libcom-err2=1.46.1-1 libcrypt-dev=1:4.4.17-1 libcrypt1=1:4.4.17-1 libctf-nobfd0=2.35.1-7 libctf0=2.35.1-7 libcups2=2.3.3op2-3 libdb5.3=5.3.28+dfsg1-0.8 libdbus-1-3=1.12.20-2 libdebconfclient0=0.256 libdebhelper-perl=13.3.3 libdpkg-perl=1.20.7.1 libelf1=0.183-1 libexpat1=2.2.10-2 libffi7=3.3-5 libfile-stripnondeterminism-perl=1.11.0-1 libfontconfig1=2.13.1-4.2 libfreetype6=2.10.4+dfsg-1 libgcc-10-dev=10.2.1-6 libgcc-s1=10.2.1-6 libgcrypt20=1.8.7-3 libgdbm-compat4=1.19-2 libgdbm6=1.19-2 libglib2.0-0=2.66.7-1 libgmp10=2:6.2.1+dfsg-1 libgnutls30=3.7.0-7 libgomp1=10.2.1-6 libgpg-error0=1.38-2 libgraphite2-3=1.3.14-1 libgssapi-krb5-2=1.18.3-4 libharfbuzz0b=2.7.4-1 libhogweed6=3.7-2 libicu67=67.1-6 libidn2-0=2.3.0-5 libisl23=0.23-1 libitm1=10.2.1-6 libjargs-java=1.0.0-5 libjpeg62-turbo=1:2.0.6-2 libjs-jquery=3.5.1+dfsg+~3.5.5-7 libk5crypto3=1.18.3-4 libkeyutils1=1.6.1-2 libkrb5-3=1.18.3-4 libkrb5support0=1.18.3-4 liblcms2-2=2.12~rc1-2 liblsan0=10.2.1-6 liblz4-1=1.9.3-1 liblzma5=5.2.5-1.0 libmagic-mgc=1:5.39-3 libmagic1=1:5.39-3 libmd0=1.0.3-3 libmount1=2.36.1-7 libmpc3=1.2.0-1 libmpdec3=2.5.1-1 libmpfr6=4.1.0-3 libncursesw6=6.2+20201114-2 libnettle8=3.7-2 libnsl-dev=1.3.0-2 libnsl2=1.3.0-2 libnspr4=2:4.29-1 libnss3=2:3.61-1 libp11-kit0=0.23.22-1 libpam-modules=1.4.0-4 libpam-modules-bin=1.4.0-4 libpam-runtime=1.4.0-4 libpam0g=1.4.0-4 libpcre2-8-0=10.36-2 libpcre3=2:8.39-13 libpcsclite1=1.9.1-1 libperl5.32=5.32.1-2 libpipeline1=1.5.3-1 libpng16-16=1.6.37-3 libpython3-stdlib=3.9.1-1 libpython3.9-minimal=3.9.1-4 libpython3.9-stdlib=3.9.1-4 libquadmath0=10.2.1-6 libreadline8=8.1-1 libseccomp2=2.5.1-1 libselinux1=3.1-3 libsigsegv2=2.13-1 libsmartcols1=2.36.1-7 libsqlite3-0=3.34.1-2 libssl1.1=1.1.1j-1 libstdc++-10-dev=10.2.1-6 libstdc++6=10.2.1-6 libsub-override-perl=0.09-2 libsystemd0=247.3-1 libtasn1-6=4.16.0-2 libtinfo6=6.2+20201114-2 libtirpc-common=1.3.1-1 libtirpc-dev=1.3.1-1 libtirpc3=1.3.1-1 libtool=2.4.6-15 libtsan0=10.2.1-6 libubsan1=10.2.1-6 libuchardet0=0.0.7-1 libudev1=247.3-1 libunistring2=0.9.10-4 libuuid1=2.36.1-7 libx11-6=2:1.7.0-2 libx11-data=2:1.7.0-2 libxau6=1:1.0.9-1 libxcb1=1.14-3 libxdmcp6=1:1.1.2-3 libxext6=2:1.3.3-1.1 libxi6=2:1.7.10-1 libxml2=2.9.10+dfsg-6.3+b1 libxrender1=1:0.9.10-1 libxtst6=2:1.2.3-1 libzstd1=1.4.8+dfsg-1 linux-libc-dev=5.10.13-1 login=1:4.8.1-1 lsb-base=11.1.0 m4=1.4.18-5 make=4.3-4 man-db=2.9.4-2 mawk=1.3.4.20200120-2 media-types=4.0.0 ncurses-base=6.2+20201114-2 ncurses-bin=6.2+20201114-2 openjdk-11-jre-headless=11.0.10+9-1 openssl=1.1.1j-1 patch=2.7.6-7 perl=5.32.1-2 perl-base=5.32.1-2 perl-modules-5.32=5.32.1-2 po-debconf=1.0.21+nmu1 publicsuffix=20210108.1309-1 python3=3.9.1-1 python3-attr=20.3.0-1 python3-bs4=4.9.3-1 python3-certifi=2020.6.20-1 python3-chardet=4.0.0-1 python3-distutils=3.9.2-1 python3-idna=2.10-1 python3-importlib-metadata=1.6.0-2 python3-iniconfig=1.1.1-1 python3-lib2to3=3.9.2-1 python3-mako=1.1.3+ds1-2 python3-markupsafe=1.1.1-1+b3 python3-minimal=3.9.1-1 python3-more-itertools=4.2.0-3 python3-packaging=20.9-2 python3-pkg-resources=52.0.0-1 python3-pluggy=0.13.0-6 python3-py=1.10.0-1 python3-pyparsing=2.4.7-1 python3-pytest=6.0.2-2 python3-pytest-runner=2.11.1-1.2 python3-requests=2.25.1+dfsg-2 python3-responses=0.12.1-1 python3-setuptools=52.0.0-1 python3-six=1.15.0-2 python3-socks=1.7.1+dfsg-1 python3-soupsieve=2.2-1 python3-tld=0.11.11-1 python3-toml=0.10.1-1 python3-urllib3=1.26.2-1 python3-yaswfp=0.9.3-1.1 python3-zipp=1.0.0-3 python3.9=3.9.1-4 python3.9-minimal=3.9.1-4 readline-common=8.1-1 sed=4.7-1 sensible-utils=0.0.14 sysvinit-utils=2.96-5 tar=1.34+dfsg-1 tzdata=2021a-1 ucf=3.0043 unzip=6.0-26 util-linux=2.36.1-7 x11-common=1:7.7+22 xz-utils=5.2.5-1.0 yui-compressor=2.4.8-2.1 zlib1g=1:1.2.11.dfsg-2 --variant=apt --aptopt=Acquire::Check-Valid-Until "false" --aptopt=Acquire::http::Dl-Limit "1000"; --aptopt=Acquire::https::Dl-Limit "1000"; --aptopt=Acquire::Retries "5"; --aptopt=APT::Get::allow-downgrades "true"; --keyring=/usr/share/keyrings/ --essential-hook=chroot "$1" sh -c "apt-get --yes install fakeroot util-linux" --essential-hook=copy-in /usr/share/keyrings/debian-archive-bullseye-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-security-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-stable.gpg /usr/share/keyrings/debian-archive-buster-automatic.gpg /usr/share/keyrings/debian-archive-buster-security-automatic.gpg /usr/share/keyrings/debian-archive-buster-stable.gpg /usr/share/keyrings/debian-archive-keyring.gpg /usr/share/keyrings/debian-archive-removed-keys.gpg /usr/share/keyrings/debian-archive-stretch-automatic.gpg /usr/share/keyrings/debian-archive-stretch-security-automatic.gpg /usr/share/keyrings/debian-archive-stretch-stable.gpg /usr/share/keyrings/debian-ports-archive-keyring-removed.gpg /usr/share/keyrings/debian-ports-archive-keyring.gpg /usr/share/keyrings/debian-keyring.gpg /etc/apt/trusted.gpg.d/ --essential-hook=chroot "$1" sh -c "rm /etc/apt/sources.list && echo 'deb http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb-src http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb http://snapshot.notset.fr/archive/debian/20210314T151325Z/ unstable main deb http://snapshot.notset.fr/archive/debian/20210218T111050Z/ unstable main' >> /etc/apt/sources.list && apt-get update" --customize-hook=chroot "$1" useradd --no-create-home -d /nonexistent -p "" builduser -s /bin/bash --customize-hook=chroot "$1" env sh -c "apt-get source --only-source -d wapiti=3.0.4+dfsg-1 && mkdir -p /build/wapiti-otlTNx && dpkg-source --no-check -x /*.dsc /build/wapiti-otlTNx/wapiti-3.0.4+dfsg && chown -R builduser:builduser /build/wapiti-otlTNx" --customize-hook=chroot "$1" env --unset=TMPDIR runuser builduser -c "cd /build/wapiti-otlTNx/wapiti-3.0.4+dfsg && env DEB_BUILD_OPTIONS="parallel=4" LANG="C.UTF-8" LC_ALL="C.UTF-8" SOURCE_DATE_EPOCH="1614163902" dpkg-buildpackage -uc -a amd64 --build=all" --customize-hook=sync-out /build/wapiti-otlTNx /tmp/wapiti-3.0.4+dfsg-178917q5i bullseye /dev/null deb http://snapshot.notset.fr/archive/debian/20210218T111050Z unstable main I: automatically chosen mode: root I: chroot architecture amd64 is equal to the host's architecture I: automatically chosen format: tar I: using /tmp/mmdebstrap.frGhKdeeLx as tempdir I: running apt-get update... I: downloading packages with apt... I: extracting archives... I: installing essential packages... I: running --essential-hook in shell: sh -c 'chroot "$1" sh -c "apt-get --yes install fakeroot util-linux"' exec /tmp/mmdebstrap.frGhKdeeLx Reading package lists... Building dependency tree... util-linux is already the newest version (2.36.1-7). The following NEW packages will be installed: fakeroot libfakeroot 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 134 kB of archives. After this operation, 397 kB of additional disk space will be used. Get:1 http://snapshot.notset.fr/archive/debian/20210218T111050Z unstable/main amd64 libfakeroot amd64 1.25.3-1.1 [47.0 kB] Get:2 http://snapshot.notset.fr/archive/debian/20210218T111050Z unstable/main amd64 fakeroot amd64 1.25.3-1.1 [87.0 kB] debconf: delaying package configuration, since apt-utils is not installed Fetched 134 kB in 0s (999 kB/s) Selecting previously unselected package libfakeroot:amd64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 4662 files and directories currently installed.) Preparing to unpack .../libfakeroot_1.25.3-1.1_amd64.deb ... Unpacking libfakeroot:amd64 (1.25.3-1.1) ... Selecting previously unselected package fakeroot. Preparing to unpack .../fakeroot_1.25.3-1.1_amd64.deb ... Unpacking fakeroot (1.25.3-1.1) ... Setting up libfakeroot:amd64 (1.25.3-1.1) ... Setting up fakeroot (1.25.3-1.1) ... update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode Processing triggers for libc-bin (2.31-9) ... I: running special hook: copy-in /usr/share/keyrings/debian-archive-bullseye-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-security-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-stable.gpg /usr/share/keyrings/debian-archive-buster-automatic.gpg /usr/share/keyrings/debian-archive-buster-security-automatic.gpg /usr/share/keyrings/debian-archive-buster-stable.gpg /usr/share/keyrings/debian-archive-keyring.gpg /usr/share/keyrings/debian-archive-removed-keys.gpg /usr/share/keyrings/debian-archive-stretch-automatic.gpg /usr/share/keyrings/debian-archive-stretch-security-automatic.gpg /usr/share/keyrings/debian-archive-stretch-stable.gpg /usr/share/keyrings/debian-ports-archive-keyring-removed.gpg /usr/share/keyrings/debian-ports-archive-keyring.gpg /usr/share/keyrings/debian-keyring.gpg /etc/apt/trusted.gpg.d/ I: running --essential-hook in shell: sh -c 'chroot "$1" sh -c "rm /etc/apt/sources.list && echo 'deb http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb-src http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb http://snapshot.notset.fr/archive/debian/20210314T151325Z/ unstable main deb http://snapshot.notset.fr/archive/debian/20210218T111050Z/ unstable main' >> /etc/apt/sources.list && apt-get update"' exec /tmp/mmdebstrap.frGhKdeeLx Get:1 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm InRelease [81.6 kB] Get:2 http://snapshot.notset.fr/archive/debian/20210314T151325Z unstable InRelease [154 kB] Hit:3 http://snapshot.notset.fr/archive/debian/20210218T111050Z unstable InRelease Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:5 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:5 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:5 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Get:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources [11.4 MB] Get:5 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages [11.1 MB] Ign:6 http://snapshot.notset.fr/archive/debian/20210314T151325Z unstable/main amd64 Packages Ign:6 http://snapshot.notset.fr/archive/debian/20210314T151325Z unstable/main amd64 Packages Ign:6 http://snapshot.notset.fr/archive/debian/20210314T151325Z unstable/main amd64 Packages Get:6 http://snapshot.notset.fr/archive/debian/20210314T151325Z unstable/main amd64 Packages [11.7 MB] Fetched 34.4 MB in 34s (1016 kB/s) Reading package lists... I: installing remaining packages inside the chroot... I: running --customize-hook in shell: sh -c 'chroot "$1" useradd --no-create-home -d /nonexistent -p "" builduser -s /bin/bash' exec /tmp/mmdebstrap.frGhKdeeLx I: running --customize-hook in shell: sh -c 'chroot "$1" env sh -c "apt-get source --only-source -d wapiti=3.0.4+dfsg-1 && mkdir -p /build/wapiti-otlTNx && dpkg-source --no-check -x /*.dsc /build/wapiti-otlTNx/wapiti-3.0.4+dfsg && chown -R builduser:builduser /build/wapiti-otlTNx"' exec /tmp/mmdebstrap.frGhKdeeLx Reading package lists... NOTICE: 'wapiti' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/pkg-security-team/wapiti.git Please use: git clone https://salsa.debian.org/pkg-security-team/wapiti.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 412 kB of source archives. Get:1 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main wapiti 3.0.4+dfsg-1 (dsc) [2210 B] Get:2 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main wapiti 3.0.4+dfsg-1 (tar) [386 kB] Get:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main wapiti 3.0.4+dfsg-1 (diff) [24.3 kB] Fetched 412 kB in 0s (958 kB/s) Download complete and in download only mode W: Download is performed unsandboxed as root as file 'wapiti_3.0.4+dfsg-1.dsc' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) dpkg-source: info: extracting wapiti in /build/wapiti-otlTNx/wapiti-3.0.4+dfsg dpkg-source: info: unpacking wapiti_3.0.4+dfsg.orig.tar.xz dpkg-source: info: unpacking wapiti_3.0.4+dfsg-1.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying disable-nikto-download.patch dpkg-source: info: applying allow-local-nikto-db.patch dpkg-source: info: applying install-only-pertinent-docs.patch dpkg-source: info: applying remove-jquery.patch dpkg-source: info: applying fix-typos.patch dpkg-source: info: applying remove-js-mentions.patch dpkg-source: info: applying ignore-js-dir-in-html-report-generation.patch I: running --customize-hook in shell: sh -c 'chroot "$1" env --unset=TMPDIR runuser builduser -c "cd /build/wapiti-otlTNx/wapiti-3.0.4+dfsg && env DEB_BUILD_OPTIONS="parallel=4" LANG="C.UTF-8" LC_ALL="C.UTF-8" SOURCE_DATE_EPOCH="1614163902" dpkg-buildpackage -uc -a amd64 --build=all"' exec /tmp/mmdebstrap.frGhKdeeLx dpkg-buildpackage: info: source package wapiti dpkg-buildpackage: info: source version 3.0.4+dfsg-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Gianfranco Costamagna dpkg-source --before-build . debian/rules clean dh clean --with python3 --buildsystem=pybuild dh_auto_clean -O--buildsystem=pybuild I: pybuild base:232: python3.9 setup.py clean running clean removing '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build' (and everything under it) 'build/bdist.linux-x86_64' does not exist -- can't clean it 'build/scripts-3.9' does not exist -- can't clean it dh_autoreconf_clean -O--buildsystem=pybuild dh_clean -O--buildsystem=pybuild debian/rules binary-indep dh binary-indep --with python3 --buildsystem=pybuild dh_update_autotools_config -i -O--buildsystem=pybuild dh_autoreconf -i -O--buildsystem=pybuild dh_auto_configure -i -O--buildsystem=pybuild I: pybuild base:232: python3.9 setup.py config running config debian/rules override_dh_auto_build make[1]: Entering directory '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg' # rebuild the *.mo rm -f wapitiCore/config/language/*/LC_MESSAGES/wapiti.mo cd wapitiCore/language_sources; \ for f in *.po; do \ lang=$(echo $f | cut -d '.' -f1); \ if [ $lang != sav_en ]; then \ msgfmt $f -o "../data/language/$lang/LC_MESSAGES/wapiti.mo"; \ fi; \ done dh_auto_build I: pybuild base:232: /usr/bin/python3 setup.py build running build running build_py creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore copying wapitiCore/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore copying wapitiCore/moon.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests copying tests/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_buster.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_backup.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_nikto.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_csp.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_blindsql.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_shellshock.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_wapp.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_cookieflags.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_xxe.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_htaccess.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/attack.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_permanentxss.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_redirect.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_crlf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_csrf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_file.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_brute_login_form.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_methods.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_xss.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_ssrf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_sql.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_http_headers.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack copying wapitiCore/attack/mod_exec.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report copying wapitiCore/report/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report copying wapitiCore/report/htmlreportgenerator.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report copying wapitiCore/report/xmlreportgenerator.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report copying wapitiCore/report/reportgenerator.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report copying wapitiCore/report/txtreportgenerator.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report copying wapitiCore/report/jsonreportgenerator.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/ssrf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/internal_error.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/exec.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/sql.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/secure_cookie.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/file.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/blindsql.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/xss.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/resource_consumption.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/redirect.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/dangerous_resource.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/csp.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/credentials.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/fingerprint.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/crlf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/csrf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/http_only.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/xxe.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/http_headers.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/backup.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions copying wapitiCore/definitions/htaccess.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main copying wapitiCore/main/wapiti.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main copying wapitiCore/main/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main copying wapitiCore/main/getcookie.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language copying wapitiCore/language/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language copying wapitiCore/language/language.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language copying wapitiCore/language/vulnerability.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language copying wapitiCore/language/logger.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/crawler.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/swf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/sqlite_persister.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/csp_utils.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/web.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/page.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/xss_utils.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/lamejs.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net copying wapitiCore/net/jsoncookie.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer copying wapitiCore/wappalyzer/wappalyzer.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer copying wapitiCore/wappalyzer/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser copying wapitiCore/net/jsparser/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser copying wapitiCore/net/jsparser/jsparser3.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser copying wapitiCore/net/jsparser/pull_jsparser3.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_htaccess.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_redirect.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_nikto.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_wapp.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_csrf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_shellshock.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_xss_basics.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_methods.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_csp.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_crlf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_ssrf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_file.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_exec.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_sql.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_backup.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_xss_advanced.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_xxe.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_blindsql.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mod_buster.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack copying tests/attack/test_mutator.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint copying tests/endpoint/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint copying tests/endpoint/test_endpoint.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload copying tests/payload/test_payload_reader.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload copying tests/payload/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_html_formaction.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_html_parser.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_xss_utils.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_http_parser.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_html_forms.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_js_parser.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers copying tests/parsers/test_json_parser.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web copying tests/web/test_network_issues.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web copying tests/web/test_explorer.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web copying tests/web/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web copying tests/web/test_persister.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web copying tests/web/test_scope.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web copying tests/web/test_request.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli copying tests/cli/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli copying tests/cli/test_options.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli running egg_info writing wapiti3.egg-info/PKG-INFO writing dependency_links to wapiti3.egg-info/dependency_links.txt writing entry points to wapiti3.egg-info/entry_points.txt writing requirements to wapiti3.egg-info/requires.txt writing top-level names to wapiti3.egg-info/top_level.txt reading manifest file 'wapiti3.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' warning: no previously-included files found matching 'wapitiCore/language_sources/*.sh' warning: no previously-included files found matching 'wapitiCore/language_sources/file_list.txt' writing manifest file 'wapiti3.egg-info/SOURCES.txt' creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/backupPayloads.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/blindSQLPayloads.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/busterPayloads.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/execPayloads.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/fileHandlingPayloads.ini -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/incorrectMessage.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/passwords.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/successMessage.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/users.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/xssPayloads.ini -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks copying wapitiCore/data/attacks/xxePayloads.ini -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/de creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/de/LC_MESSAGES copying wapitiCore/data/language/de/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/de/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/en creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/en/LC_MESSAGES copying wapitiCore/data/language/en/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/en/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/es creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/es/LC_MESSAGES copying wapitiCore/data/language/es/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/es/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/fr creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/fr/LC_MESSAGES copying wapitiCore/data/language/fr/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/fr/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/ms creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/ms/LC_MESSAGES copying wapitiCore/data/language/ms/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/ms/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/pt creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/pt/LC_MESSAGES copying wapitiCore/data/language/pt/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/pt/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/zh creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/zh/LC_MESSAGES copying wapitiCore/data/language/zh/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/zh/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/de.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/en.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/es.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/fr.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/ms.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/pt.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/template.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources copying wapitiCore/language_sources/zh.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template copying wapitiCore/report_template/logo_clear.png -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template copying wapitiCore/report_template/report.html -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/css copying wapitiCore/report_template/css/kube.min.css -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/css copying wapitiCore/report_template/css/master.css -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/css running build_scripts creating build creating build/scripts-3.9 copying and adjusting bin/wapiti -> build/scripts-3.9 copying and adjusting bin/wapiti-getcookie -> build/scripts-3.9 changing mode of build/scripts-3.9/wapiti from 644 to 755 changing mode of build/scripts-3.9/wapiti-getcookie from 644 to 755 make[1]: Leaving directory '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg' debian/rules override_dh_auto_test make[1]: Entering directory '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg' dh_auto_test || true I: pybuild base:232: cd /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build; python3.9 -m pytest tests ============================= test session starts ============================== platform linux -- Python 3.9.1+, pytest-6.0.2, py-1.10.0, pluggy-0.13.0 rootdir: /build/wapiti-otlTNx/wapiti-3.0.4+dfsg collected 118 items tests/attack/test_mod_backup.py . [ 0%] tests/attack/test_mod_blindsql.py EEEE [ 4%] tests/attack/test_mod_buster.py . [ 5%] tests/attack/test_mod_crlf.py . [ 5%] tests/attack/test_mod_csp.py ... [ 8%] tests/attack/test_mod_csrf.py E [ 9%] tests/attack/test_mod_exec.py EEE [ 11%] tests/attack/test_mod_file.py EEEEEE [ 16%] tests/attack/test_mod_htaccess.py . [ 17%] tests/attack/test_mod_methods.py . [ 18%] tests/attack/test_mod_nikto.py F [ 19%] tests/attack/test_mod_redirect.py EE [ 21%] tests/attack/test_mod_shellshock.py . [ 22%] tests/attack/test_mod_sql.py ... [ 24%] tests/attack/test_mod_ssrf.py . [ 25%] tests/attack/test_mod_wapp.py .FFFFFFF [ 32%] tests/attack/test_mod_xss_advanced.py EEEEEEEEEEEEEEEEEE [ 47%] tests/attack/test_mod_xss_basics.py . [ 48%] tests/attack/test_mod_xxe.py EEEEEEE [ 54%] tests/attack/test_mutator.py .. [ 55%] tests/cli/test_options.py . [ 56%] tests/endpoint/test_endpoint.py EEE [ 59%] tests/parsers/test_html_formaction.py F [ 60%] tests/parsers/test_html_forms.py F. [ 61%] tests/parsers/test_html_parser.py FFFFFFFFF [ 69%] tests/parsers/test_http_parser.py . [ 70%] tests/parsers/test_js_parser.py F.. [ 72%] tests/parsers/test_json_parser.py . [ 73%] tests/parsers/test_xss_utils.py .................. [ 88%] tests/payload/test_payload_reader.py . [ 89%] tests/web/test_explorer.py EE [ 91%] tests/web/test_network_issues.py EE [ 93%] tests/web/test_persister.py ..F. [ 96%] tests/web/test_request.py F. [ 98%] tests/web/test_scope.py .. [100%] ==================================== ERRORS ==================================== __________________ ERROR at setup of test_blindsql_detection ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65082", "-a", "-t", test_directory]) tests/attack/test_mod_blindsql.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65082', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ________________ ERROR at setup of test_blindsql_false_positive ________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65082", "-a", "-t", test_directory]) tests/attack/test_mod_blindsql.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65082', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _____________ ERROR at setup of test_false_positive_request_count ______________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65082", "-a", "-t", test_directory]) tests/attack/test_mod_blindsql.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65082', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ______________ ERROR at setup of test_true_positive_request_count ______________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65082", "-a", "-t", test_directory]) tests/attack/test_mod_blindsql.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65082', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ______________________ ERROR at setup of test_csrf_cases _______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/csrf/") > proc = Popen(["php", "-S", "127.0.0.1:65086", "-a", "-t", test_directory]) tests/attack/test_mod_csrf.py:43: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65086', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/csrf/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ______________________ ERROR at setup of test_whole_stuff ______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65083", "-a", "-t", test_directory]) tests/attack/test_mod_exec.py:47: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65083', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _______________________ ERROR at setup of test_detection _______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65083", "-a", "-t", test_directory]) tests/attack/test_mod_exec.py:47: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65083', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ____________________ ERROR at setup of test_blind_detection ____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65083", "-a", "-t", test_directory]) tests/attack/test_mod_exec.py:47: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65083', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError __________________ ERROR at setup of test_inclusion_detection __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65085", "-a", "-t", test_directory]) tests/attack/test_mod_file.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65085', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ________________ ERROR at setup of test_warning_false_positive _________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65085", "-a", "-t", test_directory]) tests/attack/test_mod_file.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65085', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _______________________ ERROR at setup of test_no_crash ________________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65085", "-a", "-t", test_directory]) tests/attack/test_mod_file.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65085', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ______________ ERROR at setup of test_prefix_and_suffix_detection ______________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65085", "-a", "-t", test_directory]) tests/attack/test_mod_file.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65085', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _______________ ERROR at setup of test_warning_false_postitives ________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65085", "-a", "-t", test_directory]) tests/attack/test_mod_file.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65085', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError __________________ ERROR at setup of test_warning_postitives ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65085", "-a", "-t", test_directory]) tests/attack/test_mod_file.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65085', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError __________________ ERROR at setup of test_redirect_detection ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", test_directory]) tests/attack/test_mod_redirect.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ______________________ ERROR at setup of test_whole_stuff ______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", test_directory]) tests/attack/test_mod_redirect.py:41: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _________________ ERROR at setup of test_title_false_positive __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ____________________ ERROR at setup of test_title_positive _____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _________________ ERROR at setup of test_script_filter_bypass __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ___________________ ERROR at setup of test_attr_quote_escape ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _______________ ERROR at setup of test_attr_double_quote_escape ________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ______________________ ERROR at setup of test_attr_escape ______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ____________________ ERROR at setup of test_tag_name_escape ____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ________________ ERROR at setup of test_partial_tag_name_escape ________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _________________ ERROR at setup of test_xss_inside_tag_input __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError __________________ ERROR at setup of test_xss_inside_tag_link __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ________________ ERROR at setup of test_xss_uppercase_no_script ________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ___________________ ERROR at setup of test_frame_src_escape ____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError __________________ ERROR at setup of test_frame_src_no_escape __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError __________________ ERROR at setup of test_bad_separator_used ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ___________________ ERROR at setup of test_escape_with_style ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError __________________ ERROR at setup of test_rare_tag_and_event ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError __________________ ERROR at setup of test_xss_with_strong_csp __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ___________________ ERROR at setup of test_xss_with_weak_csp ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/xss/") > proc = Popen(["php", "-S", "127.0.0.1:65081", "-a", "-t", test_directory]) tests/attack/test_mod_xss_advanced.py:42: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65081', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/xss/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ______________________ ERROR at setup of test_direct_body ______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _____________________ ERROR at setup of test_direct_param ______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError __________________ ERROR at setup of test_direct_query_string __________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ___________________ ERROR at setup of test_out_of_band_body ____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ___________________ ERROR at setup of test_out_of_band_param ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _______________ ERROR at setup of test_out_of_band_query_string ________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _____________________ ERROR at setup of test_direct_upload _____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65084", "-a", "-t", test_directory]) tests/attack/test_mod_xxe.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65084', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _________________________ ERROR at setup of test_ssrf __________________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) endpoint_directory = os.path.join(base_dir, "..", "endpoint") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", endpoint_directory]) tests/endpoint/test_endpoint.py:23: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../endpoint'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ________________________ ERROR at setup of test_xxe_dtd ________________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) endpoint_directory = os.path.join(base_dir, "..", "endpoint") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", endpoint_directory]) tests/endpoint/test_endpoint.py:23: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../endpoint'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _______________________ ERROR at setup of test_xxe_store _______________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) endpoint_directory = os.path.join(base_dir, "..", "endpoint") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", endpoint_directory]) tests/endpoint/test_endpoint.py:23: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../endpoint'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError _______________________ ERROR at setup of test_qs_limit ________________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/explorer/") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", test_directory]) tests/web/test_explorer.py:17: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/explorer/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError __________________ ERROR at setup of test_explorer_filtering ___________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/explorer/") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", test_directory]) tests/web/test_explorer.py:17: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/explorer/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ____________________ ERROR at setup of test_chunked_timeout ____________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", test_directory]) tests/web/test_network_issues.py:18: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError ________________________ ERROR at setup of test_timeout ________________________ @pytest.fixture(autouse=True) def run_around_tests(): base_dir = os.path.dirname(sys.modules["wapitiCore"].__file__) test_directory = os.path.join(base_dir, "..", "tests/data/") > proc = Popen(["php", "-S", "127.0.0.1:65080", "-a", "-t", test_directory]) tests/web/test_network_issues.py:18: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.9/subprocess.py:951: in __init__ self._execute_child(args, executable, preexec_fn, close_fds, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = args = ['php', '-S', '127.0.0.1:65080', '-a', '-t', '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/../tests/data/'] executable = b'php', preexec_fn = None, close_fds = True, pass_fds = () cwd = None, env = None, startupinfo = None, creationflags = 0, shell = False p2cread = -1, p2cwrite = -1, c2pread = -1, c2pwrite = -1, errread = -1 errwrite = -1, restore_signals = True, gid = None, gids = None, uid = None umask = -1, start_new_session = False def _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, gid, gids, uid, umask, start_new_session): """Execute program (POSIX version)""" if isinstance(args, (str, bytes)): args = [args] elif isinstance(args, os.PathLike): if shell: raise TypeError('path-like args is not allowed when ' 'shell is true') args = [args] else: args = list(args) if shell: # On Android the default shell is at '/system/bin/sh'. unix_shell = ('/system/bin/sh' if hasattr(sys, 'getandroidapilevel') else '/bin/sh') args = [unix_shell, "-c"] + args if executable: args[0] = executable if executable is None: executable = args[0] sys.audit("subprocess.Popen", executable, args, cwd, env) if (_USE_POSIX_SPAWN and os.path.dirname(executable) and preexec_fn is None and not close_fds and not pass_fds and cwd is None and (p2cread == -1 or p2cread > 2) and (c2pwrite == -1 or c2pwrite > 2) and (errwrite == -1 or errwrite > 2) and not start_new_session and gid is None and gids is None and uid is None and umask < 0): self._posix_spawn(args, executable, env, restore_signals, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) return orig_executable = executable # For transferring possible exec failure from child to parent. # Data format: "exception name:hex errno:description" # Pickle is not used; it is complex and involves memory allocation. errpipe_read, errpipe_write = os.pipe() # errpipe_write must not be in the standard io 0, 1, or 2 fd range. low_fds_to_close = [] while errpipe_write < 3: low_fds_to_close.append(errpipe_write) errpipe_write = os.dup(errpipe_write) for low_fd in low_fds_to_close: os.close(low_fd) try: try: # We must avoid complex work that could involve # malloc or free in the child process to avoid # potential deadlocks, thus we do all this here. # and pass it to fork_exec() if env is not None: env_list = [] for k, v in env.items(): k = os.fsencode(k) if b'=' in k: raise ValueError("illegal environment variable name") env_list.append(k + b'=' + os.fsencode(v)) else: env_list = None # Use execv instead of execve. executable = os.fsencode(executable) if os.path.dirname(executable): executable_list = (executable,) else: # This matches the behavior of os._execvpe(). executable_list = tuple( os.path.join(os.fsencode(dir), executable) for dir in os.get_exec_path(env)) fds_to_keep = set(pass_fds) fds_to_keep.add(errpipe_write) self.pid = _posixsubprocess.fork_exec( args, executable_list, close_fds, tuple(sorted(map(int, fds_to_keep))), cwd, env_list, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, errpipe_read, errpipe_write, restore_signals, start_new_session, gid, gids, uid, umask, preexec_fn) self._child_created = True finally: # be sure the FD is closed no matter what os.close(errpipe_write) self._close_pipe_fds(p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite) # Wait for exec to fail or succeed; possibly raising an # exception (limited in size) errpipe_data = bytearray() while True: part = os.read(errpipe_read, 50000) errpipe_data += part if not part or len(errpipe_data) > 50000: break finally: # be sure the FD is closed no matter what os.close(errpipe_read) if errpipe_data: try: pid, sts = os.waitpid(self.pid, 0) if pid == self.pid: self._handle_exitstatus(sts) else: self.returncode = sys.maxsize except ChildProcessError: pass try: exception_name, hex_errno, err_msg = ( errpipe_data.split(b':', 2)) # The encoding here should match the encoding # written in by the subprocess implementations # like _posixsubprocess err_msg = err_msg.decode() except ValueError: exception_name = b'SubprocessError' hex_errno = b'0' err_msg = 'Bad exception data from child: {!r}'.format( bytes(errpipe_data)) child_exception_type = getattr( builtins, exception_name.decode('ascii'), SubprocessError) if issubclass(child_exception_type, OSError) and hex_errno: errno_num = int(hex_errno, 16) child_exec_never_called = (err_msg == "noexec") if child_exec_never_called: err_msg = "" # The error must be from chdir(cwd). err_filename = cwd else: err_filename = orig_executable if errno_num != 0: err_msg = os.strerror(errno_num) > raise child_exception_type(errno_num, err_msg, err_filename) E FileNotFoundError: [Errno 2] No such file or directory: 'php' /usr/lib/python3.9/subprocess.py:1823: FileNotFoundError =================================== FAILURES =================================== _______________________________ test_whole_stuff _______________________________ @responses.activate def test_whole_stuff(): # Test attacking all kind of parameter without crashing responses.add_passthru("https://raw.githubusercontent.com/wapiti-scanner/nikto/master/program/databases/db_tests") responses.add( responses.GET, url="http://perdu.com/cgi-bin/a1disp3.cgi?../../../../../../../../../../etc/passwd", body="root:0:0:", ) responses.add( responses.GET, url=re.compile(r"http://perdu.com/*"), body="Not found", status=404 ) persister = FakePersister() request = Request("http://perdu.com/") request.path_id = 1 request.status = 200 request.set_headers({"content-type": "text/html"}) persister.requests.append(request) crawler = Crawler("http://perdu.com/", timeout=1) options = {"timeout": 10, "level": 2} logger = Mock() module = mod_nikto(crawler, persister, logger, options) module.verbose = 2 module.do_get = True for __ in module.attack(): pass > assert len(persister.vulnerabilities) == 1 E assert 0 == 1 E + where 0 = len([]) E + where [] = .vulnerabilities tests/attack/test_mod_nikto.py:79: AssertionError ______________________________ test_url_detection ______________________________ @responses.activate def test_url_detection(): # Test if application is detected using its url regex responses.add( responses.GET, url="http://perdu.com/owa/auth/logon.aspx", body="Vous Etes Perdu ?

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\
    * <----- vous êtes ici
" ) persister = FakePersister() request = Request("http://perdu.com/owa/auth/logon.aspx") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com/") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:99: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com/owa/auth/logon.aspx (0) [Errno 2] No such file or directory: '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. _____________________________ test_html_detection ______________________________ @responses.activate def test_html_detection(): # Test if application is detected using its html regex responses.add( responses.GET, url="http://perdu.com/", body="FishEye 2.8.4 \

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\ " ) persister = FakePersister() request = Request("http://perdu.com/") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com/") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:131: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com/ (0) [Errno 2] No such file or directory: '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. ____________________________ test_script_detection _____________________________ @responses.activate def test_script_detection(): # Test if application is detected using its script regex responses.add( responses.GET, url="http://perdu.com/", body="Vous Etes Perdu ?

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\
    * <----- vous êtes ici
\ \ " ) persister = FakePersister() request = Request("http://perdu.com/") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com/") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:164: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com/ (0) [Errno 2] No such file or directory: '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. ____________________________ test_cookies_detection ____________________________ @responses.activate def test_cookies_detection(): # Test if application is detected using its cookies regex responses.add( responses.GET, url="http://perdu.com/", body="Vous Etes Perdu ?

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\
    * <----- vous êtes ici
\ ", headers={"Set-Cookie": "ci_csrf_token=4.1"} ) persister = FakePersister() request = Request("http://perdu.com/") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com/") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:197: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com/ (0) [Errno 2] No such file or directory: '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. ____________________________ test_headers_detection ____________________________ @responses.activate def test_headers_detection(): # Test if application is detected using its headers regex responses.add( responses.GET, url="http://perdu.com/", body="Vous Etes Perdu ?

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\
    * <----- vous êtes ici
\ ", headers={"Server": "Cherokee/1.3.4"} ) persister = FakePersister() request = Request("http://perdu.com/") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com/") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:230: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com/ (0) [Errno 2] No such file or directory: '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. _____________________________ test_meta_detection ______________________________ @responses.activate def test_meta_detection(): # Test if application is detected using its meta regex responses.add( responses.GET, url="http://perdu.com/", body="Vous Etes Perdu ? \ \

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\
    * <----- vous êtes ici
\ " ) persister = FakePersister() request = Request("http://perdu.com/") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com/") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:264: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com/ (0) [Errno 2] No such file or directory: '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. ____________________________ test_implies_detection ____________________________ @responses.activate def test_implies_detection(): # Test for implied applications responses.add( responses.GET, url="http://perdu.com/", body="Vous Etes Perdu ?

Perdu sur l'Internet ?

\

Pas de panique, on va vous aider

\
    * <----- vous êtes ici
\ ", headers={"X-Generator": "Backdrop CMS 4.5"} ) persister = FakePersister() request = Request("http://perdu.com") request.path_id = 1 persister.requests.append(request) crawler = Crawler("http://perdu.com") options = {"timeout": 10, "level": 2} logger = Mock() module = mod_wapp(crawler, persister, logger, options) module.verbose = 2 for __ in module.attack(): pass > assert persister.additionals E assert [] E + where [] = .additionals tests/attack/test_mod_wapp.py:297: AssertionError ----------------------------- Captured stdout call ----------------------------- Problem with local wapp database. Downloading from the web... Error downloading wapp database. [+] GET http://perdu.com (0) [Errno 2] No such file or directory: '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/.wapiti/config/apps.json' Try using --store-session option, or update apps.json using --update option. _______________________________ test_formactions _______________________________ @responses.activate def test_formactions(): > with open("tests/data/formactions.html") as form_action: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/formactions.html' tests/parsers/test_html_formaction.py:9: FileNotFoundError __________________________________ test_forms __________________________________ @responses.activate def test_forms(): > with open("tests/data/forms.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/forms.html' tests/parsers/test_html_forms.py:9: FileNotFoundError ______________________________ test_absolute_root ______________________________ @responses.activate def test_absolute_root(): > with open("tests/data/absolute_root_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/absolute_root_links.html' tests/parsers/test_html_parser.py:9: FileNotFoundError ______________________________ test_relative_root ______________________________ @responses.activate def test_relative_root(): > with open("tests/data/relative_root_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/relative_root_links.html' tests/parsers/test_html_parser.py:25: FileNotFoundError _____________________________ test_relative_links ______________________________ @responses.activate def test_relative_links(): > with open("tests/data/relative_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/relative_links.html' tests/parsers/test_html_parser.py:42: FileNotFoundError _______________________________ test_other_links _______________________________ @responses.activate def test_other_links(): > with open("tests/data/other_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/other_links.html' tests/parsers/test_html_parser.py:72: FileNotFoundError _______________________________ test_extra_links _______________________________ @responses.activate def test_extra_links(): > with open("tests/data/extra_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/extra_links.html' tests/parsers/test_html_parser.py:106: FileNotFoundError __________________________________ test_meta ___________________________________ @responses.activate def test_meta(): > with open("tests/data/meta.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/meta.html' tests/parsers/test_html_parser.py:144: FileNotFoundError ___________________________ test_base_relative_links ___________________________ @responses.activate def test_base_relative_links(): > with open("tests/data/base_relative_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/base_relative_links.html' tests/parsers/test_html_parser.py:166: FileNotFoundError ____________________________ test_base_extra_links _____________________________ @responses.activate def test_base_extra_links(): > with open("tests/data/base_extra_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/base_extra_links.html' tests/parsers/test_html_parser.py:200: FileNotFoundError ____________________________ test_base_other_links _____________________________ @responses.activate def test_base_other_links(): > with open("tests/data/base_other_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/base_other_links.html' tests/parsers/test_html_parser.py:237: FileNotFoundError ________________________________ test_js_parser ________________________________ @responses.activate def test_js_parser(): > with open("tests/data/js_links.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/js_links.html' tests/parsers/test_js_parser.py:10: FileNotFoundError _____________________________ test_persister_forms _____________________________ @responses.activate def test_persister_forms(): > with open("tests/data/forms.html") as data_body: E FileNotFoundError: [Errno 2] No such file or directory: 'tests/data/forms.html' tests/web/test_persister.py:139: FileNotFoundError _____________________________ test_request_object ______________________________ self = def _new_conn(self): """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ extra_kw = {} if self.source_address: extra_kw["source_address"] = self.source_address if self.socket_options: extra_kw["socket_options"] = self.socket_options try: > conn = connection.create_connection( (self._dns_host, self.port), self.timeout, **extra_kw ) /usr/lib/python3/dist-packages/urllib3/connection.py:169: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('127.0.0.1', 9), timeout = 10.0, source_address = None socket_options = None def create_connection( address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, source_address=None, socket_options=None, ): """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: return six.raise_from( LocationParseError(u"'%s', label empty or too long" % host), None ) for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) sock.connect(sa) return sock except socket.error as e: err = e if sock is not None: sock.close() sock = None if err is not None: > raise err /usr/lib/python3/dist-packages/urllib3/util/connection.py:96: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ address = ('127.0.0.1', 9), timeout = 10.0, source_address = None socket_options = None def create_connection( address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, source_address=None, socket_options=None, ): """Connect to *address* and return the socket object. Convenience function. Connect to *address* (a 2-tuple ``(host, port)``) and return the socket object. Passing the optional *timeout* parameter will set the timeout on the socket instance before attempting to connect. If no *timeout* is supplied, the global default timeout setting returned by :func:`socket.getdefaulttimeout` is used. If *source_address* is set it must be a tuple of (host, port) for the socket to bind as a source address before making the connection. An host of '' or port 0 tells the OS to use the default. """ host, port = address if host.startswith("["): host = host.strip("[]") err = None # Using the value from allowed_gai_family() in the context of getaddrinfo lets # us select whether to work with IPv4 DNS records, IPv6 records, or both. # The original create_connection function always returns all records. family = allowed_gai_family() try: host.encode("idna") except UnicodeError: return six.raise_from( LocationParseError(u"'%s', label empty or too long" % host), None ) for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM): af, socktype, proto, canonname, sa = res sock = None try: sock = socket.socket(af, socktype, proto) # If provided, set socket level options before connecting. _set_socket_options(sock, socket_options) if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: sock.settimeout(timeout) if source_address: sock.bind(source_address) > sock.connect(sa) E ConnectionRefusedError: [Errno 111] Connection refused /usr/lib/python3/dist-packages/urllib3/util/connection.py:86: ConnectionRefusedError During handling of the above exception, another exception occurred: self = method = 'POST', url = 'http://httpbin.org/post?a=b', body = '{"z": 1, "a": 2}' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0', 'Accept-Encoding': 'gzip, deflate,...8', 'Connection': 'keep-alive', 'Accept-Language': 'en-US', 'Content-Type': 'application/json', 'Content-Length': '16'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=10.0, read=10.0, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None response_kw = {'decode_content': False, 'preload_content': False} parsed_url = Url(scheme='http', auth=None, host='httpbin.org', port=None, path='/post', query='a=b', fragment=None) destination_scheme = 'http', conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( self, method, url, body=None, headers=None, retries=None, redirect=True, assert_same_host=True, timeout=_Default, pool_timeout=None, release_conn=None, chunked=False, body_pos=None, **response_kw ): """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method provided by :class:`.RequestMethods`, such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. Pass ``None`` to retry until you receive a response. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``response_kw.get('preload_content', True)``. :param chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. :param \\**response_kw: Additional parameters are passed to :meth:`urllib3.response.HTTPResponse.from_httplib` """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = response_kw.get("preload_content", True) # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = six.ensure_str(_encode_target(url)) else: url = six.ensure_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() headers.update(self.proxy_headers) # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout is_new_proxy_conn = self.proxy is not None and not getattr( conn, "sock", None ) if is_new_proxy_conn and http_tunnel_required: self._prepare_proxy(conn) # Make the request on the httplib connection object. > httplib_response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, ) /usr/lib/python3/dist-packages/urllib3/connectionpool.py:699: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = conn = method = 'POST', url = 'http://httpbin.org/post?a=b' timeout = Timeout(connect=10.0, read=10.0, total=None), chunked = False httplib_request_kw = {'body': '{"z": 1, "a": 2}', 'headers': {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/4...', 'Connection': 'keep-alive', 'Accept-Language': 'en-US', 'Content-Type': 'application/json', 'Content-Length': '16'}} timeout_obj = Timeout(connect=10.0, read=10.0, total=None) def _make_request( self, conn, method, url, timeout=_Default, chunked=False, **httplib_request_kw ): """ Perform a request on a given urllib connection object taken from our pool. :param conn: a connection from one of our connection pools :param timeout: Socket timeout in seconds for the request. This can be a float or integer, which will set the same timeout value for the socket connect and the socket read, or an instance of :class:`urllib3.util.Timeout`, which gives you more fine-grained control over your timeouts. """ self.num_requests += 1 timeout_obj = self._get_timeout(timeout) timeout_obj.start_connect() conn.timeout = timeout_obj.connect_timeout # Trigger any extra validation we need to do. try: self._validate_conn(conn) except (SocketTimeout, BaseSSLError) as e: # Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout. self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) raise # conn.request() calls http.client.*.request, not the method in # urllib3.request. It also calls makefile (recv) on the socket. try: if chunked: conn.request_chunked(method, url, **httplib_request_kw) else: > conn.request(method, url, **httplib_request_kw) /usr/lib/python3/dist-packages/urllib3/connectionpool.py:394: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = method = 'POST', url = 'http://httpbin.org/post?a=b', body = '{"z": 1, "a": 2}' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0', 'Accept-Encoding': 'gzip, deflate,...8', 'Connection': 'keep-alive', 'Accept-Language': 'en-US', 'Content-Type': 'application/json', 'Content-Length': '16'} def request(self, method, url, body=None, headers=None): if headers is None: headers = {} else: # Avoid modifying the headers passed into .request() headers = headers.copy() if "user-agent" not in (six.ensure_str(k.lower()) for k in headers): headers["User-Agent"] = _get_default_user_agent() > super(HTTPConnection, self).request(method, url, body=body, headers=headers) /usr/lib/python3/dist-packages/urllib3/connection.py:234: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = method = 'POST', url = 'http://httpbin.org/post?a=b', body = '{"z": 1, "a": 2}' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0', 'Accept-Encoding': 'gzip, deflate,...8', 'Connection': 'keep-alive', 'Accept-Language': 'en-US', 'Content-Type': 'application/json', 'Content-Length': '16'} def request(self, method, url, body=None, headers={}, *, encode_chunked=False): """Send a complete request to the server.""" > self._send_request(method, url, body, headers, encode_chunked) /usr/lib/python3.9/http/client.py:1255: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = method = 'POST', url = 'http://httpbin.org/post?a=b', body = b'{"z": 1, "a": 2}' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0', 'Accept-Encoding': 'gzip, deflate,...8', 'Connection': 'keep-alive', 'Accept-Language': 'en-US', 'Content-Type': 'application/json', 'Content-Length': '16'} encode_chunked = False def _send_request(self, method, url, body, headers, encode_chunked): # Honor explicitly requested Host: and Accept-Encoding: headers. header_names = frozenset(k.lower() for k in headers) skips = {} if 'host' in header_names: skips['skip_host'] = 1 if 'accept-encoding' in header_names: skips['skip_accept_encoding'] = 1 self.putrequest(method, url, **skips) # chunked encoding will happen if HTTP/1.1 is used and either # the caller passes encode_chunked=True or the following # conditions hold: # 1. content-length has not been explicitly set # 2. the body is a file or iterable, but not a str or bytes-like # 3. Transfer-Encoding has NOT been explicitly set by the caller if 'content-length' not in header_names: # only chunk body if not explicitly set for backwards # compatibility, assuming the client code is already handling the # chunking if 'transfer-encoding' not in header_names: # if content-length cannot be automatically determined, fall # back to chunked encoding encode_chunked = False content_length = self._get_content_length(body, method) if content_length is None: if body is not None: if self.debuglevel > 0: print('Unable to determine size of %r' % body) encode_chunked = True self.putheader('Transfer-Encoding', 'chunked') else: self.putheader('Content-Length', str(content_length)) else: encode_chunked = False for hdr, value in headers.items(): self.putheader(hdr, value) if isinstance(body, str): # RFC 2616 Section 3.7.1 says that text default has a # default charset of iso-8859-1. body = _encode(body, 'body') > self.endheaders(body, encode_chunked=encode_chunked) /usr/lib/python3.9/http/client.py:1301: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = message_body = b'{"z": 1, "a": 2}' def endheaders(self, message_body=None, *, encode_chunked=False): """Indicate that the last header line has been sent to the server. This method sends the request to the server. The optional message_body argument can be used to pass a message body associated with the request. """ if self.__state == _CS_REQ_STARTED: self.__state = _CS_REQ_SENT else: raise CannotSendHeader() > self._send_output(message_body, encode_chunked=encode_chunked) /usr/lib/python3.9/http/client.py:1250: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = message_body = b'{"z": 1, "a": 2}', encode_chunked = False def _send_output(self, message_body=None, encode_chunked=False): """Send the currently buffered request and clear the buffer. Appends an extra \\r\\n to the buffer. A message_body may be specified, to be appended to the request. """ self._buffer.extend((b"", b"")) msg = b"\r\n".join(self._buffer) del self._buffer[:] > self.send(msg) /usr/lib/python3.9/http/client.py:1010: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = data = b'POST http://httpbin.org/post?a=b HTTP/1.1\r\nHost: httpbin.org\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:45.0) ....8\r\nConnection: keep-alive\r\nAccept-Language: en-US\r\nContent-Type: application/json\r\nContent-Length: 16\r\n\r\n' def send(self, data): """Send `data' to the server. ``data`` can be a string object, a bytes object, an array object, a file-like object that supports a .read() method, or an iterable object. """ if self.sock is None: if self.auto_open: > self.connect() /usr/lib/python3.9/http/client.py:950: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def connect(self): > conn = self._new_conn() /usr/lib/python3/dist-packages/urllib3/connection.py:200: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = def _new_conn(self): """Establish a socket connection and set nodelay settings on it. :return: New socket connection. """ extra_kw = {} if self.source_address: extra_kw["source_address"] = self.source_address if self.socket_options: extra_kw["socket_options"] = self.socket_options try: conn = connection.create_connection( (self._dns_host, self.port), self.timeout, **extra_kw ) except SocketTimeout: raise ConnectTimeoutError( self, "Connection to %s timed out. (connect timeout=%s)" % (self.host, self.timeout), ) except SocketError as e: > raise NewConnectionError( self, "Failed to establish a new connection: %s" % e ) E urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno 111] Connection refused /usr/lib/python3/dist-packages/urllib3/connection.py:181: NewConnectionError During handling of the above exception, another exception occurred: self = request = , stream = False timeout = Timeout(connect=10.0, read=10.0, total=None), verify = False cert = None proxies = OrderedDict([('no', 'localhost'), ('https', 'https://127.0.0.1:9/'), ('http', 'http://127.0.0.1:9/')]) def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection(request.url, proxies) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers(request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies) chunked = not (request.body is None or 'Content-Length' in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError as e: # this may raise a string formatting error. err = ("Invalid timeout {}. Pass a (connect, read) " "timeout tuple, or a single float to set " "both timeouts to the same value".format(timeout)) raise ValueError(err) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: if not chunked: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout ) /usr/lib/python3/dist-packages/requests/adapters.py:439: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = method = 'POST', url = 'http://httpbin.org/post?a=b', body = '{"z": 1, "a": 2}' headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0', 'Accept-Encoding': 'gzip, deflate,...8', 'Connection': 'keep-alive', 'Accept-Language': 'en-US', 'Content-Type': 'application/json', 'Content-Length': '16'} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) redirect = False, assert_same_host = False timeout = Timeout(connect=10.0, read=10.0, total=None), pool_timeout = None release_conn = False, chunked = False, body_pos = None response_kw = {'decode_content': False, 'preload_content': False} parsed_url = Url(scheme='http', auth=None, host='httpbin.org', port=None, path='/post', query='a=b', fragment=None) destination_scheme = 'http', conn = None, release_this_conn = True http_tunnel_required = False, err = None, clean_exit = False def urlopen( self, method, url, body=None, headers=None, retries=None, redirect=True, assert_same_host=True, timeout=_Default, pool_timeout=None, release_conn=None, chunked=False, body_pos=None, **response_kw ): """ Get a connection from the pool and perform an HTTP request. This is the lowest level call for making a request, so you'll need to specify all the raw details. .. note:: More commonly, it's appropriate to use a convenience method provided by :class:`.RequestMethods`, such as :meth:`request`. .. note:: `release_conn` will only behave as expected if `preload_content=False` because we want to make `preload_content=False` the default behaviour someday soon without breaking backwards compatibility. :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. Pass ``None`` to retry until you receive a response. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param redirect: If True, automatically handle redirects (status codes 301, 302, 303, 307, 308). Each redirect counts as a retry. Disabling retries will disable redirect, too. :param assert_same_host: If ``True``, will make sure that the host of the pool requests is consistent else will raise HostChangedError. When ``False``, you can use the pool on an HTTP proxy and request foreign hosts. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param pool_timeout: If set and the pool is set to block=True, then this method will block for ``pool_timeout`` seconds and raise EmptyPoolError if no connection is available within the time period. :param release_conn: If False, then the urlopen call will not release the connection back into the pool once a response is received (but will release if you read the entire contents of the response such as when `preload_content=True`). This is useful if you're not preloading the response's content immediately. You will need to call ``r.release_conn()`` on the response ``r`` to return the connection back into the pool. If None, it takes the value of ``response_kw.get('preload_content', True)``. :param chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param int body_pos: Position to seek to in file-like body in the event of a retry or redirect. Typically this won't need to be set because urllib3 will auto-populate the value when needed. :param \\**response_kw: Additional parameters are passed to :meth:`urllib3.response.HTTPResponse.from_httplib` """ parsed_url = parse_url(url) destination_scheme = parsed_url.scheme if headers is None: headers = self.headers if not isinstance(retries, Retry): retries = Retry.from_int(retries, redirect=redirect, default=self.retries) if release_conn is None: release_conn = response_kw.get("preload_content", True) # Check host if assert_same_host and not self.is_same_host(url): raise HostChangedError(self, url, retries) # Ensure that the URL we're connecting to is properly encoded if url.startswith("/"): url = six.ensure_str(_encode_target(url)) else: url = six.ensure_str(parsed_url.url) conn = None # Track whether `conn` needs to be released before # returning/raising/recursing. Update this variable if necessary, and # leave `release_conn` constant throughout the function. That way, if # the function recurses, the original value of `release_conn` will be # passed down into the recursive call, and its value will be respected. # # See issue #651 [1] for details. # # [1] release_this_conn = release_conn http_tunnel_required = connection_requires_http_tunnel( self.proxy, self.proxy_config, destination_scheme ) # Merge the proxy headers. Only done when not using HTTP CONNECT. We # have to copy the headers dict so we can safely change it without those # changes being reflected in anyone else's copy. if not http_tunnel_required: headers = headers.copy() headers.update(self.proxy_headers) # Must keep the exception bound to a separate variable or else Python 3 # complains about UnboundLocalError. err = None # Keep track of whether we cleanly exited the except block. This # ensures we do proper cleanup in finally. clean_exit = False # Rewind body position, if needed. Record current position # for future rewinds in the event of a redirect/retry. body_pos = set_file_position(body, body_pos) try: # Request a connection from the queue. timeout_obj = self._get_timeout(timeout) conn = self._get_conn(timeout=pool_timeout) conn.timeout = timeout_obj.connect_timeout is_new_proxy_conn = self.proxy is not None and not getattr( conn, "sock", None ) if is_new_proxy_conn and http_tunnel_required: self._prepare_proxy(conn) # Make the request on the httplib connection object. httplib_response = self._make_request( conn, method, url, timeout=timeout_obj, body=body, headers=headers, chunked=chunked, ) # If we're going to release the connection in ``finally:``, then # the response doesn't need to know about the connection. Otherwise # it will also try to release it and we'll have a double-release # mess. response_conn = conn if not release_conn else None # Pass method to Response for length checking response_kw["request_method"] = method # Import httplib's response into our own wrapper object response = self.ResponseCls.from_httplib( httplib_response, pool=self, connection=response_conn, retries=retries, **response_kw ) # Everything went great! clean_exit = True except EmptyPoolError: # Didn't get a connection from the pool, no need to clean up clean_exit = True release_this_conn = False raise except ( TimeoutError, HTTPException, SocketError, ProtocolError, BaseSSLError, SSLError, CertificateError, ) as e: # Discard the connection for these exceptions. It will be # replaced during the next _get_conn() call. clean_exit = False if isinstance(e, (BaseSSLError, CertificateError)): e = SSLError(e) elif isinstance(e, (SocketError, NewConnectionError)) and self.proxy: e = ProxyError("Cannot connect to proxy.", e) elif isinstance(e, (SocketError, HTTPException)): e = ProtocolError("Connection aborted.", e) > retries = retries.increment( method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2] ) /usr/lib/python3/dist-packages/urllib3/connectionpool.py:755: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = Retry(total=0, connect=None, read=False, redirect=None, status=None) method = 'POST', url = 'http://httpbin.org/post?a=b', response = None error = ProxyError('Cannot connect to proxy.', NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused')) _pool = _stacktrace = def increment( self, method=None, url=None, response=None, error=None, _pool=None, _stacktrace=None, ): """Return a new Retry object with incremented retry counters. :param response: A response object, or None, if the server did not return a response. :type response: :class:`~urllib3.response.HTTPResponse` :param Exception error: An error encountered during the request, or None if the response was received successfully. :return: A new ``Retry`` object. """ if self.total is False and error: # Disabled, indicate to re-raise the error. raise six.reraise(type(error), error, _stacktrace) total = self.total if total is not None: total -= 1 connect = self.connect read = self.read redirect = self.redirect status_count = self.status other = self.other cause = "unknown" status = None redirect_location = None if error and self._is_connection_error(error): # Connect retry? if connect is False: raise six.reraise(type(error), error, _stacktrace) elif connect is not None: connect -= 1 elif error and self._is_read_error(error): # Read retry? if read is False or not self._is_method_retryable(method): raise six.reraise(type(error), error, _stacktrace) elif read is not None: read -= 1 elif error: # Other retry? if other is not None: other -= 1 elif response and response.get_redirect_location(): # Redirect retry? if redirect is not None: redirect -= 1 cause = "too many redirects" redirect_location = response.get_redirect_location() status = response.status else: # Incrementing because of a server error like a 500 in # status_forcelist and the given method is in the allowed_methods cause = ResponseError.GENERIC_ERROR if response and response.status: if status_count is not None: status_count -= 1 cause = ResponseError.SPECIFIC_ERROR.format(status_code=response.status) status = response.status history = self.history + ( RequestHistory(method, url, error, status, redirect_location), ) new_retry = self.new( total=total, connect=connect, read=read, redirect=redirect, status=status_count, other=other, history=history, ) if new_retry.is_exhausted(): > raise MaxRetryError(_pool, url, error or ResponseError(cause)) E urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=9): Max retries exceeded with url: http://httpbin.org/post?a=b (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))) /usr/lib/python3/dist-packages/urllib3/util/retry.py:573: MaxRetryError During handling of the above exception, another exception occurred: def test_request_object(): res1 = Request( "http://httpbin.org/post?var1=a&var2=b", post_params=[['post1', 'c'], ['post2', 'd']] ) res2 = Request( "http://httpbin.org/post?var1=a&var2=z", post_params=[['post1', 'c'], ['post2', 'd']] ) res3 = Request( "http://httpbin.org/post?var1=a&var2=b", post_params=[['post1', 'c'], ['post2', 'z']] ) res4 = Request( "http://httpbin.org/post?var1=a&var2=b", post_params=[['post1', 'c'], ['post2', 'd']] ) res5 = Request( "http://httpbin.org/post?var1=z&var2=b", post_params=[['post1', 'c'], ['post2', 'd']] ) res6 = Request( "http://httpbin.org/post?var3=z&var2=b", post_params=[['post1', 'c'], ['post2', 'd']] ) res7 = Request( "http://httpbin.org/post?var1=z&var2=b&var4=e", post_params=[['post1', 'c'], ['post2', 'd']] ) res8 = Request( "http://httpbin.org/post?var2=d&var1=z", post_params=[['post1', 'c'], ['post2', 'd']] ) res10 = Request( "http://httpbin.org/post?qs0", post_params=[['post1', 'c'], ['post2', 'd']] ) res11 = Request( "http://httpbin.org/post?qs1", post_params=[['post1', 'c'], ['post2', 'd']] ) res12 = Request( "http://httpbin.org/post?qs1", post_params=[['post1', 'c'], ['post2', 'd']], file_params=[['file1', ['fname1', 'content']], ['file2', ['fname2', 'content']]] ) res13 = Request("https://www.youtube.com/user/OneMinuteSilenceBand/videos") res14 = Request("https://www.youtube.com/user/OneMinuteSilenceBand/") res15 = Request("https://duckduckgo.com/") res16 = Request("https://duckduckgo.com/", post_params=[['q', 'Kung Fury']]) res17 = Request("http://example.com:8080/dir/?x=3") res18 = Request( "http://httpbin.org/get?a=1", get_params=[['get1', 'c'], ['get2', 'd']] ) assert res1 < res2 assert res2 > res3 assert res1 < res3 assert res1 == res4 assert hash(res1) == hash(res4) res4.link_depth = 5 assert hash(res1) == hash(res4) assert res1 != res2 assert res2 >= res1 assert res1 <= res3 assert res13.file_name == "videos" assert res10.path == "http://httpbin.org/post" assert res10.file_name == "post" # This one is important as it could break attacks on query string assert res10.url == "http://httpbin.org/post?qs0" assert res13.parent_dir == res14.url assert res15.is_root assert res15.parent_dir == res15.url assert res13.dir_name == res14.url assert res14.dir_name == res14.url assert res15.dir_name == res15.url assert res15 != res16 query_list = [res15] assert res16 not in query_list assert res17.dir_name == "http://example.com:8080/dir/" assert res18.url == "http://httpbin.org/get?get1=c&get2=d" assert res17.hostname == "example.com:8080" assert res1.encoded_get_keys == res8.encoded_get_keys assert res17.encoded_get_keys == "x" assert res16.encoded_get_keys == "" assert len(res12) == 5 assert res12.encoded_get_keys == "qs1" assert res5.hash_params == res8.hash_params assert res7.hash_params != res8.hash_params print("Tests were successful, now launching representations") print("=== Basic representation follows ===") print(res1) print("=== cURL representation follows ===") print(res1.curl_repr) print("=== HTTP representation follows ===") print(res1.http_repr()) print("=== POST parameters as an array ===") print(res1.post_params) print("=== POST keys encoded as string ===") print(res1.encoded_post_keys) print("=== Upload HTTP representation ===") print(res12.http_repr()) print("=== Upload basic representation ===") print(res12) print("=== Upload cURL representation ===") print(res12.curl_repr) print("=== HTTP GET keys as a tuple ===") print(res1.get_keys) print("=== HTTP POST keys as a tuple ===") print(res1.post_keys) print("=== HTTP files keys as a tuple ===") print(res12.file_keys) print('') json_req = Request( "http://httpbin.org/post?a=b", post_params=json.dumps({"z": 1, "a": 2}), enctype="application/json" ) crawler = Crawler("http://httpbin.org/") > page = crawler.send(json_req) tests/web/test_request.py:144: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ wapitiCore/net/crawler.py:490: in send page = self.post(resource, headers=headers, follow_redirects=follow_redirects) wapitiCore/net/crawler.py:123: in inner_wrapper raise exception wapitiCore/net/crawler.py:117: in inner_wrapper value = function(*args, **kwargs) wapitiCore/net/crawler.py:443: in post raise exception wapitiCore/net/crawler.py:427: in post response = self._session.post( /usr/lib/python3/dist-packages/requests/sessions.py:590: in post return self.request('POST', url, data=data, json=json, **kwargs) /usr/lib/python3/dist-packages/requests/sessions.py:542: in request resp = self.send(prep, **send_kwargs) /usr/lib/python3/dist-packages/requests/sessions.py:655: in send r = adapter.send(request, **kwargs) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = False timeout = Timeout(connect=10.0, read=10.0, total=None), verify = False cert = None proxies = OrderedDict([('no', 'localhost'), ('https', 'https://127.0.0.1:9/'), ('http', 'http://127.0.0.1:9/')]) def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection(request.url, proxies) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers(request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies) chunked = not (request.body is None or 'Content-Length' in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError as e: # this may raise a string formatting error. err = ("Invalid timeout {}. Pass a (connect, read) " "timeout tuple, or a single float to set " "both timeouts to the same value".format(timeout)) raise ValueError(err) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: if not chunked: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout ) # Send the request. else: if hasattr(conn, 'proxy_pool'): conn = conn.proxy_pool low_conn = conn._get_conn(timeout=DEFAULT_POOL_TIMEOUT) try: low_conn.putrequest(request.method, url, skip_accept_encoding=True) for header, value in request.headers.items(): low_conn.putheader(header, value) low_conn.endheaders() for i in request.body: low_conn.send(hex(len(i))[2:].encode('utf-8')) low_conn.send(b'\r\n') low_conn.send(i) low_conn.send(b'\r\n') low_conn.send(b'0\r\n\r\n') # Receive the response from the server try: # For Python 2.7, use buffering of HTTP responses r = low_conn.getresponse(buffering=True) except TypeError: # For compatibility with Python 3.3+ r = low_conn.getresponse() resp = HTTPResponse.from_httplib( r, pool=conn, connection=low_conn, preload_content=False, decode_content=False ) except: # If we hit any problems here, clean up the connection. # Then, reraise so that we can handle the actual exception. low_conn.close() raise except (ProtocolError, socket.error) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): > raise ProxyError(e, request=request) E requests.exceptions.ProxyError: HTTPConnectionPool(host='127.0.0.1', port=9): Max retries exceeded with url: http://httpbin.org/post?a=b (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))) /usr/lib/python3/dist-packages/requests/adapters.py:510: ProxyError ----------------------------- Captured stdout call ----------------------------- Tests were successful, now launching representations === Basic representation follows === POST http://httpbin.org/post?var1=a&var2=b (0) data: post1=c&post2=d === cURL representation follows === curl "http://httpbin.org/post?var1=a&var2=b" -d "post1=c&post2=d" === HTTP representation follows === POST /post?var1=a&var2=b HTTP/1.1 Host: httpbin.org Content-Type: application/x-www-form-urlencoded post1=c&post2=d === POST parameters as an array === [['post1', 'c'], ['post2', 'd']] === POST keys encoded as string === post1&post2 === Upload HTTP representation === POST /post?qs1 HTTP/1.1 Host: httpbin.org Content-Type: multipart/form-data; boundary=------------------------boundarystring ------------------------boundarystring Content-Disposition: form-data; name="post1" c ------------------------boundarystring Content-Disposition: form-data; name="post2" d ------------------------boundarystring Content-Disposition: form-data; name="file1"; filename="fname1" content ------------------------boundarystring Content-Disposition: form-data; name="file2"; filename="fname2" content ------------------------boundarystring-- === Upload basic representation === POST http://httpbin.org/post?qs1 (0) data: post1=c&post2=d files: file1=fname1&file2=fname2 === Upload cURL representation === curl "http://httpbin.org/post?qs1" -F "post1=c" -F "post2=d" -F "file1=@your_local_file;filename=fname1" -F "file2=@your_local_file;filename=fname2" === HTTP GET keys as a tuple === ('var1', 'var2') === HTTP POST keys as a tuple === ('post1', 'post2') === HTTP files keys as a tuple === ('file1', 'file2') =============================== warnings summary =============================== wapitiCore/language/language.py:62 /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/language.py:62: DeprecationWarning: parameter codeset is deprecated lan = gettext.translation( -- Docs: https://docs.pytest.org/en/stable/warnings.html =========================== short test summary info ============================ FAILED tests/attack/test_mod_nikto.py::test_whole_stuff - assert 0 == 1 FAILED tests/attack/test_mod_wapp.py::test_url_detection - assert [] FAILED tests/attack/test_mod_wapp.py::test_html_detection - assert [] FAILED tests/attack/test_mod_wapp.py::test_script_detection - assert [] FAILED tests/attack/test_mod_wapp.py::test_cookies_detection - assert [] FAILED tests/attack/test_mod_wapp.py::test_headers_detection - assert [] FAILED tests/attack/test_mod_wapp.py::test_meta_detection - assert [] FAILED tests/attack/test_mod_wapp.py::test_implies_detection - assert [] FAILED tests/parsers/test_html_formaction.py::test_formactions - FileNotFound... FAILED tests/parsers/test_html_forms.py::test_forms - FileNotFoundError: [Err... FAILED tests/parsers/test_html_parser.py::test_absolute_root - FileNotFoundEr... FAILED tests/parsers/test_html_parser.py::test_relative_root - FileNotFoundEr... FAILED tests/parsers/test_html_parser.py::test_relative_links - FileNotFoundE... FAILED tests/parsers/test_html_parser.py::test_other_links - FileNotFoundErro... FAILED tests/parsers/test_html_parser.py::test_extra_links - FileNotFoundErro... FAILED tests/parsers/test_html_parser.py::test_meta - FileNotFoundError: [Err... FAILED tests/parsers/test_html_parser.py::test_base_relative_links - FileNotF... FAILED tests/parsers/test_html_parser.py::test_base_extra_links - FileNotFoun... FAILED tests/parsers/test_html_parser.py::test_base_other_links - FileNotFoun... FAILED tests/parsers/test_js_parser.py::test_js_parser - FileNotFoundError: [... FAILED tests/web/test_persister.py::test_persister_forms - FileNotFoundError:... FAILED tests/web/test_request.py::test_request_object - requests.exceptions.P... ERROR tests/attack/test_mod_blindsql.py::test_blindsql_detection - FileNotFou... ERROR tests/attack/test_mod_blindsql.py::test_blindsql_false_positive - FileN... ERROR tests/attack/test_mod_blindsql.py::test_false_positive_request_count - ... ERROR tests/attack/test_mod_blindsql.py::test_true_positive_request_count - F... ERROR tests/attack/test_mod_csrf.py::test_csrf_cases - FileNotFoundError: [Er... ERROR tests/attack/test_mod_exec.py::test_whole_stuff - FileNotFoundError: [E... ERROR tests/attack/test_mod_exec.py::test_detection - FileNotFoundError: [Err... ERROR tests/attack/test_mod_exec.py::test_blind_detection - FileNotFoundError... ERROR tests/attack/test_mod_file.py::test_inclusion_detection - FileNotFoundE... ERROR tests/attack/test_mod_file.py::test_warning_false_positive - FileNotFou... ERROR tests/attack/test_mod_file.py::test_no_crash - FileNotFoundError: [Errn... ERROR tests/attack/test_mod_file.py::test_prefix_and_suffix_detection - FileN... ERROR tests/attack/test_mod_file.py::test_warning_false_postitives - FileNotF... ERROR tests/attack/test_mod_file.py::test_warning_postitives - FileNotFoundEr... ERROR tests/attack/test_mod_redirect.py::test_redirect_detection - FileNotFou... ERROR tests/attack/test_mod_redirect.py::test_whole_stuff - FileNotFoundError... ERROR tests/attack/test_mod_xss_advanced.py::test_title_false_positive - File... ERROR tests/attack/test_mod_xss_advanced.py::test_title_positive - FileNotFou... ERROR tests/attack/test_mod_xss_advanced.py::test_script_filter_bypass - File... ERROR tests/attack/test_mod_xss_advanced.py::test_attr_quote_escape - FileNot... ERROR tests/attack/test_mod_xss_advanced.py::test_attr_double_quote_escape - ... ERROR tests/attack/test_mod_xss_advanced.py::test_attr_escape - FileNotFoundE... ERROR tests/attack/test_mod_xss_advanced.py::test_tag_name_escape - FileNotFo... ERROR tests/attack/test_mod_xss_advanced.py::test_partial_tag_name_escape - F... ERROR tests/attack/test_mod_xss_advanced.py::test_xss_inside_tag_input - File... ERROR tests/attack/test_mod_xss_advanced.py::test_xss_inside_tag_link - FileN... ERROR tests/attack/test_mod_xss_advanced.py::test_xss_uppercase_no_script - F... ERROR tests/attack/test_mod_xss_advanced.py::test_frame_src_escape - FileNotF... ERROR tests/attack/test_mod_xss_advanced.py::test_frame_src_no_escape - FileN... ERROR tests/attack/test_mod_xss_advanced.py::test_bad_separator_used - FileNo... ERROR tests/attack/test_mod_xss_advanced.py::test_escape_with_style - FileNot... ERROR tests/attack/test_mod_xss_advanced.py::test_rare_tag_and_event - FileNo... ERROR tests/attack/test_mod_xss_advanced.py::test_xss_with_strong_csp - FileN... ERROR tests/attack/test_mod_xss_advanced.py::test_xss_with_weak_csp - FileNot... ERROR tests/attack/test_mod_xxe.py::test_direct_body - FileNotFoundError: [Er... ERROR tests/attack/test_mod_xxe.py::test_direct_param - FileNotFoundError: [E... ERROR tests/attack/test_mod_xxe.py::test_direct_query_string - FileNotFoundEr... ERROR tests/attack/test_mod_xxe.py::test_out_of_band_body - FileNotFoundError... ERROR tests/attack/test_mod_xxe.py::test_out_of_band_param - FileNotFoundErro... ERROR tests/attack/test_mod_xxe.py::test_out_of_band_query_string - FileNotFo... ERROR tests/attack/test_mod_xxe.py::test_direct_upload - FileNotFoundError: [... ERROR tests/endpoint/test_endpoint.py::test_ssrf - FileNotFoundError: [Errno ... ERROR tests/endpoint/test_endpoint.py::test_xxe_dtd - FileNotFoundError: [Err... ERROR tests/endpoint/test_endpoint.py::test_xxe_store - FileNotFoundError: [E... ERROR tests/web/test_explorer.py::test_qs_limit - FileNotFoundError: [Errno 2... ERROR tests/web/test_explorer.py::test_explorer_filtering - FileNotFoundError... ERROR tests/web/test_network_issues.py::test_chunked_timeout - FileNotFoundEr... ERROR tests/web/test_network_issues.py::test_timeout - FileNotFoundError: [Er... ============= 22 failed, 48 passed, 1 warning, 48 errors in 13.33s ============= E: pybuild pybuild:353: test: plugin distutils failed with: exit code=1: cd /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build; python3.9 -m pytest tests dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.9 returned exit code 13 make[1]: Leaving directory '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg' create-stamp debian/debhelper-build-stamp dh_testroot -i -O--buildsystem=pybuild dh_prep -i -O--buildsystem=pybuild dh_auto_install -i -O--buildsystem=pybuild I: pybuild base:232: /usr/bin/python3 setup.py install --root /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti running install running build running build_py running egg_info writing wapiti3.egg-info/PKG-INFO writing dependency_links to wapiti3.egg-info/dependency_links.txt writing entry points to wapiti3.egg-info/entry_points.txt writing requirements to wapiti3.egg-info/requires.txt writing top-level names to wapiti3.egg-info/top_level.txt reading manifest file 'wapiti3.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' warning: no previously-included files found matching 'wapitiCore/language_sources/*.sh' warning: no previously-included files found matching 'wapitiCore/language_sources/file_list.txt' writing manifest file 'wapiti3.egg-info/SOURCES.txt' running build_scripts running install_lib creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9 creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_buster.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_backup.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_nikto.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_csp.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_blindsql.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_shellshock.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_wapp.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_cookieflags.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_xxe.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_htaccess.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/attack.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_permanentxss.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_redirect.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_crlf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_csrf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_file.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_brute_login_form.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_methods.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_xss.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_ssrf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_xxe.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_sql.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_methods.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_ssrf.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_permanentxss.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_buster.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_cookieflags.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_nikto.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_http_headers.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_xss.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_crlf.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_file.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_wapp.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_exec.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_htaccess.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_blindsql.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_shellshock.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_backup.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_redirect.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_csp.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_csrf.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/attack.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/__pycache__/mod_brute_login_form.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_sql.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_http_headers.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/attack/mod_exec.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/htmlreportgenerator.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/xmlreportgenerator.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/reportgenerator.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__pycache__/xmlreportgenerator.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__pycache__/jsonreportgenerator.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__pycache__/reportgenerator.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__pycache__/htmlreportgenerator.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__pycache__/txtreportgenerator.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/txtreportgenerator.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report/jsonreportgenerator.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report_template copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/logo_clear.png -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report_template creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report_template/css copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/css/kube.min.css -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report_template/css copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/css/master.css -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report_template/css copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/report_template/report.html -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report_template creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/ssrf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/internal_error.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/exec.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/sql.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/secure_cookie.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/file.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/blindsql.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/xss.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/resource_consumption.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/redirect.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/dangerous_resource.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/csp.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/credentials.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/fingerprint.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/crlf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/csrf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/http_only.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/exec.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/ssrf.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/blindsql.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/xxe.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/csrf.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/secure_cookie.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/redirect.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/resource_consumption.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/credentials.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/sql.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/internal_error.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/crlf.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/csp.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/fingerprint.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/file.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/http_only.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/dangerous_resource.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/http_headers.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/backup.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/htaccess.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/__pycache__/xss.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/xxe.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/http_headers.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/backup.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/definitions/htaccess.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/es.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/fr.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/template.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/ms.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/de.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/pt.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/en.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language_sources/zh.po -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language_sources creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main/wapiti.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main/getcookie.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main/__pycache__/wapiti.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/main/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main/__pycache__ creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/language.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/vulnerability.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/__pycache__/logger.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/__pycache__/vulnerability.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/__pycache__/language.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/language/logger.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/moon.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/crawler.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser/jsparser3.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser/pull_jsparser3.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser/__pycache__/jsparser3.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsparser/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/swf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/sqlite_persister.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/csp_utils.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/web.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/page.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/xss_utils.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/lamejs.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/jsoncookie.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/crawler.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/web.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/xss_utils.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/page.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/jsoncookie.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/sqlite_persister.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/lamejs.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/swf.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/net/__pycache__/csp_utils.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__pycache__ creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/users.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/busterPayloads.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/fileHandlingPayloads.ini -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/backupPayloads.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/passwords.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/xssPayloads.ini -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/blindSQLPayloads.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/incorrectMessage.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/successMessage.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/execPayloads.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/attacks/xxePayloads.ini -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/attacks creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/en creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/en/LC_MESSAGES copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/en/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/en/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/es creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/es/LC_MESSAGES copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/es/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/es/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/ms creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/ms/LC_MESSAGES copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/ms/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/ms/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/de creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/de/LC_MESSAGES copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/de/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/de/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/pt creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/pt/LC_MESSAGES copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/pt/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/pt/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/zh creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/zh/LC_MESSAGES copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/zh/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/zh/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/fr creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/fr/LC_MESSAGES copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/data/language/fr/LC_MESSAGES/wapiti.mo -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/data/language/fr/LC_MESSAGES creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/__pycache__/moon.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/__pycache__ creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer/wappalyzer.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer/__pycache__/wappalyzer.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/wapitiCore/wappalyzer/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer/__pycache__ creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_htaccess.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_redirect.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_nikto.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_wapp.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_csrf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_shellshock.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_xss_basics.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_methods.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_csp.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_crlf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_ssrf.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_file.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_exec.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_sql.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_backup.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_xss_advanced.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mutator.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_methods.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_buster.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_ssrf.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_backup.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_htaccess.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_shellshock.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_wapp.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_xxe.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_csp.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_xss_basics.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_crlf.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_xss_advanced.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_exec.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_redirect.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_blindsql.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_csrf.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_file.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_nikto.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/__pycache__/test_mod_sql.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_xxe.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_blindsql.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mod_buster.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/attack/test_mutator.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint/test_endpoint.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/endpoint/__pycache__/test_endpoint.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload/test_payload_reader.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/payload/__pycache__/test_payload_reader.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload/__pycache__ creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_html_formaction.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_html_parser.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_xss_utils.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_http_parser.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_html_forms.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_http_parser.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_json_parser.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_html_formaction.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_html_forms.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_xss_utils.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_html_parser.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/__pycache__/test_js_parser.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_js_parser.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/parsers/test_json_parser.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/test_network_issues.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/test_explorer.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/test_persister.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/test_scope.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/test_request.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__pycache__/test_persister.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__pycache__/test_request.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__pycache__/test_scope.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__pycache__/test_explorer.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/web/__pycache__/test_network_issues.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__pycache__ creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli/__init__.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli/test_options.py -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli/__pycache__/test_options.cpython-39-pytest-6.0.2.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/cli/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli/__pycache__ creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/__pycache__ copying /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/.pybuild/cpython3_3.9/build/tests/__pycache__/__init__.cpython-39.pyc -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/__pycache__ byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_buster.py to mod_buster.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_backup.py to mod_backup.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_nikto.py to mod_nikto.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_csp.py to mod_csp.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_blindsql.py to mod_blindsql.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_shellshock.py to mod_shellshock.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_wapp.py to mod_wapp.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_cookieflags.py to mod_cookieflags.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_xxe.py to mod_xxe.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_htaccess.py to mod_htaccess.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/attack.py to attack.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_permanentxss.py to mod_permanentxss.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_redirect.py to mod_redirect.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_crlf.py to mod_crlf.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_csrf.py to mod_csrf.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_file.py to mod_file.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_brute_login_form.py to mod_brute_login_form.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_methods.py to mod_methods.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_xss.py to mod_xss.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_ssrf.py to mod_ssrf.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_sql.py to mod_sql.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_http_headers.py to mod_http_headers.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/attack/mod_exec.py to mod_exec.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/htmlreportgenerator.py to htmlreportgenerator.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/xmlreportgenerator.py to xmlreportgenerator.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/reportgenerator.py to reportgenerator.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/txtreportgenerator.py to txtreportgenerator.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/report/jsonreportgenerator.py to jsonreportgenerator.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/ssrf.py to ssrf.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/internal_error.py to internal_error.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/exec.py to exec.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/sql.py to sql.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/secure_cookie.py to secure_cookie.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/file.py to file.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/blindsql.py to blindsql.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/xss.py to xss.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/resource_consumption.py to resource_consumption.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/redirect.py to redirect.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/dangerous_resource.py to dangerous_resource.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/csp.py to csp.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/credentials.py to credentials.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/fingerprint.py to fingerprint.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/crlf.py to crlf.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/csrf.py to csrf.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/http_only.py to http_only.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/xxe.py to xxe.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/http_headers.py to http_headers.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/backup.py to backup.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/definitions/htaccess.py to htaccess.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main/wapiti.py to wapiti.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/main/getcookie.py to getcookie.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/language.py to language.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/vulnerability.py to vulnerability.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/language/logger.py to logger.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/moon.py to moon.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/crawler.py to crawler.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser/jsparser3.py to jsparser3.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsparser/pull_jsparser3.py to pull_jsparser3.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/swf.py to swf.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/sqlite_persister.py to sqlite_persister.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/csp_utils.py to csp_utils.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/web.py to web.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/page.py to page.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/xss_utils.py to xss_utils.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/lamejs.py to lamejs.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/net/jsoncookie.py to jsoncookie.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer/wappalyzer.py to wappalyzer.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapitiCore/wappalyzer/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_htaccess.py to test_mod_htaccess.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_redirect.py to test_mod_redirect.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_nikto.py to test_mod_nikto.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_wapp.py to test_mod_wapp.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_csrf.py to test_mod_csrf.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_shellshock.py to test_mod_shellshock.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_xss_basics.py to test_mod_xss_basics.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_methods.py to test_mod_methods.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_csp.py to test_mod_csp.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_crlf.py to test_mod_crlf.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_ssrf.py to test_mod_ssrf.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_file.py to test_mod_file.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_exec.py to test_mod_exec.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_sql.py to test_mod_sql.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_backup.py to test_mod_backup.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_xss_advanced.py to test_mod_xss_advanced.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_xxe.py to test_mod_xxe.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_blindsql.py to test_mod_blindsql.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mod_buster.py to test_mod_buster.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/attack/test_mutator.py to test_mutator.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/endpoint/test_endpoint.py to test_endpoint.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload/test_payload_reader.py to test_payload_reader.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/payload/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/test_html_formaction.py to test_html_formaction.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/test_html_parser.py to test_html_parser.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/test_xss_utils.py to test_xss_utils.cpython-39.pyc /usr/lib/python3.9/dist-packages/tests/parsers/test_xss_utils.py:620: SyntaxWarning: "is" with a literal. Did you mean "=="? /usr/lib/python3.9/dist-packages/tests/parsers/test_xss_utils.py:626: SyntaxWarning: "is" with a literal. Did you mean "=="? byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/test_http_parser.py to test_http_parser.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/test_html_forms.py to test_html_forms.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/test_js_parser.py to test_js_parser.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/parsers/test_json_parser.py to test_json_parser.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/test_network_issues.py to test_network_issues.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/test_explorer.py to test_explorer.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/test_persister.py to test_persister.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/test_scope.py to test_scope.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/web/test_request.py to test_request.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli/__init__.py to __init__.cpython-39.pyc byte-compiling /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/tests/cli/test_options.py to test_options.cpython-39.pyc running install_data creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying doc/AUTHORS -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying doc/example.txt -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying doc/wapiti.1.html -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying doc/wapiti.ronn -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying doc/wapiti-getcookie.1.html -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying doc/wapiti-getcookie.ronn -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying README.md -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti copying VERSION -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/doc/wapiti creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/man creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/man/man1 copying doc/wapiti.1 -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/man/man1 copying doc/wapiti-getcookie.1 -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/share/man/man1 running install_egg_info Copying wapiti3.egg-info to /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/lib/python3.9/dist-packages/wapiti3-3.0.4.egg-info Skipping SOURCES.txt running install_scripts creating /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin copying build/scripts-3.9/wapiti -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin copying build/scripts-3.9/wapiti-getcookie -> /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin changing mode of /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin/wapiti to 755 changing mode of /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin/wapiti-getcookie to 755 Installing wapiti script to /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin Installing wapiti-getcookie script to /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti/usr/bin debian/rules override_dh_install make[1]: Entering directory '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg' dh_install find /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti -type d -empty -delete find /build/wapiti-otlTNx/wapiti-3.0.4+dfsg/debian/wapiti -type f -name "*.js" -exec chmod -x {} \; make[1]: Leaving directory '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg' dh_installdocs -i -O--buildsystem=pybuild debian/rules override_dh_installchangelogs make[1]: Entering directory '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg' dh_installchangelogs doc/ChangeLog_Wapiti make[1]: Leaving directory '/build/wapiti-otlTNx/wapiti-3.0.4+dfsg' dh_installman -i -O--buildsystem=pybuild dh_python3 -i -O--buildsystem=pybuild dh_installinit -i -O--buildsystem=pybuild dh_installsystemduser -i -O--buildsystem=pybuild dh_lintian -i -O--buildsystem=pybuild dh_perl -i -O--buildsystem=pybuild dh_link -i -O--buildsystem=pybuild dh_strip_nondeterminism -i -O--buildsystem=pybuild Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/es/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/ms/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/de/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/pt/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/en/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/zh/LC_MESSAGES/wapiti.mo Normalized debian/wapiti/usr/lib/python3/dist-packages/wapitiCore/data/language/fr/LC_MESSAGES/wapiti.mo dh_compress -i -O--buildsystem=pybuild dh_fixperms -i -O--buildsystem=pybuild dh_missing -i -O--buildsystem=pybuild dh_installdeb -i -O--buildsystem=pybuild dh_gencontrol -i -O--buildsystem=pybuild dh_md5sums -i -O--buildsystem=pybuild dh_builddeb -i -O--buildsystem=pybuild dpkg-deb: building package 'wapiti' in '../wapiti_3.0.4+dfsg-1_all.deb'. dpkg-genbuildinfo --build=all dpkg-genchanges --build=all >../wapiti_3.0.4+dfsg-1_all.changes dpkg-genchanges: info: binary-only arch-indep upload (source code and arch-specific packages not included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) I: running special hook: sync-out /build/wapiti-otlTNx /tmp/wapiti-3.0.4+dfsg-178917q5i I: cleaning package lists and apt cache... W: deleting files in /tmp: hsperfdata_root W: deleting files in /tmp: crawl.db I: creating tarball... I: done I: removing tempdir /tmp/mmdebstrap.frGhKdeeLx... I: success in 489.0857 seconds md5: wapiti_3.0.4+dfsg-1_all.deb: OK sha1: wapiti_3.0.4+dfsg-1_all.deb: OK sha256: wapiti_3.0.4+dfsg-1_all.deb: OK Checksums: OK