Macmod / godap

A complete TUI for LDAP.
MIT License
378 stars 20 forks source link
active-directory go golang ldap ldap-client terminal tui tview

godap

GitHub Release Go Report Card GitHub DownloadsTwitter Follow

A complete TUI for LDAP.

Demo

Summary

Features

Installation

$ git clone https://github.com/Macmod/godap
$ cd godap
$ go install .

Usage

Bind with username and password

$ godap <hostname or IP> -u <username> -p <password> -d <domain>

or

$ godap <hostname or IP> -u <username>@<domain> -p <password>

Bind with an NTLM hash

$ godap <hostname or IP> -u <username> -H <hash> [-d <domain>]

Bind with a Kerberos ticket

$ KRB5CCNAME=ticket.ccache godap <hostname or IP> -k -d <domain> -t ldap/<DC hostname>

Anonymous Bind

$ godap <hostname or IP>

LDAPS/StartTLS

To use LDAPS for the initial connection (ignoring certificate validation) run:

$ godap <hostname or IP> [bind flags] -S -I

To use StartTLS to upgrade an existing connection to use TLS, use the Ctrl + u keybinding inside godap.

Notice that, if the server certificate is not trusted by your client, you must either have started godap with -I to use the upgrade command properly or toggle the IgnoreCert checkbox using the l keybinding before upgrading.

If LDAPS is available, you can also change the port using l, toggle the LDAPS checkbox, set the desired value for IgnoreCert, and reconnect with Ctrl + r.

SOCKS

To connect to LDAP through a SOCKS proxy include the flag -x schema://ip:port, where schema is one of socks4, socks4a or socks5.

You can also change the address of your proxy using the l keybinding.

Flags

Keybindings

Keybinding Context Action
Ctrl + Enter (or Ctrl + J) Global Next panel
f Global Toggle attribute formatting
e Global Toggle emojis
c Global Toggle colors
a Global Toggle attribute expansion for multi-value attributes
d Global Toggle "include deleted objects" flag
l Global Change current server address & credentials
Ctrl + r Global Reconnect to the server
Ctrl + u Global Upgrade connection to use TLS (with StartTLS)
Ctrl + f Explorer & Search pages Open the finder to search for cached objects & attributes with regex
Right Arrow Explorer panel Expand the children of the selected object
Left Arrow Explorer panel Collapse the children of the selected object
r Explorer panel Reload the attributes and children of the selected object
Ctrl + n Explorer panel Create a new object under the selected object
Ctrl + s Explorer panel Export all loaded nodes in the selected subtree into a JSON file
Ctrl + p Explorer panel Change the password of the selected user or computer account (requires TLS)
Ctrl + a Explorer panel Update the userAccountControl of the object interactively
Ctrl + l Explorer panel Move the selected object to another location
Delete Explorer panel Delete the selected object
r Attributes panel Reload the attributes for the selected object
Ctrl + e Attributes panel Edit the selected attribute of the selected object
Ctrl + n Attributes panel Create a new attribute in the selected object
Delete Attributes panel Delete the selected attribute of the selected object
Enter Attributes panel (entries hidden) Expand all hidden entries of an attribute
Delete Groups panels Remove the selected member from the searched group or vice-versa
Ctrl + s Object groups panel Export the current groups into a JSON file
Ctrl + s Group members panel Export the current group members into a JSON file
Ctrl + g Groups panels / Explorer panel / Obj. Search panel Add a member to the selected group / add the selected object into a group
Ctrl + d Groups panels / Explorer panel / Obj. Search panel Inspect the DACL of the currently selected object
Ctrl + o DACL page Change the owner of the current security descriptor
Ctrl + k DACL page Change the control flags of the current security descriptor
Ctrl + s DACL page Export the current security descriptor into a JSON file
Ctrl + n DACL entries panel Create a new ACE in the current DACL
Ctrl + e DACL entries panel Edit the selected ACE of the current DACL
Delete DACL entries panel Deletes the selected ACE of the current DACL
Ctrl + s GPO page Export the current GPOs and their links into a JSON file
Ctrl + s DNS zones panel Export the selected zones and their child DNS nodes into a JSON file
r DNS zones panel Reload the nodes of the selected zone / the records of the selected node
h Global Show/hide headers
q Global Exit the program

Tree Colors

The nodes in the explorer tree are colored as follows:

Scenario Color
Object exists and is enabled Default
Object exists and is disabled Yellow*
Object was deleted and not yet recycled Gray*
Object was recycled already Red*

* Before v2.2.0, disabled nodes were colored red. This was the only custom color in the tree panel; other nodes were colored with default colors (the "include deleted objects" flag had not been implemented yet).

Contributing

Godap started as a fun side project, but has become a really useful tool since then. Unfortunately these days I only have limited time and there's much to be done, so if you like the tool and believe you can help please reach out to me directly at @marzanol :-)

Contributions are also welcome by opening an issue or by submitting a pull request.

Acknowledgements

Disclaimers

License

The MIT License (MIT)

Copyright (c) 2023 Artur Henrique Marzano Gonzaga

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.