给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
| --priv-esc | | 数据库进程用户权限升级 |
| --msf-path=MSFPATH | | 安装Metasploit Framework的本地路径 |
| --tmp-path=TMPPATH | | 临时文件目录的远程绝对路径 |
| Windows注册表访问 | | |
| --reg-read | | 读取Windows注册表项值 |
| --reg-add | | 写入Windows注册表项值数据 |
| --reg-del | | 删除Windows注册表项值 |
| --reg-key=REGKEY | | Windows注册表项 |
| --reg-value=REGVAL | | Windows注册表项值 |
| --reg-data=REGDATA | | Windows注册表项值数据 |
| --reg-type=REGTYPE | | Windows注册表项值类型 |
| 通用 | | |
| -s | | 从存储的(.sqlite)文件加载会话 |
| -t | | 将所有HTTP通信记录到文本文件中 |
| --answers | | 设置预定义的答案(例如“ quit = N,follow = N”) |
| --base64 | | 包含Base64编码数据的参数 |
| --batch | batch | 从不要求用户输入,使用默认行为 |
| --binary-fields | | 结果字段具有二进制值(例如“摘要”) |
| --check-internet | | 在评估目标之前检查Internet连接 |
| --crawl=CRAWLDEPTH | | 从目标URL开始爬行网站 |
| --crawl-exclude | | 正则表达式可将网页从抓取中排除(例如“注销”) |
| --csv-del=CSVDEL | | 输出中使用的定界字符(默认为“,”) |
| --charset=CHARSET | | 盲SQL注入字符集(例如“ 0123456789abcdef”) |
| --dump-format | | 转储数据的格式(CSV(默认),HTML或SQLITE) |
| --encoding | | 用于数据检索的字符编码(例如,GBK) |
| --eta | | 为每个输出显示估计的完成时间 |
| --flush-session | SESSION | 刷新当前目标的会话文件 |
| --forms | | 在目标URL上解析和测试表单 |
| --fresh-queries | | 忽略存储在会话文件中的查询结果 |
| --har=HARFILE | | 将所有HTTP通信记录到HAR文件中 |
| --hex | | 在数据检索期间使用十六进制转换 |
| --output-dir=OUT… | | 自定义输出目录路径 |
| --parse-errors | | 解析并显示响应中的DBMS错误消息 |
| --preprocess=PRE. | | 使用给定脚本进行响应数据的预处理 |
| --repair | | 具有未知字符标记(?)的Redump条目 |
| --save=SAVECONFIG | | 将选项保存到配置INI文件中 |
| --scope=SCOPE | | 从提供的代理日志中过滤目标 |
| --test-filter | | 通过有效载荷和/或标题(例如ROW)选择测试 |
| --test-skip | | 按有效载荷和/或标题跳过测试(例如,BENCHMARK) |
| --update | | 更新sqlmap |
| --sqlmap-shell | | 提示输入交互式sqlmap shell |
| 杂项 | | |
| -z | MNEMONICS | 使用短助记符(例如“ flu,bat,ban,tec = EU”) |
| --alert=ALERT | | 找到SQL注入后运行主机OS命令 |
| --beep | | 出现问题/发现SQL注入时发出嘟嘟的声音 |
| --cleanup | | 从sqlmap特定的UDF和表中清理DBMS |
| --dependencies | | 检查缺少的(可选)sqlmap依赖项 |
| --disable-coloring | | 禁用控制台输出颜色 |
| --gpage=GOOGLEPAGE | | 使用指定页码的Google dork结果 |
| --identify-waf | | 对WAF / IPS防护进行彻底的测试 |
| --list-tampers | | 显示可用的篡改脚本列表 |
| --mobile | | 通过HTTP User-Agent标头模仿智能手机 |
| --offline | | 以脱机模式工作(仅使用会话数据) |
| --purge | | 安全删除sqlmap数据目录中的所有内容 |
| --skip-waf | | 跳过启发式检测WAF / IPS保护 |
| --smart | | 仅在启发式为正的情况下进行全面测试 |
| --sqlmap-shell | | 提示输入交互式sqlmap shell |
| --tmp-dir=TMPDIR | | 用于存储临时文件的本地目录 |
| --web-root=WEBROOT | | Web服务器文档的根目录(例如“ / var / www”) |
| --wizard | wizard | 面向初学者的简单向导界面 |
指定目标
直连数据库
选项:-d
服务型数据库(前提知道数据库用户名和密码)
格式:
DBMS://USER:PASSWORDODBMS_IP:DBMS_PORT/DATABASE NAME(MySQL,Oracle,Microsoft SQL Server,PostgreSQL,etc.)
例如:
python sqlmap.py -d "mysql://root:84418733w@localhost:3306/test2" -f --banner
直连结果
可能出现的问题:
缺少包
提示是缺少包的问题,通过提示,使用以下命令可安装所需包(根据自身python版本及平台修改命令)
git clone https://github.com/petehunt/PyMySQL/
cd PyMySQL/
python ./setup.py install
pip3 install sqlalchemy
安装PyMySQL成功
安装sqlalchemy成功
文件型数据库(前提知道数据库绝对路径)
格式:
DBMS://DATABASE_FILEPATH(SQLite,Microsoft Access,Firebird等等)
URL探测
选项:-u或者–url
http协议及https协议都可以,指定端口时使用ip:port在url中添加即可。
python sqlmap.py -u "http://192.168.31.174:8080/login.php?id=0"
文件读取目标
- -l 从Burpsuite proxy或WebScarab proxy中读取Http请求日志文件。
- -x 从sitemap.xml站点地图文件中读取目标探测。
- -m 从多行文本格式文件读取多个目标,对多个目标进行探测。
- -r 从文本文件中读取Http请求作为Sql注入探测的目标。
- -c 从配置文件sqlmap.conf中读取目标探测。
-l 博主仅安装了Burpsuite,展示下Burpsuite如何操作。
Burpsuite日志文件设置
部分日志
示例
python sqlmap.py -l E:\Workspace\Burp_suite_workspace\test.log
根据日志批量检测
按y进行探测并继续。
-x 这个很多站点都没有了,有的也基本没有GET、POST,就不做展示了。
-m 多个目标就是指多个url,你可以把自己想要探测的多个url写到txt文本中
python sqlmap.py -m urls.txt
-r 把抓到的http包复制到txt文件中,进行探测
示例
httpbin抓包
python sqlmap.py -l E:\Workspace\Burp_suite_workspace\httpbinGet.txt
get
这里提示没有参数,你可以尝试其他的,或者靶场中的。
网络安全-sqlmap实战之sqlilabs-Less12中有使用。
-c 配置文件探测
sqlmap.conf
从配置文件中我们可以看到一些参数,填写参数即可。
Google dork注入
选项:-g
就是一些google高级搜索作为url, 常见的高级搜索有infile,inurl,intitle,filetype等。
python sqlmap.py -g "inurl:\".php?id=1\""
翻墙到goole
不怎么样,翻了墙也半天没反应,了解下好了。
Http参数
有关Http协议的内容,可以参考网络-http协议学习笔记(消息结构、请求方法、状态码等)
设置请求方法
sqlmap一般会调用合适的请求方法,但是,PUT等请求方法sqlmap不会自动调用,需要手动配置。
选项:–method=PUT
POST提交参数
sqlmap默认的是使用GET方法,可以使用–data参数来进行数据提交,key=value形式,使用&连接。
选项:–data=DATA
python sqlmap.py -u "http://www.target.com" --data="key1:value&key2:value"
建议学习–forms参数
设置参数分隔符
默认的分割符为&,可以进行设置,个人认为就用默认的就好了
选项:–param-del=PARAM
python sqlmap.py -u "http://www.target.com" --data="key1:value;key2:value" --parameter-del=";"
设置Cookie
以下两种情况可能会使用:
- 测试页面需要登录,登录状态用cookie识别
- 想要检测是否存在Cookie注入
–cookie=COOKIE。同时,–leverl=2或者2以上
设置User-Agent
选项:–user-agent,-A,–random-agent
Sqlmap发送的HTTP请求中的User-Agent默认值为:
sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx"
sqlmap
很明显,sqlmap默认的User-Agent中含有sqlmap,而一般的网页浏览是浏览器,比如下图使用火狐浏览器进行访问,因此,探测目标可能根据User-Agent对sqlmap进行拦截等处理,有必要进行User-Agent的伪造。
火狐
使用-A参数进行修改,如下所示。
-A
再次抓包后发现User-Agent已修改。
当然,没必要每次用浏览器抓包,你可以保存下来,或者使用–random-agent参数,用sqlmap中自带的一些。
user-agents
当“–level”参数设置为3或更高时,Sqlmap会检测User-Agent是否存在注入漏洞。
Host
选项:–host
使用该参数可以手动指定HTTP头中的Host值。
当“–level”参数设置为5或更高时,Sqlmap会检测Host是否存在注入漏洞。
Referer
选项:–referer
使用该参数可以指定HTTP头中的Referer值。
当“–level”设置为3或更高时,Sqlmap会检测Referer是否存在注入漏洞
额外的HTTP头部
选项:-H,–header,–headers
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" -H "blog:lady_killer9" --banner
添加blog头部
当然,对于已有的头部字段,也可以修改。
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" -H "User-Agent:lady_killer9" --banner
修改User-Agent头部
协议认证
选项:–auth-type和–auth-cred
“–auth-type”用于指定认证方式,支持四种身份认证方式:Basic、Digest、NTLM、PKI
一般就是Basic,输入登录的用户名和密码,类似于Postman中的Basic Auth。
设置代理
选项:–proxy、–proxy-cred、–proxy-file和–ignore-proxy
使用参数“–proxy”来设置一个HTTP(S)代理,格式是“http(s)😕/ip:port”。
如果代理需要认证,使用参数“–proxy-cred”来提供认证凭证,格式是“username:password”。
使用参数“–proxy-file”来指定一个存储着多条代理的文件。
使用参数“–ignore-proxy”忽略本地代理设置。
一些代理
代理使用失败
事实证明,不花钱就想得到免费ip代理,,,是在想peach。。。
Tor匿名网络
选项:–tor、–tor-type、–tor-port和–check-tor
我的Tor还没有设置好,可能因为国内的原因吧,网桥配置了,但一直连接不上。所谓的深网也好,暗网也罢,其实也有蛛丝马迹的,遵守法律,做一位合格的好公民!
设置延迟
前端时间看见一位b站up主,吐槽自己的亲戚好友,让他使用刷*等软件刷视频赚钱,然后他写了一个脚本,跳过广告,自动滚屏,然后一天弄了几十块,还没提现,就被后台封号了。
为什么提到这个呢,因为一些后台会看你的访问频率,检测DDOS攻击或其他危险行为,所以这里我们设置延迟,让两个数据包之间有延迟,模拟人工浏览器访问。
–-delay
python sqlmap.py -u "http://www.httpbin.org/get?a=xxx" --delay=0.5 --banner
设置超时
选项:-–timeout
超时时间默认是30秒,可以用参数“–timeout”指定超时时间。
设置重试次数
选项:-–retries
超时后Sqlmap会进行重试,重试次数默认为3,可以用参数“–retries”指定最大重试次数。
设置随机化参数
选项:-–randomize
使用该参数,Sqlmap会随机生成每次HTTP请求中参数的值,可以进行简单的fuzz,类似于Peach,内部原理是变异还是什么目前还不清楚。
前面是xxx,后面是123
前面是a=xxx,sqlmap有随机的赋值a其他的值,a=123时,也会随机更改为4184等值。
设置日志过滤目标
选项:-–scope,配合-l参数
指定一个Python正则表达式对代理日志进行过滤,只测试符合正则表达式的目标,如:
python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"
设置忽略
选项:–ignore-code
如果测试的站点偶尔返回导致常规sqlmap运行出现问题的HTTP错误代码(例如,401(未授权)),想忽略该站点并继续进行测试,可以使用 --ignore-code
设置HTTP私钥
选项:–auth-file
文件格式为包含证书和私钥的PEM格式
设置安全模式
选项:--safe-url
,--safe-post
,--safe-req
和--safe-freq
避免过多的请求失败后会话被破坏,对表明safe的不进行任何类型的注入
--safe-url
:测试期间经常访问的URL地址。--safe-post
:HTTP POST数据发送到给定的安全URL地址。--safe-req
:从文件加载并使用安全的HTTP请求。--safe-freq
:测试两次访问给定安全位置之间的请求。
设置忽略URL编码
选项:–skip-urlencode
使用该参数可以关闭URL编码,服务器端不支持RFC标准时使用。
绕过反CSRF保护
选项:--csrf-token
和--csrf-url
许多站点都以令牌,每个页面响应期间随机设置的隐藏字段值的形式结合了反CSRF保护。SqlMap的会自动尝试识别并绕过这种保护,但也有选项--csrf-token
,并--csrf-url
可以用来进一步微调它。选项--csrf-token
可用于设置包含随机标记的隐藏值的名称。在网站为此类字段使用非标准名称的情况下,这很有用。选项--csrf-url
可用于从任意URL地址检索令牌值。如果易受攻击的目标URL最初不包含必要的令牌值,但需要从其他位置提取该令牌值,则此功能很有用。
强制使用SSL / HTTPS
选项: --force-ssl
如果用户想要向目标强制使用SSL / HTTPS请求,则可以使用此选项。在使用选项--crawl
收集URL或为-l选项提供Burp日志的情况下,这个选项很有用。
性能优化
选项:-o
该参数将开启所有性能优化
--keep-alive
--null-connection
--threads=3
如果未设置为更高的值。
设置持久HTTP连接
选项:-–keep-alive
该参数让Sqlmap使用HTTP长连接,头部的Connection字段会变为keep-alive。该选项与“–proxy”不兼容。
设置不接收HTTP的body
选项:-–null-connection
有特殊的HTTP请求类型,可用于获取HTTP响应的大小而无需获取HTTP正文。这种知识可以在盲目注射技术被用来区分True
、False
响应。提供此选项后,sqlmap将尝试测试和利用两种不同的NULL连接技术:Range
和HEAD
。如果目标Web服务器支持其中任何一种,则可以明显节省已使用的带宽,从而提高速度。
设置多线程
选项:-–threads
使用该选项指定Sqlmap可以达到的最大并发数。默认为3个,可修改,最大为10。
设置预测输出
选项: --predict-output
此选项在推理算法中用于对要检索的值的字符进行顺序统计预测。此开关与--threads
选项不兼容。
注入
指定注入参数
选项:-p
sqlmap默认指定所有参数进行注入,当有多个参数时,通过-p参数可以指定对某个参数,包括http报头,例如user-agent进行注入。
选项:–skip
既然可以指定也可以排除,使用–skip选项就可以对某些参数不进行注入。
选项:–param-exclude
忽略包含具体内容的参数。要跳过对包含字符串token
或session
的参数的测试,可以使用--param-exclude="token|session"
。
设置URL注入位置
在特殊情况下,注入点位于URL本身内,除非手动指出,否则sqlmap不会对URL路径执行任何自动测试。必须在命令行中通过在在参数值后附加一个星号(*
)(注意:%INJECT HERE%
还支持Havij样式)来指定这些注入点。
例如,当使用Apache Web服务器的mod_rewrite模块或其他类似技术时,此功能特别有用。
示例:
python sqlmap.py -u "http://targeturl/param1/value1*/param2/value2/"
设置任意注入位置
与URL注入点类似,星号(*
)也可以用于指向GET,POST或HTTP标头中的任意注入点。注入点可以通过提供选项-u的
GET参数值(一个或多个),提供选项--data的
POST参数值(一个或多个),HTTP标头中提供的选项值(S) ,-H
,--headers
,--user-agent,--referer,--cookie
,在通用处内部HTTP请求从文件中加载带有选项-r
,来指定。
示例:
python sqlmap.py -u "http://targeturl" --cookie="param1=value1*;param2=value2"
指定DBMS
选项:-dbms
sqlmap支持以下数据库(有些我还没听说过╮( ̄▽  ̄)╭):
MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、Informix、MariaDB、Percona、MemSQL、TiDB、CockroachDB、HSQLDB、H2、MonetDB、Apache Derby、Amazon Redshift、Vertica、Mckoi、Presto、Altibase、MimerSQL、CrateDB、Greenplum、Drizzle、Apache Ignite、Cubrid、InterSystems Cache、IRIS、eXtremeDB、FrontBase
示例:
--dbms mysql 5.0
版本号可以省略,DBMS版本号不一样,并不都是5.0这种,SQL Server数据库版本号是年号,例如08(代表SQL Server2008)
指定DBMS运行所在OS
选项: --os
指定操作系统,支持Windows和Linux
关闭负载转换机制
选项:–no-cast
NULL值转换为空格
关闭字符转换机制
选项:–no-escape
强制使用大数字来使值无效
选项: --invalid-bignum
在sqlmap需要使原始参数值(例如id=13
)无效的情况下,它将使用经典取反(例如id=-13
)。使用此选项,可以强制使用大整数值来实现相同的目标(例如id=99999999
)。
强制使用逻辑运算来使值无效
开关: --invalid-logical
在sqlmap需要使原始参数值(例如id=13
)无效的情况下,它将使用经典取反(例如id=-13
)。通过此选项,可以强制使用布尔运算来实现相同的目标(例如id=13 AND 18=19
)。
强制使用随机字符串来使值无效
选项: --invalid-string
在sqlmap需要使原始参数值(例如id=13
)无效的情况下,它将使用经典取反(例如id=-13
)。通过此选项,可以强制使用随机字符串来实现相同的目标(例如id=akewmc
)。
自定义注入负载设置
选项:--prefix
和--suffix
在某些情况下,仅当用户提供要添加到注入有效负载的特定后缀时,漏洞参数才可利用。当用户已经知道查询语法并想通过直接提供注入有效载荷前缀和后缀来检测和利用SQL注入时,这些选项很方便出现的另一种情况就会出现。
易受攻击的源代码示例(:
query = "SELECT * FROM users WHERE id=('" . $_GET['id'] . "') LIMIT 0, 1";
为了检测和利用此SQL注入,您可以让sqlmap 在检测阶段为您检测边界(如SQL有效负载前缀和后缀的组合),也可以自行提供。
例如:
python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "')" --suffix " AND ('abc'='abc"
payload前缀为’),后缀为 AND(‘abc’=‘abc’(注意空格)
这将导致所有sqlmap请求最终以如下查询结束:
query = "SELECT * FROM users WHERE id=('1') <PAYLOAD> AND ('abc'='abc') LIMIT 0, 1";
网络安全-sqlmap实战之sqlilabs-Less3文章中有使用。
设置Tamper脚本
选项:–tamper
在后端数据与数据库管理系统之间的输入验证机制较弱的情况下,此选项可能非常有用且功能强大。通过tamper脚本绕过昂贵的企业级IPS设备或Web应用程序防火墙(WAF)。
要利用此选项,需要为sqlmap提供一个以逗号分隔的篡改脚本列表,它将处理有效负载并将其转换为有效负载。可以定义自己的篡改脚本,在tamper/
文件夹中使用sqlmap脚本,也可以对其进行编辑,只要将它们以逗号分隔作为选项的值即可连接。
示例:
--tamper="between.py,randomcase.py"
tamper脚本
使用脚本或自己编写脚本后再来补充。
设置DBMS认证
选项:–dbms-cred=username:password
很少使用,了解即可
探测
设置探测等级
选项: --level
此选项需要一个参数,该参数指定要执行的测试级别。有五个级别。默认值是1,其中执行有限数量的测试(请求)。反之亦然,级别5将详细测试大量有效负载和边界(如SQL有效负载前缀和后缀)。
sqlmap使用的有效负载在文本文件中指定xml/payloads.xml
。按照文件顶部的说明进行操作,如果sqlmap错过了注入,则您也应该可以添加自己的有效负载进行测试!
此选项不仅会影响尝试使用哪些有效负载sqlmap,还会影响检查中采用的注入点:始终测试GET和POST参数,HTTP cookie头值从2级开始探测。HTTP User-Agent / Referer头的值从3级开始探测。
总而言之,检测SQL注入越难,则--level
必须设置的越高。
xml文档
union_query
在标签中存在标签,level设置为3、1时,分别执行两个测试。
设置风险参数
选项: --risk
此选项需要一个参数,该参数指定执行探测的风险。存在三个风险值。默认值为1,对于大多数SQL注入点而言,该值是无害的。风险值2将增加基于查询时间的SQL注入的测试添加到默认级别,值3也添加基于OR的
SQL注入测试。
设置页面比较参数
默认情况下,通过将注入的请求页面内容与原始未注入的页面内容进行比较,可以将True
查询与False
查询(基于布尔的盲SQL注入漏洞的粗略概念)区分开。这个概念并非总是可行,因为有时页面内容在每次刷新时都会更改,甚至不注入任何内容,例如,当页面具有计数器,动态广告横幅或动态呈现的HTML的任何其他部分时,可能是随时间变化的并不是用户的输入。为了绕过此限制,sqlmap会努力识别响应正文的这些片段并进行相应处理。
选项:-–string
指定包含字符串,查询为True
选项:-–not-string
指定包含字符串,查询为False
选项:-–regexp
指定通过正则表达式匹配字符串,结果为True
选项:–-code
指定匹配HTTP响应码,查询为True
示例:
--code=200
选项:–text-only
设置页面内容中包含文本
示例:
--text-only="这是页面需要包含的文本"
选项:–titles
前提是你知道如何根据返回的字符串内容区分查询真假,例如,登录页面title为Login时为真,Forbidden时为假。
示例:
--titles="Login"
注入技术
进行探测时的注入技术
选项:–technique
sqlmap支持以下注入技术
- B:Boolean-based blind(基于布尔的盲注)
- E:Error-based(报错注入)
- U:Union query-based(联合查询注入)
- S:Stacked queries(堆叠查询注入)
- T:Time-based blind(基于时间的盲注)
- Q:Inline queries(内联查询注入)
使用多个技术时连着写即可
示例
--technique=BU
设置时间盲注的延迟时间
选项:–time-sec
默认为5秒,空格后跟一个整数值来设置。
设置联合查询列数
选项:–union-cols
默认范围是1到10。当level值较高时列数检测范围的会扩大到50列。
可以用此参数指定列数检测范围,例如,-–union-cols 12-16意味着使用12到16列来测试UNION查询SQL注入。
设置联合查询字符
选项: --union-char
默认情况下,sqlmap使用NULL
字符测试UNION查询SQL注入技术。但是,通过提供更高的--level
值,sqlmap也将使用随机数执行测试,因为在某些特殊情况下,UNION查询测试NULL
失败,而使用随机整数则成功。
例如,使用--union-char abc
来手动告诉sqlmap使用特定字符测试这种类型的SQL注入。
设置联合查询表
选项: --union-from
在某些UNION查询SQL注入情况下,需要在FROM
子句中强制使用有效且可访问的表名。例如,Microsoft Access要求使用此表。如果不提供一个UNION查询,SQL注入将无法正确执行(例如--union-from=users
)
DNS渗透攻击
选项: --dns-domain
DNS渗透SQL注入攻击在论文《Data Retrieval over DNS in SQL Injection Attacks》中可以查看,而在sqlmap内部实现的介绍可以在DNS exfiltration using sqlmap幻灯片中找到。
针对目标网络很有可能对外部流量进行限制,或者设置WAF。
通过设置DNS流量来突破限制–dns-domain“dns服务器”,需要用户自身具有一个开放53端口的DNS服务器,通过DNS流量来获得Web应用程序中数据内容。
设置二阶注入
选项:--second-url
注入结果如果需要显示在其他页面,需要用此选项指明显示注入结果的页面,该选项后跟一个url。
选项:--second-req
用于发送到显示结果的服务器的请求文件。
指纹
默认情况下,sqlmap会自动进行DBMS指纹识别。
选项:-f或–-fingerprint
执行广泛的数据库管理系统指纹识别可以添加此选项。
选项:-b或-–banner
得到更准确的指纹识别结果可以添加此选项,就是DBMS的具体版本等信息。
枚举
枚举全部
选项:-all
不建议这样做,因为它会生成大量检索有用和无用数据的请求。
枚举DBMS的Banner信息
选项:-b或-–banner
得到更准确的指纹识别结果可以添加此选项,就是DBMS的具体版本等信息。
python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" -b --batch
banner
枚举DBMS当前用户
选项: --current-user
通过此选项,可以枚举DBMS的用户,该用户正在有效地从Web应用程序对后端DBMS执行查询。
python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --current-user --batch
user
枚举DBMS当前数据库
选项: --current-db
使用此选项,可以枚举Web应用程序连接到的数据库管理系统的数据库名称。
python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --current-db --batch
db
枚举服务器主机名
选项: --hostname
通过此选项,可以枚举数据库管理系统的主机名。
python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --hostname --batch
hostname
检测当前用户是否是数据库管理员
选项: --is-dba
可以检测当前的数据库管理系统会话用户是否是数据库管理员,也称为DBA。是
则sqlmap将返回True,反之返回False
。
python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --is-dba --batch
dba
枚举数据库管理系统用户
选项: --users
当会话用户具有对包含DBMS用户信息的系统表的读取访问权限时,可以枚举用户列表。
python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --users --batch
users
枚举并破解数据库管理系统用户的密码哈希值
选项:--passwords
当会话用户具有对有关DBMS用户密码信息的系统表的读取访问权限时,可以枚举每个数据库管理系统用户的密码哈希。sqlmap将首先枚举用户,然后为每个用户枚举不同的密码哈希。
python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --password --batch
pwd
枚举数据库管理系统用户权限
选项: --privileges
当会话用户具有对包含DBMS用户信息的系统表的读取访问权限时,可以枚举每个数据库管理系统用户的特权。通过特权,sqlmap还将向您显示哪些是数据库管理员。
可以提供选项-U
以指定要枚举特权的用户。
如果提供"CU"
用户名,它将被视为当前用户的别名,并枚举该用户的特权。
在Microsoft SQL Server上,此功能将显示每个用户是否是数据库管理员,而不是所有用户的特权列表。
python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --privileges --batch
privilege
枚举数据库管理系统用户角色
选项: --roles
当会话用户具有对包含DBMS用户信息的系统表的读取访问权限时,可以枚举每个数据库管理系统用户的角色。
可以提供选项-U
以指定要枚举特权的用户。
如果提供"CU"
用户名,它将被视为当前用户的别名,并枚举该用户的特权。
仅当DBMS是Oracle时,此功能才可用。官网是这么写的,但是,我测试mysql也是可以的。
python sqlmap.py -u "192.168.172.128/sqli-labs_1/Less-1/?id=1" --roles --batch
roles
枚举数据库管理系统的数据库
选项: --dbs
当会话用户具有对包含有关可用数据库信息的系统表的读取访问权限时,可以枚举数据库列表。
网络安全-sqlmap实战之sqlilabs-Less1 中有使用
网络安全-sqlmap实战之sqlilabs-Less3 中有使用
枚举数据库表
选项:--tables
,--exclude-sysdbs
和-D
当会话用户具有对包含有关数据库表信息的系统表的读取访问权限时,可以枚举特定数据库管理系统数据库的表列表。
如果没有使用option提供特定的数据库-D
,则sqlmap将枚举所有DBMS数据库的表。
还可以提供此选项--exclude-sysdbs
以排除所有系统数据库。
请注意,在Oracle上,必须提供TABLESPACE_NAME
而不是数据库名称。
网络安全-sqlmap实战之sqlilabs-Less1 中有使用
网络安全-sqlmap实战之sqlilabs-Less3 中有使用
枚举数据库表列
选项:--columns
,-C
,-T
和-D
当会话用户具有对包含有关数据库表信息的系统表的读取访问权限时,可以枚举特定数据库表的列列表。sqlmap还枚举每列的数据类型。
此功能取决于-T
用于指定表名称的,也可以取决于-D
指定数据库名称。如果未指定数据库名称,则使用当前数据库名称。可以提供-C
选项来指定表列名称(逗号隔开)。
网络安全-sqlmap实战之sqlilabs-Less1 中有使用
网络安全-sqlmap实战之sqlilabs-Less3 中有使用
枚举数据值
选项:–dump
配合前面的-C等使用,枚举出某些列的数据值
网络安全-sqlmap实战之sqlilabs-Less1 中有使用
网络安全-sqlmap实战之sqlilabs-Less3 中有使用
枚举schema信息
选项:--schema
和--exclude-sysdbs
可以使用此开关检索DBMS模式。模式清单将包含所有数据库,表和列,以及它们的类型。与--exclude-sysdbs
仅包含非系统数据库的部分架构结合使用,即可检索和显示。
python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" --schema --exclude-sysdbs --batch
结果
检索数据表的条目数量
选项--count
如果用户在显示所需条目之前只想知道表中的条目数,则可以使用次选项。
python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" -count -D security --batch
结果
获取数据信息
选项:–start,–stop,–first,–last
–start和–stop表示表的条目范围
python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" -D security -T users --start 1 --stop 6 --dump --batch
结果
–first 和 --last更是没什么用,没必要去记住
设置条件获取信息
选项:–where
python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" -D security -T users -C id,username --where="id>3" --dump --batch
结果
运行自定义sql语句
选项:–sql-query和–sql-shell
python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" -sql-query="select * from users where id=5" --dump --batch
结果
打开sql-shell,类似于mysql 的命令行那种,然后自己敲sql语句即可,exit;退出。
python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" -sql-shell --dump --batch
结果
暴力破解
暴力破解表名
选项: --common-tables
在某些情况下,--tables
不能用来检索数据库的表名。这些情况通常属于以下类别之一:
- 数据库管理系统是MySQL <5.0,
information_schema
不可用。 - 数据库管理系统是Microsoft Access,并且系统表
MSysObjects
不可读-默认设置。 - 会话用户对存储数据库方案的系统表没有读取特权。
使用字典去爆破,比较慢,就不展示了,可以打开看一下字典
表名字典
作为程序员也可以在起表名时遍历一下,不要使用常用表名。
暴力破解列名
开关: --common-columns
对于每个表,在某些情况下--columns
不能使用switch 来检索数据库表的列名。这些情况通常属于以下类别之一:
- 数据库管理系统是MySQL <5.0,
information_schema
不可用。 - 数据库管理系统是Microsoft Access,这种信息在系统表内部不可用。
- 会话用户对存储数据库方案的系统表没有读取特权。
列名字典
一般是下划线命名法,然后单词或单词缩写。我平时也这样命名,看来还需要加强安全意识,既可读又安全。
文件系统访问
读取文件
选项: --file-read
当后端数据库管理系统是MySQL,PostgreSQL或Microsoft SQL Server,并且会话用户具有滥用数据库特定功能和体系结构弱点所需的特权时,可以从基础文件系统中检索文件的内容。指定的文件可以是文本文件或二进制文件。sqlmap将正确处理它。
这些技术在《 Advanced SQL injection to operating system full control》白皮书中有详细介绍。
路径是绝对路径
python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" --file-read="C:\\readme.txt" --batch
上传文件
选项:--file-write
和--file-dest
当后端数据库管理系统是MySQL,PostgreSQL或Microsoft SQL Server,并且会话用户具有滥用数据库特定功能和体系结构弱点所需的特权时,可以将本地文件上载到数据库服务器的文件系统。指定的文件可以是文本文件或二进制文件。sqlmap将正确处理它。
python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" --file-write="E:\\readme.txt" --file-dest="C:\\readme.txt"
没有权限
对于没有权限的会给出提示,否则查看服务器中对应位置应该有文件。
操作系统信息
选项:--os-cmd
和--os-shell
后端数据库管理系统是MySQL、PostgreSQL、Microsoft SQL Server时,可以在数据库服务器的底层操作系统上运行任意命令,会话用户具有滥用数据库特定的功能和架构所需的权限。
在MySQL和PostgreSQL中,SqlMap的上传含有两个用户定义函数的共享库(二进制文件),sys_exec()
和sys_eval()
,然后在数据库上创建这两个函数并调用它们中的一个来执行指定的命令,用户选择是否显示标准输出。在Microsoft SQL Server上,sqlmap滥用xp_cmdshell
存储过程:如果禁用了该存储过程(默认情况下,在Microsoft SQL Server> = 2005上),则sqlmap会重新启用它。如果它不存在,则sqlmap从头开始创建它。
当用户请求标准输出时,sqlmap使用枚举SQL注入技术(blind, inband 或error-based)中的一种来检索它。反之亦然,如果不需要标准输出,则使用堆栈查询SQL注入技术来执行命令。
python sqlmap.py -u "http://192.168.172.128/sqli-labs_1/Less-1/?id=1" --os-shell
选择
绝对路径
sqlmap会上传一个php文件到服务器中,通过cmd参数进行命令的运行。
Out-of-Band状态连接:Meterpreter和friends
选项:--os-pwn
,--os-smbrelay
,--os-bof
,--priv-esc
,--msf-path
和--tmp-path
当后端数据库管理系统是MySQL,PostgreSQL或Microsoft SQL Server,会话用户具有滥用数据库特定功能和体系结构弱点的特权,可以在攻击者机器与数据库服务器基础操作系统之间建立Out-of-Band**状态TCP连接。**根据用户的选择,此通道可以是交互式命令提示符,Meterpreter会话或图形用户界面(VNC)会话。
和上面的命令差不多,也是基于上传文件的,由于博主没有给Web服务器对C盘文件上传的权限,就不做演示了。
学习路线:
这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!