sqlninja is a tool to exploit SQL Injection vulnerabilities on a web application that uses Microsoft SQL Server as its back-end. Its main goal is to provide a remote shell on the vulnerable DB server, even in a very hostile environment.
It should be used by penetration testers to help and automate the process of taking over a DB Server when a SQL Injection vulnerability has been discovered. It is written in PERL and runs on Unix-like boxes.
- Fingerprint of the remote SQL Server (version, user performing the queries, user privileges, xp_cmdshell availability)
- Bruteforce of ‘sa’ password
- Privilege escalation to ‘sa’ if its password has been found
- Creation of a custom xp_cmdshell if the original one has been disabled
- Upload of netcat.exe (or any other executable) using only 100% ASCII GET/POST requests, so no need for FTP connections
- TCP/UDP portscan from the target SQL Server to the attacking machine, in order to find a port that is allowed by the firewall of the target network and use it for a reverse shell
- Direct and reverse bindshell, both TCP and UDP
- DNS-tunneled pseudo-shell, when no TCP/UDP ports are available for a direct/reverse shell, but the DB server can resolve external hostnames
- Test mode, that checks whether the configuration is correct and the injection is successful
- Debug option, which allows to print SQL commands and raw HTTP request/response data. Useful when things are not working and you want to see what’s going on under the hood
- Files are uploaded to %TEMP%, bypassing possible write restrictions
- A simplified way to configure the injection parameters
- Interactive config file generation
You can find it, together with a flash demo of its features, at the address: