1、Sqlmap性能优化
sqlmap设置持久HTTP连接
优势:长连接避免浪费重复连接的网络开销 缺点:大量的长连接占用服务器资源
sqlmap中可以设置连接为持久连接。HTTP报文中设置connection:keep-alive
但是–keep-alive这个参数和–proxy这个参数相冲突,不能在一起使用
sqlmap设置不接收HTTP Bod
- 参数 --null-connection
sqlmap中设置空连接,表示不接受HTTP当中的Body。 可以直接获得HTTP响应的大小而不用获得HTTP响应体,常用在盲注过程中。(降低网络资源的消耗)
sqlmap设置多线程
- 参数 --thread
sqlmap中设置同时发送多少个HTTP请求的多线程
一键优化
-o 添加此参数相当于同时添加下列三个优化参数
- –keep-alive
- –null-connection
- –threads=3
运行速度会很快
2、在kali中搭建Sqli-labs的流程
打开终端
1. 打开apache服务
sudo service apache2 start
访问 http://127.0.0.1,显示页面出来,即表示apache启动成功
2. Mysql配置
sudo service mysql start
mysql -uroot -p 密码为空,能链接得上mysql就ok了
-----------这里我们还是设置一个密码比较好,后面方便使用
SET PASSWORD FOR ‘root’@‘localhost’ = PASSWORD(‘新的密码’)
3. 安装sqli-labs
先输入
cd /var/www/html
再输入
git clone https://github.com/mukkul007/sqli-labs-kali2 sqli-labs
配置文件设定,终端依次输入下列语句
cd sqli-labs/sql-connections/
vi db-creds.inc
修改$dbpass为你第二步设置的密码
最后一步
访问网址http://127.0.0.1/sqli-labs/
**注意:**每次进入http://127.0.0.1/sqli-labs/,都需要先开启Apache和Mysql
虚拟机使用本机靶场
若要在Kali虚拟机上使用本机上设置好的sqlmap靶场,则需要:
3、sqlmap自定义检测参数
sqlmap设置探测等级
- 参数:–level
此参数用于指定检测级别,有1~5共5级。默认为1,表示做最少的检测,相应的,5级表示 做最多的检测。
等级2以上会探测并显示出cookie,等级3以上会探测并显示user-agent(代理)和referer(从哪个网站跳转来,用于反爬) 等信息。
下图的路径中显示的是探测和注入的信息payloads:
sqlmap设置风险等级
- 参数:–-risk
此参数用于指定风险等级,有1~3共3级。默认风险等级为1,此等级在大多数情况下对测试目标无害。
风险等级2添加了基于时间的注入测试,等级3添加了OR测试。
sqlmap指定位置注入
- sqlmap设置指定注入参数
默认情况下Sqlmap会测试所有GET参数和POST参数,当level大于等于2时会测试cookie参数, 当level大于等于3时会测试User-Agent和Referer。实际上还可以手动指定一个以逗号分隔的、 要测试的参数列表,该列表中的参数不受level限制。这就是“-p”的作用。
如果不想测试某一参数则可以使用 --skip。
Sqlmap设置URI注入位置
不是设置RUL
当注入点位于URI本身内部时,会出现一些特殊情况。除非手动指向URI路径,否则sqlmap不会对URI路径
执行任何自动测试。必须在命令行中添加星号(*)来指定这些注入点。
python sqlmap.py -u “http://targeturl/param1/value1*/param2/value2/” --banner
4、sqlmap注入参数
sqlmap强制设置DBMS
默认情况下sqlmap会自动识别探测目标web应用程序的后端数据库管理系统(DBMS),sqlmap支持 的DBMS种类
- MySQL
- Oracle
- PostgreSQL
- Microsoft SQL Server
- Microsoft Access
- Firebird
- SQLite
- Sybase
- SAP MaxDB
- DB2
可以指定数据库来进行探测
- 参数 --dbms 数据库类型
sqlmap强制设置OS系统
默认情况下sqlmap会自动探测目标web应用程序的后端操作系统,sqlmap完全支持的OS种类Linux、 Windows
- 参数 --os 系统类型
Sqlmap强制设置无效值替换
- 参数:–invalid-bignum
在sqlmap需要使原始参数值无效(例如id=13)时,它使用经典的否定(例如id=-13)。
例如:python sqlmap.py -u “http://127.0.0.1/sqli/Less-1/?id=-1 and 恶意SQL语句” --invalid-bignum --banner(这样能达到id=-1不会执行,而去执行我们写的恶意SQL语句的目的,进行SQL注入)
有了这个参数,就可以强制使用大整数值来实现相同的目标(例如id=99999999)。
python sqlmap.py -u “http://127.0.0.1/sqli/Less-1/?id=1” --invalid-bignum --banner
-
参数:–invalid-logical
有了这个参数,就可以强制使用布尔操作来实现相同的目标(例如id=13 and18=19)。 -
参数:–invalid-string
有了这个参数,就可以强制使用随机字符串来实现相同的目标(例如id=akewmc)。
Sqlmap自定义注入负载位置
在某些情况下,只有当用户提供要附加到注入负载的特定后缀时,易受攻击的参数才可被利用。当用户已经知道查询语法并希望通过直接提供注入有效负载前缀和后缀来检测和利用SQL注入时,这些选项就派上用场了。
- –prefix 设置SQL注入Payload前缀
- –suffix 设置SQL注入Payload后缀
$query = "SELECT * FROM users WHERE id=('.$_GET['id'].') LIMIT 0, 1";
(.$_GET[‘id’].这里是个变量,可通过下面的语句修改)
python sqlmap.py -u “http://ip/sqlmap/mysql/get_str_brackets.php?id=1” -p id --prefix “’)” --suffix " AND (‘abc’='abc"
这里是为了补全上面的SQL语句,-p id --prefix “’)” 为了补全上面的id,并且(’ ')进行填充,同样–suffix " AND (‘abc’='abc"是为了填充后面的变量内容和( )
举例:PAYLOAD所在路径:…\sqlmap\sqlmapproject-sqlmap-3b7dd2c\xml\payloads
$query = “SELECT * FROM users WHERE id=(‘1’) < PAYLOAD> AND (‘abc’=‘abc’) LIMIT 0, 1”;
Sqlmap设置Tamper脚本
sqlmap本身不会混淆发送的有效负载,除了单引号之间的字符串被CHAR()类似的表示形式所取代之外。sqlmap通过Tamper脚本来绕过WAF等防御措施,可以在tamper文件夹下找到所有sqlmap自带的tamper脚本。
python sqlmap.py -u “http://ip/sqlmap/mysql/get_int.php?id=1” --tamper “between.py,randomcase.py,space2comment.py” -v 3
Sqlmap设置DBMS认证
设置DBMS认证方式通过以下命令:
- –dbms-cred = username:password
python sqlmap.py -u “http://127.0.0.1/sqli/Less-3/?id=1” --dbms-cred = “root:root” --banner
5、sqlmap注入技术参数
sqlmap设置具体SQL注入技术
- 参数 --technique
此参数用于指定检测注入时所用技术。默认情况下Sqlmap会使用自己支持的全部技术进行 检测。 此参数后跟表示检测技术的大写字母,其值为B、E、U、S、T或Q,含义如下:
B:Boolean-based blind(布尔型注入)
E:Error-based(报错型注入)
U:Union query-based(可联合查询注入)
S:Stacked queries(可多语句查询注入)
T:Time-based blind(基于时间延迟注入)
Q:Inline queries(嵌套查询注入)
可以用“–technique ES”来指定使用两种检测技术。“–technique BEUSTQ”与默认情况等效。
sqlmap设置时间盲注延迟时间
- 参数:–time-sec
用此参数设置基于时间延迟注入中延时时长,默认为5秒
sqlmap设置union字段数
在进行联合查询注入时,Sqlmap会自动检测列数,范围是1到10。当level值较高时列数检测范 围的上限会扩大到50。
可以用此参数指定列数检测范围,如–union-cols 12-16就会让Sqlmap的列数检测范围变成 12到16。
sqlmap设置union字符
- 参数:–union-char
默认情况下Sqlmap进行联合查询注入时使用空字符(NULL)。但当level值较高时Sqlmap会生 成随机数用于联合查询注入。 因为有时使用空字符注入会失败而使用随机数会成功。
sqlmap设置union查询表
- 参数:–union-from
有些情况下在联合查询中必须指定一个有效和可访问的表名,否则联合查询会执行失败(一般使用系统表,因为系统表一般不会被删除修改,肯定存在)
python sqlmap.py -u “http://127.0.0.1/sqli/Less-3/?id=1” -v 3 --union-cols 6-8 --union-char 999 --union-from user
sqlmap识别指纹
探测目标指纹信息
- 参数 -f 或者–fingerprint
- 功能类似于–banner