sha page 4 - Dave's Blog

Search
My timeline on Mastodon

It is not just another Team Fortress 2 map. No.  It has a laser...

2012 Sep 21, 4:26


It is not just another Team Fortress 2 map. No.  It has a laser death cat.

THE GRIND (by Thecorp303)

PermalinkCommentshumor mod tf2 game video-game video

Ben Folds Five and Fraggle Rock “DO IT ANYWAY”...

2012 Sep 17, 3:22


Ben Folds Five and Fraggle Rock “DO IT ANYWAY” [Official Video] (by Nerdist)

PermalinkCommentsmusic video ben-folds-five muppets fraggle-rock chris-hardwick

Stripe CTF - Level 7

2012 Sep 13, 5:00

Level 7 of the Stripe CTF involved running a length extension attack on the level 7 server's custom crypto code.

Code

@app.route('/logs/')
@require_authentication
def logs(id):
rows = get_logs(id)
return render_template('logs.html', logs=rows)

...

def verify_signature(user_id, sig, raw_params):
# get secret token for user_id
try:
row = g.db.select_one('users', {'id': user_id})
except db.NotFound:
raise BadSignature('no such user_id')
secret = str(row['secret'])

h = hashlib.sha1()
h.update(secret + raw_params)
print 'computed signature', h.hexdigest(), 'for body', repr(raw_params)
if h.hexdigest() != sig:
raise BadSignature('signature does not match')
return True

Issue

The level 7 web app is a web API in which clients submit signed RESTful requests and some actions are restricted to particular clients. The goal is to view the response to one of the restricted actions. The first issue is that there is a logs path to display the previous requests for a user and although the logs path requires the client to be authenticatd, it doesn't restrict the logs you view to be for the user for which you are authenticated. So you can manually change the number in the '/logs/[#]' to '/logs/1' to view the logs for the user ID 1 who can make restricted requests. The level 7 web app can be exploited with replay attacks but you won't find in the logs any of the restricted requests we need to run for our goal. And we can't just modify the requests because they are signed.

However they are signed using their own custom signing code which can be exploited by a length extension attack. All Merkle–Damgård hash algorithms (which includes MD5, and SHA) have the property that if you hash data of the form (secret + data) where data is known and the length but not content of secret is known you can construct the hash for a new message (secret + data + padding + newdata) where newdata is whatever you like and padding is determined using newdata, data, and the length of secret. You can find a sha-padding.py script on VNSecurity blog that will tell you the new hash and padding per the above. With that I produced my new restricted request based on another user's previous request. The original request was the following.

count=10&lat=37.351&user_id=1&long=%2D119.827&waffle=eggo|sig:8dbd9dfa60ef3964b1ee0785a68760af8658048c
The new request with padding and my new content was the following.
count=10&lat=37.351&user_id=1&long=%2D119.827&waffle=eggo%80%02%28&waffle=liege|sig:8dbd9dfa60ef3964b1ee0785a68760af8658048c
My new data in the new request is able to overwrite the waffle parameter because their parser fills in a map without checking if the parameter existed previously.

Notes

Code review red flags included custom crypto looking code. However I am not a crypto expert and it was difficult for me to find the solution to this level.

PermalinkCommentshash internet length-extension security sha1 stripe-ctf technical web

Stripe CTF - SQL injections (Levels 0 & 3)

2012 Sep 5, 9:10

Stripe's web security CTF's level 0 and level 3 had SQL injection solutions described below.

Level 0

Code

app.get('/*', function(req, res) {
var namespace = req.param('namespace');

if (namespace) {
var query = 'SELECT * FROM secrets WHERE key LIKE ? || ".%"';
db.all(query, namespace, function(err, secrets) {

Issue

There's no input validation on the namespace parameter and it is injected into the SQL query with no encoding applied. This means you can use the '%' character as the namespace which is the wildcard character matching all secrets.

Notes

Code review red flag was using strings to query the database. Additional levels made this harder to exploit by using an API with objects to construct a query rather than strings and by running a query that only returned a single row, only ran a single command, and didn't just dump out the results of the query to the caller.

Level 3

Code

@app.route('/login', methods=['POST'])
def login():
username = flask.request.form.get('username')
password = flask.request.form.get('password')

if not username:
return "Must provide username\n"

if not password:
return "Must provide password\n"

conn = sqlite3.connect(os.path.join(data_dir, 'users.db'))
cursor = conn.cursor()

query = """SELECT id, password_hash, salt FROM users
WHERE username = '{0}' LIMIT 1""".format(username)
cursor.execute(query)

res = cursor.fetchone()
if not res:
return "There's no such user {0}!\n".format(username)
user_id, password_hash, salt = res

calculated_hash = hashlib.sha256(password + salt)
if calculated_hash.hexdigest() != password_hash:
return "That's not the password for {0}!\n".format(username)

Issue

There's little input validation on username before it is used to constrcut a SQL query. There's no encoding applied when constructing the SQL query string which is used to, given a username, produce the hashed password and the associated salt. Accordingly one can make username a part of a SQL query command which ensures the original select returns nothing and provide a new SELECT via a UNION that returns some literal values for the hash and salt. For instance the following in blue is the query template and the red is the username injected SQL code:

SELECT id, password_hash, salt FROM users WHERE username = 'doesntexist' UNION SELECT id, ('5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8') AS password_hash, ('word') AS salt FROM users WHERE username = 'bob' LIMIT 1
In the above I've supplied my own salt and hash such that my salt (word) plus my password (pass) hashed produce the hash I provided above. Accordingly, by providing the above long and interesting looking username and password as 'pass' I can login as any user.

Notes

Code review red flag is again using strings to query the database. Although this level was made more difficult by using an API that returns only a single row and by using the execute method which only runs one command. I was forced to (as a SQL noob) learn the syntax of SELECT in order to figure out UNION and how to return my own literal values.

PermalinkCommentssecurity sql sql-injection technical web-security

Zineth Release Trailer (by Russell Honor) This is a student...

2012 Aug 10, 2:24


Zineth Release Trailer (by Russell Honor)

This is a student game. Amazing design and music. A more abstract, massive and fast Jet Set Radio.

PermalinkCommentsgame video-game jet-set-radio free

Wooden Train Set Dining Table (by 3foot3design)

2012 Jul 18, 3:28


Wooden Train Set Dining Table (by 3foot3design)

PermalinkCommentstrain brio furniture video

Kalle Mattson - Water Falls (Official Video) / HYPNO SF (by...

2012 Jul 13, 6:46


Kalle Mattson - Water Falls (Official Video) / HYPNO SF (by KalleMattson)

Some wonderful sequences in this video!

PermalinkCommentssan-francisco music video music-video

MOBY SONG (DIRECTOR’S CUT) (by AdamBuxton) How to on...

2012 Jul 11, 2:28


MOBY SONG (DIRECTOR’S CUT) (by AdamBuxton)

How to on identifying Moby

PermalinkCommentsmoby humor video

How To Make A Video About How To Make A Video About How To Make...

2012 Jul 10, 7:27


How To Make A Video About How To Make A Video About How To Make A Video About How To Make a Video… (by Vihart)

Malkovich?

PermalinkCommentshumor recursion math video

Mike Merrill Is a Publicly Traded Person | Motherboard

2012 Jul 1, 2:01

By which is meant the following:

Essentially, each shareholder has decided to buy into Merrill ’s life and help him make better choices that will then hopefully up the stock price, allowing them to make money should they ever decide to cash out.

What? Oh, he lives in Portland.

PermalinkCommentsMike-Merrill humor economics stock

Sergey Brin’s Google Glass skydiver demo from I/O keynote...

2012 Jun 27, 10:31


Sergey Brin’s Google Glass skydiver demo from I/O keynote (via 9to5Google) (by jkahnjkahn)

PermalinkCommentsgoogle google-glass skydive video

Introducing the Source Filmmaker (by SourceFilmMaker)

2012 Jun 27, 10:29


Introducing the Source Filmmaker (by SourceFilmMaker)

PermalinkCommentsmovie film video video-game valve

The Fiddler Book: "Debugging with Fiddler: The official reference from the developer of Fiddler"

2012 Jun 23, 9:19

THE Fiddler Book straight from the source, EricLaw - the developer of Fiddler!

Fiddler is a wonderful tool with never ending extensibility. With this book I shall master it!

PermalinkCommentstechnical programming book ericlaw fiddler http

NICT Daedalus Cyber-attack alert system #DigInfo (by...

2012 Jun 20, 3:23


NICT Daedalus Cyber-attack alert system #DigInfo (by Diginfonews)

Someone has been watching too much Ghost in the Shell. I’d say someone has been watching too much Hackers but this actually looks cooler than their visualizations and also you can never watch too much of Hackers.

PermalinkCommentstechnical network visualization hack security

ReadRobReid.com: Year Zero Trailer (by Rob Reid)

2012 Jun 19, 3:21


ReadRobReid.com: Year Zero Trailer (by Rob Reid)

PermalinkCommentshumor copyright year-zero fiction book video youtube

Ready Player One Easter Egg Hunt - Contest Announcement (by...

2012 Jun 5, 8:32


Ready Player One Easter Egg Hunt - Contest Announcement (by ernestcline)

PermalinkCommentsready-player-one video ernest-cline book easter-egg video-game delorean

Otter Pups Swim Lesson (by Columbuszoomedia)

2012 May 27, 1:37


Otter Pups Swim Lesson (by Columbuszoomedia)

PermalinkCommentshumor cute otter swimming video

ECCC 2012: Star Wars Trilogy: The Radio Play - Official Video...

2012 May 25, 1:29


ECCC 2012: Star Wars Trilogy: The Radio Play - Official Video (by emeraldcitycomicon)

Star Wars as read by voice actors in the voices of their famous roles: Bender, Stimpy, Morbo, Bubbles, Batman, and and and…

PermalinkCommentshumor video voice-acting bender billy-west star-wars

Alex Claps (by Sarah Moffatt) Sarah chose the music =)

2012 May 7, 5:45


Alex Claps (by Sarah Moffatt)

Sarah chose the music =)

PermalinkCommentsalex family video baby personal

Do Cute Kids Like Radiohead? - “Paranoid Android” -...

2012 Apr 27, 7:05


Do Cute Kids Like Radiohead? - “Paranoid Android” - You Review #09 (by noisey)

“I don’t think he’s got any friends”. Harsh.

PermalinkCommentshumor music video radiohead paranoid-android children review
Older EntriesNewer Entries Creative Commons License Some rights reserved.