From 130c917d38c41d938ed5d9bc47638cb8e12e4c94 Mon Sep 17 00:00:00 2001 From: kimocoder Date: Sat, 23 Feb 2019 10:44:28 +0100 Subject: [PATCH 01/25] Add chroot backup/restore function --- res/values/strings.xml | 1 + .../nethunter/ChrootManagerFragment.java | 51 ++++++++++++++----- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 5c329f7..d790921 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -113,6 +113,7 @@ Custom MAC Nethunter: auto-running startup scripts Uh oh! Nethunter can\'t find busybox! + Read-only Random MAC Custom MAC diff --git a/src/com/offsec/nethunter/ChrootManagerFragment.java b/src/com/offsec/nethunter/ChrootManagerFragment.java index 07dbc6b..0be309a 100644 --- a/src/com/offsec/nethunter/ChrootManagerFragment.java +++ b/src/com/offsec/nethunter/ChrootManagerFragment.java @@ -99,6 +99,7 @@ public class ChrootManagerFragment extends Fragment { private static final String URI_MINIMAL = IMAGE_SERVER + FILENAME_MINIMAL; private static final String URI_FULL = IMAGE_SERVER + FILENAME_FULL; + private static final String FILENAME_BACKUP = "kalifs-backup.tar.gz"; private final ShellExecuter x = new ShellExecuter(); /* Certificate pinning openssl s_client -showcerts -connect images.offensive-security.com:443 /dev/null|openssl x509 -outform PEM >mycertfile.pem @@ -291,8 +292,15 @@ public void onClick(DialogInterface dialog, int which) { private void downloadOrSdcard() { AlertDialog.Builder adb = new AlertDialog.Builder(getActivity()); - adb.setTitle("Select Chroot install mode:") - .setMessage("Download is the prefered mode. Get the latest chroot from the offsec servers.\n\n Also you can place a custom\nkalifs-[minimal|full].tar.xz in /sdcard\nand skip the download.") + adb.setTitle("Select chroot install mode:") + .setMessage("Download is the prefered mode. Get the latest chroot from the offsec servers.\n\nYou can place a custom\nkalifs-[minimal|full].tar.xz in /sdcard\nand skip the download.\n\nAlso, You can place a back up kalifs-backup.tar.xz in /sdcard to restore your backup chroot.") + .setNegativeButton("Restore from SdCard", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.cancel(); + restoreBackup(false); + } + }) .setNeutralButton("Use SdCard", (dialog, which) -> { dialog.cancel(); fullOrMinimal(false); @@ -301,8 +309,9 @@ private void downloadOrSdcard() { dialog.cancel(); fullOrMinimal(true); }); + AlertDialog ad = adb.create(); - ad.setCancelable(false); + ad.setCancelable(true); ad.show(); } @@ -345,6 +354,13 @@ private void fullOrMinimal(final Boolean shouldDownload) { ad.show(); } + private void restoreBackup(final Boolean shouldDownload) { + zipFilePath = nh.SD_PATH + "/" + FILENAME_BACKUP; + if (!shouldDownload) { + UnziptarTask mytask = new UnziptarTask(); + mytask.execute(); + } + } private void addMetaPackages() { //for now, we'll hardcode packages in the dialog view. At some point we'll want to grab them automatically. @@ -433,15 +449,17 @@ private boolean isExternalStorageWritable() { private void deleteFile(String filePath) { File checkFile = new File(filePath); - if (checkFile.exists()) { - statusLog(filePath + " found."); - statusLog(getActivity().getString(R.string.deletingforroom)); - if (checkFile.delete()) { - statusLog("File deleted."); - return; - } else { - statusLog(getActivity().getString(R.string.problemdeletingoldfile)); - return; + if (!filePath.contains("kalifs-backup.tar.gz")){ + if (checkFile.exists()) { + statusLog(filePath + " found."); + statusLog(getActivity().getString(R.string.deletingforroom)); + if (checkFile.delete()) { + statusLog("File deleted."); + return; + } else { + statusLog(getActivity().getString(R.string.problemdeletingoldfile)); + return; + } } } } @@ -628,13 +646,18 @@ protected Boolean doInBackground(Void... Void) { String fExists = x.RunAsRootOutput("[ -f " + zipFilePath + " ] && echo \"1\" || echo \"0\""); if (fExists.equals("0")) { - Log.d(TAG, "Error: No tar.xz found"); + if ( zipFilePath.contains("tar.gz")) Log.d(TAG, "Error: No tar.gz found"); + else Log.d(TAG, "Error: No tar.xz found"); publishProgress("Error: Missing file: " + zipFilePath + " not found."); return false; } // Decompress, extract, and deploy the .tar.xz to the chroot destination in one step publishProgress(getActivity().getString(R.string.extract_chroot)); - x.RunAsRootWithException(nh.whichBusybox() + " tar -xJf '" + zipFilePath + "' -C '" + nh.NH_SYSTEM_PATH + "'"); + if ( zipFilePath.contains("tar.gz")) { + x.RunAsRootOutput(nh.whichBusybox() + " tar -xzf '" + zipFilePath + "' -C '" + nh.NH_SYSTEM_PATH + "'"); + } else { + x.RunAsRootOutput(nh.whichBusybox() + " tar -xJf '" + zipFilePath + "' -C '" + nh.NH_SYSTEM_PATH + "'"); + } } catch (RuntimeException e) { Log.d(TAG, "Error: ", e); publishProgress("Error: " + e.toString()); From 898dff76d394d2553ee273671c21304113225d22 Mon Sep 17 00:00:00 2001 From: kimocoder Date: Sat, 23 Feb 2019 10:45:15 +0100 Subject: [PATCH 02/25] Correctly swap platform/type values when creating table --- src/com/offsec/nethunter/SearchSploit.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/com/offsec/nethunter/SearchSploit.java b/src/com/offsec/nethunter/SearchSploit.java index c9bcb47..9908a1b 100644 --- a/src/com/offsec/nethunter/SearchSploit.java +++ b/src/com/offsec/nethunter/SearchSploit.java @@ -25,14 +25,14 @@ public SearchSploit() { } - public SearchSploit(long id, String file, String description, String date, String author, String platform, String type, Integer port) { + public SearchSploit(long id, String file, String description, String date, String author, String type, String platform, Integer port) { this.id = id; this.file = file; this.description = description; this.date = date; this.author = author; - this.platform = platform; this.type = type; + this.platform = platform; this.port = port; } @@ -99,6 +99,4 @@ public Integer getPort() { public void setPort(Integer port) { this.port = port; } - - -} \ No newline at end of file +} From 6904717c73411a06bdaf044873be398bc2581f7e Mon Sep 17 00:00:00 2001 From: kimocoder Date: Sat, 23 Feb 2019 10:45:59 +0100 Subject: [PATCH 03/25] Add system file creation mechanism --- assets/etc/init.d/50userinit | 68 +----------------------------------- 1 file changed, 1 insertion(+), 67 deletions(-) diff --git a/assets/etc/init.d/50userinit b/assets/etc/init.d/50userinit index ab6f769..c6e2ba7 100644 --- a/assets/etc/init.d/50userinit +++ b/assets/etc/init.d/50userinit @@ -1,69 +1,3 @@ #!/system/bin/sh -log running userinit.sh -if [ -x /system/xbin/busybox ]; then - busybox=/system/xbin/busybox -elif [ -x /data/local/bin/busybox ]; then - busybox=/data/local/bin/busybox -elif [ -x /system/bin/busybox ]; then - busybox=/system/bin/busybox -else - echo "Busybox not found! Install it, dummy!"; - log "Busybox not found! Install it, dummy!"; - exit; -fi -log Running userinit.sh... - -######### EXPORT ######### -#mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system -export bin=/system/bin -export mnt=/data/local/nhsystem/kali-armhf -PRESERVED_PATH=$PATH -export PATH=/usr/bin:/usr/sbin:/bin:/usr/local/bin:/usr/local/sbin:$PATH -export TERM=linux -export TERMINFO=/etc/terminfo -export HOME=/root -export LOGNAME=root - -######### MOUNT ######### -$busybox mount -o remount,suid /data -$busybox mount -o bind /system $mnt/system -$busybox mount -o bind /sdcard $mnt/sdcard -$busybox mount -o bind /dev $mnt/dev -$busybox mount -t devpts devpts $mnt/dev/pts -$busybox mount -t proc proc $mnt/proc -$busybox mount -t sysfs sysfs $mnt/sys - -$busybox chmod 666 /dev/null - -# SET 250MB TO ALLOW POSTGRESQL # -$busybox sysctl -w kernel.shmmax=268435456 &>/dev/null - -######### SET DNS ######## - -rm -f /data/local/nhsystem/kali-armhf/etc/resolv.conf # remove dns entries -touch /data/local/nhsystem/kali-armhf/etc/resolv.conf # create empty resolv.conf - -for i in 1 2 3 4; do - if [[ -z $(getprop net.dns${i}) ]]; then - # we go through 1-4 dns servers and break out of loop on empty - break - else - # add local/device dns server first - echo "nameserver $(getprop net.dns${i})" >> /data/local/nhsystem/kali-armhf/etc/resolv.conf - fi -done - -# lastly add two default dns entries -echo "nameserver 208.67.222.222" >> /data/local/nhsystem/kali-armhf/etc/resolv.conf -echo "nameserver 208.67.220.220" >> /data/local/nhsystem/kali-armhf/etc/resolv.conf - -# NETWORK SETTINGS # -$busybox sysctl -w net.ipv4.ip_forward=1 &>/dev/null -echo "127.0.0.1 localhost kali" > $mnt/etc/hosts -echo "::1 localhost ip6-localhost ip6-loopback" >> $mnt/etc/hosts -echo "kali" > $mnt/proc/sys/kernel/hostname - -# execute startup script - -log userinit.sh is completed. \ No newline at end of file +echo "No start up." From 5d46a466662fa5c7f400fea8370cb2734cff0879 Mon Sep 17 00:00:00 2001 From: kimocoder Date: Sat, 23 Feb 2019 10:46:38 +0100 Subject: [PATCH 04/25] VNC manager fix (partially) --- assets/scripts/bootkali | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/assets/scripts/bootkali b/assets/scripts/bootkali index 5635148..b835d12 100755 --- a/assets/scripts/bootkali +++ b/assets/scripts/bootkali @@ -100,6 +100,12 @@ else $busybox chroot $mnt service openvpn stop fi + #Open VNC + + if [ "$1" == "vnc" ] && [ "$2" == "start" ]; then + echo "good" + fi + # HID Keyboard Command a.k.a Teensy style # Supported keyboard layouts: US, FR, EN, ES # We can pass language options to bootkali like: From 33c37bd5b8a99180bf66f0982995f78a44594e10 Mon Sep 17 00:00:00 2001 From: kimocoder Date: Sat, 23 Feb 2019 10:47:13 +0100 Subject: [PATCH 05/25] Add start-vnc script --- assets/scripts/start-vnc | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 assets/scripts/start-vnc diff --git a/assets/scripts/start-vnc b/assets/scripts/start-vnc new file mode 100644 index 0000000..dbdfbe7 --- /dev/null +++ b/assets/scripts/start-vnc @@ -0,0 +1,2 @@ +#!/system/bin/sh +unset LD_PRELOAD From 828ca613e4345c0c6c49e5427e12a0fb21a5cd39 Mon Sep 17 00:00:00 2001 From: kimocoder Date: Sat, 23 Feb 2019 10:47:59 +0100 Subject: [PATCH 06/25] Update ChrootManager to fix download/unpack --- src/com/offsec/nethunter/ChrootManagerFragment.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/com/offsec/nethunter/ChrootManagerFragment.java b/src/com/offsec/nethunter/ChrootManagerFragment.java index 0be309a..bec468c 100644 --- a/src/com/offsec/nethunter/ChrootManagerFragment.java +++ b/src/com/offsec/nethunter/ChrootManagerFragment.java @@ -406,7 +406,7 @@ private void installAndUpgrade(String packages) { try { Intent intent = new Intent("com.offsec.nhterm.RUN_SCRIPT_NH"); intent.addCategory(Intent.CATEGORY_DEFAULT); - intent.putExtra("com.offsec.nhterm.iInitialCommand", nh.makeTermTitle("Updating") + "apt-get install " + packages + " && echo \"\nKali Linux Nethunter setup is complete.\nEnjoy. (You can close the terminal now)\n\""); + intent.putExtra("com.offsec.nhterm.iInitialCommand", nh.makeTermTitle("Updating") + "echo \"Updating gpg key..\" && wget -q -O - https://archive.kali.org/archive-key.asc | apt-key add && apt-get update && apt-get install " + packages + " -y && apt-get dist-upgrade -y && echo \"\nKali Linux Nethunter setup is complete.\nEnjoy. (You can close the terminal now)\n\""); Log.d("PACKS:", "PACKS:" + packages); startActivity(intent); @@ -702,6 +702,12 @@ private class DownloadChroot extends AsyncTask { final ProgressDialog mProgressDialog; final NotificationManager mNotifyManager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE); final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(getActivity()); + //private final int NOTIFY_ID = 1003; + //There are hardcoding only for show it's just strings + //private String name = "my_package_channel"; + //private String id = "my_package_channel_2"; // The user-visible name of the channel. + //private String description = "my_package_first_channel"; // The user-visible description of the channel. + //private int importance = NotificationManager.IMPORTANCE_LOW; private final Context context; double last_perc = 0.0; double humanSize = 0.0; @@ -751,8 +757,8 @@ protected String doInBackground(String... sUrl) { JSONObject jsonObject; try { jsonObject = new JSONObject(jsonstring); - SHA512_FULL = jsonObject.getString("chroot_sha512_full"); - SHA512_MINIMAL = jsonObject.getString("chroot_sha512_min"); + SHA512_FULL = "86752fba98b54daf5f66d04b1306ebebb25ea434bd5f17aa53b53c75aef6e9309084e0e6c01b94461dcb5615e4dd9eb97ac1d8973ebadcd1f6962b99312ae7e5"; + SHA512_MINIMAL = "FAE5DEAAD07E45F712101457BAD8FA196110D842AA420FD49C6A591871AFEB8CDDB1353675707EEF8CDFAE2E80B55E454EF54FA21965E22BFFB6D30E03B8FF17"; if (isFull) { // asign the value so the integryty check works ^^ SHA512 = SHA512_FULL; From 7be8cf410d2f7991a8978e1c3ebbb0c9b99161f7 Mon Sep 17 00:00:00 2001 From: kimocoder Date: Sat, 23 Feb 2019 10:48:35 +0100 Subject: [PATCH 07/25] Update VNC Manager --- src/com/offsec/nethunter/VNCFragment.java | 59 +++++++++++++++++------ 1 file changed, 43 insertions(+), 16 deletions(-) diff --git a/src/com/offsec/nethunter/VNCFragment.java b/src/com/offsec/nethunter/VNCFragment.java index 6374d05..d16f530 100644 --- a/src/com/offsec/nethunter/VNCFragment.java +++ b/src/com/offsec/nethunter/VNCFragment.java @@ -3,6 +3,7 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageManager import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; @@ -17,6 +18,20 @@ import android.widget.Toast; import com.offsec.nethunter.utils.NhPaths; +import com.offsec.nethunter.utils.ShellExecuter; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.LinkOption; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.attribute.AttributeView; +import java.nio.file.attribute.FileOwnerAttributeView; +import java.nio.file.attribute.GroupPrincipal; +import java.nio.file.attribute.PosixFileAttributeView; +import java.nio.file.attribute.PosixFileAttributes; +import java.nio.file.attribute.UserPrincipal; +import java.util.UUID; import androidx.fragment.app.Fragment; @@ -113,29 +128,41 @@ private void intentClickListener_VNC() { return; } - String _R_IP = ((EditText) getView().findViewById(R.id.vnc_R_IP)).getText().toString(); - String _R_PORT = ((EditText) getView().findViewById(R.id.vnc_R_PORT)).getText().toString(); + String _R_IP = ((EditText) getView().findViewById(R.id.vnc_R_IP)).getText().toString().replaceAll(" ", ""); + String _R_PORT = ((EditText) getView().findViewById(R.id.vnc_R_PORT)).getText().toString().replaceAll(" ", ""); String _PASSWD = ((EditText) getView().findViewById(R.id.vnc_PASSWD)).getText().toString(); - String _NICK = ((EditText) getView().findViewById(R.id.vnc_CONN_NICK)).getText().toString(); + String _NICK = ((EditText) getView().findViewById(R.id.vnc_CONN_NICK)).getText().toString().replaceAll(" ",""); String _USER = ((EditText) getView().findViewById(R.id.vnc_USER)).getText().toString(); int _RESOLUTION = ((Spinner) getView().findViewById(R.id.resolution_spinner)).getSelectedItemPosition(); + if (!_R_IP.equals("") && !_R_PORT.equals("") && !_NICK.equals("")) { - Intent intent = getActivity().getApplicationContext().getPackageManager().getLaunchIntentForPackage("com.offsec.nhvnc"); - intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); - intent.putExtra("com.offsec.nhvnc.EXTRA_CONN_DATA", true); - intent.putExtra("R_IP", _R_IP); - intent.putExtra("R_PORT", _R_PORT); - intent.putExtra("PASSWD", _PASSWD); - intent.putExtra("NICK", _NICK); - intent.putExtra("USER", _USER); - intent.putExtra("COLORMODEL", _RESOLUTION); - - startActivity(intent); + + //Intent intent = getActivity().getApplicationContext().getPackageManager().getLaunchIntentForPackage("com.offsec.nhvnc"); + Intent intent = getActivity().getApplicationContext().getPackageManager().getLaunchIntentForPackage("com.realvnc.viewer.android"); + if (intent == null) { + Toast.makeText(getActivity().getApplicationContext(), "RealVNC app not found!", Toast.LENGTH_SHORT).show(); + } else { + ShellExecuter exe = new ShellExecuter(); + String command; + String uuid = UUID.randomUUID().toString(); + command = "su -c '/data/data/com.offsec.nethunter/files/scripts/bootkali vnc start " + uuid + " " + _NICK + " " + _R_IP + " " + _R_PORT + " " + _PASSWD + "'"; + exe.RunAsRootWithException(command); + + //intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); + //intent.putExtra("com.offsec.nhvnc.EXTRA_CONN_DATA", true); + //intent.putExtra("R_IP", _R_IP); + //intent.putExtra("R_PORT", _R_PORT); + //intent.putExtra("PASSWD", _PASSWD); + //intent.putExtra("NICK", _NICK); + //intent.putExtra("USER", _USER); + //intent.putExtra("COLORMODEL", _RESOLUTION); + //startActivity(intent); + } } } catch (Exception e) { Log.d("errorLaunching", e.toString()); - Toast.makeText(getActivity().getApplicationContext(), "NetHunter VNC not found!", Toast.LENGTH_SHORT).show(); + //Toast.makeText(getActivity().getApplicationContext(), "VNC VNC not found!", Toast.LENGTH_SHORT).show(); } } @@ -151,4 +178,4 @@ private void intentClickListener_NH(final String command) { } } -} \ No newline at end of file +} From f51b3b8ebd57d4eee915786b19f74b19cfc16d46 Mon Sep 17 00:00:00 2001 From: kimocoder Date: Sat, 23 Feb 2019 10:49:38 +0100 Subject: [PATCH 08/25] Script update: bootkali --- assets/scripts/bootkali | 15 ++++++++++++--- src/com/offsec/nethunter/VNCFragment.java | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/assets/scripts/bootkali b/assets/scripts/bootkali index b835d12..5af9d32 100755 --- a/assets/scripts/bootkali +++ b/assets/scripts/bootkali @@ -31,8 +31,8 @@ else if [ "$1" == "beef-xss" ] && [ "$2" == "start" ]; then LANG=en_US.UTF-8 LANGUAGE=en_US.UTF-8 LC_ALL=en_US.UTF-8 $busybox chroot $mnt sudo service beef-xss start - sleep 35 - am start -a android.intent.action.VIEW -d http://127.0.0.1:3000/ui/panel + sleep 10 + am start -a android.intent.action.VIEW -d http://127.0.0.1:3000/ui/authentication fi if [ "$1" == "beef-xss" ] && [ "$2" == "stop" ]; then $busybox chroot $mnt sudo service beef-xss stop @@ -153,7 +153,16 @@ else echo "File not found" else echo "File /data/local/nhsystem/kali-armhf$2 found" - $busybox chroot $mnt /bin/bash $2 + COUNT=0 + until echo volume-up | hid-keyboard /dev/hidg0 keyboard > /dev/null 2>&1; do + sleep 1 + COUNT=$((COUNT+1)) + if [ $COUNT -gt 60 ]; then #60 seconds + exit + fi + done + echo "USB cable plugged" + sh /sdcard/nh_files/modules/duckout.sh fi fi diff --git a/src/com/offsec/nethunter/VNCFragment.java b/src/com/offsec/nethunter/VNCFragment.java index d16f530..076ba43 100644 --- a/src/com/offsec/nethunter/VNCFragment.java +++ b/src/com/offsec/nethunter/VNCFragment.java @@ -3,7 +3,7 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; -import android.content.pm.PackageManager +import android.content.pm.PackageManager; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; From e8f7582ecf3b1d680c3809d8dd07bf0d604e9b80 Mon Sep 17 00:00:00 2001 From: kimocoder Date: Sat, 23 Feb 2019 10:55:50 +0100 Subject: [PATCH 09/25] Update scripts for services / tools --- assets/scripts/check-kaliapache | 3 +-- assets/scripts/check-kalibeef-xss | 2 +- assets/scripts/check-kalidnsmq | 2 +- assets/scripts/check-kalihostapd | 2 +- assets/scripts/check-kalissh | 3 +-- assets/scripts/check-kalivpn | 3 +-- assets/scripts/start-apache | 6 ++---- assets/scripts/start-beef-xss | 8 ++++---- assets/scripts/start-dnsmasq | 4 ++-- assets/scripts/start-hostapd | 5 ++--- assets/scripts/start-ssh | 5 ++--- assets/scripts/start-vpn | 5 ++--- assets/scripts/stop-apache | 6 ++---- assets/scripts/stop-beef-xss | 4 ++-- assets/scripts/stop-dhcp | 4 ++-- assets/scripts/stop-dnsmasq | 5 ++--- assets/scripts/stop-openvpn | 4 ++-- assets/scripts/stop-ssh | 5 ++--- assets/scripts/stop-vpn | 5 ++--- 19 files changed, 34 insertions(+), 47 deletions(-) diff --git a/assets/scripts/check-kaliapache b/assets/scripts/check-kaliapache index 81de114..5a34899 100755 --- a/assets/scripts/check-kaliapache +++ b/assets/scripts/check-kaliapache @@ -1,7 +1,6 @@ unset LD_PRELOAD -if [[ -n $(ps |grep '/usr/sbin/apache2') ]]; then +if [[ $(ps | grep apache2) ]]; then echo "1" else echo "0" fi - diff --git a/assets/scripts/check-kalibeef-xss b/assets/scripts/check-kalibeef-xss index d87000b..b2add22 100755 --- a/assets/scripts/check-kalibeef-xss +++ b/assets/scripts/check-kalibeef-xss @@ -1,5 +1,5 @@ unset LD_PRELOAD -if [[ -n $(ps |grep ruby|grep 104) ]]; then +if [[ $(ps | grep ruby | grep 116) ]]; then echo "1" else echo "0" diff --git a/assets/scripts/check-kalidnsmq b/assets/scripts/check-kalidnsmq index f939272..204ba91 100755 --- a/assets/scripts/check-kalidnsmq +++ b/assets/scripts/check-kalidnsmq @@ -1,5 +1,5 @@ unset LD_PRELOAD -if [[ -n $(ps |grep '/usr/sbin/dnsmasq') ]]; then +if [[ $(ps | grep dnsmasq) ]]; then echo "1" else echo "0" diff --git a/assets/scripts/check-kalihostapd b/assets/scripts/check-kalihostapd index e369c3e..63d6ee5 100755 --- a/assets/scripts/check-kalihostapd +++ b/assets/scripts/check-kalihostapd @@ -1,5 +1,5 @@ unset LD_PRELOAD -if [[ -n $(ps |grep '/usr/sbin/hostapd') ]]; then +if [[ $(ps | grep hostapd) ]]; then echo "1" else echo "0" diff --git a/assets/scripts/check-kalissh b/assets/scripts/check-kalissh index 3641ddf..c263327 100755 --- a/assets/scripts/check-kalissh +++ b/assets/scripts/check-kalissh @@ -1,7 +1,6 @@ unset LD_PRELOAD -if [[ -n $(ps |grep '/usr/sbin/sshd') ]]; then +if [[ $(ps | grep sshd) ]]; then echo "1" else echo "0" fi - diff --git a/assets/scripts/check-kalivpn b/assets/scripts/check-kalivpn index a4f37d5..aa764e6 100755 --- a/assets/scripts/check-kalivpn +++ b/assets/scripts/check-kalivpn @@ -1,7 +1,6 @@ unset LD_PRELOAD -if [[ -n $(ps |grep '/usr/sbin/openvpn') ]]; then +if [[ $(ps | grep openvpn) ]]; then echo "1" else echo "0" fi - diff --git a/assets/scripts/start-apache b/assets/scripts/start-apache index 923a03e..2132b64 100755 --- a/assets/scripts/start-apache +++ b/assets/scripts/start-apache @@ -1,5 +1,3 @@ unset LD_PRELOAD -/system/xbin/chroot /data/local/nhsystem/kali-armhf /bin/bash -c "chmod 777 /dev/null" -LANG=C PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /system/xbin/chroot /data/local/nhsystem/kali-armhf /usr/sbin/apachectl start - - +busybox chroot /data/local/nhsystem/kali-armhf /bin/bash -c "chmod 777 /dev/null" +busybox chroot /data/local/nhsystem/kali-armhf /bin/bash -c "/etc/init.d/apache2 start" diff --git a/assets/scripts/start-beef-xss b/assets/scripts/start-beef-xss index 95a9604..6d650f4 100755 --- a/assets/scripts/start-beef-xss +++ b/assets/scripts/start-beef-xss @@ -1,6 +1,6 @@ unset LD_PRELOAD -chroot /data/local/nhsystem/kali-armhf /bin/bash -c "chmod 777 /dev/null" -chroot /data/local/nhsystem/kali-armhf /bin/bash -c "/etc/init.d/beef-xss start" -sleep 35 -am start -a android.intent.action.VIEW -d http://127.0.0.1:3000/ui/panel +busybox chroot /data/local/nhsystem/kali-armhf /bin/bash -c "chmod 777 /dev/null" +busybox /data/local/nhsystem/kali-armhf /bin/bash -c "/etc/init.d/beef-xss start" +sleep 10 +am start -a android.intent.action.VIEW -d http://127.0.0.1:3000/ui/authentication diff --git a/assets/scripts/start-dnsmasq b/assets/scripts/start-dnsmasq index 97f8b99..107166c 100755 --- a/assets/scripts/start-dnsmasq +++ b/assets/scripts/start-dnsmasq @@ -1,3 +1,3 @@ unset LD_PRELOAD -chroot /data/local/nhsystem/kali-armhf /bin/bash -c "chmod 777 /dev/null" -chroot /data/local/nhsystem/kali-armhf /bin/bash -c "/etc/init.d/dnsmasq start" +busybox chroot /data/local/nhsystem/kali-armhf /bin/bash -c "chmod 777 /dev/null" +busybox chroot /data/local/nhsystem/kali-armhf /bin/bash -c "/etc/init.d/dnsmasq start" diff --git a/assets/scripts/start-hostapd b/assets/scripts/start-hostapd index fb19b3d..c133c09 100755 --- a/assets/scripts/start-hostapd +++ b/assets/scripts/start-hostapd @@ -1,4 +1,3 @@ unset LD_PRELOAD -chroot /data/local/nhsystem/kali-armhf /bin/bash -c "chmod 777 /dev/null" -{ chroot /data/local/nhsystem/kali-armhf /usr/sbin/hostapd /etc/hostapd/hostapd.conf >/dev/null 2>&1 /dev/null 2>&1 Date: Sat, 23 Feb 2019 10:57:06 +0100 Subject: [PATCH 10/25] Update DuckHunterFragment --- src/com/offsec/nethunter/DuckHunterFragment.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/offsec/nethunter/DuckHunterFragment.java b/src/com/offsec/nethunter/DuckHunterFragment.java index f53ab7a..d5a40a0 100644 --- a/src/com/offsec/nethunter/DuckHunterFragment.java +++ b/src/com/offsec/nethunter/DuckHunterFragment.java @@ -553,7 +553,8 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { public static class DuckHunterPreviewFragment extends Fragment { // Error reading chroot_path - public static final String configFilePath = nh.CHROOT_PATH + "/opt/"; + //public static final String configFilePath = nh.CHROOT_PATH + "/opt/"; + public static final String configFilePath = "/data/local/nhsystem/kali-armhf/opt/"; public static final String configFileFilename = "duckout.sh"; @Override From 06d88208e99d14543416ae036ad4b97dd7a36a6d Mon Sep 17 00:00:00 2001 From: kimocoder Date: Sat, 23 Feb 2019 11:20:20 +0100 Subject: [PATCH 11/25] Fix VNCFragment and other fixes --- assets/scripts/bootkali | 2 +- assets/scripts/check-fruity-wifi | 0 assets/scripts/setHID | 5 + assets/scripts/sqlite3 | Bin 0 -> 304996 bytes assets/scripts/start-gpsd | 0 assets/scripts/start-vnc | 23 + assets/scripts/start_gpsd | 0 assets/scripts/stop-gpsd | 0 build.gradle | 6 +- gradle/wrapper/gradle-wrapper.properties | 6 +- nethunter-app.properties | 3 + nethunter-app.xml | 884 ++++++++++++++++++ res/values/strings.xml | 19 + .../nethunter/ChrootManagerFragment.java | 11 +- .../offsec/nethunter/NetHunterFragment.java | 31 +- 15 files changed, 970 insertions(+), 20 deletions(-) mode change 100644 => 100755 assets/scripts/check-fruity-wifi create mode 100755 assets/scripts/setHID create mode 100755 assets/scripts/sqlite3 mode change 100644 => 100755 assets/scripts/start-gpsd mode change 100644 => 100755 assets/scripts/start-vnc mode change 100644 => 100755 assets/scripts/start_gpsd mode change 100644 => 100755 assets/scripts/stop-gpsd create mode 100644 nethunter-app.properties create mode 100644 nethunter-app.xml diff --git a/assets/scripts/bootkali b/assets/scripts/bootkali index 5af9d32..1416d4e 100755 --- a/assets/scripts/bootkali +++ b/assets/scripts/bootkali @@ -103,7 +103,7 @@ else #Open VNC if [ "$1" == "vnc" ] && [ "$2" == "start" ]; then - echo "good" + sh /data/data/com.offsec.nethunter/files/scripts/start-vnc $3 $4 $5 $6 $7 $8 fi # HID Keyboard Command a.k.a Teensy style diff --git a/assets/scripts/check-fruity-wifi b/assets/scripts/check-fruity-wifi old mode 100644 new mode 100755 diff --git a/assets/scripts/setHID b/assets/scripts/setHID new file mode 100755 index 0000000..8c0ab13 --- /dev/null +++ b/assets/scripts/setHID @@ -0,0 +1,5 @@ +#!/system/bin/sh +unset LD_PRELOAD + +current_state="$(getprop sys.usb.state)" +usb_state=("mtp" "adb" "rndis" "rndis,adb" "") diff --git a/assets/scripts/sqlite3 b/assets/scripts/sqlite3 new file mode 100755 index 0000000000000000000000000000000000000000..2c1f671a83289596a565fa9a3cbd1d01fc887595 GIT binary patch literal 304996 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