My job, more specifically is that I am a Programmer/Tester for a company that makes CRM software for various organisations, so I'm often doing things like writing scripts for SQL Server, some VB.NET programming, making changes to certain MS Access files and some C# Web Programming. My role involves doing a lot of different little jobs as well like installing the software on the client server and some troubleshooting and so on which means that significant amounts of my time don't actually involve programming, I don't know if that is normal or not in the IT Industry (I guess this is part of the problem of this being the only IT job in my life). Perhaps it might be better for me to move to a role that involves much more pure development.
Regarding upskilling without formal lessons, not sure what sort of upskilling this would involve, maybe learning new programming languages/people skills?
Okay, great. So the bad news is that you are definitely being underpaid. You should be on $60k minimum in my opinion. The good news is that you already have very marketable skills, and I don't think that you need a computer science degree to progress your career.
If you're happy with what you're doing, start looking for another job doing the same thing (unless you think your employer would consider giving you a raise). Otherwise, think about what you DO want to do. You can earn really good money with both testing and programming, so choose the path you're interested in. Start using your current job to develop skills in that area. I apologise in advance if the advice here is too basic as I'm just guessing at what you might already know.
It sounds like you might have some Microsoft tools at your disposal. Do you have access to Visual Studio? If you want to be a developer, learn the IDE inside and out. You say you have some experience in C#. Choose either that or Java (or any other object-oriented programming language) and do courses on it online. If you're interested in mobile app development, learn Java for Android or Objective-C for iOS. Google just released their own (free!) series of videos and exercise to teach people how to program for Android, but there are plenty of free ones out there. Download Android Studio and have a go. Alternatively, you could go the web development route.
If you want to get into testing, think about what kind of testing you want to do. There's manual functional testing, which is making sure that the app works as per the business requirements. I don't know how formal the processes are where you work, but I know that when I first got into testing a few years ago, there was no structure behind it. Learn best practices for testing and implement them. For example, write a test plan. Work to formalise requirements-- what are the key processes that should be tested? Create test cases with step-by-step instructions and expected results. During execution, raise defects and track them separately. If your company uses TFS (Visual Studio Team Foundation Server), use that. Otherwise use free tools like Bugzilla. Study for your ISTQB Foundations certification in the meantime.
There's also technical testing, which is what I happen to do now. You could brush up on automation or performance testing. Learn to write an automated test suite to regression test your company's software so that you're not manually repeating the same tests after every release. You're not going to be able to write tests for everything, but you can do it for the basics, like logging in, doing a search for a customer, browsing through his history, etc. (I'm guessing here, since you said CRM.) If you have Visual Studio, you can use that - otherwise, Selenium is a good open source alternative. Selenium IDE is a good intro to automation, and you can jump from there to WebDriver using Eclipse.
You can also learn about performance testing, which is about simulating volumes of users hitting the site to determine how well it performs under load. After all, your company's software is client-facing. Visual Studio Ultimate or Enterprise both support performance tests using the Web Performance/Load Testing protocol. If you don't have Visual Studio, learn it in JMeter - again a great open source alternative.
No, not all IT jobs require 100% programming. Even devs spend significant amounts of time working with the business to clarify requirements, troubleshooting defects with testers, and documenting new code. Technical testing is part programming and part talking to people. Business analysts usually don't need to do any coding at all.
I think with very little (non-uni) learning and some work, you could easily command $70-80k in a few months. Good luck! :)