Skip to content

Commit 329c0c7

Browse files
committed
Fixed images
1 parent d86762f commit 329c0c7

28 files changed

+19
-19
lines changed

content/blog/2012-08-30-my-solutions-to-the-stripe-ctf-web-app-edition.markdown

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ db.all(query, namespace, function(err, secrets) { //...
2828
2929
By querying the site for secrets in the namespace of `%`, you cause the SQL query that is executed to evaluate to `SELECT * FROM secrets WHERE key LIKE %.%` which of course will spit out every secret stored in every namespace, including the password.
3030
31-
![Level 0 Solved](/assets/images/stripe-ctf/level0-solved.png)
31+
![Level 0 Solved](/img/stripe-ctf/level0-solved.png)
3232
3333
Level 1
3434
-------
@@ -57,13 +57,13 @@ The problem is `extract($_GET)` on line 3. `extract` will take a hash and load
5757
5858
There are a lot of ways to do this, but I found it most natural to choose a filename that doesn't exist, and supply an empty string as my guess. Because the script doesn't really deal with errors, this will result in a correct attempt. My final querystring was `attempt=&filename=DOESNOTEXIT`
5959
60-
![Level 1 Solved](/assets/images/stripe-ctf/level1-solved.png)
60+
![Level 1 Solved](/img/stripe-ctf/level1-solved.png)
6161
6262
Level 2
6363
-------
6464
Level 2 presents you with a "social network," where you have the opportunity to upload your avatar image. The password for the next level is stored in a text file on the server. As it turns out, you can upload any kind of file you want, not just images. And this includes PHP files, which the server will happily execute when you navigate to the URL of the uploaded script. You can even get a handy directory listing:
6565
66-
![Level 2 Directory Listing](/assets/images/stripe-ctf/level2-directory_listing.png)
66+
![Level 2 Directory Listing](/img/stripe-ctf/level2-directory_listing.png)
6767
6868
Above you can see a bunch of files that I uploaded, and even a false attempt at the challenge. Having a place to dump scripts and other files is going to come in handy for the later challenges.
6969
@@ -110,7 +110,7 @@ Level 4
110110
-------
111111
Level 4 is a karma trading game. You register as a user, and then can transfer karma to other users in the game. To keep things honest, if a user transfers you karma, you also get to see their password.
112112
113-
![Level 4](/assets/images/stripe-ctf/level4.png)
113+
![Level 4](/img/stripe-ctf/level4.png)
114114
115115
The user karma_fountain's password is the password to the next level, so if karma_fountain gives you karma, you also get the password to the next level.
116116

@@ -120,7 +120,7 @@ The only user supplied value that other users can see is our password after we g
120120
121121
Transferring karma to karma_trader from attacker completes the challenge:
122122
123-
![Level 4 Solved](/assets/images/stripe-ctf/level4-solved.png)
123+
![Level 4 Solved](/img/stripe-ctf/level4-solved.png)
124124
125125
Level 5
126126
-------
@@ -151,7 +151,7 @@ The `params` variable in Sinatra contains both POSTed data and values in the que
151151
152152
As a sidenote, after solving this challenge the first time, when I came back to gather screenshots, I found that I could authenticate to the level 5 domain, but was no longer shown the password:
153153
154-
![Level 5 Solved?](/assets/images/stripe-ctf/level5-solved.png)
154+
![Level 5 Solved?](/img/stripe-ctf/level5-solved.png)
155155
156156
If anyone knows why I didn't see a password the second time around, please tell me!
157157
@@ -292,7 +292,7 @@ $.get('user_info', function (data) {
292292
```
293293
And when the above is encoded with `String.fromCharCode` and put inside a `<script>` tag, the target user will post their password when viewing our post:
294294
295-
![Level 6 Solved](/assets/images/stripe-ctf/level6-solved.png)
295+
![Level 6 Solved](/img/stripe-ctf/level6-solved.png)
296296
297297
Level 7
298298
-------
@@ -301,7 +301,7 @@ Level 7 is WaffleCopter, an API for the delivery of waffles by helicopter. When
301301
302302
An order is a post request with a signature, and you can view your previous orders and the orders of other users by navigating to "/logs/USERID".
303303
304-
![Level 7 Orders](/assets/images/stripe-ctf/level7-orders-1.png)
304+
![Level 7 Orders](/img/stripe-ctf/level7-orders-1.png)
305305
306306
This is an order log for another user. We know that this user is a premium subscriber because they are ordering the Dream waffle which is a premium item like the Liège waffles we have to order.
307307
@@ -322,7 +322,7 @@ The signature algorithm used by WaffleCopter is `sha1(SECRET + MESSAGE)`, so we
322322
323323
I found a handy script to perform a SHA1 padding attack [here](http://www.vnsecurity.net/2010/03/codegate_challenge15_sha1_padding_attack/).
324324
325-
![Level 7 SHA1 Padding Attack](/assets/images/stripe-ctf/level7-padding.png)
325+
![Level 7 SHA1 Padding Attack](/img/stripe-ctf/level7-padding.png)
326326
327327
Running it I was able to generate a new message and signature, and submitting that allowed me to order the Liège Waffle.
328328
@@ -456,7 +456,7 @@ echo "<pre>$output</pre>";
456456
?>
457457
```
458458
459-
![Level 8 Shell](/assets/images/stripe-ctf/level8-shell.png)
459+
![Level 8 Shell](/img/stripe-ctf/level8-shell.png)
460460
461461
To brute force the password chunk by chunk, we send two requests with the same guess to PasswordDB and look at the difference in source ports between responses to our webhook. If the difference when guessing the first chunk is 3, then PasswordDB made 2 requests between responding to us, and thus queried the 2nd chunk server. Likewise if the difference when guessing the 2nd chunk is 4, and guessing the 3rd chunk is 5. I found that due to what's probably other users on the same challenge, I would sometimes get source port differences that were wildly off. I solved this sub optimally: any time that I have a source port difference greater than what I expect I wait 5 seconds and try again. If I keep getting source port differences greater than the expected 5 times in a row, I probably correctly guessed a chunk. This is a very suboptimal way to do it, and my script took a couple of hours to finish.
462462
@@ -540,4 +540,4 @@ The End
540540
-------
541541
And there you have it.
542542
543-
![The End](/assets/images/stripe-ctf/the-end.png)
543+
![The End](/img/stripe-ctf/the-end.png)

content/blog/2012-11-09-hacking-letterpress.markdown

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ that came out a few weeks ago and immediately became popular enough to [take dow
1212

1313
I was hopelessly addicted to Letterpress until I figured out how to win consistently.
1414

15-
![winning](/assets/images/letterpress/winning.png)
15+
![winning](/img/letterpress/winning.png)
1616

1717
As it turns out, letterpress's dictionary is stored on the device. By simply adding words to Letterpress's dictionary, you can register any
1818
combination of letters as a valid word.
@@ -56,7 +56,7 @@ Here's how it works:
5656

5757
## Is this a word?
5858

59-
![Before](/assets/images/letterpress/before.png)
59+
![Before](/img/letterpress/before.png)
6060

6161
## Shucks!
6262

@@ -73,6 +73,6 @@ Here's how it works:
7373
[+] Successfully added word szug. You can play it now!
7474
```
7575
## Let's try again
76-
![After](/assets/images/letterpress/after.png)
76+
![After](/img/letterpress/after.png)
7777

7878
You can find the app [here](https://github.com/stateio/letterpress-lexicographer). Please enjoy responsibly.

content/blog/2014-02-25-how-to-locate-any-tinder-user.markdown

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ best: true
1111

1212
Last fall, while performing some bespoke security research for one of our clients, I found a way to locate any Tinder user using [trilateration](https://en.wikipedia.org/wiki/Trilateration). Here's what the proof of concept looks like:
1313

14-
![finding me](/assets/images/tinder/04_found_max.png)
14+
![finding me](/img/tinder/04_found_max.png)
1515

1616
I did a guest post over at the Include Security blog about **[how I was able to track the location of any Tinder user](http://blog.includesecurity.com/2014/02/how-i-was-able-to-track-location-of-any.html)**.

content/blog/2014-07-28-how-to-take-over-any-java-developer.markdown

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@ I'm happy that Sonatype made this change in their policy, and I hope they contin
1818

1919
The other day I started hacking on a Clojure project of mine, when I saw my firewall display this:
2020

21-
{% img /assets/images/dilettante/firewall.png 500 %}
21+
{% img /img/dilettante/firewall.png 500 %}
2222

2323
I'm downloading clojure.jar from [http//repo.maven.apache.org](http://repo.maven.apache.org) over port 80! This means that I'm going to be downloading JARs over unencrypted http. I thought this was an [issue](https://github.com/technomancy/leiningen/issues/1604) with [leiningen](http://leiningen.org/) at first. As it turns out it's not lein's fault at all. Clojure.jar, and a whole lot of other JARs that are important in the Java/Clojure/Scala/etc world are officially hosted on [Maven Central](http://search.maven.org/), which is a public service provided by [Sonatype](http://www.sonatype.com/). Sonatype has a policy that they only allow SSL access to people who have authentication tokens. **In order to get an authentication token and SSL access, you need to donate $10 to the Apache foundation.** If you don't believe me, the donate page is [here](http://www.sonatype.com/clm/secure-access-to-central), and the blog post announcing this policy is [here](http://www.sonatype.com/clm/secure-access-to-central). They even mention man-in-the-middle attacks on it.
2424

2525
Because authentication tokens are issued per user/organization, tools like maven and leiningen can't bundle authentication tokens. If you're pulling down some Java project and installing its dependencies, you're not going over SSL. This policy was confirmed by a Sonatype employee when I got into a twitter tiff about this:
2626

27-
{% img /assets/images/dilettante/tweet.png 500 %}
27+
{% img /img/dilettante/tweet.png 500 %}
2828

2929

3030
Unless you take very careful steps that involve paying someone $10, JARs you download can be man-in-the-middled, and code you execute on your system can be replaced by malware.
@@ -41,7 +41,7 @@ Proxying HTTP traffic through dilettante will backdoor any JARs downloaded from
4141

4242
Or a screenshot:
4343

44-
{% img /assets/images/dilettante/screen.png 800 %}
44+
{% img /img/dilettante/screen.png 800 %}
4545

4646
You can find the code [here](https://github.com/mveytsman/dilettante)
4747

content/blog/last-days-of-the-pirate-bay.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,4 @@ passage, Nicolas Maigret who I shamelessly stole from, Long Winter for
6565
letting me do this.
6666
```
6767

68-
![Last Days of The Pirate Bay](/assets/images/last-days/last-days.png)
68+
![Last Days of The Pirate Bay](/img/last-days/last-days.png)

static/img/about/me.jpg

93.7 KB
Loading

static/img/about/me_old.jpg

110 KB
Loading

static/img/dilettante/firewall.png

61.8 KB
Loading

static/img/dilettante/screen.png

480 KB
Loading

static/img/dilettante/tweet.png

146 KB
Loading

static/img/last-days/last-days.png

3.72 MB
Loading

static/img/letterpress/after.png

42.9 KB
Loading

static/img/letterpress/before.png

35.5 KB
Loading

static/img/letterpress/winning.png

43.8 KB
Loading

static/img/stripe-ctf/activity.png

11 KB
Loading
30.2 KB
Loading
28.4 KB
Loading
Loading
129 KB
Loading

static/img/stripe-ctf/level4.png

117 KB
Loading
10.9 KB
Loading
74.2 KB
Loading
54.3 KB
Loading
64 KB
Loading
73.7 KB
Loading
66.9 KB
Loading

static/img/stripe-ctf/the-end.png

117 KB
Loading

static/img/tinder/04_found_max.png

392 KB
Loading

0 commit comments

Comments
 (0)