什么是web,新手如何入门?

阅读本文需要的知识储备

  • 了解PHP语法
  • 了解Mysql数据库

什么是漏洞?漏洞会有什么危害?

暑假里小明(ctfer)今天去找小红玩耍,却发现刚高考完的小红居然在家自学PHP!沉溺于码代码的小红根本无暇搭理小明,为了搭讪小明无奈凑上前去,在屏幕上看到了如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$link = mysql_connect("ip", "username", "password"); //链接数据库
mysql_query('use login_base'); //选择数据库
header("Content-type:text/html;charset=utf-8"); //设置显示文字编码
if (isset($_POST["sub"])) {
$username = $_POST["username"];
$password = $_POST["password"]; //获取表单数据
if ($username == ""|| $password == "") { //name和password不能为空
header('Refresh:3;url=index.html');
echo '请填写完整数据';
}
$sql = "select * from login where username= '{$username}' and password = '{$password}' " ;
$res = mysql_query($sql);
$result = mysql_fetch_assoc($res);
if (!$result) { //判断是否正确
header('Refresh:3;url=index.html');
echo '登陆失败';
} else {
header('Refresh:3;url=index.html');
echo '登陆成功';
}
}
mysql_close(); //关闭数据库
?>

小红看着自己代码,志得意满的将自己的代码放到服务器上运行。
2.png
正准备输入密码时,却听见小明大喊一声,“慢着!你这样我不知道密码都能登录”只见小明一番操作,在小红怀疑的目光下,小明果真成功登录了。
test
test
小红顿生疑惑:“这是为什么呀,我密码强度那么高(真正密码为Aa12easd2@1),为什么你还能成功登录?”

小明嘿嘿一笑:“因为你的代码里存在着sql注入漏洞!你看你代码第13行的sql语句,你完全相信了用户的输入,没有对一些操作字符,如#'进行转义,所以服务器误把用户的输入当成命令来执行了。像我刚才输入的账号和密码传输到服务器后就变成了$sql = "select * from login where username= 'admin' or 1=1 #' and password =1,我输入的#就变成了mysql中的注释符号,导致其后面的语句没有意义,而or就变成了逻辑或,这样任何东西与1=1(永真)进行逻辑或,永远是正确的。所以服务器认为我输入的账号密码正确了。

小红看向小明的眼神顿时充满了崇拜:“那么你能不能教教我怎么利用这种漏洞?”

小明心花怒放:“当然没有问题,其实这只是最常见的一种漏洞,其它漏洞还有很多很多。但是想要掌握它们,你要学一些技能,才能够很好的利用他们,这些技能有:

1.熟知网络组成及相关网络协议(HTTP等)
2.了解前端语言(html+css+js)
3.python基础语法+requests,re等库的使用。我们要用python写脚本进行攻击的呀!
4.熟知后端语言(主要php,次要Java)

“哇,看起来要学好多东西,可是我还什么都不会呢,我该从何学起呀?”小红疑惑道。

“先把C语言基础打好,了解美丽的编程世界。之后推荐阅读《Web安全深度剖析》,《网络是怎么链接的》,这两本书能帮你建立一个web知识体系和网络体系,对以后的学习很有好处你先学这些,学完以后随时找我!”,小明潇洒的摆了摆手。
“哇,那太好了!”小红说着依偎在了小明怀中,从此他们幸福的走在了一起。

test

故事中的网页,可以访问http://desperadoccy.club:39001/login进行尝试