我们在第二课直接用命令:
sqlmap.py -u http://localhost/book/admin/lyedit.php?ly_id=2 -p ly_id
得到了后台管员的用户名和密码。
其实在这里你应当奇怪的,为什么后台“book/admin/lyedit.php?ly_id=2”的链接我们能直接访问到?其实这里就存在了一个后台越权的漏洞了。有很多程序员由于粗心大意,对后台的某些页面限制不严,让普通用户就能访问到,这就是所谓的后台越权漏洞。
这节课,我们先来看一个实例,CSRF漏洞。
CSRF概念:
CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。我在这里演示一个实例,直接发送链接后让管理员自动删掉这个留言本的一条留言。
我们进入留言本的后台留言管理,右键在删除留言上点击复制链接,会得到如下所示的链接:
http://localhost/book/admin/ly_manage.php?act=del&ly_id=5
我们在留言本主页面留言,在头像哪儿输入:
</td><script>window.location.href='http://localhost/book/admin/ly_manage.php?act=del&ly_id=5</script>
我们输入的</td>是为了关闭前边的html标签。
window.location.href='http://localhost/book/admin/ly_manage.php?act=del&ly_id=5
上面 window.location.href 是调用JS让浏览器页面自动转向到删除页面。
我们提交后,等到管理员登陆后台查看留言时就会自动删除“ly_id=5”的留言了,起到了一个破坏作用。如果你做了这次测试,发现留言本不好用了,请用root、root登陆“http://localhost/phpmyadmin”,删掉test库中ly表里你提交的恶意数据。
看到现在你就会明白了,黑客不仅要会方法,编程也要会的,我调用的是JS删除了一条留言,你能调用JS改掉管理员密码吗?如果不会,业余时间多多学习JS吧。
另外,如果要学会CSRF,其中HTTP 文件头的概念,像GET、POST、COOKIE、SESSION要了解的,以及如何抓包,我在剩下的篇幅里给初级读者讲一下。
一、准备工具burpsuite,并且配置好
我们不需要网上教程那么繁琐,请直接下载pentestbox,网址:pentestbox.org。
下载后安装到某个目录,双击安装目录里的pentestbox.exe就可以了,然后在pentestbox的界面里输入burpsuite就可以。如果在有的win10机器下运行出错,请先在pentestbox的界面先输入cmd,再输入burpsuite就可以了。
burpsuite你默认配置就好了,不需要改动其它,我们只需要改动chrome或Ie浏览器的代理选项就可以了。
我们选择chrom浏览器的设置--更改代理服务器设置,点击局域网设置把本地代理服务器的设置改为127.0.0.1:8080。如果你是IE,找到工具-INTERNET属性来做修改。
为什么burpsuite我们不需要修改了呢?因为burpsuite默认就设置监听的127.0.0.1:8080。
打开burpsuite,一路next,注意下图中我点灰的地方。
当然,你在这里要顺便学习一下用burpsuite抓http的包。看我以前写的《程序开发“网络投票机”教程》这三篇文章。我下文只是顺便让你复习一下,再强调一下你可能模糊的概念。
二、明白HTTP请求里的GET和POST
你按上文的方法配置好burpsuite和浏览器代理后,我们打开“http://localhost/book/admin/admin.php”,输入用户名和密码进行抓包。你会抓到以下数据包。
你可以看到第一行就是POST /book/admin/check_login.php。
1、GET:获取一个文档,一个页面,一个图像
像上文中的 http://localhost/book/admin/admin.php 就是一个GET请求。大部分被传输到浏览器的html,images,js,css, … 都是通过GET方法发出请求的。它是获取数据的主要方法。 你在浏览器地址栏直接打开的网址都是GET请求。
2、POST:发送数据至服务器
尽管你可以通过GET方法将数据附加到url中传送给服务器,但在很多情况下使用POST发送数据给服务器更加合适。通过GET发送大量数据是不现实的,它有一定的局限性。用POST请求来发送表单数据是普遍的做法。
简单总结一句话,你浏览网页一般都是GET请求,你注册论坛呀、注册邮箱、注册头条号之类或是用微信登陆头条号一般都是POST请求,像本文登陆留言板后台也是POST请求。
再是要注意了GET请求可以跨域、POST请求不可以跨域。什么叫跨域呢?通俗地讲,像你提交到百度的数据就不能提交到搜狐去,因为是两个域名。
三、什么是COOKIE和SESSION?
1、Cookie
有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行跟踪而储存在用户本地终端上的数据。简单来讲,这东西是存贮在你电脑或手机上的,是可以清理掉的。为什么你登陆了今日头条后,不需要再登陆就是它在起作用,我们客户端是可以清理或按网站格式伪造的Cookie。
2、Session
在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
简地讲cookie和session的作用是一样的,不过一个在本地你的电脑端贮存,一个在服务器上贮存。cookie你可以随时伪造修改,session如果你没有拿到网站权限时是不可以的。
HTTP头里还有很多参数的,这里不再详解。看我以前写的《程序开发“网络投票机”教程 第一课:URL含义及HTTP请求》、《程序开发“网络投票机”教程 第二课:电脑/手机 浏览器抓包》、《程序开发“网络投票机”教程 第三课:HTTP数据包HEAD头解释》这三篇文章,你心里好有个明确的概念。