bed page 5 - Dave's Blog

Search
My timeline on Mastodon

Ben Goldacre’s TED talk on publication bias, drug...

2012 Sep 28, 3:55


drug companies hiding the results of clinical trials.

(via I did a new talk at TED, on drug companies and hidden data.)

PermalinkCommentsscience video ted

NASA Rover Finds Old Streambed on Martian Surface (nasa.gov)

2012 Sep 27, 2:58PermalinkCommentsspace mars science nasa

Nathan Barnatt makes awesome videos. This is a playlist of my...

2012 Sep 26, 2:21


Nathan Barnatt makes awesome videos. This is a playlist of my favorites of his. (via http://www.youtube.com/playlist?list=PLIjrVnNvXzb8N5tjV3fowJqYwuDM__WVf)

PermalinkCommentsNathan-barnatt video music dance humor

laughingsquid: The Curious Government of the City of London...

2012 Sep 21, 6:10


laughingsquid:

The Curious Government of the City of London (not to be confused with London)

PermalinkCommentslondon politics history video humor

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 - Input validation (Levels 1 & 2)

2012 Sep 6, 5:00

Stripe's web security CTF's Level 1 and level 2 of the Stripe CTF had issues with missing input validation solutions described below.

Level 1

Code

          $filename = 'secret-combination.txt';
extract($_GET);
if (isset($attempt)) {
$combination = trim(file_get_contents($filename));
if ($attempt === $combination) {

Issue

The issue here is the usage of the extract php method which extracts name value pairs from the map input parameter and creates corresponding local variables. However this code uses $_GET which contains a map of name value pairs passed in the query of the URI. The expected behavior is to get an attempt variable out, but since no input validation is done I can provide a filename variable and overwrite the value of $filename. Providing an empty string gives an empty string $combination which I can match with an empty string $attempt. So without knowing the combination I can get past the combination check.

Notes

Code review red flag in this case was the direct use of $_GET with no validation. Instead of using extract the developer could try to extract specifically the attempt variable manually without using extract.

Level 2

Code

    $dest_dir = "uploads/";
$dest = $dest_dir . basename($_FILES["dispic"]["name"]);
$src = $_FILES["dispic"]["tmp_name"];
if (move_uploaded_file($src, $dest)) {
$_SESSION["dispic_url"] = $dest;
chmod($dest, 0644);
echo "

Successfully uploaded your display picture.

";
}

Issue

This code accepts POST uploads of images but with no validation to ensure it is not an arbitrary file. And even though it uses chmod to ensure the file is not executable, things like PHP don't require a file to be executable in order to run them. Accordingly, one can upload a PHP script, then navigate to that script to run it. My PHP script dumped out the contents of the file we're interested in for this level:

Notes

Code review red flags include manual file management, chmod, and use of file and filename inputs without any kind of validation. If this code controlled the filename and ensured that the extension was one of a set of image extensions, this would solve this issue. Due to browser mime sniffing its additionally a good idea to serve a content-type that starts with "image/" for these uploads to ensure browsers treat these as images and not sniff for script or HTML.

PermalinkCommentsinput-validation php security technical

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

When they went to the Moon, they received the same per diem...

2012 Aug 28, 4:38


When they went to the Moon, they received the same per diem compensation as they would have for being away from base in Bakersfield: eight dollars a day, before various deductions (like for accommodation, because the government was providing the bed in the spaceship).

theatlantic:

Apollo 11’s Astronauts Received an $8 Per Diem for the Mission to the Moon

The astronauts of Apollo 11: Intrepid explorers. Inspirational heroes. Government employees.

Read more. [Image: Reuters]

PermalinkCommentshumor space nasa moon government

Gangnam Style looks like he’s riding a horse but actually...

2012 Aug 24, 1:29


Gangnam Style looks like he’s riding a horse but actually its satire.

Also, the making of video: http://youtu.be/9HPiBJBCOq8

PermalinkCommentshumor music music-video video psy south-korea

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

Decrypt.py: Act like a decrypting hacker on tv (github.com)

2012 Aug 8, 3:34

A python script that d3crypt5 the input pipe’s ASCII content from ASCII garbage slowly into the correct output.

PermalinkCommentstechnical humor hack decrypt

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

(via Classic pro-science-careers music video PSA: Chemical...

2012 Jun 29, 10:03


(via Classic pro-science-careers music video PSA: Chemical Party)

Xeni says: “The EU wasn’t always so terrible at promoting science careers through funny internet music videos! (thanks, Guido)”

PermalinkCommentshumor chemistry video

ifc: This week on Comedy Bang! Bang! - Michael Cera!

2012 Jun 27, 3:38


ifc:

This week on Comedy Bang! Bang! - Michael Cera!

PermalinkCommentshumor comedy-bang-bang michael-cera video

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
Older EntriesNewer Entries Creative Commons License Some rights reserved.