Automated Web Attacks Using Headless Browsers Dima Bekerman & Ben Herzberg September 2016

Total Page:16

File Type:pdf, Size:1020Kb

Automated Web Attacks Using Headless Browsers Dima Bekerman & Ben Herzberg September 2016 Automated Web Attacks Using Headless Browsers Dima Bekerman & Ben Herzberg September 2016 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster ben.about() > ben.history <· [“PT”,”Dev”] > ben.employer <· “Imperva Incapsula” > ben.positionX <· “Sec. Research Manager” > ben.social <· {“TWT”: “@KernelXSS”, “LNK”: “Ben Herzberg”} 2 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster dima.about() > dima.history <· [“Machine Learning”, “Sec. Analysis”] > dima.employer <· “Imperva Incapsula” > dima.positionX <· “Security Researcher” > dima.social <· {“TWT”: “@_unxmaster”, “LNK”: “Dima Bekerman”} 3 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Remember… What happens in Novi Sad stays in Novi Sad 4 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster 5 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Headless browser A headless browser is a web browser without a graphical user interface. It accesses web pages but doesn’t show them to any human being, it used to provide the content of web pages to other programs. https://en.wikipedia.org/wiki/Headless_browser 6 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster No JavaScript No Dom No Styling HTTP library Web Browser No Layouts Command line tool Headless Browser 7 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Web browser engine A web browser engine is a program that renders marked up content and formatting information Blink WebKit Gecko Trident Presto Chrome 28+ Safari Firefox Internet Explorer Opera Opera 15+ iOS IceWeasel Windows Mobile Opera Mini Android 4.4+ Chrome <27 SeaMonkey EdgeHTML Opera Mobile 8 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster What is DOM – Document Object Model? Is the Is the Is the HTML ‘View- code in you write Source’ DevTool DOM? DOM? DOM? Nope Nope Yep The HTML you write is View Source just shows DevTools panel parsed by the browser you the HTML that shows you a visual and turned into the DOM makes up that page. representation of the It's probably the exact DOM. HTML that you wrote. 9 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Source Code <div id="container"></div> <script> var container = document.getElementById("container"); container.innerHTML = “Hello World"; </script> DOM representation <div id="container">Hello World</div> 10 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Page processing • JavaScript • CSS • SVG • MathML • WebGL 11 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Modernizer web features test 12 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster ECMAScript test262 13 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster • Based on WebKit Based on Gecko • Cross Platform • Portable • Scriptable with JavaScript SlimerJS Based on Trident • Good for WebUI automation PhantomJS TrifleJS Chromium Embedded Framework • Chromium based • V8 – JavaScript Engine WebKit .NET • Programmable with .NET, C++ • Compiled to cross platform app • Can be used as a module Awesomium 14 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Web Browser Headless Browser 15 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Selenium / WebDriver • Selenium is a browser control and automation system • Manipulating a real web browser using a browser driver • Manipulated browser must be installed • Host OS should have a GUI framework 16 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster The world of two contexts Browser Context Page Context • Language depends on • JavaScript framework • Evaluated by the web engine • Compiled / evaluated inside • Has access to DOM objects framework interpreter • Has access to OS 17 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster The world of two contexts Browser Context Page Context my_script.js example.com Control WebKit page.open(“example.com"); Page event . Inject page.evaluate(function(){ function () { return document.title; Callback return document.title; }); } 18 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Use Cases • Test automation • Crawl websites • Render dynamic web page to static HTML • Inject and execute arbitrary JavaScript code • Perform actions • Taking screen shots • Monitor performance 19 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Use Cases • Content scraping • Click fraud • Fuzzing • Bidding abuse • Login brute force • Botnet • Sophisticated DDoS attacks 20 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Capture screen to image Source Code var page = require('webpage').create(); page.open(‘http://www.google.com’, function (status) { page.render('google.png'); phantom.exit(); }); 21 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Grabbing text Source Code //Page title console.log(page.title); // View-source console.log(page.content); //Content without HTML tags console.log(page.plainText); 22 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Handle console and alerts Source Code //Handle console page.onConsoleMessage = function(msg) { console.log('CONSOLE: ' + msg); }; //Handle alert page.onAlert = function(msg) { console.log('ALERT: ' + msg); }; 23 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster 24 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster 25 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Spot the differences 26 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Awesomium 27 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Android WebView Source Code webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url){ browser.loadUrl( "javascript:window.HTMLOUT.processHTML( document.getElementsByTagName('html'));"); } }); 28 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster 29 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Scenarios from the wild • SEO tools scrape for dynamic content • E-commerce abuse • DDoS attacks from a mobile botnet 30 © 2016 Imperva, Inc. All rights reserved. @Incapsula_com @KernelXSS @_unxmaster Хвала вам! THANK YOU! @KernelXSS @_unxmaster Ben Herzberg Dima Bekerman [email protected] [email protected] 31 © 2016 Imperva, Inc. All rights reserved. .
Recommended publications
  • Dynamic Web Pages with the Embedded Web Server
    Dynamic Web Pages With The Embedded Web Server The Digi-Geek’s AJAX Workbook (NET+OS, XML, & JavaScript) Version 1.0 5/4/2011 Page 1 Copyright Digi International, 2011 Table of Contents Chapter 1 - How to Use this Guide ............................................................................................................... 5 Prerequisites – If You Can Ping, You Can Use This Thing! ..................................................................... 5 Getting Help with TCP/IP and Wi-Fi Setup ............................................................................................ 5 The Study Guide or the Short Cut? ....................................................................................................... 5 C Code ................................................................................................................................................... 6 HTML Code ............................................................................................................................................ 6 XML File ................................................................................................................................................. 6 Provide us with Your Feedback ............................................................................................................. 6 Chapter 2 - The Server-Client Relationship ................................................................................................... 7 Example – An Analogy for a Normal HTML page .................................................................................
    [Show full text]
  • Effects and Opportunities of Native Code Extensions For
    Effects and Opportunities of Native Code Extensions for Computationally Demanding Web Applications DISSERTATION zur Erlangung des akademischen Grades Dr. Phil. im Fach Bibliotheks- und Informationswissenschaft eingereicht an der Philosophischen Fakultät I Humboldt-Universität zu Berlin von Dipl. Inform. Dennis Jarosch Präsident der Humboldt-Universität zu Berlin: Prof. Dr. Jan-Hendrik Olbertz Dekan der Philosophischen Fakultät I: Prof. Michael Seadle, Ph.D. Gutachter: 1. Prof. Dr. Robert Funk 2. Prof. Michael Seadle, Ph.D. eingereicht am: 28.10.2011 Tag der mündlichen Prüfung: 16.12.2011 Abstract The World Wide Web is amidst a transition from interactive websites to web applications. An increasing number of users perform their daily computing tasks entirely within the web browser — turning the Web into an important platform for application development. The Web as a platform, however, lacks the computational performance of native applications. This problem has motivated the inception of Microsoft Xax and Google Native Client (NaCl), two independent projects that fa- cilitate the development of native web applications. Native web applications allow the extension of conventional web applications with compiled native code, while maintaining operating system portability. This dissertation determines the bene- fits and drawbacks of native web applications. It also addresses the question how the performance of JavaScript web applications compares to that of native appli- cations and native web applications. Four application benchmarks are introduced that focus on different performance aspects: number crunching (serial and parallel), 3D graphics performance, and data processing. A performance analysis is under- taken in order to determine and compare the performance characteristics of native C applications, JavaScript web applications, and NaCl native web applications.
    [Show full text]
  • Chrome Devtools Protocol (CDP)
    e e c r i è t t s s u i n J i a M l e d Headless Chr me Automation with THE CRRRI PACKAGE Romain Lesur Deputy Head of the Statistical Service Retrouvez-nous sur justice.gouv.fr Web browser A web browser is like a shadow puppet theater Suyash Dwivedi CC BY-SA 4.0 via Wikimedia Commons Ministère crrri package — Headless Automation with p. 2 de la Justice Behind the scenes The puppet masters Mr.Niwat Tantayanusorn, Ph.D. CC BY-SA 4.0 via Wikimedia Commons Ministère crrri package — Headless Automation with p. 3 de la Justice What is a headless browser? Turn off the light: no visual interface Be the stage director… in the dark! Kent Wang from London, United Kingdom CC BY-SA 2.0 via Wikimedia Commons Ministère crrri package — Headless Automation with p. 4 de la Justice Some use cases Responsible web scraping (with JavaScript generated content) Webpages screenshots PDF generation Testing websites (or Shiny apps) Ministère crrri package — Headless Automation with p. 5 de la Justice Related packages {RSelenium} client for Selenium WebDriver, requires a Selenium server Headless browser is an old (Java). topic {webshot}, {webdriver} relies on the abandoned PhantomJS library. {hrbrmstr/htmlunit} uses the HtmlUnit Java library. {hrbrmstr/splashr} uses the Splash python library. {hrbrmstr/decapitated} uses headless Chrome command-line instructions or the Node.js gepetto module (built-on top of the puppeteer Node.js module) Ministère crrri package — Headless Automation with p. 6 de la Justice Headless Chr me Basic tasks can be executed using command-line
    [Show full text]
  • Automated Testing Clinic Follow-Up: Capybara-Webkit Vs. Poltergeist/Phantomjs | Engineering in Focus
    Automated Testing Clinic follow-up: capybara-webkit vs. polter... https://behindthefandoor.wordpress.com/2014/03/02/automated-... Engineering in Focus the Fandor engineering blog Automated Testing Clinic follow-up: capybara-webkit vs. poltergeist/PhantomJS with 2 comments In my presentation at the February Automated Testing SF meetup I (Dave Schweisguth) noted some problems with Fandor’s testing setup and that we were working to fix them. Here’s an update on our progress. The root cause of several of our problems was that some of the almost 100 @javascript scenarios in our Cucumber test suite weren’t running reliably. They failed occasionally regardless of environment, they failed more on slower CPUs (e.g. MacBook Pros only a couple of years old), when they failed they sometimes hung forever, and when we killed them they left behind webkit-server processes (we were using the capybara-webkit driver) which, if not cleaned up, would poison subsequent runs. Although we’ve gotten pretty good at fixing flaky Cucumber scenarios, we’d been stumped on this little handful. We gave up, tagged them @non_ci and excluded them from our build. But they were important scenarios, so we had to run them manually before deploying. (We weren’t going to just not run them: some of those scenarios tested our subscription process, and we would be fools to deploy a build that for all we knew wouldn’t allow new users to subscribe to Fandor!) That made our release process slower and more error-prone. It occurred to me that I could patch the patch and change our deployment process to require that the @non_ci scenarios had been run (by adding a git tag when those scenarios were run and checking for it when deploying), but before I could put that in to play a new problem appeared.
    [Show full text]
  • AJAX and Jquery L Raw AJAX Handling in JS Is Very Tedious L Jquery Provides Flexible and Strong Support to Handle AJAX Interactions Through a Set of Jquery Functions
    AJAX Asynchronous Design in Web Apps IT 4403 Advanced Web and Mobile Applications Jack G. Zheng Fall 2019 Topics l AJAX concepts and technical elements l AJAX implications and impacts l jQuery AJAX l Basic and shorthand methods l Error handling 2 AJAX l AJAX (Asynchronous JavaScript and XML) is a group of interrelated web development techniques used on the client-side to create interactive web applications. l Despite the name, the use of XML is not actually required, nor do the requests need to be asynchronous. 3 First Impression l https://www.google.com Use Chrome’s developer tools to view network communications while typing the search terms. A set of requests have been made to get JSON data from the server as I type in the search term box. Observe the “q” parameter in all URLs. 4 AJAX Model Difference With Ajax, web applications can communicate with servers in the background without a complete page loading after every request/response cycle. http://www.adaptivepath.com /ideas/ajax-new-approach- web-applications/ 5 Traditional Model The client does not generate views/presentations (HTML/CSS). Synchronous communications feature sequential request/response cycles, one after another The server prepares the whole page. http://www.websiteoptimization.com/secrets/ajax/8-1-ajax-pattern.html 6 Ajax Model l With Ajax, web applications can communicate with servers in the background without a complete page loading after every request/response cycle. The client generates views/presentations and update content (partial page) by manipulating DOM. Asynchronous communications feature independent request/response cycles The server prepares partial pages (partial HTML) or just data (XML or JSON).
    [Show full text]
  • Web Browser a C-Class Article from Wikipedia, the Free Encyclopedia
    Web browser A C-class article from Wikipedia, the free encyclopedia A web browser or Internet browser is a software application for retrieving, presenting, and traversing information resources on the World Wide Web. An information resource is identified by a Uniform Resource Identifier (URI) and may be a web page, image, video, or other piece of content.[1] Hyperlinks present in resources enable users to easily navigate their browsers to related resources. Although browsers are primarily intended to access the World Wide Web, they can also be used to access information provided by Web servers in private networks or files in file systems. Some browsers can also be used to save information resources to file systems. Contents 1 History 2 Function 3 Features 3.1 User interface 3.2 Privacy and security 3.3 Standards support 4 See also 5 References 6 External links History Main article: History of the web browser The history of the Web browser dates back in to the late 1980s, when a variety of technologies laid the foundation for the first Web browser, WorldWideWeb, by Tim Berners-Lee in 1991. That browser brought together a variety of existing and new software and hardware technologies. Ted Nelson and Douglas Engelbart developed the concept of hypertext long before Berners-Lee and CERN. It became the core of the World Wide Web. Berners-Lee does acknowledge Engelbart's contribution. The introduction of the NCSA Mosaic Web browser in 1993 – one of the first graphical Web browsers – led to an explosion in Web use. Marc Andreessen, the leader of the Mosaic team at NCSA, soon started his own company, named Netscape, and released the Mosaic-influenced Netscape Navigator in 1994, which quickly became the world's most popular browser, accounting for 90% of all Web use at its peak (see usage share of web browsers).
    [Show full text]
  • Automated Testing of Your Corporate Website from Multiple Countries with Selenium Contents
    presents Automated Testing of Your Corporate Website from Multiple Countries with Selenium Contents 1. Summary 2. Introduction 3. The Challenges 4. Components of a Solution 5. Steps 6. Working Demo 7. Conclusion 8. Questions & Answers Summary Because of the complexities involved in testing large corporate websites and ecommerce stores from multiple countries, test automation is a must for every web and ecommerce team. Selenium is the most popular, straightforward, and reliable test automation framework with the largest developer community on the market. This white paper details how Selenium can be integrated with a worldwide proxy network to verify website availability, performance, and correctness on a continuous basis. Introduction Modern enterprise web development teams face a number of challenges when they must support access to their website from multiple countries. These challenges include verifying availability, verifying performance, and verifying content correctness on a daily basis. Website content is presented in different languages, website visitors use different browsers and operating systems, and ecommerce carts must comprehend different products and currencies. Because of these complexities involved, instituting automated tests via a test automation framework is the only feasible method of verifying all of these aspects in a repeatable and regular fashion. Why automate tests? Every company tests its products before releasing them to their customers. This process usually involves hiring quality assurance engineers and assigning them to test the product manually before any release. Manual testing is a long process that requires time, attention, and resources in order to validate the products’ quality. The more complex the product is, the more important, complex, and time- consuming the quality assurance process is, and therefore the higher the demand for significant resources.
    [Show full text]
  • EMERGING TECHNOLOGIES Dymamic Web Page Creation
    Language Learning & Technology January 1998, Volume 1, Number 2 http://llt.msu.edu/vol1num2/emerging/ pp. 9-15 (page numbers in PDF differ and should not be used for reference) EMERGING TECHNOLOGIES Dymamic Web Page Creation Robert Godwin-Jones Virginia Comonwealth University Contents: • Plug-ins and Applets • JavaScript • Dynamic HTML and Style Sheets • Instructional Uses • Resource List While remaining a powerful repository of information, the Web is being transformed into a medium for creating truly interactive learning environments, leading toward a convergence of Internet connectivity with the functionality of traditional multimedia authoring tools like HyperCard, Toolbook, and Authorware. Certainly it is not fully interactive yet, but that is undeniably the trend as manifested in the latest (version 4) Web browsers. "Dynamic HTML," incorporated into the new browsers, joins plug-ins, Web forms, Java applets, and JavaScript as options for Web interactivity. Plug-ins and Applets While Web pages are beginning to behave more like interactive applications, traditional authoring tools are themselves becoming Internet-savvy, primarily through the use of "plug-in" versions of players which integrate with Web browsers. The most commonly used plug-in today is Macromedia's "Shockwave," used to Web-enable such applications as Director, Authorware, and Flash. "Shocked" Web pages can be very interactive and provide a visually appealing means of interacting with users (as in some sample ESL exercises from Jim Duber). Plug-ins are easy to use -- they just need to be downloaded and installed. Some come bundled with Netscape and Microsoft's browsers, which simplifies considerably the installation process (and gives developers the confidence that most users will actually have the plug-in installed).
    [Show full text]
  • Client-Side Diversification for Defending Against
    Everyone is Different: Client-side Diversification for Defending Against Extension Fingerprinting Erik Trickel, Arizona State University; Oleksii Starov, Stony Brook University; Alexandros Kapravelos, North Carolina State University; Nick Nikiforakis, Stony Brook University; Adam Doupé, Arizona State University https://www.usenix.org/conference/usenixsecurity19/presentation/trickel This paper is included in the Proceedings of the 28th USENIX Security Symposium. August 14–16, 2019 • Santa Clara, CA, USA 978-1-939133-06-9 Open access to the Proceedings of the 28th USENIX Security Symposium is sponsored by USENIX. Everyone is Different: Client-side Diversification for Defending Against Extension Fingerprinting Erik Trickel?, Oleksii Starov†, Alexandros Kapravelos‡, Nick Nikiforakis†, and Adam Doupé? ?Arizona State University †Stony Brook University {etrickel, doupe}@asu.edu {ostarov, nick}@cs.stonybrook.edu ‡North Carolina State University [email protected] Abstract by users, as they see fit, by installing browser extensions. Namely, Google Chrome and Mozilla Firefox, the browsers Browser fingerprinting refers to the extraction of attributes with the largest market share, offer dedicated browser exten- from a user’s browser which can be combined into a near- sion stores that house tens of thousands of extensions. In turn, unique fingerprint. These fingerprints can be used to re- these extensions advertise a wide range of additional features, identify users without requiring the use of cookies or other such as enabling the browser to store passwords with online stateful identifiers. Browser extensions enhance the client- password managers, blocking ads, and saving articles for later side browser experience; however, prior work has shown that reading. their website modifications are fingerprintable and can be From a security perspective, the ability to load third-party used to infer sensitive information about users.
    [Show full text]
  • Interstitial Content Detection Arxiv:1708.04879V1 [Cs.CY] 13 Aug
    Interstitial Content Detection Elizabeth Lucas, Mozilla Research August 2017 Abstract Interstitial content is online content which grays out, or otherwise obscures the main page content. In this technical report, we discuss exploratory research into detecting the presence of interstitial content in web pages. We discuss the use of computer vision techniques to detect interstitials, and the potential use of these techniques to provide a labelled dataset for machine learning. 1. Introduction The structure and underlying nature of content in the web is fundamentally different than most rigorously structured data, and often requires deviating from the traditional approaches of recognizing patterns in more heavily structured data. Within the types of content on the web, interstitials are of interest due to their interrupting of the user's web experience. This report represents the preliminary research necessary to explore the structure of interstitial content, and the beginnings of a machine learning application to assist with our understanding of web content and interstitials. The scripts used for data collection and evaluation are available [1]. 1.1. Definitions For the purpose of this research project, `interstitials', or `interstitial content', are defined as online content, often advertisements or other promotional content, which grays out or otherwise obscures the main page content. These interstitials often require the user to interact in order to return to the main content, interrupting the user's experience. `Servo' refers to the Servo browser engine, sponsored by Mozilla Research [6]. Written in the Rust programming language, this modern parallel browser engine aims to improve performance, security, modularity, and parallelization. Future work will involve eventually bringing interstitial ad detection into the Servo browser engine itself.
    [Show full text]
  • How We Build Web Applications
    Whitepaper How We Build Web Applications Whitepaper 1 BuildableWorks.com Table of Contents About Buildable ............................................................................................ 3 Web Application Architecture ................................................................. 4 Our Process .................................................................................................. 6 Application Architecture Guidelines ............................................... 8 Management ......................................................................................... 8 Anatomy of a Web App .............................................................................. 10 User Experience Design ...................................................................... 10 Application Build and Deployment .................................................... 14 Frontend Tools ...................................................................................... 15 Backend Tools ........................................................................................ 20 Authentication and Security ............................................................. 22 Whitepaper 2 BuildableWorks.com About Buildable Our nimble, versatile team of full-stack engineers, creatives, and developers come to work every day with the knowledge we’re making the stuff that will change our clients’ work lives for the better. It’s why we attract and keep some of the best technical talent in the industry, and it’s how we deliver the highest quality
    [Show full text]
  • Casperjs Documentation Release 1.1.0-DEV
    CasperJs Documentation Release 1.1.0-DEV Nicolas Perriault Sep 13, 2018 Contents 1 Installation 3 1.1 Prerequisites...............................................3 1.2 Installing from Homebrew (OSX)....................................4 1.3 Installing from npm...........................................4 1.4 Installing from git............................................4 1.5 Installing from an archive........................................5 1.6 CasperJS on Windows..........................................5 1.7 Known Bugs & Limitations.......................................6 2 Quickstart 7 2.1 A minimal scraping script........................................7 2.2 Now let’s scrape Google!........................................8 2.3 CoffeeScript version...........................................9 2.4 A minimal testing script......................................... 10 3 Using the command line 11 3.1 casperjs native options.......................................... 12 3.2 Raw parameter values.......................................... 13 4 Selectors 15 4.1 CSS3................................................... 15 4.2 XPath................................................... 16 5 Testing 17 5.1 Unit testing................................................ 17 5.2 Browser tests............................................... 18 5.3 Setting Casper options in the test environment............................. 19 5.4 Advanced techniques........................................... 20 5.5 Test command args and options....................................
    [Show full text]