赛后第二阶段总结

一开始还在纠结要不要写这个wp,想了想,错误总归是要面对的。这次第二阶段我有很多解法,按我当时的思路写一份总结。

希望能提供到帮助,如有错误的地方,还麻烦大佬帮忙斧正。

 

第二阶段总共 3大题 每题5小题 

 

一.代码审计

1x01: 第一题 记得只给了一个输入框   

搭一题相似的环境,做个演示

maxlength =1  结果长度肯定是2位数,所以这里修改maxlength的值 1 为 2 即可 获得flag

  

验证既可疑弹出, 

原题:给了口令,口令输入位数发现缺少。更改maxlength 大小  输入口令 获取FLAG

 

 

 

 

 

1x02

考点是伪造IP,这里我写了俩行代码 复现当时题目

 

伪造思路俩个点

1.X-FORWARDED-FOR:10.10.10.10

2.client-ip:10.10.10.10  写了个python 脚本 做演示     

 

其实用burp 就可以直接解 

 

 

 

 

 

1x03 md5 碰撞

主要考查PHP的弱性

 

这里可以参考 这份代码,省赛中题目 考察的是md5  其实跟这里的差距不是很大

1.name != password  

2.sha(name) === sha(password) //这里的省赛 大概是md5(name)===md5(password)   

因为在PHP中  sha 和 md5 函数 没法对数组进行处理, 导致返回false    

所以 当 name[]=1 password[]=b     name != password 成立

在sha 对 name[]=1 和password[]=b 处理时  返回结果都为fasle    

sha(name) === sha(password)   就变成了 fasle =fasle    成立!  达到了绕过效果 获取flag

 

 

 

 

1x04   也是md5 对比,我记得是一题 0e 题  

 

漏洞原因:PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0

所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0
 
(也就是说,我提交的 字符串 经过md5 加密后 以0e 开头 )
  

大概思路,以我下面所演示代码为例

 可以看到 $md51 的结果

 因为 代码中给了一个 QNKCDZO  其中有一行写了 a !=QNKCDZO

所以写个python 脚本 跑 0e 开头的字符串   ,当然也可以百度找一个

编程不精 写了个简易的

 

 

 

 

 

 

 

 

 

1x05   记得是GET 和 POST 的值相同 

手写一份当时的大概环境,仅供参考

   

根据代码分析,首先 a 不为空  当 a=b 即可弹出 flag

 

a 接收 为get 提交  b接收 为post 提交  比赛的时候有一个hackbar的插件  可以利用这个插件来做

 

 

即可获得flag

 

 

 

 

二、恶意代码分析

2x01  找到木马,可以直接下载压缩包,得到网站源码, 找到木马的话,就比较简单了,

这里提供,可以先根据文件大小,文件日期进行分析,然后查看文件内容,是否含有敏感函数。

木马利用方式的还原,我只记得最简形式了,赛题的木马是自定义写了一个函数的。利用方法,和我演示相同

 

其实赛题的木马,还原为最简形式,应该就是这种了

第一题找到木马,并截图木马的文件名 思路就到这里

 

 

0x02  查看当前用户权限

2.木马利用方式 ,这里需要绕过,因为在执行命令的时候,可以分析到,他过滤了很多常用的函数,这里给俩种绕过方法

1. passthru 函数 

2. 可以试一下popen 当然这种函数还有很多 

 

 

0x03 记得是找木马文件名

 已经可以执行系统命令 所以找木马 很简单了, 我这里windows 用dir 演示   省赛是linux  ls 即可  

 

 

 

 

 

0x04  查看木马文件内容

就不做演示了这里 跟上个步骤差不多的

这里  cat  即可    其实在比赛有个坑, 因为你cat 到源码之后,页面是为空的,因为你的代码被注释掉了

右键源码即可 查看到源码  其中的源码包含flag

 

 

 

0x05  根据木马的文件内容,进行解密。

  写个python 就可以解

 我们还手算排列 核对了一遍 

 

 

 

 

 

三、web渗透,其实是一道上传题,最后含了一道XXE

说一下思路把,代码太多了,我就没在本地写了

 

3x01  JS 绕过

这里我给3 种方法

1.自己构造HTML表单进行上传

2.burp 上传截包 修改 文件后缀 为php

3.禁止Javascript    得到flag1     

都可以绕过

 

 

3x02  黑名单绕过

思路是 php 大小写 ,php3 php4 php5 phtml 进行绕过  

上传phtml 得到 flag2  获取 flag3 提示      vi/vim编辑器, 常用这种编辑器的 会有 .swp .swo 这种备份排序  .swn

这里用经常用kali 写代码的人  就知道了      

 z

 

3x03  flag3 得到为 来自flag2的提示,直接GET  访问 upload.php.swp 即可

 

 

3x04 给了源码  第四题可以列为 代码审计题了, 因为在审计代码的时候,发现代码存在逻辑问题

1.代码首先进行了 move_upload  上传

2.取上传文件名 带进 黑名单进行验证  

3.当验证存在的时候,进行unlink 删除

4.获取flag 条件, 在代码的开头 判断当前目录下 是否存在test.php

所以也就是说,我们只要写一个php 在上传的时候  在unlink 之前 访问到 即可 拿到flag

这题方法还是挺多的,我写个方法1 仅供参考

php 内容为 <?php file_put_contents('../test.php','ok')l?>   

 上传该文件, 可以直接写个html 一直刷新访问 (一个location 的事情) 用burp的 intruder 一直上传即可

unlink 上传的文件 文件名 ,上传的文件会被删除,但是上传的文件替我生成了新的test文件,

这样会在 upload 同目录下 生成一个test.php 访问upload.php 判断test.php 存在 获取flag4  得到新的提示 这里会给一个XXE模版 

 

3x05 XXE 读 C盘下的flag

这里给一段payload

<?xml version="1.0"?>
<!DOCTYPE ANY [
<!ENTITY content SYSTEM "file:///c:/flag.txt">
]> <note>
<name>&content;</name>
</note>

本地写了个环境,做测试

回显示大概这样

 

 有什么不对的地方,还请各位大佬斧正。 

 

posted @ 2019-03-28 15:53  echo_d  阅读(175)  评论(0)    收藏  举报