About Punkcoder

I am a Software Developer with a passion for Security, ALM, Agile, and Coding Practices. I have been working in .NET as a developer for over a decade, a network admin for years before that. I have worked for large companies and small ones, many that you would recognize some that you probably interact with. I am opinionated and deeply curious about the world. If you have a problem there is a good chance that I would be interested in hearing about it. More than that I want to help others, mostly because I believe that helping a single person raises the quality for everyone.

This is here instead of ads...

Please Show Some Love...

Chall Profiles



Blog Posts

Closing out the New Year

Published On: Dec 27, 2018

Yes. I know what it says, and I know that it’s technically incorrect, it should say that I am closing out the old year, but here is the thing. Things in my life have changed up so much in the last couple of months that I have a very hard time lining them up correctly. It feels like this year has been three years wrapped up into one. One for my time at 10-4, one in transition, and another figuring out what I am doing with the new one, combined with the changes in our family dynamic and the growth of my son.

I went from a job that I was very unsure about to an extension of that job to my parent company. I now get the chance to travel the world and help other developers learn about applciation security. Which is something that six months ago was beyond my thoughts. It also came with (and continues to supply an immense amount of) new stress. But in the course of this I have been to Romania, Belgium, and I am looking forward to India in the next couple of months. Every part of this has been surreal, I have been trying to make security a main part of my work for a very long time, it’s always been a part of it. But now I am looking at a situation where this is a part of my daily life.

This year I helped to get DC720 off the ground and hopefully in the new year there will be more skills and tasks that can be undertaken by the group.

As a final note, I’m never really sure who I am writing these posts to, in a lot of ways it feels very much like a message in the bottle. So if you are out there and you are reading this I hope you are well and that you get something of value from this.

Nebraska Code 2018

Published On: Apr 9, 2018

So it’s been a little bit since there was an update but I have exciting news coming down the pipe… I will presenting three sessions this year at Nebraska.Code(). I decided that I would be branching out this year and attempting to add another conference to Prairie.Code(), that was until I found out that there wouldn’t be a Prairie.Code() this year. While I am sad to see it go I think that with the proximity of the two conferences it’s probably for the best.

The great news is that I managed to get three of my sessions accepted this year, one of the sessions is an 8 hour workshop. So without any further yapping from me, here are the presentations that will be presented at Nebraska.Code()

Application Security or Hacking yourself everyone else is…

Software security isn’t a tool or a library, everyone knows that you should check your parameters, and watch out for SQL injection, but is that really enough? If you have never had the opportunity to spend time hacking your own applications, you are really doing yourself a disservice. More than ever, the web is becoming an increasingly hostile environment, and because of it developers really need to step up their game. In this session we will go over some of the methodologies that we use internally to test applications, helping developers to think more strategically about designing applications for general security. As part of this conversation I will go over active attacks that we have seen against production sites using sterilized examples.

Application Security or Hacking yourself everyone else is…

Offensive Application Security for Developers…

Application developers are the first line in defending applications from attack, there are thousands of software and hardware solutions to attempt to make your software more safe and secure. In the end if the software isn’t developed properly and securely no amount of software or hardware is going to protect you. In this session I plan to go over, identifying weak code, testing for it, and fixing it.

In this session we will go over in-depth the process for doing application security testing on your own applications. As part of the session we will go through and identify all of the items on the OWASP top 10, how to test them using DVWA (the Damn Vulnerable Web Application), and talk about strategies to mitigate the.

Requirements: Students to the class must have:

  • A laptop that they have root or administrator access to.
  • A laptop capable of running a virtual box machine, multi-core, with 8gb+ of ram.
  • All materials outside of the Requirements will be provided.

Offensive Application Security for Developers…

Privacy By Design: Software Development in the age of GDPR

This conversation is an indepth dive into the Important parts of GDPR for software developers. Even though GDPR is a European standard, there’s no denying that this is the direction that the software industry is going, more emphasis will be placed on protecting the data that customers and businesses rely on. In this conversation we will discuss the GDPR, the impacts of this law, and what can be done from the software development side to make sure we develop software that follow defense in depth practices.

Privacy By Design: Software Development in the age of GDPR

Pluralsight IQ

Published On: Mar 7, 2018

For a long time I think it’s been difficult for me to prove where on the developer scale I am or a candidate that I am talking to is at relatively. This is the main problem that I’ve had with interviewing on both sides. The problem is that most of the assessments are too easy or don’t cover the depth that I would expect. The problem with this is that it ends up leading the interviewing process down the road of trying to figure out if the person on the other end of the phone is capable of doing their job, far more than the important question of if they are a good fit for the company. This lead me down the road of asking more analytical questions than questions relating to programming. My favorite question from this was asking a candidate to act as a consultant and tell me the factors that they would take into account to help me estimate the number of X items in a city.

I have been a subscriber to pluralsight for a long time, off and on through various companies and for a while paying for it on my own.

New Job and the Internet

Published On: Dec 15, 2017

So it’s been a long time since there has been an update.

Prairie.Code() 2017

I wanted to give a big thumbs up to everyone who came out to see me speak at this years prairie.code(). We had a good time talking about Application Security and the joys of softwareconsulting. To everyone out there who missed it this year, You should get on it… see you there next year.


After some heavy contemplation, I ended up leaving my position at BlueBolt, Inc. There comes a point where you realize that because of various forces that you are no longer offering the same level of value that you once were.

Since then I have taken up a developer position with some security tasks as part of my new position with 10-4, coming on about two and a half months into the job and I am finally starting to feel like I’ve got a better handle on the work that they are doing.

Net Neutrality

This one came down the pipe yesterday and the paint isn’t even really dry on this one, so I really can’t say that there is a whole lot to talk about but I am working on some things that might be helpful in the future fight. If you are interested you can find out more infromation here, as it will be better kept up to date. https://github.com/punkcoder/NetNeutrality-BlockList

Rebuild CentOS Environment

Published On: Aug 21, 2017

Today as part of one of the projects that I am working on we needed to rebuild an environment and the hosting provider wouldn’t give us the pieces that we needed, so with a couple of quick min I managed to build a quick script that I thought that I would share. The problem is that we have a client that we are doing work for an one of the modules on thier site isn’t behaving as we would expect. So the first step in this process was going through and making sure that our environment matched as much as possible. We talked with the hosting provider and they were more than happy to sell us another environment.

First I had to get the infromation about all of the packages installed on the server, and where they were coming from.

yum list installed > installed.txt
yum -v repolist > repolist.txt

Once this was done it was easy enough to parse out the infromation and push it to build a build script.

import io
import re

def build_repos(output):
    file = open('repolist.txt')
    print('[+] Reading from the repolist file...')
    repoFileName = ""
    output = output + "# installing repos\n"
    for l in file:
        if l.startswith("Repo-baseurl : "):
            link = l.replace('Repo-baseurl : ','').split(' ')[0].strip()
            output = output + "sudo yum-config-manager --add-repo " + link + " \n"
    print('[+] Writing out to the install.sh')
    output = output + "\n\n"
    return output

def build_install(output):
    file = open('installed.txt','r')
    print('[+] Reading from installed packages file...')
    output = output + "# installing packages \n"
    output = output + "sudo yum install"
    finder = re.compile(r"[0-9]{1,3}:")
    for l in file:
        if l.startswith("Loaded plugins:"):
        if l.startswith("Installed Packages"):
        alllineparts = l.split(' ')
        lineparts = []
        for item in alllineparts:
            if item:
        if len(lineparts) > 2:
            package = finder.sub("", lineparts[0].replace('.x86_64','').replace('.noarch',''))
            version = finder.sub("", lineparts[1])

            # Apparently the MariaDB people are not friendly with old versions
            if (package.startswith("MariaDB")):
                output = output + " " + package + " "
                output = output + " " + package + "-" + version
    output = output + " --nogpgcheck"
    return output

def write_file(output):
    print('[+] Writing install of packages to install.sh...')
    outputfile = open('install.sh', 'w')

output = ""

output = build_repos(output)
output = build_install(output)


At the end of the process I ended up spending more time waiting on the CentOS iso to download than processing and building a build scirpt. Pretty useful stuff. At this point I am trying to figure out if it’s worth the effort for syncing up the configurations, or if I should just use this as a one off.

Anyway thought that I would pass this along in the event that someone finds it useful.