ASPX(.NET)的安全问题

在.net开发时,一些系统的bin目录会有很多dll文件,这些dll文件相当于java中的jar包,核心代码被封装成dll中,实现调用安全。

【工具】ILSpy 反编译工具

所以不论是对dll还是jar,经常需要使用反编译。目前.net和php应用的数量相似。

与ASP相似的,我们需要学会判断.net的特征,访问后缀ASPX文件时发现代码和实现的功能不相符,可以判断很有可能引用了其他文件,可能会包含dll中的代码。在ASPX文件中根据引用的名称,找到对应的dll文件再反编译,找到核心代码。【找不到的时候看看还包含了哪些文件,也看看那些文件的代码有没有实现核心功能的】

.net有一个特性,容易造成信息泄露,因为是微软用的框架,用到IIS,跟上一篇文章(asp)提到的安全问题有相关性。

例如,在.net的web.config配置中如果customerror设置为off,会暴露出敏感信息,还可能泄露源码

再例如,不论是白盒还是黑盒,容易出现未授权访问的安全问题,原因是:跟本身特性有关,该验证的地方没有进行验证。常见是登录的未授权访问,下说一下原理:
验证也就是判断用户身份,后台本身存在多个功能页面,针对这些功能页面的验证我们可以
①在每个文件里添加判断代码
②创建一个文件专门用来判断,然后每个文件都包含调用它

那么我们找未授权的思路也可得出:
①找到不含验证代码的文件
②看验证代码文件有无绕过的可能

找到验证代码:
看验证代码的验证方式,迪总的实验中,验证代码是判断用户id<=0的话弹出登录页面,尝试让id>0绕过,这里回忆一下php的cookie的超级变量$_COOKIE,它接受cookie中的信息,迪总抓包,加上cookie:userinfo=userid=1,然后发送数据包,绕过了登陆界面进入了后台。
再者,找到了验证代码可以使用上述的思路,去找不包含包含该代码的功能页。迪哥的操作中找到了某个功能页没有包含验证代码,直接访问发现不需要登陆验证。

一些不常用语言产生的漏洞(ASP)

因为版本老旧,这些安全问题不在常见,但是也许会在一些特定情况碰到,所以了解一下也是有比u要的

首先一些常见的组合,可以百度找到,举一个常见例子:
windows2003、iis、asp、access(sqlserver)针对这些技术找漏洞【注意】asp是微软用的,一般都是跟windows、iis配套

对上述的技术,如access数据库文件的后缀名一般是:asp、asa、mdb(可以被下载)
在配置powereasy属性中的应用程序这项,如果没有添加应用程序扩展名的映射,那么会被下载,如果有映射,就可以被执行。

一、MDB默认下载

思路:如果我们知道数据库的地址,可以尝试下载获取数据库文件,获取当前管理员账号密码信息
过程:如果使用上述技术搭建服务器网站,那么当管理员配置数据库的时候没有修改默认的设置信息,那么直接访问数据库文件的地址就直接下载了数据库文件,打开就看到了数据库中账户信息
默认地址可能是:c:\Intepub\wwwroot\PowerEasy\DataBase
然后应该找到后台登陆管理员账号,默认后台可能是类似于:/admin/admin_login.asp

二、ASP数据库后门植入

前文提到,如果设置配置信息有.ASP后缀名,可以被执行,那么上传木马,再用菜刀连接,就完成了一次攻击

三、中间件iis短文件探针

用于探测数据库地址或者后台地址。
由于iis存在漏洞,可以探测文件名,缺点是探出前六位

四、iis文件上传解析漏洞

在上传漏洞经常出现,但是前提是中间件是IIS。
利用了IIS的特性,可以实现任意格式上传。比方说在原文件名含“.asp”,或者路径含有“.asp”那么都可被触发解析ASP脚本,就达到了绕过上传文件限制的功能

安全测试前后端验证(挖坑)

三个功能:

一、文件上传-JS前端验证

对文件上传的后缀名进行验证,符合要求才允许上传,可以由PHP胡总和JS实现,两者的区别在于,PHP代码验证我们无法看到代码,只能进行黑盒测试;JS验证的话验证代码是可以看到的,相当于白盒测试

判断有没有JS验证:
①审查代码
②看反应时间,马上反应说明可能是JS验证,因为不涉及与后端数据进行交互

·浏览器禁用js,相当于没有过滤了就可以直接上传

二、状态回显-Ajax传递数据验证

ajax是js用来传输数据的类型,使用ajax:
请求->返回->ajax验证->结果
意义在于,如上文说到使用JS能在审查元素看到审查规则,如果使用ajax就可以把代码封装起来,之后文件包含使用即可,不会暴露代码

(回头学)

三、参数修改-购买逻辑漏洞
使用Ajax传递数据进行购物验证

1.商品价格以前端价格为准,数据接收价格后运算

抓包,修改价格;修改状态码。就是典型漏洞,实现零元购

2.商品价格以数据库对应价格为准,数据接收价格后运算

3.商品价格以数据库对应价格为准,数据只接受数量后运算

修改数量为负数,绕过

4.商品价格以数据库对应价格为准,数据只接受数量后做过滤运算

数量只能为大于或者等于1的整数

前端验证导致的密码找回漏洞:

比如:在逍遥模拟器打开某金融app,监听。要使用重置密码漏洞。

·首先注册正确的账号,抓包抓住正确的验证码回显信息,保存好

·找回密码,发送验证码(机主会收到信息)

·抓包发现验证码不正确,用刚才保留的正确信息替换,发现绕过验证,实现密码找回

判断小窍门:

看返回报文格式,比如看到有json、code、msgbox可以猜测是使用了前端接收数据处理数据验证,就需要检查一下有没有能攻击的可能

session会话劫持(挖坑)

session储存在服务器,用于身份验证。由于session有时效,会变化,因此很多时候不想cookie那样一拿到就能修改就能用,那就需要劫持会话。

如何判断是否启用session验证,审计元素或者抓包的时候,cookie那一项数据中包含 xxxSESSID就说明启用了session验证,就可以和cookie那类攻击说886了。session攻击只能劫持

cookie伪造

cookie用来保存用户登陆状态,方便浏览多个页面。如果某些网站的登陆验证机制存在逻辑漏洞,很有可能会利用cookie伪造绕过登陆验证,进行非法活动。

有些网站的逻辑是,只有登陆成功才能产生cookie,那么多个页面只需要验证cookie就可以了。换句话说我们甚至不用知道用户名和密码,对cookie动手脚就能绕过了。

黑盒测试发现漏洞:
①尝试修改验证

白盒测试发现漏洞:
①对代码进行审计,检查cookie机制。
在迪总演示的过程,某cms验证cookie逻辑上只要cookie没有赋值就跳转,而不对cookie的赋值进行验证,结果修改数据包只要简单把cookie设为 user==1 就成功登陆了后台绕过了登陆验证

来源页伪造

墨者靶场练习,以前ctf也有类似的只允许某个来源访问,如学校的ip访问。

我想,限制来源本身是为了进行访问控制,只允许规定内的资源访问。那么如果限制做的不够好,就会有人利用来源伪造来实施破坏行为,本次实验意义在于理解如何伪造,在日后安全开发要避免出现这样的疏忽。

原理:

在php中有超级变量 $_SERVER存储着浏览器的诸多信息,本次实验的“来源”信息也能从这个超级变量里找到。所里如果能修改来源可能能做到伪造。
$_SERVER[”HTTP_REFERER]

步骤很简单,bp抓包,修改来源头放包就能伪造来源。

真实使用中,设置来源验证是防止:CSRF攻击(跨站请求伪造)
csrf情景:某个网站管理员喜欢浏览其他网页,当浏览带有恶意脚本的网页,管理员的浏览器就被劫持获取一些凭据,管理网站的信息等然后跳转到网站,如果不检测来源,就会被直接访问资源了。

qq被盗号,登陆着qq浏览到带有恶意代码的网页,我们的身份信息被盗用,也就是使用了合法的来源信息去进行违法的事情。

伪造ip的话也同样道理,php接收ip有多种方式,最好绕过是
$_SERVER[‘HTTP_X_FORWARD_FOR’]
当如果获取ip方式走其他协议,就不能这么利用。比如服务器的协议检测基本没办法绕

跨站脚本攻击

xss经常出现在大家视野owasp排老前了,我自己就挨跨站搞过被盗了号,流汗….

xss主要影响的是客户端的安全,乱点小网站乱点小链接,你敢点,你就挨中招….

查阅资料,了解到如今大多数网站使用JavaScript,自学的时候我也发现了js很灵活很轻便,可以完成计算、动态页面的实现之类的,那一般来说js是针对于客户端的语言,放置在客户机上(php是服务端语言,放服务器上)js代码是可被网页引用也可以直接镶嵌在html、php文件里面的,之前做ctf题目的时候无法检查网页代码,于是我想这是不是js进行了限制,于是通过浏览器设置关闭了js,就可以审查网页代码拿到flag。因此我们知道浏览器默认开启对javascript脚本的支持。

xss类型:在我学习经历来看常见的有三

1.反射型(非持久型):构建欺骗url,点了就触发恶意代码了

2.存储型(持久型):把代码插在数据库,操作碰到那条数据就执行

3.dom型:对比上述俩需要由服务器传给用户的xss类型不同,dom型的交互发生在前台。
dom :document object model把html的标签按照父子兄弟关系建立一个树结构,简单来说dom型的xss是攻击者发送带有恶意js的url给受害者,受害者点击之后访问某个服务器,服务器返回静态的html(带有js)此时客户端的dom就改变了,并且浏览器执行恶意代码访问攻击者服务器等其他操作。

xss攻击用途:
1.拿cookie劫持会话
2.记录按键,比如输入密码,并把数据回传到攻击者电脑
3.挂黑页
4.向网页注入链接或者广告
5.立即将网页重定向到恶意网站
6.窃取用户登录凭证,盗号…比如某应用便利登录不是直径点qq就能登录了吗,盗号就是这么挨的喔。

一个有趣的绕过过滤的方法—双写关键字绕过
当网页对输入进行了过滤,比如把script给去掉,可能只会去掉一次,那么让去掉之后还有script就好了,如下:
<scrscriptipt> alert(‘咩哈哈哈哈哈哈’) </scrscriptipt>就弹窗了

那如果传入的代码被标签包着了不能执行咋办?,如下:
<input name=keyword value=”<script>alert(‘xss’)”</script>”>
此时就要想办法把前面的input闭合就好了 ,语句如下:
“> <script>alert(‘xss’)”</script>

下面是一种使用<img>标签构造脚本的方法:
<img src=ops! onerror=”alert(‘XSS’)”>
img下载图片,地址是src之后传的,,onerror是当图片或者文档加载出现错误的时候触发的事件。所以也就是说当src传的ops!是非法的东西的时候就会触发onerror事件执行代码。


补充学习:

跨站发生的一些特征,是用户输入的信息会改变页面的显示,比如一个搜索框,搜索某个关键字,结果显示包含刚输入的字符,可能就会有xss(反射型)漏洞了。

比较显著的功能就是留言板,是典型xss攻击最常用的地方

而存储型xss,在留言板类似的功能,把payload输入会存储在数据库中,只要调用数据库就会执行。

文件上传漏洞

本来文件上传是一个正常的需求功能,但是如果没有对用户上传的文件进行恰当的检测,攻击者就上传一些奇奇怪怪的东西到网站上面,比如木马、脚本啥的,就可以对着你的服务器说:拿来把你。
文件上传本身是一个严重的漏洞,webshell将这个漏洞无限放大,来说说webshell:

webshell

webshell是以ASP/PHP/JSP或者CGI等网页文件形式存在的一种命令执行环境,也称为:后门
黑客会把后门文件放在WEB服务器根目录下跟别的文件混在一起,之后可以利用自己的浏览器进行连接,访问这些后门,常见工具:蚁剑 。在之前弹webshell实验的时候用过netcat就可以往有文件上传漏洞的网站传,再通过其他方式远程执行命令,让攻击者可以获得目标主机的shell。

webshell特点:隐蔽性高,较为轻松穿过防火墙,并且访问webshell的时候不会留下系统日志,只会在网站的web日志中留下数据提交的记录。注意到,很多时候为了混淆,黑客会修改文件的时间

另外,黑客为了通过检测,通常先传小马再上大马,下面聊一聊常见🐎

最经典的🐎: <?php eval($_POST[a]); ?> // eval()把里面的字符当php代码执行

<?php eval($_POST[‘pass’]); ?>

<% execute(request(“pass”)) %>

<?php assert($_POST[‘pass’]); ?>

文件上传漏洞会出现在:
带有上传功能的地方,比如头像上传、图片上传、文档上传等,只要通过各种方式修改文件后缀以及文件类型,就可以绕过限制条件。
一般传的后缀:PHP/ASP/JSP

文件上传一般被这么用:
1.传木马、病毒的时候用来骗用户或者管理员点点点
2.传webshell,用工具连接
3.传恶意脚本,黑客直接用
4.传恶意图片,有图片马,点击图片就中了
5.上传的文件是伪装成正常后缀的恶意脚本文件,黑客利用其他漏洞比如本地文件包含漏洞执行这些恶意文件。比如,一个恶意文件bad.php文件名改成了bad.doc之后被上传到服务器,此时PHP的包含函数就能利用他们了,(include、include_once、require、require_once)

那到底是啥原因整出这些玩意儿啊?
1.文件上传时检查不严
仅在客户端检查会被抓包工具截取数据包之后改包;有些有黑名单检查,但检查的时候忽视大小写,改一个字母就饶过了;有些有白名单检查,但是忘记了别人会用%00这种截断手段。
【截断在别的文章我也讲到过,在代码审计的文章那】
截断:上传 xxx.php%00.jpg %00会被url解码变成\000是一个终止符。也就是说检查的时候看起来是jgp,传到服务器就时php了。

2.文件上传后修改文件名时处理不当

3.使用第三方插件时引入

下面举一个用工具连接上传木马的小例子

kali 自带的 工具 weevely 来连接木马

1.启动weevely

2.使用命令创建后门木马:
weevely generate pass shell.php

3.利用文件上传漏洞把生成的php文件上传

4.上传成功后,页面会回显用户上传文件的路径(?我不明白为什么会回显,是本来就会回显还是代码让页面回显)

5.根据回显路径,使用命令进行连接
weevely http://192.168.xx.xx/dvwa/hackable/uploads/shell.php pass即可连接后门,相当于使用ssh登录了目标服务器

WEB安全

从今年暑假到今天,我在课外学习了基本老师推荐的书籍
《headfirst java》、《headfirst php&mysql》、《javascript》、《html5&css3》、《图解HTTP》。尽管没能完全学到所有的精髓,但是我认为我已经对web安全有了比较好的了解

随后我搭建网站有了博客,也写了有功能的网页,再让我对数据的传输交互有了理解,对待安全问题我想规范的编码方式很重要,还有从这次爆发的漏洞看来,果然,用户输入的一切都是不可信的,哈。

阅读《漏洞利用及渗透测试基础第二版》第九章web安全基础,其中关于web的知识点大体我都已经学过了,看懂代码没什么问题,它们都曾出现在开头我说的那几本书里。那么本篇就学习一下著名的owasp(open web application security project)开放式web应用程序安全项目
经典的2010年10大安全威胁排名:

1.注入

2.跨站脚本

3.遭破坏的身份认证和会话管理

4.不安全的直接对象引用

5.跨站请求伪造

6.安全配置错误

7.不安全的加密存储

8.没有限制的url访问

9.传输层保护不足

10.未验证的重定向和转发

遭破坏的身份认证和会话管理这点上,认证(authentication)和授权(authorization)很重要,那么多电信诈骗,很多时候人们贪小便宜为了免费的礼物扫码,殊不知这一扫就把自己的身份认证给了对方,很快的账号就被窃取。

人们一般对简短的,看起来很正常的域名相对缺乏防备,他们很少产生顾虑去点击这些不明的短链接,殊不知那是黑客构造好的含带恶意脚本的url,经过工具变成的短链接。

我有一次惨痛的经历,那是疫情期间在家上网课的时候,当时我还在通过app上网课,此时看到老师演示画面班群一直闪烁,有人被盗号了一直发消息,正当我还在好奇是哪个小倒霉蛋中招的时候,打开qq一看,操,是我。说这个故事是我学习安全,没有点击连接,没有躲开画面,在毫不知情没有理由的情况我怀疑我被跨站了,也就是我可能点到了挂有木马的某些网页。所以我觉得除了不要乱点网页,也不要打开过多的网页防止被跨站。

为啥,我们被窃取的是啥,是一点连接账号密码就没了吗,不是,是一点链接我们的session被盗了,黑客用我们的身份去做坏事,就是会话劫持。

那我们知道cookie和session是有有效期的,cookie时间过了,session设置的时间到了或者关闭网页或者注销,不久销毁了session了吗?会话保持攻击,黑客会一直刷新让服务器认为客户一直在线,用下面代码可以实现:
<script>
var ul=”http://xxx.xx.com/index.php?sid=1″;
Windows.setInterval(“keepsid()”),6000);
Function keepsid()
{
Document.getElementById(“a1”).src=url+”&time=”+Math.random();
}
</script>
<iframe id =”a1″ src=””> </iframe>

[防御]:设置时间强制销毁session


那么在不安全的直接对象引用这方面,就是有些不太聪明的程序员把不应该给别人知道的对象引用直接暴露给别人,也就是DOR(Direct Object Reference)直接对象引用。用户此时只要改一下url就能直接引用对象,有时候会访问到未授权的内容。(那不就是目录跳转了吗….)(也不是,就是修改参数来跳转。)

再谈谈未验证的重定向和转发。重定向(http状态码3xx)是网络请求从一个网址转移到另一个网址。重定向的指向目的是通过用户输入的参数得到,如果没有经过验证,攻击者就可以将其他用户引导到特定的站点(坏坏的网站只能说)这些站点可能有木马,可能是钓鱼网站。未经验证的转发可能导致用户绕过验证和授权机制。
[防御]:避免使用重定向和转发;使用重定向和转发的时候要避免通过参数获得地址;如果必须要获得地址,必须经过校验,加强授权和认证。


加密编码

之前玩ctf的时候就增长了不少见识,接触到了base家族,密码学里学过的算法的使用,还有一些奇形怪状的加密方式,哈哈。

下面是一些有用的资料

1.30余种加密编码类型的密文特征分析(建议收藏)

https://mp.weixin.qq.com/s?__biz=MzAwNDcxMjI2MA==&mid=2247484455&idx=1&sn=e1b4324ddcf7d6123be30d9a5613e17b&chksm=9b26f60cac517f1a920cf3b73b3212a645aeef78882c47957b9f3c2135cb7ce051c73fe77bb2&mpshare=1&scene=23&srcid=1111auAYWmr1N0NAs9Wp2hGz&sharer_sharetime=1605145141579&sharer_shareid=5051b3eddbbe2cb698aedf9452370026#rd

2.CTF中常见密码题解密网站总结(建议收藏)

https://blog.csdn.net/qq_41638851/article/details/100526839

3.CTF密码学常见加密解密总结(建议收藏)

https://blog.csdn.net/qq_40837276/article/details/83080460

做ctf的时候我可算是费劲脑子找了很多文章看特征了,印象最深还是那道emoji表情加密的题目,怎么都跑不出来,那种答案近在咫尺却拿不到的感觉十分难受。

借鉴迪哥的文档

密码存储加密:

MD5 SHA1 NTLM AES DES RC4

MD5值是32或16位位由数字”0-9″和字母”a-f”所组成的字符串 //多用在数据库加密

SHA1这种加密的密文特征跟MD5差不多,只不过位数是40

NTLM这种加密是Windows的哈希密码,标准通讯安全协议

AES,DES,RC4这些都是非对称性加密算法,引入密钥,密文特征与Base64类似

传输数据编码:

BASE64 URL HEX ASCII

BASE64值是由数字”0-9″和字母”a-f”所组成的字符串,大小写敏感,结尾通常有符号=

URL编码是由数字”0-9″和字母”a-f”所组成的字符串,大小写敏感,通常以%数字字母间隔

HEX编码是计算机中数据的一种表示方法,将数据进行十六进制转换,它由0-9,A-F,组成

ASCII编码是将128个字符进行进制数来表示,常见ASCII码表大小规则:0~9<A~Z<a~z

识别算法编码类型:
1、看密文位数
2、看密文的特征(数字,字母,大小写,符号等)
3、看当前密文存在的地方(Web,数据库,操作系统等应用)

有些加密是不可逆的,比如MD5,我们知道他的加密方式,但是不能根据密文倒退明文,但是因为每个字符的md5是固定的,所以md5是可以被破解的。破解的方法就是用碰撞法尝试解密。

当遇到加密方式是md5加盐类型的,网上找一下资料看一下salt藏在哪里,如果找不到就去翻数据库里跟salt相关的。
在cmd5.com里输入md5:salt