DVWA的wp
Burte Force这一关考察我们是爆破。
Low
这一串代码对与刷过sqli-labs的来说应该是比较熟悉的。我们审查代码可以看出来,这个代码没有对我们输入的username做任何过滤,只将password编码为md5,那么我们就有两种解法,一个是使用sql注入直接使用万能密码,第二个是使用bp来爆破了。
Medium这关我们查看源码mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $user )我们发现多了这个函数,这个函数对于刷过sqlilabs的我们来说应该不陌生,这个函数的作用是给字符串里存在的特殊字符前加一个\对字符进行转义以此来防止注入。如果该数据库的字符集为gbk编码的话可以使用%df来进行绕过\但是这关不是那么这关就无法进行注入了。而且我们在查看一下代码可以发现只要登陆失败就会激活sleep(2)函数导致爆破速度变慢,但是我们仍然可以进行爆破
hightokentoken是防止重复登陆爆破的一种方式,token是由服务端随机生成,发送到客户端,将其保存在客户端的cookie或者sessi ...
c语言
8-1123456789101112131415161718192021222324252627282930#include <stdio.h>#include <string.h>#include <stdlib.h>int main() { char ch; FILE *i, *fp; i = fopen("d:\\data\\sy8-1-out.txt", "w"); ch = getchar(); while (ch != '#') { fputc(ch, i); ch = getchar(); } fclose(i); i = fopen("d:\\data\\sy8-1-out.txt", "r"); fp = fopen("d:\\data\\sy8-1-out1.txt", "w"); while (1) { ch = fgetc(i); if (f ...
buu上的一些题目
强网杯2019随便注这道题目我们进行常规的一些尝试发现时是'闭合的注入接下来就是一些常规的操作,但是当我们输入select是发现select杯过滤了,而且是使用正则表达式,忽略大小写的过滤。发现怎么也绕不过,这时候我们就可以尝试使用堆叠注入,堆叠注入的原理在sqli-labs中也大致学过了只是学的很浅,我们可以先使用堆叠注入来查看该数据库的内容。1.show tables爆表名。表名为words和一串数字。2.show columns from words;show columns from `1919810931114514`words的内容为这时候我们不妨猜测words的id就是我们在搜索框输入的1,words的data就是我们搜索到的内容1919810931114514的内容我们查到flag在1919810931114514里,但是一个问题就是select被禁了我们该怎么查询这个表,这时候我们可以利用网页自带的查询,我们可以猜测一下查询语句为select data from words where id='$inject'这时候我们只需要使用堆叠注入将wo ...
无列名注入和异或注入
在刷完sql-labs后我在学长的博客里发现了另外几种注入方式我们会在下面写出来一:无列名注入无列名注入顾名思义就是无法查询到列名,利用这种方法来绕过列名的查询方法。在许多的sql注入场景一般都会过滤information_schema这个库导致我们无法利用这个查询表名和列名,但是在高版本的mysql里存在mysql.innodb_table_stats和mysql.innodb_table_index保存着表名。那么我们就可以利用这两个表来进行查询表名。可是这两个只能查询表名,怎么我们该怎么查询数据呢?这时候就要用到无列名注入了。无列名注入的原理是利用select语句来将列名重命名代码如下1select 1,2,3 union select * from user我们可以发现我们查询出来的表的列名变成了1,2,3也就是我们命名的这是为什么呢?哎嘿聪明的我查了一下chat-gpt,很快就得出了结果。因为sql语句中查询的列名是可以自己指定的,select 1,2,3 union select from user中第一个select语句指定的列名为1,2,3二第二个select语句是查 ...
upload-labs
webshellWebShell是一种以asp、php、jsp或cgi等网页文件形式存在的代码执行环境,也可以称为一种网页后门。它具有以下特点:可以远程执行命令、上传下载文件、修改文件权限等。WebShell根据功能和特点可以分为不同的类型,包括内存马和WebShell管理工具
关于文件上传漏洞文件上传漏洞主要是由于服务器端对用户上传的文件过滤不严导致被攻击者传入运行具有恶意代码的文件从而导致安全风险
文件上传漏洞需要满足的条件Web容器解释执行: 如果上传的文件能够被Web容器解释执行,特别是对于一些动态网页语言(如PHP、ASP、JSP等),攻击者可能通过上传包含恶意代码的文件来实现远程代码执行。这强调了对上传目录的权限和配置的重要性,确保攻击者无法直接上传并执行恶意脚本。
用户可通过Web访问: 文件上传漏洞的威胁在于攻击者能够通过Web访问上传的文件。如果文件上传成功但用户无法通过Web访问,那么漏洞的影响将受到限制。这也强调了对上传文件目录的访问权限和Web服务器配置的考虑。
内容修改和安全检查: 通过对上传的文件进行安全检查、格式化、图片压缩等操作,可以防止攻击者成功地执行 ...
sqlilabs less46-53
less46这道题目我们打开源码,可以发现他的查询语句发生了很大的变化,我们可以发先这个语句由1select * from user where id='$id'变成了1select * from user order by $srot那么我来介绍以下order by首先order by是一个mysql的排序语句,而我们常用的order by 1,order by 3之类的,原理就是order by的排列概功能,order by 3的意思就是将select查询的列的第三个进行排序,那么如果输入的数大于查询的列数就会报错,这就是order by查询列数的原理。order by的基本语句如下1select username,password from users order by username,password ASC|DESCASC为正序而DESC为逆序那么我们要怎么利用order by来进行注入呢?1,经过尝试order_by后无法跟union进行注入2,order by后可以使用and和or语句所以我们可以使用报错注入1?sort=1 or extractva ...
sqlilabs less38-45
less 38我们打开源码
看到一个叫mysql_connect()的函数打开到一个mysql服务器的新连接,返回一个代表到 MySQL 服务器的连接的对象。mysql_connect(host,username,password,dbname,prok,socket)host:必写,表示一个服务器的主机域名username:必写,表示mysql服务器的用户名password:可写,表示密码dbname:可选,表示要连接的数据库prok:可选,表示mysql服务器的连接端口socket:可选,表示所要使用的socket和已命名的pipesocket就是我们在发送时,帮助我们发送保护我们数据,打包数据等的东西,就像一个物流公司一样当我们发送时帮我们进行一系列操作
2.mysql_connect_errno()该函数于mysql_connect()有关连,会放回一个错误连接的代码,如果没有连接错误就返回03.mysql_select_db()查询所连接数据库的的一些php代码语法mysql_select_db(connection,dbname)connection:必写,规定要使用的my ...
sqli-labs less32-37宽字节绕过
less32这关我们直接查看源码我们可以看到引入可gbk编码
gbk编码编码包括了双字节字符集和单字节字符集单字符编码:如ascii码,单字节字符集表示其内部的所以字符都是由单字节表示的双字节字符集:也称为宽字符,双字节字符集表示其内部字符是由两个字节来表示的,其导致的漏洞大多是因为服务器错误的将两个单字节错误的编码为宽字符宽字符:用多个字节来表示的字符集宽字节::GB2312、GBK、GB18030、BIG5、ShiftJIS都是宽字节,其是由两个单字节来表示。其漏洞基本是由于输入多个单字节导致单字节被当成宽字节导致的,gbk码只有当前一个字节的ascii码值大于128才到汉字的范围
函数preg_replace($str,$str1,$str2)表示交换需要过滤的字符,即判断str2里有没有str由则将str转换成str1preg_quote($str)会将字符串中的所有特殊字符前添加一个\使其实体化。这样就导致了我们输入’会被添加上\导致转意。这时候我们就可以利用宽字节绕过由于\的url编码为%5c,这时候我们可以在%5c前加一个%df这时候就会组成为%df%5c而这两个字节就 ...
正则表达式
这个函数是个正则表达式,代码如下123456if (preg_match("/php/i", "PHP is the web scripting language of choice.")) { echo "查找到匹配的字符串 php。";} else { echo "未发现匹配的字符串 php。";}?>输出:查找到匹配的字符串 php上面的代码的意思为:在后式的”PHP”中查找前式列出的字符串php,有则返回1无返回0/php/两边的/是用于对字符串的分隔//后的i代表这是一个对大小写不敏感的查询所有这个会返回1就是真
123456789101112131415<?php/* 模式中的 \b 标记一个单词边界,所以只有独立的单词"web"会被匹配,而不会匹配 * 单词的部分内容比如"webbing" 或 "cobweb" */if (preg_match("/\bweb\ ...
ISCTF的wp
还是tcl并没有写出来几题但是有学到不少。1.圣杯战争!!当我看到这道题的时候我马上就发现这个新生赛和我之前做的完全不是一个等级的,刚开始做这题的使用由于本人不会php的序列化和反序列化所以这题是我学习了很久才做出这道题目。学习过程在这里序列化与反序列化的学习这道题目的提示做的很明显,出题人将构造pop链的顺序都和我们说了。我们要从summon到artifact到preoare到saber,我们可以先个$Saber赋值为对象artifact那么当输出$Saber时会因为错误的将对artifact当成字符串输出那么就会触发artifact的tostring(),我们再将变量$excalibuer赋值为对象prepare那么就会错误的调用没有的成员属性从而触发get($key)我们再将$release赋值为saber那么就会因为错误的将对象saber当成函数触发从而触发__invoke()那么我们就可以对成功链接到我们的目标函数include()了,接下来我们应该对weapon进行赋值从而得到flag这道题目除了考察php的序列化和反序列化还考查看了php的反序列化也就是关于最终inclu ...