13 ms·
Stripe CTF3: Distributed Systems is live
- danielweber 13y ago"An unexpected error occurred" When I make an account. EDIT I probably already had one. Maybe I failed level -1 for that.
- jazzychad 13y agoshould be fixed now
- CWilliams1013 13y agoLooks like the git repositories used to submit solutions are over SSH? Unfortunately this won't work in an environment that requires outbound traffic to go over an authenticated proxy. Any chance of getting git-over-HTTPS support?
- pbiggar 13y agoTry Corkscrew - it lets you tunnel SSH over http proxies: http://www.agroman.net/corkscrew/ http://www.agroman.net/corkscrew/
- deleted 13y ago[deleted]
- jwcrux 13y agoI'm pulling an empty repo for level1. Isn't it supposed to start with a TXT file and a sample?
- gdb 13y agoSorry about that -- should be fixed.
- jwcrux 13y agoCan confirm it's fixed - thanks for the update.
- danielweber 13y agoIs level 1 kind of a test of the computational power we can bring?
- gdb 13y agoThere's a lot more to it than that, actually. (We'll talk about it more once the contest is over.)
- danielweber 13y agoIt feels like there is someone constantly pushing Gitcoins (with the "nonce" messages) so fast that by the time my miner finds a coin my old head is out of date, meaning I have to pull and start over. Which I find alternatingly very frustrating and very hilarious. Going to understand git internals a lot more before I'm done with this.
- grey-area 13y agoYes, it seems like it is changing every minute or so (or perhaps it's just my imagination), which makes it pretty difficult to test all the hashes even if trying millions. I might have to switch to a faster language :(
- fragmede 13y ago> it is changing every minute or so It is, just like in Bitcoin - there are bot miners you are racing against (otherwise the provided miner.sh would eventually work) > I might have to switch to a faster language :( Probably not, I did it in python. There's a systems problem in how the miner is architected that you can tweak to give you a better chance of winning the race.
- blktiger 13y agoIt's only open for 1 week? :(
- gdb 13y agoYep — it's a lot of work for us to keep these running. (See https://news.ycombinator.com/item?id=7074064 https://news.ycombinator.com/item?id=7074064 for a blow-by-blow account of previous CTFs.)
- gsastry 13y agoWhat are the options for us after the week is up if we want to do it?
- matthuggins 13y agoI'm gonna go with: "not doing it". (Alternative answer: "wait till next year".)
- gdb 13y agoNot sure yet! We'd love to package it up nicely for people to run, but I can't make any promises about when we'll have a chance to do so. Note that it should be pretty easy for us to just distribute the source code for each level, which would give you most of the functionality of these levels.
- blktiger 13y agoLooks like they are using docker this year? If so maybe they will open source the code so we can run it ourselves? I'd love to make it available to my team to work on.
- drux 13y agoNo t-shirts this time ?
- antonyme 13y agoThis is awesome! Except - I haven't finished the Matasano CTF yet! Too many flags, not enough time. :/
- tptacek 13y agoOurs will be up for awhile. Stripe's is time-limited. If you're interested in what Stripe's doing here, I'd do theirs first.
- danielweber 13y agoRun one in one window, one in another!! But seriously, spacing would be awesome.
- tptacek 13y agoWe had Nicholas for the last two weeks only (he was on break). Turning our hacknight project into a real CTF was his intern project last year. His help at launch was more or less indispensable. Our scheduling was not discretionary. I'm sure Stripe has a similar story. We all agree, more careful spacing would be great. Oh well! :)
- lpgauth 13y agoremote: > We're temporarily out of available test cases. This probably means we're under pretty heavy load, but don't worry -- we're creating more right now. Please try again in a few minutes. meh.
- dclara 13y agoAre we allowed to discuss solution here? Or everybody has to work out the results separately? I don't know Ruby, but I can guess what it is doing basically: 1. Read a list of words from a file with an input path or a default path 2. Take the runtime input from the user with any number of words before carriage return (I guess the words are separated by spaces) 3. Do a loop to compare each of the input words to lower case against the words in the list loaded from the file. If there is a match print out the original word, other wise print out something wrap up the word. It's a O(NxM) algorithm. If the data set is small, we won't see to much difference. Otherwise, we need to concern about better algorithm to improve the speed. 1. Sort the list from the file (remove duplicates) 2. Always check the either half to reduce the number of checking in the list 3. Sort the input list (save the number of duplicates) 4. Print the duplicates directly without comparison again etc. This way the runtime can be improved to O(N*lg M). This may not be the best algorithm. I'd like to hear from you about better solutions.
- thezoid 13y agoOr just populate a hash with the input and see if the entries exist in the hash. If they do print it otherwise print the non matchy one.
- jwcrux 13y agoExactly- hashes and sets are much more efficient than arrays.
- dclara 13y agoOf course. If it's in Java, I'd definitely do that. We are using Hashmap everywhere. Since the original code looks like this, I thought Ruby does not support hash. We usually implement code on the application level, so we don't really care about the underlying algorithms. But if we have to implement on the system level, we do care about the how to manipulate the memory and number of executions, like Big O.
- 13y ago
- goodwink 13y agoAny chance this will be open sourced later so that we can run the docker stuff locally for our own team's usage for training etc.?
- drharris 13y agoMan, no way this is going to run on any sort of Windows environment. Guess I won't get to sneak in CTF time at work this time around.
- mjallday 13y agoTry vagrant (http://www.vagrantup.com/ http://www.vagrantup.com/) and spin up a VM!
- drharris 13y agoI figured I could either spend the next week fighting script execution on Windows or just spin up a linux VM and be good to go. I wound up installing ubuntu manually on a VirtualBox instance. Had heard of Vagrant, but didn't realize what it offered!
- jweather 13y agoWorking great with vagrant+VirtualBox here on Windows. I initially set it up to try out the CTF docker image, but it's working fine straight out of the precise64 box (+ an apt-get git)
- jamesgeck0 13y agoNote that `vagrant up` NEEDS to be run from an admin console for Level 2. The sample application is written in node, and npm wants to make symlinks on the mounted Windows filesystem, which is apparently a privileged operation. It's a bit of a shame the test harness isn't Windows compatible; it's rather small, and it doesn't look like the fixes required would have been very difficult.
- scotch_drinker 13y agoI have not gotten the test harness (written in python) to run on windows yet but the level0 executable is just a ruby script and can be run on Windows with some modifications. If you try to run "python test/harness", it will pull the dictionary down locally in the test folder. Once that's done, make the following modification to the level0 file: contents = ARGV.length > 1 ? File.read(ARGV[1]) : $stdin.read That's just allowing you to send the test files in on the command line. From there, you can measure the time using PowerShell's Measure-Command like so: Measure-Command {ruby .\level0 "test/data/words" "long.txt"} Assuming ruby is in your PATH and the "test/data/words" is a renamed words dictionary file. It's a little work but you can definitely do it on Windows. I'm working on getting the python test harness to work on Windows.
- dkhenry 13y agoWell my first thought was to use c++11 to do the same thing to give me a better basis for moving forward, and I can't seem to use anything outside the c++ standard libraries. Thats cool because we can always staticly link everything and be done with it and version `GLIBCXX_3.4.18' not found (required by ./level0) :-(
- gdb 13y agoAs a note, if you send us requests for Ubuntu packages, we'll happily install them — just send an email to ctf@stripe.com.
- nelhage 13y agoYou're getting that even with a statically-compiled binary? What's the output of "file ./level0"?
- dkhenry 13y agolevel0: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x0c727bf14da1597acf7c74b4258e2875f4e9ef21, not stripped And then the output of ldd on ./level0 linux-vdso.so.1 => (0x00007fff5cdca000) libstdc++.so.6 => /lib64/libstdc++.so.6 (0x0000003337400000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003333c00000) libc.so.6 => /lib64/libc.so.6 (0x0000003332800000) libm.so.6 => /lib64/libm.so.6 (0x0000003332c00000) /lib64/ld-linux-x86-64.so.2 (0x0000003332400000) I know the problem is I am still dynamically linking glibc and whatever system I am running on doesn't have a new enough glibc. I am going to take another crack at it later and try to get it fully statically linked, but once you get to statically linking the C runtime I need to invoke my google foo and it is more time then I had on my lunch break.
- mbrameld 13y agoAnybody else timing out when trying to push the solution?
- lukasm 13y agoCan I use python?
- eieio 13y agoAs far as I know just about any language works. I know python works: I submitted a python solution for level 0. Just make sure that the level0 file is an executable file and change the crunchbang to run python instead of ruby.
- gleenn 13y agoLevel0 was fun, Level1 threw me immediately into "This looks like it's gonna suck". I know Git fairly well, but I don't know it that well. I poked at the shell script a bit, but I just ain't seeing it. It's also a lot harder to work on without the support of the easy benchmarking ability that was provided in Level0. How do I know if I'm actually improving. Props in general, I just feel like Level1 was kind of a brick wall for me.
- jyothepro 13y agoyes i felt the same
- ch0wn 13y agoI thought the shell script was actually a really great way of introducing you to the subject. You can basically look at the script, make out the "hot" part, optimize that part and you're done.
- nayefc 13y agoHow would you optimise internal git commands or a loop that will still need to brute-force either way?
- emillon 13y agoRot13 for spoilers: Jura vaibxvat tvg va n furyy ybbc, lbh'er jnfgvat lbhe gvzr sbexvat. Qbvat guvf va n fvatyr cebprff jvyy fcrrq vg hc n ybg.
- nayefc 13y agoThat's what I suspected. So essentially, mimic that git command in bash without calling the git command (including the header stuff)?
- emillon 13y agoIt's not calling the git command that's problematic, it's calling an external command at all. So you pretty much have to recode the hot part in another language, where you just manipulate buffers instead of piping stuff around.
- lukasm 13y agoCannot push It looks like you have another in-progress Git operation, and we limit you to one concurrent operation. Waiting 2s (attempt 1/3) It looks like you have another in-progress Git operation, and we limit you to one concurrent operation. Waiting 2s (attempt 2/3) It looks like you have another in-progress Git operation, and we limit you to one concurrent operation. Waiting 2s (attempt 3/3) ERROR: Timed out waiting for your other Git operation to complete. Try again once it has finished. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
- gdb 13y agoYep, that happens if you try pushing from multiple clients at once (in order to prevent people from spamming us with solutions). If you're still getting that even after a few minutes, ping us at ctf@stripe.com and see what's going on.
- lukasm 13y agoI tried once, but it stoped. I waited a couple of minutes and then ctrl+C'd it. first push: git push warning: push.default is unset; its implicit value is changing in Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the current behavior after the default changes, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push.default simple See 'git help config' and search for 'push.default' for further information. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 'current' instead of 'simple' if you sometimes use older versions of Git) Counting objects: 37, done. Delta compression using up to 4 threads. Compressing objects: 100% (33/33), done. Writing objects: 100% (36/36), 897.66 KiB | 0 bytes/s, done. Total 36 (delta 4), reused 14 (delta 0)
- codygman 13y agoI hope Haskell is installed, I just wrote a quick solution which worked with my local dictionary. However, I need to add argument parsing. Yawn. I guess I'll see tomorrow!
- tel 13y agoGHC 7.6.2 is installed (I checked the container) and you can use cabal as though you had a sandbox due to the containment.
- lasryaric 13y agoGetting the following output when pushing my code: remote: > Your submission has been placed in the queue. remote: > Kicking off a build for your submission (running `./build.sh`). remote: > `./build.sh` succeeded remote: > Kicking off 3 trials. Here goes... remote: > Started running Trial 0 remote: > Started running Trial 1 remote: > ERROR: There was an internal error scoring Trial 0. If this error persists, please let us know at ctf@stripe.com and include the following error token: err_3MRLt7sxWqqD4C To lvl0-xkzdabbt@stripe-ctf.com:level0 7fcfd3d..17d0e35 master -> master My code looks to be working because the test ./test/harness says that tests pass.
- biscarch 13y agoI was getting a similar error. Ends up I forgot a `require` statement in the ruby code.
- thomaslutz 13y agoKnown issue, but the team seems to be asleep. Seems like we have to wait.
- grey-area 13y agoI was getting the same on lvl2, seems to be fixed now, so perhaps try again. The performance after it works does seem to be extremely variable though.
- grey-area 13y agoIs anyone else having trouble compiling level3.jar on OS X? I get a lot of this: [error] import java.nio.file._
- abbeyj 13y agoI'm not on OS X but I could only get it working after installing OpenJDK 7. I was trying with OpenJDK 6 and getting errors similar to what you're seeing.