php伪协议
什么是php伪协议
ssti模板注入
flask框架Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。我们可以使用flask框架来快速搭建web
flak框架基础代码1234567891011121314151617181920from flask import Flask#从flask模块里导入Flask类app = Flask(__name__)#创建@app.route('/')#路由规则def hello1(): return "hello"@app.route('/lll')#静态路由def hello2(name): return "hello lll"@app.route('/<name>')#动态路由def hello2(name): return "hello %s" % name@app.route('/id/<int:ID>')#变量为int型的动态路由def I ...
md5碰撞
md5()函数介绍md5(str,raw)str为要编码的字符串raw为编码模式默认为false即32为16进制字符。如果输入为true则为原始16字符二进制格式
md5()sql注入我写过的一道题目中有如下sql查询语句1select * from users where username='$user' and password='."md($password,true)".'这时候我们给password输入ffifdyop该字符就会被编码为276f722736c95d99e921722cf9ed621c转为字符串为'or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c这时候我们可以发现or前后都有’这回将之前和之后的’闭合or’6diaid’只要开头为数字那么就相当于or上一个数字即or上一个真那么就会如果这个查询
md5弱比较绕过1234QNKCDZO240610708s878926199as155964671a
因为php的弱比较所以我们可以使用编码后为0e开头的进行绕过
md5强比较绕 ...
nssround#16的复现
我个人认为这两到题目是有纪录的价值的RCE但没完全RCE上来的md5绕过就不多讲直接讲rec123456789<?phperror_reporting(0);highlight_file(__FILE__);$shell = $_POST['shell'];$cmd = $_GET['cmd'];if(preg_match('/f|l|a|g|\*|\?/i',$cmd)){ die("Hacker!!!!!!!!");}eval($shell($cmd));我们可以看到其将字母f,l,a,g?*都过滤了我们也就无法使用bash或者sh来绕过,也无法使用常用的方法,我查了以下wp有以下两种题解
1.[9-q]绕过[9-q]在linux里代表了ascii在9-q之间的字符,与通配符相似我们可以使用该方法进行绕过12?cmd=more /[9-q][9-q][9-q][9-q]shell=system
2.使用$_POST绕过我们可以给shell传值为urldecod使shell ...
xss注入
xssS又叫CSS(Cross Site Script)跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
xss的原理说起xss感觉和sql注入很像,xss是将一些恶意代码嵌入前端代码中,当用户浏览该网页时就会触发该恶意语句,一般恶意语句为js代码。例如一个留言板没有对用户输入的内容进行过滤这就会导致单黑客在留言版里输入一些恶意语句时会被后端保存在数据库中,当有用户浏览该留言板时,后端代码会将该恶意语句输出到web页面上导致用户执行该代码。
注入点1.HTML标签之间<div>:可以直接写入JS,web会直接执行<title>``<iframe>等包含htmlEncode功能的标签:先闭合标签,再写入JS
2.HTML标签之内插入点在value内,type不为hidden:由于w ...
CSRF
所谓CSRF就是(Cross-site request forgery),中文名称:跨站请求伪造
攻击过程用户A在浏览器登陆了网站B,这时候服务器会发送cookie给浏览器,而这时如果用户访问了危险网站C,这时C会发送一个访问网页B的请求,而这些请求中往往会进行一些危险操作,如修改用户密码,甚至更加严重。
举例假设一个转帐网站存子CSRF漏洞,这时张三要进行转账,这时正常转账的请求假设为http://bank.example/withdraw?account=张三&amount=1&for=李四这时正常的将张三的1元转给了李四,但是这时如果张三没有将转账网站的账号登出,并且访问了黑客制作的危险网站,这时危险网站发送了一个请求为http://bank.example/withdraw?account=张三&amount=1000000&for=黑客这时钱就转到了黑客手里,这主要的原因是转账网页服务器没有进行严格的过滤,导致危险网站发起了一个危险请求且成功访问,并且张三没有登出导致了浏览器存储着账号的cookie,这时危险网站发起的请求就携带了cookie被 ...
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语句是查 ...