import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.*; import org.jsoup.HttpStatusException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import org.jsoup.nodes.Element; import javax.swing.*; public class testing implements Runnable,ActionListener{ PrintWriter writer; PrintWriter htmlpainter; BufferedReader reader; String str; String message; String source; String page; String command; String url; String secondaryurl; int hash; static int time; JFrame frame; JTextPane pane; JButton button; Document doc; Document vuln; Thread t1; InetAddress address; String link; public void run(){ for(time=0;time>=0;time++){ try{ Thread.sleep(1000); }catch(InterruptedException e){System.out.println(e.getMessage()+"Thread interrupted.");} } } public void searchCore()throws IOException{ Java java=new Java(); reader=new BufferedReader(new InputStreamReader(System.in)); t1=new Thread(new testing()); System.out.println("\n"); t1.start(); System.out.print("Choose name of website to be tested: "); url=reader.readLine(); System.out.print("Choose name of secondary url: "); secondaryurl=reader.readLine(); try{ doc=Jsoup.connect(url).get(); } catch(IllegalArgumentException | HttpStatusException i){System.out.println(i.getMessage()+" -Wrong url syntax.Provide http:// prefix, or could not connect.");} System.out.println("Connected."); do{ System.out.print(">"); command=reader.readLine(); //SIMPLE// if(command.equals("?getnode")) System.out.println(doc.nodeName()); if(command.equals("?getname")) System.out.println(doc.title()); if(command.equals("?gettag")) System.out.println(doc.tag()); if(command.equals("?help")) java.help(); if(command.equals("?printsource")){ source=doc.html(); System.out.println(source); } if(command.equals("?printpage")){ page=doc.text(); System.out.println(page); } if(command.equals("?session")) System.out.println(time+" seconds."); if(command.equals("!execute")) System.exit(0); if(command.equals("?getall")){ System.out.println("Node: "+doc.nodeName()); System.out.println("Name: "+doc.title()); System.out.println("Tag: "+doc.tag()); } if(command.equals("?gethash")){ hash=url.hashCode(); System.out.println(url+": "+hash); } if(command.equals("?getip")){ try{ address=InetAddress.getByName(secondaryurl); System.out.println(address); } catch(UnknownHostException e){System.out.println(e.getMessage()+" -wrong name of host.");} } //MAIN// if(command.equals("?getsource")){ writer=new PrintWriter("C:\\Users\\Jakub\\Desktop\\Source.txt"); source=doc.html(); writer.write(source); writer.close(); System.out.println("Done."); } if(command.equals("?getpage")){ writer=new PrintWriter("C:\\Users\\Jakub\\Desktop\\Text.txt"); page=doc.text(); writer.write(page); writer.close(); System.out.println("Done."); } if(command.equals("?isvulnerable")){ if(url.contains("id")||url.contains("ID")){ vuln=Jsoup.connect(url+"'").get(); message=vuln.text(); if(message.contains("sql")||message.contains("Sql")||message.contains("SQL")||message.contains("mySQL")||message.contains("mysql")||message.contains("MySQL")){ System.out.println("Website is SQLi vulnerable."); } else System.out.println("No SQLi vulnerable place found."); } else System.out.println("No parameter provided."); } if(command.equals("!bruteforce")){ try{ if(!url.contains("id")&&!url.contains("ID")){ Document vuln=Jsoup.connect(url+"/index.php?id='").get(); String message=vuln.text(); if(message.contains("sql")||message.contains("Sql")||message.contains("SQL")||message.contains("mySQL")||message.contains("mysql")||message.contains("MySQL")){ System.out.println("Website is SQLi vulnerable (bruteforce)."); } else System.out.println("No SQLi vulnerable place found."); } else System.out.println("Cannot force website to throw vulnerable subdomain- id is implemented."); } catch(HttpStatusException e){System.out.println(e.getMessage()+" -bruteforce not available.");} } if(command.equals("?usesjvs")){ source=doc.html(); if(source.contains("javascript")||source.contains("function")){ System.out.println("Website possibly uses javascript."); } else System.out.println("No javascript footprint found."); } if(command.equals("?usescss")){ source=doc.html(); if(source.contains("css")||source.contains("style")){ System.out.println("Website possibly uses css styles."); } else System.out.println("No css footprint found."); } if(command.equals("?htmlversion")){ source=doc.html(); if(source.contains("!DOCTYPE")||source.contains("!doctype")){ System.out.println("Website uses HTML 5."); } else{ System.out.println("Website HTML version < 5.0."); } } if(command.equals("?getlinks")){ htmlpainter=new PrintWriter("C://Users//Jakub//Desktop//Links.txt"); Elements links=doc.select("a[href]"); for(Element element : links){ htmlpainter.print("\n"+element.attr("href")+" "); } htmlpainter.close(); System.out.println("Done."); } if(command.equals("?printlinks")){ Elements links=doc.select("a[href]"); for(Element element : links){ System.out.println("\n"+element.attr("href")); } } if(command.equals("?getimages")){ htmlpainter=new PrintWriter("C://Users//Jakub//Desktop//Images.txt"); Elements images=doc.select("img"); for(Element element : images){ htmlpainter.print("\n"+element.attr("src")+" "); } htmlpainter.close(); System.out.println("Done."); } if(command.equals("?printimages")){ Elements images=doc.select("img"); for(Element element : images){ System.out.println("\n"+element.attr("src")); } } if(command.equals("?injection-ready")){ writer=new PrintWriter("C://Users//Jakub//Desktop//MAP.txt"); writer.println("python sqlmap.py -u "+url+" --random-agent --timeout=15 --keep-alive --threads=3 --level=5 --risk=3 --technique=BEUST --union-cols=20 --dbs --eta -v 2 --union-char=20 -p id"); writer.close(); System.out.println("Done."); } //STR FILTER// if(command.equals("?getsourcestr")){ str=reader.readLine(); source=doc.html(); if(source.contains(str)){ System.out.println("Source code contains *"+str+"*."); } else System.out.println("Source code does not contain *"+str+"*."); } if(command.equals("?getpagestr")){ str=reader.readLine(); page=doc.text(); if(page.contains(str)){ System.out.println("Page text contains *"+str+"*."); } else System.out.println("Page text does not contain *"+str+"*."); } //GUI-testX// frame=new JFrame("TestX"); frame.setSize(500,120); frame.setVisible(false); frame.setLayout(new FlowLayout()); pane=new JTextPane(); pane.setPreferredSize(new Dimension(450,50)); button=new JButton("Scan"); button.setPreferredSize(new Dimension(200,20)); button.addActionListener(this); frame.add(pane); frame.add(button); if(command.equals("?testX")){ frame.setVisible(true); } }while(command!="disconnect"); } public static void main(String args[])throws IOException{ testing obj=new testing(); obj.searchCore(); } @Override public void actionPerformed(ActionEvent e){ try{ link=pane.getText(); Document doc=Jsoup.connect(link+"'").get(); message=doc.text(); if(message.contains("sql")||message.contains("Sql")||message.contains("SQL")||message.contains("mySQL")||message.contains("mysql")||message.contains("MySQL")){ pane.setText(pane.getText()+"\n"+"Website is SQLi vulnerable."); writer=new PrintWriter("C://Users//Jakub//Desktop//MAP.txt"); writer.println("python sqlmap.py -u "+link+" --random-agent --timeout=15 --keep-alive --threads=3 --level=5 --risk=3 --technique=BEUST --union-cols=20 --dbs --eta -v 2 --union-char=20 -p id"); writer.close(); } else pane.setText(pane.getText()+"\n"+"No vulnerableness found."); } catch(IOException | IllegalArgumentException ei){System.out.println(ei.getMessage()+ "-Wrong url syntax.Provide http:// prefix.");} } } public class Java extends testing{ public void help(){ System.out.println("ParseX is software used to analyse websites and search for SQLi vulnerableness.\n" + "It's also one-session-only software.Primary url- with http:// and/or parameter.\n" + "Secondary url- without both http:// and parameter.\n\n"); System.out.println("?getname- get name of website."); System.out.println("?gettag- get tag of website."); System.out.println("?getnode- get node of website."); System.out.println("?getall- get name,tag and node."); System.out.println("?getsource- write source code of website to a text file."); System.out.println("?printsource- print source code to console."); System.out.println("?getpage- write website's text content to a text file."); System.out.println("?printpage- print website's text content to console."); System.out.println("?isvulnerable- find website's SQLi vulnerableness (provide id parameter)."); System.out.println("!bruteforce- force website to throw SQLi vulnerable subdomain (less effective)."); System.out.println("?injection-ready- write sqlmap-based script to text file."); System.out.println("?getsourcestr- find certain String in source code."); System.out.println("?getpagestr- find certain String in textual content."); System.out.println("?getlinks- find all links of website from tag."); System.out.println("?printlinks- print all links of website to a console."); System.out.println("?getimages- get all image links from tag."); System.out.println("?printimges- print all image links to console."); System.out.println("?gethash- encrypt name of website into numeric hash."); System.out.println("?usesjvs/usescss- find out if website uses javascript or css language."); System.out.println("?htmlversion- find out if website uses HTML <= 5.0."); System.out.println("?getip- get ip address of website."); System.out.println("?session- get current session time."); System.out.println("?testX- start separate testX software to scan if any website is vulnerable."); } }