MySQL
注释注释符:
#
,--
,/**/
注意这里
--
后面的空格,在chrome
中可能被吞掉,那么应该用%20
来代替空格内联注释:
/*! sql语句 */
,仅有MySQL
可以识别,用来绕过WAF
,例:1
SELECT *FROM user WHERE id=-1 /*!union*/ /*!select*/ 1,2,3,4
SQLmap
获取目标
直连数据库
服务型数据库(如mysql,oracal,microsoft SQL server)
1
sqlmap -d DBMS://ADMIN:PASSWORD@DBMS_IP:DBMS:PORTS/DATABASE_NAME
文件型数据库(需要知道绝对路径)
1
sqlmap -d DBMS://DATABASE_FILEPATH
url
探测-u
/-url
从文件读取目标
-l
从burp
中读取的http
请求日志文件—>在Project options-misc-logging-Proxy
选择requests-x
从站点地图sitemap
中读取慕白哦-m
从文本格式文件中读取多行作为目标-r
文本文件中读取http
请求作为目标-c
从配置文件sqlmap.conf
读取目标
参数设置
http
请求方法get
向服务器请求资源post
向服务器提交资源put
全局更新资源delete
删除在
sqlmap
中,put
请求不会自动使用,那么可以强制指定,但并不常用1
--method=PUT
设置
POST
请求默认下执行
http
请求的方法是GET
,但可以通过提供仅在POST
请求中发送的数据将其更改为POST
方法1
--data="[截获的请求参数]"
当然,
--method
在这里也可以使用如图就是截获的
POST
参数,对于GET
请求的使用如此参数便可以POST
方式设置参数分隔符
1
--param-del="[指定分隔符]"
sqlmap
默认分隔符为&
,而当特殊情况下截获的参数分隔符不为&
时,需要手动设置与其相同的分隔符以便正常探测如截获的请求为
user=admin;pass=123
时,分隔符为;
,此时需要手动设置设置
cookie
值1
--cookie [cookie]
当仅使用自己的
cookie
而不用网站返回的set-cookie
报头时,可以使用drop-set-cookie
忽略网站返回的所有cookie
注意:对
cookie
进行探测时,需要设置level
为 $2-5$设置
user-agent
头默认情况下,
sqlmap
使用的用户代理头容易被相关措施拦下,但可以自定义用户代理来伪造1
2--user-agent="[合法的useragent]"
--random-agent 从share/sqlamp/txt/user-agent.txt中随机选取一用
burp
抓包即可得到合法的user-agent
此时
level
设置需为 $3$ 以上设置
host
头$\sout{感觉没什么用的样子}$
关于
host
一个
ip
可对应多个域名,host
参数用于识别将访问到哪个域名当服务器仅允许特定主机访问敏感资源时,可以伪造
host
标头,使服务器误以为请求来自受信任的主机比如通过查看
robot.txt
发现后台,将host
改为localhost
绕过当
level
设置为 $5$ 时,sqlmap
将对HTTP
主机头进行注入探测
设置
referer
关于
包含 “引荐页面” ,即用户在访问当前页面之前所在的位置
常用于用户跟踪,比如是否从特定网站访问,防盗链等,但值得注意的是
referer
易被更改,不能用于关键部分。在
sqlmap
中,默认不发送任何引用头。而当level
在 $3$ 以上时,会对referer
进行渗透测试
设置
http
标头就是总结输入以上参数,以
\n
分割不同参数,例1
--header="User-agent:[balabala]\ncookie:[balabala]\nhost:[balabala]"
设置
http
认证关于认证
basic
服务器收到敏感请求后返回 $401$ 状态,要求用户名与密码,客户端以
base64
加密后明文发送至服务器,成功后服务器返回 $200$ 状态Digest
客户端根据用户名密码加密生成响应码
response
(默认下是md5
加密), 服务器验证响应码值得注意的是,即使不再以明文传输密码,攻击者仍可截获响应码进行重放攻击。所以一般来说服务器会发送基于时间的随机数
nonce
,并要求其与用户名密码一同加密,从而避免未随机化的摘要认证NTML
Windows
下的单点验证。客户端发送用户名,并根据密码生成对应摘要,服务器返回一个随机数挑战Challenge
,客户端使用摘要对随机数加密(HMAC-MD5)并返回给服务器,服务器检索用户名并进行根据其密码同样加密,若两者相符则认证成功
而在
sqlmap
中,针对需要认证的页面,通过设置参数中的用户名和密码可以进行渗透测试1
2--auth-type [支持的认证方式:Basic,Digest,NTML]
--auth-cred "[username]:[password]"
设置代理
1
2
3
4--proxy http://[ip]:[port]
--proxy-cred [username]:[password]
--proxy-file 从文件中设置多条代理
--ignore-proxy 忽略系统代理设置测试参数
1
2
3
4
5--delay [time] //延迟发包时间
--timeout [double_time] //超时时间,默认30s,可设置小数
--retries count [num] //设置重试次数
--ignore 401 //忽略未验证错误
--skip-urlencode //关闭url编码设置随机参数
每次请求中随机更改指定值,长度与类型与原始值保持一致,如对
id
进行随机,会随机提交id=1,2,3...
的请求1
--randomize [参数名称]
设置安全模式
对于大型渗透中,当
sqlmap
多次不成功访问时,服务器长时间不响应,会导致与sqlmap
的连接中断,导致会话失效。所以应该一直保持最初的会话,即在每次请求数量达到预设时访问该url
,因为不对该url
进行任何注入,所以服务器一定会相应,从而达到保持会话的目的1
--safe-url [url]
绕过
CSRF
网站一般在表单中添加随机值的
token
为隐藏字段来防止CSRF
攻击,sqlmap
自动识别失效时需要手动添加参数1
2-csrf-token [字段名] 指定包含token的隐藏字段名,不过不是常见字段名则不能识别,需要手动指定
-csrf-url [url] 从任意url中回收token,当目标url不包含token而要求在其他网站提取token时可用
性能优化
1
-o //开启所有性能优化参数
HTTP
持久连接此时
HTTP
报文中显示Connection:keep alive
1
--keep-alive
当扫描站点url较多时,如此能提高性能
不接受
HTTP body
盲注时,只关心响应头
head
部分,则设置空连接1
--null-connection
多线程
1
--thread=[num]
最大线程数为 $10$
指定位置注入
如
Submit
为静态参数,id
为动态参数,那么扫描时只需要指定id
即可同理,可以跳过某些参数
1
2-p "id","[balabala],[balabala]"
--skip "referer,host"1
2--param-exclude="[],[]" //不对包含指定参数的请求进行探测
--skip-static //扫描时忽略非动态参数
sqlmap注入基础参数
- 本文链接: http://noone40404.github.io/2023/09/20/sql注入基础参数/
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!