web21:【自定义迭代器】
先抓个包:发现authorization(授权)后面的basic认证很奇怪,用base64解码看看就是输入的用户名和密码
返回包里出现乱码,但可以看到admin,猜测用户名就叫admin
知道了爆破登录的形式是xxx:xxx 可以用自定义迭代器自己构造出payload的形式
爆破点就是登录(即用户名和密码)
解码xxx:xxx这个形式由3部分构成,所以把爆破构造成三部分
加上flag格式
因为授权 的是base64编码,所以密码也要用base64加密,又因为base64加密后末尾自带一个等号,所以不勾选加密=选项,否则可能造成读取不正确——>最后爆破……………………
basic认证:
1.Basic认证是一种较为简单的HTTP认证方式,客户端通过明文(base64编码格式)传输用户名和密码到服务端进行认证,通常需要配合HTTPS来保证信息传输的安全。
2.basic认证认证过程:HTTP协议定义了基本认证过程以允许HTTP服务器对WEB浏览器进行用户身份证的方法,当一个客户端向HTTP服务 器进行数据请求时,如果客户端未被认证,则HTTP服务器将通过基本认证过程对客户端的用户名及密码进行验证,以决定用户是否合法。
客户端在接收到HTTP服务器的身份认证要求后,会提示用户输入用户名及密码,然后将用户名及密码以BASE64加密,加密后的密文将附加于请求信息中,客户端将用户名和密码用冒号合并,并将合并后的字符串用BASE64加密为密文
HTTP服务器在每次收到请求包后,根据协议取得客户端附加的用户信息(BASE64加密的用户名和密码),解开请求包,对用户名及密码进行验证,如果用户名及密码正确,则根据客户端请求,返回客户端所需要的数据;否则,返回错误代码或重新要求客户端提供用户名及密码。
authorization(授权):
实现授权的方式有:cookie、session、token、OAuth
web22:【子域名爆破】
根据题目提示,爆破ctf.show这个子域名
https://phpinfo.me/domain:子域名查询网站
(省略尝试步骤) 点开第一个链接,看到标签上有flag
web23:
ubstr(string string, int a, int b):截取从数字a+1开始,截取b个字符intval()函数:获取变量的整数值
即变量经过md5加密后要满足第2位与第15位相同和第18位相同第2位+第15位+第18位/第2位=第32位 整数值相等所以之后理论就是构造满足上面条件的脚本,运行就可以得出token,网上找了一个,运行出来时3j
web24:
当随机数种子是确定的时候,用mr_rand()得到的随机数也是确定的,取整后得到的数作为变量r传入就好
用get方式传一下参数就可以得到flag
web26:【弱密码】
打开,发现以下界面,先尝试安装
按照提示输入登录信息,点击开始安装没有反应,抓个包看看,发生错误,爆破密码试试
随便导入一个弱密码字典,爆破,查看返回长度最与众不同的返回包,就可以得到flag
web27:【日期爆破】
尝试了再火狐抓包了好几次,都没抓到………………待续
命令执行:
web29:【字符绕过】
1.利用 preg_match(),我们可以完成字符串的规则匹配。preg_match() 函数用于进行正则表达式匹配,成功返回 1(匹配一次,此函数在第一次匹配后将会停止搜索) ,否则返回 0(即没有匹配) 。
2.正则表达式是用来处理字符串的规则
- 只能处理字符串
- 它是一个规则:可以验证字符串是否符合某个规则(test),也可以把字符串中符合规则的内容捕获到(exec/match)
先把flag.php文件复制到1.txt中,再打开1.txt即可打开得到文件里面的内容,因为flag被过滤,所以用?代替flag中一个字母,再打开1.txt文件【不知道什么原因,用cat打开文件就是不行????】
cp 文件1 文件2 (把位于文件1位置的文件复制到文件2中去)
system('ls'):列出目录内文件
序号 | 通配符 | 含义 |
1 | * | 代表任意数个字符 |
2 | ? | 代表任意单个字符 |
3 | [abc] | 代表可以匹配 a、b、c 的任意一个 |
4 | [a-z] | 代表可以匹配从 a - z 范围内的任意一个 |
web30:【系统命令绕过】
1.PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()
1)不同点:system() 输出并返回最后一行shell结果。
exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。
passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
2)相同点:都可以获得命令执行的状态码
2.查看文件内容可以使用cat、tac、nl这三个命令
cat:
1.1)cat filename 直接查看文件内容
1.2)cat -n filename 列出行号,空白行也会有行号
1.3)cat filename1.xxx filename2.xxx>filename3.xxx 将filename1和filename2合并为filename3,将多个文件夹合并为一个文件夹
2)tac:tac filename 反向查看文件内容,即“由最后一行到第一行反向在屏幕上显示出来
nl:
3.1)nl filename 除去空白行列出行号打印
用passthru('ls')列出表中所有文件
???用闭合代替system函数——不行;用passthru()代替system函数还是不行;用问号代替flag.php部分或者全部字符都不行
反引号:作用相当于system,但是不会输出任何结果,所以前面要加echo
web31:【空格绕过】
1.PHP print_r方法可以把变量打印显示,使变量易于理解。如果变量是string,integer或float,将打印变量值本身,如果变量是array,将会按照一定格式显示键和元素。
2.scandir()会扫描参数dir指定的目录文件并返回指定目录中的文件和目录的数组。
3.dirname(_FILE_)
php中定义了一个很有用的常数,即:_file_这个内定常数是所在php程序文件的完整路径(路径+文件名)。即使这个文件被其他文件引用(include或require),__file__始终是它所在文件的完整路径,而不是引用它的那个文件完整路径。
4.eg:当前文件在是放在(d:\www\)下,文件名是test.php
<?php
echo __FILE__ ; // 取得当前文件的绝对地址,结果:D:\www\test.php
echo dirname(__FILE__); // 取得当前文件所在的绝对目录,结果:D:\www\
echo dirname(dirname(__FILE__)); //取得当前文件的上一层目录名
?>
5.php里面空格的正则绕过:%09
6.正则表达式:使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
相对于上一题,多过滤了cat sort shell 点号 空格 单引号
web32:
相对上一题,多过滤了反引号,分号,echo,括号!!!
x先让参数1逃逸,将1包含近参数c中
注:写?c=include%0a$_GET[1]?>&1=flag.php不能得到flag,因为flag.php只是包含到变量c中,但是因为没有分号分隔且没有输出flag的变量,造成无法输出变量????,所以用文件包含来做
hackbar里面有一个文件包含插件LFI
执行出来是一行base64编码,解码出来就可以得到flag