[第一章 web入门]常见的搜集:
dirsearch或者扫描一下,扫描出几个文件。dirsearch扫描命令:
./dirsearch -u 网址 -e *
扫出来结果为:
访问robots.txt得到目的网址
继续访问,得到一部分flag
访问index.php~,得到一部分flag
访问/.index.php.swp,把该文件下载下来
在kali种使用命令 vim r 文件名 进行恢复
发现第三部分flag
[第一章 web入门]粗心的小李
题目提示说是git,应该是git源码泄露,使用Githack下载下来即可
命令是
python2 /root/桌面/GitHack/GitHack.py http://aa50e77c-62f5-4825-8278-d04fa727b305.node4.buuoj.cn/.git
下载下来后打开即可找到flag
[第一章 web入门]SQL注入
是一道简单的sql注入题,单引号包裹,一共有3列
查看回显点
查看当前数据库名
查询数据库中的表
查询fl4g表的列名
查询字段数据
[第一章 web入门]SQL注入2
这道题考察的是报错注入,使用的xpath报错注入。其中还过滤了select,不过使用大写的即可绕过。最好在url后面加上**?tips=1**。会有提示,这样容易做点。
后面的和语句和前面一题的基本上都一样,不再重复,最后flag为
[第一章 web入门]afr_1
这道题考察是文件读取,主要是利用了php伪协议的知识
php伪协议详细链接
https://www.cnblogs.com/zzjdbk/p/13030717.html
利用伪协议中的filter进行读取,并且读取的是base64编码后的内容,因为直接读取的话会直接执行其中的php代码,没有回显
读取的payload=php://filter/convert.base64-encode/resource=flag
得到一串base64编码
解码得到flag
[第一章 web入门]afr_2
这道题考察的是目录穿越漏洞,使用../
来进行目录穿越,题目的源码有一个img目录,尝试访问该目录
发现可以正常访问,访问后进行目录穿越
看到flag,下载下来,拿到flag
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/05a1fbc4227fbc749c30ab4d1da0e7e0.png
[第一章 web入门]afr_3
给出一个输入框
随机输入执行后,跳转到另一个页面
点击article,继续跳转
看到有get传参,尝试目录跳转
尝试读取flag,提示没有权限
进行fuzz一下,发现能读取其中一个文件的内容,该文件存放当前系统执行命令
看提示说后台运行的应该是py的web服务器,尝试读取该文件
payload:name=../../../../../proc/self/cwd/server.py
原理是使用proc指定self代表当前进程,然后cwd指向运行的文server.py。
看到运行的应该是flask框架,发现运行了key.py和flag.py文件,并且参数n1code存在ssti
尝试读取这两个文件,读取flag.py文件,发现没有权限
读取key.py文件,给出了key的值
下面使用flask_session_cookie_manager3生成payload,由于还要安装具体的工具,这里不再演示。
最后伪造的cooki为:
.eJwdikEKgCAQAL8SXlYvQl2CviKxbGoRmCtZhxD_nnUbZqaI2Ft2XkyiFACNaAPljNjoOBnRDHPDfC-_961IZcb-k3vcr3_cAi8UWjLAGWadOPkowdLVrYE2nR5Q-vTkpKpV1BcrHygP.YD97iA.kUHfV05dXGFmHNS5bumL3yu4J2E
不知道为什么打过去后没反应0…
[第二章 web进阶]SSRF Training
是一道 代码审计的题
<?php
highlight_file(__FILE__);
function check_inner_ip($url)
{
$match_result=preg_match('/^(http|https)?:\/\/.*(\/)?.*$/',$url);
if (!$match_result)
{
die('url fomat error');
}
try
{
$url_parse=parse_url($url);
}
catch(Exception $e)
{
die('url fomat error');
return false;
}
$hostname=$url_parse['host'];
$ip=gethostbyname($hostname);
$int_ip=ip2long($ip);
return ip2long('127.0.0.0')>>24 == $int_ip>>24 || ip2long('10.0.0.0')>>24 == $int_ip>>24 || ip2long('172.16.0.0')>>20 == $int_ip>>20 || ip2long('192.168.0.0')>>16 == $int_ip>>16;
}
function safe_request_url($url)
{
if (check_inner_ip($url))
{
echo $url.' is inner ip';
}
else
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$output = curl_exec($ch);
$result_info = curl_getinfo($ch);
if ($result_info['redirect_url'])
{
safe_request_url($result_info['redirect_url']);
}
curl_close($ch);
var_dump($output);
}
}
$url = $_GET['url'];
if(!empty($url)){
safe_request_url($url);
}
?>
依次看就行,涉及到的几个函数如下
wp里给出的payload=http://a:@127.0.0.1:80@baidu.com
这里check_inner_ip函数会把baidu.com解析为host。从而绕过该函数的判断。但是curl函数则会把127.0.0.1当作要请求资源的url。这种url格式是存在的,只要用于http basic中
最后得到flag