em Posted March 24, 2017 Report Posted March 24, 2017 Fuzzing or fuzz testing is an automated software testing technique that involves providing invalid, unexpected, or random data as inputs to a computer program. The program is then monitored for exceptions such as crashes, or failing built-in code assertions or for finding potential memory leaks. - In timpul acestui tutorial mi-am dat seama ca mai am nevoie de pachetele po4a, libtool, texi2html. sudo apt install po4a libtool texi2html Folosesc American Fuzzy Lop (afl). - http://lcamtuf.coredump.cx/afl/' $ wget http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz $ tar xf afl-latest.tgz $ cd afl-2.39b/ $ make $ sudo make install Ca să vedeți dacă s-a intalat cu succes puteți verifica tastând afl-gcc $ afl-gcc afl-cc 2.39b by <lcamtuf@google.com> This is a helper application for afl-fuzz. It serves as a drop-in replacement for gcc or clang, letting you recompile third-party code with the required runtime instrumentation. A common use pattern would be one of the following: CC=/usr/local/bin/afl-gcc ./configure CXX=/usr/local/bin/afl-g++ ./configure You can specify custom next-stage toolchain via AFL_CC, AFL_CXX, and AFL_AS. Setting AFL_HARDEN enables hardening optimizations in the compiled code. În principiu acest program se așteaptă ca ținta testată să citească fișiere. Să zicem că vrem să testăm utilitarul "wc" (utilitar care numără linii în linux). man wc .. derulăm până jos cu SHIFT-G .. [..] GNU coreutils 8.25 Bun am aflat că wc face parte din pachetul coreutils. Hai să luam sursa de coreutils și să o compilăm Din moment ce folosesc ubuntu server o caut direct pe repo-urile canonical. O găsesc aici $ wget http://archive.ubuntu.com/ubuntu/pool/main/c/coreutils/coreutils_8.25.orig.tar.xz $ tar xf coreutils_8.25.orig.tar.xz $ cd coreutils-8.25/ $ CC=afl-gcc ./configure $ make Bun. Acum am compilat utilitarul pe care vrem sa il testam cu afl-gcc. Hai să verificăm dacă chiar au fost adăugate simbolurile fuzzerului. $ cd src/ $ strings ./wc | grep -i afl [..] __afl_fork_pid .AFL_VARS __afl_global_area_ptr Totul e în regulă deci. Hai să verificăm că programul nostru chiar merge. $ ./wc /etc/passwd 33 48 1740 /etc/passwd Fuzzerul are nevoie de două foldere. Unul pentru input altrul pentru output. $ mkdir in/ $ mkdir out/ $ echo "test" > in/input $ echo "test2" >> in/input # testam $ ./wc in/input 2 2 11 in/input Acum hai să pornim o rulare. $ afl-fuzz -i in/ -o out/ ./wc @@ american fuzzy lop 2.39b (wc) lq process timing qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqwq overall results qqqqqk x run time : 0 days, 0 hrs, 0 min, 5 sec x cycles done : 0 x x last new path : 0 days, 0 hrs, 0 min, 2 sec x total paths : 58 x x last uniq crash : none seen yet x uniq crashes : 0 x x last uniq hang : none seen yet x uniq hangs : 0 x tq cycle progress qqqqqqqqqqqqqqqqqqqqwq map coverage qvqqqqqqqqqqqqqqqqqqqqqqqu x now processing : 0 (0.00%) x map density : 0.23% / 0.25% x x paths timed out : 0 (0.00%) x count coverage : 1.92 bits/tuple x tq stage progress qqqqqqqqqqqqqqqqqqqqnq findings in depth qqqqqqqqqqqqqqqqqqqqu x now trying : havoc x favored paths : 1 (1.72%) x x stage execs : 21.6k/32.8k (65.87%) x new edges on : 8 (13.79%) x x total execs : 23.7k x total crashes : 0 (0 unique) x x exec speed : 3591/sec x total hangs : 0 (0 unique) x tq fuzzing strategy yields qqqqqqqqqqqvqqqqqqqqqqqqqqqwq path geometry qqqqqqqqu x bit flips : 8/88, 1/87, 1/85 x levels : 2 x x byte flips : 0/11, 1/10, 4/8 x pending : 58 x x arithmetics : 1/616, 0/75, 0/0 x pend fav : 1 x x known ints : 0/62, 3/280, 3/352 x own finds : 57 x x dictionary : 0/0, 0/0, 0/0 x imported : n/a x x havoc : 0/0, 0/0 x stability : 100.00% x x trim : 0.00%/2, 0.00% tqqqqqqqqqqqqqqqqqqqqqqqqj ^Cqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj [cpu000: 44%] O să găsiți inputurile care crapă programul în ./out/crashes și cele care îl blochează în ./out/hangs. Have fun 8 Quote
valica92 Posted March 30, 2018 Report Posted March 30, 2018 (edited) . Edited July 14, 2019 by valica92 clickable url Quote