$ ./url-verifier https://bsideskbh.dk/schedule/ URL valid!
$ ./url-verifier AAAAAAA Error: that is not a URL
#!/bin/bash cat /dev/urandom
#!/bin/bash cat /dev/urandom | head -c 100
#!/bin/bash # generate random input input=$(cat /dev/urandom | head -c 100)
#!/bin/bash # generate random input input=$(cat /dev/urandom | head -c 100) # send it to target ./url-verifier "$input"
#!/bin/bash # generate random input input=$(cat /dev/urandom | head -c 100) # send it to target ./url-verifier "$input" # did it crash? if [ $? -eq 139 ]; then # save testcase echo "$input" > crashes/crash fi
#!/bin/bashcounter=0while [ 1 ]; do # generate random input input=$(cat /dev/urandom | head -c 100) # send it to target ./url-verifier "$input" # did it crash? if [ $? -eq 139 ]; then # save testcase echo "$input" > crashes/crash$counter let counter+=1 fidone
$ echo 'http://user:pass@host.com:8080/p/a/t' | ./radamsa http://user:pass@host.com:-8078/p/a/t
$ echo 'http://user:pass@host.com:8080/p/a/t' | ./radamsa http://u�sfsser:pass@host.com:327666835065922337��036854775809/p/a/t
$ echo 'http://user:pass@host.com:8080/p/a/t' | ./radamsa http://user:paーss@host.โcom:8080/p/a/t
$ echo 'http://user:pass@host.com:8080/p/a/t' | ./radamsa http://user:pbss@host.com:-14643325729961986883/p/a/\x0d\x0d+inf%n%p%n%s\0NaN`xcalc`\r\n$+%nt
$ echo 'http://user:pass@host.com:8080/p/a/t' | ./radamsa http://user:pass@host.co��m:8080/p/a/t
$ echo 'http://user:pass@host.com:8080/p/a/t' | ./radamsa http://user:pass@host. com:$+%d"xcalc\x0d%p!xcalc"xcalc\u0000!xcalc`xcalc`\r\x0d\x0dm
$ echo 'http://user:pass@host.com:8080/p/a/t' | ./radamsa htp://user:pass@host.com:8080/p/a/t
#!/bin/bashcounter=0while [ 1 ]; do # mutate sample input input=$(echo 'http://user:pass@host.com:8080/p/a/t' | ./radamsa) # send it to target ./url-verifier "$input" # did it crash? if [ $? -eq 139 ]; then # save testcase echo "$input" > crashes/crash$counter let counter+=1 fidone
$ ./dharma.py -grammars url.dghttp://Y.f-.u9%B8.c%5E'*-.G:4739/++/%D1/T+-+-%272+?4'+-
$ ./dharma.py -grammars url.dghttp://a.F,'f.b/3?.+%3B5_"+%D9%0C,
$ ./dharma.py -grammars url.dgprospero://m%14%76,S.U*53.o.H:7/'+%40@/+/++%008
$ ./dharma.py -grammars url.dgftp://_:-5@2.6.738.4:1/Q+w/k++
$ ./dharma.py -grammars url.dggopher://53.7.5915141.14:8/'+%E4/-+P
$ ./dharma.py -grammars url.dggopher://n.qx/Of/(&
$ cat url.dgurl := +httpaddress+ +ftpaddress+ +telnetaddress+httpaddress := http://+hostport+ http://+hostport+/+path+ http://+hostport+/+path+?+search+ftpaddress := ftp://+login+/+path+ ftp://+login+/+path+;+ftptype+telnetaddress := telnet://+login+
#!/bin/bashcounter=0while [ 1 ]; do # generate input with Dharma input=$(./dharma.py -grammars url.dg) # send it to target ./url-verifier "$input" # did it crash? if [ $? -eq 139 ]; then # save testcase echo "$input" > crashes/crash$counter let counter+=1 fidone
main() + +-----+ V +---+---+--+-> | v | | | | | +-------------------------------+--+ <-----+--+<-----+ | ^----+ +---+ +-----------+ <--------+ | +------+ <----+ +----> || | <--+ +--+ | | +-> || | | | | | | | +v-----> | | v | | | +---+ | | | +--+ | +-> +------> | | | | v | | | | v | | | +----------> | v v | +-----------+ +-------+---+---+ v v v
$ tree crashes/crashes/├── crash0├── crash1├── crash2├── crash3├── crash4└── crash50 directories, 6 files$ cat crashes/crash0http://xx.aY.f-.u9%B8.c%5E-.G:4739/p$ cat crashes/crash1http://a29t43t432./fwaofew//AAAAAAAAAAAA
$ gdb -q url-verifierReading symbols from url-verifier...(no debugging symbols found)...done.(gdb) r 'http://xx.aY.f-.u9%B8.c%5E-.G:4739/p'Starting program: url-verifier 'http://xx.aY.f-.u9%B8.c%5E-.G:4739/p'Program received signal SIGSEGV, Segmentation fault.0x004004c6 in ?? ()(gdb) p $_siginfo._sifields._sigfault.si_addr$1 = (void *) 0x0(gdb)
$ gdb -q url-verifierReading symbols from url-verifier...(no debugging symbols found)...done.(gdb) r 'http://a29t43t432./fwaofew//AAAAAAAAAAAA'Starting program: url-verifier 'http://a29t43t432./fwaofew//AAAAAAAAAAAA'Program received signal SIGSEGV, Segmentation fault.0x41414141 in ?? ()(gdb) p/x $eip$1 = 0x41414141(gdb)
init();while (keep_running) { waitForData(); // blocking readInput(); parseInput(); housekeeping();}cleanup();
init();while (keep_running) { input = readFromFile(); sendToItself(input); waitForData(); // blocking readInput(); parseInput(); housekeeping();}cleanup();
details on https://dumpco.re
// read input from fuzzerinput = readInput();// give it to both librariesresA = libA(input);resB = libB(input);// if they don't agree on the result, it's a logical flawif (resA != resB) { abort();}
if (authenticated == true) { abort();}
@magnusstubman
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |