我们先准备一个靶机,我这里拿经典的SQL大观园靶机
我们再url后面传参http://192.168.98.100/sqli-labs/Less-1/?id=1
接下来我们用此url进行SQLmap的教学http://192.168.98.100/sqli-labs/Less-1/?id=1
一、SQLmap基础操作
1.判断是否存在注入
假设目标注入点是http://192.168.98.100/sqli-labs/Less-1/?id=1,判断具是否存在注入的命令如下所示.
sqlmap.py -u http://192.168.98.100/sqli-labs/Less-1/?id=1
出现如下信息,显示存在注入
当注入点后面的绒大于等于两个时,需要加双引号,如下所
不。
sqlmap.py -u “[http://192.168.98.100/sqli-labs/Less-1/?id=1&uid=2”](http://192.168.98.100/sqli-labs/Less-1/id=1&uid=2 “http://192.168.98.100/sqli-labs/Less-1/id=1&uid=2"”)
可以看到,运行完判断是否存在注入的语句后,"爆出"一大段代码,下面来分析代码反馈给我们的信息。这里有三处需要选择的地方:第一处的意思为检测到数据 库可能是MySQL,是否需要学随检测其他数据库;第二处的意思是在"level riski"的情况下,是否使用MySQL对应的所有Payload进行检测;第三处的意思是参 数ID存在漏洞,是否要继续检测其他参数,一般默认按回车键即可
2、判断文本中的请求是否存在注入
从文件中加载HTTP请求,SQLMap可以从一个文本文件中获取HTTP请求,这样就可以不设置其他参数(如cookie、POST数据等),txt文件中的内容为Web数据包
判断是否存在注入的命令如下所示,运行后的结果如图3-6所示,-r一般在存 在cookie注入时使用。
sqlmap.py -r desktop/1 .txt
3.查询当前用户下的所有数据库
确定网站存在注入后,用于查询当前用户下的所有数据库,如果当前用户有权限读取包含所有数据库列表信息的表,使用该命令就可以列出所有数据库,如图
sqlmap.py -u http://192.168.98.100/sqli-labs/Less-1/?id=1 --dbs
查询出了17个数据库及所有数据库的库名。当继续注入时 --dbs缩写成-Dxxx,其意思是在XXX数据库中继续查询其他数据
4 .获取教据库中的表名
该命令的作用是查询完数据库后,查询指定数据库中所有的表名,如下所示.
如果在该命令中不加入-D参教来指定某一具体的数据库,那么SQLM叩会列出教据库中所有库的表,如图
sqlmap.py -u http://192.168.98.100/sqli-labs/Less-1/?id=1 -D 2web --tables
可以看到2web数据库中拥有的1个表名。当继续注入时,–tables缩写成-T,意思是在某表中继续查询。
5、 获取表中的字段名
该命令的作用是查询完表名后,查询该表中所有的字段名,如下所示。运行该命令的结果
sqlmap.py -u http://192.168.98.100/sqli-labs/Less-1/?id=1 -D 2web -T article --columns
可以看到在2web数据库中的article表中一共有4个字段。在后 续的注入中,–columns缩写成-C。
6、获取字段内容
该命令是查询完字段名之后,获取该字段中具体的数据信息,如下所示。
sqlmap.py -u http://192.168.98.100/sqli