文章目录











127.0.0.1&ipconfig
127.0.0.1&systeminfo
127.0.0.1&dir




上面的被转义的符号你真的看清楚了吗,哪些之间有空格,哪些没有你确定自己看清楚了吗




而在真实地攻击环境中,我们通常是给受害者发送一个链接,而在正常的情况下我们通常不会点击一个很长的看起来就不正常的链接,这个时候我们就需要好好学习社会工程学,学会利用人们的心理来达到我们的目的,诱使他们点击我们构造的链接通常情况下会把长链接构造成一个短链接,这个时候我们可以利用网上很多在线工具)
比如:站长工具:短链接生成器(就会自动帮我们生成一个短链接)
我们也可以通过构造一个页面。
修改密码的链接重定向到一个自己写的一个错误页面,用户点击之后以为出错了,实际已经执行了恶意代码。

点击进入链接,出现上图错误页面,但其实已经执行了语句。


如上图所示验证成功。
<?php
if( isset( $_GET[ 'Change' ] ) ) {
// Get input
$pass_new = $_GET[ 'password_new' ];
$pass_conf = $_GET[ 'password_conf' ];
// Do the passwords match?
if( $pass_new == $pass_conf ) {
// They do!
$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
$pass_new = md5( $pass_new );
// Update the database
$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
// Feedback for the user
echo "<pre>Password Changed.</pre>";
}
else {
// Issue with passwords matching
echo "<pre>Passwords did not match.</pre>";
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}
?>








基于token的身份验证方法 使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
1.客户端使用用户名跟密码请求登录;
2.服务端收到请求,去验证用户名与密码;
3.验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端;
4.客户端收到 Token以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;
5.客户端每次向服务端请求资源的时候需要带着服务端签发的;
6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据。
查看源码,发现没有任何限制

如果出现如下提示

修改配置文件,将allow_url_include 开启为on

如果还不行,看远程包含是否开启








源码中暴露的问题:
正常的长传文件,没有做任何过滤,并且输出了上传文件的路径信息
文件上传文件后,文件直接保存,保存路径为hackable/uploads/,文件上传成功后,返回succesfully。


上传成功!!!






<?php
if( isset( $_POST[ 'Upload' ] ) ) {
// Where are we going to be writing to?
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );
// File information
$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
$uploaded_ext = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
$uploaded_tmp = $_FILES[ 'uploaded' ][ 'tmp_name' ];
// Is it an image?
if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&
( $uploaded_size < 100000 ) &&
getimagesize( $uploaded_tmp ) ) {
// Can we move the file to the upload folder?
if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {
// No
echo '<pre>Your image was not uploaded.</pre>';
}
else {
// Yes!
echo "<pre>{$target_path} succesfully uploaded!</pre>";
}
}
else {
// Invalid file
echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
}
}
?>
getimagesize(string filename)函数会通过读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头,函数会报错。可以看到,High级别的代码读取文件名中最后一个”.”后的字符串,期望通过文件名来限制文件类型,因此要求上传文件名形式必须是”.jpg”、”.jpeg” 、”*.png”之一。同时,getimagesize函数更是限制了上传文件的文件头必须为图像类型。
我们可以通过生成图片马的方式上传文件
在命令行下用copy命令将图片mm.jpg和之前的一句话木马shell.php合并在一起



上传3.jpg


此时由于图片马中的php代码并没有被解析,所以不能直接使用蚁剑进行连接,这里可以通过命令执行漏洞将文件名改为php






1' or '1' = '1

ORDER BY 语句用于对结果集进行排序。
而order by x 可以从1开始,1 表示的第一个字段,2表示的第二个字段
如此类推就可以了,但是当不存在那个字段的时候,就会产生这样的错误。 unknown column name x,这样,字段数就是x-1。
(为了方便我们直接把SQL语句中后续语句全部注释掉不执行,在判断语句后加 #,全部注释掉就可以不用考虑单双引号闭合的问题)



一共有两列
那union查询有哪些特性呢?
1.Union必须由两条或者两条以上的SELECT语句组成,语句之间使用Union链接。
2.Union中的每个查询必须包含相同的列、表达式或者聚合函数,他们出现的顺序可以不一致(这里指查询字段相同,表不一定一样)
3.列的数据类型必须兼容,兼容的含义是必须是数据库可以隐含的转换他们的类型
4、只有当前一条语句不成立时才会执行后一条

可以知道,1和2两个位置都可以回显。
利用2位置,查看当前的数据库为dvwa

1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema = ‘dvwa’#

此时可能会出现Illegal mix of collations for operation 'UNION’问题
是编码问题,去数据库修改
1’ union select 1 , group_concat(column_name) from information_schema.columns where table_name = ‘users’ #

1’ union select user,password from users#


我们发现不能进行语句输入







点击

之后会出现一个新的界面
在新的界面输入内容,点击submit

返回结果输出在原来的界面上,其他同Low。
代码审计



但最后出现了302重定向会返回登录页面,证明这个页面需要cookie,那么我们接下来就复制数据包中的cookie














记住,记住,记住,千万记住(重要的事情说好几遍)一定要把这个文件放在sqlmap下面,不要问我为什么,因为新建文件的原理就是让工具读取文件,你已经进入sqlmap里面了,所以为了方便你当然得把文件建在sqlmap里面啊。



结果如上图所示,之后步骤同low。





1' and length(database())=1#

1’ and length(database())=1#
1’ and length(database())=2#
1’ andlength(database())=3#
1’ and length(database())=4#
直至猜测长度为4时才返回正常结果
此时我们知道数据库的长度为4
1' and ascii(substr(database(),1,1)>97#
思路因为主要是猜,猜测具体名字就是用无数遍的二分法等算法猜

结果不会延迟说明不是数字型

结果延迟说明是字符型
接下来的步骤就同布尔型注入了
DOM xss low 服务器端没有任何php代码,执行命令的只有客户端的js代码。



></option></select><img src=1 onerror=alert(/xss/)>那么这个语句是怎么闭合的呢?
学过html语言的我们都知道都是双标签,也就是说会识别两个标签之间的语句,那么我们就人为把它闭合起来,在执行过程中,一旦存在一对标签,那么就会执行这里面的语句,无法构成成对标签的不会执行里面的语句,而是单标签,也就是说他要把执行的语句涵盖在里面

但这个闭合和之前的可不太一样。 我们在english后面加了注释符,很多人问了注释符不就代表后面的语句不会执行了吗,那闭合又有什么用呢。
哎,这就是DOM与其他的最大的区别了因为DOM是不会和后端的服务期进行交互的,它只是利用DOM解析树,而DOM解析树依旧会解析注释符后面的语句,只要解析了就可以成功执行。
在这里要注意的是,输入语句后,很多同学会疑惑为什么没反应,别慌,你没有错,这个时候你只需要刷新一下就好了。(但如果刷新不行,可能真的是你的语句有问题)




<script>alert('xss')</script>

<script>alert(document.cookie)</script>


<scrip>标签替换为空,所以我们想办法绕过<scr<script>ipt>alert(1)</script><SCript>alert(1)</script>


<script>标签进行了严格的过滤<img src=1 onerror=alert(/xss/)>
法一








对name的值那个修改(这里肯定会有人问为什么是name,因为message里面的东西是要存储的解析器并不会解析message里面的内容,而是要解析name里面的内容便于查询,类似于标识符的概念,用户进行后续操作时都是对name以name为唯一识别进行操作)//以上只是我个人对于这个问题的理解,只是便于理解(也不知道有没有写清楚,如果不懂的同学可以去查询其他的资料)
这一级别与反射型xss的中级是一样的通过大小写或者双写,只不过是通过抓包修改数据包。
这一级别与反射型xss的高级是一样的通过修改标签,只不过是通过抓包修改数据包。
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
我最近将我的http客户端切换到faraday,一切都按预期工作。我有以下代码来创建连接:@connection=Faraday.new(:url=>base_url)do|faraday|faraday.useCustim::Middlewarefaraday.request:url_encoded#form-encodePOSTparamsfaraday.request:jsonfaraday.response:json,:content_type=>/\bjson$/faraday.response:loggerfaraday.adapterFaraday.default_ada
我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定
一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
我正在使用此代码在我的Sinatra应用程序中启用日志记录:log_file=File.new('my_log_file.log',"a")$stdout.reopen(log_file)$stderr.reopen(log_file)$stdout.sync=true$stderr.sync=true实际的日志记录是使用:logger.debug("Startingcall.Params=#{params.inspect}")事实证明,只有INFO或更高级别的日志消息被记录,而DEBUG消息没有被记录。我正在寻找一种将日志级别设置为DEBUG的方法。 最佳