今天老师讲了很多但自己可能很多都没学习过所以很多地方不能理解,所以只能通过做题来了解每个工具及函数的用法,就先把今天学到的先记下。
web的基础知识
http协议
客户端request请求消息内容:大致由请求行、请求头部、空行和请求数据四个部分组成。
http请求消息Response
服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息;HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
robots协议
Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。
如果想仔细了解可以看一下这篇文章robot协议
Cookie
Cookie 可以翻译为“小甜品,小饼干” ,Cookie 在网络系统中几乎无处不在,当我们浏览以前访问过的网站时,网页中可能会出现 :你好 XXX,这会让我们感觉很亲切,就好像吃了一个小甜品一样。这其实是通过访问主机中的一个文件来实现的,这个文件就是 Cookie。在 Internet 中,Cookie 实际上是指小量信息,是由 Web 服务器创建的,将信息存储在用户计算机上的文件。一般网络用户习惯用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 Session 跟踪而存储在用户本地终端上的数据,而这些数据通常会经过加密处理.
X-Forwarded-For
Referer
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
今天在bugku上做了和这个相关的一道题:你从哪里来?
打开网页看到如下界面
查看源代码也没看出啥,从给出的信息感觉可能和Referer相关。所以先抓一下包。
添加好后点击GO得到flag
还有在攻防世界的一道题:disabled_button
看到题目感觉会和前端有点联系。
打开页面发现按钮按不动所以猜想可能是写入了什么东西使按钮不能点击,只要找到删去就行,因为题目是disabled_button而元素里也刚好有disabled,尝试删去,点击按钮然后得到flag。
今天在做题中遇到了这一个函数,然后就搜了一下什么意思。
这是题目中出现的,按如下方式修改可以获得flag
因为num不能为数字或数字字符串但num又要等于1,所以只能采用如上方式构造。
PHP代码审计
今天在攻防世界中做了一道题:simple_php
题目内容如下
在做这道题之前已经搜过了is_numeric()函数的用法,所以便自己尝试了几次,但自己没怎么学习过PHP代码并不知道要怎么修改网址,所以只能上网搜一下。
这一道题是构造一个这样的网址
大概说一下为什么这样做吧
php弱类型之“”与“=”
== 在进行比较的时候,会先将字符串类型转化成相同,再比较
如果一个数值和字符串进行比较的时候,会将字符串转换成数值
=== 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较
例如
<?php
var_dump("admin"==0); //true
var_dump("1admin"==1); //true
var_dump("admin1"==1) //false
var_dump("admin1"==0) //true
var_dump("0e123456"=="0e4456789"); //true
?>
“admin”==0 比较的时候,会将admin转化成数值,强制转化,由于admin是字符串,转化的结果是0自然和0相等;
“1admin”==1 比较的时候会将1admin转化成数值,结果为1;
而“admin1“1 却等于错误,也就是"admin1"被转化成了0;
前面是数字就转成数字,前面是字母就转成0
“0e123456”"0e456789"相互比较的时候,会将0e这类字符串识别为科学技术法的数字,0的无论多少次方都是零,所以相等。
所以题目中
if($a==0 and $a)
可以构造成
a=0a
is_numeric() 函数
is_numeric() 函数用于检测变量是否为数字或数字字符串。
题目中,
if(is_numeric($b)){
exit();
}
if($b>1234){
echo $flag2;
}
当b为数字或数字字符串,则执行exit()
当b不为数字或数字字符串,则执行下一步。
为了得到flag2,则b应不为数字或数字字符串。
%00截断
%00是空格的意思
具有截断作用
为使b不为数字或数字字符串,且b>1234
故使用%00的截断
即 b=12345%00
SQL约束条件注入
bugku上的一道题目:login1(SKCTF)
先进行注册用户名写"admin (n个空格)1"(总长度最好能超过设置的最大长度,反正尽量长点)。
密码随便写,注册成功后,用户名写admin密码写你设置的密码登录即可。然后会得到flag。