diff --git a/Makefile b/Makefile deleted file mode 100644 index 81e474b..0000000 --- a/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -# Scratch directory for building extrenal sources -BUILD = build - -# Root to install things before they're packaged -TARGET = target - -# Downloaded source files go here -CACHE = cache - -# The end result -BIN = bin - -ifdef ARCH -export CC = ${ARCH}-cc -export STRIP = ${ARCH}-strip -endif - -all: packages - -dist: ctf-install.zip -ctf-install.zip: packages.zip bzImage rootfs.squashfs /usr/lib/syslinux/mbr.bin - zip --junk-paths $@ packages.zip bzImage rootfs.squashfs /usr/lib/syslinux/mbr.bin install.sh - -packages.zip: packages - zip --junk-paths $@ bin/*.pkg - -clean: packages-clean - rm -rf $(BUILD) $(TARGET) $(BIN) - -scrub: clean - rm -rf $(CACHE) - --include */*.mk diff --git a/doc/ipv6.txt b/doc/ipv6.txt deleted file mode 100644 index 2ecc83f..0000000 --- a/doc/ipv6.txt +++ /dev/null @@ -1,25 +0,0 @@ -IPv6 in Dirtbags CTF -==================== - -The contest network uses IPs in the unique local address space -fd84:b410:3441::/48. Each team gets a /64 internal subnet, with -their team number (generally the same digits as the switch port). - -Each subnet's gateway is fd84:b410:3441:$teamno::1. - -Team 15, in switch port 15, on VLAN 15, gets fd84:b410:3441:15::/64. - -Server network is fd84:b410:3441::/64 (AKA fd84:b410:3441:0::/64). To -make things easier to type, use hosts in the /112. The MCP server lives -at fd84:b410:3441::2. - -Vendors typically live on port 23. They usually want a static address. -Tell them this: - - Pick any address in fd84:b410:3441:23::/64. Your default gateway - is fd84:b410:3441:23::1. You may want to assign yourself a subnet, - for example fd84:b410:3441:23:1234:: - -Kevin Nauer gets port 24. In 2012, we needed to route fd80:1::/48 -through fd84:b410:3441:24::2, since he was using that subnet for -his systems. diff --git a/doc/packages.txt b/doc/packages.txt deleted file mode 100644 index dce545c..0000000 --- a/doc/packages.txt +++ /dev/null @@ -1,68 +0,0 @@ -CTF Packages -============ - -Packages are squashfs files. - -A hypothetical package named pkgname.sfs will be mounted under -/opt/pkgname. The following top-level files and directories are -significant: - -* /setup - Run after package is mounted -* /bin/ - Added to $PATH for login shells -* /puzzles/ - Appears as a puzzle category (see "Puzzles" below) -* /answers.txt - Puzzle answers for category pkgname (see "Puzzles" below) - - -setup script ------------- - -The setup script (if it exists and is executable) will be run from within -the mounted directory. This is mostly so you can copy things out of your -read-only package and into read/write areas. - -Don't start your service here, instead, make a new directory in -/var/service and place a "run" script in it. More information can be found -at . - -Some common actions in setup: - - cp -r service/* /var/service # Install startup services - - # Set up a file with ownership - install -o ctf -m 0644 /var/lib/ctf/whatever.db - - -Puzzles -------- - -To expose puzzles, place them in the /puzzles/ directory, like so: - - /puzzles/10/index.html - /puzzles/20/index.html - /puzzles/20/script.cgi - /puzzles/30/index.html - /puzzles/30/something.jpg - /puzzles/40/index.html - -where the second directory is the point value of the puzzle. This means -that no two puzzles in a category can have the same point value. - -Files will be served up from the web server, and CGI scripts will be -executed. - -Store answers to your puzzles in /answers.txt. Answers are one per -line, with the point value appearing first, followed by a space, then -the answer. Answers are case sensitive. You may have multiple answers -for each point value. - - - 10 zip file - 10 zip - 10 ZIP - 10 pkzip - 10 PKZIP - 20 varname - 30 JFIF - 40 0x8040fe67 - 40 8040FE67 - 40 8040fe67 diff --git a/doc/smoke.xcf b/doc/smoke.xcf deleted file mode 100644 index ca38244..0000000 Binary files a/doc/smoke.xcf and /dev/null differ diff --git a/doc/token-categories.txt b/doc/token-categories.txt deleted file mode 100644 index 0067f73..0000000 --- a/doc/token-categories.txt +++ /dev/null @@ -1,180 +0,0 @@ -LANL CTF Token-Based Categories -=============================== - -LANL's CTF contest allows for easy addition of new modules which can use -"tokens". A token is a character string worth one point in the contest. -A point may only be claimed once per team, but multiple teams can claim -the same token and each will get a point. Tokens look like this: - - example:xenon-donut-helix - -where "example" is the category name, and "xenon-donut-helix" is a -bubblebabble hash of a 32-bit random number. The entire string must be -submitted as the token. - -Tokens are issued by the token server using the tokencli program at the -end of this document. They can also be issued before the beginning of a -contest. If your category allows it, it will be much easier for you to -simply request a number of tokens before the contest begins, and -hard-code them into your category. - -You will want to arrange that participants get a token after having -completed some sort of task. In existing categories, tokens are -frequently what lie beneath some trail of hacking. For instance, one -program provides a token when the proper printf formatting string is -provided. Another embeds five tokens into log messages using different -encodings. - -Any machine that you connect to our network will get a wired connection -and should claim a static IP address on the 10.0.2.0/24 network. While -it's unlikely you'll conflict with anyone else, be prepared to -reconfigure it with a new IP on the morning of the event. - -If you plan to request tokens, please do so at least 2 weeks before the -start of the event. I will need to know what you'd like your category -to be called, and how many tokens you'd like. It's not a problem if you -don't use all the tokens you request. - -Remember that this is a security contest, and contestants will be far -more engaged with your category if they have to do real work to get the -tokens. For example, a vendor might be tempted to leave tokens lying -around in configuration boxes to reward people who explore its rich -configurability, but this would probably result in people clicking -through the UI as quickly as possible looking only for tokens. Far -better would be to have the tokens lying under the products -functionality somewhere, forcing contestants to interact with the -product like they would in their day to day work after having purchased -it. A Snort category, for instance, would do well to have tokens within -packet captures which triggered alarms. - -I can't stress that last point enough: constestants have been known to -spend over 2 hours on a single problem. Don't be afraid to really -challenge them. - - - - - - -/* tokencli.c - LANL CTF token client -Author: Neale Pickett - -This program requires an arc4 implementation, email me if you can't find -one you like. - -This also requires a shared 128-bit key. I need the key before you can -start requesting tokens from the server :) - - -This software has been authored by an employee or employees of Los -Alamos National Security, LLC, operator of the Los Alamos National -Laboratory (LANL) under Contract No. DE-AC52-06NA25396 with the -U.S. Department of Energy. The U.S. Government has rights to use, -reproduce, and distribute this software. The public may copy, -distribute, prepare derivative works and publicly display this software -without charge, provided that this Notice and any statement of -authorship are reproduced on all copies. Neither the Government nor -LANS makes any warranty, express or implied, or assumes any liability or -responsibility for the use of this software. If software is modified to -produce derivative works, such modified software should be clearly -marked, so as not to confuse it with the version available from LANL. -*/ - - -#include -#include -#include -#include -#include -#include -#include -#include "arc4.h" - -/* I don't feel compelled to put all the TCP client code in here - * when it's so simple to run this with netcat or ucspi. Plus, using - * stdin and stdout makes it simpler to test. - */ - -int -read_key(char *filename, uint8_t *key, size_t *keylen) -{ - int fd = open(filename, O_RDONLY); - int len; - - if (-1 == fd) { - perror("open"); - return EX_NOINPUT; - } - - len = read(fd, key, *keylen); - if (-1 == len) { - perror("read"); - return EX_NOINPUT; - } - *keylen = (size_t)len; - - return 0; -} - -int -main(int argc, char *argv[]) { - uint8_t skey[200]; - size_t skeylen = sizeof(skey); - char token[200]; - size_t tokenlen; - int ret; - - if (argc != 3) { - fprintf(stderr, "Usage: %s SERVICE SERVICEKEY 3>TOKENFILE\n", argv[0]); - fprintf(stderr, "\n"); - fprintf(stderr, "SERVICEKEY is a filename.\n"); - fprintf(stderr, "Server chatter happens over stdin and stdout.\n"); - fprintf(stderr, "Tokens are written to file descriptor 3.\n"); - fprintf(stderr, "\n"); - fprintf(stderr, "To run with netcat:\n"); - fprintf(stderr, " nc 10.0.0.2 1 -e tokencli cat cat.key 3> tokenfile\n"); - return EX_USAGE; - } - - /* read in keys */ - ret = read_key(argv[2], skey, &skeylen); - if (0 != ret) return ret; - - /* write service name */ - write(1, argv[1], strlen(argv[1])); - - /* read nonce, send back encrypted version */ - { - uint8_t nonce[80]; - int noncelen; - - noncelen = read(0, nonce, sizeof(nonce)); - if (0 >= noncelen) { - perror("read"); - return EX_IOERR; - } - arc4_crypt_buffer(skey, skeylen, nonce, (size_t)noncelen); - write(1, nonce, (size_t)noncelen); - } - - /* read token */ - { - int len; - - len = read(0, token, sizeof(token)); - if (0 >= len) { - perror("read"); - return EX_IOERR; - } - tokenlen = (size_t)len; - } - - /* decrypt it */ - arc4_crypt_buffer(skey, skeylen, (uint8_t *)token, tokenlen); - - /* write it to fd 3 */ - write(3, token, tokenlen); - - return 0; -} - diff --git a/html/burn.jpg b/html/burn.jpg deleted file mode 100644 index cd064d4..0000000 Binary files a/html/burn.jpg and /dev/null differ diff --git a/html/credits.html b/html/credits.html new file mode 100644 index 0000000..82481a4 --- /dev/null +++ b/html/credits.html @@ -0,0 +1,51 @@ + + + + The Credits + + + +

Credits

+ +
+

Dirtbags King of the Hill was created by:

+ +
    +
  • Neale Pickett
  • +
  • Aaron McPhall
  • +
  • Russel Nolen
  • +
  • Patrick Avery
  • +
  • Kate Vajda
  • +
  • Alex Brugh
  • +
  • Paul Ferrell
  • +
  • Jeremy Scott
  • +
  • Danny Quist
  • +
  • Adam Glasgall
  • +
  • Curtis Hash
  • +
  • Erin Ochoa
  • +
  • William Phillips
  • +
  • Should your name be here? Please remind me!
  • +
+ +

Parts of this contest were inspired by contests from:

+
    +
  • DC949
  • +
  • Tube Warriors
  • +
  • Sandia National Laboratories
  • +
+ +

+ Lastly, this contest would not exist were it not for hundreds of + thousands of lines of code from free software authors around the + world, including: +

+
    +
  • Busybox
  • +
  • Linux
  • +
  • dnsmasq
  • +
  • ngircd
  • +
  • lua
  • +
+
+ + diff --git a/html/css/style.css b/html/css/style.css index 7ed7172..1a8c19f 100644 --- a/html/css/style.css +++ b/html/css/style.css @@ -3,13 +3,13 @@ Light blue: #96d1e3 Off-white blue: #b9e0ef Dark brown: #35170c Light brown: #432115 -Tan: #e1c3b8 +Tan: #e1caa5 */ @import "../fonts/maven_pro.css"; html { - background: #35170c url(../brown-circles.jpg) repeat left bottom; + background: #35170c url(../images/brown-circles.jpg) repeat left bottom; min-height: 100%; font-family: "Maven Pro", Ubuntu, sans-serif; } @@ -28,6 +28,8 @@ h1:first-child { border-radius: 0.2em; padding: 0 0.3em; text-align: center; + max-width: 66%; + margin: 0.5em auto; } .readme, pre { @@ -111,11 +113,11 @@ section, nav { max-width: 35em; border-radius: 0.6em; margin: 1em auto; - padding: 0.2em; + padding: 0.5em; } section { - background: #e1c3b8; + background: #e1caa5; } /*** navigation bar ***/ diff --git a/html/ctf1.css b/html/ctf1.css deleted file mode 100644 index 032c858..0000000 --- a/html/ctf1.css +++ /dev/null @@ -1,207 +0,0 @@ -/* Pallette: http://paletton.com/#uid=3360u0kkWtL00++bxKws6lGT03t */ - -/**** Color Scheme ****/ -html { - background: #1C1000 url(smoke.jpg) no-repeat; - background-size: cover; - min-height: 100%; -} - -body, h1:first-child:before { - color: #FFDAA3; -} - -h1, h2, h3 { - color: #AD6F15; -} - -a { - color: #379F7A; -} - -a:hover { - color: #112; - background-color: #D84B6E; -} - -input { - color: #F39CB2; - background-color: #190006; - border: solid #9E1336 2px; - border-radius: 2px; -} - -.readme, pre { - background-color: #333; -} - -/**** document ****/ - -body { - font-family: sans-serif; - padding: 10px; - max-width: 700px; -} - -/**** heading ****/ - -h1:first-child { - text-transform: lowercase; - font-size: 1.6em; - padding: 3px; - margin: 0 0 1em 70px; -} - -h1:first-child:before { - letter-spacing: -0.1em; - content: "FIRE: "; -} - -/**** body ****/ - -a img { - border: 0px; -} - -a { - text-decoration: underline; -} - -h1, h2, h3 { - letter-spacing: -0.05em; -} - -.readme { - margin: 1em; -} - -pre { - border: solid #ddc 2px; - padding: 0.25em; -} - - -th { - vertical-align: top; - text-align: center; -} -td { - vertical-align: top; - text-align: left; -} - -dt { - font-weight: bold; -} - -p { - line-height: 1.4em; - margin-bottom: 20px; -} - -hr { - border: 1px solid #ddc; -} - - - -/*** navigation bar ***/ - -nav h2 { - display: none; -} - -nav ul { - list-style: none; - text-align: center; -} - -nav li { - display: inline; -} - -nav li a { - text-transform: lowercase; - font-size: 0.9em; -} - -nav li + li:before { - content: " | "; -} - -/**** special cases ****/ - -.wide { - max-width: inherit; -} - -.figure { - margin: 0.5em 1em; - float: right; - font-size: small; - text-align: center; -} - -/* Scoreboard stuff */ - -.scoreboard, .scoreboard body { - height: 100%; - margin: 0; - padding: 0; - max-width: none; -} - -#scoreboard { - height: 60%; - font-size: 75%; -} - -#scoreboard td { - height: 100%; -} - -#chart { - height: 30%; - width: 100%; -} - -/* Tanks stuff */ - -#battlefield { - border: 2px solid green; -} - -.solved { - text-decoration: line-through; -} - - -/* Names */ -span[data-handle]:after { - content: ")"; -} - -span[data-handle="zephyr"]:before { - content: "Neale Pickett ("; -} - -span[data-handle="pflarr"]:before { - content: "Paul Ferrell ("; -} - -span[data-handle="chamuco"]:before { - content: "Danny Quist ("; -} - -span[data-handle="cashmoney"]:before { - content: "Jeremy Scott ("; -} - -span[data-handle="phorkus"]:before { - content: "Mark Carey ("; -} - -span[data-handle="cherish"]:before { - content: "Cherish Franco ("; -} - diff --git a/html/ctf2.css b/html/ctf2.css deleted file mode 100644 index 1e410f9..0000000 --- a/html/ctf2.css +++ /dev/null @@ -1,208 +0,0 @@ -/* Pallette: http://paletton.com/#uid=20+0a0kfKre1ZWZ8kDVnYiuzH8l */ - -/**** Color Scheme ****/ -html { - background: #FFEABD url(smoke.jpg) no-repeat; - background-size: cover; - min-height: 100%; -} - -body, h1:first-child:before { - color: #937025; - background-opacity: 0.9; -} - -h1, h2, h3 { - color: #937025; -} - -a { - color: #422D00; -} - -a:hover { - color: #112; - background-color: #D84B6E; -} - -input { - color: #213263; - background-color: #D9B76E; - border: solid #96A1C3 0.3em; - border-radius: 2px; -} - -.readme, pre { - background-color: #333; -} - -/**** document ****/ - -body { - font-family: sans-serif; - padding: 10px; - max-width: 700px; -} - -/**** heading ****/ - -h1:first-child { - text-transform: lowercase; - font-size: 1.6em; - padding: 3px; - margin: 0 0 1em 70px; -} - -h1:first-child:before { - letter-spacing: -0.1em; - content: "FIRE: "; -} - -/**** body ****/ - -a img { - border: 0px; -} - -a { - text-decoration: underline; -} - -h1, h2, h3 { - letter-spacing: -0.05em; -} - -.readme { - margin: 1em; -} - -pre { - border: solid #ddc 2px; - padding: 0.25em; -} - - -th { - vertical-align: top; - text-align: center; -} -td { - vertical-align: top; - text-align: left; -} - -dt { - font-weight: bold; -} - -p { - line-height: 1.4em; - margin-bottom: 20px; -} - -hr { - border: 1px solid #ddc; -} - - - -/*** navigation bar ***/ - -nav h2 { - display: none; -} - -nav ul { - list-style: none; - text-align: center; -} - -nav li { - display: inline; -} - -nav li a { - text-transform: lowercase; - font-size: 0.9em; -} - -nav li + li:before { - content: " | "; -} - -/**** special cases ****/ - -.wide { - max-width: inherit; -} - -.figure { - margin: 0.5em 1em; - float: right; - font-size: small; - text-align: center; -} - -/* Scoreboard stuff */ - -.scoreboard, .scoreboard body { - height: 100%; - margin: 0; - padding: 0; - max-width: none; -} - -#scoreboard { - height: 60%; - font-size: 75%; -} - -#scoreboard td { - height: 100%; -} - -#chart { - height: 30%; - width: 100%; -} - -/* Tanks stuff */ - -#battlefield { - border: 2px solid green; -} - -.solved { - text-decoration: line-through; -} - - -/* Names */ -span[data-handle]:after { - content: ")"; -} - -span[data-handle="zephyr"]:before { - content: "Neale Pickett ("; -} - -span[data-handle="pflarr"]:before { - content: "Paul Ferrell ("; -} - -span[data-handle="chamuco"]:before { - content: "Danny Quist ("; -} - -span[data-handle="cashmoney"]:before { - content: "Jeremy Scott ("; -} - -span[data-handle="phorkus"]:before { - content: "Mark Carey ("; -} - -span[data-handle="cherish"]:before { - content: "Cherish Franco ("; -} - diff --git a/html/brown-circles.jpg b/html/images/brown-circles.jpg similarity index 100% rename from html/brown-circles.jpg rename to html/images/brown-circles.jpg diff --git a/html/index.html b/html/index.html index 8cb9ede..774866e 100644 --- a/html/index.html +++ b/html/index.html @@ -6,9 +6,11 @@ -

Tracer FIRE 6E

+

Tracer FIRE 6

+

Getting Started

+

Here is what you need to do:

@@ -35,6 +37,25 @@
+ +
+

Reading Material

+ +

+ Stuck? Need a break? In the bathroom? + Here are some things to read. +

+ +
    +
  • Credits
  • +
  • + About Scoring + explains how we calculate scores, + and why. + Reading this will help you formulate a strategy to win. +
  • +
+