<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>http://www.offensivethinking.org/</id>
  <title>Offensive Thinking</title>
  <updated>2010-02-28T21:30:58Z</updated>
  <link rel="alternate" href="http://www.offensivethinking.org"/>
  <link rel="self" href="http://www.offensivethinking.org/atom.xml"/>
  <author>
    <name>Patrick Hof</name>
    <uri>http://www.offensivethinking.org</uri>
  </author>
  <entry>
    <id>tag:www.offensivethinking.org,2010-02-28:/thoughts/2010/02/28/xsrfify/</id>
    <title type="html">xsrfify: XSRF Helper Script</title>
    <published>2010-02-28T21:30:58Z</published>
    <updated>2010-02-28T21:48:55Z</updated>
    <link rel="alternate" href="http://www.offensivethinking.org/thoughts/2010/02/28/xsrfify/"/>
    <content type="html">&lt;p style="text-align:justify;"&gt;&lt;em&gt;Cross Site Request Forgery&lt;/em&gt; ([X|C]&lt;span class="caps"&gt;SRF&lt;/span&gt;) is one of those vulnerabilities many web applications suffer from. If you already know how &lt;span class="caps"&gt;XSRF&lt;/span&gt; works, I suggest you &lt;a href="#xsrfify"&gt;skip the next part and directly go to the explanation of &lt;em&gt;xsrfify.rb&lt;/em&gt;&lt;/a&gt;, a script to automatically convert a &lt;span class="caps"&gt;POST&lt;/span&gt; request to an &lt;span class="caps"&gt;HTML&lt;/span&gt; page ready for &lt;span class="caps"&gt;XSRF&lt;/span&gt;.&lt;/p&gt;
&lt;h2&gt;&lt;span class="caps"&gt;XSRF&lt;/span&gt; explained&lt;/h2&gt;
&lt;p&gt;The idea of &lt;span class="caps"&gt;XSRF&lt;/span&gt; is as simple as it is ingenious. Let me explain by example: Let&amp;#8217;s say you have a web application which requires a login. A logged on user can also change his or her password, which is done by sending a simple &lt;span class="caps"&gt;POST&lt;/span&gt; (or even a &lt;span class="caps"&gt;GET&lt;/span&gt;) request to the application. The password change request could e.g.  be done with this simple form:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
Please enter your new password:&amp;lt;br /&amp;gt;
&amp;lt;form method=&amp;quot;POST&amp;quot; action=&amp;quot;changepw.php&amp;quot;&amp;gt;
  &amp;lt;input id=&amp;quot;pass&amp;quot; type=&amp;quot;password&amp;quot; /&amp;gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Submit&amp;quot; /&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;
&lt;p style="text-align:justify;"&gt;Now, here&amp;#8217;s the deal: as an attacker, you don&amp;#8217;t have the login credentials, so you can&amp;#8217;t just go and change the password. Instead, you do the following: You create an &lt;span class="caps"&gt;HTML&lt;/span&gt; page like the above, but instead of showing the form you hide the input fields. And instead of adding a submit button, you add a little bit of JavaScript to automatically submit the form whenever someone visits your &lt;span class="caps"&gt;HTML&lt;/span&gt; page. This may look like the next snippet:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
&amp;lt;html&amp;gt;
  &amp;lt;head&amp;gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
    function send() {
      if (document.forms[0]) {
        var el = document.getElementById(&amp;quot;submitform&amp;quot;);
        el.submit();
      }
      else {
        setTimeout(&amp;quot;send()&amp;quot;, 1000);
      }
    }
  &amp;lt;/script&amp;gt;
  &amp;lt;/head&amp;gt;
  &amp;lt;body onload=&amp;quot;send()&amp;quot;&amp;gt;
  &amp;lt;form method=&amp;quot;POST&amp;quot; id=&amp;quot;submitform&amp;quot; action=&amp;quot;http://www.example.com/changepw.php&amp;quot;&amp;gt;
    &amp;lt;input id=&amp;quot;pass&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;desired_password&amp;quot; /&amp;gt;
  &amp;lt;/form&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;
&lt;/pre&gt;
&lt;p style="text-align:justify;"&gt;Notice how the &lt;em&gt;action&lt;/em&gt; parameter of the form now contains the full path to the &lt;span class="caps"&gt;PHP&lt;/span&gt; page, because we are hosting this web page on our own server and the victim&amp;#8217;s server is on &lt;em&gt;http://www.example.com&lt;/em&gt; (that&amp;#8217;s where the &lt;strong&gt;cross site&lt;/strong&gt; in &lt;span class="caps"&gt;XSRF&lt;/span&gt; comes from). Notice also how the little JavaScript snippet gets called immediately by the &lt;em&gt;onload()&lt;/em&gt; handler in the &lt;em&gt;body&lt;/em&gt; tag and submits the form (or waits a second if the element is not yet loaded).&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;The result is, whenever an unsuspecting user opens your website, a &lt;span class="caps"&gt;POST&lt;/span&gt; request to the password-changing &lt;span class="caps"&gt;PHP&lt;/span&gt; page is sent. But that&amp;#8217;s not the important part.  The important part is that your browser, whenever it sends a request to the site while you are still logged in to the application (e.g. in another tab in your browser), the login credentials will automatically be sent with the request.  Because, hey, it&amp;#8217;s just another &lt;span class="caps"&gt;POST&lt;/span&gt; request to the website we&amp;#8217;re logged into, right?&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;This means that if you are logged into the application and I can convince you to open my (malicious) website, I can make you send a request to change your password. Without knowing any login details. Because it&amp;#8217;s &lt;strong&gt;your&lt;/strong&gt; browser sending the request, and you are already authenticated. The password example above is only one possible attack vector, of course. Just look for anything in the web application which changes something using only one request. There&amp;#8217;s plenty of &lt;span class="caps"&gt;XSRF&lt;/span&gt; opportunities for doing something malicious.&lt;/p&gt;
&lt;h2 id="xsrfify"&gt;xsrfify.rb&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;Ok, so I got a bit carried away explaining &lt;span class="caps"&gt;XSRF&lt;/span&gt;, because my original intent was to announce a little tool I made for facilitating the exploitation of &lt;span class="caps"&gt;XSRF&lt;/span&gt;. You see, writing &lt;span class="caps"&gt;HTML&lt;/span&gt; pages like the above, to automatically send a &lt;span class="caps"&gt;POST&lt;/span&gt; request, is kinda boring. It&amp;#8217;s always the same. A little bit of JavaScript code, a form with all the parameters, the full path to the web site. This can easily be done with a script. So I wrote &lt;em&gt;xsrfify.rb&lt;/em&gt;. It&amp;#8217;s little Ruby script which you can throw a raw &lt;span class="caps"&gt;POST&lt;/span&gt; request at on &lt;span class="caps"&gt;STDIN&lt;/span&gt;, and it will turn it into an &lt;span class="caps"&gt;HTML&lt;/span&gt; site with a form automatically submitted via JavaScript, ready for &lt;span class="caps"&gt;XSRF&lt;/span&gt;. Simple as that. The options are:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
./xsrfify -h
Usage: ./xsrfify [options]
 -n, --newlines        Use \n as line delimiter when parsing the POST request instead of \r\n
 -f, --full-page       Print a full HTML page ready for XSRF instead of just the form
 -d, --delete-submit   Automatically delete parameters with the name "submit"
 -h, --help            Show this help
&lt;/code&gt;
&lt;/pre&gt;
&lt;p style="text-align:justify;"&gt;Beats writing the same old boring stuff over and over again. By the way: it works great for Cross Site Scripting only exploitable via &lt;span class="caps"&gt;POST&lt;/span&gt;, too. Just make sure that you encode your payload properly, as the script will not care about it. Just change stuff in the resulting &lt;span class="caps"&gt;HTML&lt;/span&gt; page accordingly, otherwise things may break (e.g., if you have double quotes in your payload).&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;It is available on github as of now:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.github.com/courts/snippets/tree/master/xsrfify/"&gt;http://www.github.com/courts/snippets/tree/master/xsrfify/&lt;/a&gt;&lt;/p&gt;</content>
    <summary type="html">How XSRF works and what some scripting can do for you</summary>
  </entry>
  <entry>
    <id>tag:www.offensivethinking.org,2010-01-04:/thoughts/2010/01/04/fuzzing-and-enumerating-with-wfuzz/</id>
    <title type="html">Fuzzing and Enumerating with Wfuzz</title>
    <published>2010-01-04T21:36:53Z</published>
    <updated>2010-01-04T22:24:24Z</updated>
    <link rel="alternate" href="http://www.offensivethinking.org/thoughts/2010/01/04/fuzzing-and-enumerating-with-wfuzz/"/>
    <content type="html">&lt;p style="text-align:justify;"&gt;&lt;a href="http://www.edge-security.com/wfuzz.php"&gt;Wfuzz&lt;/a&gt;. What a neat tool. It&amp;#8217;s an &lt;span class="caps"&gt;HTTP&lt;/span&gt; fuzzer designed for fuzzing web applications. Although the term &amp;#8220;fuzzing&amp;#8221; implies too narrow a scope for this tool in my opinion. I always think of finding application bugs when I hear the term &amp;#8220;fuzzing&amp;#8221;, but wfuzz is also a great program to enumerate files or the like. I guess the line between &amp;#8220;fuzzing&amp;#8221; and &amp;#8220;enumerating&amp;#8221; can be kind of blurry at times.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;One usage possibility besides the obvious enumeration of e.g. often found applications is to quickly build your own wordlist for the web application you&amp;#8217;re currently (pen)testing and using wfuzz to check for these files. Most of the times you do not have a file listing of the remote installation directory. But people tend to forget to remove many of the standard files of today&amp;#8217;s web applications which may give you useful hints, for example a Changelog file with the exact version of the application. There&amp;#8217;s also the chance of example scripts or extensions (think frameworks like Joomla!) still available, which are surprisingly often vulnerable. Search &lt;a href="http://osvdb.org"&gt;&lt;span class="caps"&gt;OSVDB&lt;/span&gt;&lt;/a&gt; for &amp;#8220;example&amp;#8221; and you&amp;#8217;ll see what I mean.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;So what you can do is the following: First, download and unpack (and possibly even install) the webapp locally. Change into the resulting (installation) directory and get a list of all files and directories, e.g. by running:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
ruby -e 'puts Dir["**/**"]' &gt; dict.txt
&lt;/code&gt;
&lt;/pre&gt;
&lt;p style="text-align:justify;"&gt;Now, run wfuzz with the newly created wordlist against the remote website. The following command line is a basic wfuzz invocation with coloured output, the wordlist dict.txt, 5 threads, the suppression of &lt;span class="caps"&gt;HTTP&lt;/span&gt; 404 return values and printing &lt;span class="caps"&gt;HTML&lt;/span&gt; output to stderr, which is redirected to a file to be viewed later:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
./wfuzz.py -c
           -z file
           -f dict.txt 
           -t 5 
           --hc 404 
           --html 
           http://www.example.com/FUZZ 
           2&gt; `date '+%Y-%m-%d_%H%I'`-example.html
&lt;/code&gt;
&lt;/pre&gt;
&lt;p style="text-align:justify;"&gt;It&amp;#8217;ll replace &lt;span class="caps"&gt;FUZZ&lt;/span&gt; with the words from your wordlist and give you a nice and clean output to stdout showing its findings. The saved &lt;span class="caps"&gt;HTML&lt;/span&gt; file even gives you clickable links to all the generated URLs. I tend to view it in &lt;a href="http://elinks.or.cz"&gt;elinks&lt;/a&gt; because it&amp;#8217;s not very pretty, but it gets the job done.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Have also a look at the wordlists already included, I find many of them very useful. Wfuzz has many other options like fuzzing &lt;span class="caps"&gt;POST&lt;/span&gt; data, setting a cookie, doing authentication etc. Just have a look at &amp;#8220;wfuzz.py -h&amp;#8221;, it&amp;#8217;s easy to understand.&lt;/p&gt;</content>
    <summary type="html">Multipurpose HTTP Fuzzing Tool.</summary>
  </entry>
  <entry>
    <id>tag:www.offensivethinking.org,2009-12-21:/thoughts/2009/12/21/remoting-with-pyamf/</id>
    <title type="html">Remoting with PyAMF - the easy way</title>
    <published>2009-12-21T21:17:58Z</published>
    <updated>2009-12-21T21:21:19Z</updated>
    <link rel="alternate" href="http://www.offensivethinking.org/thoughts/2009/12/21/remoting-with-pyamf/"/>
    <content type="html">&lt;p style="text-align:justify;"&gt;Aahh, &lt;a href="https://secure.wikimedia.org/wikipedia/en/wiki/Remote_procedure_call"&gt;Remote Procedure Calls&lt;/a&gt;.  Gotta love &amp;#8216;em. They make programmers forget all we have taught them about being careful with user input, sanitising everything and double checking that there&amp;#8217;s nothing malicious in it, treating all user input as a potential threat against their system. Ok, frankly, most of the times developers tend to forget about this in all other scenarios too, or we wouldn&amp;#8217;t still be plagued with &lt;span class="caps"&gt;XSS&lt;/span&gt; and the like.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;But &lt;span class="caps"&gt;RPC&lt;/span&gt;, in whatever shape it comes, makes it a lot easier to forget about user input because it is more or less &lt;em&gt;transparent&lt;/em&gt; to the developer. I mean, that&amp;#8217;s the whole point of &lt;span class="caps"&gt;RPC&lt;/span&gt;, isn&amp;#8217;t it? Letting you work with remote functions/methods/objects like they&amp;#8217;re local. No worries about network protocols etc. And this is exactly what makes it so dangerous, because developers forget that all the pretty function calls and objects they send over the wire are not necessarily what they receive on the other end. Attackers can, if the data is not encrypted and signed, read and manipulate the data. Or send their own. The receiving end has to make sure that whatever it gets is checked first.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Where was I going with this again? Ah, yes, &lt;a href="https://secure.wikimedia.org/wikipedia/en/wiki/Action_Message_Format"&gt;&lt;span class="caps"&gt;AMF&lt;/span&gt;&lt;/a&gt;.  Adobe&amp;#8217;s Action Message Format. It&amp;#8217;s a binary format primarily used to serialise ActionScript objects (think &lt;span class="caps"&gt;RPC&lt;/span&gt; for Flash). I had to test a remote installation of an &lt;span class="caps"&gt;AMF&lt;/span&gt; gateway and searched for a decent way of pentesting that stuff. First thing I found was Jon Rose&amp;#8217;s &lt;a href="http://deblaze-tool.appspot.com/"&gt;Deblaze&lt;/a&gt;, a command line tool to interact with Flash remoting end points. It&amp;#8217;s a nice tool, but it only allows you to send Ints, Floats or Strings as method parameters. That wasn&amp;#8217;t enough for me, as I needed to send more complicated objects to the remote server.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;I continued searching and found a blog post about &lt;a href="http://www.gdssecurity.com/l/b/2009/11/11/pentesting-adobe-flex-applications-with-a-custom-amf-client/"&gt;pentesting Adobe Flex Applications with a custom &lt;span class="caps"&gt;AMF&lt;/span&gt; client&lt;/a&gt;.  They use &lt;a href="http://pyamf.org/"&gt;pyAMF&lt;/a&gt;, a Python implementation of &lt;span class="caps"&gt;AMF&lt;/span&gt;. Perfect.  The only thing that bothered me was that the way they build their client in the blog post seemed overly complicated. Do I really need to build my &lt;span class="caps"&gt;AMF&lt;/span&gt; object by hand and use an &lt;span class="caps"&gt;HTTP&lt;/span&gt; library to send the &lt;span class="caps"&gt;POST&lt;/span&gt; request to the server? That&amp;#8217;s inconvenient for just a little testing.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;I looked at the pyAMF homepage myself and found that you don&amp;#8217;t have to do all this stuff manually. pyAMF provides a perfectly capable &lt;a href="http://pyamf.org/wiki/ClientHowTo"&gt;client library&lt;/a&gt;, with &lt;span class="caps"&gt;HTTPS&lt;/span&gt; support and authentication. It&amp;#8217;s really easy to use. First, import the RemotingService:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
from pyamf.remoting.client import RemotingService
&lt;/code&gt;
&lt;/pre&gt;
&lt;p style="text-align:justify;"&gt;Then, all you have to do is create a new RemotingService with the &lt;span class="caps"&gt;AMF&lt;/span&gt; gateway&amp;#8217;s &lt;span class="caps"&gt;URL&lt;/span&gt;, get the service you want to use and invoke the method with whatever parameters it takes. Taken straight from pyAMF&amp;#8217;s website for a service called &amp;#8220;service&amp;#8221; with the method &amp;#8220;getLanguages()&amp;#8221;:&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;
client = RemotingService('http://demo.pyamf.org/gateway/recordset')
service = client.getService('service')

print service.getLanguages()
&lt;/code&gt;
&lt;/pre&gt;
&lt;p style="text-align:justify;"&gt;And that&amp;#8217;s it. Much easier, isn&amp;#8217;t it? You can also set custom headers etc.  Of course, the approach taken in the abovementioned blog post might be better if you really want to dig more into the &lt;span class="caps"&gt;AMF&lt;/span&gt; internals when testing. But if you primarily want to check if you can invoke methods you shouldn&amp;#8217;t be able to access, or call the methods with parameters they might choke on, then the pyAMF client is the way to go.&lt;/p&gt;</content>
    <summary type="html">(Pen)testing Flash Remoting with Python.</summary>
  </entry>
  <entry>
    <id>tag:www.offensivethinking.org,2009-12-17:/thoughts/2009/12/17/organize-your-papers/</id>
    <title type="html">Organizing your papers with Mendeley</title>
    <published>2009-12-17T19:52:31Z</published>
    <updated>2009-12-21T21:21:19Z</updated>
    <link rel="alternate" href="http://www.offensivethinking.org/thoughts/2009/12/17/organize-your-papers/"/>
    <content type="html">&lt;p style="text-align:justify;"&gt;Some days ago, someone (I can&amp;#8217;t remember who, sorry) &lt;a href="https://www.twitter.com"&gt;tweeted&lt;/a&gt; about &lt;a href="http://mendeley.org"&gt;Mendeley&lt;/a&gt;. It is a software to &amp;#8220;Organize, share and discover research papers&amp;#8221;. Okay, the next sentence on the website is &amp;#8220;Like iTunes for research papers&amp;#8221;, which almost made me stop looking at it&amp;#8230;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;It&amp;#8217;s a &lt;span class="caps"&gt;GUI&lt;/span&gt; application and you can download it for free from their site. It is, however, closed source. But hey, can&amp;#8217;t have everything. So don&amp;#8217;t come complaining to me if it sends your private pictures to Flickr or whatever, I never said I&amp;#8217;ve reviewed the code ;). Please be also aware of their &lt;a href="http://www.mendeley.com/terms/"&gt;&lt;span class="caps"&gt;EULA&lt;/span&gt;&lt;/a&gt; and their &lt;a href="http://www.mendeley.com/privacy/"&gt;privacy policy&lt;/a&gt;, they&amp;#8217;re well worth reading &lt;em&gt;carefully&lt;/em&gt; and thinking about the implications before you start using this software. Consider yourself warned. I&amp;#8217;ll give some final thoughts on this at the end of this post.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Mendeley works surprisingly well. There&amp;#8217;s this huge directory on my laptop with all the security whitepapers I downloaded over time and never come around reading (sounds familiar? Yeah, I bet). &lt;a href="http://www.blackhat.com"&gt;BlackHat&lt;/a&gt;, &lt;a href="http://www.defcon"&gt;Defcon&lt;/a&gt;, papers announced on &lt;a href="http://www.securityfocus.com/archive/1"&gt;Bugtraq&lt;/a&gt;, &lt;a href="http://seclists.org/fulldisclosure/"&gt;Full Disclosure&lt;/a&gt; or recently more and more over Twitter, you name it. And lets be honest: Either you read them immediately or you forget about them.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;One problem is that after dumping them in my &amp;#8220;Security Papers&amp;#8221; directory, when I have a second look at it later, I already forgot what the papers in there are about. And if they do not have at least a filename telling me what the paper &lt;em&gt;might&lt;/em&gt; be about, I don&amp;#8217;t bother to open them all in my &lt;span class="caps"&gt;PDF&lt;/span&gt; reader again.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Mendeley did a very good job on organizing this directory and extracting meaningful meta information from that pile of whitepapers and slides. It wasn&amp;#8217;t perfect and I had to correct a lot of stuff, but the initial guessing it did was better than I hoped for. Now I have all my papers neatly organized in the Mendeley database, with full text search, the ability to find papers by author or subject, information about papers referenced, &lt;a href="https://secure.wikimedia.org/wikipedia/en/wiki/Bibtex"&gt;BibTeX&lt;/a&gt; export, the possibility to annotate the PDFs and much more. It&amp;#8217;s a really nice way to organize your stuff. Ok, I still have to read the papers myself. But at least now I can just mark them as read or unread and find them again in the pile of papers I hoard on my disk. Mendeley even allows you to conveniently rename the papers.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Their ultimate goal seems to be to start a kind of social network for researchers, you can synchronize all your stuff with their website and you are of course encouraged to do this. But it&amp;#8217;s also possible to just use their client offline. Be always aware that they &lt;em&gt;will&lt;/em&gt; collect data about the papers you organize with their software. I don&amp;#8217;t think they send any stuff to their website if you don&amp;#8217;t have an account and without you explicitly agreeing to it, but you never know. All the papers I have collected are freely available on the Internet and I have no problem with people knowing about me reading these papers, so I consider the potential public knowledge about what security papers I read not an issue. &lt;span class="caps"&gt;YMMV&lt;/span&gt;.  Also, I&amp;#8217;d be careful with my own papers that aren&amp;#8217;t published yet, for example. I wouldn&amp;#8217;t add these to Mendeley simply because I don&amp;#8217;t know where that data might end. Their privacy policy openly addresses these issues and sounds reasonable, but: it&amp;#8217;s the Internet, and what is uploaded to the Internet &lt;em&gt;stays&lt;/em&gt; on the Internet. Always have that in mind.&lt;/p&gt;</content>
    <summary type="html">A 'to_read' directory that you never touch again. Sounds familiar?</summary>
  </entry>
  <entry>
    <id>tag:www.offensivethinking.org,2009-11-22:/thoughts/2009/11/22/twitter-account/</id>
    <title type="html">Microblogging</title>
    <published>2009-11-22T16:09:11Z</published>
    <updated>2009-11-22T17:31:56Z</updated>
    <link rel="alternate" href="http://www.offensivethinking.org/thoughts/2009/11/22/twitter-account/"/>
    <content type="html">&lt;p style="text-align:justify;"&gt;Ok, I finally gave in. After resisting the hype for quite a long time, I created microblogging accounts in the end. You can follow me on&lt;/p&gt;
&lt;div&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="https://www.identi.ca/courts"&gt;Identi.ca&lt;/a&gt; as courts&lt;/li&gt;
	&lt;li&gt;&lt;a href="https://twitter.com/__courts__"&gt;Twitter&lt;/a&gt; as __courts__&lt;br /&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:justify;"&gt;My Identi.ca account automatically pushes everything to Twitter.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Why I gave in to the &amp;#8220;giant public asynchronous chat system&amp;#8221;, as &lt;a href="http://www.damogran.de"&gt;Lutz&lt;/a&gt; put it so nicely? Well, besides the things I already wrote in &lt;a href="/2009/05/11/the-thing-about-twitter/"&gt;this blog post&lt;/a&gt;, microblogging can be quite fun, I have to admit. There are many things not worth a whole blog post I still would like to share sometimes.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;I&amp;#8217;m using &lt;a href="http://software.complete.org/software/wiki/twidge"&gt;Twidge&lt;/a&gt; on the command line for posting notes, which is a decent program written in &lt;a href="http://www.haskell.org"&gt;Haskell&lt;/a&gt; for using Identi.ca and Twitter.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;That said, feel free to follow me if you think my ramblings may be interesting to you ;).&lt;/p&gt;</content>
    <summary type="html">I admit it. I finally gave in.</summary>
  </entry>
</feed>
