๐Ÿ” gowitness - a golang, web screenshot utility using Chrome Headless

Overview


๐Ÿ” gowitness

A golang, web screenshot utility using Chrome Headless.

@leonjza Go Report Card Docker Cloud Build Status


introduction

gowitness is a website screenshot utility written in Golang, that uses Chrome Headless to generate screenshots of web interfaces using the command line, with a handy report viewer to process results. Both Linux and macOS is supported, with Windows support mostly working.

Inspiration for gowitness comes from Eyewitness. If you are looking for something with lots of extra features, be sure to check it out along with these other projects.

documentation

For installation information and other documentation, please refer to the wiki here.

license

gowitness is licensed under a GNU General Public v3 License. Permissions beyond the scope of this license may be available at http://sensepost.com/contact/.

Comments
  • Screenshot failed Chrome process reported an error taking screenshot

    Screenshot failed Chrome process reported an error taking screenshot

    ERRO[2020-05-12 16:43:39] Screenshot failed destination=https-www.google.com.png err="exit status 1" url="https://www.google.com/" ERRO[2020-05-12 16:43:39] Chrome process reported an error taking screenshot error="exit status 1" url="https://www.google.com/"

    it is giving me an error every time I do a screenshot, I have chrome and chromium latest version installed, anyone knows whats wrong?

    bug 
    opened by Kaiziron 25
  • Failed to query url

    Failed to query url

    Describe the bug Trying to screen shot single url

    To Reproduce Steps to reproduce the behavior: 1.Type this in terminel and get the following error gowitness single --url=https://www.facebook.com/ Error gowitness single --url=https://www.facebook.com/ ERRO[2020-04-01 15:32:28] Failed to query url error="[context deadline exceeded (Client.Timeout or context cancellation while reading body)]" url="https://www.facebook.com/" INFO[2020-04-01 15:32:28] Complete run-time=3.1479092s Screenshots If applicable, add screenshots to help explain your problem. image

    Version Information: Ubuntu WSL (Windows)

    question 
    opened by hunter0x8 12
  • Full Size Screenshots

    Full Size Screenshots

    Hello,

    I try include the "--fullPage" flag for chrome, instead of resolution. But with no success. This is very useful when you have pages with different lengths. Long product lists etc.

    I would be very grateful for any help.

    Best Regards Askan

    enhancement 
    opened by abssimon 9
  • Single URL errors

    Single URL errors

    Describe the bug I am experiencing two errors when trying to run gowitness. One error says something about a "context deadline exceeded", and the other is "failed to save screenshot buffer"

    To Reproduce Steps to reproduce the behavior: On the command line, type:

    1. gowitness single https://tesla.com
    2. gowitness single https://reddit.com

    Expected behavior Screenshots will be taken of the site.

    Screenshots image

    image

    Version Information:

    • OS: Kali GNU/Linux Rolling x86_64
    • gowitness: 2.0.0
    bug 
    opened by znre 8
  • Docker Image seems to be broken? (assets 404)

    Docker Image seems to be broken? (assets 404)

    # docker run --rm -v $(pwd):/data -p7171:7171 leonjza/gowitness gowitness report serve --address :7171
    10 Sep 2022 07:46:50 WRN this command is deprecated. use 'gowitness server' instead
    10 Sep 2022 07:46:50 WRN exposing this server to other networks is dangerous! see the server command help for more information
    10 Sep 2022 07:46:50 INF db path path=gowitness.sqlite3
    10 Sep 2022 07:46:50 INF screenshot path path=screenshots
    10 Sep 2022 07:46:50 INF server listening address=:7171
    
    • Submit New URL -> https://example.com
    • Access to Details Page.
    • See the following images

    image1 image2

    Invalid : http://10.0.0.69:7171/details/assets/css/tabler.min.css
    Valid: http://10.0.0.69:7171/assets/css/tabler.min.css
    
    bug 
    opened by 39ff 7
  • --fullpage / -F returns `panic: runtime error: invalid memory address or nil pointer dereference`

    --fullpage / -F returns `panic: runtime error: invalid memory address or nil pointer dereference`

    Fullpage (via --fullpage or -F creates a panic:

    $ gowitness single -F https://github.com                                                                                                                                                                   
    20 Mar 2021 10:14:58 INF preflight result statuscode=200 title="GitHub: Where the world builds software ยท GitHub" url=https://github.com
    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0xa4330b]
    
    goroutine 1 [running]:
    github.com/sensepost/gowitness/chrome.(*Chrome).Screenshot.func2(0xe22760, 0xc00048e2d0, 0x0, 0x0)
            /home/dave/go/pkg/mod/github.com/sensepost/[email protected]/chrome/chrome.go:182 +0x8b
    github.com/chromedp/chromedp.ActionFunc.Do(0xc0003249a0, 0xe22760, 0xc00048e2d0, 0x0, 0x0)
            /home/dave/go/pkg/mod/github.com/chromedp/[email protected]/chromedp.go:606 +0x3a
    github.com/chromedp/chromedp.Tasks.Do(0xc000327bf0, 0x3, 0x3, 0xe22760, 0xc00048e2d0, 0x416a78, 0x30)
            /home/dave/go/pkg/mod/github.com/chromedp/[email protected]/chromedp.go:616 +0x72
    github.com/chromedp/chromedp.Tasks.Do(0xc0004a9ba0, 0x1, 0x1, 0xe22760, 0xc00048e2d0, 0xc0000d0000, 0xe22760)
            /home/dave/go/pkg/mod/github.com/chromedp/[email protected]/chromedp.go:616 +0x72
    github.com/chromedp/chromedp.Run(0xe22760, 0xc000327b90, 0xc000143ba0, 0x1, 0x1, 0xe22760, 0xc000327b90)
            /home/dave/go/pkg/mod/github.com/chromedp/[email protected]/chromedp.go:274 +0xdb
    github.com/sensepost/gowitness/chrome.(*Chrome).Screenshot(0xc000242720, 0xc0001ee7e0, 0x0, 0x0, 0x0, 0x0, 0x0)
            /home/dave/go/pkg/mod/github.com/sensepost/[email protected]/chrome/chrome.go:171 +0x5ac
    github.com/sensepost/gowitness/lib.(*Processor).takeScreenshot(0xc0004a9ce0, 0x0, 0x0)
            /home/dave/go/pkg/mod/github.com/sensepost/[email protected]/lib/processor.go:126 +0xdf
    github.com/sensepost/gowitness/lib.(*Processor).Gowitness(0xc0004a9ce0, 0x0, 0x0)
            /home/dave/go/pkg/mod/github.com/sensepost/[email protected]/lib/processor.go:60 +0x1b5
    github.com/sensepost/gowitness/cmd.glob..func9(0x122c560, 0xc00026a5c0, 0x1, 0x2)
            /home/dave/go/pkg/mod/github.com/sensepost/[email protected]/cmd/single.go:53 +0x198
    github.com/spf13/cobra.(*Command).execute(0x122c560, 0xc00026a5a0, 0x2, 0x2, 0x122c560, 0xc00026a5a0)
            /home/dave/go/pkg/mod/github.com/spf13/[email protected]/command.go:856 +0x2c2
    github.com/spf13/cobra.(*Command).ExecuteC(0x122bde0, 0xc000000180, 0x200000003, 0xc000000180)
            /home/dave/go/pkg/mod/github.com/spf13/[email protected]/command.go:960 +0x375
    github.com/spf13/cobra.(*Command).Execute(...)
            /home/dave/go/pkg/mod/github.com/spf13/[email protected]/command.go:897
    github.com/sensepost/gowitness/cmd.Execute()
            /home/dave/go/pkg/mod/github.com/sensepost/[email protected]/cmd/root.go:49 +0x31
    main.main()
            /home/dave/go/pkg/mod/github.com/sensepost/[email protected]/main.go:6 +0x25
    

    Version

    Installed via go get

    $ gowitness version                                                                                                                                                                                        
    gowitness: 2.3.4
    
    git hash: dev
    go version: dev
    
    opened by Daviey 7
  • Consider integrating Chrome DevTools protocol

    Consider integrating Chrome DevTools protocol

    Love the tool, but I'm running into an edge case that might only be solvable by a big hammer. Might be overkill for this project, but I wanted to propose just in case :-)

    I'm trying to capture screenshots from go tool trace -http. Problem is, these pages can take up to 15 seconds to properly load. I've tried using --timeout 15 --chrome-time-budget 15 --chrome-timeout 15. None of those help - Chrome considered the page loaded, and AFAIK there is no method to simply say "please wait 10 seconds before you take the screenshot, even if the page reports it is loaded before then".

    A google search leads me here, where a user has a similar issue. I looked into the two recommended solutions. Both internally utilize the Chrome DevTools Protocol, which allows you to connect to a headless instance and communicate with it. As would be expected, this allows a lot more power than passing flags, e.g. you wait for DOM events, or screenshot specific page elements , or otherwise engage with the page. The more developed project is https://github.com/puppeteer/puppeteer, which is a Google project for programmatically interacting with headless Chromium.

    There is already a golang project that speaks the DevTools protocol - https://github.com/chromedp/chromedp. However, it seems focused on being a golang version of puppeteer - intended for programmatic usage. For example, here is their screenshot source code. This project is clean and simply focused on getting a screenshot.

    Would you be open to PRs that attempt to utilize chromedp in some circumstances? Not quite sure the proper combination of flags to indicate when it should be used, that would need to be discussed. Perhaps some "wait X seconds after specified DOM event" approach?

    Misc note: The API call for taking a screenshot using DevTools is in the 1.3 release candidate, whereas 1.2 is the current stable. Doubt it's an issue, as clearly puppeteer finds it OK to expose features from the RC protocol version, but thought it was worth mentioning regardless.

    enhancement 
    opened by hamiltont 7
  • invalid memory address or nil pointer dereference

    invalid memory address or nil pointer dereference

    gowitness constantly gives the following error after updating to 1.1.0

    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x38 pc=0x14093c6]
    
    goroutine 5183 [running]:
    github.com/sensepost/gowitness/utils.getPageTitle(0xc0001bee70, 0xc000ae4d98, 0x100e448)
    	/Users/leonjza/Documents/git/gowitness/utils/processor.go:124 +0xa6
    github.com/sensepost/gowitness/utils.getPageTitle(0xc0001bee00, 0xc000ae4de0, 0x138c945)
    	/Users/leonjza/Documents/git/gowitness/utils/processor.go:128 +0x7a
    github.com/sensepost/gowitness/utils.getPageTitle(0xc0001bed90, 0x0, 0x0)
    	/Users/leonjza/Documents/git/gowitness/utils/processor.go:128 +0x7a
    github.com/sensepost/gowitness/utils.getPageTitle(0xc0001becb0, 0xc000c0d0a0, 0xc0001becb0)
    	/Users/leonjza/Documents/git/gowitness/utils/processor.go:128 +0x7a
    github.com/sensepost/gowitness/utils.ProcessURL(0xc000121480, 0x1b62de0, 0x1b60bb0, 0x9)
    	/Users/leonjza/Documents/git/gowitness/utils/processor.go:47 +0x51c
    github.com/sensepost/gowitness/cmd.glob..func1.1(0xc00021e500, 0xc000241ac0, 0xc0002446c0, 0xc000121480)
    	/Users/leonjza/Documents/git/gowitness/cmd/file.go:94 +0x8a
    created by github.com/sensepost/gowitness/cmd.glob..func1
    	/Users/leonjza/Documents/git/gowitness/cmd/file.go:90 +0x5ec
    
    bug 
    opened by 0xibram 7
  • Hanging during file scan

    Hanging during file scan

    Having a lot of issues with GoWitness hanging during scans, timeout param and thread count don't seem to have any effect.

    gowitness file -f <urls> --disable-db --debug --threads 2 --fullpage single -P <dir>

    ...

    * hangs *

    Would it be possible to leverage the timeout param on the context here...

    https://github.com/sensepost/gowitness/blob/master/chrome/chrome.go#L153

    ...as was done during preflight?

    https://github.com/sensepost/gowitness/blob/master/chrome/chrome.go#L64

    Chromium 90.0.4430.212

    Htop confirms plenty of memory/cpu available. Possibly related.

    https://github.com/chromedp/chromedp/issues/37

    Great work btw!

    opened by lpendergrass 6
  • Bring back html report generation

    Bring back html report generation

    In previous version of gowitness, outputting an html report was a feature, but it has since been removed.

    It's really handy when the resulting report is something that needs to be shared, and it would be really helpful to have the reporting component have the option to create files which users could just zip up and send around if the option to have multiple folks hit port 7171 on some host isnt availble - like in the instance where there is a vm in a remote environment where gowitness was run, and to have 'an entire team review the results', there is the overhead of cobbling together ssh tunnels or vpns to get people access to this remote asset.

    it's way simpler to just zip up a dir with an html report and screenshots and host it somewhere more accessible, or just drop it into some kind of collaboration tool

    tl;dr - please bring back html report output <3

    enhancement 
    opened by Viss 6
  • Support for chromium

    Support for chromium

    Is your feature request related to a problem? Please describe. I'm miss some screenshots with chrome headless

    Describe the solution you'd like I would like if chromium is available for screenshotting the sites.

    Describe alternatives you've considered Chromium

    Additional context I hope it will be in actions ASAP.

    question 
    opened by JDRanpariya 6
  • Ports options for

    Ports options for "file" command

    Hi there,

    Would it be possible to add to the "file" command the same ports options that exist for the "scan" command ? I mean the following ones :

    --ports string --ports-large --ports-medium --ports-small

    That would avoid some extra bash gymnastic to add the custom ports to the URLs file.

    By the way, great tool, thanks !

    opened by h49nakxs 0
  • 21 Nov 2022 14:24:03 INF processing complete - But no screenshot were captured

    21 Nov 2022 14:24:03 INF processing complete - But no screenshot were captured

    Hey there,

    I have a list of 500 urls, and I wanted to capture the screenshot so I run this command-

    gowitness.exe file -f .\working_500.txt --threads 20

    But after hitting the enter I am getting the process complete but when I check the screenshots folder none image was found. And also I can see the sql3 file was there.

    What should I do here?

    opened by agrawalsmart7 0
  • Taking screenshots of HTTPS pages that require a browser exeption

    Taking screenshots of HTTPS pages that require a browser exeption

    Hello, Is there a way to use Gowitness to take screenshots of HTTPS pages that require confimation of the exeption before arriving at the landing page?

    opened by brooky75 0
  • Gowitness Error

    Gowitness Error

    I am getting the following error.

    2

    ~ โฏ gowitness version
    gowitness: 2.4.2
    
    git hash: c9c6b17
    go version: go1.19_linux/amd64
    ~ โฏ gowitness2 version
    gowitness: 2.4.2
    
    git hash: c9c6b17
    go version: go1.19_linux/amd64
    
    2022/10/25 15:00:17 [Recovery] 2022/10/25 - 15:00:17 panic recovered:
    template: gallery.html:163:50: executing "gallery.html" at <.Data.Ordered>: can't evaluate field Data in type int
    /go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:911 (0x48289b1)
    /go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:920 (0x4828a6c)
    /go/src/github.com/sensepost/gowitness/cmd/server.go:438 (0x4847864)
    /go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:173 (0x4832161)
    /go/pkg/mod/github.com/gin-gonic/[email protected]/recovery.go:101 (0x483214c)
    /go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:173 (0x4831266)
    /go/pkg/mod/github.com/gin-gonic/[email protected]/logger.go:240 (0x4831249)
    /go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:173 (0x4830330)
    /go/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:616 (0x482ff98)
    /go/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:572 (0x482fadc)
    /usr/local/go/src/net/http/server.go:2947 (0x43cc58b)
    	serverHandler.ServeHTTP: }
    /usr/local/go/src/net/http/server.go:1991 (0x43c77a6)
    	(*conn).serve: c := w.conn
    /usr/local/go/src/runtime/asm_amd64.s:1594 (0x40677c0)
    	goexit:
    
    opened by secfb 0
  • Broken Pages Navigator

    Broken Pages Navigator

    Describe the bug The latest version of gowitness server has the pages navigator broken. When you have a lot of screenshots it only shows 1 page.

    To Reproduce Steps to reproduce the behavior:

    1. Take a lot of screenshots possibly about 100 of them
    2. Launch go witness server
    3. Scroll to the bottom to view the pages navigator

    Expected behavior The expected behavior is to view the button to navigate the pages as in v2.4.1

    Screenshots The below is what is currently shown

    image

    Error from the command line, forgot to attach this. The below happens when I change pages via the URL since the UI doesn't allow for this.

    http://localhost:7171/gallery?perception_sort=true&limit=66&page=1

    image

    The below is the expected outcome that is in version 2.4.1

    image

    Version Information:

    • gowitness: 2.4.2
    opened by ikuamike 2
  • too many SQL variables

    too many SQL variables

    2022/10/18 10:30:36 /root/go/pkg/mod/github.com/sensepost/[email protected]/cmd/merge.go:141 too many SQL variables

    gowitness merge --input-path all/allweb_screenshots/tmp_sqlite3 -o all/allweb_screenshots/gowitness.sqlite3

    opened by r00tSe7en 2
Releases(2.4.2)
  • 2.4.2(Sep 11, 2022)

    fixes

    • Improve web UI reverse proxy support when served under a sub directory. A new wiki article was also added (in https://github.com/sensepost/gowitness/commit/e904933ab1d877beca7f88b14b513144c5c23ca0) (thanks @random-robbie for PR's prompting this).

    other

    • Bump dependencies and build with Go 1.19 (in https://github.com/sensepost/gowitness/commit/3b2acebe5d7ae126ffb9134ab08f932946c0da80)
    8577bca1f581d7f163144b5c9068861fcf401524  gowitness-2.4.2-darwin-amd64
    64b7469d97a511650f1efb74499878ad3ef8e76d  gowitness-2.4.2-darwin-arm64
    e98b223ae71ef7a8df75ba0a6461b6b772a2176e  gowitness-2.4.2-linux-amd64
    18556f2b0b856d90865ddae653c2e05182541e37  gowitness-2.4.2-linux-arm64
    adb157143d84ff697c0cf965df3ce04ae34a5a48  gowitness-2.4.2-linux-armv7
    6de652cf5ddf8f4f541f6172f127d23747353097  gowitness-2.4.2-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-2.4.2-darwin-amd64(21.17 MB)
    gowitness-2.4.2-darwin-arm64(20.46 MB)
    gowitness-2.4.2-linux-amd64(18.97 MB)
    gowitness-2.4.2-linux-arm64(18.04 MB)
    gowitness-2.4.2-linux-armv7(17.59 MB)
    gowitness-2.4.2-windows-amd64.exe(19.21 MB)
  • 2.4.1(Jul 30, 2022)

    new

    • Add ability to specify additional headers when screenshotting via the HTTP api. See the API docs for a usage example (in https://github.com/sensepost/gowitness/commit/f5e2aeac99bf3e8096e25b2f9f2c38fad3037110).
    • Add linux/arm and linux/armv7 targets to release binaries (in https://github.com/sensepost/gowitness/commit/12f01a95be815b7f3d0bc099bda50ae8ac005a49)

    fixes

    • Fix nmap command example documentation. (thanks @crypt0rr ) (via #138)

    other

    • Build release binaries with Go 1.18.4 (in https://github.com/sensepost/gowitness/commit/31c6e64c091746829d4d5ac57aa331f13da71d9c)
    • Bump dependencies (in https://github.com/sensepost/gowitness/commit/2041445c78a6471482c3691713f31a5a2051dd0e)
    • Fix internal flag name typo (in https://github.com/sensepost/gowitness/commit/86134ed639acc9d3debc7859a171a57aeca6c077)
    8c5dfc2b7f5a66aec4d861522c2d78452e1950ac  gowitness-2.4.1-darwin-amd64
    bd4026cad944b6143fbad90b0a9f2e41671509f6  gowitness-2.4.1-darwin-arm64
    82c56c41caf8e1474adc851a90df48cb5b7c9ee1  gowitness-2.4.1-linux-amd64
    b6391b19c6b5316e74c18f8c05dcec1987186170  gowitness-2.4.1-linux-arm64
    9f79dfa11aaf6788a1150da41c12da03185e26af  gowitness-2.4.1-linux-armv7
    5ec37979e14290200f0d0919006102cefa89edd2  gowitness-2.4.1-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-2.4.1-darwin-amd64(20.83 MB)
    gowitness-2.4.1-darwin-arm64(20.24 MB)
    gowitness-2.4.1-linux-amd64(18.67 MB)
    gowitness-2.4.1-linux-arm64(17.86 MB)
    gowitness-2.4.1-linux-armv7(17.33 MB)
    gowitness-2.4.1-windows-amd64.exe(18.78 MB)
  • 2.4.0(Jun 10, 2022)

    66 commits later, this is a major release of gowitness with many new features, fixes and overall polish. Some screenshots to see what the updated report server UI looks like is below, followed by the change log for this release. Enjoy!

    The new Dashboard view

    gowitness-dashboard

    A dark themed, detailed view:

    gowitness-detail

    A light themed, detailed view:

    gowitness-detail-light

    new

    • Add application technology identification using Wappalyzer (via #104 and #110 and #127) (in 3a80bf6db6e887180c4963d8e10b1dea175584e3 and e79214e3be016be04de8eac34ce694016c2d3143 and 65816c650f56e5bbe029077226f4ad7f4ef39019) (thanks guervild and Ice3man543 and terrabitz)
    • Improve performance in HostsInCIDR() method (via #107) (in 71125b2b19f08b7bc87481c2d7a0c50aa8b6fbb0) (thanks NickChillClub)
    • Add a Nessus parser (via #123) (in e1923bb92e4e0935142e331225f8b903c396d509) (thanks randomactsofsecurity)
    • Add additional header support (via #124) (in c7b874ad63bf6198dcafc26531b51974ae6fa460) (thanks randomactsofsecurity)
    • Refactor the webserver to make use of Gin (in 6fad6c3a9dac17305012e5119cf51baf2315607d)
    • Various web UI dependency upgrades, fixes and layout updates (via 05f3c32086588f89b10937f7b303486705cb2d6d)
    • Add new API endpoints. API documentation can be found in the Wiki here (via 49c87022eafa56749b36a5b358f76fd72c9b4e21 and 6769e88dfcc6e1bf1a89bf2055fab32f619c3517)
    • Add a new dashboard view (via 00f939423095f5b16facae401783baa91bad4b72)
    • Restore the ability to export static HTML reports again (via 3e459eb0a10d10c80f929c8a387bb9fbc8ff6683)
    • Record both browser console logs and network events as emitted via Chrome. These fields are searchable and make it possible to see the IP's that hosts resolved to at the time of the screenshot (in 396de21ed5f8656b0cf940c43316d40320ec31e9 and 3efb7b0c5a2d04108e7c0e25362a2edd730f3663)
    • Add a simple pager to the detail view (in 0c14e67980e87bc6af022c236f83fba0b8ac9e5e)
    • Add a theme switcher for light mode or dark mode, defaulting to dark mode (in 0cbdafb4e574fe4eafbafa2f74bdbad6205965a7)
    • Add the ability to dump and save the DOM (in 453a0fcfa2868c6498b1d3fb55559de456a01528)
    • Significantly refactor the search feature to more agressively search through collected data. This includes URL's, DOM's, network events, console logs and more. (in 78303cb7aa7f71b9acbc7df59ea8c57f715b5879)
    • Add the ability to save screenshots as PDF's instead of PNG's (in 2f87924f3431aceb08e49b61901dd5a5445fa57a)
    • Add an example docker-compose.yml file to show how the report server could be used when exposed to a larger network.

    fixes

    • Improve reliability, dealing with some cases where Chrome may hang (via #132) (in 79c4f6e950715157a829560344daa15fdae85188) (thanks rtpt-jonaslieb and randomactsofsecurity)
    • Prevent screenshot filenames from becoming overly long (in 19b4e15b57996a93827d14c602046a6bc68f79aa)

    other

    • build release binaries with Go 1.18.2 (186f57eb9ee1cd429d262b3603256423f75f13be) (8b88b472e673355530439067a5e5030690ffe82f) (19c182705b3d18ee9f7a774c863cca410184190d)
    • build releases for macOS ARM (96df49e00361fdd9c15a720571176656f2d8d0f2)
    • bump dependencies (3092a86d381076724fe69ec6724618494dd3fea7) (861543ed7e4c7279121e1bd4d23db8b9ed573a66) (01005bbfc76839054ca0684029adc97606ec3845) (af7a504f04fdf3f4964625ca8aeed78400a2849a) (c6da64d46657c01c7608fd41552dfca4ccf43aa3) (0002ef967a32eda866b34add071fa2e4240fe3ba)
    • use github actions to build docker image (ff1241d986d8da542724efee08ceff957e86c3b8)
    • replace vfsgen with native Golang embed for web assets (d98ae0ce3e054d4ffd5bd41a1f5cefef3bcc42fd)
    • Bump the default User-Agent string used (via ec73fbb9fd3023b4da881f67c46a22560d269057)
    76065c1c937630e44ecde32abfc0fd945cb20483  gowitness-2.4.0-darwin-amd64
    b556b7f45a1b313a1686843f219cf8b045ad0e48  gowitness-2.4.0-darwin-arm64
    d361fe3cdf738b0fe60b204a03017e3b4b38ffb5  gowitness-2.4.0-linux-amd64
    0f91805c85dd665758e205dda8e8edf09dacb498  gowitness-2.4.0-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-2.4.0-darwin-amd64(20.45 MB)
    gowitness-2.4.0-darwin-arm64(19.85 MB)
    gowitness-2.4.0-linux-amd64(18.29 MB)
    gowitness-2.4.0-windows-amd64.exe(18.41 MB)
  • 2.3.6(May 20, 2021)

    This is primarily a security/hardening release.

    fixes

    • Limit the allowed URI's that may be submitted to the screenshot or report server to only those starting with http / https by default. You can use the new --allow-insecure-uri / -A flag to disable this. Take note that with the -A flag, it means someone could screenshot file:// URI's and read local files on the host filesystem. To combat some of this abuse, by default the report & screenshot servers listen on localhost only. However, if you are exposing the report or screenshot servers to the Internet (or other untrusted networks), make sure you restrict access to it as other problematic URI's such as localhost and cloud metadata URIs (and any other SSRF vector) will also be reachable this way. (https://github.com/sensepost/gowitness/commit/57dffb7a890996daf37254719b035166f1b33d6b) (thanks to Omri Inbar from Checkmarx for reporting the LFI).

    other

    • go-staticcheck fixes and other code cleanups (https://github.com/sensepost/gowitness/commit/11494176a8fcbb4373e61096d147bd2fe9318d5a)
    8a2ca3dc8a58ce3e103aeabd13df7713c0322b2c  gowitness-2.3.6-darwin-amd64
    b50938b99af45d7bc209428a648f057b11a6025f  gowitness-2.3.6-linux-amd64
    1dcee72acdf074f1850263643ca9297b0d5b38e3  gowitness-2.3.6-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-2.3.6-darwin-amd64(17.44 MB)
    gowitness-2.3.6-linux-amd64(15.23 MB)
    gowitness-2.3.6-windows-amd64.exe(16.88 MB)
  • 2.3.5(May 18, 2021)

    fixes

    • Check the correct error when parsing Proxy URI's (https://github.com/sensepost/gowitness/commit/28a8c776195a06ea9080a952da8f9f9182108b19)
    • Fix a typo (https://github.com/sensepost/gowitness/commit/c168591ae1bb6e9ec0cc1b83c0d9e8cb7cd709e6) (thanks @benichmt1 via #96)

    other

    • Bump go version used for release builds to 1.15.10 (https://github.com/sensepost/gowitness/commit/6697b99410b0ca1655eebaf0c96abcaca63f5711)
    • Bump dependencies to use chromedp 0.7.2, fixing #101 (https://github.com/sensepost/gowitness/commit/d503334e569d5f7d0e471a65fe766c0cfb0fafee)
    72dcadc450a02e931ab9143ef23f9ddba8a6d9cd  gowitness-2.3.5-darwin-amd64
    71052ed766b0155c7331c155e7cbed213776c3a8  gowitness-2.3.5-linux-amd64
    5446ad08a709d4462269776af78578410616929d  gowitness-2.3.5-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-2.3.5-darwin-amd64(17.43 MB)
    gowitness-2.3.5-linux-amd64(15.23 MB)
    gowitness-2.3.5-windows-amd64.exe(16.88 MB)
  • 2.3.4(Mar 9, 2021)

    new

    • Add the Public Key Algorithm field to the database (https://github.com/sensepost/gowitness/commit/3e9cf0548696cd09cc9567bca4eff22b94041f63) (fixes #91)
    78722cc482250dba386c0e562568212a1dcbf4d1  gowitness-2.3.4-darwin-amd64
    5fb571b12d761f26adbec073d0d73bc45d194259  gowitness-2.3.4-linux-amd64
    26726bf22eb9ad6a274aa07b83e8a624904e937c  gowitness-2.3.4-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-2.3.4-darwin-amd64(17.39 MB)
    gowitness-2.3.4-linux-amd64(15.19 MB)
    gowitness-2.3.4-windows-amd64.exe(16.83 MB)
  • 2.3.3(Mar 3, 2021)

    fixes

    • Automatically dismiss JavaScript dialog boxes which caused gowitness to stall (https://github.com/sensepost/gowitness/commit/bd6114e70b299ad3627aa5074f7ab81ab0732a70) (via #89) (thanks @Serizao)
    f86cc43856f756960898bbc4ff8ce16ded30717f  gowitness-2.3.3-darwin-amd64
    b2c5afe02d91c26dfe06547f668390d517a934e0  gowitness-2.3.3-linux-amd64
    750c84767a8786fa812f7836ed5b3586f2b7c835  gowitness-2.3.3-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-2.3.3-darwin-amd64(17.39 MB)
    gowitness-2.3.3-linux-amd64(15.19 MB)
    gowitness-2.3.3-windows-amd64.exe(16.83 MB)
  • 2.3.2(Feb 26, 2021)

  • 2.3.1(Feb 12, 2021)

    other

    • Bump the golang build version to 1.15.8 (https://github.com/sensepost/gowitness/commit/ea74b977351eda8a54ff5653360508b5282912fa)
    0c753be54f305d89120d4827b30eb602651a16e4  gowitness-2.3.1-darwin-amd64
    5302eadb51736eafedef9a51a87c71171d536552  gowitness-2.3.1-linux-amd64
    2750f88de5093f493927d803578c254debef65b6  gowitness-2.3.1-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-2.3.1-darwin-amd64(16.51 MB)
    gowitness-2.3.1-linux-amd64(14.44 MB)
    gowitness-2.3.1-windows-amd64.exe(15.96 MB)
  • 2.3.0(Dec 9, 2020)

    new

    • Add the --delay flag to have Chrome wait between navigation and screenshotting. (https://github.com/sensepost/gowitness/commit/c67b522d6db7f5640ee17deb58063b07ec449e8a)
    dd3c98d56daf34dce8e78448cf76c4992fdb7b35  gowitness-2.3.0-darwin-amd64
    dfbf5c07c2009d61000b49c35556bdcc706f2844  gowitness-2.3.0-linux-amd64
    374727171c6c0095c72d98d8c118ce8ac79ad644  gowitness-2.3.0-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-2.3.0-darwin-amd64(17.56 MB)
    gowitness-2.3.0-linux-amd64(15.50 MB)
    gowitness-2.3.0-windows-amd64.exe(15.40 MB)
  • 2.2.1(Dec 6, 2020)

    This is small a bug fix release.

    fixes

    • Prevent crashes when the database is disabled (#83)
    • Correctly parse URL's with a fragment (#) in it (#84)

    other

    • Bump golang build container version to 1.14.12 (https://github.com/sensepost/gowitness/commit/16229e33c678f6635f7a6e728e2f78a4de5a571f)
    5591e6e601ae5377c72932af3cb845f6a71d72e1  gowitness-2.2.1-darwin-amd64
    357380c4771afe2f9fb6e7fad017882d9d13c6e7  gowitness-2.2.1-linux-amd64
    8b1ab7b1f2652839a924d4e6271bce26514fe700  gowitness-2.2.1-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-2.2.1-darwin-amd64(17.56 MB)
    gowitness-2.2.1-linux-amd64(15.50 MB)
    gowitness-2.2.1-windows-amd64.exe(15.40 MB)
  • 2.2.0(Nov 1, 2020)

    new

    • Add a new merge sub command. This command takes multiple gowitness sqlite databases and outputs a new, merged database. Check gowitness merge --help for more information.

    other

    • Small report viewer UI updates (thanks @hackerpain).
    • Add an error message when the report viewer has no results, indicating that the database is either empty or not found.

    fixes

    • Improved file name generation, specifically to append the .png extension.
    5859a65d295b1cde4c3176b6b7c31225de495964  gowitness-2.2.0-darwin-amd64
    366975463825f9d25f136c52a2509ac8d9c09d6f  gowitness-2.2.0-linux-amd64
    67f78eb6404f22ea938a13434a80ff102f96c7fa  gowitness-2.2.0-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-2.2.0-darwin-amd64(17.55 MB)
    gowitness-2.2.0-linux-amd64(15.48 MB)
    gowitness-2.2.0-windows-amd64.exe(15.38 MB)
  • 2.1.2(Sep 30, 2020)

  • 2.1.1(Sep 23, 2020)

  • 2.1.0(Sep 23, 2020)

    new

    • Add proxy support (https://github.com/sensepost/gowitness/commit/9736345601bcb75f56ac5340b738d5615178eeb3) thanks @randomactsofsecurity

    fixes

    • Ensure that the screenshot path is ready for the single command
    • Build artefacts with CGO_ENABLED=1 for all platforms so that the sqlite library in use also works cross-platform
    0a6395a6882bc1808386e788cb2c7dee20c0b8c4  gowitness-2.1.0-darwin-amd64
    d1b21650ecd2459169c19f90113628a0cf2f6679  gowitness-2.1.0-linux-amd64
    dc29f0b2adc11ddb47a63485871bb9908055a273  gowitness-2.1.0-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-2.1.0-darwin-amd64(17.46 MB)
    gowitness-2.1.0-linux-amd64(15.41 MB)
    gowitness-2.1.0-windows-amd64.exe(15.31 MB)
  • 2.0.0(Sep 18, 2020)

    This version contains a major code refactor with many changes and upgrades to improve the overall performance and experience of using gowitness! Enjoy.

    new

    • Add json & csv output flags for the report list subcommand.
    • Add better error handling for the screenshot integration server subcommand (serve)
    • Add a new interactive report viewer subcommand: report serve.
    • Add the ability to submit URL's for screenshotting via the report viewer.
    • Add the ability to search for title names in the report viewer.

    changes

    • Replace the home grown invocation of Google Chrome with chromedp.
    • Remove the proxy server hack to bypass TLS errors in the v1 Chrome invocation implementation. We now use the ignore-certificate-errors flag via chromedp.
    • Refactor the file, scan, nmap and single subcommands for better readability and options parsing.
    • Replace logging from logrus to zerolog.
    • Remove log levels and add a --debug flag.
    • Replace the database used from BuntDB to Sqlite3.
    • Remove gorequest used for preflighting and replace it with the nativehttp.Client
    • Remove static HTML report generation.
    • Update the Dockerfile to use chromedp/headless-shell as the base image.

    fixes

    Various bugs found along the way were also fixed, but most importantly the use of chromedp should make for a more stable and predictable experience overall.

    Source code(tar.gz)
    Source code(zip)
    gowitness-2.0.0-darwin-amd64(14.60 MB)
    gowitness-2.0.0-linux-amd64(14.36 MB)
    gowitness-2.0.0-windows-amd64.exe(13.47 MB)
  • 1.3.4(Aug 13, 2020)

    v1.3.4

    new

    • Add support for stdin as a file input source by using - as the file name. This means you can pipe tool output to gowitness. eg. tool | gowitness file --source -. You could use something like subfinder to get urls to screenshot for a domain too! (https://github.com/sensepost/gowitness/commit/d4b20440b77e94603c60b9216004c2bba3840c72)
    • Add a new server sub command to start a webservice to take screenshots. Once the web server is running with gowitness server, browse to it with a url parameter to have a screenshot returned as an HTTP response. eg. http://localhost:7171/?url=https://www.google.com. Thanks @x0rzkov (#55)
    • Add a new --output / -o flag to the single command to specify the target file name for the screenshot. Thanks @gmessow-cxomni (#53)
    • Add a new --open flag to the nmap command to only use ports that were considered open. Thanks @randomactsofsecurity (#52)
    • Add port collections for the scan command in the form of flags. --ports-sm (defaults to enabled), --ports-me and --ports-lg each have a set of ports which may be used in conjunction with the --ports flag to specify other custom ports. (https://github.com/sensepost/gowitness/commit/41494d4ba9a0113306f0e4c58341534eb7d0c92a)

    fixes

    • Restore the ability to have single page reports again by specifying 0 as the chunk size for reports. (https://github.com/sensepost/gowitness/commit/056af0b7bd9ca8bed8aac7a92cb7a7f8cc91fc1c)

    other

    • Improve debug logging for Chrome to help with hunting down issues. Example usage is described in this comment. (https://github.com/sensepost/gowitness/commit/2699bf210e14b66f8fac43c4f1f9bebd1c1c8eea)
    • Ensure that the final ports list is unique for the scan command. (https://github.com/sensepost/gowitness/commit/92c642b5b610bc5c50f5457cf19015978464c1b0)
    3fba7bb295b2c488a5d7badb685638d50f30cdbe  gowitness-darwin-amd64
    b5eb3dd4815004f3ad8e6d6341788283423446ad  gowitness-linux-amd64
    7796a0eda61d89b0d4ef8fcbc7af406da10a18ed  gowitness-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-darwin-amd64(12.06 MB)
    gowitness-linux-amd64(11.19 MB)
    gowitness-windows-amd64.exe(11.17 MB)
  • 1.3.3(Mar 2, 2020)

  • 1.3.2(Feb 29, 2020)

    v1.3.2

    new

    • Add new --service-contains / -w flag to the nmap subcommand to filter by services that contain a string. ie. http. Using something like http will match service names like http-alt, http-proxy, anything-http-anything.
    6d315e3dab8aecaddc9e821d4f205978e1a485cf  gowitness-darwin-amd64
    7e84c46e4e4ac0811beada81c5b2c0716d7765ef  gowitness-linux-amd64
    e35d9668e83d8030f53b2a408d3e54c2543fb5a1  gowitness-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-darwin-amd64(12.04 MB)
    gowitness-linux-amd64(11.17 MB)
    gowitness-windows-amd64.exe(11.15 MB)
  • 1.3.1(Jan 30, 2020)

  • 1.3.0(Dec 10, 2019)

    v1.3.0

    new

    • Add the ability to provide a single URI, or a file containing URI's for screenshots to the scan command. For example: gowitness scan --ports 80,443,8080 --cidr 192.168.0.0/30 --append-uri '/admin'.
    868f770db715e4af49c0a653ab8fbf491cf9eef7  gowitness-darwin-amd64
    6a9a3df684fedb38952debba443d5f858b210a04  gowitness-linux-amd64
    3d078bec86398b8b2978379d849ddb4bbc1b1a1d  gowitness-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-darwin-amd64(12.20 MB)
    gowitness-linux-amd64(11.32 MB)
    gowitness-windows-amd64.exe(11.30 MB)
  • 1.2.1(Oct 17, 2019)

  • 1.2.0(Sep 25, 2019)

    v1.2.0

    new

    • Add the ability to filter nmap scans by port in addition to service names. These filters may be applied by adding the new --port flag for each port that should be considered.

    fixes

    • Prevent a crash when trying to parse an empty <title></title> tag.
    76b469e26ea86f4c9b180b41e000dba74a6f7279  gowitness-darwin-amd64
    bb73123ab2d5d81380680b072d68006d5760e4c7  gowitness-linux-amd64
    2086a579957e446d429aadfe8de80a43d4e70e59  gowitness-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-darwin-amd64(12.18 MB)
    gowitness-linux-amd64(11.30 MB)
    gowitness-windows-amd64.exe(11.27 MB)
  • 1.1.0(Sep 20, 2019)

    v1.1.0

    new

    • Migrate to Go modules! Compiling from source should be a lot easier now. This does however require that you are using golang v 1.11+
    • Relicense to GPL 3. ๐ŸŽ‰
    • Add the ability to sort reports using perception hashing with the --sort-perception / -P flag (thanks @coldshell)
    • Add HTML page title grabbing. This will reflect in all reports.
    • Add the ability to sort reports by status code.
    • Add the ability to sort reports by title.
    • Add the --virtual-time-budget flag for the Chrome headless invocation to give pages some time to settle post load, exposed as the --chrome-time-budget flag in gowitness (thanks @fork-while-fork)
    • Add the ability to disable database features. This is implemented with the new --disabled-db flag.
    • Add the ability to automatically prefix urls with http:// and https:// for urls/domains read from a file.
    • Paginate reports by default.
    • Add report filter to ignore all entries that did not have a successful HTTP response code.
    • Add the ability to parse Nmap XML scans and scan the targets within. This is added as the new gowitness nmap command.
    • Add a new command line report which would read a gowitness.db file and report URL, status code and title. This is implemented in the new gowitness report list command.
    • Add the ability to add extra arguments to the underlying Chrome headless invocation with the new --chrome-arg / -g flag. This could be used to set say a proxy server with -g "--proxy-server=127.0.0.1:8080"

    changes

    • Move the HTML report generation command from gowitness generate to gowitness report generate.

    fixes

    • Update the default user agent string to be more recent.
    • Allow HTML reports to be viewed offline by embedding all of the template assets.
    b8c195eb89854be6f1956648bb39dde97c150d32  gowitness-darwin-amd64
    8eb7d63ed8b36a8a15f2723d969fdcf4b0ef365c  gowitness-linux-amd64
    ee2bbd72e347d6fffb120324c7300a682214c0a1  gowitness-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-darwin-amd64(12.18 MB)
    gowitness-linux-amd64(11.30 MB)
    gowitness-windows-amd64.exe(11.26 MB)
  • 1.0.8(Oct 10, 2018)

  • 1.0.7(Apr 10, 2018)

  • 1.0.6(Mar 22, 2018)

    v1.0.6

    fixes

    • Small refactor of the path resolution logic which results in reports being correctly generated when scans were performed using the --destination / -d flag.

    shasums

    f7b9e30a96534e6108861e807cfbbe44796479a2  gowitness-darwin-amd64
    b1de3e1e2c990a959e1e70412cd407b917a2c35e  gowitness-linux-amd64
    7d133704eec2747d0acb05b8d1d1d5338722db33  gowitness-windows-amd64.exe
    
    Source code(tar.gz)
    Source code(zip)
    gowitness-darwin-amd64(8.89 MB)
    gowitness-linux-amd64(8.06 MB)
    gowitness-windows-amd64.exe(8.16 MB)
  • 1.0.5(Feb 28, 2018)

  • 1.0.4(Feb 26, 2018)

  • 1.0.3(Feb 6, 2018)

Owner
SensePost
Orange Cyberdefense's Ethical Hacking Team
SensePost
Go bindings to OpenGL Utility Library

GLU This package offers minimal bindings for GLU functions. Usage go get github.com/go-gl-legacy/glu License Copyright 2012 The go-gl Authors. All ri

go-gl legacy 21 Aug 18, 2018
User programmable screen overlay using web technologies

Topframe User programmable screen overlay using web technologies Display information and always-on-top widgets Use HTML/JS/CSS to draw on your screen

Jeff Lindsay 323 Nov 19, 2022
๐Ÿ“ธ Clean your image folder using perceptual hashing and BK-trees using Go!

Image Cleaner ?? ?? โžก ?? This tool can take your image gallery and create a new folder with image-alike-cluster folders. It uses a perceptual image ha

lord_santanna 8 Oct 8, 2022
HTML Canvas 2D Context API for mobile, desktop and web

canvas HTML Canvas 2D Context API for mobile, desktop and web Context2D API https://www.w3.org/TR/2dcontext/ native code implement https://github.com/

GoPlus 2 Apr 22, 2022
Ascii-art-web

ASCII-ART-WEB Author: Alika96 How to run Run the following commands: For building an image: docker image build -t ascii-art-web-docker . For showing i

null 0 Dec 13, 2021
Radius parsing in golang using gopacket. You can parse from either live traffic or from pcap of your choice.

go-radius Radius parsing in golang using gopacket. You can parse from either live traffic or from pcap of your choice. RADIUS RADIUS is an AAA (authen

Adeel Khan 5 Dec 1, 2022
A festive Christmas tree GIF generator implemented using only Golang standard library code

Christmas Tree GIF Generator A festive Christmas tree GIF generator implemented

Golang Dorset 0 Feb 4, 2022
Go package for computer vision using OpenCV 4 and beyond.

GoCV The GoCV package provides Go language bindings for the OpenCV 4 computer vision library. The GoCV package supports the latest releases of Go and

The Hybrid Group 5.1k Dec 1, 2022
go-pix is a Go library for generating Pix transactions using Copy and Paste or QR codes. ๐Ÿ’ณ ๐Ÿ’ฐ

go-pix go-pix is a Go library for generating Pix transactions using Copy and Paste or QR codes.

Jonnas Fonini 63 Sep 12, 2022
Canvas is a Go drawing library based on OpenGL or using software rendering that is very similar to the HTML5 canvas API

Go canvas Canvas is a pure Go library that provides drawing functionality as similar as possible to the HTML5 canvas API. It has nothing to do with HT

Thomas Friedel 436 Dec 5, 2022
Convert images to computer generated art using delaunay triangulation.

โ–ฒ Triangle is a tool for generating triangulated image using delaunay triangulation. It takes a source image and converts it to an abstract image comp

Endre Simo 2k Nov 30, 2022
Create a cool glass-like pattern using Voronoi cells

voronoi-glass Have you ever looked through a shower door made of intentionally uneven glass? Everything looks distorted, but maybe also beautiful. Now

Alex Nichol 8 Jul 21, 2022
Simple image compression using SVD

SVD image compression An implementation image compression using SVD decomposition on Go Built With Go 1.17 Gonum Compression examples Header Image Ori

null 4 Mar 30, 2022
A Pong clone made from scratch with Go and C using OpenGL 3.3

Go-Pong A Pong video game clone made with Go lang and OpenGL 3.3 using C. Gameplay Offline Key bindings are 'w' and 's' for the left player and 'up ar

Mohammad Issawi 33 Feb 10, 2022
Cryptseaside generates seaside images using Unix nanoseconds as the seed value.

Cryptseaside Welcome to the Cryptseaside project. Cryptseaside generates seaside images using Unix nanoseconds as the seed value.

Rhymof 1 Nov 12, 2021
A pair programming service using operational transforms

Leaps is a service for collaboratively editing your local files over a web UI, using operational transforms to ensure zero-collision synchronization a

Ashley Jeffs 728 Nov 27, 2022
Human-friendly Go module that builds and prints directory trees using ASCII art

Human-friendly Go module that builds and prints directory trees using ASCII art.

Vadym Borodin 5 Oct 11, 2022
Very simple SVG to PNG converter library using the Inkscape.

svg2png Description Very simple SVG to PNG converter library using the Inkscape.

null 0 Jan 11, 2022
OpenStreetMap PBF golang parser

pbf OpenStreetMap PBF golang encoder/decoder A golang based OpenStreetMap PBF encoder/decoder with a handy command line utility, pbf. pbf Command Line

Alan D. Cabrera 40 Oct 23, 2022