庚子年腊月十三——腊月十九
安全组——电信2002姜毅
2021.1.24——2021.1.31
文章目录
1.哔哔叨叨(BBDD)
最开始很想把每天的日报写出来然后粘在一起
前两天搬家没开电脑,就看看书
今天起来补文章……sql,上传……
js中’b’+‘a’+ +‘a’+‘a’=baNaNa是为什么啊?
一个表达式中如果有减号 (-)、乘号 (*) 或 除号 (/) 等运算符时,JS 引擎在计算之前,会试图将表达式的每个分项转化为
Number 类型(使用 Number(x) 做转换)。如果转换失败,表达式将返回 NaN
。如果其中有一个变量是字符串,则会将两边都作为字符串相加。
+'12abc';// NaN
+'123';// 123
现在分析 ‘b’+‘a’+ +‘a’+‘a’
上面的表达式相当于’b’+‘a’+ (+‘a’)+‘a’
因为(+‘a’) 等于 NaN,所以:
‘b’+‘a’+ (+‘a’)+‘a’ = ‘b’+‘a’+ “NaN”+‘a’=‘baNaNa’
2.听一波XUPT_ACM新生寒假训练2021的课
第一周是简介、时间复杂度、思维题、模拟题。
尽量把一秒运算次数控制在10^7之内
思维题
取消列车
兔子繁殖问题如果考虑兔子死了该怎么办?
兔子那么可爱,为什么让那个兔子死呢?
模拟题
好好学英语……
总结:
- 多学习,多做题,多思考,这堂课不失为假期学习的一个好的开始。
- 20道题,计划五天,一天四道(后来发现很明显计划赶不上变化)
查成绩
一个是C++的,一个是py的
两个还真不一样
在时间、内存、长度上,符合各个语言的性质
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
string option, name;
int score;
map<string, int> nameToScore;
while(cin >> option && option != "end"){
cin >> name;
if(option == "insert"){
cin >> score;
nameToScore[name] = score;
}else{
if(nameToScore.count(name)){
cout << nameToScore[name] << endl;
}else{
cout << -1 << endl;
}
}
}
}
dict1={}
option=input("")
while option != "end" :
array = option.split(" ")
name = array[1]
if array[0]=="insert" :
score = array[2]
dict1.update({name:score})
else :
print(dict1.get(name,"-1"))
option=input("")
母牛的故事
用递归竟然超时
我不讲武德了(眼花ing)
c={
'1':1,
'2':2,
'3':3,
'4':4,
'5':6,
'6':9,
'7':13,
'8':19,
'9':28,
'10':41,
'11':60,
'12':88,
'13':129,
'14':189,
'15':277,
'16':406,
'17':595,
'18':872,
'19':1278,
'20':1873,
'21':2745,
'22':4023,
'23':5896,
'24':8641,
'25':12664,
'26':18560,
'27':27201,
'28':39865,
'29':58425,
'30':85626,
'31':125491,
'32':183916,
'33':269542,
'34':395033,
'35':578949,
'36':848491,
'37':1243524,
'38':1822473,
'39':2670964,
'40':3914488,
'41':5736961,
'42':8407925,
'43':12322413,
'44':18059374,
'45':26467299,
'46':38789712,
'47':56849086,
'48':83316385,
'49':122106097,
'50':178955183,
'51':262271568,
'52':384377665,
'53':563332848,
'54':825604416,
'55':1209982081
}
n=input()
print(c.get(n))
数字游戏
十分简单而又可爱的一道题
ar=input("")
c=0
for each in ar :
if each == "1":
c+=1
print(c)
P - 求数列的和
一个估算的题,简单题
但是借机了解了一下环境,比如EOF之类的
import math
n,m=map(int,input().split())
c=0
if m<= 5 :
for i in range(0,m) :
c+=n
n=round(math.sqrt(n),3)
print('%.2f' % c)
else :
for i in range(0,5) :
c+=n
n=round(math.sqrt(n),3)
print('%.2f' % c)
当我高高兴兴写好去提交的时候
??
。。。。。。。。。。。。
#include<stdio.h>
#include<math.h>
int main(){
double n,m,i,sum;
while(scanf("%lf %lf",&n,&m) != EOF){
sum=n;
for(i=1;i<m;i++){
sum=sum+sqrt(n);
n=sqrt(n);
}
printf("%.2lf\n",sum);
}
return0;
}
以后记住了,先看看都能提交什么语言
《深度剖析》章1,2
撸一遍书系统掌握一下。
前面是简介和http详解
curl,CFT中有可能用到
深度剖析第三章
早上起床读书好呀
今天我们来看看信息探测
通过搜索网站
关键字 | 说明 |
---|---|
site | 指定域名 |
intext | 正文中存在关键字的网页 |
intitle | 标题中存在关键字的网页 |
info | 一些基本信息 |
inurl | URL中存在关键字的网页 |
filetypr | 搜索指定文件类型 |
eg:intext:Powered by Discuz
访问robots.txt看看网页允许爬虫找什么东西
Nmap初体验
一些常用的扫描参数
参数 | 说明 |
---|---|
-sT | TCPconnect()扫描,会在系统日志里留下大量痕迹 |
-sS | 半开扫描,要root,一半不留痕迹 |
-sP | ping扫描(扫描端口时默认) |
-sA | 可以穿过防火墙规则集的高级扫描 |
-sV | 探测端口服务号版本 |
-v | 显示扫描过程(推荐) |
-p | 指定端口 |
-A | 全面系统检测 |
-O | 探测操作系统 |
-oN、-oX、-oG | 以正常、XML、grepable 三种格式将报告写入文件 |
-iL | 读取主机列表,如 -iL C:\ip.txt |
eg:nmap -sS -p 1-65535 -v 192.168.1.103
nmap脚本引擎
在Script文件夹中,有一堆“.nse”文件
在后面添加“–script=脚本名称”
具体可参照 http://nmap.org/nsedoc/
eg:扫描敏感目录
nmap -p 80 --script=http-enum.nse www.xxser.com
在扫描中仅进行一次是不够的,
有时候需要递归扫描,(如扫info里的info)
以及针对性扫描。(如abc_info,多看看abc开头的)
第四章漏洞扫描
书里介绍了三个工具
Burp
分享两个
提一下,终于知道这是什么了
攻击类型 | 说明 |
---|---|
狙击手 | 变量依次破解 |
破城槌 | 变量同时破解 |
音叉 | 每个变量对应一个字典 |
集束炸弹 | 每个变量对应一个字典并尝试每个组合 |
Burp支持插件,如python等
AWVS
Acunetix Web Vulnerability Scanner
acunetix_WVS 13.基础使用
先啥也看不懂地扫一个漏洞测试网站
http://demo.testfire.net/
再试试ctfhub上打开的一道题
(留下了qq截图的印记hhh)
第五章SQL注入
类似读书笔记
注入的分类
书中认为SQL注入只分两类,分别是数字型和字符型
像cookie,post,盲注,延时只是在这两类的基础上在不同位置以不同形式的展现
数字型注入多出现在自动推导变量类型的弱语言中,如PHP
having子句和group by子句
https://blog.csdn.net/qq_36743482/article/details/78464734
SQL中各字句执行顺序:
select col_name from table
where col_name > xxx
group by col_name
having …
order by … desc
尝试having子句
having子句作用:对由sum或其它集合函数运算结果的输出进行限制。
SELECT t.*
from test t
HAVING t.score>80
;
结果:只显示得分80以上的
结论:在不搭配group by 的情况下,使用having子句仅仅对结果进行限制,等价于where条件
尝试group by子句
“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。
https://www.cnblogs.com/jingfengling/p/5962182.html
简单地说,有些像分类汇总
SQL Server
和mysql不太一样的地方,可以准确地定位错误,因此
利用错误消息提取信息
1.这里的枚举当前表和列用到了刚刚的group by和having
select * from users where username= 'root' and password= 'root' group by users.id having 1=1--'
2.利用数据类型错误提取数据
试图把一个字符串和非字符串比较
select from users where username= 'root' and password= 'root' and 1> (select top 1 username from users)
系统函数
函数 | 说明 |
---|---|
stuff | 截取字符串 |
ascii | 取ascii码 |
char | 根据ascii取字符 |
getdata | 返回日期 |
count | 返回组中总条数 |
cast | 更换数据类型表达式 |
rand | 返回随机值 |
is_srvrolelemember | 登录名是否为服务器角色 |