Changeset 5467
- Timestamp:
- 04/04/08 16:15:55 (6 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
framework3/trunk/lib/rex/proto/dcerpc/client.rb
r5466 r5467 142 142 begin 143 143 if(max_read) 144 145 read_limit = nil 146 144 147 while(true) 145 148 # Random read offsets will not work on Windows NT 4.0 (thanks Dave!) 146 data = self.socket.read( (rand(max_read-min_read)+min_read), rand(1024)+1) 149 150 read_cnt = (rand(max_read-min_read)+min_read) 151 if(read_limit) 152 if(read_cnt + raw_response.length > read_limit) 153 read_cnt = raw_response.length - read_limit 154 end 155 end 156 157 data = self.socket.read( read_cnt, rand(1024)+1) 147 158 last if not data.length 148 159 raw_response += data 160 161 # Keep reading until we have at least the DCERPC header 162 next if raw_response.length < 10 163 164 # We now have to process the raw_response and parse out the DCERPC fragment length 165 # if we have read enough data. Once we have the length value, we need to make sure 166 # that we don't read beyond this amount, or it can screw up the SMB state 167 begin 168 check = Rex::Proto::DCERPC::Response.new(raw_response) 169 read_limit = check.frag_len 170 rescue ::Rex::Proto::DCERPC::Exceptions::InvalidPacket 171 end 172 173 break if (read_limit and read_limit == raw_response.length) 149 174 end 150 175 else … … 161 186 else 162 187 if (self.socket.type? == 'tcp') 163 if ( max_read)188 if (false and max_read) 164 189 while (true) 165 190 data = self.socket.get_once((rand(max_read-min_read)+min_read), self.options['read_timeout']) … … 187 212 max_write = self.options['pipe_write_max_size'] || data.length 188 213 min_write = self.options['pipe_write_min_size'] || max_write 214 215 if(min_write > max_write) 216 max_write = min_write 217 end 218 189 219 idx = 0 190 220 framework3/trunk/lib/rex/proto/dcerpc/response.rb
r3626 r5467 27 27 28 28 if (! data or data.length < 10) 29 raise Rex::Proto::DCERPC::Exceptions::InvalidPacket, ' Packet header must be at least 10 bytes long'29 raise Rex::Proto::DCERPC::Exceptions::InvalidPacket, 'DCERPC response packet is incomplete' 30 30 end 31 31 … … 48 48 uuid = Rex::Proto::DCERPC::UUID 49 49 data = self.raw 50 50 51 52 if(not data) 53 raise Rex::Proto::DCERPC::Exceptions::InvalidPacket, 'DCERPC response packet is incomplete' 54 end 55 51 56 # BIND_ACK == 12, ALTER_CONTEXT_RESP == 15 52 57 if (self.type == 12 or self.type == 15)
