攻防世界看题(?-2021.8.1)

Web新手区

  1. F12或者直接抓包
  2. dirsearch直接扫,然后访问robots.txt;

    访问直接在网址后面输/,再输想访问的地方就行了。

    robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。

   3.dirsearch直接扫,然后访问index.php.bak进行下载,记事本打开

   4.抓包看到cookie里说了 cookie.php,访问,根据其中提示再抓包,flag在头里面。

   5.HTML内容; 源码里有个disabled,删掉,那按钮就能按了。

   6.随便输几下,得到网页提示用户名adminIntruder爆破密码。

   7.php弱类型比较特性:

    php中有两种比较符号

    === 会同时比较字符串的值和类型

    == 会先将字符串换成相同类型,再作比较,属于弱类型比较

    php中的弱类型比较会使'abc' == 0为真。(abc可换成任意字符)

     

   8.HTTP通常使用的两种请求方法:

  get:URL后面输入‘?,然后直接继续输入(URL结尾自带‘/’);对应PHP源码$_GET[名称]

  (URL是什么:eg http://111.200.241.244:56621

  post:勾上hackbarpostdata,直接输入;对应PHP源码$_POST[名称]

     

 

   9.xff_referer:

[X-Forward-For: IP地址]

eg:X-Forward-For:123.123.123.123

xff头一般在通过了HTTP代理或者负载均衡器时才会存在;合理使用它,可以伪造IP地址。

[Referer:URL]

eg:Referer:https://www.baidu.com

HTTP Refererheader的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的

    10.webshell的一道题 我用dirsearch直接扫目录找到了flag.txt过了。。

    11.webshell

find命令: find / -name flag.txt  查找flag.txt所在位置

cat命令: cat /home/flag.txt 显示home目录下flag.txt文件的内容(无目录不行)

 

| 的作用为将前一个命令的结果传递给后一个命令作为输入

&&的作用是前一条命令执行成功时,才执行后一条命令

 

网站让你输入东西的时候(

eg:

 

 看下它的代码;如果是没有防备的(eg:

可以在它里面输入它要的东西后加|&&,再输入自己想执行的命令:127.0.0.1 | find / -name "flag.txt" ;它就会输出我们需要的东西(

find / -name 后面有多重写法:本题flag.txt能搜到,*flag搜不到,flag*能搜到;还可以用 *flag* 搜。

*flag是找以flag结尾的文件(包括扩展名;也就是意味着如果这样能找到,其一定没有扩展名)

flag*是找以flag开头的文件 ;

*flag*是找名字包含flag的文件;

三种找法都包含flag自身。

 

ls命令:

ls 列出当期目录下的所有文件

ls ../ 列出上一目录下的所有文件

../表示往上一层目录找;有几个../ 就上找几层;到最上层了,再加../就没用了

 

 13.JavaScript代码审计

JavaScriptstring类变量必须赋初值(空值赋’’),否则会出现undefined;字符、字符串均可直接相加,其效果是头尾相接。

 

\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31是一串转义字符,每个\x后面的两位 是一个十六进制数,对应ASCII表中的字符。这整体是个字符串。这玩意在多种语言(C,Python等)中均可直接输出。

 

JavaScript split函数:

语法:

stringObject.split(separator,howmany);

参数描述:

 

 

 

返回值:

一个字符串数组。该数组是通过在 separator 指定的边界处将字符串 stringObject 分割成子串创建的。返回的数组中的字串不包括 separator 自身。

注:如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。

 

JavaScript fromCharCode函数:

用处:ASCII码转字符

语法:

  n=string.fromCharCode(ASCII)   //string. 不能省

 

 

 

 Web提高区

  1. 页面会自动跳转到(1.php;访问初始界面,抓包,flag在包头。
  2. 类似新手区2
  3. ThinkPHP v5框架的漏洞——远程命令执行漏洞

输入

?s=index/think\App/invokeFunction&function=call_user_func_array&vars[0]=system&vars[1][]=blablabla  blablalba可以是ls cat find等任意命令。

原理不会!

 

4.文件包含+伪协议

下述file”实际应用中均应换为题目代码include中的变量。

PHP伪协议总结 https://www.cnblogs.com/-mo-/p/11736445.html

(伪协议好复杂,到现在没搞懂(^)╮:2021.7.27

PHP input伪协议:

php://input可以将post请求中的数据作为PHP代码执行。

利用该方法,我们可以直接写入php文件,输入file=php://input,然后用burp抓包,写入php代码。

eg

 

 

 

data伪协议:
其可以直接达到执行php代码的效果。

用法:

file=data://text/plain, <?php phpinfo();?>

 

函数show_source(文件名) 要记住

 

php框里执行系统命令,要用<?system(‘’)?> ;

 

网页没东西时,抓包看看头、源码

 

 5.扫一遍发现 index.php/ -> id=1 想到爆破;进去试一试 发现id只能是数字 直接爆破

对可能 可以爆破的地方要具有敏感性!

 

6.PHP代码审计初见

(1)源码里面白名单的过滤是判断第一个?之前的,所以构造白名单里的source.php加一个?就可以绕过白名单

(2)linux里面路径名基本可以是任意字符,所以source.php?/表示的是一个目录,source.php?/../就又回到了当前目录.

(3)后面再加几个../就可以路径穿越了

 

$_REQUEST[名称] 函数:同时支持getpost两种读入方式;

三种读入 读入进来的东西都大概以字符串变量形式存在;可以赋值给变量

eg:$wow=$_REQUEST[name];

注意中括号里的 对应 网页输入的 ?name=; 而不是一个变量。

 

include filename 函数:

文件包含;

filename默认和当前文件同一目录,若不是需加相对目录;

目录相关参加上面部分(windows不太一样)

require filename” 函数 和include唯一的不同在于,include找不到返回警告,require找不到直接报错。

 

换行: \n 源码换行,页面不换; <br />页面换行,源码不换。

输出(echo:用法

echo $变量名;

echo “原样输出”;

echo <br />;

issetisset() 函数用于检测变量是否已设置并且非 NULL

is_string()  检测变量是否是字符串。

in_array(search,array,type);搜索数组中是否存在指定的值;

  search参数必需,规定了要在数组搜索的值;

  array参数必需,规定了要搜索的数组;

  type可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

mb_substr();获取部分字符串(支持中文)

mb_substr($str,$start,$length);表示从str字符串start位置(初始位置0)截取length 度 的字符串。

mb_strpos();查找字符串在另一个字符串中出现的位置;支持中文;返回该位置数值。

mb_strpos($string,$needle,$offset);表示从string字符串offset位置开始查找needle字符

urldecode($str) :解码 URL 字符串的函数;需要作为被赋的值。

此函数用于解码给出的已编码字符串中的任何 %##以及中文等被编码的内容。 (加号 '+')被解码成一个空格字符)。

 

 7.SQL注入初见

可以联合查询的注入 初见

 

基本思路:让它报错---->找出它查了几个东西---->找到当前数据库名---->该数据库里的表名---->表里的列名---->列里的数据

(1)让它报错:一般用单引号+井号[ ‘  #  ];单引号用于产生括号不匹配错误,#用于注释掉后面的东西(比如使limit失效);之后的东西均在单引号和#之间输入。

(2)找出查了几个:用order by 数字 二分法查询。 order by 当实际查询行数小于输入数字时报错,大于等于输入数字时返回正常。

(3)union select 1,2,3(数字数等于之前找到的查的个数)开始试水,找到有效的查询位置,查询database() 找到当前所在的数据库

(4)找该数据库中包含的表; 使用 group_concat(table_name) from information_schema.tables where table_schema=“数据库名”

information_schema 是系统的关键库,里面的tables表在此步发挥了重要作用,它记录了整个SQL里每个数据库里都有哪些表。

(5)找敏感表里的所有列: 使用group_concat(column_name) from information_schema.columns where table_schema=“数据库名”and table_name=敏感列名

information_schema 是系统的关键库,里面的columns表在此步发挥了重要作用,它记录了整个SQL里每个数据库的每个表里都有哪些列。

(6)找敏感列里的数据: 使用 列名 from 数据库名.表名

标蓝语句里的非汉字部分都是固定输入。

//from后面的写在最后!!(还是在#号前面的)

 

      tables                          columns

 

 9.PHP代码审计

.phps文件首次出现

什么是 .phps 呢?

phps 文件就是 php的源代码文件,通常用于提供给用户(访问者)查看 php代码,因为用户无法直接通 Web 浏览器看到 php 文件的内容,所以需要用 phps 文件代替。其实,只

要不用 php 等已经在服务器中注册过的 MIME 类型文件即可,但为了国际通用,所以才用了 phps文件类型。

URL编码【urldecode(),urlencode()

% +  ascii的十六进制

 

 

 

 

$_GET,$_POST,$_REQUEST都自带一次URL解码;

 

若已知程序进行两次URL解码,则:

第一次解码前(原始输入)

两次解码之间

第二次解码后

a

a

a

%61

a

a

%2561

%61

a

套娃('')

 

记得用BurpDecode功能!

 

 

10. PHP代码审计

PHP序列化与反序列化

https://www.cnblogs.com/youyoui/p/8610068.html

 

PHP中,序列化用于存储或传递 PHP 的值的过程中,同时不丢失其类型和结构。

序列化函数原型:  string serialize(mixed $value)

序列化对于不同类型得到的字符串格式为:

  • String : s:size:value;
  • Integer : i:value;
  • Boolean : b:value;(保存1或0)
  • Null : N;
  • Array : a:size:{key definition;value definition;(repeated per element)}
  • Object : O:strlen(object name):object name:object size:{s:strlen(property name):property name:property definition;(repeated per property)}

 

对于对象,我们可以在类中加入一个魔术方法_sleep()来自定义序列化行为,达成保存部分属性,过滤敏感属性等操作。

public array _sleep(void)

 

反序列化用于将单一的已序列化的变量转换回PHP值。

mixed unserialize(string $str)

若被反序列化的变量是一个对象,在成功重新构造对象之后,PHP会自动试图去调用(起过滤作用的)_wakeup()成员函数(如果存在的话)

 

PHP反序列化漏洞:

执行unserialize()时,若序列化字符串中属性值个数【object size】大于属性个数【不知道是啥】,就会导致反序列化异常,直接跳过_wakeup()的过滤。

 

 

11.PHP upload文件上传漏洞

PHP文件上传漏洞原理以及防御姿势:https://blog.csdn.net/levones/article/details/80654233

 

posted @ 2021-09-11 11:36  hiddener  阅读(98)  评论(0编辑  收藏  举报