信息收集
1-2:查看源代码
3:bp抓包
4:robots.txt(这个文件里会写有网站管理者不想让爬虫的页面或其他)
5:网站源代码泄露index.phps
6:同样也是源码泄露,(拿到以后还得访问放flag的url)###可跑脚本找是哪个源代码泄露
7:.git泄露
git其中有一个目录.git,是个类似于备份目录,我们使用git的所有被追踪的操作和被操作的文件都会被记录
如果没有配置好导致.git被上线,导致可以访问.git获取源代码,那就可以白盒审计,如果获得敏感信息则直接可以获取服务器权限。
8:.svn泄露
svn是源代码管理工具,使用svn管理本地源代码时会生成一个.svn文件,如果管理员直接复制粘贴源代码没有导出,则会造成.svn泄露
9:.swp泄露
原理:在linux生产环境上使用vim或者vi或产生一个以.swp为后缀的文件,例如修改index.php文件就会生成一个index.php.swp文件(同样也属于源码泄露)####可用脚本跑
10:cookie
11:需要用nslookup命令-query=any (host)来查询域名的指定解析类型的解析记录
12:找到登录页面,网站存在敏感信息可直接获取管理员密码
13:网页最下有可下载文件里面有敏感信息以及后台网站地址
14:网站默认配置的问题,目录扫描加信息收集
15:找到登录页面看到能忘记密码重新修改但是需要管理员设置的地址,通过管理员遗留的各种信息找到比如qq邮箱,通过qq查询qq邮箱找到是哪里的
16:考察php探针,最后在phpinfo中找到flag
php探针是用php语言编写的一个程序,可以用来查看服务器的状态,比如服务器操作系统信息,服务器CPU、内存和硬盘的使用状况,php版本和组件信息,数据库版本信息,实时网速等。可以非常方便地了解服务器的运行状态
三款常用的探针:
雅黑php探针:url/tz.php
x prober:url/x.php
upupw php:url/u.php
可将这些写入目录扫描使用的字典里,可以跟方便的扫东西
17:dirsearch扫目录能扫到备份文件
18:考察简单js,可用开发者模式控制台直接执行js语句或者引导他的条件让他通过判断给出flag
19:查看源代码有PHP语句,可直接获取账户密码
20:还是备份文件下载,下载后用二进制软件解码即可
爆破
21:直接bp抓包跑字典,需base64加密
22:可用工具跑也可用浏览器找还可以用网上做好的域名查找去找
23:此题需跑脚本已经附上自写脚本
最后跑出来六个答案一个一个尝试得到答案为3j
import hashlib
m = "0123456789qwertyuiopasdfghjklzxcvbnm"
# 这串英文就是24个英文字母
for i in m:
for a in m:
md5 = hashlib.md5()
# 构造一个hashlib对象
str_1 = str(i) + str(a)
# 构造payload
md5.update(str_1.encode('utf-8'))
# 指定位utf-8加密方式
b = md5.hexdigest()
# MD5加密
if b[1:2] == b[14:15] and b[14:15] == b[17:18]:
print(str_1)
# 输出答案
24:所以直接把它设置的复制一下拿到php在线运行网站跑一下就能得到
这一题很像是版本漏洞,通过看提示从php4.2.0开始就不用mt_scrand(seed)来播种,会自动播种,如果设置了mt_scrand(seed)并且seed有值,那就会生成伪随机数(俗称假的随机数),生成的数字就会固定。
25:这一题和上一题不一样,需要用工具跑(工具:php_mt_seed)
这里有和24题一样的漏洞,使用了mt_srand()播种就会生成特定的随机值,这里我们需要传入同样的随机值让rand的变量为零才能进入if
虽然说使用mt_rand()会生成特定的数,但是每次的使用会不一样
例如:第一次使用mt_rand()会生成123456但第二次使用mt_rand()会生成456789,但是无论刷新多少次他们都不会变
这里还需要我们传入cookie里的token值需要弱等于两个随机值相加(每一次使用,mt_rand()生成的都会不一样,本来我还想直接bp抓包爆破来着,但是显然不可行)
####这里使用工具怎么跑出来的不清楚原理,有些许复杂
这里跑出来的是mt_srand('种子')的种子,把他拿到php在线执行中去跑,直到第一次使用mt_rand()等于784681645(每个人都不一样)
例如这样:
26:直接暴力破解密码即可
27:这一题我直接用万能的bp做的
首先呢,他会验证这中间部分是否日期,如果长度或者大小都不正确的话,会直接弹窗且不发包,这里我直接用bp爆破模式添加了三个放payload的位置
这里是三个payload
28:直接bp抓包爆破,看状态码,返回200的就是存在目录,就会直接给flag
命令执行
29:有很多种方法可以使用内联法例如system('cat `ls`')或者像它提示的一样echo `nl fl""ag.php`
nl和cat的区别就是nl会列出文件内容并且带有行号
30:这里与29题原理相同只不过多禁用了一个system和php####请通过29题举一反三
31:这一题有多种解法看自身理解,答案不唯一
get嵌套
利用了eval()函数再写了一个$_GET['s']来接受变量,这样可以完全绕过所有验证
最后payload:c=eval($_GET['s']);&s=system('cat flag.php')
passthru()虽然system被禁用了但是还有很多可以调用系统命令的函数
例如:exec,shell_exec(),popen()之类的,可自行尝试
pyload:
c=passthru("c\at\$IFS\$1fla*");
最后还可以使用无参数rce,就像给的提示一样
32:这一题还是一样多种解法这里演示两种
第一种通过include包含文件
payload:
c=include$_GET["a"]?>&a=data://text/plain,<?php%20eval(system("cat%20flag.php"));?>
这个符号?>是应为防护里过滤了;符号,所以我们直接将后面的代码全部不要了直接闭合
例如:
<?php include$_GET["a"]?>preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c));?>
a后面使用的是伪协议也可以使用php://filter/read=convert.base64-encode/resource=flag.php
其他的伪协议也可以使用
第二种利用系统的日志文件写入代码然后访问利用(!!!这里的前提是可以访问到日志)
payload:
c=include$_GET["a"]?>&a=../../../../var/log/nginx/access.log
先随便刷新然后写入代码让日志文件记住
然后再刷新再写入我们包含日志文件的代码
bp抓包在user—agent写入代码
原理:日志文件会自动收集user—agent的信息,然后通过文件包含include命令来引用日志文件。
33-36:同样还是使用文件包含就能过,($_GET[参数],这里的参数可以是数字或者字母带小飘或者不带小飘,例如:'a'和a)
37-39:这一题用伪协议随便过(简单的文件包含)
例如:data://text/plain;base64,base64加密后的命令
如果传入参数后会有自动添加点东西可用//注释掉###如果有影响才会去注释它
例如:?c=data://text/palin,<?php%20eval(system(%27cat%20`ls`%27));?>//